summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCaolán McNamara <caolanm@redhat.com>2013-01-24 14:11:21 +0000
committerCaolán McNamara <caolanm@redhat.com>2013-01-24 14:29:46 +0000
commit20371d26374b40fe28ac006d9392104b692fce32 (patch)
tree865979524ce4173b3912c04d312d67481deb18f0
parentbd272cd3daf873fcc69c2cc794ffda821be7fedf (diff)
add a layout aware SfxSingleTabDialog
Change-Id: Ia4726eac4448dd22380d81d49c5e3b19aa097f73
-rw-r--r--sfx2/UI_sfx.mk1
-rw-r--r--sfx2/inc/sfx2/basedlgs.hxx42
-rw-r--r--sfx2/source/dialog/basedlgs.cxx72
-rw-r--r--sfx2/uiconfig/ui/singletabdialog.ui80
-rw-r--r--sw/source/ui/chrdlg/tblnumfm.cxx11
-rw-r--r--sw/source/ui/inc/tblnumfm.hxx4
6 files changed, 184 insertions, 26 deletions
diff --git a/sfx2/UI_sfx.mk b/sfx2/UI_sfx.mk
index c5077bb27bf4..ca89a1c1ae94 100644
--- a/sfx2/UI_sfx.mk
+++ b/sfx2/UI_sfx.mk
@@ -19,6 +19,7 @@ $(eval $(call gb_UI_add_uifiles,sfx,\
sfx2/uiconfig/ui/password \
sfx2/uiconfig/ui/printeroptionsdialog \
sfx2/uiconfig/ui/securityinfopage \
+ sfx2/uiconfig/ui/singletabdialog \
))
# vim: set noet sw=4 ts=4:
diff --git a/sfx2/inc/sfx2/basedlgs.hxx b/sfx2/inc/sfx2/basedlgs.hxx
index 141f082e1e2a..c3684e5a883c 100644
--- a/sfx2/inc/sfx2/basedlgs.hxx
+++ b/sfx2/inc/sfx2/basedlgs.hxx
@@ -64,6 +64,7 @@ protected:
String& GetExtraData() { return aExtraData; }
sal_uInt32 GetUniqId() const { return nUniqId; }
+ void SetUniqId(sal_uInt32 nSettingsId) { nUniqId = nSettingsId; }
SfxItemSet* GetItemSet() { return pOutputSet; }
void CreateOutputItemSet( SfxItemPool& rPool );
void CreateOutputItemSet( const SfxItemSet& rInput );
@@ -167,21 +168,24 @@ struct SingleTabDlgImpl
typedef sal_uInt16* (*GetTabPageRanges)(); // liefert internationale Which-Werte
-class SFX2_DLLPUBLIC SfxNoLayoutSingleTabDialog : public SfxModalDialog
+class SFX2_DLLPUBLIC SfxSingleTabDialogBase : public SfxModalDialog
{
public:
- SfxNoLayoutSingleTabDialog( Window* pParent, const SfxItemSet& rOptionsSet, sal_uInt16 nUniqueId );
- SfxNoLayoutSingleTabDialog( Window* pParent, sal_uInt16 nUniqueId, const SfxItemSet* pInSet = 0 );
+ //layout ctor
+ SfxSingleTabDialogBase(Window* pParent, const SfxItemSet& rOptionsSet);
- virtual ~SfxNoLayoutSingleTabDialog();
+ //non-layout ctors
+ SfxSingleTabDialogBase( Window* pParent, const SfxItemSet& rOptionsSet, sal_uInt16 nUniqueId );
+ SfxSingleTabDialogBase( Window* pParent, sal_uInt16 nUniqueId, const SfxItemSet* pInSet = 0 );
+
+ virtual ~SfxSingleTabDialogBase();
- void SetTabPage( SfxTabPage* pTabPage, GetTabPageRanges pRangesFunc = 0 );
SfxTabPage* GetTabPage() const { return pImpl->m_pSfxPage; }
OKButton* GetOKButton() const { return pOKBtn; }
CancelButton* GetCancelButton() const { return pCancelBtn; }
-private:
+protected:
GetTabPageRanges fnGetRanges;
OKButton* pOKBtn;
@@ -193,6 +197,32 @@ private:
DECL_DLLPRIVATE_LINK(OKHdl_Impl, void *);
};
+class SFX2_DLLPUBLIC SfxSingleTabDialog : public SfxSingleTabDialogBase
+{
+public:
+ SfxSingleTabDialog(Window* pParent, const SfxItemSet& rOptionsSet)
+ : SfxSingleTabDialogBase(pParent, rOptionsSet)
+ {
+ }
+ void setTabPage(SfxTabPage* pTabPage, GetTabPageRanges pRangesFunc = 0, sal_uInt32 nSettingsId = 0);
+};
+
+//Old school deprecated non-layout aware version
+class SFX2_DLLPUBLIC SfxNoLayoutSingleTabDialog : public SfxSingleTabDialogBase
+{
+public:
+ SfxNoLayoutSingleTabDialog(Window* pParent, const SfxItemSet& rOptionsSet, sal_uInt16 nUniqueId)
+ : SfxSingleTabDialogBase(pParent, rOptionsSet, nUniqueId)
+ {
+ }
+ SfxNoLayoutSingleTabDialog(Window* pParent, sal_uInt16 nUniqueId, const SfxItemSet* pInSet = 0)
+ : SfxSingleTabDialogBase(pParent, nUniqueId, pInSet)
+ {
+ }
+ ~SfxNoLayoutSingleTabDialog();
+ void SetTabPage(SfxTabPage* pTabPage, GetTabPageRanges pRangesFunc = 0);
+};
+
#endif
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/source/dialog/basedlgs.cxx b/sfx2/source/dialog/basedlgs.cxx
index 31b39bd067e1..06a361afa08a 100644
--- a/sfx2/source/dialog/basedlgs.cxx
+++ b/sfx2/source/dialog/basedlgs.cxx
@@ -668,9 +668,9 @@ void SfxFloatingWindow::FillInfo(SfxChildWinInfo& rInfo) const
rInfo.nFlags |= SFX_CHILDWIN_ZOOMIN;
}
-// SfxNoLayoutSingleTabDialog ----------------------------------------------------
+// SfxSingleTabDialogBase ----------------------------------------------------
-IMPL_LINK_NOARG(SfxNoLayoutSingleTabDialog, OKHdl_Impl)
+IMPL_LINK_NOARG(SfxSingleTabDialogBase, OKHdl_Impl)
/* [Description]
@@ -718,7 +718,7 @@ IMPL_LINK_NOARG(SfxNoLayoutSingleTabDialog, OKHdl_Impl)
// -----------------------------------------------------------------------
-SfxNoLayoutSingleTabDialog::SfxNoLayoutSingleTabDialog
+SfxSingleTabDialogBase::SfxSingleTabDialogBase
(
Window *pParent,
const SfxItemSet& rSet,
@@ -744,7 +744,7 @@ SfxNoLayoutSingleTabDialog::SfxNoLayoutSingleTabDialog
// -----------------------------------------------------------------------
-SfxNoLayoutSingleTabDialog::SfxNoLayoutSingleTabDialog
+SfxSingleTabDialogBase::SfxSingleTabDialogBase
(
Window* pParent,
sal_uInt16 nUniqueId,
@@ -769,18 +769,65 @@ SfxNoLayoutSingleTabDialog::SfxNoLayoutSingleTabDialog
SetInputSet( pInSet );
}
+SfxSingleTabDialogBase::SfxSingleTabDialogBase(Window *pParent, const SfxItemSet& rSet)
+ : SfxModalDialog(pParent, "SingleTabDialog", "sfx/ui/singletabdialog.ui")
+ , pImpl(new SingleTabDlgImpl)
+{
+ get(pOKBtn, "ok");
+ pOKBtn->SetClickHdl( LINK( this, SfxSingleTabDialogBase, OKHdl_Impl ) );
+ get(pCancelBtn, "cancel");
+ get(pHelpBtn, "help");
+ SetInputSet( &rSet );
+}
+
// -----------------------------------------------------------------------
-SfxNoLayoutSingleTabDialog::~SfxNoLayoutSingleTabDialog()
+SfxSingleTabDialogBase::~SfxSingleTabDialogBase()
{
- delete pOKBtn;
- delete pCancelBtn;
- delete pHelpBtn;
delete pImpl->m_pSfxPage;
delete pImpl->m_pLine;
delete pImpl;
}
+void SfxSingleTabDialog::setTabPage(SfxTabPage* pTabPage,
+ GetTabPageRanges pRangesFunc, sal_uInt32 nSettingsId)
+/* [Description]
+
+ Insert a (new) TabPage; an existing page is deleted.
+ The passed on page is initialized with the initially given Itemset
+ through calling Reset().
+*/
+
+{
+ SetUniqId(nSettingsId);
+ delete pImpl->m_pSfxPage;
+ pImpl->m_pSfxPage = pTabPage;
+ fnGetRanges = pRangesFunc;
+
+ if ( pImpl->m_pSfxPage )
+ {
+ // First obtain the user data, only then Reset()
+ SvtViewOptions aPageOpt( E_TABPAGE, String::CreateFromInt32( GetUniqId() ) );
+ String sUserData;
+ Any aUserItem = aPageOpt.GetUserItem( USERITEM_NAME );
+ OUString aTemp;
+ if ( aUserItem >>= aTemp )
+ sUserData = String( aTemp );
+ pImpl->m_pSfxPage->SetUserData( sUserData );
+ pImpl->m_pSfxPage->Reset( *GetInputItemSet() );
+ pImpl->m_pSfxPage->Show();
+
+ pHelpBtn->Show(Help::IsContextHelpEnabled());
+
+ // Set TabPage text in the Dialog
+ SetText( pImpl->m_pSfxPage->GetText() );
+
+ // Dialog recieves the HelpId of TabPage
+ SetHelpId( pImpl->m_pSfxPage->GetHelpId() );
+ SetUniqueId( pImpl->m_pSfxPage->GetUniqueId() );
+ }
+}
+
// -----------------------------------------------------------------------
void SfxNoLayoutSingleTabDialog::SetTabPage( SfxTabPage* pTabPage,
@@ -796,7 +843,7 @@ void SfxNoLayoutSingleTabDialog::SetTabPage( SfxTabPage* pTabPage,
if ( !pOKBtn )
{
pOKBtn = new OKButton( this, WB_DEFBUTTON );
- pOKBtn->SetClickHdl( LINK( this, SfxNoLayoutSingleTabDialog, OKHdl_Impl ) );
+ pOKBtn->SetClickHdl( LINK( this, SfxSingleTabDialogBase, OKHdl_Impl ) );
}
if ( !pCancelBtn )
pCancelBtn = new CancelButton( this );
@@ -847,4 +894,11 @@ void SfxNoLayoutSingleTabDialog::SetTabPage( SfxTabPage* pTabPage,
}
}
+SfxNoLayoutSingleTabDialog::~SfxNoLayoutSingleTabDialog()
+{
+ delete pOKBtn;
+ delete pCancelBtn;
+ delete pHelpBtn;
+}
+
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sfx2/uiconfig/ui/singletabdialog.ui b/sfx2/uiconfig/ui/singletabdialog.ui
new file mode 100644
index 000000000000..fca895700351
--- /dev/null
+++ b/sfx2/uiconfig/ui/singletabdialog.ui
@@ -0,0 +1,80 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<interface>
+ <!-- interface-requires gtk+ 3.0 -->
+ <object class="GtkDialog" id="SingleTabDialog">
+ <property name="can_focus">False</property>
+ <property name="border_width">5</property>
+ <property name="type_hint">dialog</property>
+ <child internal-child="vbox">
+ <object class="GtkBox" id="dialog-vbox1">
+ <property name="can_focus">False</property>
+ <property name="spacing">2</property>
+ <child internal-child="action_area">
+ <object class="GtkButtonBox" id="dialog-action_area1">
+ <property name="can_focus">False</property>
+ <property name="orientation">vertical</property>
+ <property name="layout_style">start</property>
+ <child>
+ <object class="GtkButton" id="ok">
+ <property name="label">gtk-ok</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="can_default">True</property>
+ <property name="has_default">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="cancel">
+ <property name="label">gtk-cancel</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">1</property>
+ </packing>
+ </child>
+ <child>
+ <object class="GtkButton" id="help">
+ <property name="label">gtk-help</property>
+ <property name="visible">True</property>
+ <property name="can_focus">True</property>
+ <property name="receives_default">True</property>
+ <property name="use_stock">True</property>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="position">2</property>
+ </packing>
+ </child>
+ </object>
+ <packing>
+ <property name="expand">False</property>
+ <property name="fill">True</property>
+ <property name="pack_type">end</property>
+ <property name="position">0</property>
+ </packing>
+ </child>
+ <child>
+ <placeholder/>
+ </child>
+ </object>
+ </child>
+ <action-widgets>
+ <action-widget response="0">ok</action-widget>
+ <action-widget response="0">cancel</action-widget>
+ <action-widget response="0">help</action-widget>
+ </action-widgets>
+ </object>
+</interface>
diff --git a/sw/source/ui/chrdlg/tblnumfm.cxx b/sw/source/ui/chrdlg/tblnumfm.cxx
index 0b09521070b5..1552f606f06c 100644
--- a/sw/source/ui/chrdlg/tblnumfm.cxx
+++ b/sw/source/ui/chrdlg/tblnumfm.cxx
@@ -30,7 +30,7 @@
#include <sfx2/tabdlg.hxx>
SwNumFmtDlg::SwNumFmtDlg(Window* pParent, const SfxItemSet& rSet)
- : SfxNoLayoutSingleTabDialog( pParent, rSet, 0 )
+ : SfxSingleTabDialog(pParent, rSet)
{
// Create TabPage
SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
@@ -39,17 +39,12 @@ SwNumFmtDlg::SwNumFmtDlg(Window* pParent, const SfxItemSet& rSet)
if ( fnCreatePage )
{
- SfxTabPage* pNewPage = (*fnCreatePage)( this, rSet );
+ SfxTabPage* pNewPage = (*fnCreatePage)( get_content_area(), rSet );
SfxAllItemSet aSet(*(rSet.GetPool()));
aSet.Put ( SvxNumberInfoItem( (const SvxNumberInfoItem&)pNewPage->GetItemSet().Get( SID_ATTR_NUMBERFORMAT_INFO )));
pNewPage->PageCreated(aSet);
- SetTabPage(pNewPage);
+ setTabPage(pNewPage);
}
}
-SwNumFmtDlg::~SwNumFmtDlg()
-{
-}
-
-
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/sw/source/ui/inc/tblnumfm.hxx b/sw/source/ui/inc/tblnumfm.hxx
index b2de8e1c05f3..8cf3a287033c 100644
--- a/sw/source/ui/inc/tblnumfm.hxx
+++ b/sw/source/ui/inc/tblnumfm.hxx
@@ -24,12 +24,10 @@
class Window;
class SfxItemSet;
-class SwNumFmtDlg : public SfxNoLayoutSingleTabDialog
+class SwNumFmtDlg : public SfxSingleTabDialog
{
public:
-
SwNumFmtDlg(Window* pParent, const SfxItemSet& rSet);
- ~SwNumFmtDlg();
};
#endif