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 _SFX_DINFDLG_HXX
20 : #define _SFX_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 :
28 : #include <svl/stritem.hxx>
29 : #include <svl/zforlist.hxx>
30 :
31 : #include <svtools/headbar.hxx>
32 : #include <svtools/stdctrl.hxx>
33 : #include <svtools/svmedit.hxx>
34 :
35 : #include <unotools/syslocale.hxx>
36 :
37 : #include <vcl/edit.hxx>
38 : #include <vcl/field.hxx>
39 : #include <vcl/layout.hxx>
40 : #include <vcl/lstbox.hxx>
41 : #include <vcl/scrbar.hxx>
42 :
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 :
98 : sal_Bool isAutoloadEnabled() const { return m_isAutoloadEnabled; }
99 : void setAutoloadEnabled(sal_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 : ::rtl::OUString getAutoloadURL() const { return m_AutoloadURL; }
103 : void setAutoloadURL(::rtl::OUString i_val) { m_AutoloadURL = i_val; }
104 : ::rtl::OUString getDefaultTarget() const { return m_DefaultTarget; }
105 : void setDefaultTarget(::rtl::OUString i_val) { m_DefaultTarget = i_val; }
106 : ::rtl::OUString getTemplateName() const { return m_TemplateName; }
107 : void setTemplateName(::rtl::OUString i_val) { m_TemplateName = i_val; }
108 : ::rtl::OUString getAuthor() const { return m_Author; }
109 : void setAuthor(::rtl::OUString i_val) { m_Author = i_val; }
110 :
111 : ::com::sun::star::util::DateTime
112 : getCreationDate() const { return m_CreationDate; }
113 : void setCreationDate(::com::sun::star::util::DateTime i_val) {
114 : m_CreationDate = i_val;
115 : }
116 : ::rtl::OUString getModifiedBy() const { return m_ModifiedBy; }
117 : void setModifiedBy(::rtl::OUString i_val) { m_ModifiedBy = i_val; }
118 :
119 : ::com::sun::star::util::DateTime
120 : getModificationDate() const { return m_ModificationDate; }
121 : void setModificationDate(::com::sun::star::util::DateTime i_val) {
122 : m_ModificationDate = i_val;
123 : }
124 : ::rtl::OUString getPrintedBy() const { return m_PrintedBy; }
125 : void setPrintedBy(::rtl::OUString i_val) { m_PrintedBy = i_val; }
126 : ::com::sun::star::util::DateTime
127 : getPrintDate() const { return m_PrintDate; }
128 : void setPrintDate(::com::sun::star::util::DateTime i_val) {
129 : m_PrintDate = i_val;
130 : }
131 : sal_Int16 getEditingCycles() const { return m_EditingCycles; }
132 : void setEditingCycles(sal_Int16 i_val) { m_EditingCycles = i_val; }
133 : sal_Int32 getEditingDuration() const { return m_EditingDuration; }
134 : void setEditingDuration(sal_Int32 i_val) { m_EditingDuration = i_val; }
135 : ::rtl::OUString getDescription() const { return m_Description; }
136 : void setDescription(::rtl::OUString i_val) { m_Description = i_val; }
137 : ::rtl::OUString getKeywords() const { return m_Keywords; }
138 : void setKeywords(::rtl::OUString i_val) { m_Keywords = i_val; }
139 : ::rtl::OUString getSubject() const { return m_Subject; }
140 : void setSubject(::rtl::OUString i_val) { m_Subject = i_val; }
141 : ::rtl::OUString getTitle() const { return m_Title; }
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 :
147 : void SetTemplate( sal_Bool b ) { m_bHasTemplate = b; }
148 : 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 bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const;
162 : virtual 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* m_pBmp;
171 : Edit* m_pNameED;
172 : PushButton* m_pChangePassBtn;
173 :
174 : SelectableFixedText* m_pShowTypeFT;
175 : CheckBox* m_pReadOnlyCB;
176 : SelectableFixedText* m_pFileValFt;
177 : SelectableFixedText* m_pShowSizeFT;
178 :
179 : SelectableFixedText* m_pCreateValFt;
180 : SelectableFixedText* m_pChangeValFt;
181 : SelectableFixedText* m_pSignedValFt;
182 : PushButton* m_pSignatureBtn;
183 : SelectableFixedText* m_pPrintValFt;
184 : SelectableFixedText* m_pTimeLogValFt;
185 : SelectableFixedText* m_pDocNoValFt;
186 :
187 : CheckBox* m_pUseUserDataCB;
188 : PushButton* m_pDeleteBtn;
189 :
190 : FixedText* m_pTemplFt;
191 : SelectableFixedText* m_pTemplValFt;
192 :
193 : OUString m_aUnknownSize;
194 : OUString m_aMultiSignedStr;
195 :
196 : sal_Bool bEnableUseUserData : 1,
197 : bHandleDelete : 1;
198 :
199 : DECL_LINK(DeleteHdl, void *);
200 : DECL_LINK(SignatureHdl, void *);
201 : DECL_LINK(ChangePassHdl, void *);
202 : void ImplUpdateSignatures();
203 : void ImplCheckPasswordState();
204 :
205 : protected:
206 : SfxDocumentPage( Window* pParent, const SfxItemSet& );
207 :
208 : virtual sal_Bool FillItemSet( SfxItemSet& );
209 : virtual void Reset( const SfxItemSet& );
210 :
211 : public:
212 : static SfxTabPage* Create( Window* pParent, const SfxItemSet& );
213 :
214 : void EnableUseUserData();
215 : };
216 :
217 : // class SfxDocumentDescPage ---------------------------------------------
218 :
219 : class SfxDocumentDescPage : public SfxTabPage
220 : {
221 : private:
222 : Edit* m_pTitleEd;
223 : Edit* m_pThemaEd;
224 : Edit* m_pKeywordsEd;
225 : VclMultiLineEdit* m_pCommentEd;
226 : SfxDocumentInfoItem* m_pInfoItem;
227 :
228 : protected:
229 : SfxDocumentDescPage( Window* pParent, const SfxItemSet& );
230 :
231 : virtual sal_Bool FillItemSet( SfxItemSet& );
232 : virtual void Reset( const SfxItemSet& );
233 :
234 : public:
235 : static SfxTabPage* Create( Window* pParent, const SfxItemSet& );
236 : };
237 :
238 : // class SfxInternetPage -------------------------------------------------
239 :
240 : namespace sfx2
241 : {
242 : class FileDialogHelper;
243 : }
244 :
245 : class SfxInternetPage : public SfxTabPage
246 : {
247 : private:
248 : VclContainer* m_pContainer;
249 :
250 : RadioButton* m_pRBNoAutoUpdate;
251 : RadioButton* m_pRBReloadUpdate;
252 : RadioButton* m_pRBForwardUpdate;
253 :
254 : FixedText* m_pFTEvery;
255 : NumericField* m_pNFReload;
256 : FixedText* m_pFTReloadSeconds;
257 :
258 : FixedText* m_pFTAfter;
259 : NumericField* m_pNFAfter;
260 : FixedText* m_pFTAfterSeconds;
261 : FixedText* m_pFTURL;
262 : Edit* m_pEDForwardURL;
263 : PushButton* m_pPBBrowseURL;
264 : FixedText* m_pFTFrame;
265 : ComboBox* m_pCBFrame;
266 :
267 : String aForwardErrorMessg;
268 : String aBaseURL;
269 : SfxDocumentInfoItem* pInfoItem;
270 : sfx2::FileDialogHelper* pFileDlg;
271 :
272 : enum STATE { S_Init, S_NoUpdate, S_Reload, S_Forward };
273 : // S_Init is only valid as initial value
274 : STATE eState;
275 :
276 : void ChangeState( STATE eNewState ); // S_Init is not a valid value here
277 : // also checks corresponding radiobutton
278 : void EnableNoUpdate( sal_Bool bEnable );
279 : void EnableReload( sal_Bool bEnable );
280 : void EnableForward( sal_Bool bEnable );
281 :
282 : DECL_LINK( ClickHdlNoUpdate, Control* );
283 : DECL_LINK( ClickHdlReload, Control* );
284 : DECL_LINK( ClickHdlForward, Control* );
285 : DECL_LINK(ClickHdlBrowseURL, void *);
286 : DECL_LINK(DialogClosedHdl, void *);
287 :
288 : using TabPage::DeactivatePage;
289 :
290 : protected:
291 : SfxInternetPage( Window* pParent, const SfxItemSet& );
292 : ~SfxInternetPage();
293 :
294 : virtual sal_Bool FillItemSet( SfxItemSet& );
295 : virtual void Reset( const SfxItemSet& );
296 : virtual int DeactivatePage( SfxItemSet* pSet = 0 );
297 :
298 : public:
299 : static SfxTabPage* Create( Window* pParent, const SfxItemSet& );
300 : };
301 :
302 : // class SfxDocumentInfoDialog -------------------------------------------
303 :
304 : class SFX2_DLLPUBLIC SfxDocumentInfoDialog : public SfxTabDialog
305 : {
306 : private:
307 : sal_uInt16 m_nDocInfoId;
308 : protected:
309 : virtual void PageCreated( sal_uInt16 nId, SfxTabPage& rPage );
310 :
311 : public:
312 : SfxDocumentInfoDialog( Window* pParent, const SfxItemSet& );
313 : };
314 :
315 : // class CustomPropertiesRemoveButton ------------------------------------
316 :
317 : struct CustomPropertyLine;
318 :
319 0 : class CustomPropertiesEdit : public Edit
320 : {
321 : private:
322 : CustomPropertyLine* m_pLine;
323 :
324 : public:
325 : inline CustomPropertiesEdit(
326 : Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) :
327 : Edit( pParent, rResId ), m_pLine( pLine ) {}
328 :
329 : inline CustomPropertyLine* GetLine() const { return m_pLine; }
330 : };
331 :
332 0 : class CustomPropertiesTypeBox : public ListBox
333 : {
334 : private:
335 : CustomPropertyLine* m_pLine;
336 :
337 : public:
338 : inline CustomPropertiesTypeBox(
339 : Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) :
340 : ListBox( pParent, rResId ), m_pLine( pLine ) {}
341 :
342 : inline CustomPropertyLine* GetLine() const { return m_pLine; }
343 : };
344 :
345 0 : class CustomPropertiesDateField : public DateField
346 : {
347 : private:
348 : CustomPropertyLine* m_pLine;
349 :
350 : public:
351 : inline CustomPropertiesDateField(
352 : Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) :
353 : DateField( pParent, rResId ), m_pLine( pLine ) {}
354 :
355 : inline CustomPropertyLine* GetLine() const { return m_pLine; }
356 : };
357 0 : class CustomPropertiesTimeField : public TimeField
358 : {
359 : private:
360 : CustomPropertyLine* m_pLine;
361 :
362 : public:
363 : inline CustomPropertiesTimeField(
364 : Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) :
365 : TimeField( pParent, rResId ), m_pLine( pLine ) {}
366 :
367 : inline CustomPropertyLine* GetLine() const { return m_pLine; }
368 : };
369 : class CustomPropertiesDurationField : public Edit
370 : {
371 : CustomPropertyLine* m_pLine;
372 : com::sun::star::util::Duration m_aDuration;
373 : protected:
374 : virtual void RequestHelp(const HelpEvent& rEvt);
375 : public:
376 : CustomPropertiesDurationField( Window* pParent, const ResId& rResId, CustomPropertyLine* pLine );
377 : ~CustomPropertiesDurationField();
378 :
379 : void SetDuration( const com::sun::star::util::Duration& rDuration );
380 : const com::sun::star::util::Duration& GetDuration() const { return m_aDuration; }
381 : };
382 :
383 : class CustomPropertiesEditButton : public PushButton
384 : {
385 : CustomPropertyLine* m_pLine;
386 :
387 : public:
388 : CustomPropertiesEditButton( Window* pParent, const ResId& rResId, CustomPropertyLine* pLine );
389 : ~CustomPropertiesEditButton();
390 :
391 : DECL_LINK(ClickHdl, void *);
392 : };
393 :
394 0 : class CustomPropertiesRemoveButton : public ImageButton
395 : {
396 : private:
397 : CustomPropertyLine* m_pLine;
398 :
399 : public:
400 : inline CustomPropertiesRemoveButton(
401 : Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) :
402 : ImageButton( pParent, rResId ), m_pLine( pLine ) {}
403 :
404 : inline CustomPropertyLine* GetLine() const { return m_pLine; }
405 : };
406 :
407 : class CustomPropertiesYesNoButton : public Control
408 : {
409 : private:
410 : RadioButton m_aYesButton;
411 : RadioButton m_aNoButton;
412 :
413 : public:
414 : CustomPropertiesYesNoButton( Window* pParent, const ResId& rResId );
415 :
416 : virtual void Resize();
417 :
418 : inline void CheckYes() { m_aYesButton.Check(); }
419 : inline void CheckNo() { m_aNoButton.Check(); }
420 : inline bool IsYesChecked() const { return m_aYesButton.IsChecked() != sal_False; }
421 : };
422 :
423 : // struct CustomPropertyLine ---------------------------------------------
424 :
425 : struct CustomPropertyLine
426 : {
427 : ComboBox m_aNameBox;
428 : CustomPropertiesTypeBox m_aTypeBox;
429 : CustomPropertiesEdit m_aValueEdit;
430 : CustomPropertiesDateField m_aDateField;
431 : CustomPropertiesTimeField m_aTimeField;
432 : const String m_sDurationFormat;
433 : CustomPropertiesDurationField m_aDurationField;
434 : CustomPropertiesEditButton m_aEditButton;
435 : CustomPropertiesYesNoButton m_aYesNoButton;
436 : CustomPropertiesRemoveButton m_aRemoveButton;
437 :
438 : Point m_aDatePos;
439 : Point m_aTimePos;
440 : Size m_aDateTimeSize;
441 :
442 : bool m_bIsRemoved;
443 : bool m_bTypeLostFocus;
444 :
445 : CustomPropertyLine( Window* pParent );
446 :
447 : void SetRemoved();
448 : };
449 :
450 : // class CustomPropertiesWindow ------------------------------------------
451 :
452 : class CustomPropertiesWindow : public Window
453 : {
454 : private:
455 : ComboBox m_aNameBox;
456 : ListBox m_aTypeBox;
457 : Edit m_aValueEdit;
458 : DateField m_aDateField;
459 : TimeField m_aTimeField;
460 : Edit m_aDurationField;
461 : PushButton m_aEditButton;
462 : CustomPropertiesYesNoButton m_aYesNoButton;
463 : ImageButton m_aRemoveButton;
464 :
465 : sal_Int32 m_nLineHeight;
466 : sal_Int32 m_nScrollPos;
467 : SvtSysLocale m_aSysLocale;
468 : std::vector< CustomPropertyLine* > m_aCustomPropertiesLines;
469 : CustomPropertyLine* m_pCurrentLine;
470 : SvNumberFormatter m_aNumberFormatter;
471 : Timer m_aEditLoseFocusTimer;
472 : Timer m_aBoxLoseFocusTimer;
473 : Link m_aRemovedHdl;
474 :
475 : DECL_LINK( TypeHdl, CustomPropertiesTypeBox* );
476 : DECL_LINK( RemoveHdl, CustomPropertiesRemoveButton* );
477 : DECL_LINK( EditLoseFocusHdl, CustomPropertiesEdit* );
478 : DECL_LINK( BoxLoseFocusHdl, CustomPropertiesTypeBox* );
479 : //add lose focus handlers of Date/TimeField?
480 :
481 : DECL_LINK(EditTimeoutHdl, void *);
482 : DECL_LINK(BoxTimeoutHdl, void *);
483 :
484 : bool IsLineValid( CustomPropertyLine* pLine ) const;
485 : void ValidateLine( CustomPropertyLine* pLine, bool bIsFromTypeBox );
486 :
487 : public:
488 : CustomPropertiesWindow(Window* pParent,
489 : const OUString &rHeaderAccName,
490 : const OUString &rHeaderAccType,
491 : const OUString &rHeaderAccValue);
492 : ~CustomPropertiesWindow();
493 :
494 : void InitControls( HeaderBar* pHeaderBar, const ScrollBar* pScrollBar );
495 : sal_uInt16 GetVisibleLineCount() const;
496 : inline sal_Int32 GetLineHeight() const { return m_nLineHeight; }
497 : void AddLine( const ::rtl::OUString& sName, com::sun::star::uno::Any& rAny );
498 : bool AreAllLinesValid() const;
499 : void ClearAllLines();
500 : void DoScroll( sal_Int32 nNewPos );
501 :
502 : ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >
503 : GetCustomProperties() const;
504 : void SetRemovedHdl( const Link& rLink ) { m_aRemovedHdl = rLink; }
505 :
506 : void InitRemoveButton(const ScrollBar &rScrollBar);
507 : void updateLineWidth();
508 : };
509 :
510 : // class CustomPropertiesControl -----------------------------------------
511 :
512 : class CustomPropertiesControl : public VclVBox
513 : {
514 : private:
515 : HeaderBar* m_pHeaderBar;
516 : VclHBox* m_pBody;
517 : CustomPropertiesWindow* m_pPropertiesWin;
518 : ScrollBar* m_pVertScroll;
519 :
520 : sal_Int32 m_nThumbPos;
521 :
522 : DECL_LINK( ScrollHdl, ScrollBar* );
523 : DECL_LINK( RemovedHdl, void* );
524 :
525 : public:
526 : CustomPropertiesControl(Window* pParent);
527 : ~CustomPropertiesControl();
528 :
529 : void AddLine( const ::rtl::OUString& sName, com::sun::star::uno::Any& rAny, bool bInteractive );
530 :
531 : inline bool AreAllLinesValid() const { return m_pPropertiesWin->AreAllLinesValid(); }
532 : inline void ClearAllLines() { m_pPropertiesWin->ClearAllLines(); }
533 : inline ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue >
534 : GetCustomProperties() const
535 : { return m_pPropertiesWin->GetCustomProperties(); }
536 : void Init(VclBuilderContainer& rParent);
537 : virtual void setAllocation(const Size &rAllocation);
538 : };
539 :
540 : // class SfxCustomPropertiesPage -----------------------------------------
541 :
542 : class SfxCustomPropertiesPage : public SfxTabPage
543 : {
544 : private:
545 : CustomPropertiesControl* m_pPropertiesCtrl;
546 :
547 : DECL_LINK(AddHdl, void *);
548 :
549 : using TabPage::DeactivatePage;
550 :
551 : protected:
552 : SfxCustomPropertiesPage( Window* pParent, const SfxItemSet& );
553 :
554 : virtual sal_Bool FillItemSet( SfxItemSet& );
555 : virtual void Reset( const SfxItemSet& );
556 : virtual int DeactivatePage( SfxItemSet* pSet = NULL );
557 :
558 : public:
559 : static SfxTabPage* Create( Window* pParent, const SfxItemSet& );
560 : };
561 :
562 : #endif // #ifndef _SFX_DINFDLG_HXX
563 :
564 : /* vim:set shiftwidth=4 softtabstop=4 expandtab: */
|