diff options
Diffstat (limited to 'sfx2/source/dialog/filedlgimpl.hxx')
-rw-r--r-- | sfx2/source/dialog/filedlgimpl.hxx | 240 |
1 files changed, 240 insertions, 0 deletions
diff --git a/sfx2/source/dialog/filedlgimpl.hxx b/sfx2/source/dialog/filedlgimpl.hxx new file mode 100644 index 000000000000..0a76cb1eca67 --- /dev/null +++ b/sfx2/source/dialog/filedlgimpl.hxx @@ -0,0 +1,240 @@ +/* -*- 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_FILEDLGIMPL_HXX +#define _SFX_FILEDLGIMPL_HXX + +#include <vcl/timer.hxx> +#include <vcl/graph.hxx> +#include <cppuhelper/implbase2.hxx> +#include <com/sun/star/beans/StringPair.hpp> +#include <com/sun/star/container/XNameAccess.hpp> +#include <com/sun/star/ui/dialogs/XFilePicker.hpp> +#include <com/sun/star/ui/dialogs/XFilePickerListener.hpp> +#include <com/sun/star/ui/dialogs/XDialogClosedListener.hpp> +#include <sfx2/fcontnr.hxx> + +#define _SVSTDARR_STRINGSDTOR +#include <svl/svstdarr.hxx> + +#include <sfx2/filedlghelper.hxx> +#include <comphelper/sequenceasvector.hxx> + +class SfxFilterMatcher; +class GraphicFilter; +class FileDialogHelper; + +namespace sfx2 +{ + typedef ::com::sun::star::beans::StringPair FilterPair; + + class FileDialogHelper_Impl : + public ::cppu::WeakImplHelper2< + ::com::sun::star::ui::dialogs::XFilePickerListener, + ::com::sun::star::ui::dialogs::XDialogClosedListener > + { + friend class FileDialogHelper; + + ::com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XFilePicker > mxFileDlg; + ::com::sun::star::uno::Reference < ::com::sun::star::container::XNameAccess > mxFilterCFG; + + std::vector< FilterPair > maFilters; + + SfxFilterMatcher* mpMatcher; + GraphicFilter* mpGraphicFilter; + FileDialogHelper* mpAntiImpl; + Window* mpPreferredParentWindow; + + ::comphelper::SequenceAsVector< ::rtl::OUString > mlLastURLs; + + ::rtl::OUString maPath; + ::rtl::OUString maFileName; + ::rtl::OUString maCurFilter; + ::rtl::OUString maSelectFilter; + ::rtl::OUString maButtonLabel; + + Timer maPreViewTimer; + Graphic maGraphic; + + const short m_nDialogType; + + SfxFilterFlags m_nMustFlags; + SfxFilterFlags m_nDontFlags; + + sal_uIntPtr mnPostUserEventId; + + ErrCode mnError; + + FileDialogHelper::Context meContext; + + sal_Bool mbHasPassword : 1; + sal_Bool mbIsPwdEnabled : 1; + sal_Bool m_bHaveFilterOptions : 1; + sal_Bool mbHasVersions : 1; + sal_Bool mbHasAutoExt : 1; + sal_Bool mbHasLink : 1; + sal_Bool mbHasPreview : 1; + sal_Bool mbShowPreview : 1; + sal_Bool mbIsSaveDlg : 1; + sal_Bool mbExport : 1; + + sal_Bool mbDeleteMatcher : 1; + sal_Bool mbInsert : 1; + sal_Bool mbSystemPicker : 1; + sal_Bool mbPwdCheckBoxState : 1; + sal_Bool mbSelection : 1; + sal_Bool mbSelectionEnabled : 1; + sal_Bool mbHasSelectionBox : 1; + sal_Bool mbSelectionFltrEnabled : 1; + + private: + void addFilters( sal_Int64 nFlags, + const String& rFactory, + SfxFilterFlags nMust, + SfxFilterFlags nDont ); + void addFilter( const ::rtl::OUString& rFilterName, + const ::rtl::OUString& rExtension ); + void addGraphicFilter(); + void enablePasswordBox( sal_Bool bInit ); + void updateFilterOptionsBox(); + void updateExportButton(); + void updateSelectionBox(); + void updateVersions(); + void updatePreviewState( sal_Bool _bUpdatePreviewWindow = sal_True ); + void dispose(); + + void loadConfig(); + void saveConfig(); + + const SfxFilter* getCurentSfxFilter(); + sal_Bool updateExtendedControl( sal_Int16 _nExtendedControlId, sal_Bool _bEnable ); + + ErrCode getGraphic( const ::rtl::OUString& rURL, Graphic& rGraphic ) const; + void setDefaultValues(); + + void preExecute(); + void postExecute( sal_Int16 _nResult ); + sal_Int16 implDoExecute(); + void implStartExecute(); + + void correctVirtualDialogType(); + + void setControlHelpIds( const sal_Int16* _pControlId, const char** _pHelpId ); + + sal_Bool CheckFilterOptionsCapability( const SfxFilter* _pFilter ); + + sal_Bool isInOpenMode() const; + String getCurrentFilterUIName() const; + + void LoadLastUsedFilter( const ::rtl::OUString& _rContextIdentifier ); + void SaveLastUsedFilter( const ::rtl::OUString& _rContextIdentifier ); + void SaveLastUsedFilter( void ); + + void implInitializeFileName( ); + + void implGetAndCacheFiles( const ::com::sun::star::uno::Reference< XInterface >& xPicker , + SvStringsDtor*& rpURLList, + const SfxFilter* pFilter ); + String implEnsureURLExtension(const String& sURL , + const String& sExtension); + + DECL_LINK( TimeOutHdl_Impl, Timer* ); + DECL_LINK( HandleEvent, FileDialogHelper* ); + DECL_LINK( InitControls, void* ); + + public: + // XFilePickerListener methods + virtual void SAL_CALL fileSelectionChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ) throw( ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL directoryChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ) throw( ::com::sun::star::uno::RuntimeException ); + virtual ::rtl::OUString SAL_CALL helpRequested( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ) throw( ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL controlStateChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ) throw( ::com::sun::star::uno::RuntimeException ); + virtual void SAL_CALL dialogSizeChanged() throw( ::com::sun::star::uno::RuntimeException ); + + // XDialogClosedListener methods + virtual void SAL_CALL dialogClosed( const ::com::sun::star::ui::dialogs::DialogClosedEvent& _rEvent ) throw (::com::sun::star::uno::RuntimeException); + + // XEventListener methods + virtual void SAL_CALL disposing( const ::com::sun::star::lang::EventObject& Source ) throw( ::com::sun::star::uno::RuntimeException ); + + // handle XFilePickerListener events + void handleFileSelectionChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ); + void handleDirectoryChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ); + ::rtl::OUString handleHelpRequested( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ); + void handleControlStateChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ); + void handleDialogSizeChanged(); + + // Own methods + FileDialogHelper_Impl( + FileDialogHelper* _pAntiImpl, + const short nDialogType, + sal_Int64 nFlags, + sal_Int16 nDialog = SFX2_IMPL_DIALOG_CONFIG, + Window* _pPreferredParentWindow = NULL, + const String& sStandardDir = String::CreateFromAscii( "" ), + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList = ::com::sun::star::uno::Sequence< ::rtl::OUString >() + ); + virtual ~FileDialogHelper_Impl(); + + ErrCode execute( SvStringsDtor*& rpURLList, + SfxItemSet *& rpSet, + String& rFilter ); + ErrCode execute(); + + void setFilter( const ::rtl::OUString& rFilter ); + + /** sets the directory which should be browsed + + <p>If the given path does not point to a valid (existent and accessible) folder, the request + is silently dropped</p> + */ + void displayFolder( const ::rtl::OUString& rPath ); + void setFileName( const ::rtl::OUString& _rFile ); + + ::rtl::OUString getPath() const; + ::rtl::OUString getFilter() const; + void getRealFilter( String& _rFilter ) const; + + ErrCode getGraphic( Graphic& rGraphic ) const; + void createMatcher( const String& rFactory ); + + sal_Bool isShowFilterExtensionEnabled() const; + void addFilterPair( const ::rtl::OUString& rFilter, + const ::rtl::OUString& rFilterWithExtension ); + ::rtl::OUString getFilterName( const ::rtl::OUString& rFilterWithExtension ) const; + ::rtl::OUString getFilterWithExtension( const ::rtl::OUString& rFilter ) const; + + void SetContext( FileDialogHelper::Context _eNewContext ); + + inline sal_Bool isSystemFilePicker() const { return mbSystemPicker; } + inline sal_Bool isPasswordEnabled() const { return mbIsPwdEnabled; } + }; + +} // end of namespace sfx2 + +#endif // _SFX_FILEDLGIMPL_HXX + +/* vim:set shiftwidth=4 softtabstop=4 expandtab: */ |