1 /************************************************************************* 2 * 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * Copyright 2000, 2010 Oracle and/or its affiliates. 6 * 7 * OpenOffice.org - a multi-platform office productivity suite 8 * 9 * This file is part of OpenOffice.org. 10 * 11 * OpenOffice.org is free software: you can redistribute it and/or modify 12 * it under the terms of the GNU Lesser General Public License version 3 13 * only, as published by the Free Software Foundation. 14 * 15 * OpenOffice.org is distributed in the hope that it will be useful, 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18 * GNU Lesser General Public License version 3 for more details 19 * (a copy is included in the LICENSE file that accompanied this code). 20 * 21 * You should have received a copy of the GNU Lesser General Public License 22 * version 3 along with OpenOffice.org. If not, see 23 * <http://www.openoffice.org/license.html> 24 * for a copy of the LGPLv3 License. 25 * 26 ************************************************************************/ 27 #ifndef _ICCDLG_HXX 28 #define _ICCDLG_HXX 29 30 #include <vcl/tabpage.hxx> 31 #include <vcl/msgbox.hxx> 32 #include <vcl/dialog.hxx> 33 #ifndef _SV_BUTTON_HXX 34 #include <vcl/button.hxx> 35 #endif 36 #include <vcl/image.hxx> 37 #include <svtools/ivctrl.hxx> 38 #include <svl/itempool.hxx> 39 #include <svl/itemset.hxx> 40 #include <tools/list.hxx> 41 #include <tools/string.hxx> 42 43 #define CTRLS_OFFSET 3 44 #define BUTTON_DISTANCE 8 45 #define RET_USER 100 46 #define RET_USER_CANCEL 101 47 48 // forward-declarations 49 struct IconChoicePageData; 50 class IconChoiceDialog; 51 class IconChoicePage; 52 53 // Create-Function 54 typedef IconChoicePage* (*CreatePage)(Window *pParent, const SfxItemSet &rAttrSet); 55 typedef sal_uInt16* (*GetPageRanges)(); // liefert internationale Which-Wert 56 57 // page-list 58 DECLARE_LIST( IconChoicePageList, IconChoicePageData * ) 59 60 // position of iconchoicectrl 61 enum EIconChoicePos { PosLeft, PosRight, PosTop, PosBottom }; 62 63 /********************************************************************** 64 | 65 | Data-structure for pages in dialog 66 | 67 \**********************************************************************/ 68 69 struct IconChoicePageData 70 { 71 sal_uInt16 nId; // Die ID 72 CreatePage fnCreatePage; // Pointer auf die Factory 73 GetPageRanges fnGetRanges;// Pointer auf die Ranges-Funktion 74 IconChoicePage* pPage; // die TabPage selber 75 sal_Bool bOnDemand; // Flag: ItemSet onDemand 76 sal_Bool bRefresh; // Flag: Seite mu\s neu initialisiert werden 77 78 // Konstruktor 79 IconChoicePageData( sal_uInt16 Id, CreatePage fnPage, GetPageRanges fnRanges, sal_Bool bDemand ) 80 : nId ( Id ), 81 fnCreatePage ( fnPage ), 82 fnGetRanges ( fnRanges ), 83 pPage ( NULL ), 84 bOnDemand ( bDemand ), 85 bRefresh ( sal_False ) 86 {} 87 }; 88 89 /********************************************************************** 90 | 91 | IconChoicePage 92 | 93 \**********************************************************************/ 94 95 class IconChoicePage : public TabPage 96 { 97 using TabPage::ActivatePage; 98 using TabPage::DeactivatePage; 99 100 private : 101 const SfxItemSet* pSet; 102 String aUserString; 103 sal_Bool bHasExchangeSupport; 104 IconChoiceDialog* pDialog; 105 sal_Bool bStandard; 106 107 void SetDialog( IconChoiceDialog* pNew ) { pDialog = pNew; } 108 IconChoiceDialog* GetDialog() const { return pDialog; } 109 110 void SetInputSet( const SfxItemSet* pNew ) { pSet = pNew; } 111 112 void ImplInitSettings(); 113 114 protected : 115 IconChoicePage( Window *pParent, const ResId &, const SfxItemSet &rAttrSet ); 116 117 sal_uInt16 GetSlot( sal_uInt16 nWhich ) const { return pSet->GetPool()->GetSlotId( nWhich ); } 118 sal_uInt16 GetWhich( sal_uInt16 nSlot ) const { return pSet->GetPool()->GetWhich( nSlot ); } 119 120 public : 121 virtual ~IconChoicePage(); 122 123 const SfxItemSet& GetItemSet() const { return *pSet; } 124 125 virtual sal_Bool FillItemSet( SfxItemSet& ) = 0; 126 virtual void Reset( const SfxItemSet& ) = 0; 127 128 sal_Bool HasExchangeSupport() const { return bHasExchangeSupport; } 129 void SetExchangeSupport( sal_Bool bNew = sal_True ) { bHasExchangeSupport = bNew; } 130 131 enum { 132 KEEP_PAGE = 0x0000, // Fehlerbehandlung; Seite nicht wechseln 133 // 2. F"ullen eines ItemSets f"ur die Aktualilsierung 134 // "ubergeordneter Beispiele; dieser Pointer kann immer 135 // NULL sein!! 136 LEAVE_PAGE = 0x0001, 137 // Set aktualisieren und andere Page aktualisieren 138 REFRESH_SET = 0x0002 139 }; 140 141 virtual void ActivatePage( const SfxItemSet& ); 142 virtual int DeactivatePage( SfxItemSet* pSet = 0 ); 143 void SetUserData(const String& rString) { aUserString = rString; } 144 String GetUserData() { return aUserString; } 145 virtual void FillUserData(); 146 virtual sal_Bool IsReadOnly() const; 147 virtual sal_Bool QueryClose(); 148 149 void StateChanged( StateChangedType nType ); 150 void DataChanged( const DataChangedEvent& rDCEvt ); 151 }; 152 153 /********************************************************************** 154 | 155 | IconChoiceDialog 156 | 157 \**********************************************************************/ 158 159 class IconChoiceDialog : public ModalDialog 160 { 161 private : 162 friend class IconChoicePage; 163 164 EIconChoicePos meChoicePos; // Position des IconChoiceCtrl's 165 IconChoicePageList maPageList; // Liste von PageData-Pointer 166 167 SvtIconChoiceCtrl maIconCtrl; // DAS IconChoice-Control 168 169 sal_uInt16 mnCurrentPageId; // Id der aktuell sichtbaren Page 170 171 // Buttons 172 OKButton aOKBtn; 173 CancelButton aCancelBtn; 174 HelpButton aHelpBtn; 175 PushButton aResetBtn; 176 177 const SfxItemSet* pSet; 178 SfxItemSet* pOutSet; 179 SfxItemSet* pExampleSet; 180 sal_uInt16* pRanges; 181 182 sal_uInt32 nResId; 183 184 sal_Bool bHideResetBtn; 185 sal_Bool bModal; 186 sal_Bool bInOK; 187 sal_Bool bModified; 188 sal_Bool bItemsReset; 189 190 DECL_LINK ( ChosePageHdl_Impl, void * ); 191 DECL_LINK ( OkHdl, Button * ); 192 DECL_LINK ( ResetHdl, Button * ); 193 DECL_LINK ( CancelHdl, Button * ); 194 195 IconChoicePageData* GetPageData ( sal_uInt16 nId ); 196 void Start_Impl(); 197 sal_Bool OK_Impl(); 198 199 void SetPosSizeCtrls ( sal_Bool bInit = sal_False ); 200 void SetPosSizePages ( sal_uInt16 nId ); 201 202 void FocusOnIcon ( sal_uInt16 nId ); 203 204 protected : 205 void ShowPageImpl ( IconChoicePageData* pData ); 206 void HidePageImpl ( IconChoicePageData* pData ); 207 208 virtual void PageCreated( sal_uInt16 nId, IconChoicePage& rPage ); 209 virtual SfxItemSet* CreateInputItemSet( sal_uInt16 nId ); 210 inline SfxItemSet* GetInputSetImpl() { return (SfxItemSet*)pSet; } 211 inline IconChoicePage* GetTabPage( sal_uInt16 nPageId ) 212 { return ( GetPageData (nPageId)->pPage?GetPageData (nPageId)->pPage:NULL); } 213 const SfxItemSet* GetRefreshedSet(); 214 215 void ActivatePageImpl (); 216 sal_Bool DeActivatePageImpl (); 217 void ResetPageImpl (); 218 219 short Ok(); 220 221 public : 222 223 // im Ctor k�nnte auch die Position des IconChoiceCtrl's gesetzt werden. 224 225 IconChoiceDialog ( Window* pParent, const ResId &rResId, 226 const EIconChoicePos ePos = PosLeft, const SfxItemSet * pItemSet = 0 ); 227 ~IconChoiceDialog (); 228 229 /////////////////////////////////////////////////////////////////////////////////// 230 // virtuelle Methoden 231 // 232 virtual void Paint( const Rectangle& rRect ); 233 virtual void Resize(); 234 235 /////////////////////////////////////////////////////////////////////////////////// 236 // Schnittstelle 237 // 238 239 SvxIconChoiceCtrlEntry* AddTabPage( 240 sal_uInt16 nId, const String& rIconText, const Image& rChoiceIcon, const Image& rChoiceIconHC, 241 CreatePage pCreateFunc /* != NULL */, GetPageRanges pRangesFunc = NULL /* NULL allowed*/, 242 sal_Bool bItemsOnDemand = sal_False, sal_uLong nPos = LIST_APPEND ); 243 244 void SetCurPageId( sal_uInt16 nId ) { mnCurrentPageId = nId; FocusOnIcon( nId ); } 245 sal_uInt16 GetCurPageId() const { return mnCurrentPageId; } 246 void ShowPage( sal_uInt16 nId ); 247 248 // liefert ggf. per Map konvertierte lokale Slots 249 const sal_uInt16* GetInputRanges( const SfxItemPool& ); 250 void SetInputSet( const SfxItemSet* pInSet ); 251 const SfxItemSet* GetOutputItemSet() const { return pOutSet; } 252 253 const OKButton& GetOKButton() const { return aOKBtn; } 254 OKButton& GetOKButton() { return aOKBtn; } 255 const CancelButton& GetCancelButton() const { return aCancelBtn; } 256 CancelButton& GetCancelButton() { return aCancelBtn; } 257 const HelpButton& GetHelpButton() const { return aHelpBtn; } 258 HelpButton& GetHelpButton() { return aHelpBtn; } 259 260 short Execute(); 261 void Start( sal_Bool bShow = sal_True ); 262 sal_Bool QueryClose(); 263 264 const SfxItemSet* GetExampleSet() const { return pExampleSet; } 265 266 EIconChoicePos SetCtrlPos ( const EIconChoicePos& rPos ); 267 }; 268 269 #endif //_ICCDLG_HXX 270 271