diff options
Diffstat (limited to 'sfx2/inc/sfx2/dinfdlg.hxx')
-rw-r--r-- | sfx2/inc/sfx2/dinfdlg.hxx | 577 |
1 files changed, 577 insertions, 0 deletions
diff --git a/sfx2/inc/sfx2/dinfdlg.hxx b/sfx2/inc/sfx2/dinfdlg.hxx new file mode 100644 index 000000000000..00ece44f64ee --- /dev/null +++ b/sfx2/inc/sfx2/dinfdlg.hxx @@ -0,0 +1,577 @@ +/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ +/************************************************************************* + * + * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. + * + * Copyright 2000, 2010 Oracle and/or its affiliates. + * + * OpenOffice.org - a multi-platform office productivity suite + * + * This file is part of OpenOffice.org. + * + * OpenOffice.org is free software: you can redistribute it and/or modify + * it under the terms of the GNU Lesser General Public License version 3 + * only, as published by the Free Software Foundation. + * + * OpenOffice.org is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Lesser General Public License version 3 for more details + * (a copy is included in the LICENSE file that accompanied this code). + * + * You should have received a copy of the GNU Lesser General Public License + * version 3 along with OpenOffice.org. If not, see + * <http://www.openoffice.org/license.html> + * for a copy of the LGPLv3 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 bool QueryValue( com::sun::star::uno::Any& rVal, BYTE nMemberId = 0 ) const; + virtual bool PutValue( const com::sun::star::uno::Any& rVal, BYTE 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; + + BOOL bEnableUseUserData : 1, + bHandleDelete : 1; + + DECL_LINK( DeleteHdl, PushButton * ); + DECL_LINK( SignatureHdl, PushButton * ); + void ImplUpdateSignatures(); + +protected: + SfxDocumentPage( Window* pParent, const SfxItemSet& ); + + virtual 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 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( BOOL bEnable ); + void EnableReload( BOOL bEnable ); + void EnableForward( 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 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( USHORT 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() != 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; + + Point m_aDatePos; + Point m_aTimePos; + Size m_aDateTimeSize; + + 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; + + 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 ); + USHORT 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: + FixedText m_aPropertiesFT; + CustomPropertiesControl m_aPropertiesCtrl; + PushButton m_aAddBtn; + + DECL_LINK( AddHdl, PushButton* ); + + using TabPage::DeactivatePage; + +protected: + SfxCustomPropertiesPage( Window* pParent, const SfxItemSet& ); + + virtual 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 + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |