fpicker/source/aqua/SalAquaFilePicker.hxx | 3 + fpicker/source/aqua/SalAquaFilePicker.mm | 24 ++++++++------- fpicker/source/office/OfficeFilePicker.cxx | 32 ++++++++------------ fpicker/source/office/OfficeFilePicker.hxx | 1 fpicker/source/win32/filepicker/FilePicker.cxx | 2 - fpicker/source/win32/filepicker/FilePicker.hxx | 4 -- fpicker/source/win32/filepicker/VistaFilePicker.cxx | 9 +---- fpicker/source/win32/filepicker/VistaFilePicker.hxx | 7 ---- offapi/com/sun/star/ui/dialogs/XFilePicker2.idl | 2 - offapi/com/sun/star/ui/dialogs/XFilePicker3.idl | 4 +- offapi/type_reference/offapi.idl | 6 +++ vcl/unx/gtk/fpicker/SalGtkFilePicker.hxx | 1 vcl/unx/kde4/KDE4FilePicker.hxx | 4 -- 13 files changed, 45 insertions(+), 54 deletions(-)
New commits: commit 5bbff06137a87e97260a188f6745cf2a227f15cf Author: Julien Nabet <[email protected]> Date: Wed Jul 15 13:24:07 2015 +0200 [API CHANGE] XFilePicker2/3 changes for multiselection In order to use GetSelectedFiles (in XFilePicker2) instead of GetFiles (in XFilePicker), here are some api changes before: XFilePicker3 inherits from XFilePicker XFilePicker2 is not a published interface after: XFilePicker3 inherits from XFilePicker2 XFilePicker2 is a published interface + adapt Uno Implementations Change-Id: If44afaa7236f08bc2b814f91eda5bfad333dd799 Reviewed-on: https://gerrit.libreoffice.org/17068 Reviewed-by: Stephan Bergmann <[email protected]> Tested-by: Stephan Bergmann <[email protected]> diff --git a/fpicker/source/aqua/SalAquaFilePicker.hxx b/fpicker/source/aqua/SalAquaFilePicker.hxx index 9a32f31..f018f86 100644 --- a/fpicker/source/aqua/SalAquaFilePicker.hxx +++ b/fpicker/source/aqua/SalAquaFilePicker.hxx @@ -83,6 +83,9 @@ public: virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getFiles( ) throw( ::com::sun::star::uno::RuntimeException ) SAL_OVERRIDE; + virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSelectedFiles( ) + throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE; + // XFilterManager functions virtual void SAL_CALL appendFilter( const OUString& aTitle, const OUString& aFilter ) diff --git a/fpicker/source/aqua/SalAquaFilePicker.mm b/fpicker/source/aqua/SalAquaFilePicker.mm index 4313818..5ee5892 100644 --- a/fpicker/source/aqua/SalAquaFilePicker.mm +++ b/fpicker/source/aqua/SalAquaFilePicker.mm @@ -305,6 +305,20 @@ uno::Sequence<rtl::OUString> SAL_CALL SalAquaFilePicker::getFiles() throw( uno:: { DBG_PRINT_ENTRY(CLASS_NAME, __func__); + uno::Sequence< rtl::OUString > aSelectedFiles = getSelectedFiles(); + // multiselection doesn't really work with getFiles + // so just retrieve the first url + if (aSelectedFiles.getLength() > 1) + aSelectedFiles.realloc(1); + + DBG_PRINT_EXIT(CLASS_NAME, __func__); + return aSelectedFiles; +} + +uno::Sequence<rtl::OUString> SAL_CALL SalAquaFilePicker::getSelectedFiles() throw( uno::RuntimeException, std::exception ) +{ + DBG_PRINT_ENTRY(CLASS_NAME, __func__); + SolarMutexGuard aGuard; #if HAVE_FEATURE_MACOSX_SANDBOX @@ -319,11 +333,6 @@ uno::Sequence<rtl::OUString> SAL_CALL SalAquaFilePicker::getFiles() throw( uno:: #endif // OSL_TRACE("starting work"); - /* - * If more than one file is selected in an OpenDialog, then the first result - * is the directory and the remaining results contain just the files' names - * without the basedir path. - */ NSArray *files = nil; if (m_nDialogType == NAVIGATIONSERVICES_OPEN) { files = [(NSOpenPanel*)m_pDialog URLs]; @@ -335,11 +344,6 @@ uno::Sequence<rtl::OUString> SAL_CALL SalAquaFilePicker::getFiles() throw( uno:: long nFiles = [files count]; SAL_INFO("fpicker.aqua", "# of items: " << nFiles); - // multiselection doesn't really work - // so just retrieve the first url - if (nFiles > 1) - nFiles = 1; - uno::Sequence< rtl::OUString > aSelectedFiles(nFiles); for(long nIndex = 0; nIndex < nFiles; nIndex += 1) diff --git a/fpicker/source/office/OfficeFilePicker.cxx b/fpicker/source/office/OfficeFilePicker.cxx index f52cdfe..134b661 100644 --- a/fpicker/source/office/OfficeFilePicker.cxx +++ b/fpicker/source/office/OfficeFilePicker.cxx @@ -591,7 +591,7 @@ OUString SAL_CALL SvtFilePicker::getDisplayDirectory() throw( RuntimeException, return m_aDisplayDirectory; } -Sequence< OUString > SAL_CALL SvtFilePicker::getFiles() throw( RuntimeException, std::exception ) +Sequence< OUString > SAL_CALL SvtFilePicker::getSelectedFiles() throw( RuntimeException, std::exception ) { checkAlive(); @@ -602,31 +602,25 @@ Sequence< OUString > SAL_CALL SvtFilePicker::getFiles() throw( RuntimeException, return aEmpty; } - // if there is more than one path we have to return the path to the - // files first and then the list of the selected entries - std::vector<OUString> aPathList(getDialog()->GetPathList()); size_t nCount = aPathList.size(); - size_t nTotal = nCount > 1 ? nCount+1: nCount; - Sequence< OUString > aPath( nTotal ); + Sequence< OUString > aFiles(nCount); - if ( nCount == 1 ) - aPath[0] = aPathList[0]; - else if ( nCount > 1 ) + for(size_t i = 0; i < aPathList.size(); ++i) { - INetURLObject aObj(aPathList[0]); - aObj.removeSegment(); - aPath[0] = aObj.GetMainURL( INetURLObject::NO_DECODE ); - - for(size_t i = 0; i < aPathList.size(); ++i) - { - aObj.SetURL(aPathList[i]); - aPath[i + 1] = aObj.getName(); - } + aFiles[i] = aPathList[i]; } - return aPath; + return aFiles; +} + +Sequence< OUString > SAL_CALL SvtFilePicker::getFiles() throw( RuntimeException, std::exception ) +{ + Sequence< OUString > aFiles = getSelectedFiles(); + if (aFiles.getLength() > 1) + aFiles.realloc(1); + return aFiles; } diff --git a/fpicker/source/office/OfficeFilePicker.hxx b/fpicker/source/office/OfficeFilePicker.hxx index df6ad1c..3fa7c6e 100644 --- a/fpicker/source/office/OfficeFilePicker.hxx +++ b/fpicker/source/office/OfficeFilePicker.hxx @@ -119,6 +119,7 @@ public: virtual void SAL_CALL setDisplayDirectory( const OUString& aDirectory ) throw( ::com::sun::star::lang::IllegalArgumentException, ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE; virtual OUString SAL_CALL getDisplayDirectory() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE; virtual com::sun::star::uno::Sequence< OUString > SAL_CALL getFiles() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE; + virtual com::sun::star::uno::Sequence< OUString > SAL_CALL getSelectedFiles() throw( ::com::sun::star::uno::RuntimeException, std::exception ) SAL_OVERRIDE; // XFilePickerControlAccess functions diff --git a/fpicker/source/win32/filepicker/FilePicker.cxx b/fpicker/source/win32/filepicker/FilePicker.cxx index fda664a..d80c740 100644 --- a/fpicker/source/win32/filepicker/FilePicker.cxx +++ b/fpicker/source/win32/filepicker/FilePicker.cxx @@ -372,7 +372,7 @@ uno::Sequence<OUString> SAL_CALL CFilePicker::getFiles() throw(uno::RuntimeExcep -uno::Sequence< OUString > SAL_CALL CFilePicker::getSelectedFiles() throw (uno::RuntimeException) +uno::Sequence< OUString > SAL_CALL CFilePicker::getSelectedFiles() throw (uno::RuntimeException, std::exception) { OSL_ASSERT(0 != m_pImpl.get()); osl::MutexGuard aGuard(m_aMutex); diff --git a/fpicker/source/win32/filepicker/FilePicker.hxx b/fpicker/source/win32/filepicker/FilePicker.hxx index 0ba7214..c623152 100644 --- a/fpicker/source/win32/filepicker/FilePicker.hxx +++ b/fpicker/source/win32/filepicker/FilePicker.hxx @@ -25,7 +25,6 @@ #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/ui/dialogs/XFilePicker2.hpp> #include <com/sun/star/ui/dialogs/XFilePicker3.hpp> #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> #include <com/sun/star/ui/dialogs/XFilePreview.hpp> @@ -46,7 +45,6 @@ protected: }; typedef ::cppu::WeakComponentImplHelper < - ::com::sun::star::ui::dialogs::XFilePicker2, ::com::sun::star::ui::dialogs::XFilePicker3, ::com::sun::star::ui::dialogs::XFilePickerControlAccess, ::com::sun::star::ui::dialogs::XFilePreview, @@ -97,7 +95,7 @@ public: // XFilePicker2 functions virtual ::com::sun::star::uno::Sequence< OUString > SAL_CALL getSelectedFiles( ) - throw (::com::sun::star::uno::RuntimeException); + throw (::com::sun::star::uno::RuntimeException, std::exception); // XFilterManager functions diff --git a/fpicker/source/win32/filepicker/VistaFilePicker.cxx b/fpicker/source/win32/filepicker/VistaFilePicker.cxx index 2411c74..4970b4e 100644 --- a/fpicker/source/win32/filepicker/VistaFilePicker.cxx +++ b/fpicker/source/win32/filepicker/VistaFilePicker.cxx @@ -256,12 +256,7 @@ OUString SAL_CALL VistaFilePicker::getDisplayDirectory() css::uno::Sequence< OUString > SAL_CALL VistaFilePicker::getFiles() throw(css::uno::RuntimeException) { - RequestRef rRequest(new Request()); - rRequest->setRequest (VistaFilePickerImpl::E_GET_SELECTED_FILES); - - m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::BLOCKED); - - css::uno::Sequence< OUString > lFiles = rRequest->getArgumentOrDefault(PROP_SELECTED_FILES, css::uno::Sequence< OUString >()); + css::uno::Sequence< OUString > lFiles = getSelectedFiles(); // multiselection doesn't really work // so just retrieve the first url if (lFiles.getLength() > 1) @@ -272,7 +267,7 @@ css::uno::Sequence< OUString > SAL_CALL VistaFilePicker::getFiles() css::uno::Sequence< OUString > SAL_CALL VistaFilePicker::getSelectedFiles() - throw(css::uno::RuntimeException) + throw(css::uno::RuntimeException, std::exception) { RequestRef rRequest(new Request()); rRequest->setRequest (VistaFilePickerImpl::E_GET_SELECTED_FILES); diff --git a/fpicker/source/win32/filepicker/VistaFilePicker.hxx b/fpicker/source/win32/filepicker/VistaFilePicker.hxx index f133303..01b6da3 100644 --- a/fpicker/source/win32/filepicker/VistaFilePicker.hxx +++ b/fpicker/source/win32/filepicker/VistaFilePicker.hxx @@ -27,7 +27,6 @@ #include <com/sun/star/lang/XInitialization.hpp> #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XMultiServiceFactory.hpp> -#include <com/sun/star/ui/dialogs/XFilePicker2.hpp> #include <com/sun/star/ui/dialogs/XFilePicker3.hpp> #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> #include <com/sun/star/ui/dialogs/XFilePreview.hpp> @@ -45,7 +44,6 @@ namespace vista{ typedef ::cppu::WeakComponentImplHelper< - css::ui::dialogs::XFilePicker2, css::ui::dialogs::XFilePicker3, css::ui::dialogs::XFilePickerControlAccess, css::ui::dialogs::XFilePreview, @@ -112,12 +110,9 @@ public: virtual css::uno::Sequence< OUString > SAL_CALL getFiles( ) throw( css::uno::RuntimeException ); - // XFilePicker2 functions - - virtual css::uno::Sequence< OUString > SAL_CALL getSelectedFiles( ) - throw( css::uno::RuntimeException ); + throw( css::uno::RuntimeException, std::exception ); // XFilterManager functions diff --git a/offapi/com/sun/star/ui/dialogs/XFilePicker2.idl b/offapi/com/sun/star/ui/dialogs/XFilePicker2.idl index 91189a6..b04517f 100644 --- a/offapi/com/sun/star/ui/dialogs/XFilePicker2.idl +++ b/offapi/com/sun/star/ui/dialogs/XFilePicker2.idl @@ -27,7 +27,7 @@ module com { module sun { module star { module ui { module dialogs { /** extends file picker interface to workaround some design problems. */ -interface XFilePicker2 : ::com::sun::star::ui::dialogs::XFilePicker +published interface XFilePicker2 : ::com::sun::star::ui::dialogs::XFilePicker { /** Returns a sequence of the selected files including path information in URL format, conforming to <a href="http://www.w3.org/Addressing/rfc1738.txt">Rfc1738</a>. diff --git a/offapi/com/sun/star/ui/dialogs/XFilePicker3.idl b/offapi/com/sun/star/ui/dialogs/XFilePicker3.idl index c33e8eb..d2ee0e2 100644 --- a/offapi/com/sun/star/ui/dialogs/XFilePicker3.idl +++ b/offapi/com/sun/star/ui/dialogs/XFilePicker3.idl @@ -22,7 +22,7 @@ #include <com/sun/star/lang/XComponent.idl> #include <com/sun/star/util/XCancellable.idl> -#include <com/sun/star/ui/dialogs/XFilePicker.idl> +#include <com/sun/star/ui/dialogs/XFilePicker2.idl> #include <com/sun/star/ui/dialogs/XFilePickerNotifier.idl> #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.idl> #include <com/sun/star/ui/dialogs/XFilterManager.idl> @@ -40,7 +40,7 @@ module com { module sun { module star { module ui { module dialogs { */ published interface XFilePicker3 { - interface XFilePicker; + interface XFilePicker2; /** Provides the ability to request notifications about changes. */ diff --git a/offapi/type_reference/offapi.idl b/offapi/type_reference/offapi.idl index f95e6b7..c4bd5c4 100644 --- a/offapi/type_reference/offapi.idl +++ b/offapi/type_reference/offapi.idl @@ -16956,8 +16956,12 @@ module com { void setCurrentFilter([in] string aTitle) raises (::com::sun::star::lang::IllegalArgumentException); string getCurrentFilter(); }; - published interface XFilePicker3 { + published interface XFilePicker2 { interface ::com::sun::star::ui::dialogs::XFilePicker; + sequence< string > getSelectedFiles(); + }; + published interface XFilePicker3 { + interface ::com::sun::star::ui::dialogs::XFilePicker2; interface ::com::sun::star::ui::dialogs::XFilePickerNotifier; interface ::com::sun::star::ui::dialogs::XFilterManager; interface ::com::sun::star::ui::dialogs::XFilterGroupManager; diff --git a/vcl/unx/gtk/fpicker/SalGtkFilePicker.hxx b/vcl/unx/gtk/fpicker/SalGtkFilePicker.hxx index 1830f21..e55d2d2 100644 --- a/vcl/unx/gtk/fpicker/SalGtkFilePicker.hxx +++ b/vcl/unx/gtk/fpicker/SalGtkFilePicker.hxx @@ -48,7 +48,6 @@ typedef ::com::sun::star::uno::Sequence< UnoFilterEntry > UnoFilterList; // c typedef cppu::WeakComponentImplHelper< ::com::sun::star::ui::dialogs::XFilePickerControlAccess, ::com::sun::star::ui::dialogs::XFilePreview, - ::com::sun::star::ui::dialogs::XFilePicker2, ::com::sun::star::ui::dialogs::XFilePicker3, ::com::sun::star::lang::XInitialization > SalGtkFilePicker_Base; diff --git a/vcl/unx/kde4/KDE4FilePicker.hxx b/vcl/unx/kde4/KDE4FilePicker.hxx index c29f4d8..186e57a 100644 --- a/vcl/unx/kde4/KDE4FilePicker.hxx +++ b/vcl/unx/kde4/KDE4FilePicker.hxx @@ -23,7 +23,6 @@ #include <com/sun/star/lang/XServiceInfo.hpp> #include <com/sun/star/lang/XInitialization.hpp> -#include <com/sun/star/ui/dialogs/XFilePicker2.hpp> #include <com/sun/star/ui/dialogs/XFilePicker3.hpp> #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp> #include <com/sun/star/uno/XComponentContext.hpp> @@ -42,8 +41,7 @@ class QWidget; class QLayout; typedef ::cppu::WeakComponentImplHelper -< ::com::sun::star::ui::dialogs::XFilePicker2 -, ::com::sun::star::ui::dialogs::XFilePicker3 +< ::com::sun::star::ui::dialogs::XFilePicker3 , ::com::sun::star::ui::dialogs::XFilePickerControlAccess // TODO ::com::sun::star::ui::dialogs::XFilePreview , ::com::sun::star::lang::XInitialization _______________________________________________ Libreoffice-commits mailing list [email protected] http://lists.freedesktop.org/mailman/listinfo/libreoffice-commits
