summaryrefslogtreecommitdiff
path: root/cui/source/inc/iconcdlg.hxx
diff options
context:
space:
mode:
Diffstat (limited to 'cui/source/inc/iconcdlg.hxx')
-rw-r--r--cui/source/inc/iconcdlg.hxx292
1 files changed, 292 insertions, 0 deletions
diff --git a/cui/source/inc/iconcdlg.hxx b/cui/source/inc/iconcdlg.hxx
new file mode 100644
index 000000000000..ea74b4a66075
--- /dev/null
+++ b/cui/source/inc/iconcdlg.hxx
@@ -0,0 +1,292 @@
+/*************************************************************************
+ *
+ * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
+ *
+ * Copyright 2008 by Sun Microsystems, Inc.
+ *
+ * OpenOffice.org - a multi-platform office productivity suite
+ *
+ * $RCSfile: iconcdlg.hxx,v $
+ * $Revision: 1.7 $
+ *
+ * This file is part of OpenOffice.org.
+ *
+ * OpenOffice.org is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License version 3
+ * only, as published by the Free Software Foundation.
+ *
+ * OpenOffice.org is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Lesser General Public License version 3 for more details
+ * (a copy is included in the LICENSE file that accompanied this code).
+ *
+ * You should have received a copy of the GNU Lesser General Public License
+ * version 3 along with OpenOffice.org. If not, see
+ * <http://www.openoffice.org/license.html>
+ * for a copy of the LGPLv3 License.
+ *
+ ************************************************************************/
+#ifndef _ICCDLG_HXX
+#define _ICCDLG_HXX
+
+#include <vcl/tabpage.hxx>
+#include <vcl/msgbox.hxx>
+#include <vcl/dialog.hxx>
+#ifndef _SV_BUTTON_HXX
+#include <vcl/button.hxx>
+#endif
+#include <vcl/image.hxx>
+#include <svtools/ivctrl.hxx>
+#include <svl/itempool.hxx>
+#include <svl/itemset.hxx>
+#include <tools/list.hxx>
+#include <tools/string.hxx>
+
+#define CTRLS_OFFSET 3
+#define BUTTON_DISTANCE 8
+#define RET_USER 100
+#define RET_USER_CANCEL 101
+
+// forward-declarations
+struct IconChoicePageData;
+class IconChoiceDialog;
+class IconChoicePage;
+
+// Create-Function
+typedef IconChoicePage* (*CreatePage)(Window *pParent, const SfxItemSet &rAttrSet);
+typedef USHORT* (*GetPageRanges)(); // liefert internationale Which-Wert
+
+// page-list
+DECLARE_LIST( IconChoicePageList, IconChoicePageData * )
+
+// position of iconchoicectrl
+enum EIconChoicePos { PosLeft, PosRight, PosTop, PosBottom };
+
+/**********************************************************************
+|
+| Data-structure for pages in dialog
+|
+\**********************************************************************/
+
+struct IconChoicePageData
+{
+ USHORT nId; // Die ID
+ CreatePage fnCreatePage; // Pointer auf die Factory
+ GetPageRanges fnGetRanges;// Pointer auf die Ranges-Funktion
+ IconChoicePage* pPage; // die TabPage selber
+ BOOL bOnDemand; // Flag: ItemSet onDemand
+ BOOL bRefresh; // Flag: Seite mu\s neu initialisiert werden
+
+ // Konstruktor
+ IconChoicePageData( USHORT Id, CreatePage fnPage, GetPageRanges fnRanges, BOOL bDemand )
+ : nId ( Id ),
+ fnCreatePage ( fnPage ),
+ fnGetRanges ( fnRanges ),
+ pPage ( NULL ),
+ bOnDemand ( bDemand ),
+ bRefresh ( FALSE )
+ {}
+};
+
+/**********************************************************************
+|
+| IconChoicePage
+|
+\**********************************************************************/
+
+class IconChoicePage : public TabPage
+{
+ using TabPage::ActivatePage;
+ using TabPage::DeactivatePage;
+
+private :
+ const SfxItemSet* pSet;
+ String aUserString;
+ BOOL bHasExchangeSupport;
+ IconChoiceDialog* pDialog;
+ BOOL bStandard;
+
+ void SetDialog( IconChoiceDialog* pNew ) { pDialog = pNew; }
+ IconChoiceDialog* GetDialog() const { return pDialog; }
+
+ void SetInputSet( const SfxItemSet* pNew ) { pSet = pNew; }
+
+ void ImplInitSettings();
+
+protected :
+ IconChoicePage( Window *pParent, const ResId &, const SfxItemSet &rAttrSet );
+
+ USHORT GetSlot( USHORT nWhich ) const { return pSet->GetPool()->GetSlotId( nWhich ); }
+ USHORT GetWhich( USHORT nSlot ) const { return pSet->GetPool()->GetWhich( nSlot ); }
+ const SfxPoolItem* GetOldItem( const SfxItemSet& rSet, USHORT nSlot );
+ const SfxPoolItem* GetExchangeItem( const SfxItemSet& rSet, USHORT nSlot );
+
+public :
+ virtual ~IconChoicePage();
+
+ const SfxItemSet& GetItemSet() const { return *pSet; }
+
+ virtual BOOL FillItemSet( SfxItemSet& ) = 0;
+ virtual void Reset( const SfxItemSet& ) = 0;
+
+ BOOL HasExchangeSupport() const { return bHasExchangeSupport; }
+ void SetExchangeSupport( BOOL bNew = TRUE ) { bHasExchangeSupport = bNew; }
+
+ enum {
+ KEEP_PAGE = 0x0000, // Fehlerbehandlung; Seite nicht wechseln
+ // 2. F"ullen eines ItemSets f"ur die Aktualilsierung
+ // "ubergeordneter Beispiele; dieser Pointer kann immer
+ // NULL sein!!
+ LEAVE_PAGE = 0x0001,
+ // Set aktualisieren und andere Page aktualisieren
+ REFRESH_SET = 0x0002
+ };
+
+ 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 BOOL IsReadOnly() const;
+ virtual sal_Bool QueryClose();
+
+ static const SfxPoolItem* GetItem( const SfxItemSet& rSet, USHORT nSlot );
+
+ void StateChanged( StateChangedType nType );
+ void DataChanged( const DataChangedEvent& rDCEvt );
+};
+
+/**********************************************************************
+|
+| IconChoiceDialog
+|
+\**********************************************************************/
+
+class IconChoiceDialog : public ModalDialog
+{
+private :
+ friend class IconChoicePage;
+
+ EIconChoicePos meChoicePos; // Position des IconChoiceCtrl's
+ IconChoicePageList maPageList; // Liste von PageData-Pointer
+
+ SvtIconChoiceCtrl maIconCtrl; // DAS IconChoice-Control
+
+ USHORT mnCurrentPageId; // Id der aktuell sichtbaren Page
+
+ // Buttons
+ OKButton aOKBtn;
+ CancelButton aCancelBtn;
+ HelpButton aHelpBtn;
+ PushButton aResetBtn;
+
+ const SfxItemSet* pSet;
+ SfxItemSet* pOutSet;
+ SfxItemSet* pExampleSet;
+ USHORT* pRanges;
+
+ sal_uInt32 nResId;
+
+ BOOL bHideResetBtn;
+ BOOL bModal;
+ BOOL bInOK;
+ BOOL bModified;
+ BOOL bItemsReset;
+
+ DECL_LINK ( ChosePageHdl_Impl, void * );
+ DECL_LINK ( OkHdl, Button * );
+ DECL_LINK ( ResetHdl, Button * );
+ DECL_LINK ( CancelHdl, Button * );
+
+ IconChoicePageData* GetPageData ( USHORT nId );
+ void Start_Impl();
+ BOOL OK_Impl();
+
+ void SetPosSizeCtrls ( BOOL bInit = FALSE );
+ void SetPosSizePages ( USHORT nId );
+
+ void FocusOnIcon ( USHORT nId );
+
+protected :
+ void ShowPageImpl ( IconChoicePageData* pData );
+ void HidePageImpl ( IconChoicePageData* pData );
+
+ virtual void PageCreated( USHORT nId, IconChoicePage& rPage );
+ virtual SfxItemSet* CreateInputItemSet( USHORT nId );
+ inline SfxItemSet* GetInputSetImpl() { return (SfxItemSet*)pSet; }
+ inline IconChoicePage* GetTabPage( USHORT nPageId )
+ { return ( GetPageData (nPageId)->pPage?GetPageData (nPageId)->pPage:NULL); }
+ const SfxItemSet* GetRefreshedSet();
+
+ void ActivatePageImpl ();
+ BOOL DeActivatePageImpl ();
+ void ResetPageImpl ();
+
+ short Ok();
+ BOOL IsInOK() const;
+
+public :
+
+ // im Ctor könnte auch die Position des IconChoiceCtrl's gesetzt werden.
+
+ IconChoiceDialog ( Window* pParent, const ResId &rResId,
+ const EIconChoicePos ePos = PosLeft, const SfxItemSet * pItemSet = 0 );
+ ~IconChoiceDialog ();
+
+ ///////////////////////////////////////////////////////////////////////////////////
+ // virtuelle Methoden
+ //
+ virtual void Paint( const Rectangle& rRect );
+ virtual void Resize();
+
+ ///////////////////////////////////////////////////////////////////////////////////
+ // Schnittstelle
+ //
+
+ SvxIconChoiceCtrlEntry* AddTabPage(
+ USHORT nId, const String& rIconText, const Image& rChoiceIcon,
+ CreatePage pCreateFunc /* != NULL */, GetPageRanges pRangesFunc = NULL /* NULL allowed*/,
+ BOOL bItemsOnDemand = FALSE, ULONG nPos = LIST_APPEND );
+
+ SvxIconChoiceCtrlEntry* AddTabPage(
+ USHORT nId, const String& rIconText, const Image& rChoiceIcon, const Image& rChoiceIconHC,
+ CreatePage pCreateFunc /* != NULL */, GetPageRanges pRangesFunc = NULL /* NULL allowed*/,
+ BOOL bItemsOnDemand = FALSE, ULONG nPos = LIST_APPEND );
+
+ void RemoveTabPage( USHORT nId );
+
+ void SetCurPageId( USHORT nId ) { mnCurrentPageId = nId; FocusOnIcon( nId ); }
+ USHORT GetCurPageId() const { return mnCurrentPageId; }
+ void ShowPage( USHORT nId );
+
+ // liefert ggf. per Map konvertierte lokale Slots
+ const USHORT* GetInputRanges( const SfxItemPool& );
+ void SetInputSet( const SfxItemSet* pInSet );
+ const SfxItemSet* GetOutputItemSet() const { return pOutSet; }
+ const SfxItemSet* GetOutputItemSet( USHORT nId );
+ int FillOutputItemSet();
+
+ const OKButton& GetOKButton() const { return aOKBtn; }
+ OKButton& GetOKButton() { return aOKBtn; }
+ const CancelButton& GetCancelButton() const { return aCancelBtn; }
+ CancelButton& GetCancelButton() { return aCancelBtn; }
+ const HelpButton& GetHelpButton() const { return aHelpBtn; }
+ HelpButton& GetHelpButton() { return aHelpBtn; }
+
+ void RemoveResetButton();
+
+ short Execute();
+ void Start( BOOL bShow = TRUE );
+ sal_Bool QueryClose();
+
+ const SfxItemSet* GetExampleSet() const { return pExampleSet; }
+
+ void SetCtrlColor ( const Color& rColor );
+ EIconChoicePos SetCtrlPos ( const EIconChoicePos& rPos );
+
+ void CreateIconTextAutoMnemonics( void );
+};
+
+#endif //_ICCDLG_HXX
+