summaryrefslogtreecommitdiff
path: root/fpicker/source/win32/filepicker/VistaFilePicker.cxx
diff options
context:
space:
mode:
Diffstat (limited to 'fpicker/source/win32/filepicker/VistaFilePicker.cxx')
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePicker.cxx46
1 files changed, 40 insertions, 6 deletions
diff --git a/fpicker/source/win32/filepicker/VistaFilePicker.cxx b/fpicker/source/win32/filepicker/VistaFilePicker.cxx
index c0dde13bda80..17b6a566d8ce 100644
--- a/fpicker/source/win32/filepicker/VistaFilePicker.cxx
+++ b/fpicker/source/win32/filepicker/VistaFilePicker.cxx
@@ -20,6 +20,7 @@
#include "VistaFilePicker.hxx"
#include "../misc/WinImplHelper.hxx"
+#include "FPServiceInfo.hxx"
#include "shared.hxx"
#include <com/sun/star/awt/XWindow.hpp>
@@ -46,20 +47,22 @@ namespace
{
css::uno::Sequence< OUString > VistaFilePicker_getSupportedServiceNames()
{
- css::uno::Sequence< OUString > aRet(2);
+ css::uno::Sequence< OUString > aRet(3);
aRet[0] = "com.sun.star.ui.dialogs.FilePicker";
aRet[1] = "com.sun.star.ui.dialogs.SystemFilePicker";
+ aRet[2] = "com.sun.star.ui.dialogs.SystemFolderPicker";
return aRet;
}
}
-VistaFilePicker::VistaFilePicker(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR)
+VistaFilePicker::VistaFilePicker(const css::uno::Reference< css::lang::XMultiServiceFactory >& xSMGR, bool bFolderPicker)
: TVistaFilePickerBase (m_aMutex )
, m_xSMGR (xSMGR )
, m_rDialog (new VistaFilePickerImpl())
, m_aAsyncExecute (m_rDialog )
, m_nFilePickerThreadId (0 )
, m_bInitialized (false )
+ , m_bFolderPicker (bFolderPicker )
{
}
@@ -233,9 +236,24 @@ void VistaFilePicker::ensureInit()
if ( !bInitialized )
{
- css::uno::Sequence < css::uno::Any > aInitArguments(1);
- aInitArguments[0] <<= css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE;
- initialize(aInitArguments);
+ if (m_bFolderPicker)
+ {
+ RequestRef rRequest(new Request());
+ rRequest->setRequest (VistaFilePickerImpl::E_CREATE_FOLDER_PICKER);
+ if ( ! m_aAsyncExecute.isRunning())
+ m_aAsyncExecute.create();
+ m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
+ {
+ osl::MutexGuard aGuard(m_aMutex);
+ m_bInitialized = true;
+ }
+ }
+ else
+ {
+ css::uno::Sequence < css::uno::Any > aInitArguments(1);
+ aInitArguments[0] <<= css::ui::dialogs::TemplateDescription::FILEOPEN_SIMPLE;
+ initialize(aInitArguments);
+ }
}
}
@@ -507,11 +525,27 @@ void SAL_CALL VistaFilePicker::cancel()
{
}
+OUString SAL_CALL VistaFilePicker::getDirectory()
+{
+ ensureInit();
+ css::uno::Sequence< OUString > aFileSeq = getSelectedFiles();
+ assert(aFileSeq.getLength() <= 1);
+ return aFileSeq.getLength() ? aFileSeq[0] : OUString();
+}
+
+void SAL_CALL VistaFilePicker::setDescription( const OUString& aDescription )
+{
+ setTitle(aDescription);
+}
+
// XServiceInfo
OUString SAL_CALL VistaFilePicker::getImplementationName()
{
- return OUString("com.sun.star.comp.fpicker.VistaFileDialog");
+ if (m_bFolderPicker)
+ return OUString(FOLDER_PICKER_IMPL_NAME);
+ else
+ return OUString(FILE_PICKER_IMPL_NAME);
}
sal_Bool SAL_CALL VistaFilePicker::supportsService(const OUString& sServiceName)