Kaydet (Commit) 6b5b2bbd authored tarafından Caolán McNamara's avatar Caolán McNamara

weld SwDropCapsDlg

Change-Id: Ibd01c0fb54f0e3b361d5e1f196bfeb44a1fcb99c
Reviewed-on: https://gerrit.libreoffice.org/60805
Tested-by: Jenkins
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst b613eeeb
...@@ -27,6 +27,7 @@ ...@@ -27,6 +27,7 @@
#include <vcl/dialog.hxx> #include <vcl/dialog.hxx>
#include <vcl/floatwin.hxx> #include <vcl/floatwin.hxx>
#include <vcl/timer.hxx> #include <vcl/timer.hxx>
#include <vcl/weld.hxx>
class TabPage; class TabPage;
class SfxTabPage; class SfxTabPage;
...@@ -189,6 +190,38 @@ private: ...@@ -189,6 +190,38 @@ private:
std::unique_ptr<SingleTabDlgImpl> pImpl; std::unique_ptr<SingleTabDlgImpl> pImpl;
}; };
class SFX2_DLLPUBLIC SfxSingleTabDialogController : public weld::GenericDialogController
{
private:
VclPtr<SfxTabPage> m_xSfxPage;
std::unique_ptr<SfxItemSet> m_xOutputSet;
const SfxItemSet* m_pInputSet;
public:
SfxSingleTabDialogController(weld::Window *pParent, const SfxItemSet& rOptionsSet,
const OUString& rUIXMLDescription = OUString("sfx/ui/singletabdialog.ui"),
const OString& rID = OString("SingleTabDialog"));
virtual weld::Container* get_content_area() { return m_xContainer.get(); }
virtual ~SfxSingleTabDialogController() override;
void SetTabPage(SfxTabPage* pTabPage);
SfxTabPage* GetTabPage() const { return m_xSfxPage; }
weld::Button& GetOKButton() const { return *m_xOKBtn; }
const SfxItemSet* GetOutputItemSet() const { return m_xOutputSet.get(); }
const SfxItemSet* GetInputItemSet() const { return m_pInputSet; }
protected:
std::unique_ptr<weld::Container> m_xContainer;
std::unique_ptr<weld::Button> m_xOKBtn;
std::unique_ptr<weld::Button> m_xHelpBtn;
void CreateOutputItemSet(const SfxItemSet& rInput);
DECL_DLLPRIVATE_LINK(OKHdl_Impl, weld::Button&, void);
};
#endif #endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
...@@ -733,4 +733,112 @@ void SfxSingleTabDialog::SetTabPage(SfxTabPage* pTabPage) ...@@ -733,4 +733,112 @@ void SfxSingleTabDialog::SetTabPage(SfxTabPage* pTabPage)
} }
} }
SfxSingleTabDialogController::SfxSingleTabDialogController(weld::Window *pParent, const SfxItemSet& rSet,
const OUString& rUIXMLDescription, const OString& rID)
: GenericDialogController(pParent, rUIXMLDescription, rID)
, m_pInputSet(&rSet)
, m_xContainer(m_xDialog->weld_content_area())
, m_xOKBtn(m_xBuilder->weld_button("ok"))
, m_xHelpBtn(m_xBuilder->weld_button("help"))
{
m_xOKBtn->connect_clicked(LINK(this, SfxSingleTabDialogController, OKHdl_Impl));
}
SfxSingleTabDialogController::~SfxSingleTabDialogController()
{
m_xSfxPage.disposeAndClear();
}
/* [Description]
Insert a (new) TabPage; an existing page is deleted.
The passed on page is initialized with the initially given Itemset
through calling Reset().
*/
void SfxSingleTabDialogController::SetTabPage(SfxTabPage* pTabPage)
{
m_xSfxPage.disposeAndClear();
m_xSfxPage = pTabPage;
if (m_xSfxPage)
{
// First obtain the user data, only then Reset()
OUString sConfigId = OStringToOUString(m_xSfxPage->GetConfigId(), RTL_TEXTENCODING_UTF8);
SvtViewOptions aPageOpt(EViewType::TabPage, sConfigId);
Any aUserItem = aPageOpt.GetUserItem( USERITEM_NAME );
OUString sUserData;
aUserItem >>= sUserData;
m_xSfxPage->SetUserData(sUserData);
m_xSfxPage->Reset(GetInputItemSet());
//TODO m_xSfxPage->Show();
m_xHelpBtn->show(Help::IsContextHelpEnabled());
// Set TabPage text in the Dialog if there is any
OUString sTitle(m_xSfxPage->GetText());
if (!sTitle.isEmpty())
m_xDialog->set_title(sTitle);
// Dialog receives the HelpId of TabPage if there is any
OString sHelpId(m_xSfxPage->GetHelpId());
if (!sHelpId.isEmpty())
m_xDialog->set_help_id(sHelpId);
}
}
/* [Description]
Ok_Handler; FillItemSet() is called for setting of Page.
*/
IMPL_LINK_NOARG(SfxSingleTabDialogController, OKHdl_Impl, weld::Button&, void)
{
const SfxItemSet* pInputSet = GetInputItemSet();
if (!pInputSet)
{
// TabPage without ItemSet
m_xDialog->response(RET_OK);
return;
}
if (!GetOutputItemSet())
{
CreateOutputItemSet(*pInputSet);
}
bool bModified = false;
if (m_xSfxPage->HasExchangeSupport())
{
DeactivateRC nRet = m_xSfxPage->DeactivatePage(m_xOutputSet.get());
if (nRet != DeactivateRC::LeavePage)
return;
else
bModified = m_xOutputSet->Count() > 0;
}
else
bModified = m_xSfxPage->FillItemSet(m_xOutputSet.get());
if (bModified)
{
// Save user data in IniManager.
m_xSfxPage->FillUserData();
OUString sData(m_xSfxPage->GetUserData());
OUString sConfigId = OStringToOUString(m_xSfxPage->GetConfigId(),
RTL_TEXTENCODING_UTF8);
SvtViewOptions aPageOpt(EViewType::TabPage, sConfigId);
aPageOpt.SetUserItem( USERITEM_NAME, makeAny( sData ) );
m_xDialog->response(RET_OK);
}
else
m_xDialog->response(RET_CANCEL);
}
void SfxSingleTabDialogController::CreateOutputItemSet(const SfxItemSet& rSet)
{
assert(!m_xOutputSet && "Double creation of OutputSet!");
m_xOutputSet.reset(new SfxItemSet(rSet));
m_xOutputSet->ClearItem();
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<!-- Generated with glade 3.18.3 --> <!-- Generated with glade 3.22.1 -->
<interface domain="sfx"> <interface domain="sfx">
<requires lib="gtk+" version="3.18"/> <requires lib="gtk+" version="3.18"/>
<object class="GtkDialog" id="SingleTabDialog"> <object class="GtkDialog" id="SingleTabDialog">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="border_width">6</property> <property name="border_width">6</property>
<property name="resizable">False</property> <property name="resizable">False</property>
<property name="modal">True</property>
<property name="type_hint">dialog</property> <property name="type_hint">dialog</property>
<child>
<placeholder/>
</child>
<child internal-child="vbox"> <child internal-child="vbox">
<object class="GtkBox" id="dialog-vbox1"> <object class="GtkBox" id="dialog-vbox1">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property>
<property name="spacing">12</property> <property name="spacing">12</property>
<child internal-child="action_area"> <child internal-child="action_area">
<object class="GtkButtonBox" id="dialog-action_area1"> <object class="GtkButtonBox" id="dialog-action_area1">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="orientation">vertical</property> <property name="layout_style">end</property>
<property name="layout_style">start</property>
<child> <child>
<object class="GtkButton" id="ok"> <object class="GtkButton" id="ok">
<property name="label">gtk-ok</property> <property name="label">gtk-ok</property>
...@@ -58,6 +62,7 @@ ...@@ -58,6 +62,7 @@
<property name="expand">False</property> <property name="expand">False</property>
<property name="fill">True</property> <property name="fill">True</property>
<property name="position">2</property> <property name="position">2</property>
<property name="secondary">True</property>
</packing> </packing>
</child> </child>
</object> </object>
......
...@@ -361,7 +361,7 @@ public: ...@@ -361,7 +361,7 @@ public:
virtual VclPtr<SfxAbstractDialog> CreateNumFormatDialog( vcl::Window* pParent, virtual VclPtr<SfxAbstractDialog> CreateNumFormatDialog( vcl::Window* pParent,
const SfxItemSet& rAttr) = 0; const SfxItemSet& rAttr) = 0;
virtual VclPtr<SfxAbstractDialog> CreateSwDropCapsDialog(vcl::Window* pParent, const SfxItemSet& rSet) = 0; virtual VclPtr<SfxAbstractDialog> CreateSwDropCapsDialog(weld::Window* pParent, const SfxItemSet& rSet) = 0;
virtual VclPtr<SfxAbstractDialog> CreateSwBackgroundDialog(vcl::Window* pParent, const SfxItemSet& rSet) = 0; virtual VclPtr<SfxAbstractDialog> CreateSwBackgroundDialog(vcl::Window* pParent, const SfxItemSet& rSet) = 0;
virtual VclPtr<AbstractSwWordCountFloatDlg> CreateSwWordCountDialog(SfxBindings* pBindings, virtual VclPtr<AbstractSwWordCountFloatDlg> CreateSwWordCountDialog(SfxBindings* pBindings,
......
...@@ -448,12 +448,13 @@ void SwDropCapsPict::InitPrinter_() ...@@ -448,12 +448,13 @@ void SwDropCapsPict::InitPrinter_()
} }
} }
SwDropCapsDlg::SwDropCapsDlg(vcl::Window *pParent, const SfxItemSet &rSet ) SwDropCapsDlg::SwDropCapsDlg(weld::Window *pParent, const SfxItemSet &rSet)
: SfxSingleTabDialog(pParent, rSet) : SfxSingleTabDialogController(pParent, rSet)
{ {
VclPtr<SwDropCapsPage> pNewPage( static_cast<SwDropCapsPage*>( SwDropCapsPage::Create(get_content_area(), &rSet).get() ) ); TabPageParent pPageParent(get_content_area(), this);
pNewPage->SetFormat(false); VclPtr<SwDropCapsPage> xNewPage(static_cast<SwDropCapsPage*>(SwDropCapsPage::Create(pPageParent, &rSet).get()));
SetTabPage(pNewPage); xNewPage->SetFormat(false);
SetTabPage(xNewPage);
} }
SwDropCapsPage::SwDropCapsPage(TabPageParent pParent, const SfxItemSet &rSet) SwDropCapsPage::SwDropCapsPage(TabPageParent pParent, const SfxItemSet &rSet)
......
...@@ -90,56 +90,76 @@ using namespace css::uno; ...@@ -90,56 +90,76 @@ using namespace css::uno;
IMPL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl); IMPL_ABSTDLG_BASE(AbstractSwWordCountFloatDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractSwInsertAbstractDlg_Impl); IMPL_ABSTDLG_BASE(AbstractSwInsertAbstractDlg_Impl);
IMPL_ABSTDLG_BASE(SwAbstractSfxDialog_Impl); IMPL_ABSTDLG_BASE(SwAbstractSfxDialog_Impl);
short SwAbstractSfxController_Impl::Execute()
{
return m_xDlg->run();
}
short AbstractSwAsciiFilterDlg_Impl::Execute() short AbstractSwAsciiFilterDlg_Impl::Execute()
{ {
return m_xDlg->run(); return m_xDlg->run();
} }
IMPL_ABSTDLG_BASE(VclAbstractDialog_Impl); IMPL_ABSTDLG_BASE(VclAbstractDialog_Impl);
short AbstractSplitTableDialog_Impl::Execute() short AbstractSplitTableDialog_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
short AbstractSwBreakDlg_Impl::Execute() short AbstractSwBreakDlg_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
short AbstractSwTableWidthDlg_Impl::Execute() short AbstractSwTableWidthDlg_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
short AbstractSwTableHeightDlg_Impl::Execute() short AbstractSwTableHeightDlg_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
short AbstractSwMergeTableDlg_Impl::Execute() short AbstractSwMergeTableDlg_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
short AbstractGenericDialog_Impl::Execute() short AbstractGenericDialog_Impl::Execute()
{ {
return m_xDlg->run(); return m_xDlg->run();
} }
bool AbstractGenericDialog_Impl::StartExecuteAsync(AsyncContext &rCtx) bool AbstractGenericDialog_Impl::StartExecuteAsync(AsyncContext &rCtx)
{ {
return weld::GenericDialogController::runAsync(m_xDlg, rCtx.maEndDialogFn); return weld::GenericDialogController::runAsync(m_xDlg, rCtx.maEndDialogFn);
} }
short AbstractSwSortDlg_Impl::Execute() short AbstractSwSortDlg_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
short AbstractMultiTOXMarkDlg_Impl::Execute() short AbstractMultiTOXMarkDlg_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
short AbstractTabController_Impl::Execute() short AbstractTabController_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
IMPL_ABSTDLG_BASE(AbstractTabDialog_Impl); IMPL_ABSTDLG_BASE(AbstractTabDialog_Impl);
short AbstractSwConvertTableDlg_Impl::Execute() short AbstractSwConvertTableDlg_Impl::Execute()
{ {
return m_xDlg->run(); return m_xDlg->run();
} }
IMPL_ABSTDLG_BASE(AbstractSwInsertDBColAutoPilot_Impl); IMPL_ABSTDLG_BASE(AbstractSwInsertDBColAutoPilot_Impl);
short AbstractDropDownFieldDialog_Impl::Execute() short AbstractDropDownFieldDialog_Impl::Execute()
...@@ -153,15 +173,19 @@ short AbstractSwLabDlg_Impl::Execute() ...@@ -153,15 +173,19 @@ short AbstractSwLabDlg_Impl::Execute()
} }
IMPL_ABSTDLG_BASE(AbstractSwSelGlossaryDlg_Impl); IMPL_ABSTDLG_BASE(AbstractSwSelGlossaryDlg_Impl);
short AbstractSwAutoFormatDlg_Impl::Execute() short AbstractSwAutoFormatDlg_Impl::Execute()
{ {
return m_xDlg->execute(); return m_xDlg->execute();
} }
IMPL_ABSTDLG_BASE(AbstractSwFieldDlg_Impl); IMPL_ABSTDLG_BASE(AbstractSwFieldDlg_Impl);
short AbstractSwRenameXNamedDlg_Impl::Execute() short AbstractSwRenameXNamedDlg_Impl::Execute()
{ {
return m_xDlg->run(); return m_xDlg->run();
} }
IMPL_ABSTDLG_BASE(AbstractSwModalRedlineAcceptDlg_Impl); IMPL_ABSTDLG_BASE(AbstractSwModalRedlineAcceptDlg_Impl);
IMPL_ABSTDLG_BASE(AbstractGlossaryDlg_Impl); IMPL_ABSTDLG_BASE(AbstractGlossaryDlg_Impl);
...@@ -295,6 +319,16 @@ void SwAbstractSfxDialog_Impl::SetText( const OUString& rStr ) ...@@ -295,6 +319,16 @@ void SwAbstractSfxDialog_Impl::SetText( const OUString& rStr )
pDlg->SetText( rStr ); pDlg->SetText( rStr );
} }
const SfxItemSet* SwAbstractSfxController_Impl::GetOutputItemSet() const
{
return m_xDlg->GetOutputItemSet();
}
void SwAbstractSfxController_Impl::SetText(const OUString& rStr)
{
m_xDlg->set_title(rStr);
}
void AbstractSwAsciiFilterDlg_Impl::FillOptions( SwAsciiOptions& rOptions ) void AbstractSwAsciiFilterDlg_Impl::FillOptions( SwAsciiOptions& rOptions )
{ {
m_xDlg->FillOptions(rOptions); m_xDlg->FillOptions(rOptions);
...@@ -724,11 +758,10 @@ VclPtr<SfxAbstractDialog> SwAbstractDialogFactory_Impl::CreateSwAddressAbstractD ...@@ -724,11 +758,10 @@ VclPtr<SfxAbstractDialog> SwAbstractDialogFactory_Impl::CreateSwAddressAbstractD
return VclPtr<SwAbstractSfxDialog_Impl>::Create(pDlg); return VclPtr<SwAbstractSfxDialog_Impl>::Create(pDlg);
} }
VclPtr<SfxAbstractDialog> SwAbstractDialogFactory_Impl::CreateSwDropCapsDialog( vcl::Window* pParent, VclPtr<SfxAbstractDialog> SwAbstractDialogFactory_Impl::CreateSwDropCapsDialog(weld::Window* pParent,
const SfxItemSet& rSet) const SfxItemSet& rSet)
{ {
VclPtr<SfxModalDialog> pDlg = VclPtr<SwDropCapsDlg>::Create(pParent, rSet); return VclPtr<SwAbstractSfxController_Impl>::Create(o3tl::make_unique<SwDropCapsDlg>(pParent, rSet));
return VclPtr<SwAbstractSfxDialog_Impl>::Create( pDlg );
} }
VclPtr<SfxAbstractDialog> SwAbstractDialogFactory_Impl::CreateSwBackgroundDialog( vcl::Window* pParent, VclPtr<SfxAbstractDialog> SwAbstractDialogFactory_Impl::CreateSwBackgroundDialog( vcl::Window* pParent,
......
...@@ -94,6 +94,20 @@ class SwAbstractSfxDialog_Impl :public SfxAbstractDialog ...@@ -94,6 +94,20 @@ class SwAbstractSfxDialog_Impl :public SfxAbstractDialog
virtual void SetText( const OUString& rStr ) override; virtual void SetText( const OUString& rStr ) override;
}; };
class SwAbstractSfxController_Impl : public SfxAbstractDialog
{
protected:
std::unique_ptr<SfxSingleTabDialogController> m_xDlg;
public:
explicit SwAbstractSfxController_Impl(std::unique_ptr<SfxSingleTabDialogController> p)
: m_xDlg(std::move(p))
{
}
virtual short Execute() override;
virtual const SfxItemSet* GetOutputItemSet() const override;
virtual void SetText(const OUString& rStr) override;
};
class AbstractSwAsciiFilterDlg_Impl : public AbstractSwAsciiFilterDlg class AbstractSwAsciiFilterDlg_Impl : public AbstractSwAsciiFilterDlg
{ {
protected: protected:
...@@ -560,7 +574,7 @@ public: ...@@ -560,7 +574,7 @@ public:
virtual ~SwAbstractDialogFactory_Impl() {} virtual ~SwAbstractDialogFactory_Impl() {}
virtual VclPtr<SfxAbstractDialog> CreateNumFormatDialog(vcl::Window* pParent, const SfxItemSet& rAttr) override; virtual VclPtr<SfxAbstractDialog> CreateNumFormatDialog(vcl::Window* pParent, const SfxItemSet& rAttr) override;
virtual VclPtr<SfxAbstractDialog> CreateSwDropCapsDialog(vcl::Window* pParent, const SfxItemSet& rSet) override; virtual VclPtr<SfxAbstractDialog> CreateSwDropCapsDialog(weld::Window* pParent, const SfxItemSet& rSet) override;
virtual VclPtr<SfxAbstractDialog> CreateSwBackgroundDialog(vcl::Window* pParent, const SfxItemSet& rSet) override; virtual VclPtr<SfxAbstractDialog> CreateSwBackgroundDialog(vcl::Window* pParent, const SfxItemSet& rSet) override;
virtual VclPtr<AbstractSwWordCountFloatDlg> CreateSwWordCountDialog(SfxBindings* pBindings, virtual VclPtr<AbstractSwWordCountFloatDlg> CreateSwWordCountDialog(SfxBindings* pBindings,
SfxChildWindow* pChild, vcl::Window *pParent, SfxChildWinInfo* pInfo) override; SfxChildWindow* pChild, vcl::Window *pParent, SfxChildWinInfo* pInfo) override;
......
...@@ -36,10 +36,10 @@ ...@@ -36,10 +36,10 @@
class SwWrtShell; class SwWrtShell;
class SwDropCapsDlg : public SfxSingleTabDialog class SwDropCapsDlg : public SfxSingleTabDialogController
{ {
public: public:
SwDropCapsDlg(vcl::Window *pParent, const SfxItemSet &rSet ); SwDropCapsDlg(weld::Window *pParent, const SfxItemSet &rSet);
}; };
class SwDropCapsPage; class SwDropCapsPage;
......
...@@ -479,7 +479,7 @@ void SwTextShell::ExecParaAttrArgs(SfxRequest &rReq) ...@@ -479,7 +479,7 @@ void SwTextShell::ExecParaAttrArgs(SfxRequest &rReq)
HINT_END, HINT_END>{}); HINT_END, HINT_END>{});
rSh.GetCurAttr(aSet); rSh.GetCurAttr(aSet);
SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create(); SwAbstractDialogFactory* pFact = SwAbstractDialogFactory::Create();
ScopedVclPtr<SfxAbstractDialog> pDlg(pFact->CreateSwDropCapsDialog(GetView().GetWindow(), aSet)); ScopedVclPtr<SfxAbstractDialog> pDlg(pFact->CreateSwDropCapsDialog(GetView().GetFrameWeld(), aSet));
if (pDlg->Execute() == RET_OK) if (pDlg->Execute() == RET_OK)
{ {
rSh.StartAction(); rSh.StartAction();
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment