/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ /* * This file is part of the LibreOffice project. * * This Source Code Form is subject to the terms of the Mozilla Public * License, v. 2.0. If a copy of the MPL was not distributed with this * file, You can obtain one at http://mozilla.org/MPL/2.0/.
*/
// When shift-clicking on that fly frame: auto& rSpzFormats = *pDoc->GetSpzFrameFormats(); auto pFrameFormat = dynamic_cast<SwFlyFrameFormat*>(rSpzFormats[0]);
CPPUNIT_ASSERT(pFrameFormat);
SwFlyFrame* pFlyFrame = pFrameFormat->GetFrame();
vcl::Window& rEditWin = getSwDocShell()->GetView()->GetEditWin();
Point aFlyCenter = rEditWin.LogicToPixel(pFlyFrame->getFrameArea().Center());
MouseEvent aClickEvent(aFlyCenter, 1, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT, KEY_SHIFT);
rEditWin.MouseButtonDown(aClickEvent);
rEditWin.MouseButtonUp(aClickEvent);
// Then make sure that the fly frame is selected:
SelectionType eType = pWrtShell->GetSelectionType(); // Without the accompanying fix in place, this test would have failed with: // - Expected: 2 (SelectionType::Graphic) // - Actual : 1 (SelectionType::Text) // i.e. the fly frame was not selected, while a plain click or ctrl-click selected it.
CPPUNIT_ASSERT_EQUAL(SelectionType::Graphic, eType);
}
namespace
{ /// Interception implementation that catches the graphic dialog. class GraphicDialogInterceptor : public cppu::WeakImplHelper<frame::XDispatchProviderInterceptor>
{
uno::Reference<frame::XDispatchProvider> m_xMaster;
uno::Reference<frame::XDispatchProvider> m_xSlave; int m_nGraphicDialogs = 0;
int GraphicDialogInterceptor::GetGraphicDialogs() const { return m_nGraphicDialogs; }
CPPUNIT_TEST_FIXTURE(Test, testShiftDoubleClickOnImage)
{ // Given a document with a fly frame, and an interceptor to catch the graphic dialog:
createSwDoc();
SwDoc* pDoc = getSwDoc();
SwWrtShell* pWrtShell = getSwDocShell()->GetWrtShell();
uno::Reference<lang::XMultiServiceFactory> xMSF(mxComponent, uno::UNO_QUERY);
uno::Reference<text::XTextDocument> xTextDocument(mxComponent, uno::UNO_QUERY);
uno::Reference<text::XText> xText = xTextDocument->getText();
uno::Reference<text::XTextCursor> xCursor = xText->createTextCursor();
uno::Reference<beans::XPropertySet> xTextGraphic(
xMSF->createInstance(u"com.sun.star.text.TextGraphicObject"_ustr), uno::UNO_QUERY);
xTextGraphic->setPropertyValue(u"AnchorType"_ustr,
uno::Any(text::TextContentAnchorType_AS_CHARACTER));
xTextGraphic->setPropertyValue(u"Size"_ustr, uno::Any(awt::Size(5000, 5000)));
uno::Reference<text::XTextContent> xTextContent(xTextGraphic, uno::UNO_QUERY);
xText->insertTextContent(xCursor, xTextContent, false);
pWrtShell->SttEndDoc(/*bStt=*/false);
uno::Reference<frame::XModel> xModel(mxComponent, uno::UNO_QUERY);
uno::Reference<frame::XDispatchProviderInterception> xRegistration(
xModel->getCurrentController()->getFrame(), uno::UNO_QUERY);
rtl::Reference pInterceptor(new GraphicDialogInterceptor);
xRegistration->registerDispatchProviderInterceptor(pInterceptor);
// When shift-double-clicking on that fly frame: auto& rSpzFormats = *pDoc->GetSpzFrameFormats(); auto pFrameFormat = dynamic_cast<SwFlyFrameFormat*>(rSpzFormats[0]);
CPPUNIT_ASSERT(pFrameFormat);
SwFlyFrame* pFlyFrame = pFrameFormat->GetFrame();
vcl::Window& rEditWin = getSwDocShell()->GetView()->GetEditWin();
Point aFlyCenter = rEditWin.LogicToPixel(pFlyFrame->getFrameArea().Center());
MouseEvent aClickEvent(aFlyCenter, 1, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT, KEY_SHIFT);
rEditWin.MouseButtonDown(aClickEvent);
rEditWin.MouseButtonUp(aClickEvent);
aClickEvent
= MouseEvent(aFlyCenter, 2, MouseEventModifiers::SIMPLECLICK, MOUSE_LEFT, KEY_SHIFT);
rEditWin.MouseButtonDown(aClickEvent);
rEditWin.MouseButtonUp(aClickEvent);
// Then make sure that the fly frame's dialog is dispatched: int nGraphicDialogs = pInterceptor->GetGraphicDialogs(); // Without the accompanying fix in place, this test would have failed with: // - Expected greater than: 0 (2) // - Actual : 0 // i.e. the fly frame's dialog was not dispatched, while a plain click or ctrl-click dispatched // it.
CPPUNIT_ASSERT_GREATER(0, nGraphicDialogs);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.