| /************************************************************** |
| * |
| * Licensed to the Apache Software Foundation (ASF) under one |
| * or more contributor license agreements. See the NOTICE file |
| * distributed with this work for additional information |
| * regarding copyright ownership. The ASF licenses this file |
| * to you under the Apache License, Version 2.0 (the |
| * "License"); you may not use this file except in compliance |
| * with the License. You may obtain a copy of the License at |
| * |
| * http://www.apache.org/licenses/LICENSE-2.0 |
| * |
| * Unless required by applicable law or agreed to in writing, |
| * software distributed under the License is distributed on an |
| * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| * KIND, either express or implied. See the License for the |
| * specific language governing permissions and limitations |
| * under the License. |
| * |
| *************************************************************/ |
| |
| |
| #ifndef _SFX_DINFDLG_HXX |
| #define _SFX_DINFDLG_HXX |
| |
| #include "sal/config.h" |
| #include "sfx2/dllapi.h" |
| |
| #include <com/sun/star/util/DateTime.hpp> |
| #include <vcl/edit.hxx> |
| #include <vcl/field.hxx> |
| #include <svtools/stdctrl.hxx> |
| #include <svl/stritem.hxx> |
| #include <svtools/svmedit.hxx> |
| |
| #include <vcl/edit.hxx> |
| #include <vcl/lstbox.hxx> |
| #include <vcl/scrbar.hxx> |
| #include <svtools/headbar.hxx> |
| #include <unotools/syslocale.hxx> |
| #include <svl/zforlist.hxx> |
| #include <com/sun/star/util/Duration.hpp> |
| #include "tabdlg.hxx" |
| |
| namespace com { namespace sun { namespace star { |
| namespace document { |
| class XDocumentProperties; |
| } |
| } } } |
| |
| struct CustomProperty; |
| |
| |
| // class SfxDocumentInfoItem --------------------------------------------- |
| |
| class SFX2_DLLPUBLIC SfxDocumentInfoItem : public SfxStringItem |
| { |
| private: |
| sal_Int32 m_AutoloadDelay; |
| ::rtl::OUString m_AutoloadURL; |
| sal_Bool m_isAutoloadEnabled; |
| ::rtl::OUString m_DefaultTarget; |
| ::rtl::OUString m_TemplateName; |
| ::rtl::OUString m_Author; |
| ::com::sun::star::util::DateTime m_CreationDate; |
| ::rtl::OUString m_ModifiedBy; |
| ::com::sun::star::util::DateTime m_ModificationDate; |
| ::rtl::OUString m_PrintedBy; |
| ::com::sun::star::util::DateTime m_PrintDate; |
| sal_Int16 m_EditingCycles; |
| sal_Int32 m_EditingDuration; |
| ::rtl::OUString m_Description; |
| ::rtl::OUString m_Keywords; |
| ::rtl::OUString m_Subject; |
| ::rtl::OUString m_Title; |
| sal_Bool m_bHasTemplate; |
| sal_Bool m_bDeleteUserData; |
| sal_Bool m_bUseUserData; |
| std::vector< CustomProperty* > m_aCustomProperties; |
| |
| public: |
| TYPEINFO(); |
| SfxDocumentInfoItem(); |
| SfxDocumentInfoItem( const String &rFileName, |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::document::XDocumentProperties> & i_xDocProps, |
| sal_Bool bUseUserData ); |
| SfxDocumentInfoItem( const SfxDocumentInfoItem& ); |
| virtual ~SfxDocumentInfoItem(); |
| |
| /// update i_xDocProps with the data in this object |
| void UpdateDocumentInfo( |
| const ::com::sun::star::uno::Reference< |
| ::com::sun::star::document::XDocumentProperties> & i_xDocProps, |
| bool i_bDoNotUpdateUserDefined = false) |
| const; |
| |
| sal_Bool isAutoloadEnabled() const { return m_isAutoloadEnabled; } |
| void setAutoloadEnabled(sal_Bool i_val) { m_isAutoloadEnabled = i_val; } |
| sal_Int32 getAutoloadDelay() const { return m_AutoloadDelay; } |
| void setAutoloadDelay(sal_Int32 i_val) { m_AutoloadDelay = i_val; } |
| ::rtl::OUString getAutoloadURL() const { return m_AutoloadURL; } |
| void setAutoloadURL(::rtl::OUString i_val) { m_AutoloadURL = i_val; } |
| ::rtl::OUString getDefaultTarget() const { return m_DefaultTarget; } |
| void setDefaultTarget(::rtl::OUString i_val) { m_DefaultTarget = i_val; } |
| ::rtl::OUString getTemplateName() const { return m_TemplateName; } |
| void setTemplateName(::rtl::OUString i_val) { m_TemplateName = i_val; } |
| ::rtl::OUString getAuthor() const { return m_Author; } |
| void setAuthor(::rtl::OUString i_val) { m_Author = i_val; } |
| |
| ::com::sun::star::util::DateTime |
| getCreationDate() const { return m_CreationDate; } |
| void setCreationDate(::com::sun::star::util::DateTime i_val) { |
| m_CreationDate = i_val; |
| } |
| ::rtl::OUString getModifiedBy() const { return m_ModifiedBy; } |
| void setModifiedBy(::rtl::OUString i_val) { m_ModifiedBy = i_val; } |
| |
| ::com::sun::star::util::DateTime |
| getModificationDate() const { return m_ModificationDate; } |
| void setModificationDate(::com::sun::star::util::DateTime i_val) { |
| m_ModificationDate = i_val; |
| } |
| ::rtl::OUString getPrintedBy() const { return m_PrintedBy; } |
| void setPrintedBy(::rtl::OUString i_val) { m_PrintedBy = i_val; } |
| ::com::sun::star::util::DateTime |
| getPrintDate() const { return m_PrintDate; } |
| void setPrintDate(::com::sun::star::util::DateTime i_val) { |
| m_PrintDate = i_val; |
| } |
| sal_Int16 getEditingCycles() const { return m_EditingCycles; } |
| void setEditingCycles(sal_Int16 i_val) { m_EditingCycles = i_val; } |
| sal_Int32 getEditingDuration() const { return m_EditingDuration; } |
| void setEditingDuration(sal_Int32 i_val) { m_EditingDuration = i_val; } |
| ::rtl::OUString getDescription() const { return m_Description; } |
| void setDescription(::rtl::OUString i_val) { m_Description = i_val; } |
| ::rtl::OUString getKeywords() const { return m_Keywords; } |
| void setKeywords(::rtl::OUString i_val) { m_Keywords = i_val; } |
| ::rtl::OUString getSubject() const { return m_Subject; } |
| void setSubject(::rtl::OUString i_val) { m_Subject = i_val; } |
| ::rtl::OUString getTitle() const { return m_Title; } |
| void setTitle(::rtl::OUString i_val) { m_Title = i_val; } |
| |
| /// reset user-specific data (author, modified-by, ...) |
| void resetUserData(const ::rtl::OUString & i_rAuthor); |
| |
| void SetTemplate( sal_Bool b ) { m_bHasTemplate = b; } |
| sal_Bool HasTemplate() const { return m_bHasTemplate; } |
| void SetDeleteUserData( sal_Bool bSet ); |
| void SetUseUserData( sal_Bool bSet ); |
| sal_Bool IsDeleteUserData() const; |
| sal_Bool IsUseUserData() const; |
| |
| std::vector< CustomProperty* > GetCustomProperties() const; |
| void ClearCustomProperties(); |
| void AddCustomProperty( const ::rtl::OUString& sName, |
| const com::sun::star::uno::Any& rValue ); |
| |
| virtual SfxPoolItem* Clone( SfxItemPool* pPool = NULL ) const; |
| virtual int operator==( const SfxPoolItem& ) const; |
| virtual sal_Bool QueryValue( com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ) const; |
| virtual sal_Bool PutValue( const com::sun::star::uno::Any& rVal, sal_uInt8 nMemberId = 0 ); |
| }; |
| |
| // class SfxDocumentPage ------------------------------------------------- |
| |
| class SfxDocumentPage : public SfxTabPage |
| { |
| private: |
| FixedImage aBmp1; |
| Edit aNameED; |
| |
| FixedLine aLine1FL; |
| FixedText aTypeFT; |
| svt::SelectableFixedText aShowTypeFT; |
| CheckBox aReadOnlyCB; |
| FixedText aFileFt; |
| svt::SelectableFixedText aFileValFt; |
| FixedText aSizeFT; |
| svt::SelectableFixedText aShowSizeFT; |
| |
| FixedLine aLine2FL; |
| FixedText aCreateFt; |
| svt::SelectableFixedText aCreateValFt; |
| FixedText aChangeFt; |
| svt::SelectableFixedText aChangeValFt; |
| FixedText aSignedFt; |
| svt::SelectableFixedText aSignedValFt; |
| PushButton aSignatureBtn; |
| FixedText aPrintFt; |
| svt::SelectableFixedText aPrintValFt; |
| FixedText aTimeLogFt; |
| svt::SelectableFixedText aTimeLogValFt; |
| FixedText aDocNoFt; |
| svt::SelectableFixedText aDocNoValFt; |
| CheckBox aUseUserDataCB; |
| PushButton aDeleteBtn; |
| |
| FixedLine aLine3FL; |
| FixedText aTemplFt; |
| svt::SelectableFixedText aTemplValFt; |
| |
| String aUnknownSize; |
| String aMultiSignedStr; |
| |
| sal_Bool bEnableUseUserData : 1, |
| bHandleDelete : 1; |
| |
| DECL_LINK( DeleteHdl, PushButton * ); |
| DECL_LINK( SignatureHdl, PushButton * ); |
| void ImplUpdateSignatures(); |
| |
| protected: |
| SfxDocumentPage( Window* pParent, const SfxItemSet& ); |
| |
| virtual sal_Bool FillItemSet( SfxItemSet& ); |
| virtual void Reset( const SfxItemSet& ); |
| |
| public: |
| static SfxTabPage* Create( Window* pParent, const SfxItemSet& ); |
| |
| void EnableUseUserData(); |
| }; |
| |
| // class SfxDocumentDescPage --------------------------------------------- |
| |
| class SfxDocumentDescPage : public SfxTabPage |
| { |
| private: |
| FixedText aTitleFt; |
| Edit aTitleEd; |
| FixedText aThemaFt; |
| Edit aThemaEd; |
| FixedText aKeywordsFt; |
| Edit aKeywordsEd; |
| FixedText aCommentFt; |
| MultiLineEdit aCommentEd; |
| SfxDocumentInfoItem* pInfoItem; |
| |
| protected: |
| SfxDocumentDescPage( Window* pParent, const SfxItemSet& ); |
| |
| virtual sal_Bool FillItemSet( SfxItemSet& ); |
| virtual void Reset( const SfxItemSet& ); |
| |
| public: |
| static SfxTabPage* Create( Window* pParent, const SfxItemSet& ); |
| }; |
| |
| // class SfxInternetPage ------------------------------------------------- |
| |
| class TargetList; |
| namespace sfx2 |
| { |
| class FileDialogHelper; |
| } |
| |
| class SfxInternetPage : public SfxTabPage |
| { |
| private: |
| RadioButton aRBNoAutoUpdate; |
| RadioButton aRBReloadUpdate; |
| RadioButton aRBForwardUpdate; |
| |
| FixedText aFTEvery; |
| NumericField aNFReload; |
| FixedText aFTReloadSeconds; |
| |
| FixedText aFTAfter; |
| NumericField aNFAfter; |
| FixedText aFTAfterSeconds; |
| FixedText aFTURL; |
| Edit aEDForwardURL; |
| PushButton aPBBrowseURL; |
| FixedText aFTFrame; |
| ComboBox aCBFrame; |
| |
| String aForwardErrorMessg; |
| String aBaseURL; |
| SfxDocumentInfoItem* pInfoItem; |
| sfx2::FileDialogHelper* pFileDlg; |
| |
| enum STATE { S_Init, S_NoUpdate, S_Reload, S_Forward }; |
| // S_Init is only valid as initial value |
| STATE eState; |
| |
| void ChangeState( STATE eNewState ); // S_Init is not a valid value here |
| // also checks corresponding radiobutton |
| void EnableNoUpdate( sal_Bool bEnable ); |
| void EnableReload( sal_Bool bEnable ); |
| void EnableForward( sal_Bool bEnable ); |
| |
| DECL_LINK( ClickHdlNoUpdate, Control* ); |
| DECL_LINK( ClickHdlReload, Control* ); |
| DECL_LINK( ClickHdlForward, Control* ); |
| DECL_LINK( ClickHdlBrowseURL, PushButton* ); |
| DECL_LINK( DialogClosedHdl, sfx2::FileDialogHelper* ); |
| |
| using TabPage::DeactivatePage; |
| |
| protected: |
| SfxInternetPage( Window* pParent, const SfxItemSet& ); |
| ~SfxInternetPage(); |
| |
| virtual sal_Bool FillItemSet( SfxItemSet& ); |
| virtual void Reset( const SfxItemSet& ); |
| virtual int DeactivatePage( SfxItemSet* pSet = 0 ); |
| |
| public: |
| static SfxTabPage* Create( Window* pParent, const SfxItemSet& ); |
| }; |
| |
| // class SfxDocumentInfoDialog ------------------------------------------- |
| |
| class SFX2_DLLPUBLIC SfxDocumentInfoDialog : public SfxTabDialog |
| { |
| protected: |
| virtual void PageCreated( sal_uInt16 nId, SfxTabPage& rPage ); |
| |
| public: |
| SfxDocumentInfoDialog( Window* pParent, const SfxItemSet& ); |
| }; |
| |
| // class CustomPropertiesRemoveButton ------------------------------------ |
| |
| struct CustomPropertyLine; |
| |
| class CustomPropertiesEdit : public Edit |
| { |
| private: |
| CustomPropertyLine* m_pLine; |
| |
| public: |
| inline CustomPropertiesEdit( |
| Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : |
| Edit( pParent, rResId ), m_pLine( pLine ) {} |
| |
| inline CustomPropertyLine* GetLine() const { return m_pLine; } |
| }; |
| |
| class CustomPropertiesTypeBox : public ListBox |
| { |
| private: |
| CustomPropertyLine* m_pLine; |
| |
| public: |
| inline CustomPropertiesTypeBox( |
| Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : |
| ListBox( pParent, rResId ), m_pLine( pLine ) {} |
| |
| inline CustomPropertyLine* GetLine() const { return m_pLine; } |
| }; |
| |
| class CustomPropertiesDateField : public DateField |
| { |
| private: |
| CustomPropertyLine* m_pLine; |
| |
| public: |
| inline CustomPropertiesDateField( |
| Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : |
| DateField( pParent, rResId ), m_pLine( pLine ) {} |
| |
| inline CustomPropertyLine* GetLine() const { return m_pLine; } |
| }; |
| class CustomPropertiesTimeField : public TimeField |
| { |
| private: |
| CustomPropertyLine* m_pLine; |
| |
| public: |
| inline CustomPropertiesTimeField( |
| Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : |
| TimeField( pParent, rResId ), m_pLine( pLine ) {} |
| |
| inline CustomPropertyLine* GetLine() const { return m_pLine; } |
| }; |
| class CustomPropertiesDurationField : public Edit |
| { |
| CustomPropertyLine* m_pLine; |
| com::sun::star::util::Duration m_aDuration; |
| protected: |
| virtual void RequestHelp(const HelpEvent& rEvt); |
| public: |
| CustomPropertiesDurationField( Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ); |
| ~CustomPropertiesDurationField(); |
| |
| void SetDuration( const com::sun::star::util::Duration& rDuration ); |
| const com::sun::star::util::Duration& GetDuration() const { return m_aDuration; } |
| }; |
| |
| class CustomPropertiesEditButton : public PushButton |
| { |
| CustomPropertyLine* m_pLine; |
| |
| public: |
| CustomPropertiesEditButton( Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ); |
| ~CustomPropertiesEditButton(); |
| |
| DECL_LINK(ClickHdl, PushButton*); |
| }; |
| |
| class CustomPropertiesRemoveButton : public ImageButton |
| { |
| private: |
| CustomPropertyLine* m_pLine; |
| |
| public: |
| inline CustomPropertiesRemoveButton( |
| Window* pParent, const ResId& rResId, CustomPropertyLine* pLine ) : |
| ImageButton( pParent, rResId ), m_pLine( pLine ) {} |
| |
| inline CustomPropertyLine* GetLine() const { return m_pLine; } |
| }; |
| |
| class CustomPropertiesYesNoButton : public Control |
| { |
| private: |
| RadioButton m_aYesButton; |
| RadioButton m_aNoButton; |
| |
| public: |
| CustomPropertiesYesNoButton( Window* pParent, const ResId& rResId ); |
| |
| virtual void Resize(); |
| |
| inline void CheckYes() { m_aYesButton.Check(); } |
| inline void CheckNo() { m_aNoButton.Check(); } |
| inline bool IsYesChecked() const { return m_aYesButton.IsChecked() != sal_False; } |
| }; |
| |
| // struct CustomPropertyLine --------------------------------------------- |
| |
| struct CustomPropertyLine |
| { |
| ComboBox m_aNameBox; |
| CustomPropertiesTypeBox m_aTypeBox; |
| CustomPropertiesEdit m_aValueEdit; |
| CustomPropertiesDateField m_aDateField; |
| CustomPropertiesTimeField m_aTimeField; |
| const String m_sDurationFormat; |
| CustomPropertiesDurationField m_aDurationField; |
| CustomPropertiesEditButton m_aEditButton; |
| CustomPropertiesYesNoButton m_aYesNoButton; |
| CustomPropertiesRemoveButton m_aRemoveButton; |
| |
| bool m_bIsRemoved; |
| bool m_bTypeLostFocus; |
| |
| CustomPropertyLine( Window* pParent ); |
| |
| void SetRemoved(); |
| }; |
| |
| // class CustomPropertiesWindow ------------------------------------------ |
| |
| class CustomPropertiesWindow : public Window |
| { |
| private: |
| ComboBox m_aNameBox; |
| ListBox m_aTypeBox; |
| Edit m_aValueEdit; |
| DateField m_aDateField; |
| TimeField m_aTimeField; |
| Edit m_aDurationField; |
| PushButton m_aEditButton; |
| CustomPropertiesYesNoButton m_aYesNoButton; |
| ImageButton m_aRemoveButton; |
| |
| long m_nDatePosX; |
| long m_nTimePosX; |
| |
| sal_Int32 m_nLineHeight; |
| sal_Int32 m_nScrollPos; |
| SvtSysLocale m_aSysLocale; |
| std::vector< CustomPropertyLine* > m_aCustomPropertiesLines; |
| CustomPropertyLine* m_pCurrentLine; |
| SvNumberFormatter m_aNumberFormatter; |
| Timer m_aEditLoseFocusTimer; |
| Timer m_aBoxLoseFocusTimer; |
| Link m_aRemovedHdl; |
| |
| DECL_LINK( TypeHdl, CustomPropertiesTypeBox* ); |
| DECL_LINK( RemoveHdl, CustomPropertiesRemoveButton* ); |
| DECL_LINK( EditLoseFocusHdl, CustomPropertiesEdit* ); |
| DECL_LINK( BoxLoseFocusHdl, CustomPropertiesTypeBox* ); |
| //add lose focus handlers of Date/TimeField? |
| |
| DECL_LINK( EditTimeoutHdl, Timer* ); |
| DECL_LINK( BoxTimeoutHdl, Timer* ); |
| |
| bool IsLineValid( CustomPropertyLine* pLine ) const; |
| void ValidateLine( CustomPropertyLine* pLine, bool bIsFromTypeBox ); |
| |
| public: |
| CustomPropertiesWindow( Window* pParent, const ResId& rResId ); |
| ~CustomPropertiesWindow(); |
| |
| void InitControls( HeaderBar* pHeaderBar, const ScrollBar* pScrollBar ); |
| sal_uInt16 GetVisibleLineCount() const; |
| inline sal_Int32 GetLineHeight() const { return m_nLineHeight; } |
| void AddLine( const ::rtl::OUString& sName, com::sun::star::uno::Any& rAny ); |
| bool AreAllLinesValid() const; |
| void ClearAllLines(); |
| void DoScroll( sal_Int32 nNewPos ); |
| |
| bool DoesCustomPropertyExist( const String& rName ) const; |
| ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > |
| GetCustomProperties() const; |
| void SetRemovedHdl( const Link& rLink ) { m_aRemovedHdl = rLink; } |
| }; |
| |
| // class CustomPropertiesControl ----------------------------------------- |
| |
| class CustomPropertiesControl : public Control |
| { |
| private: |
| HeaderBar m_aHeaderBar; |
| CustomPropertiesWindow m_aPropertiesWin; |
| ScrollBar m_aVertScroll; |
| |
| bool m_bIsInitialized; |
| sal_Int32 m_nThumbPos; |
| |
| void Initialize(); |
| |
| DECL_LINK( ScrollHdl, ScrollBar* ); |
| DECL_LINK( RemovedHdl, void* ); |
| |
| public: |
| CustomPropertiesControl( Window* pParent, const ResId& rResId ); |
| ~CustomPropertiesControl(); |
| |
| void AddLine( const ::rtl::OUString& sName, com::sun::star::uno::Any& rAny, bool bInteractive ); |
| |
| inline bool AreAllLinesValid() const { return m_aPropertiesWin.AreAllLinesValid(); } |
| inline void ClearAllLines() { m_aPropertiesWin.ClearAllLines(); } |
| inline bool DoesCustomPropertyExist( const String& rName ) const |
| { return m_aPropertiesWin.DoesCustomPropertyExist( rName ); } |
| inline ::com::sun::star::uno::Sequence< ::com::sun::star::beans::PropertyValue > |
| GetCustomProperties() const |
| { return m_aPropertiesWin.GetCustomProperties(); } |
| }; |
| |
| // class SfxCustomPropertiesPage ----------------------------------------- |
| |
| class SfxCustomPropertiesPage : public SfxTabPage |
| { |
| private: |
| CustomPropertiesControl m_aPropertiesCtrl; |
| PushButton m_aAddBtn; |
| FixedText m_aPropertiesFT; |
| |
| DECL_LINK( AddHdl, PushButton* ); |
| |
| using TabPage::DeactivatePage; |
| |
| protected: |
| SfxCustomPropertiesPage( Window* pParent, const SfxItemSet& ); |
| |
| virtual sal_Bool FillItemSet( SfxItemSet& ); |
| virtual void Reset( const SfxItemSet& ); |
| virtual int DeactivatePage( SfxItemSet* pSet = NULL ); |
| |
| public: |
| static SfxTabPage* Create( Window* pParent, const SfxItemSet& ); |
| }; |
| |
| #endif // #ifndef _SFX_DINFDLG_HXX |
| |