1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ 2 /* 3 * This file is part of the LibreOffice project. 4 * 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/. 8 * 9 * This file incorporates work covered by the following license notice: 10 * 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 . 18 */ 19 #ifndef INCLUDED_SFX2_DINFDLG_HXX 20 #define INCLUDED_SFX2_DINFDLG_HXX 21 22 #include <sal/config.h> 23 #include <sfx2/dllapi.h> 24 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> 29 30 #include <svl/stritem.hxx> 31 #include <svl/zforlist.hxx> 32 33 #include <svtools/ctrlbox.hxx> 34 35 #include <vcl/idle.hxx> 36 37 #include <sfx2/tabdlg.hxx> 38 39 #include <boost/optional/optional.hpp> 40 #include <memory> 41 42 namespace com::sun::star::beans { struct PropertyValue; } 43 44 namespace com { namespace sun { namespace star { 45 namespace document { 46 class XDocumentProperties; 47 } 48 } } } 49 50 struct CustomProperty; 51 52 // class SfxDocumentInfoItem --------------------------------------------- 53 54 class SFX2_DLLPUBLIC SfxDocumentInfoItem final : public SfxStringItem 55 { 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; 80 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; 90 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; isCmisDocument() const96 bool isCmisDocument() const { return m_aCmisProperties.hasElements();} 97 isAutoloadEnabled() const98 bool isAutoloadEnabled() const { return m_isAutoloadEnabled; } setAutoloadEnabled(bool i_val)99 void setAutoloadEnabled(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 const OUString& getAutoloadURL() const { return m_AutoloadURL; } setAutoloadURL(const OUString & i_val)103 void setAutoloadURL(const OUString& i_val) { m_AutoloadURL = i_val; } getDefaultTarget() const104 const OUString& getDefaultTarget() const { return m_DefaultTarget; } setDefaultTarget(const OUString & i_val)105 void setDefaultTarget(const OUString& i_val) { m_DefaultTarget = i_val; } getTemplateName() const106 const OUString& getTemplateName() const { return m_TemplateName; } getAuthor() const107 const OUString& getAuthor() const { return m_Author; } setAuthor(const OUString & i_val)108 void setAuthor(const OUString& i_val) { m_Author = i_val; } 109 110 const css::util::DateTime& getCreationDate() const111 getCreationDate() const { return m_CreationDate; } getModifiedBy() const112 const OUString& getModifiedBy() const { return m_ModifiedBy; } setModifiedBy(const OUString & i_val)113 void setModifiedBy(const OUString& i_val) { m_ModifiedBy = i_val; } 114 115 const css::util::DateTime& getModificationDate() const116 getModificationDate() const { return m_ModificationDate; } getPrintedBy() const117 const OUString& getPrintedBy() const { return m_PrintedBy; } setPrintedBy(const OUString & i_val)118 void setPrintedBy(const OUString& i_val) { m_PrintedBy = i_val; } 119 const css::util::DateTime& getPrintDate() const120 getPrintDate() const { return m_PrintDate; } getEditingCycles() const121 sal_Int16 getEditingCycles() const { return m_EditingCycles; } setEditingCycles(sal_Int16 i_val)122 void setEditingCycles(sal_Int16 i_val) { m_EditingCycles = i_val; } getEditingDuration() const123 sal_Int32 getEditingDuration() const { return m_EditingDuration; } setEditingDuration(sal_Int32 i_val)124 void setEditingDuration(sal_Int32 i_val) { m_EditingDuration = i_val; } getDescription() const125 const OUString& getDescription() const { return m_Description; } setDescription(const OUString & i_val)126 void setDescription(const OUString& i_val) { m_Description = i_val; } getKeywords() const127 const OUString& getKeywords() const { return m_Keywords; } setKeywords(const OUString & i_val)128 void setKeywords(const OUString& i_val) { m_Keywords = i_val; } getSubject() const129 const OUString& getSubject() const { return m_Subject; } setSubject(const OUString & i_val)130 void setSubject(const OUString& i_val) { m_Subject = i_val; } getTitle() const131 const OUString& getTitle() const { return m_Title; } setTitle(const OUString & i_val)132 void setTitle(const OUString& i_val) { m_Title = i_val; } 133 134 /// reset user-specific data (author, modified-by, ...) 135 void resetUserData(const OUString & i_rAuthor); 136 SetTemplate(bool b)137 void SetTemplate( bool b ) { m_bHasTemplate = b; } HasTemplate() const138 bool HasTemplate() const { return m_bHasTemplate; } 139 void SetDeleteUserData( bool bSet ); 140 void SetUseUserData( bool bSet ); 141 void SetUseThumbnailSave( bool bSet ); IsDeleteUserData() const142 bool IsDeleteUserData() const { return m_bDeleteUserData;} IsUseUserData() const143 bool IsUseUserData() const { return m_bUseUserData;} IsUseThumbnailSave() const144 bool IsUseThumbnailSave() const { return m_bUseThumbnailSave;} 145 146 147 std::vector< std::unique_ptr<CustomProperty> > GetCustomProperties() const; 148 void ClearCustomProperties(); 149 void AddCustomProperty( const OUString& sName, 150 const css::uno::Any& rValue ); 151 152 const css::uno::Sequence< css::document::CmisProperty >& GetCmisProperties() const153 GetCmisProperties() const { return m_aCmisProperties;} 154 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; 160 }; 161 162 // class SfxDocumentPage ------------------------------------------------- 163 164 class SfxDocumentPage final : public SfxTabPage 165 { 166 private: 167 OUString m_aUnknownSize; 168 OUString m_aMultiSignedStr; 169 170 bool bEnableUseUserData : 1, 171 bHandleDelete : 1; 172 173 std::unique_ptr<weld::Image> m_xBmp; 174 std::unique_ptr<weld::Label> m_xNameED; 175 std::unique_ptr<weld::Button> m_xChangePassBtn; 176 177 std::unique_ptr<weld::Label> m_xShowTypeFT; 178 std::unique_ptr<weld::Label> m_xFileValEd; 179 std::unique_ptr<weld::Label> m_xShowSizeFT; 180 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; 188 189 std::unique_ptr<weld::CheckButton> m_xUseUserDataCB; 190 std::unique_ptr<weld::Button> m_xDeleteBtn; 191 std::unique_ptr<weld::CheckButton> m_xUseThumbnailSaveCB; 192 193 std::unique_ptr<weld::Label> m_xTemplFt; 194 std::unique_ptr<weld::Label> m_xTemplValFt; 195 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(); 201 202 virtual bool FillItemSet( SfxItemSet* ) override; 203 virtual void Reset( const SfxItemSet* ) override; 204 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; 209 210 void EnableUseUserData(); 211 }; 212 213 // class SfxDocumentDescPage --------------------------------------------- 214 215 class SfxDocumentDescPage final : public SfxTabPage 216 { 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; 223 224 virtual bool FillItemSet( SfxItemSet* ) override; 225 virtual void Reset( const SfxItemSet* ) override; 226 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* ); 231 }; 232 233 // class SfxDocumentInfoDialog ------------------------------------------- 234 235 class SFX2_DLLPUBLIC SfxDocumentInfoDialog final : public SfxTabDialogController 236 { 237 virtual void PageCreated(const OString& rId, SfxTabPage& rPage) override; 238 239 public: 240 SfxDocumentInfoDialog(weld::Window* pParent, const SfxItemSet&); 241 void AddFontTabPage(); 242 }; 243 244 // class CustomPropertiesRemoveButton ------------------------------------ 245 struct CustomPropertyLine; 246 247 class CustomPropertiesDateField 248 { 249 private: 250 std::unique_ptr<SvtCalendarBox> m_xDateField; 251 public: 252 ::boost::optional<sal_Int16> m_TZ; 253 254 CustomPropertiesDateField(SvtCalendarBox* pDateField); set_visible(bool bVisible)255 void set_visible(bool bVisible) { m_xDateField->set_visible(bVisible); } get_date() const256 Date get_date() const { return m_xDateField->get_date(); } set_date(const Date & rDate)257 void set_date(const Date& rDate) { m_xDateField->set_date(rDate); } 258 ~CustomPropertiesDateField(); 259 }; 260 261 class CustomPropertiesTimeField 262 { 263 public: 264 std::unique_ptr<weld::TimeSpinButton> m_xTimeField; 265 bool m_isUTC; 266 267 CustomPropertiesTimeField(std::unique_ptr<weld::TimeSpinButton> xTimeField); set_visible(bool bVisible)268 void set_visible(bool bVisible) { m_xTimeField->set_visible(bVisible); } get_value() const269 tools::Time get_value() const { return m_xTimeField->get_value(); } set_value(const tools::Time & rTime)270 void set_value(const tools::Time& rTime) { m_xTimeField->set_value(rTime); } 271 ~CustomPropertiesTimeField(); 272 }; 273 274 class CustomPropertiesDurationField 275 { 276 css::util::Duration m_aDuration; 277 std::unique_ptr<weld::Entry> m_xEntry; 278 std::unique_ptr<weld::Button> m_xEditButton; 279 280 DECL_LINK(ClickHdl, weld::Button&, void); 281 public: 282 CustomPropertiesDurationField(std::unique_ptr<weld::Entry> xEntry, 283 std::unique_ptr<weld::Button> xEditButton); 284 285 void SetDuration( const css::util::Duration& rDuration ); GetDuration() const286 const css::util::Duration& GetDuration() const { return m_aDuration; } 287 288 void set_visible(bool bVisible); 289 }; 290 291 class CustomPropertiesYesNoButton 292 { 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; 297 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(); 303 CheckYes()304 void CheckYes() { m_xYesButton->set_active(true); } CheckNo()305 void CheckNo() { m_xNoButton->set_active(true); } IsYesChecked() const306 bool IsYesChecked() const { return m_xYesButton->get_active(); } set_visible(bool bVisible)307 void set_visible(bool bVisible) { m_xTopLevel->set_visible(bVisible); } 308 }; 309 310 class CustomPropertiesWindow; 311 312 // struct CustomPropertyLine --------------------------------------------- 313 struct CustomPropertyLine 314 { 315 CustomPropertiesWindow* m_pParent; 316 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; 329 330 bool m_bTypeLostFocus; 331 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); 337 338 void DoTypeHdl(const weld::ComboBox& rBox); 339 340 void Clear(); 341 void Hide(); 342 }; 343 344 // class CustomPropertiesWindow ------------------------------------------ 345 346 class CustomPropertiesWindow 347 { 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; 359 360 weld::Container& m_rBody; 361 weld::Label& m_rHeaderAccName; 362 weld::Label& m_rHeaderAccType; 363 weld::Label& m_rHeaderAccValue; 364 365 DECL_LINK(EditTimeoutHdl, Timer *, void); 366 DECL_LINK(BoxTimeoutHdl, Timer *, void); 367 368 bool IsLineValid( CustomPropertyLine* pLine ) const; 369 void ValidateLine( CustomPropertyLine* pLine, bool bIsFromTypeBox ); 370 void CreateNewLine(); 371 void StoreCustomProperties(); GetCurrentDataModelPosition() const372 sal_uInt32 GetCurrentDataModelPosition() const { return -1 * m_nScrollPos / m_nLineHeight; } 373 374 public: 375 CustomPropertiesWindow(weld::Container& rParent, weld::Label& rHeaderAccName, 376 weld::Label& rHeaderAccType, weld::Label& rHeaderAccValue); 377 ~CustomPropertiesWindow(); 378 GetExistingLineCount() const379 sal_uInt16 GetExistingLineCount() const { return m_aCustomPropertiesLines.size(); } GetTotalLineCount() const380 sal_uInt16 GetTotalLineCount() const { return m_aCustomProperties.size(); } 381 void SetVisibleLineCount(sal_uInt32 nCount); GetHeight() const382 sal_Int32 GetHeight() const { return m_nHeight; } SetHeight(int nHeight)383 void SetHeight(int nHeight) { m_nHeight = nHeight; } GetLineHeight() const384 sal_Int32 GetLineHeight() const { return m_nLineHeight; } SetLineHeight(sal_Int32 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(); 391 392 css::uno::Sequence< css::beans::PropertyValue > 393 GetCustomProperties(); 394 void SetCustomProperties(std::vector< std::unique_ptr<CustomProperty> >&& rProperties); SetRemovedHdl(const Link<void *,void> & rLink)395 void SetRemovedHdl( const Link<void*,void>& rLink ) { m_aRemovedHdl = rLink; } 396 397 void BoxLoseFocus(CustomPropertyLine* pLine); 398 void EditLoseFocus(CustomPropertyLine* pLine); 399 void Remove(const CustomPropertyLine* pLine); 400 }; 401 402 // class CustomPropertiesControl ----------------------------------------- 403 404 class CustomPropertiesControl 405 { 406 private: 407 sal_Int32 m_nThumbPos; 408 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; 416 417 DECL_LINK( ResizeHdl, const Size&, void ); 418 DECL_LINK( ScrollHdl, weld::ScrolledWindow&, void ); 419 DECL_LINK( RemovedHdl, void*, void ); 420 421 public: 422 CustomPropertiesControl(); 423 ~CustomPropertiesControl(); 424 425 void AddLine(css::uno::Any const & rAny); 426 AreAllLinesValid() const427 bool AreAllLinesValid() const { return m_xPropertiesWin->AreAllLinesValid(); } ClearAllLines()428 void ClearAllLines() { m_xPropertiesWin->ClearAllLines(); } 429 430 css::uno::Sequence<css::beans::PropertyValue> GetCustomProperties() const431 GetCustomProperties() const 432 { return m_xPropertiesWin->GetCustomProperties(); } 433 void SetCustomProperties(std::vector< std::unique_ptr<CustomProperty> >&& rProperties); 434 435 void Init(weld::Builder& rParent); 436 }; 437 438 // class SfxCustomPropertiesPage ----------------------------------------- 439 440 class SfxCustomPropertiesPage final : public SfxTabPage 441 { 442 private: 443 DECL_LINK(AddHdl, weld::Button&, void); 444 445 std::unique_ptr<CustomPropertiesControl> m_xPropertiesCtrl; 446 std::unique_ptr<weld::Button> m_xAdd; 447 448 virtual bool FillItemSet( SfxItemSet* ) override; 449 virtual void Reset( const SfxItemSet* ) override; 450 virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override; 451 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; 456 }; 457 458 struct CmisValue 459 { 460 std::unique_ptr<weld::Builder> m_xBuilder; 461 std::unique_ptr<weld::Frame> m_xFrame; 462 std::unique_ptr<weld::Entry> m_xValueEdit; 463 464 CmisValue(weld::Widget* pParent, const OUString& rStr); 465 }; 466 467 struct CmisDateTime 468 { 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; 473 474 CmisDateTime(weld::Widget* pParent, const css::util::DateTime& rDateTime); 475 }; 476 477 struct CmisYesNo 478 { 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; 483 484 CmisYesNo(weld::Widget* pParent, bool bValue); 485 }; 486 487 // struct CmisPropertyLine --------------------------------------------- 488 489 struct CmisPropertyLine 490 { 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(); 506 }; 507 508 // class CmisPropertiesWindow ------------------------------------------ 509 510 class CmisPropertiesWindow 511 { 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(); 519 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(); 527 528 css::uno::Sequence< css::document::CmisProperty > 529 GetCmisProperties() const; 530 }; 531 532 // class CmisPropertiesControl ----------------------------------------- 533 534 class CmisPropertiesControl 535 { 536 private: 537 CmisPropertiesWindow m_aPropertiesWin; 538 std::unique_ptr<weld::ScrolledWindow> m_xScrolledWindow; 539 540 public: 541 CmisPropertiesControl(weld::Builder& rBuilder); 542 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 ); 549 550 void ClearAllLines(); 551 css::uno::Sequence< css::document::CmisProperty > GetCmisProperties() const552 GetCmisProperties() const 553 { return m_aPropertiesWin.GetCmisProperties(); } 554 }; 555 556 // class SfxCmisPropertiesPage ------------------------------------------------- 557 558 class SfxCmisPropertiesPage final : public SfxTabPage 559 { 560 private: 561 std::unique_ptr<CmisPropertiesControl> m_xPropertiesCtrl; 562 563 virtual bool FillItemSet( SfxItemSet* ) override; 564 virtual void Reset( const SfxItemSet* ) override; 565 virtual DeactivateRC DeactivatePage( SfxItemSet* pSet ) override; 566 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*); 571 }; 572 573 #endif // #ifndef _ INCLUDED_SFX2_DINFDLG_HXX 574 575 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ 576