1 /************************************************************** 2 * 3 * Licensed to the Apache Software Foundation (ASF) under one 4 * or more contributor license agreements. See the NOTICE file 5 * distributed with this work for additional information 6 * regarding copyright ownership. The ASF licenses this file 7 * to you under the Apache License, Version 2.0 (the 8 * "License"); you may not use this file except in compliance 9 * with the License. You may obtain a copy of the License at 10 * 11 * http://www.apache.org/licenses/LICENSE-2.0 12 * 13 * Unless required by applicable law or agreed to in writing, 14 * software distributed under the License is distributed on an 15 * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16 * KIND, either express or implied. See the License for the 17 * specific language governing permissions and limitations 18 * under the License. 19 * 20 *************************************************************/ 21 22 23 #ifndef _SFX_DINFDLG_HXX 24 #define _SFX_DINFDLG_HXX 25 26 #include "sal/config.h" 27 #include "sfx2/dllapi.h" 28 29 #include <com/sun/star/util/DateTime.hpp> 30 #include <vcl/edit.hxx> 31 #include <vcl/field.hxx> 32 #include <svtools/stdctrl.hxx> 33 #include <svl/stritem.hxx> 34 #include <svtools/svmedit.hxx> 35 36 #include <vcl/edit.hxx> 37 #include <vcl/lstbox.hxx> 38 #include <vcl/scrbar.hxx> 39 #include <svtools/headbar.hxx> 40 #include <unotools/syslocale.hxx> 41 #include <svl/zforlist.hxx> 42 #include <com/sun/star/util/Duration.hpp> 43 #include "tabdlg.hxx" 44 45 namespace com { namespace sun { namespace star { 46 namespace document { 47 class XDocumentProperties; 48 } 49 } } } 50 51 struct CustomProperty; 52 53 54 // class SfxDocumentInfoItem --------------------------------------------- 55 56 class SFX2_DLLPUBLIC SfxDocumentInfoItem : public SfxStringItem 57 { 58 private: 59 sal_Int32 m_AutoloadDelay; 60 ::rtl::OUString m_AutoloadURL; 61 sal_Bool m_isAutoloadEnabled; 62 ::rtl::OUString m_DefaultTarget; 63 ::rtl::OUString m_TemplateName; 64 ::rtl::OUString m_Author; 65 ::com::sun::star::util::DateTime m_CreationDate; 66 ::rtl::OUString m_ModifiedBy; 67 ::com::sun::star::util::DateTime m_ModificationDate; 68 ::rtl::OUString m_PrintedBy; 69 ::com::sun::star::util::DateTime m_PrintDate; 70 sal_Int16 m_EditingCycles; 71 sal_Int32 m_EditingDuration; 72 ::rtl::OUString m_Description; 73 ::rtl::OUString m_Keywords; 74 ::rtl::OUString m_Subject; 75 ::rtl::OUString m_Title; 76 sal_Bool m_bHasTemplate; 77 sal_Bool m_bDeleteUserData; 78 sal_Bool m_bUseUserData; 79 std::vector< CustomProperty* > m_aCustomProperties; 80 81 public: 82 TYPEINFO(); 83 SfxDocumentInfoItem(); 84 SfxDocumentInfoItem( const String &rFileName, 85 const ::com::sun::star::uno::Reference< 86 ::com::sun::star::document::XDocumentProperties> & i_xDocProps, 87 sal_Bool bUseUserData ); 88 SfxDocumentInfoItem( const SfxDocumentInfoItem& ); 89 virtual ~SfxDocumentInfoItem(); 90 91 /// update i_xDocProps with the data in this object 92 void UpdateDocumentInfo( 93 const ::com::sun::star::uno::Reference< 94 ::com::sun::star::document::XDocumentProperties> & i_xDocProps, 95 bool i_bDoNotUpdateUserDefined = false) 96 const; 97 isAutoloadEnabled() const98 sal_Bool isAutoloadEnabled() const { return m_isAutoloadEnabled; } setAutoloadEnabled(sal_Bool i_val)99 void setAutoloadEnabled(sal_Bool i_val) { m_isAutoloadEnabled = i_val; } getAutoloadDelay() const100 sal_Int32 getAutoloadDelay() const { return m_AutoloadDelay; } setAutoloadDelay(sal_Int32 i_val)101 void setAutoloadDelay(sal_Int32 i_val) { m_AutoloadDelay = i_val; } getAutoloadURL() const102 ::rtl::OUString getAutoloadURL() const { return m_AutoloadURL; } setAutoloadURL(::rtl::OUString i_val)103 void setAutoloadURL(::rtl::OUString i_val) { m_AutoloadURL = i_val; } getDefaultTarget() const104 ::rtl::OUString getDefaultTarget() const { return m_DefaultTarget; } setDefaultTarget(::rtl::OUString i_val)105 void setDefaultTarget(::rtl::OUString i_val) { m_DefaultTarget = i_val; } getTemplateName() const106 ::rtl::OUString getTemplateName() const { return m_TemplateName; } setTemplateName(::rtl::OUString i_val)107 void setTemplateName(::rtl::OUString i_val) { m_TemplateName = i_val; } getAuthor() const108 ::rtl::OUString getAuthor() const { return m_Author; } setAuthor(::rtl::OUString i_val)109 void setAuthor(::rtl::OUString i_val) { m_Author = i_val; } 110 111 ::com::sun::star::util::DateTime getCreationDate() const112 getCreationDate() const { return m_CreationDate; } setCreationDate(::com::sun::star::util::DateTime i_val)113 void setCreationDate(::com::sun::star::util::DateTime i_val) { 114 m_CreationDate = i_val; 115 } getModifiedBy() const116 ::rtl::OUString getModifiedBy() const { return m_ModifiedBy; } setModifiedBy(::rtl::OUString i_val)117 void setModifiedBy(::rtl::OUString i_val) { m_ModifiedBy = i_val; } 118 119 ::com::sun::star::util::DateTime getModificationDate() const120 getModificationDate() const { return m_ModificationDate; } setModificationDate(::com::sun::star::util::DateTime i_val)121 void setModificationDate(::com::sun::star::util::DateTime i_val) { 122 m_ModificationDate = i_val; 123 } getPrintedBy() const124 ::rtl::OUString getPrintedBy() const { return m_PrintedBy; } setPrintedBy(::rtl::OUString i_val)125 void setPrintedBy(::rtl::OUString i_val) { m_PrintedBy = i_val; } 126 ::com::sun::star::util::DateTime getPrintDate() const127 getPrintDate() const { return m_PrintDate; } setPrintDate(::com::sun::star::util::DateTime i_val)128 void setPrintDate(::com::sun::star::util::DateTime i_val) { 129 m_PrintDate = i_val; 130 } getEditingCycles() const131 sal_Int16 getEditingCycles() const { return m_EditingCycles; } setEditingCycles(sal_Int16 i_val)132 void setEditingCycles(sal_Int16 i_val) { m_EditingCycles = i_val; } getEditingDuration() const133 sal_Int32 getEditingDuration() const { return m_EditingDuration; } setEditingDuration(sal_Int32 i_val)134 void setEditingDuration(sal_Int32 i_val) { m_EditingDuration = i_val; } getDescription() const135 ::rtl::OUString getDescription() const { return m_Description; } setDescription(::rtl::OUString i_val)136 void setDescription(::rtl::OUString i_val) { m_Description = i_val; } getKeywords() const137 ::rtl::OUString getKeywords() const { return m_Keywords; } setKeywords(::rtl::OUString i_val)138 void setKeywords(::rtl::OUString i_val) { m_Keywords = i_val; } getSubject() const139 ::rtl::OUString getSubject() const { return m_Subject; } setSubject(::rtl::OUString i_val)140 void setSubject(::rtl::OUString i_val) { m_Subject = i_val; } getTitle() const141 ::rtl::OUString getTitle() const { return m_Title; } setTitle(::rtl::OUString i_val)142 void setTitle(::rtl::OUString i_val) { m_Title = i_val; } 143 144 /// reset user-specific data (author, modified-by, ...) 145 void resetUserData(const ::rtl::OUString & i_rAuthor); 146 SetTemplate(sal_Bool b)147 void SetTemplate( sal_Bool b ) { m_bHasTemplate = b; } HasTemplate() const148 sal_Bool HasTemplate() const { return m_bHasTemplate; } 149 void SetDeleteUserData( sal_Bool bSet ); 150 void SetUseUserData( sal_Bool bSet ); 151 sal_Bool IsDeleteUserData() const; 152 sal_Bool IsUseUserData() const; 153 154 std::vector< CustomProperty* > GetCustomProperties() const; 155 void ClearCustomProperties(); 156 void AddCustomProperty( const ::rtl::OUString& sName, 157 const com::sun::star::uno::Any& rValue ); 158 159 virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; 160 virtual int operator==( const SfxPoolItem& ) const; 161 virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; 162 virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); 163 }; 164 165 // class SfxDocumentPage ------------------------------------------------- 166 167 class SfxDocumentPage : public SfxTabPage 168 { 169 private: 170 FixedImage aBmp1; 171 Edit aNameED; 172 173 FixedLine aLine1FL; 174 FixedText aTypeFT; 175 svt::SelectableFixedText aShowTypeFT; 176 CheckBox aReadOnlyCB; 177 FixedText aFileFt; 178 svt::SelectableFixedText aFileValFt; 179 FixedText aSizeFT; 180 svt::SelectableFixedText aShowSizeFT; 181 182 FixedLine aLine2FL; 183 FixedText aCreateFt; 184 svt::SelectableFixedText aCreateValFt; 185 FixedText aChangeFt; 186 svt::SelectableFixedText aChangeValFt; 187 FixedText aSignedFt; 188 svt::SelectableFixedText aSignedValFt; 189 PushButton aSignatureBtn; 190 FixedText aPrintFt; 191 svt::SelectableFixedText aPrintValFt; 192 FixedText aTimeLogFt; 193 svt::SelectableFixedText aTimeLogValFt; 194 FixedText aDocNoFt; 195 svt::SelectableFixedText aDocNoValFt; 196 CheckBox aUseUserDataCB; 197 PushButton aDeleteBtn; 198 199 FixedLine aLine3FL; 200 FixedText aTemplFt; 201 svt::SelectableFixedText aTemplValFt; 202 203 String aUnknownSize; 204 String aMultiSignedStr; 205 206 sal_Bool bEnableUseUserData : 1, 207 bHandleDelete : 1; 208 209 DECL_LINK( DeleteHdl, PushButton * ); 210 DECL_LINK( SignatureHdl, PushButton * ); 211 void ImplUpdateSignatures(); 212 213 protected: 214 SfxDocumentPage( Window* pParent, const SfxItemSet& ); 215 216 virtual sal_Bool FillItemSet( SfxItemSet& ); 217 virtual void Reset( const SfxItemSet& ); 218 219 public: 220 static SfxTabPage* Create( Window* pParent, const SfxItemSet& ); 221 222 void EnableUseUserData(); 223 }; 224 225 // class SfxDocumentDescPage --------------------------------------------- 226 227 class SfxDocumentDescPage : public SfxTabPage 228 { 229 private: 230 FixedText aTitleFt; 231 Edit aTitleEd; 232 FixedText aThemaFt; 233 Edit aThemaEd; 234 FixedText aKeywordsFt; 235 Edit aKeywordsEd; 236 FixedText aCommentFt; 237 MultiLineEdit aCommentEd; 238 SfxDocumentInfoItem* pInfoItem; 239 240 protected: 241 SfxDocumentDescPage( Window* pParent, const SfxItemSet& ); 242 243 virtual sal_Bool FillItemSet( SfxItemSet& ); 244 virtual void Reset( const SfxItemSet& ); 245 246 public: 247 static SfxTabPage* Create( Window* pParent, const SfxItemSet& ); 248 }; 249 250 // class SfxInternetPage ------------------------------------------------- 251 252 class TargetList; 253 namespace sfx2 254 { 255 class FileDialogHelper; 256 } 257 258 class SfxInternetPage : public SfxTabPage 259 { 260 private: 261 RadioButton aRBNoAutoUpdate; 262 RadioButton aRBReloadUpdate; 263 RadioButton aRBForwardUpdate; 264 265 FixedText aFTEvery; 266 NumericField aNFReload; 267 FixedText aFTReloadSeconds; 268 269 FixedText aFTAfter; 270 NumericField aNFAfter; 271 FixedText aFTAfterSeconds; 272 FixedText aFTURL; 273 Edit aEDForwardURL; 274 PushButton aPBBrowseURL; 275 FixedText aFTFrame; 276 ComboBox aCBFrame; 277 278 String aForwardErrorMessg; 279 String aBaseURL; 280 SfxDocumentInfoItem* pInfoItem; 281 sfx2::FileDialogHelper* pFileDlg; 282 283 enum STATE { S_Init, S_NoUpdate, S_Reload, S_Forward }; 284 // S_Init is only valid as initial value 285 STATE eState; 286 287 void ChangeState( STATE eNewState ); // S_Init is not a valid value here 288 // also checks corresponding radiobutton 289 void EnableNoUpdate( sal_Bool bEnable ); 290 void EnableReload( sal_Bool bEnable ); 291 void EnableForward( sal_Bool bEnable ); 292 293 DECL_LINK( ClickHdlNoUpdate, Control* ); 294 DECL_LINK( ClickHdlReload, Control* ); 295 DECL_LINK( ClickHdlForward, Control* ); 296 DECL_LINK( ClickHdlBrowseURL, PushButton* ); 297 DECL_LINK( DialogClosedHdl, sfx2::FileDialogHelper* ); 298 299 using TabPage::DeactivatePage; 300 301 protected: 302 SfxInternetPage( Window* pParent, const SfxItemSet& ); 303 ~SfxInternetPage(); 304 305 virtual sal_Bool FillItemSet( SfxItemSet& ); 306 virtual void Reset( const SfxItemSet& ); 307 virtual int DeactivatePage( SfxItemSet* pSet = 0 ); 308 309 public: 310 static SfxTabPage* Create( Window* pParent, const SfxItemSet& ); 311 }; 312 313 // class SfxDocumentInfoDialog ------------------------------------------- 314 315 class SFX2_DLLPUBLIC SfxDocumentInfoDialog : public SfxTabDialog 316 { 317 protected: 318 virtual void PageCreated( sal_uInt16 nId, SfxTabPage& rPage ); 319 320 public: 321 SfxDocumentInfoDialog( Window* pParent, const SfxItemSet& ); 322 }; 323 324 // class CustomPropertiesRemoveButton ------------------------------------ 325 326 struct CustomPropertyLine; 327 328 class CustomPropertiesEdit : public Edit 329 { 330 private: 331 CustomPropertyLine* m_pLine; 332 333 public: CustomPropertiesEdit(Window * pParent,const ResId & rResId,CustomPropertyLine * pLine)334 inline CustomPropertiesEdit( 335 Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : 336 Edit( pParent, rResId ), m_pLine( pLine ) {} 337 GetLine() const338 inline CustomPropertyLine* GetLine() const { return m_pLine; } 339 }; 340 341 class CustomPropertiesTypeBox : public ListBox 342 { 343 private: 344 CustomPropertyLine* m_pLine; 345 346 public: CustomPropertiesTypeBox(Window * pParent,const ResId & rResId,CustomPropertyLine * pLine)347 inline CustomPropertiesTypeBox( 348 Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : 349 ListBox( pParent, rResId ), m_pLine( pLine ) {} 350 GetLine() const351 inline CustomPropertyLine* GetLine() const { return m_pLine; } 352 }; 353 354 class CustomPropertiesDateField : public DateField 355 { 356 private: 357 CustomPropertyLine* m_pLine; 358 359 public: CustomPropertiesDateField(Window * pParent,const ResId & rResId,CustomPropertyLine * pLine)360 inline CustomPropertiesDateField( 361 Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : 362 DateField( pParent, rResId ), m_pLine( pLine ) {} 363 GetLine() const364 inline CustomPropertyLine* GetLine() const { return m_pLine; } 365 }; 366 class CustomPropertiesTimeField : public TimeField 367 { 368 private: 369 CustomPropertyLine* m_pLine; 370 371 public: CustomPropertiesTimeField(Window * pParent,const ResId & rResId,CustomPropertyLine * pLine)372 inline CustomPropertiesTimeField( 373 Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : 374 TimeField( pParent, rResId ), m_pLine( pLine ) {} 375 GetLine() const376 inline CustomPropertyLine* GetLine() const { return m_pLine; } 377 }; 378 class CustomPropertiesDurationField : public Edit 379 { 380 CustomPropertyLine* m_pLine; 381 com::sun::star::util::Duration m_aDuration; 382 protected: 383 virtual void RequestHelp(const HelpEvent& rEvt); 384 public: 385 CustomPropertiesDurationField( Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ); 386 ~CustomPropertiesDurationField(); 387 388 void SetDuration( const com::sun::star::util::Duration& rDuration ); GetDuration() const389 const com::sun::star::util::Duration& GetDuration() const { return m_aDuration; } 390 }; 391 392 class CustomPropertiesEditButton : public PushButton 393 { 394 CustomPropertyLine* m_pLine; 395 396 public: 397 CustomPropertiesEditButton( Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ); 398 ~CustomPropertiesEditButton(); 399 400 DECL_LINK(ClickHdl, PushButton*); 401 }; 402 403 class CustomPropertiesRemoveButton : public ImageButton 404 { 405 private: 406 CustomPropertyLine* m_pLine; 407 408 public: CustomPropertiesRemoveButton(Window * pParent,const ResId & rResId,CustomPropertyLine * pLine)409 inline CustomPropertiesRemoveButton( 410 Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : 411 ImageButton( pParent, rResId ), m_pLine( pLine ) {} 412 GetLine() const413 inline CustomPropertyLine* GetLine() const { return m_pLine; } 414 }; 415 416 class CustomPropertiesYesNoButton : public Control 417 { 418 private: 419 RadioButton m_aYesButton; 420 RadioButton m_aNoButton; 421 422 public: 423 CustomPropertiesYesNoButton( Window* pParent, const ResId& rResId ); 424 425 virtual void Resize(); 426 CheckYes()427 inline void CheckYes() { m_aYesButton.Check(); } CheckNo()428 inline void CheckNo() { m_aNoButton.Check(); } IsYesChecked() const429 inline bool IsYesChecked() const { return m_aYesButton.IsChecked() != sal_False; } 430 }; 431 432 // struct CustomPropertyLine --------------------------------------------- 433 434 struct CustomPropertyLine 435 { 436 ComboBox m_aNameBox; 437 CustomPropertiesTypeBox m_aTypeBox; 438 CustomPropertiesEdit m_aValueEdit; 439 CustomPropertiesDateField m_aDateField; 440 CustomPropertiesTimeField m_aTimeField; 441 const String m_sDurationFormat; 442 CustomPropertiesDurationField m_aDurationField; 443 CustomPropertiesEditButton m_aEditButton; 444 CustomPropertiesYesNoButton m_aYesNoButton; 445 CustomPropertiesRemoveButton m_aRemoveButton; 446 447 bool m_bIsRemoved; 448 bool m_bTypeLostFocus; 449 450 CustomPropertyLine( Window* pParent ); 451 452 void SetRemoved(); 453 }; 454 455 // class CustomPropertiesWindow ------------------------------------------ 456 457 class CustomPropertiesWindow : public Window 458 { 459 private: 460 ComboBox m_aNameBox; 461 ListBox m_aTypeBox; 462 Edit m_aValueEdit; 463 DateField m_aDateField; 464 TimeField m_aTimeField; 465 Edit m_aDurationField; 466 PushButton m_aEditButton; 467 CustomPropertiesYesNoButton m_aYesNoButton; 468 ImageButton m_aRemoveButton; 469 470 long m_nDatePosX; 471 long m_nTimePosX; 472 473 sal_Int32 m_nLineHeight; 474 sal_Int32 m_nScrollPos; 475 SvtSysLocale m_aSysLocale; 476 std::vector< CustomPropertyLine* > m_aCustomPropertiesLines; 477 CustomPropertyLine* m_pCurrentLine; 478 SvNumberFormatter m_aNumberFormatter; 479 Timer m_aEditLoseFocusTimer; 480 Timer m_aBoxLoseFocusTimer; 481 Link m_aRemovedHdl; 482 483 DECL_LINK( TypeHdl, CustomPropertiesTypeBox* ); 484 DECL_LINK( RemoveHdl, CustomPropertiesRemoveButton* ); 485 DECL_LINK( EditLoseFocusHdl, CustomPropertiesEdit* ); 486 DECL_LINK( BoxLoseFocusHdl, CustomPropertiesTypeBox* ); 487 //add lose focus handlers of Date/TimeField? 488 489 DECL_LINK( EditTimeoutHdl, Timer* ); 490 DECL_LINK( BoxTimeoutHdl, Timer* ); 491 492 bool IsLineValid( CustomPropertyLine* pLine ) const; 493 void ValidateLine( CustomPropertyLine* pLine, bool bIsFromTypeBox ); 494 495 public: 496 CustomPropertiesWindow( Window* pParent, const ResId& rResId ); 497 ~CustomPropertiesWindow(); 498 499 void InitControls( HeaderBar* pHeaderBar, const ScrollBar* pScrollBar ); 500 sal_uInt16 GetVisibleLineCount() const; GetLineHeight() const501 inline sal_Int32 GetLineHeight() const { return m_nLineHeight; } 502 void AddLine( const ::rtl::OUString& sName, com::sun::star::uno::Any& rAny ); 503 bool AreAllLinesValid() const; 504 void ClearAllLines(); 505 void DoScroll( sal_Int32 nNewPos ); 506 507 bool DoesCustomPropertyExist( const String& rName ) const; 508 ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > 509 GetCustomProperties() const; SetRemovedHdl(const Link & rLink)510 void SetRemovedHdl( const Link& rLink ) { m_aRemovedHdl = rLink; } 511 }; 512 513 // class CustomPropertiesControl ----------------------------------------- 514 515 class CustomPropertiesControl : public Control 516 { 517 private: 518 HeaderBar m_aHeaderBar; 519 CustomPropertiesWindow m_aPropertiesWin; 520 ScrollBar m_aVertScroll; 521 522 bool m_bIsInitialized; 523 sal_Int32 m_nThumbPos; 524 525 void Initialize(); 526 527 DECL_LINK( ScrollHdl, ScrollBar* ); 528 DECL_LINK( RemovedHdl, void* ); 529 530 public: 531 CustomPropertiesControl( Window* pParent, const ResId& rResId ); 532 ~CustomPropertiesControl(); 533 534 void AddLine( const ::rtl::OUString& sName, com::sun::star::uno::Any& rAny, bool bInteractive ); 535 AreAllLinesValid() const536 inline bool AreAllLinesValid() const { return m_aPropertiesWin.AreAllLinesValid(); } ClearAllLines()537 inline void ClearAllLines() { m_aPropertiesWin.ClearAllLines(); } DoesCustomPropertyExist(const String & rName) const538 inline bool DoesCustomPropertyExist( const String& rName ) const 539 { return m_aPropertiesWin.DoesCustomPropertyExist( rName ); } 540 inline ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > GetCustomProperties() const541 GetCustomProperties() const 542 { return m_aPropertiesWin.GetCustomProperties(); } 543 }; 544 545 // class SfxCustomPropertiesPage ----------------------------------------- 546 547 class SfxCustomPropertiesPage : public SfxTabPage 548 { 549 private: 550 CustomPropertiesControl m_aPropertiesCtrl; 551 PushButton m_aAddBtn; 552 FixedText m_aPropertiesFT; 553 554 DECL_LINK( AddHdl, PushButton* ); 555 556 using TabPage::DeactivatePage; 557 558 protected: 559 SfxCustomPropertiesPage( Window* pParent, const SfxItemSet& ); 560 561 virtual sal_Bool FillItemSet( SfxItemSet& ); 562 virtual void Reset( const SfxItemSet& ); 563 virtual int DeactivatePage( SfxItemSet* pSet = NULL ); 564 565 public: 566 static SfxTabPage* Create( Window* pParent, const SfxItemSet& ); 567 }; 568 569 #endif // #ifndef _SFX_DINFDLG_HXX 570 571