diff options
Diffstat (limited to 'sfx2/inc/sfx2/filedlghelper.hxx')
-rw-r--r-- | sfx2/inc/sfx2/filedlghelper.hxx | 325 |
1 files changed, 325 insertions, 0 deletions
diff --git a/sfx2/inc/sfx2/filedlghelper.hxx b/sfx2/inc/sfx2/filedlghelper.hxx new file mode 100644 index 000000000000..619358f077ac --- /dev/null +++ b/sfx2/inc/sfx2/filedlghelper.hxx @@ -0,0 +1,325 @@ +/************************************************************************* + * + * 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 _FILEDLGHELPER_HXX +#define _FILEDLGHELPER_HXX + +#include "sal/config.h" +#include "sfx2/dllapi.h" +#include "sal/types.h" +#include <com/sun/star/uno/Reference.hxx> +#include <com/sun/star/uno/Sequence.hxx> +#include <rtl/ustring.hxx> +#include <tools/solar.h> +#include <tools/string.hxx> +#include <tools/errcode.hxx> +#include <vcl/dialog.hxx> +#include <vcl/edit.hxx> +#ifndef _SV_BUTTON_HXX +#include <vcl/button.hxx> +#endif +#include <vcl/graph.hxx> +#include <sfx2/sfxdefs.hxx> +#include <sfx2/sfxuno.hxx> + +//----------------------------------------------------------------------------- + +namespace com +{ + namespace sun + { + namespace star + { + namespace ui + { + namespace dialogs + { + class XFilePicker; + class XFilePickerListener; + struct FilePickerEvent; + struct DialogClosedEvent; + } + } + } + } +} + +class SfxItemSet; +class SvStringsDtor; +class Window; + +//----------------------------------------------------------------------------- +/* +#define WB_PATH 0x00100000L +#define WB_OPEN 0x00200000L +#define WB_SAVEAS 0x00400000L +#define WB_PASSWORD 0x01000000L +#define WB_READONLY 0x02000000L +*/ + +#define SFXWB_INSERT ( 0x04000000L | WB_OPEN ) // ((WinBits)0x00200000) +#define SFXWB_PASSWORD WB_PASSWORD // ((WinBits)0x01000000) +#define SFXWB_READONLY WB_READONLY // ((WinBits)0x02000000) +#define SFXWB_PATHDIALOG WB_PATH // ((WinBits)0x00100000) +#define SFXWB_CLASSPATH ( 0x08000000L | SFXWB_PATHDIALOG ) +#define SFXWB_SHOWALLFOLDER 0x10000000L // alle Ordner auch Mail/News/... +#define SFXWB_MULTISELECTION 0x20000000L // Multiselection an +#define SFXWB_NOREMOTE 0x40000000L +#define SFXWB_SHOWVERSIONS 0x80000000L // Versionsauswahl anzeigen + +#define SFXWB_GRAPHIC 0x00800000L // FileOpen with link and preview box +#define SFXWB_SHOWSTYLES 0x01000000L // FileOpen with link and preview box and styles + +#define SFXWB_EXPORT ( 0x040000000L | WB_SAVEAS ) // Export dialog + +#define FILEDIALOG_FILTER_ALL "*.*" + +#define FILE_OPEN_SERVICE_NAME "com.sun.star.ui.dialogs.FilePicker" +#define FOLDER_PICKER_SERVICE_NAME "com.sun.star.ui.dialogs.FolderPicker" +#define FILE_OPEN_SERVICE_NAME_SYSTEM "com.sun.star.ui.dialogs.SystemFilePicker" +#define FILE_OPEN_SERVICE_NAME_OOO "com.sun.star.ui.dialogs.OfficeFilePicker" + +//----------------------------------------------------------------------------- + +namespace sfx2 { + +class FileDialogHelper_Impl; + +class SFX2_DLLPUBLIC FileDialogHelper +{ +public: + enum Context // context where the FileDialogHelper is used + { + UNKNOWN_CONTEXT, // unknown context + SW_INSERT_GRAPHIC, // insert graphic in writer + SW_INSERT_SOUND, // insert sound in writer + SW_INSERT_VIDEO, // insert video in writer + SC_INSERT_GRAPHIC, // insert graphic in calc + SC_INSERT_SOUND, // insert sound in calc + SC_INSERT_VIDEO, // insert video in calc + SD_INSERT_GRAPHIC, // insert graphic in draw + SD_INSERT_SOUND, // insert sound in draw + SD_INSERT_VIDEO, // insert video in draw + SD_EXPORT, // export in draw + SI_EXPORT, // export in impress + SW_EXPORT // export in writer + }; + +private: + Link m_aDialogClosedLink; + ErrCode m_nError; + + ::com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XFilePickerListener > mxImp; + FileDialogHelper_Impl *mpImp; + +//#if 0 // _SOLAR__PRIVATE + + SAL_DLLPRIVATE sal_Int16 getDialogType( sal_Int64 nFlags ) const; + +//#endif + +public: + FileDialogHelper( sal_Int64 nFlags, + const String& rFactory, + sal_Int16 nDialog, + SfxFilterFlags nMust, + SfxFilterFlags nDont ); + + FileDialogHelper( sal_Int64 nFlags, + const String& rFact, + sal_Int16 nDialog, + SfxFilterFlags nMust, + SfxFilterFlags nDont, + const String& rStandardDir, + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList); + + FileDialogHelper( sal_Int64 nFlags, + const String& rFactory, + SfxFilterFlags nMust = 0, + SfxFilterFlags nDont = 0 ); + + FileDialogHelper( sal_Int16 nDialogType, + sal_Int64 nFlags, + const String& rFactory, + SfxFilterFlags nMust = 0, + SfxFilterFlags nDont = 0 ); + + FileDialogHelper( sal_Int16 nDialogType, + sal_Int64 nFlags, + const String& rFactory, + sal_Int16 nDialog, + SfxFilterFlags nMust, + SfxFilterFlags nDont, + const String& rStandardDir, + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList); + + FileDialogHelper( sal_Int64 nFlags ); + + FileDialogHelper( sal_Int16 nDialogType, + sal_Int64 nFlags, + Window* _pPreferredParent = NULL ); + + FileDialogHelper( sal_Int16 nDialogType, + sal_Int64 nFlags, + const ::rtl::OUString& aFilterUIName, + const ::rtl::OUString& aExtName, + const ::rtl::OUString& rStandardDir, + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList, + Window* _pPreferredParent = NULL ); + + + virtual ~FileDialogHelper(); + + ErrCode Execute(); + void StartExecuteModal( const Link& rEndDialogHdl ); + inline ErrCode GetError() const { return m_nError; } + sal_Int16 GetDialogType() const; + sal_Bool IsPasswordEnabled() const; + String GetRealFilter() const; + + void SetTitle( const String& rNewTitle ); + String GetPath() const; + + /** @deprected: Don't use this method to retrieve the selected files + There are file picker which can provide multiple selected file which belong + to different folders. As this method always provides the root folder for all selected + files this cannot work. + */ + ::com::sun::star::uno::Sequence< ::rtl::OUString > GetMPath() const; + + /** Provides the selected files with full path information */ + ::com::sun::star::uno::Sequence< ::rtl::OUString > GetSelectedFiles() const; + + void AddFilter( const String& rFilterName, const String& rExtension ); + void SetCurrentFilter( const String& rFilter ); + + /** sets an initial display directory/file name + + @deprecated + don't use this method. It contains a lot of magic in determining whether the + last segment of the given path/URL denotes a file name or a folder, and by + definition, it cannot succeed with this magic *all* the time - there will + always be scenarios where it fails. + + Use SetDisplayFolder and SetFileName. + */ + void SetDisplayDirectory( const String& rPath ); + + /** sets a new folder whose content is to be displayed in the file picker + + @param _rURL + specifies the URL of the folder whose content is to be displayed.<br/> + If the URL doesn't denote a valid (existent and accessible) folder, the + request is silently dropped. + @throws ::com::sun::star::uno::RuntimeException + if the invocation of any of the file picker or UCB methods throws a RuntimeException. + */ + void SetDisplayFolder( const String& _rURL ); + + /** sets an initial file name to display + + This method is usually used in "save-as" contexts, where the application should + suggest an initial name for the file to save. + + Calling this method is nearly equivalent to calling <code>GetFilePicker().setDefaultName( _rFileName )</code>, + with the following differences: + <ul><li>The FileDialogHelper remembers the given file name, and upon execution, + strips its extension if the dialog is set up for "automatic file name extension".</li> + <li>Exceptions thrown from the <code>XFilePicker</code> are caught and silenced.</li> + </ul> + */ + void SetFileName( const String& _rFileName ); + + String GetCurrentFilter() const; + String GetDisplayDirectory() const; + ErrCode GetGraphic( Graphic& rGraphic ) const; + + ::com::sun::star::uno::Reference < ::com::sun::star::ui::dialogs::XFilePicker > GetFilePicker() const; + + // XFilePickerListener methods + virtual void SAL_CALL FileSelectionChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ); + virtual void SAL_CALL DirectoryChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ); + virtual void SAL_CALL ControlStateChanged( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ); + virtual void SAL_CALL DialogSizeChanged(); + virtual ::rtl::OUString SAL_CALL HelpRequested( const ::com::sun::star::ui::dialogs::FilePickerEvent& aEvent ); + + // XDialogClosedListener methods + virtual void SAL_CALL DialogClosed( const ::com::sun::star::ui::dialogs::DialogClosedEvent& _rEvent ); + + // retrieves the top-most file picker - i.e. the instance which is currently beeing executed + static ::com::sun::star::uno::Reference< ::com::sun::star::ui::dialogs::XFilePicker > + GetTopMostFilePicker( ); + + /** sets help ids for the controls in the dialog + @param _pControlId + Pointer to a 0-terminated array of control ids. They must be recruited from the + CommonFilePickerElementIds and ExtendedFilePickerElementIds values. + @param _pHelpId + Pointer to an array of help ids. For each element in _pControlId, there must be + a corresponding element herein. + */ + void SetControlHelpIds( const sal_Int16* _pControlId, const char** _pHelpId ); + void CreateMatcher( const String& rName ); + + /** sets the context of the dialog and trigger necessary actions e.g. loading config, setting help id + @param _eNewContext + New context for the dialog. + */ + void SetContext( Context _eNewContext ); + + DECL_LINK( ExecuteSystemFilePicker, void* ); + +//#if 0 // _SOLAR__PRIVATE + ErrCode Execute( SvStringsDtor*& rpURLList, + SfxItemSet *& rpSet, + String& rFilter, + const String& rDirPath ); + ErrCode Execute( SfxItemSet *& rpSet, + String& rFilter ); +//#endif +}; + +#define SFX2_IMPL_DIALOG_CONFIG 0 +#define SFX2_IMPL_DIALOG_SYSTEM 1 +#define SFX2_IMPL_DIALOG_OOO 2 + +//#if 0 // _SOLAR__PRIVATE +ErrCode FileOpenDialog_Impl( sal_Int64 nFlags, + const String& rFact, + SvStringsDtor *& rpURLList, + String& rFilter, + SfxItemSet *& rpSet, + const String* pPath = NULL, + sal_Int16 nDialog = SFX2_IMPL_DIALOG_CONFIG, + const String& rStandardDir = String::CreateFromAscii( "" ), + const ::com::sun::star::uno::Sequence< ::rtl::OUString >& rBlackList = ::com::sun::star::uno::Sequence< ::rtl::OUString >()); +//#endif +} + +//----------------------------------------------------------------------------- + +#endif + |