diff options
Diffstat (limited to 'sd/qa/unit/dialogs-test.cxx')
-rw-r--r-- | sd/qa/unit/dialogs-test.cxx | 648 |
1 files changed, 648 insertions, 0 deletions
diff --git a/sd/qa/unit/dialogs-test.cxx b/sd/qa/unit/dialogs-test.cxx new file mode 100644 index 000000000..4eb9d9884 --- /dev/null +++ b/sd/qa/unit/dialogs-test.cxx @@ -0,0 +1,648 @@ +/* -*- 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/. + */ + +#include <memory> +#include <sal/config.h> +#include <test/screenshot_test.hxx> +#include <com/sun/star/lang/XComponent.hpp> +#include <com/sun/star/presentation/AnimationEffect.hpp> +#include <com/sun/star/presentation/ClickAction.hpp> + +#include <sfx2/sfxdlg.hxx> +#include <svl/intitem.hxx> +#include <svl/stritem.hxx> +#include <svl/aeitem.hxx> +#include <editeng/colritem.hxx> +#include <svx/xfillit0.hxx> +#include <vcl/svapp.hxx> + +#include <drawdoc.hxx> +#include <DrawDocShell.hxx> + +#include <sdabstdlg.hxx> +#include <sdpage.hxx> +#include <unomodel.hxx> +#include <ViewShell.hxx> +#include <drawview.hxx> +#include <sdattr.hrc> +#include <strings.hrc> +#include <sdresid.hxx> +#include <sdattr.hxx> + +using namespace ::com::sun::star; + +/// Test opening a dialog in sd +class SdDialogsTest : public ScreenshotTest +{ +private: + /// Document and ComponentContext + uno::Reference<lang::XComponent> mxComponent; + + /// initially created SdAbstractDialogFactory and pointer to document + SdAbstractDialogFactory* mpFact; + SdXImpressDocument* mpImpressDocument; + + /// on-demand created instances required for various dialogs to open + ::sd::DrawDocShell* mpDocShell; + ::sd::ViewShell* mpViewShell; + ::sd::DrawView* mpDrawView; + + std::unique_ptr<SfxItemSet> mpSfxItemSetFromSdrObject; + std::unique_ptr<SfxItemSet> mpEmptySfxItemSet; + std::unique_ptr<SfxItemSet> mpEmptyFillStyleSfxItemSet; + + /// helpers + SdAbstractDialogFactory* getSdAbstractDialogFactory(); + SdXImpressDocument* getSdXImpressDocument(); + ::sd::DrawDocShell* getDocShell(); + ::sd::ViewShell* getViewShell(); + ::sd::DrawView* getDrawView(); + const SfxItemSet& getSfxItemSetFromSdrObject(); + const SfxItemSet& getEmptySfxItemSet(); + const SfxItemSet& getEmptyFillStyleSfxItemSet(); + + /// helper method to populate KnownDialogs, called in setUp(). Needs to be + /// written and has to add entries to KnownDialogs + virtual void registerKnownDialogsByID(mapType& rKnownDialogs) override; + + /// dialog creation for known dialogs by ID. Has to be implemented for + /// each registered known dialog + virtual VclPtr<VclAbstractDialog> createDialogByID(sal_uInt32 nID) override; + +public: + SdDialogsTest(); + + virtual void setUp() override; + + void tearDown() override; + + // try to open a dialog + void openAnyDialog(); + + CPPUNIT_TEST_SUITE(SdDialogsTest); + CPPUNIT_TEST(openAnyDialog); + CPPUNIT_TEST_SUITE_END(); +}; + +SdDialogsTest::SdDialogsTest() +: mxComponent(), + mpFact(nullptr), + mpImpressDocument(nullptr), + mpDocShell(nullptr), + mpViewShell(nullptr), + mpDrawView(nullptr) +{ +} + +void SdDialogsTest::setUp() +{ + ScreenshotTest::setUp(); + + mpFact = SdAbstractDialogFactory::Create(); + mxComponent = loadFromDesktop("private:factory/simpress", "com.sun.star.presentation.PresentationDocument"); + CPPUNIT_ASSERT(mxComponent.is()); + + mpImpressDocument = dynamic_cast<SdXImpressDocument*>(mxComponent.get()); + CPPUNIT_ASSERT(mpImpressDocument); +} + +void SdDialogsTest::tearDown() +{ + mpSfxItemSetFromSdrObject.reset(); + mpEmptySfxItemSet.reset(); + mpEmptyFillStyleSfxItemSet.reset(); + mxComponent->dispose(); + ScreenshotTest::tearDown(); +} + +SdAbstractDialogFactory* SdDialogsTest::getSdAbstractDialogFactory() +{ + return mpFact; +} + +SdXImpressDocument* SdDialogsTest::getSdXImpressDocument() +{ + return mpImpressDocument; +} + +::sd::DrawDocShell* SdDialogsTest::getDocShell() +{ + if (!mpDocShell) + { + mpDocShell = getSdXImpressDocument()->GetDocShell(); + CPPUNIT_ASSERT(mpDocShell); + } + + return mpDocShell; +} + +::sd::ViewShell* SdDialogsTest::getViewShell() +{ + if (!mpViewShell) + { + mpViewShell = getDocShell()->GetViewShell(); + CPPUNIT_ASSERT(mpViewShell); + } + + return mpViewShell; +} + +::sd::DrawView* SdDialogsTest::getDrawView() +{ + if (!mpDrawView) + { + mpDrawView = dynamic_cast<::sd::DrawView*>(getViewShell()->GetDrawView()); + CPPUNIT_ASSERT(mpDrawView); + } + + return mpDrawView; +} + +const SfxItemSet& SdDialogsTest::getSfxItemSetFromSdrObject() +{ + if (!mpSfxItemSetFromSdrObject) + { + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + SdPage* pSdPage = pDrawDoc->GetSdPage(0, PageKind::Standard); + CPPUNIT_ASSERT(pSdPage); + SdrObject* pSdrObj = pSdPage->GetObj(0); + CPPUNIT_ASSERT(pSdrObj); + mpSfxItemSetFromSdrObject.reset( new SfxItemSet( pSdrObj->GetMergedItemSet() ) ); + CPPUNIT_ASSERT(mpSfxItemSetFromSdrObject); + } + + return *mpSfxItemSetFromSdrObject; +} + +const SfxItemSet& SdDialogsTest::getEmptySfxItemSet() +{ + if (!mpEmptySfxItemSet) + { + // needs an SfxItemSet, use the one from the 1st object + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + mpEmptySfxItemSet.reset( new SfxItemSet(pDrawDoc->GetItemPool()) ); + CPPUNIT_ASSERT(mpEmptySfxItemSet); + } + + return *mpEmptySfxItemSet; +} + +const SfxItemSet& SdDialogsTest::getEmptyFillStyleSfxItemSet() +{ + if (!mpEmptyFillStyleSfxItemSet) + { + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + mpEmptyFillStyleSfxItemSet.reset( new SfxItemSet(pDrawDoc->GetItemPool(), svl::Items<XATTR_FILL_FIRST, XATTR_FILL_LAST>{}) ); + CPPUNIT_ASSERT(mpEmptyFillStyleSfxItemSet); + mpEmptyFillStyleSfxItemSet->Put(XFillStyleItem(drawing::FillStyle_NONE)); + } + + return *mpEmptyFillStyleSfxItemSet; +} + +void SdDialogsTest::registerKnownDialogsByID(mapType& rKnownDialogs) +{ + // fill map of known dialogs + rKnownDialogs["modules/simpress/ui/publishingdialog.ui"] = 0; + rKnownDialogs["modules/sdraw/ui/breakdialog.ui"] = 1; + rKnownDialogs["modules/sdraw/ui/copydlg.ui"] = 2; + rKnownDialogs["modules/simpress/ui/customslideshows.ui"] = 3; + rKnownDialogs["modules/sdraw/ui/drawchardialog.ui"] = 4; + rKnownDialogs["modules/sdraw/ui/drawpagedialog.ui"] = 5; + rKnownDialogs["modules/simpress/ui/dlgfield.ui"] = 6; + rKnownDialogs["modules/sdraw/ui/dlgsnap.ui"] = 7; + rKnownDialogs["modules/sdraw/ui/insertlayer.ui"] = 8; + rKnownDialogs["modules/sdraw/ui/insertslidesdialog.ui"] = 9; + rKnownDialogs["modules/sdraw/ui/crossfadedialog.ui"] = 10; + rKnownDialogs["modules/sdraw/ui/bulletsandnumbering.ui"] = 11; + rKnownDialogs["modules/sdraw/ui/drawparadialog.ui"] = 12; + rKnownDialogs["modules/simpress/ui/presentationdialog.ui"] = 13; + rKnownDialogs["modules/simpress/ui/remotedialog.ui"] = 14; + rKnownDialogs["modules/sdraw/ui/drawprtldialog.ui"] = 15; + rKnownDialogs["modules/simpress/ui/slidedesigndialog.ui"] = 16; + rKnownDialogs["modules/simpress/ui/templatedialog.ui"] = 17; + rKnownDialogs["modules/simpress/ui/interactiondialog.ui"] = 18; + rKnownDialogs["modules/sdraw/ui/vectorize.ui"] = 19; + rKnownDialogs["modules/simpress/ui/photoalbum.ui"] = 20; + rKnownDialogs["modules/simpress/ui/masterlayoutdlg.ui"] = 21; + rKnownDialogs["modules/simpress/ui/headerfooterdialog.ui"] = 22; +} + +VclPtr<VclAbstractDialog> SdDialogsTest::createDialogByID(sal_uInt32 nID) +{ + VclPtr<VclAbstractDialog> pRetval; + + if (getSdAbstractDialogFactory()) + { + switch (nID) + { + case 0: + { + // CreateSdPublishingDlg(vcl::Window* pWindow, DocumentType eDocType) override; + // this dialog does not need much, not even a SdDrawDocument. OTOH + // it is more a 'wizard' in that it has prev/next buttons and implicitly + // multiple pages. To make use of that it is necessary that the implementation + // supports the 'Screenshot interface' + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateSdPublishingDlg( + parent == nullptr ? nullptr : parent->GetFrameWeld(), + DocumentType::Impress); + break; + } + case 1: + { + // CreateBreakDlg(weld::Window* pWindow, ::sd::DrawView* pDrView, ::sd::DrawDocShell* pShell, sal_uLong nSumActionCount, sal_uLong nObjCount) override; + // this dialog requires pDrawView. It does not show much when + // there is no object selected that can be broken up. For better + // results it might be necessary to add/select an object that + // delivers a good metafile (which is the base for breaking) + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateBreakDlg( + parent == nullptr ? nullptr : parent->GetFrameWeld(), + getDrawView(), + getDocShell(), + 0, + 0); + break; + } + case 2: + { + // needs an SfxItemSet, use the one from the 1st object + pRetval = getSdAbstractDialogFactory()->CreateCopyDlg( + getViewShell()->GetFrameWeld(), + getSfxItemSetFromSdrObject(), + getDrawView()); + break; + } + case 3: + { + // CreateSdCustomShowDlg(SdDrawDocument& rDrawDoc) = 0; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + + pRetval = getSdAbstractDialogFactory()->CreateSdCustomShowDlg( + getViewShell()->GetFrameWeld(), *pDrawDoc); + break; + } + case 4: + { + // CreateSdTabCharDialog(const SfxItemSet* pAttr, SfxObjectShell* pDocShell) override; + // needs an SfxItemSet, use an empty constructed one + // needs a 'SfxObjectShell* pDocShell', crashes without + pRetval = getSdAbstractDialogFactory()->CreateSdTabCharDialog( + getViewShell()->GetFrameWeld(), + &getEmptySfxItemSet(), + getDocShell()); + break; + } + case 5: + { + // CreateSdTabPageDialog(const SfxItemSet* pAttr, SfxObjectShell* pDocShell, bool bAreaPage = true, bool bIsImpressDoc) override; + // needs a special SfxItemSet with merged content from page and other stuff, crashes without that (2nd page) + // needs a 'SfxObjectShell* pDocShell', crashes without. Also sufficient: FillStyleItemSet with XFILL_NONE set + pRetval = getSdAbstractDialogFactory()->CreateSdTabPageDialog( + getViewShell()->GetFrameWeld(), + &getEmptyFillStyleSfxItemSet(), + getDocShell(), + true, false); + break; + } + case 6: + { + // CreateSdModifyFieldDlg(weld::Window* pWindow, const SvxFieldData* pInField, const SfxItemSet& rSet) override; + pRetval = getSdAbstractDialogFactory()->CreateSdModifyFieldDlg( + getViewShell()->GetFrameWeld(), + nullptr, + getEmptySfxItemSet()); + break; + } + case 7: + { + // CreateSdSnapLineDlg(const SfxItemSet& rInAttrs, ::sd::View* pView) override; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + SfxItemSet aNewAttr(pDrawDoc->GetItemPool(), svl::Items<ATTR_SNAPLINE_START, ATTR_SNAPLINE_END>{}); + aNewAttr.Put(SfxInt32Item(ATTR_SNAPLINE_X, 0)); + aNewAttr.Put(SfxInt32Item(ATTR_SNAPLINE_Y, 0)); + pRetval = getSdAbstractDialogFactory()->CreateSdSnapLineDlg( + getViewShell()->GetFrameWeld(), + aNewAttr, + getDrawView()); + break; + } + case 8: + { + // CreateSdInsertLayerDlg(const SfxItemSet& rInAttrs, bool bDeletable, const OUString& aStr) override; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + SfxItemSet aNewAttr(pDrawDoc->GetItemPool(), svl::Items<ATTR_LAYER_START, ATTR_LAYER_END>{}); + const OUString aLayerName = SdResId(STR_LAYER); // + OUString::number(2); + aNewAttr.Put(makeSdAttrLayerName(aLayerName)); + aNewAttr.Put(makeSdAttrLayerTitle()); + aNewAttr.Put(makeSdAttrLayerDesc()); + aNewAttr.Put(makeSdAttrLayerVisible()); + aNewAttr.Put(makeSdAttrLayerPrintable()); + aNewAttr.Put(makeSdAttrLayerLocked()); + aNewAttr.Put(makeSdAttrLayerThisPage()); + pRetval = getSdAbstractDialogFactory()->CreateSdInsertLayerDlg( + getViewShell()->GetFrameWeld(), + aNewAttr, + true, // alternative: false + SdResId(STR_INSERTLAYER) /* alternative: STR_MODIFYLAYER */); + break; + } + case 9: + { + // CreateSdInsertPagesObjsDlg(const SdDrawDocument* pDoc, SfxMedium* pSfxMedium, const OUString& rFileName) override; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + const OUString aFileName("foo"); + pRetval = getSdAbstractDialogFactory()->CreateSdInsertPagesObjsDlg( + getViewShell()->GetFrameWeld(), + pDrawDoc, + nullptr, + aFileName); + break; + } + case 10: + { + // CreateMorphDlg(weld::Window* pParent, const SdrObject* pObj1, const SdrObject* pObj2) override; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + SdPage* pSdPage = pDrawDoc->GetSdPage(0, PageKind::Standard); + CPPUNIT_ASSERT(pSdPage); + SdrObject* pSdrObj = pSdPage->GetObj(0); + // using one SdrObject is okay, none crashes + CPPUNIT_ASSERT(pSdrObj); + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateMorphDlg( + parent == nullptr ? nullptr : parent->GetFrameWeld(), + pSdrObj, + pSdrObj); + break; + } + case 11: + { + // CreateSdOutlineBulletTabDlg(const SfxItemSet* pAttr, ::sd::View* pView = nullptr) override; + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateSdOutlineBulletTabDlg( + parent == nullptr ? nullptr : parent->GetFrameWeld(), + &getEmptySfxItemSet(), + getDrawView()); + break; + } + case 12: + { + // CreateSdParagraphTabDlg(const SfxItemSet* pAttr) override; + pRetval = getSdAbstractDialogFactory()->CreateSdParagraphTabDlg( + getViewShell()->GetFrameWeld(), + &getEmptySfxItemSet()); + break; + } + case 13: + { + // CreateSdStartPresentationDlg(weld::Window* pWindow, const SfxItemSet& rInAttrs, const std::vector<OUString> &rPageNames, SdCustomShowList* pCSList) override; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + SfxItemSet aDlgSet(pDrawDoc->GetItemPool(), svl::Items<ATTR_PRESENT_START, ATTR_PRESENT_END>{}); + ::sd::PresentationSettings& rPresentationSettings = pDrawDoc->getPresentationSettings(); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_ALL, rPresentationSettings.mbAll)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_CUSTOMSHOW, rPresentationSettings.mbCustomShow)); + aDlgSet.Put(SfxStringItem(ATTR_PRESENT_DIANAME, OUString())); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_ENDLESS, rPresentationSettings.mbEndless)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_MANUEL, rPresentationSettings.mbManual)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_MOUSE, rPresentationSettings.mbMouseVisible)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_PEN, rPresentationSettings.mbMouseAsPen)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_ANIMATION_ALLOWED, rPresentationSettings.mbAnimationAllowed)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_CHANGE_PAGE, !rPresentationSettings.mbLockedPages)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_ALWAYS_ON_TOP, rPresentationSettings.mbAlwaysOnTop)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_FULLSCREEN, rPresentationSettings.mbFullScreen)); + aDlgSet.Put(SfxUInt32Item(ATTR_PRESENT_PAUSE_TIMEOUT, rPresentationSettings.mnPauseTimeout)); + aDlgSet.Put(SfxBoolItem(ATTR_PRESENT_SHOW_PAUSELOGO, rPresentationSettings.mbShowPauseLogo)); + //SdOptions* pOptions = SD_MOD()->GetSdOptions(DocumentType::Impress); + aDlgSet.Put(SfxInt32Item(ATTR_PRESENT_DISPLAY, 0 /*pOptions->GetDisplay()*/)); + vcl::Window* pWin = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateSdStartPresentationDlg( + pWin ? pWin->GetFrameWeld() : nullptr, + aDlgSet, + std::vector<OUString>(), + nullptr); + break; + } + case 14: + { + auto const parent = Application::GetDefDialogParent(); + // CreateRemoteDialog(vcl::Window* pWindow) override; // ad for RemoteDialog + pRetval = getSdAbstractDialogFactory()->CreateRemoteDialog( + parent == nullptr ? nullptr : parent->GetFrameWeld()); + break; + } + case 15: + { + // CreateSdPresLayoutTemplateDlg(SfxObjectShell* pDocSh, weld::Window* pParent, const SdResId& DlgId, SfxStyleSheetBase& rStyleBase, PresentationObjects ePO, SfxStyleSheetBasePool* pSSPool) override; + // use STR_PSEUDOSHEET_TITLE configuration, see futempl.cxx for more possible configurations + // may be nicer on the long run to take a configuration which represents a selected SdrObject + SfxStyleSheetBasePool* pStyleSheetPool = getDocShell()->GetStyleSheetPool(); + CPPUNIT_ASSERT(pStyleSheetPool); + SfxStyleSheetBase* pStyleSheet = pStyleSheetPool->First(SfxStyleFamily::Page); + CPPUNIT_ASSERT(pStyleSheet); + vcl::Window* pWin = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateSdPresLayoutTemplateDlg( + getDocShell(), + pWin ? pWin->GetFrameWeld() : nullptr, + false, + *pStyleSheet, + PresentationObjects::Title, + pStyleSheetPool); + break; + } + case 16: + { + // CreateSdPresLayoutDlg(::sd::DrawDocShell* pDocShell, vcl::Window* pWindow, const SfxItemSet& rInAttrs) override; + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateSdPresLayoutDlg( + parent == nullptr ? nullptr : parent->GetFrameWeld(), + getDocShell(), + getEmptySfxItemSet()); + break; + } + case 17: + { + // CreateSdTabTemplateDlg(const SfxObjectShell* pDocShell, SfxStyleSheetBase& rStyleBase, SdrModel* pModel, SdrView* pView) override; + // pretty similar to CreateSdPresLayoutTemplateDlg, see above + // may be nicer on the long run to take a configuration which represents a selected SdrObject + SfxStyleSheetBasePool* pStyleSheetPool = getDocShell()->GetStyleSheetPool(); + CPPUNIT_ASSERT(pStyleSheetPool); + SfxStyleSheetBase* pStyleSheet = pStyleSheetPool->First(SfxStyleFamily::Pseudo); + CPPUNIT_ASSERT(pStyleSheet); + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + pRetval = getSdAbstractDialogFactory()->CreateSdTabTemplateDlg( + getViewShell()->GetFrameWeld(), + getDocShell(), + *pStyleSheet, + pDrawDoc, + getDrawView()); + break; + } + case 18: + { + // CreatSdActionDialog(const SfxItemSet* pAttr, ::sd::View* pView) override; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + SfxItemSet aSet(pDrawDoc->GetItemPool(), svl::Items<ATTR_ANIMATION_START, ATTR_ACTION_END>{}); + aSet.Put(SfxBoolItem(ATTR_ANIMATION_ACTIVE, false)); + aSet.Put(SfxUInt16Item(ATTR_ANIMATION_EFFECT, sal_uInt16(presentation::AnimationEffect_NONE))); + aSet.Put(SfxUInt16Item(ATTR_ANIMATION_TEXTEFFECT, sal_uInt16(presentation::AnimationEffect_NONE))); + aSet.InvalidateItem(ATTR_ANIMATION_SPEED); + aSet.Put(SfxBoolItem(ATTR_ANIMATION_FADEOUT, false)); + aSet.Put(SvxColorItem(COL_LIGHTGRAY, ATTR_ANIMATION_COLOR)); + aSet.Put(SfxBoolItem(ATTR_ANIMATION_INVISIBLE, false)); + aSet.Put(SfxBoolItem(ATTR_ANIMATION_SOUNDON, false)); + aSet.InvalidateItem(ATTR_ANIMATION_SOUNDFILE); + aSet.Put(SfxBoolItem(ATTR_ANIMATION_PLAYFULL, false)); + aSet.Put(SfxUInt16Item(ATTR_ACTION, sal_uInt16(presentation::ClickAction_NONE))); + aSet.InvalidateItem(ATTR_ACTION_FILENAME); + aSet.Put(SfxUInt16Item(ATTR_ACTION_EFFECT, sal_uInt16(presentation::AnimationEffect_NONE))); + aSet.InvalidateItem(ATTR_ACTION_EFFECTSPEED); + aSet.Put(SfxBoolItem(ATTR_ACTION_SOUNDON, false)); + aSet.Put(SfxBoolItem(ATTR_ACTION_PLAYFULL, false)); + pRetval = getSdAbstractDialogFactory()->CreatSdActionDialog( + getViewShell()->GetFrameWeld(), + &aSet, + getDrawView()); + break; + } + case 19: + { + // CreateSdVectorizeDlg(weld::Window* pParent, const Bitmap& rBmp, ::sd::DrawDocShell* pDocShell) override; + // works well with empty Bitmap, but my be nicer with setting one + Bitmap aEmptyBitmap; + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateSdVectorizeDlg( + parent == nullptr ? nullptr : parent->GetFrameWeld(), + aEmptyBitmap, + getDocShell()); + break; + } + case 20: + { + // CreateSdPhotoAlbumDialog(weld::Window* pWindow, SdDrawDocument* pDoc) override; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateSdPhotoAlbumDialog( + parent == nullptr ? nullptr : parent->GetFrameWeld(), + pDrawDoc); + break; + } + case 21: + { + // CreateMasterLayoutDialog(weld::Window* pParent, SdDrawDocument* pDoc, SdPage*) override; + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + SdPage* pSdPage = pDrawDoc->GetSdPage(0, PageKind::Standard); + CPPUNIT_ASSERT(pSdPage); + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateMasterLayoutDialog( + parent == nullptr ? nullptr : parent->GetFrameWeld(), + pDrawDoc, + pSdPage); + break; + } + case 22: + { + // CreateHeaderFooterDialog(sd::ViewShell* pViewShell, weld::Window* pParent, SdDrawDocument* pDoc, SdPage* pCurrentPage) override; + // This is a hard case, for two reasons: + // - It uses BaseClass TabPage which has a very sparse interface, + // need to add 'Screenshot interface' there and implement + // - The concrete dialog has two TabPages which use the *same* + // .ui file, so extended markup will be needed to differ these two + // cases + SdDrawDocument* pDrawDoc = getSdXImpressDocument()->GetDoc(); + CPPUNIT_ASSERT(pDrawDoc); + SdPage* pSdPage = pDrawDoc->GetSdPage(0, PageKind::Standard); + CPPUNIT_ASSERT(pSdPage); + auto const parent = Application::GetDefDialogParent(); + pRetval = getSdAbstractDialogFactory()->CreateHeaderFooterDialog( + getViewShell(), + parent == nullptr ? nullptr : parent->GetFrameWeld(), + pDrawDoc, + pSdPage); + break; + } + default: + break; + } + } + + return pRetval; +} + +void SdDialogsTest::openAnyDialog() +{ + /// example how to process an input file containing the UXMLDescriptions of the dialogs + /// to dump + if (true) + { + processDialogBatchFile("sd/qa/unit/data/dialogs-test.txt"); + } + + /// example how to dump all known dialogs + if ((false)) + { + processAllKnownDialogs(); + } + + /// example how to dump exactly one known dialog + if ((false)) + { + // example for SfxTabDialog: 5 -> "modules/sdraw/ui/drawpagedialog.ui" + // example for TabDialog: 22 -> "modules/simpress/ui/headerfooterdialog.ui" + // example for self-adapted wizard: 0 -> "modules/simpress/ui/publishingdialog.ui" + ScopedVclPtr<VclAbstractDialog> pDlg(createDialogByID(5)); + + if (pDlg) + { + // known dialog, dump screenshot to path + dumpDialogToPath(*pDlg); + } + else + { + // unknown dialog, should not happen in this basic loop. + // You have probably forgotten to add a case and + // implementation to createDialogByID, please do this + } + } + + /// example how to dump a dialog using fallback functionality + if ((false)) + { + // unknown dialog, try fallback to generic created + // VclBuilder-generated instance. Keep in mind that Dialogs + // using this mechanism will probably not be layouted well + // since the setup/initialization part is missing. Thus, + // only use for fallback when only the UI file is available. + // + // Take any example here, it's only for demonstration - using + // even a known one to demonstrate the fallback possibility + const OString aUIXMLDescription("modules/sdraw/ui/breakdialog.ui"); + + dumpDialogToPath(aUIXMLDescription); + } +} + +CPPUNIT_TEST_SUITE_REGISTRATION(SdDialogsTest); + +CPPUNIT_PLUGIN_IMPLEMENT(); + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |