Version 6.4.0.3, tag libreoffice-6.4.0.3
[LibreOffice.git] / include / sfx2 / dinfdlg.hxx
blob08be8bb5ea196631d4532e28581b6cd147215840
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
19 #ifndef INCLUDED_SFX2_DINFDLG_HXX
20 #define INCLUDED_SFX2_DINFDLG_HXX
22 #include <sal/config.h>
23 #include <sfx2/dllapi.h>
25 #include <com/sun/star/beans/PropertyValue.hpp>
26 #include <com/sun/star/util/DateTime.hpp>
27 #include <com/sun/star/util/Duration.hpp>
28 #include <com/sun/star/document/CmisProperty.hpp>
30 #include <svl/stritem.hxx>
31 #include <svl/zforlist.hxx>
33 #include <svtools/ctrlbox.hxx>
35 #include <vcl/idle.hxx>
37 #include <sfx2/tabdlg.hxx>
39 #include <boost/optional/optional.hpp>
40 #include <memory>
42 namespace com::sun::star::beans { struct PropertyValue; }
44 namespace com { namespace sun { namespace star {
45 namespace document {
46 class XDocumentProperties;
48 } } }
50 struct CustomProperty;
52 // class SfxDocumentInfoItem ---------------------------------------------
54 class SFX2_DLLPUBLIC SfxDocumentInfoItem final : public SfxStringItem
56 private:
57 sal_Int32 m_AutoloadDelay;
58 OUString m_AutoloadURL;
59 bool m_isAutoloadEnabled;
60 OUString m_DefaultTarget;
61 OUString const m_TemplateName;
62 OUString m_Author;
63 css::util::DateTime m_CreationDate;
64 OUString m_ModifiedBy;
65 css::util::DateTime m_ModificationDate;
66 OUString m_PrintedBy;
67 css::util::DateTime m_PrintDate;
68 sal_Int16 m_EditingCycles;
69 sal_Int32 m_EditingDuration;
70 OUString m_Description;
71 OUString m_Keywords;
72 OUString m_Subject;
73 OUString m_Title;
74 bool m_bHasTemplate;
75 bool m_bDeleteUserData;
76 bool m_bUseUserData;
77 bool m_bUseThumbnailSave;
78 std::vector< std::unique_ptr<CustomProperty> > m_aCustomProperties;
79 css::uno::Sequence< css::document::CmisProperty > m_aCmisProperties;
81 public:
82 static SfxPoolItem* CreateDefault();
83 SfxDocumentInfoItem();
84 SfxDocumentInfoItem( const OUString &rFileName,
85 const css::uno::Reference< css::document::XDocumentProperties> & i_xDocProps,
86 const css::uno::Sequence< css::document::CmisProperty> & i_cmisProps,
87 bool bUseUserData, bool bUseThumbnailSave );
88 SfxDocumentInfoItem( const SfxDocumentInfoItem& );
89 virtual ~SfxDocumentInfoItem() override;
91 /// update i_xDocProps with the data in this object
92 void UpdateDocumentInfo(
93 const css::uno::Reference< css::document::XDocumentProperties> & i_xDocProps,
94 bool i_bDoNotUpdateUserDefined = false)
95 const;
96 bool isCmisDocument() const { return m_aCmisProperties.hasElements();}
98 bool isAutoloadEnabled() const { return m_isAutoloadEnabled; }
99 void setAutoloadEnabled(bool i_val) { m_isAutoloadEnabled = i_val; }
100 sal_Int32 getAutoloadDelay() const { return m_AutoloadDelay; }
101 void setAutoloadDelay(sal_Int32 i_val) { m_AutoloadDelay = i_val; }
102 const OUString& getAutoloadURL() const { return m_AutoloadURL; }
103 void setAutoloadURL(const OUString& i_val) { m_AutoloadURL = i_val; }
104 const OUString& getDefaultTarget() const { return m_DefaultTarget; }
105 void setDefaultTarget(const OUString& i_val) { m_DefaultTarget = i_val; }
106 const OUString& getTemplateName() const { return m_TemplateName; }
107 const OUString& getAuthor() const { return m_Author; }
108 void setAuthor(const OUString& i_val) { m_Author = i_val; }
110 const css::util::DateTime&
111 getCreationDate() const { return m_CreationDate; }
112 const OUString& getModifiedBy() const { return m_ModifiedBy; }
113 void setModifiedBy(const OUString& i_val) { m_ModifiedBy = i_val; }
115 const css::util::DateTime&
116 getModificationDate() const { return m_ModificationDate; }
117 const OUString& getPrintedBy() const { return m_PrintedBy; }
118 void setPrintedBy(const OUString& i_val) { m_PrintedBy = i_val; }
119 const css::util::DateTime&
120 getPrintDate() const { return m_PrintDate; }
121 sal_Int16 getEditingCycles() const { return m_EditingCycles; }
122 void setEditingCycles(sal_Int16 i_val) { m_EditingCycles = i_val; }
123 sal_Int32 getEditingDuration() const { return m_EditingDuration; }
124 void setEditingDuration(sal_Int32 i_val) { m_EditingDuration = i_val; }
125 const OUString& getDescription() const { return m_Description; }
126 void setDescription(const OUString& i_val) { m_Description = i_val; }
127 const OUString& getKeywords() const { return m_Keywords; }
128 void setKeywords(const OUString& i_val) { m_Keywords = i_val; }
129 const OUString& getSubject() const { return m_Subject; }
130 void setSubject(const OUString& i_val) { m_Subject = i_val; }
131 const OUString& getTitle() const { return m_Title; }
132 void setTitle(const OUString& i_val) { m_Title = i_val; }
134 /// reset user-specific data (author, modified-by, ...)
135 void resetUserData(const OUString & i_rAuthor);
137 void SetTemplate( bool b ) { m_bHasTemplate = b; }
138 bool HasTemplate() const { return m_bHasTemplate; }
139 void SetDeleteUserData( bool bSet );
140 void SetUseUserData( bool bSet );
141 void SetUseThumbnailSave( bool bSet );
142 bool IsDeleteUserData() const { return m_bDeleteUserData;}
143 bool IsUseUserData() const { return m_bUseUserData;}
144 bool IsUseThumbnailSave() const { return m_bUseThumbnailSave;}
147 std::vector< std::unique_ptr<CustomProperty> > GetCustomProperties() const;
148 void ClearCustomProperties();
149 void AddCustomProperty( const OUString& sName,
150 const css::uno::Any& rValue );
152 const css::uno::Sequence< css::document::CmisProperty >&
153 GetCmisProperties() const { return m_aCmisProperties;}
155 void SetCmisProperties(const css::uno::Sequence< css::document::CmisProperty >& cmisProps );
156 virtual SfxPoolItem* Clone( SfxItemPool* pPool = nullptr ) const override;
157 virtual bool operator==( const SfxPoolItem& ) const override;
158 virtual bool QueryValue( css::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const override;
159 virtual bool PutValue( const css::uno::Any& rVal, sal_uInt8 nMemberId ) override;
162 // class SfxDocumentPage -------------------------------------------------
164 class SfxDocumentPage final : public SfxTabPage
166 private:
167 OUString m_aUnknownSize;
168 OUString m_aMultiSignedStr;
170 bool bEnableUseUserData : 1,
171 bHandleDelete : 1;
173 std::unique_ptr<weld::Image> m_xBmp;
174 std::unique_ptr<weld::Label> m_xNameED;
175 std::unique_ptr<weld::Button> m_xChangePassBtn;
177 std::unique_ptr<weld::Label> m_xShowTypeFT;
178 std::unique_ptr<weld::Label> m_xFileValEd;
179 std::unique_ptr<weld::Label> m_xShowSizeFT;
181 std::unique_ptr<weld::Label> m_xCreateValFt;
182 std::unique_ptr<weld::Label> m_xChangeValFt;
183 std::unique_ptr<weld::Label> m_xSignedValFt;
184 std::unique_ptr<weld::Button> m_xSignatureBtn;
185 std::unique_ptr<weld::Label> m_xPrintValFt;
186 std::unique_ptr<weld::Label> m_xTimeLogValFt;
187 std::unique_ptr<weld::Label> m_xDocNoValFt;
189 std::unique_ptr<weld::CheckButton> m_xUseUserDataCB;
190 std::unique_ptr<weld::Button> m_xDeleteBtn;
191 std::unique_ptr<weld::CheckButton> m_xUseThumbnailSaveCB;
193 std::unique_ptr<weld::Label> m_xTemplFt;
194 std::unique_ptr<weld::Label> m_xTemplValFt;
196 DECL_LINK(DeleteHdl, weld::Button&, void);
197 DECL_LINK(SignatureHdl, weld::Button&, void);
198 DECL_LINK(ChangePassHdl, weld::Button&, void);
199 void ImplUpdateSignatures();
200 void ImplCheckPasswordState();
202 virtual bool FillItemSet( SfxItemSet* ) override;
203 virtual void Reset( const SfxItemSet* ) override;
205 public:
206 SfxDocumentPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet&);
207 static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
208 virtual ~SfxDocumentPage() override;
210 void EnableUseUserData();
213 // class SfxDocumentDescPage ---------------------------------------------
215 class SfxDocumentDescPage final : public SfxTabPage
217 private:
218 SfxDocumentInfoItem* m_pInfoItem;
219 std::unique_ptr<weld::Entry> m_xTitleEd;
220 std::unique_ptr<weld::Entry> m_xThemaEd;
221 std::unique_ptr<weld::Entry> m_xKeywordsEd;
222 std::unique_ptr<weld::TextView> m_xCommentEd;
224 virtual bool FillItemSet( SfxItemSet* ) override;
225 virtual void Reset( const SfxItemSet* ) override;
227 public:
228 SfxDocumentDescPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet&);
229 virtual ~SfxDocumentDescPage() override;
230 static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
233 // class SfxDocumentInfoDialog -------------------------------------------
235 class SFX2_DLLPUBLIC SfxDocumentInfoDialog final : public SfxTabDialogController
237 virtual void PageCreated(const OString& rId, SfxTabPage& rPage) override;
239 public:
240 SfxDocumentInfoDialog(weld::Window* pParent, const SfxItemSet&);
241 void AddFontTabPage();
244 // class CustomPropertiesRemoveButton ------------------------------------
245 struct CustomPropertyLine;
247 class CustomPropertiesDateField
249 private:
250 std::unique_ptr<SvtCalendarBox> m_xDateField;
251 public:
252 ::boost::optional<sal_Int16> m_TZ;
254 CustomPropertiesDateField(SvtCalendarBox* pDateField);
255 void set_visible(bool bVisible) { m_xDateField->set_visible(bVisible); }
256 Date get_date() const { return m_xDateField->get_date(); }
257 void set_date(const Date& rDate) { m_xDateField->set_date(rDate); }
258 ~CustomPropertiesDateField();
261 class CustomPropertiesTimeField
263 public:
264 std::unique_ptr<weld::TimeSpinButton> m_xTimeField;
265 bool m_isUTC;
267 CustomPropertiesTimeField(std::unique_ptr<weld::TimeSpinButton> xTimeField);
268 void set_visible(bool bVisible) { m_xTimeField->set_visible(bVisible); }
269 tools::Time get_value() const { return m_xTimeField->get_value(); }
270 void set_value(const tools::Time& rTime) { m_xTimeField->set_value(rTime); }
271 ~CustomPropertiesTimeField();
274 class CustomPropertiesDurationField
276 css::util::Duration m_aDuration;
277 std::unique_ptr<weld::Entry> m_xEntry;
278 std::unique_ptr<weld::Button> m_xEditButton;
280 DECL_LINK(ClickHdl, weld::Button&, void);
281 public:
282 CustomPropertiesDurationField(std::unique_ptr<weld::Entry> xEntry,
283 std::unique_ptr<weld::Button> xEditButton);
285 void SetDuration( const css::util::Duration& rDuration );
286 const css::util::Duration& GetDuration() const { return m_aDuration; }
288 void set_visible(bool bVisible);
291 class CustomPropertiesYesNoButton
293 private:
294 std::unique_ptr<weld::Widget> m_xTopLevel;
295 std::unique_ptr<weld::RadioButton> m_xYesButton;
296 std::unique_ptr<weld::RadioButton> m_xNoButton;
298 public:
299 CustomPropertiesYesNoButton(std::unique_ptr<weld::Widget>,
300 std::unique_ptr<weld::RadioButton> xYesButton,
301 std::unique_ptr<weld::RadioButton> xNoButton);
302 ~CustomPropertiesYesNoButton();
304 void CheckYes() { m_xYesButton->set_active(true); }
305 void CheckNo() { m_xNoButton->set_active(true); }
306 bool IsYesChecked() const { return m_xYesButton->get_active(); }
307 void set_visible(bool bVisible) { m_xTopLevel->set_visible(bVisible); }
310 class CustomPropertiesWindow;
312 // struct CustomPropertyLine ---------------------------------------------
313 struct CustomPropertyLine
315 CustomPropertiesWindow* m_pParent;
317 std::unique_ptr<weld::Builder> m_xBuilder;
318 std::unique_ptr<weld::Container> m_xLine;
319 std::unique_ptr<weld::ComboBox> m_xNameBox;
320 std::unique_ptr<weld::ComboBox> m_xTypeBox;
321 std::unique_ptr<weld::Entry> m_xValueEdit;
322 std::unique_ptr<weld::Widget> m_xDateTimeBox;
323 std::unique_ptr<CustomPropertiesDateField> m_xDateField;
324 std::unique_ptr<CustomPropertiesTimeField> m_xTimeField;
325 std::unique_ptr<weld::Widget> m_xDurationBox;
326 std::unique_ptr<CustomPropertiesDurationField> m_xDurationField;
327 std::unique_ptr<CustomPropertiesYesNoButton> m_xYesNoButton;
328 std::unique_ptr<weld::Button> m_xRemoveButton;
330 bool m_bTypeLostFocus;
332 CustomPropertyLine(CustomPropertiesWindow* pParent, weld::Widget* pContainer);
333 DECL_LINK(TypeHdl, weld::ComboBox&, void);
334 DECL_LINK(RemoveHdl, weld::Button&, void);
335 DECL_LINK(EditLoseFocusHdl, weld::Widget&, void);
336 DECL_LINK(BoxLoseFocusHdl, weld::Widget&, void);
338 void DoTypeHdl(const weld::ComboBox& rBox);
340 void Clear();
341 void Hide();
344 // class CustomPropertiesWindow ------------------------------------------
346 class CustomPropertiesWindow
348 private:
349 sal_Int32 m_nHeight;
350 sal_Int32 m_nLineHeight;
351 sal_Int32 m_nScrollPos;
352 std::vector<std::unique_ptr<CustomProperty>> m_aCustomProperties;
353 std::vector<std::unique_ptr<CustomPropertyLine>> m_aCustomPropertiesLines;
354 CustomPropertyLine* m_pCurrentLine;
355 SvNumberFormatter m_aNumberFormatter;
356 Idle m_aEditLoseFocusIdle;
357 Idle m_aBoxLoseFocusIdle;
358 Link<void*,void> m_aRemovedHdl;
360 weld::Container& m_rBody;
361 weld::Label& m_rHeaderAccName;
362 weld::Label& m_rHeaderAccType;
363 weld::Label& m_rHeaderAccValue;
365 DECL_LINK(EditTimeoutHdl, Timer *, void);
366 DECL_LINK(BoxTimeoutHdl, Timer *, void);
368 bool IsLineValid( CustomPropertyLine* pLine ) const;
369 void ValidateLine( CustomPropertyLine* pLine, bool bIsFromTypeBox );
370 void CreateNewLine();
371 void StoreCustomProperties();
372 sal_uInt32 GetCurrentDataModelPosition() const { return -1 * m_nScrollPos / m_nLineHeight; }
374 public:
375 CustomPropertiesWindow(weld::Container& rParent, weld::Label& rHeaderAccName,
376 weld::Label& rHeaderAccType, weld::Label& rHeaderAccValue);
377 ~CustomPropertiesWindow();
379 sal_uInt16 GetExistingLineCount() const { return m_aCustomPropertiesLines.size(); }
380 sal_uInt16 GetTotalLineCount() const { return m_aCustomProperties.size(); }
381 void SetVisibleLineCount(sal_uInt32 nCount);
382 sal_Int32 GetHeight() const { return m_nHeight; }
383 void SetHeight(int nHeight) { m_nHeight = nHeight; }
384 sal_Int32 GetLineHeight() const { return m_nLineHeight; }
385 void SetLineHeight(sal_Int32 nLineHeight) { m_nLineHeight = nLineHeight; }
386 void AddLine( const OUString& sName, css::uno::Any const & rAny );
387 bool AreAllLinesValid() const;
388 void ClearAllLines();
389 void DoScroll( sal_Int32 nNewPos );
390 void ReloadLinesContent();
392 css::uno::Sequence< css::beans::PropertyValue >
393 GetCustomProperties();
394 void SetCustomProperties(std::vector< std::unique_ptr<CustomProperty> >&& rProperties);
395 void SetRemovedHdl( const Link<void*,void>& rLink ) { m_aRemovedHdl = rLink; }
397 void BoxLoseFocus(CustomPropertyLine* pLine);
398 void EditLoseFocus(CustomPropertyLine* pLine);
399 void Remove(const CustomPropertyLine* pLine);
402 // class CustomPropertiesControl -----------------------------------------
404 class CustomPropertiesControl
406 private:
407 sal_Int32 m_nThumbPos;
409 std::unique_ptr<weld::Widget> m_xBox;
410 std::unique_ptr<weld::Container> m_xBody;
411 std::unique_ptr<weld::ScrolledWindow> m_xVertScroll;
412 std::unique_ptr<CustomPropertiesWindow> m_xPropertiesWin;
413 std::unique_ptr<weld::Label> m_xName;
414 std::unique_ptr<weld::Label> m_xType;
415 std::unique_ptr<weld::Label> m_xValue;
417 DECL_LINK( ResizeHdl, const Size&, void );
418 DECL_LINK( ScrollHdl, weld::ScrolledWindow&, void );
419 DECL_LINK( RemovedHdl, void*, void );
421 public:
422 CustomPropertiesControl();
423 ~CustomPropertiesControl();
425 void AddLine(css::uno::Any const & rAny);
427 bool AreAllLinesValid() const { return m_xPropertiesWin->AreAllLinesValid(); }
428 void ClearAllLines() { m_xPropertiesWin->ClearAllLines(); }
430 css::uno::Sequence<css::beans::PropertyValue>
431 GetCustomProperties() const
432 { return m_xPropertiesWin->GetCustomProperties(); }
433 void SetCustomProperties(std::vector< std::unique_ptr<CustomProperty> >&& rProperties);
435 void Init(weld::Builder& rParent);
438 // class SfxCustomPropertiesPage -----------------------------------------
440 class SfxCustomPropertiesPage final : public SfxTabPage
442 private:
443 DECL_LINK(AddHdl, weld::Button&, void);
445 std::unique_ptr<CustomPropertiesControl> m_xPropertiesCtrl;
446 std::unique_ptr<weld::Button> m_xAdd;
448 virtual bool FillItemSet( SfxItemSet* ) override;
449 virtual void Reset( const SfxItemSet* ) override;
450 virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
452 public:
453 SfxCustomPropertiesPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet&);
454 static std::unique_ptr<SfxTabPage> Create( weld::Container* pPage, weld::DialogController* pController, const SfxItemSet* );
455 virtual ~SfxCustomPropertiesPage() override;
458 struct CmisValue
460 std::unique_ptr<weld::Builder> m_xBuilder;
461 std::unique_ptr<weld::Frame> m_xFrame;
462 std::unique_ptr<weld::Entry> m_xValueEdit;
464 CmisValue(weld::Widget* pParent, const OUString& rStr);
467 struct CmisDateTime
469 std::unique_ptr<weld::Builder> m_xBuilder;
470 std::unique_ptr<weld::Frame> m_xFrame;
471 std::unique_ptr<SvtCalendarBox> m_xDateField;
472 std::unique_ptr<weld::TimeSpinButton> m_xTimeField;
474 CmisDateTime(weld::Widget* pParent, const css::util::DateTime& rDateTime);
477 struct CmisYesNo
479 std::unique_ptr<weld::Builder> m_xBuilder;
480 std::unique_ptr<weld::Frame> m_xFrame;
481 std::unique_ptr<weld::RadioButton> m_xYesButton;
482 std::unique_ptr<weld::RadioButton> m_xNoButton;
484 CmisYesNo(weld::Widget* pParent, bool bValue);
487 // struct CmisPropertyLine ---------------------------------------------
489 struct CmisPropertyLine
491 std::unique_ptr<weld::Builder> m_xBuilder;
492 OUString m_sId;
493 OUString m_sType;
494 bool m_bUpdatable;
495 bool m_bRequired;
496 bool m_bMultiValued;
497 bool m_bOpenChoice;
498 std::unique_ptr<weld::Frame> m_xFrame;
499 std::unique_ptr<weld::Label> m_xName;
500 std::unique_ptr<weld::Label> m_xType;
501 std::vector< std::unique_ptr<CmisValue> > m_aValues;
502 std::vector< std::unique_ptr<CmisDateTime> > m_aDateTimes;
503 std::vector< std::unique_ptr<CmisYesNo> > m_aYesNos;
504 CmisPropertyLine(weld::Widget* pParent);
505 ~CmisPropertyLine();
508 // class CmisPropertiesWindow ------------------------------------------
510 class CmisPropertiesWindow
512 private:
513 std::unique_ptr<weld::Container> m_xBox;
514 SvNumberFormatter m_aNumberFormatter;
515 std::vector< std::unique_ptr<CmisPropertyLine> > m_aCmisPropertiesLines;
516 public:
517 CmisPropertiesWindow(std::unique_ptr<weld::Container> xParent);
518 ~CmisPropertiesWindow();
520 void AddLine( const OUString& sId, const OUString& sName,
521 const OUString& sType, const bool bUpdatable,
522 const bool bRequired, const bool bMultiValued,
523 const bool bOpenChoice,
524 css::uno::Any& aChoices,
525 css::uno::Any const & rAny );
526 void ClearAllLines();
528 css::uno::Sequence< css::document::CmisProperty >
529 GetCmisProperties() const;
532 // class CmisPropertiesControl -----------------------------------------
534 class CmisPropertiesControl
536 private:
537 CmisPropertiesWindow m_aPropertiesWin;
538 std::unique_ptr<weld::ScrolledWindow> m_xScrolledWindow;
540 public:
541 CmisPropertiesControl(weld::Builder& rBuilder);
543 void AddLine( const OUString& sId, const OUString& sName,
544 const OUString& sType, const bool bUpdatable,
545 const bool bRequired, const bool bMultiValude,
546 const bool bOpenChoice,
547 css::uno::Any& aChoices,
548 css::uno::Any const & rAny );
550 void ClearAllLines();
551 css::uno::Sequence< css::document::CmisProperty >
552 GetCmisProperties() const
553 { return m_aPropertiesWin.GetCmisProperties(); }
556 // class SfxCmisPropertiesPage -------------------------------------------------
558 class SfxCmisPropertiesPage final : public SfxTabPage
560 private:
561 std::unique_ptr<CmisPropertiesControl> m_xPropertiesCtrl;
563 virtual bool FillItemSet( SfxItemSet* ) override;
564 virtual void Reset( const SfxItemSet* ) override;
565 virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override;
567 public:
568 SfxCmisPropertiesPage(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet&);
569 virtual ~SfxCmisPropertiesPage() override;
570 static std::unique_ptr<SfxTabPage> Create(weld::Container* pPage, weld::DialogController* pController, const SfxItemSet*);
573 #endif // #ifndef _ INCLUDED_SFX2_DINFDLG_HXX
575 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */