Line data Source code
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/util/DateTime.hpp>
26 : #include <com/sun/star/util/Duration.hpp>
27 : #include <com/sun/star/document/CmisProperty.hpp>
28 :
29 : #include <svl/stritem.hxx>
30 : #include <svl/zforlist.hxx>
31 :
32 : #include <svtools/headbar.hxx>
33 : #include <svtools/stdctrl.hxx>
34 : #include <svtools/svmedit.hxx>
35 :
36 : #include <unotools/syslocale.hxx>
37 :
38 : #include <vcl/edit.hxx>
39 : #include <vcl/field.hxx>
40 : #include <vcl/idle.hxx>
41 : #include <vcl/layout.hxx>
42 : #include <vcl/lstbox.hxx>
43 : #include <vcl/scrbar.hxx>
44 : #include <vcl/fixed.hxx>
45 : #include <vcl/ctrl.hxx>
46 :
47 : #include <sfx2/tabdlg.hxx>
48 :
49 : #include <boost/optional/optional.hpp>
50 :
51 : namespace com { namespace sun { namespace star {
52 : namespace document {
53 : class XDocumentProperties;
54 : }
55 : } } }
56 :
57 : struct CustomProperty;
58 :
59 : // class SfxDocumentInfoItem ---------------------------------------------
60 :
61 : class SFX2_DLLPUBLIC SfxDocumentInfoItem : public SfxStringItem
62 : {
63 : private:
64 : sal_Int32 m_AutoloadDelay;
65 : OUString m_AutoloadURL;
66 : bool m_isAutoloadEnabled;
67 : OUString m_DefaultTarget;
68 : OUString m_TemplateName;
69 : OUString m_Author;
70 : ::com::sun::star::util::DateTime m_CreationDate;
71 : OUString m_ModifiedBy;
72 : ::com::sun::star::util::DateTime m_ModificationDate;
73 : OUString m_PrintedBy;
74 : ::com::sun::star::util::DateTime m_PrintDate;
75 : sal_Int16 m_EditingCycles;
76 : sal_Int32 m_EditingDuration;
77 : OUString m_Description;
78 : OUString m_Keywords;
79 : OUString m_Subject;
80 : OUString m_Title;
81 : bool m_bHasTemplate;
82 : bool m_bDeleteUserData;
83 : bool m_bUseUserData;
84 : std::vector< CustomProperty* > m_aCustomProperties;
85 : ::com::sun::star::uno::Sequence< ::com::sun::star::document::CmisProperty > m_aCmisProperties;
86 :
87 : public:
88 : TYPEINFO_OVERRIDE();
89 : SfxDocumentInfoItem();
90 : SfxDocumentInfoItem( const OUString &rFileName,
91 : const ::com::sun::star::uno::Reference<
92 : ::com::sun::star::document::XDocumentProperties> & i_xDocProps,
93 : const ::com::sun::star::uno::Sequence<
94 : ::com::sun::star::document::CmisProperty> & i_cmisProps,
95 : bool bUseUserData );
96 : SfxDocumentInfoItem( const SfxDocumentInfoItem& );
97 : virtual ~SfxDocumentInfoItem();
98 :
99 : /// update i_xDocProps with the data in this object
100 : void UpdateDocumentInfo(
101 : const ::com::sun::star::uno::Reference<
102 : ::com::sun::star::document::XDocumentProperties> & i_xDocProps,
103 : bool i_bDoNotUpdateUserDefined = false)
104 : const;
105 0 : bool isCmisDocument() const { return m_aCmisProperties.getLength() > 0;}
106 :
107 0 : bool isAutoloadEnabled() const { return m_isAutoloadEnabled; }
108 0 : void setAutoloadEnabled(bool i_val) { m_isAutoloadEnabled = i_val; }
109 0 : sal_Int32 getAutoloadDelay() const { return m_AutoloadDelay; }
110 0 : void setAutoloadDelay(sal_Int32 i_val) { m_AutoloadDelay = i_val; }
111 0 : OUString getAutoloadURL() const { return m_AutoloadURL; }
112 0 : void setAutoloadURL(const OUString& i_val) { m_AutoloadURL = i_val; }
113 0 : OUString getDefaultTarget() const { return m_DefaultTarget; }
114 0 : void setDefaultTarget(const OUString& i_val) { m_DefaultTarget = i_val; }
115 0 : OUString getTemplateName() const { return m_TemplateName; }
116 : void setTemplateName(const OUString& i_val) { m_TemplateName = i_val; }
117 0 : OUString getAuthor() const { return m_Author; }
118 0 : void setAuthor(const OUString& i_val) { m_Author = i_val; }
119 :
120 : ::com::sun::star::util::DateTime
121 0 : getCreationDate() const { return m_CreationDate; }
122 0 : void setCreationDate(const css::util::DateTime& i_val) {
123 0 : m_CreationDate = i_val;
124 0 : }
125 0 : OUString getModifiedBy() const { return m_ModifiedBy; }
126 0 : void setModifiedBy(const OUString& i_val) { m_ModifiedBy = i_val; }
127 :
128 : ::com::sun::star::util::DateTime
129 0 : getModificationDate() const { return m_ModificationDate; }
130 0 : void setModificationDate(const css::util::DateTime& i_val) {
131 0 : m_ModificationDate = i_val;
132 0 : }
133 0 : OUString getPrintedBy() const { return m_PrintedBy; }
134 0 : void setPrintedBy(const OUString& i_val) { m_PrintedBy = i_val; }
135 : ::com::sun::star::util::DateTime
136 0 : getPrintDate() const { return m_PrintDate; }
137 0 : void setPrintDate(const css::util::DateTime& i_val) {
138 0 : m_PrintDate = i_val;
139 0 : }
140 0 : sal_Int16 getEditingCycles() const { return m_EditingCycles; }
141 0 : void setEditingCycles(sal_Int16 i_val) { m_EditingCycles = i_val; }
142 0 : sal_Int32 getEditingDuration() const { return m_EditingDuration; }
143 0 : void setEditingDuration(sal_Int32 i_val) { m_EditingDuration = i_val; }
144 0 : OUString getDescription() const { return m_Description; }
145 0 : void setDescription(const OUString& i_val) { m_Description = i_val; }
146 0 : OUString getKeywords() const { return m_Keywords; }
147 0 : void setKeywords(const OUString& i_val) { m_Keywords = i_val; }
148 0 : OUString getSubject() const { return m_Subject; }
149 0 : void setSubject(const OUString& i_val) { m_Subject = i_val; }
150 0 : OUString getTitle() const { return m_Title; }
151 0 : void setTitle(const OUString& i_val) { m_Title = i_val; }
152 :
153 : /// reset user-specific data (author, modified-by, ...)
154 : void resetUserData(const OUString & i_rAuthor);
155 :
156 0 : void SetTemplate( bool b ) { m_bHasTemplate = b; }
157 0 : bool HasTemplate() const { return m_bHasTemplate; }
158 : void SetDeleteUserData( bool bSet );
159 : void SetUseUserData( bool bSet );
160 0 : bool IsDeleteUserData() const { return m_bDeleteUserData;}
161 0 : bool IsUseUserData() const { return m_bUseUserData;}
162 :
163 : std::vector< CustomProperty* > GetCustomProperties() const;
164 : void ClearCustomProperties();
165 : void AddCustomProperty( const OUString& sName,
166 : const com::sun::star::uno::Any& rValue );
167 :
168 : ::com::sun::star::uno::Sequence< ::com::sun::star::document::CmisProperty >
169 0 : GetCmisProperties() const { return m_aCmisProperties;}
170 :
171 : void SetCmisProperties(const ::com::sun::star::uno::Sequence< ::com::sun::star::document::CmisProperty >& cmisProps );
172 : virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const SAL_OVERRIDE;
173 : virtual bool operator==( const SfxPoolItem& ) const SAL_OVERRIDE;
174 : virtual bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const SAL_OVERRIDE;
175 : virtual bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) SAL_OVERRIDE;
176 : };
177 :
178 : // class SfxDocumentPage -------------------------------------------------
179 :
180 : class SfxDocumentPage : public SfxTabPage
181 : {
182 : private:
183 : VclPtr<FixedImage> m_pBmp;
184 : VclPtr<SelectableFixedText> m_pNameED;
185 : VclPtr<PushButton> m_pChangePassBtn;
186 :
187 : VclPtr<SelectableFixedText> m_pShowTypeFT;
188 : VclPtr<Edit> m_pFileValEd;
189 : VclPtr<SelectableFixedText> m_pShowSizeFT;
190 :
191 : VclPtr<SelectableFixedText> m_pCreateValFt;
192 : VclPtr<SelectableFixedText> m_pChangeValFt;
193 : VclPtr<SelectableFixedText> m_pSignedValFt;
194 : VclPtr<PushButton> m_pSignatureBtn;
195 : VclPtr<SelectableFixedText> m_pPrintValFt;
196 : VclPtr<SelectableFixedText> m_pTimeLogValFt;
197 : VclPtr<SelectableFixedText> m_pDocNoValFt;
198 :
199 : VclPtr<CheckBox> m_pUseUserDataCB;
200 : VclPtr<PushButton> m_pDeleteBtn;
201 :
202 : VclPtr<FixedText> m_pTemplFt;
203 : VclPtr<SelectableFixedText> m_pTemplValFt;
204 :
205 : OUString m_aUnknownSize;
206 : OUString m_aMultiSignedStr;
207 :
208 : bool bEnableUseUserData : 1,
209 : bHandleDelete : 1;
210 :
211 : DECL_LINK(DeleteHdl, void *);
212 : DECL_LINK(SignatureHdl, void *);
213 : DECL_STATIC_LINK(SfxDocumentPage, ChangePassHdl, void *);
214 : void ImplUpdateSignatures();
215 : void ImplCheckPasswordState();
216 :
217 : protected:
218 : virtual ~SfxDocumentPage();
219 : virtual void dispose() SAL_OVERRIDE;
220 :
221 : virtual bool FillItemSet( SfxItemSet* ) SAL_OVERRIDE;
222 : virtual void Reset( const SfxItemSet* ) SAL_OVERRIDE;
223 :
224 : public:
225 : SfxDocumentPage( vcl::Window* pParent, const SfxItemSet& );
226 : static VclPtr<SfxTabPage> Create( vcl::Window* pParent, const SfxItemSet* );
227 :
228 : void EnableUseUserData();
229 : };
230 :
231 : // class SfxDocumentDescPage ---------------------------------------------
232 :
233 : class SfxDocumentDescPage : public SfxTabPage
234 : {
235 : private:
236 : VclPtr<Edit> m_pTitleEd;
237 : VclPtr<Edit> m_pThemaEd;
238 : VclPtr<Edit> m_pKeywordsEd;
239 : VclPtr<VclMultiLineEdit> m_pCommentEd;
240 : SfxDocumentInfoItem* m_pInfoItem;
241 :
242 : protected:
243 : virtual ~SfxDocumentDescPage();
244 : virtual void dispose() SAL_OVERRIDE;
245 :
246 : virtual bool FillItemSet( SfxItemSet* ) SAL_OVERRIDE;
247 : virtual void Reset( const SfxItemSet* ) SAL_OVERRIDE;
248 :
249 : public:
250 : SfxDocumentDescPage( vcl::Window* pParent, const SfxItemSet& );
251 : static VclPtr<SfxTabPage> Create( vcl::Window* pParent, const SfxItemSet* );
252 : };
253 :
254 : // class SfxDocumentInfoDialog -------------------------------------------
255 :
256 0 : class SFX2_DLLPUBLIC SfxDocumentInfoDialog : public SfxTabDialog
257 : {
258 : private:
259 : sal_uInt16 m_nDocInfoId;
260 : protected:
261 : virtual void PageCreated( sal_uInt16 nId, SfxTabPage& rPage ) SAL_OVERRIDE;
262 :
263 : public:
264 : SfxDocumentInfoDialog( vcl::Window* pParent, const SfxItemSet& );
265 : void AddFontTabPage();
266 : };
267 :
268 : // class CustomPropertiesRemoveButton ------------------------------------
269 : struct CustomPropertyLine;
270 :
271 0 : class CustomPropertiesEdit : public Edit
272 : {
273 : private:
274 : CustomPropertyLine* m_pLine;
275 :
276 : public:
277 0 : CustomPropertiesEdit(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine)
278 : : Edit(pParent, nStyle)
279 0 : , m_pLine(pLine)
280 : {
281 0 : }
282 :
283 0 : CustomPropertyLine* GetLine() const { return m_pLine; }
284 : };
285 :
286 0 : class CustomPropertiesTypeBox : public ListBox
287 : {
288 : private:
289 : CustomPropertyLine* m_pLine;
290 :
291 : public:
292 0 : inline CustomPropertiesTypeBox(
293 : vcl::Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) :
294 0 : ListBox( pParent, rResId ), m_pLine( pLine ) {}
295 :
296 0 : inline CustomPropertyLine* GetLine() const { return m_pLine; }
297 : };
298 :
299 0 : class CustomPropertiesDateField : public DateField
300 : {
301 : private:
302 : CustomPropertyLine* m_pLine;
303 :
304 : public:
305 : ::boost::optional<sal_Int16> m_TZ;
306 :
307 0 : CustomPropertiesDateField(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine)
308 : : DateField(pParent, nStyle)
309 0 : , m_pLine(pLine)
310 : {
311 0 : }
312 :
313 : CustomPropertyLine* GetLine() const { return m_pLine; }
314 : };
315 :
316 0 : class CustomPropertiesTimeField : public TimeField
317 : {
318 : private:
319 : CustomPropertyLine* m_pLine;
320 :
321 : public:
322 : bool m_isUTC;
323 :
324 0 : CustomPropertiesTimeField(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine)
325 : : TimeField(pParent, nStyle)
326 : , m_pLine(pLine)
327 0 : , m_isUTC(false)
328 : {
329 0 : }
330 :
331 : CustomPropertyLine* GetLine() const { return m_pLine; }
332 : };
333 :
334 0 : class CustomPropertiesDurationField : public Edit
335 : {
336 : CustomPropertyLine* m_pLine;
337 : com::sun::star::util::Duration m_aDuration;
338 : protected:
339 : virtual void RequestHelp(const HelpEvent& rEvt) SAL_OVERRIDE;
340 : public:
341 : CustomPropertiesDurationField(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine);
342 :
343 : void SetDuration( const com::sun::star::util::Duration& rDuration );
344 0 : const com::sun::star::util::Duration& GetDuration() const { return m_aDuration; }
345 : };
346 :
347 0 : class CustomPropertiesEditButton : public PushButton
348 : {
349 : CustomPropertyLine* m_pLine;
350 :
351 : public:
352 : CustomPropertiesEditButton(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine);
353 :
354 : DECL_LINK(ClickHdl, void *);
355 : };
356 :
357 0 : class CustomPropertiesRemoveButton : public ImageButton
358 : {
359 : private:
360 : CustomPropertyLine* m_pLine;
361 :
362 : public:
363 0 : CustomPropertiesRemoveButton(vcl::Window* pParent, WinBits nStyle, CustomPropertyLine* pLine)
364 : : ImageButton(pParent, nStyle)
365 0 : , m_pLine(pLine)
366 : {
367 0 : }
368 :
369 0 : CustomPropertyLine* GetLine() const { return m_pLine; }
370 : };
371 :
372 : class CustomPropertiesYesNoButton : public Control
373 : {
374 : private:
375 : VclPtr<RadioButton> m_aYesButton;
376 : VclPtr<RadioButton> m_aNoButton;
377 :
378 : public:
379 : CustomPropertiesYesNoButton( vcl::Window* pParent, const ResId& rResId );
380 : virtual ~CustomPropertiesYesNoButton();
381 : virtual void dispose() SAL_OVERRIDE;
382 :
383 : virtual void Resize() SAL_OVERRIDE;
384 :
385 0 : inline void CheckYes() { m_aYesButton->Check(); }
386 0 : inline void CheckNo() { m_aNoButton->Check(); }
387 0 : inline bool IsYesChecked() const { return m_aYesButton->IsChecked(); }
388 : };
389 :
390 : // struct CustomPropertyLine ---------------------------------------------
391 :
392 0 : struct CustomPropertyLine
393 : {
394 : VclPtr<ComboBox> m_aNameBox;
395 : VclPtr<CustomPropertiesTypeBox> m_aTypeBox;
396 : VclPtr<CustomPropertiesEdit> m_aValueEdit;
397 : VclPtr<CustomPropertiesDateField> m_aDateField;
398 : VclPtr<CustomPropertiesTimeField> m_aTimeField;
399 : const OUString m_sDurationFormat;
400 : VclPtr<CustomPropertiesDurationField> m_aDurationField;
401 : VclPtr<CustomPropertiesEditButton> m_aEditButton;
402 : VclPtr<CustomPropertiesYesNoButton> m_aYesNoButton;
403 : VclPtr<CustomPropertiesRemoveButton> m_aRemoveButton;
404 :
405 : bool m_bIsDate;
406 : bool m_bIsRemoved;
407 : bool m_bTypeLostFocus;
408 :
409 : CustomPropertyLine( vcl::Window* pParent );
410 :
411 : void SetRemoved();
412 : };
413 :
414 : // class CustomPropertiesWindow ------------------------------------------
415 :
416 : class CustomPropertiesWindow : public vcl::Window
417 : {
418 : private:
419 : VclPtr<FixedText> m_pHeaderAccName;
420 : VclPtr<FixedText> m_pHeaderAccType;
421 : VclPtr<FixedText> m_pHeaderAccValue;
422 :
423 : VclPtr<ComboBox> m_aNameBox;
424 : VclPtr<ListBox> m_aTypeBox;
425 : VclPtr<Edit> m_aValueEdit;
426 : VclPtr<DateField> m_aDateField;
427 : VclPtr<TimeField> m_aTimeField;
428 : VclPtr<Edit> m_aDurationField;
429 : VclPtr<PushButton> m_aEditButton;
430 : VclPtr<CustomPropertiesYesNoButton> m_aYesNoButton;
431 : VclPtr<ImageButton> m_aRemoveButton;
432 :
433 : sal_Int32 m_nLineHeight;
434 : sal_Int32 m_nScrollPos;
435 : SvtSysLocale m_aSysLocale;
436 : std::vector< CustomPropertyLine* > m_aCustomPropertiesLines;
437 : CustomPropertyLine* m_pCurrentLine;
438 : SvNumberFormatter m_aNumberFormatter;
439 : Idle m_aEditLoseFocusIdle;
440 : Idle m_aBoxLoseFocusIdle;
441 : Link<> m_aRemovedHdl;
442 :
443 : DECL_STATIC_LINK( CustomPropertiesWindow, TypeHdl, CustomPropertiesTypeBox* );
444 : DECL_LINK( RemoveHdl, CustomPropertiesRemoveButton* );
445 : DECL_LINK( EditLoseFocusHdl, CustomPropertiesEdit* );
446 : DECL_LINK( BoxLoseFocusHdl, CustomPropertiesTypeBox* );
447 : //add lose focus handlers of Date/TimeField?
448 :
449 : DECL_LINK_TYPED(EditTimeoutHdl, Idle *, void);
450 : DECL_LINK_TYPED(BoxTimeoutHdl, Idle *, void);
451 :
452 : bool IsLineValid( CustomPropertyLine* pLine ) const;
453 : void ValidateLine( CustomPropertyLine* pLine, bool bIsFromTypeBox );
454 :
455 : public:
456 : CustomPropertiesWindow(vcl::Window* pParent,
457 : FixedText *pHeaderAccName,
458 : FixedText *pHeaderAccType,
459 : FixedText *pHeaderAccValue);
460 : virtual ~CustomPropertiesWindow();
461 : virtual void dispose() SAL_OVERRIDE;
462 :
463 : bool InitControls( HeaderBar* pHeaderBar, const ScrollBar* pScrollBar );
464 : sal_uInt16 GetVisibleLineCount() const;
465 0 : inline sal_Int32 GetLineHeight() const { return m_nLineHeight; }
466 : void AddLine( const OUString& sName, com::sun::star::uno::Any& rAny );
467 : bool AreAllLinesValid() const;
468 : void ClearAllLines();
469 : void DoScroll( sal_Int32 nNewPos );
470 :
471 : ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >
472 : GetCustomProperties() const;
473 0 : void SetRemovedHdl( const Link<>& rLink ) { m_aRemovedHdl = rLink; }
474 :
475 : void InitRemoveButton(const ScrollBar &rScrollBar);
476 : void updateLineWidth();
477 : };
478 :
479 : // class CustomPropertiesControl -----------------------------------------
480 :
481 : class CustomPropertiesControl : public vcl::Window
482 : {
483 : private:
484 : VclPtr<VclVBox> m_pVBox;
485 : VclPtr<HeaderBar> m_pHeaderBar;
486 : VclPtr<VclHBox> m_pBody;
487 : VclPtr<CustomPropertiesWindow> m_pPropertiesWin;
488 : VclPtr<ScrollBar> m_pVertScroll;
489 :
490 : sal_Int32 m_nThumbPos;
491 :
492 : DECL_LINK( ScrollHdl, ScrollBar* );
493 : DECL_LINK( RemovedHdl, void* );
494 :
495 : public:
496 : CustomPropertiesControl(vcl::Window* pParent);
497 : virtual ~CustomPropertiesControl();
498 : virtual void dispose() SAL_OVERRIDE;
499 :
500 : void AddLine( const OUString& sName, com::sun::star::uno::Any& rAny, bool bInteractive );
501 :
502 0 : inline bool AreAllLinesValid() const { return m_pPropertiesWin->AreAllLinesValid(); }
503 0 : inline void ClearAllLines() { m_pPropertiesWin->ClearAllLines(); }
504 : inline ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >
505 0 : GetCustomProperties() const
506 0 : { return m_pPropertiesWin->GetCustomProperties(); }
507 : void Init(VclBuilderContainer& rParent);
508 : virtual void Resize() SAL_OVERRIDE;
509 : };
510 :
511 : // class SfxCustomPropertiesPage -----------------------------------------
512 :
513 : class SfxCustomPropertiesPage : public SfxTabPage
514 : {
515 : private:
516 : VclPtr<CustomPropertiesControl> m_pPropertiesCtrl;
517 :
518 : DECL_LINK(AddHdl, void *);
519 :
520 : using TabPage::DeactivatePage;
521 :
522 : protected:
523 : virtual ~SfxCustomPropertiesPage();
524 : virtual void dispose() SAL_OVERRIDE;
525 :
526 : virtual bool FillItemSet( SfxItemSet* ) SAL_OVERRIDE;
527 : virtual void Reset( const SfxItemSet* ) SAL_OVERRIDE;
528 : virtual sfxpg DeactivatePage( SfxItemSet* pSet = NULL ) SAL_OVERRIDE;
529 :
530 : public:
531 : SfxCustomPropertiesPage( vcl::Window* pParent, const SfxItemSet& );
532 : static VclPtr<SfxTabPage> Create( vcl::Window* pParent, const SfxItemSet* );
533 : };
534 :
535 0 : struct CmisValue : public VclBuilderContainer
536 : {
537 : VclPtr<Edit> m_aValueEdit;
538 :
539 : CmisValue( vcl::Window* pParent, const OUString& aStr );
540 : };
541 :
542 0 : struct CmisDateTime : public VclBuilderContainer
543 : {
544 : VclPtr<DateField> m_aDateField;
545 : VclPtr<TimeField> m_aTimeField;
546 :
547 : CmisDateTime( vcl::Window* pParent, const ::com::sun::star::util::DateTime& aDateTime );
548 : };
549 :
550 0 : struct CmisYesNo : public VclBuilderContainer
551 : {
552 : VclPtr<RadioButton> m_aYesButton;
553 : VclPtr<RadioButton> m_aNoButton;
554 :
555 : CmisYesNo( vcl::Window* pParent, bool bValue);
556 : };
557 :
558 : // struct CmisPropertyLine ---------------------------------------------
559 :
560 : struct CmisPropertyLine : public VclBuilderContainer
561 : {
562 : VclPtr<VclFrame> m_pFrame;
563 : OUString m_sId;
564 : OUString m_sType;
565 : bool m_bUpdatable;
566 : bool m_bRequired;
567 : bool m_bMultiValued;
568 : bool m_bOpenChoice;
569 : VclPtr<FixedText> m_aName;
570 : VclPtr<FixedText> m_aType;
571 : std::vector< CmisValue* > m_aValues;
572 : std::vector< CmisDateTime* > m_aDateTimes;
573 : std::vector< CmisYesNo* > m_aYesNos;
574 : sal_Int32 m_nNumValue;
575 : long getItemHeight() const;
576 : CmisPropertyLine( vcl::Window* pParent );
577 : virtual ~CmisPropertyLine();
578 : };
579 :
580 : // class CmisPropertiesWindow ------------------------------------------
581 :
582 : class CmisPropertiesWindow
583 : {
584 : private:
585 : VclPtr<VclBox> m_pBox;
586 : sal_Int32 m_nItemHeight;
587 : SvNumberFormatter m_aNumberFormatter;
588 : std::vector< CmisPropertyLine* > m_aCmisPropertiesLines;
589 : public:
590 : CmisPropertiesWindow(SfxTabPage* pParent);
591 : ~CmisPropertiesWindow();
592 :
593 : sal_uInt16 GetLineCount() const;
594 0 : inline sal_Int32 GetItemHeight() const { return m_nItemHeight; }
595 : void AddLine( const OUString& sId, const OUString& sName,
596 : const OUString& sType, const bool bUpdatable,
597 : const bool bRequired, const bool bMultiValued,
598 : const bool bOpenChoice,
599 : com::sun::star::uno::Any& aChoices,
600 : com::sun::star::uno::Any& rAny );
601 : void ClearAllLines();
602 : void DoScroll( sal_Int32 nNewPos );
603 :
604 : ::com::sun::star::uno::Sequence< ::com::sun::star::document::CmisProperty >
605 : GetCmisProperties() const;
606 : };
607 :
608 : // class CmisPropertiesControl -----------------------------------------
609 :
610 0 : class CmisPropertiesControl
611 : {
612 : private:
613 : CmisPropertiesWindow m_pPropertiesWin;
614 : VclScrolledWindow& m_rScrolledWindow;
615 : ScrollBar& m_rVertScroll;
616 : DECL_LINK( ScrollHdl, ScrollBar* );
617 :
618 : void checkAutoVScroll();
619 :
620 : public:
621 : CmisPropertiesControl(SfxTabPage* pParent);
622 : void setScrollRange();
623 :
624 : void AddLine( const OUString& sId, const OUString& sName,
625 : const OUString& sType, const bool bUpdatable,
626 : const bool bRequired, const bool bMultiValude,
627 : const bool bOpenChoice,
628 : com::sun::star::uno::Any& aChoices,
629 : com::sun::star::uno::Any& rAny );
630 :
631 : void ClearAllLines();
632 : inline ::com::sun::star::uno::Sequence< ::com::sun::star::document::CmisProperty >
633 0 : GetCmisProperties() const
634 0 : { return m_pPropertiesWin.GetCmisProperties(); }
635 : };
636 :
637 : // class SfxCmisPropertiesPage -------------------------------------------------
638 :
639 0 : class SfxCmisPropertiesPage : public SfxTabPage
640 : {
641 : private:
642 : CmisPropertiesControl m_pPropertiesCtrl;
643 : using TabPage::DeactivatePage;
644 : DECL_LINK(UpdateHdl, void *);
645 :
646 : protected:
647 : virtual bool FillItemSet( SfxItemSet* ) SAL_OVERRIDE;
648 : virtual void Reset( const SfxItemSet* ) SAL_OVERRIDE;
649 : virtual sfxpg DeactivatePage( SfxItemSet* pSet = NULL ) SAL_OVERRIDE;
650 :
651 : public:
652 : SfxCmisPropertiesPage( vcl::Window* pParent, const SfxItemSet& );
653 : static VclPtr<SfxTabPage> Create( vcl::Window* pParent, const SfxItemSet* );
654 : };
655 :
656 : #endif // #ifndef _ INCLUDED_SFX2_DINFDLG_HXX
657 :
658 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|