summaryrefslogtreecommitdiff
path: root/include/sfx2/tabdlg.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'include/sfx2/tabdlg.hxx')
-rw-r--r--include/sfx2/tabdlg.hxx306
1 files changed, 306 insertions, 0 deletions
diff --git a/include/sfx2/tabdlg.hxx b/include/sfx2/tabdlg.hxx
new file mode 100644
index 000000000000..17016489e917
--- /dev/null
+++ b/include/sfx2/tabdlg.hxx
@@ -0,0 +1,306 @@
+/* -*- 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/.
+ *
+ * This file incorporates work covered by the following license notice:
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed
+ * with this work for additional information regarding copyright
+ * ownership. The ASF licenses this file to you under the Apache
+ * License, Version 2.0 (the "License"); you may not use this file
+ * except in compliance with the License. You may obtain a copy of
+ * the License at http://www.apache.org/licenses/LICENSE-2.0 .
+ */
+#ifndef _SFXTABDLG_HXX
+#define _SFXTABDLG_HXX
+
+#include "sal/config.h"
+#include "sfx2/dllapi.h"
+#include "sal/types.h"
+#include <vcl/button.hxx>
+#include <vcl/layout.hxx>
+#include <vcl/tabctrl.hxx>
+#include <vcl/tabdlg.hxx>
+#include <vcl/tabpage.hxx>
+#include <svl/itempool.hxx>
+#include <svl/itemset.hxx>
+#include <com/sun/star/frame/XFrame.hpp>
+
+class SfxPoolItem;
+class SfxTabDialog;
+class SfxViewFrame;
+class SfxTabPage;
+class SfxBindings;
+
+typedef SfxTabPage* (*CreateTabPage)(Window *pParent, const SfxItemSet &rAttrSet);
+typedef sal_uInt16* (*GetTabPageRanges)(); // provides international Which-value
+struct TabPageImpl;
+
+struct TabDlg_Impl;
+
+#define ID_TABCONTROL 1
+#define RET_USER 100
+#define RET_USER_CANCEL 101
+
+class SFX2_DLLPUBLIC SfxTabDialogItem: public SfxSetItem
+{
+public:
+ TYPEINFO();
+ SfxTabDialogItem( sal_uInt16 nId, const SfxItemSet& rItemSet );
+ SfxTabDialogItem(const SfxTabDialogItem& rAttr, SfxItemPool* pItemPool=NULL);
+ virtual SfxPoolItem* Clone(SfxItemPool* pToPool) const;
+ virtual SfxPoolItem* Create(SvStream& rStream, sal_uInt16 nVersion) const;
+};
+
+class SFX2_DLLPUBLIC SfxTabDialog : public TabDialog
+{
+private:
+friend class SfxTabPage;
+friend class SfxTabDialogController;
+
+ SfxViewFrame* pFrame;
+
+ VclBox *m_pBox;
+ TabControl *m_pTabCtrl;
+
+ OKButton *m_pOKBtn;
+ PushButton* m_pApplyBtn;
+ PushButton* m_pUserBtn;
+ CancelButton* m_pCancelBtn;
+ HelpButton* m_pHelpBtn;
+ PushButton* m_pResetBtn;
+ PushButton* m_pBaseFmtBtn;
+
+ bool m_bOwnsVBox;
+ bool m_bOwnsTabCtrl;
+ bool m_bOwnsActionArea;
+ bool m_bOwnsOKBtn;
+ bool m_bOwnsApplyBtn;
+ bool m_bOwnsUserBtn;
+ bool m_bOwnsCancelBtn;
+ bool m_bOwnsHelpBtn;
+ bool m_bOwnsResetBtn;
+ bool m_bOwnsBaseFmtBtn;
+
+ const SfxItemSet* pSet;
+ SfxItemSet* pOutSet;
+ TabDlg_Impl* pImpl;
+ sal_uInt16* pRanges;
+ sal_uInt32 nResId;
+ sal_uInt16 nAppPageId;
+ sal_Bool bItemsReset;
+ sal_Bool bFmt;
+
+ DECL_DLLPRIVATE_LINK( ActivatePageHdl, TabControl * );
+ DECL_DLLPRIVATE_LINK( DeactivatePageHdl, TabControl * );
+ DECL_DLLPRIVATE_LINK(OkHdl, void *);
+ DECL_DLLPRIVATE_LINK(ResetHdl, void *);
+ DECL_DLLPRIVATE_LINK(BaseFmtHdl, void *);
+ DECL_DLLPRIVATE_LINK(UserHdl, void *);
+ DECL_DLLPRIVATE_LINK(CancelHdl, void *);
+ SAL_DLLPRIVATE void Init_Impl( sal_Bool bFmtFlag, const String* pUserButtonText, const ResId* pResId );
+
+protected:
+ virtual short Ok();
+ // Is deleted in Sfx!
+ virtual SfxItemSet* CreateInputItemSet( sal_uInt16 nId );
+ // Is not deleted in Sfx!
+ virtual const SfxItemSet* GetRefreshedSet();
+ virtual void PageCreated( sal_uInt16 nId, SfxTabPage &rPage );
+ virtual long Notify( NotifyEvent& rNEvt );
+
+ VclButtonBox* m_pActionArea;
+ SfxItemSet* pExampleSet;
+ SfxItemSet* GetInputSetImpl();
+ SfxTabPage* GetTabPage( sal_uInt16 nPageId ) const;
+
+ /** prepare to leace the current page. Calls the DeactivatePage method of the current page, (if necessary),
+ handles the item sets to copy.
+ @return sal_True if it is allowed to leave the current page, sal_False otherwise
+ */
+ bool PrepareLeaveCurrentPage();
+
+ /** save the position of the TabDialog and which tab page is the currently active one
+ */
+ void SavePosAndId();
+
+public:
+ SfxTabDialog( Window* pParent,
+ const OString& rID, const OUString& rUIXMLDescription,
+ const SfxItemSet * = 0, sal_Bool bEditFmt = sal_False );
+ SfxTabDialog( SfxViewFrame *pViewFrame, Window* pParent,
+ const OString& rID, const OUString& rUIXMLDescription,
+ const SfxItemSet * = 0, sal_Bool bEditFmt = sal_False );
+
+
+ SfxTabDialog( Window* pParent, const ResId &rResId, const SfxItemSet * = 0,
+ sal_Bool bEditFmt = sal_False, const String *pUserButtonText = 0 );
+ SfxTabDialog( SfxViewFrame *pViewFrame, Window* pParent, const ResId &rResId,
+ const SfxItemSet * = 0, sal_Bool bEditFmt = sal_False,
+ const String *pUserButtonText = 0 );
+ ~SfxTabDialog();
+
+ sal_uInt16 AddTabPage( const OString& rName, // Name of the label for the page in the notebook .ui
+ CreateTabPage pCreateFunc, // != 0
+ GetTabPageRanges pRangesFunc, // can be 0
+ sal_Bool bItemsOnDemand = sal_False);
+
+ sal_uInt16 AddTabPage ( const OString &rName, // Name of the label for the page in the notebook .ui
+ sal_uInt16 nPageCreateId ); // Identifier of the Factory Method to create the page
+
+ void AddTabPage( sal_uInt16 nId,
+ CreateTabPage pCreateFunc, // != 0
+ GetTabPageRanges pRangesFunc, // can be 0
+ sal_Bool bItemsOnDemand = sal_False);
+
+
+ void AddTabPage( sal_uInt16 nId,
+ const String &rRiderText,
+ CreateTabPage pCreateFunc, // != 0
+ GetTabPageRanges pRangesFunc, // can be 0
+ sal_Bool bItemsOnDemand = sal_False,
+ sal_uInt16 nPos = TAB_APPEND);
+ void AddTabPage( sal_uInt16 nId,
+ const Bitmap &rRiderBitmap,
+ CreateTabPage pCreateFunc, // != 0
+ GetTabPageRanges pRangesFunc, // can be 0
+ sal_Bool bItemsOnDemand = sal_False,
+ sal_uInt16 nPos = TAB_APPEND);
+
+ void AddTabPage( sal_uInt16 nId,
+ sal_Bool bItemsOnDemand = sal_False);
+ void AddTabPage( sal_uInt16 nId,
+ const String &rRiderText,
+ sal_Bool bItemsOnDemand = sal_False,
+ sal_uInt16 nPos = TAB_APPEND);
+ void AddTabPage( sal_uInt16 nId,
+ const Bitmap &rRiderBitmap,
+ sal_Bool bItemsOnDemand = sal_False,
+ sal_uInt16 nPos = TAB_APPEND);
+
+ void RemoveTabPage( const OString& rName ); // Name of the label for the page in the notebook .ui
+ void RemoveTabPage( sal_uInt16 nId );
+
+ void SetCurPageId(sal_uInt16 nId)
+ {
+ nAppPageId = nId;
+ }
+ void SetCurPageId(const OString& rName)
+ {
+ nAppPageId = m_pTabCtrl->GetPageId(rName);
+ }
+ sal_uInt16 GetCurPageId() const
+ {
+ return m_pTabCtrl->GetCurPageId();
+ }
+ void ShowPage( sal_uInt16 nId );
+
+ // may provide local slots converted by Map
+ const sal_uInt16* GetInputRanges( const SfxItemPool& );
+ void SetInputSet( const SfxItemSet* pInSet );
+ const SfxItemSet* GetOutputItemSet() const { return pOutSet; }
+ sal_Bool IsFormat() const { return bFmt; }
+
+ const OKButton& GetOKButton() const { return *m_pOKBtn; }
+ OKButton& GetOKButton() { return *m_pOKBtn; }
+ const CancelButton& GetCancelButton() const { return *m_pCancelBtn; }
+ CancelButton& GetCancelButton() { return *m_pCancelBtn; }
+ const HelpButton& GetHelpButton() const { return *m_pHelpBtn; }
+ HelpButton& GetHelpButton() { return *m_pHelpBtn; }
+
+ const PushButton* GetUserButton() const { return m_pUserBtn; }
+ PushButton* GetUserButton() { return m_pUserBtn; }
+ void RemoveResetButton();
+
+ short Execute();
+ void StartExecuteModal( const Link& rEndDialogHdl );
+ void Start( sal_Bool bShow = sal_True );
+
+ const SfxItemSet* GetExampleSet() const { return pExampleSet; }
+ SfxViewFrame* GetViewFrame() const { return pFrame; }
+
+ void EnableApplyButton(sal_Bool bEnable = sal_True);
+ sal_Bool IsApplyButtonEnabled() const;
+ void SetApplyHandler(const Link& _rHdl);
+
+ SAL_DLLPRIVATE void Start_Impl();
+
+ //calls Ok without closing dialog
+ bool Apply();
+};
+
+namespace sfx { class ItemConnectionBase; }
+
+class SFX2_DLLPUBLIC SfxTabPage: public TabPage
+{
+friend class SfxTabDialog;
+
+private:
+ const SfxItemSet* pSet;
+ String aUserString;
+ sal_Bool bHasExchangeSupport;
+ SfxTabDialog* pTabDlg;
+ TabPageImpl* pImpl;
+
+ SAL_DLLPRIVATE void SetTabDialog( SfxTabDialog* pNew ) { pTabDlg = pNew; }
+ SAL_DLLPRIVATE void SetInputSet( const SfxItemSet* pNew ) { pSet = pNew; }
+
+protected:
+ SfxTabPage( Window *pParent, const ResId &, const SfxItemSet &rAttrSet );
+ SfxTabPage(Window *pParent, const OString& rID, const OUString& rUIXMLDescription, const SfxItemSet &rAttrSet);
+
+ sal_uInt16 GetSlot( sal_uInt16 nWhich ) const
+ { return pSet->GetPool()->GetSlotId( nWhich ); }
+ sal_uInt16 GetWhich( sal_uInt16 nSlot, sal_Bool bDeep = sal_True ) const
+ { return pSet->GetPool()->GetWhich( nSlot, bDeep ); }
+ const SfxPoolItem* GetOldItem( const SfxItemSet& rSet, sal_uInt16 nSlot, sal_Bool bDeep = sal_True );
+ SfxTabDialog* GetTabDialog() const { return pTabDlg; }
+
+ void AddItemConnection( sfx::ItemConnectionBase* pConnection );
+
+public:
+ virtual ~SfxTabPage();
+
+ const SfxItemSet& GetItemSet() const { return *pSet; }
+
+ virtual sal_Bool FillItemSet( SfxItemSet& );
+ virtual void Reset( const SfxItemSet& );
+
+ sal_Bool HasExchangeSupport() const
+ { return bHasExchangeSupport; }
+ void SetExchangeSupport( sal_Bool bNew = sal_True )
+ { bHasExchangeSupport = bNew; }
+
+ enum sfxpg {
+ KEEP_PAGE = 0x0000, // Error handling; page does not change
+ // 2. Fill an itemset for update
+ // parent examples, this pointer can be NULL all the time!
+ LEAVE_PAGE = 0x0001,
+ // Set, refresh and update other Page
+ REFRESH_SET = 0x0002
+ };
+
+ using TabPage::ActivatePage;
+ using TabPage::DeactivatePage;
+ virtual void ActivatePage( const SfxItemSet& );
+ virtual int DeactivatePage( SfxItemSet* pSet = 0 );
+ void SetUserData(const String& rString)
+ { aUserString = rString; }
+ String GetUserData() { return aUserString; }
+ virtual void FillUserData();
+ virtual sal_Bool IsReadOnly() const;
+ virtual void PageCreated (SfxAllItemSet aSet);
+ static const SfxPoolItem* GetItem( const SfxItemSet& rSet, sal_uInt16 nSlot, sal_Bool bDeep = sal_True );
+
+ void SetFrame(const ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame >& xFrame);
+ ::com::sun::star::uno::Reference< ::com::sun::star::frame::XFrame > GetFrame();
+};
+
+#endif
+
+/* vim:set shiftwidth=4 softtabstop=4 expandtab: */