summaryrefslogtreecommitdiffstats
path: root/fpicker
diff options
context:
space:
mode:
authorCarsten Driesner <cd@openoffice.org>2011-03-18 09:55:33 +0100
committerCarsten Driesner <cd@openoffice.org>2011-03-18 09:55:33 +0100
commite9e5d2cae62465c44defcc015f873849fdcf5a44 (patch)
tree2423e26ec035190bf5b0e580f558d6fa134a2a99 /fpicker
parent#i116487# Adjust copyright date to 2011 (diff)
downloadcore-e9e5d2cae62465c44defcc015f873849fdcf5a44.tar.gz
core-e9e5d2cae62465c44defcc015f873849fdcf5a44.zip
fwk167: #i93666# Added separators to the new Vista/7 file dialog
Diffstat (limited to 'fpicker')
-rw-r--r--fpicker/source/win32/filepicker/IVistaFilePickerInternalNotify.hxx2
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePicker.cxx16
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePickerEventHandler.cxx52
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx53
-rw-r--r--fpicker/source/win32/filepicker/VistaFilePickerImpl.hxx12
-rw-r--r--fpicker/source/win32/filepicker/platform_vista.h27
6 files changed, 78 insertions, 84 deletions
diff --git a/fpicker/source/win32/filepicker/IVistaFilePickerInternalNotify.hxx b/fpicker/source/win32/filepicker/IVistaFilePickerInternalNotify.hxx
index 8f4e0d040f3e..d47c21c40cb2 100644
--- a/fpicker/source/win32/filepicker/IVistaFilePickerInternalNotify.hxx
+++ b/fpicker/source/win32/filepicker/IVistaFilePickerInternalNotify.hxx
@@ -66,6 +66,8 @@ class IVistaFilePickerInternalNotify
public:
virtual void onAutoExtensionChanged (bool bChecked) = 0;
+
+ virtual bool onFileTypeChanged( UINT nTypeIndex ) = 0;
};
}}}
diff --git a/fpicker/source/win32/filepicker/VistaFilePicker.cxx b/fpicker/source/win32/filepicker/VistaFilePicker.cxx
index 14b185ee2688..f150120e132f 100644
--- a/fpicker/source/win32/filepicker/VistaFilePicker.cxx
+++ b/fpicker/source/win32/filepicker/VistaFilePicker.cxx
@@ -224,7 +224,7 @@ void SAL_CALL VistaFilePicker::setTitle(const ::rtl::OUString& sTitle)
//-----------------------------------------------------------------------------------------
void SAL_CALL VistaFilePicker::appendFilter(const ::rtl::OUString& sTitle ,
- const ::rtl::OUString& sFilter)
+ const ::rtl::OUString& sFilter)
throw(css::lang::IllegalArgumentException,
css::uno::RuntimeException )
{
@@ -263,17 +263,15 @@ void SAL_CALL VistaFilePicker::setCurrentFilter(const ::rtl::OUString& sTitle)
//-----------------------------------------------------------------------------------------
void SAL_CALL VistaFilePicker::appendFilterGroup(const ::rtl::OUString& /*sGroupTitle*/,
- const css::uno::Sequence< css::beans::StringPair >& lFilters )
+ const css::uno::Sequence< css::beans::StringPair >& rFilters )
throw (css::lang::IllegalArgumentException,
css::uno::RuntimeException )
{
- ::sal_Int32 c = lFilters.getLength();
- ::sal_Int32 i = 0;
- for (i=0; i<c; ++i)
- {
- const css::beans::StringPair& rFilter = lFilters[i];
- appendFilter(rFilter.First, rFilter.Second);
- }
+ RequestRef rRequest(new Request());
+ rRequest->setRequest (VistaFilePickerImpl::E_APPEND_FILTERGROUP);
+ rRequest->setArgument(PROP_FILTER_GROUP, rFilters);
+
+ m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
}
//-----------------------------------------------------------------------------------------
diff --git a/fpicker/source/win32/filepicker/VistaFilePickerEventHandler.cxx b/fpicker/source/win32/filepicker/VistaFilePickerEventHandler.cxx
index 2fadaa6bfdff..f399c55de694 100644
--- a/fpicker/source/win32/filepicker/VistaFilePickerEventHandler.cxx
+++ b/fpicker/source/win32/filepicker/VistaFilePickerEventHandler.cxx
@@ -269,33 +269,16 @@ STDMETHODIMP VistaFilePickerEventHandler::OnShareViolation(IFileDialog*
}
//-----------------------------------------------------------------------------------------
-STDMETHODIMP VistaFilePickerEventHandler::OnTypeChange(IFileDialog* /*pDialog*/)
+STDMETHODIMP VistaFilePickerEventHandler::OnTypeChange(IFileDialog* pDialog)
{
- /*
- IFileDialogCustomize *iCustomize;
- pDialog->QueryInterface(IID_IFileDialogCustomize, (void**)(&iCustomize));
+ UINT nFileTypeIndex;
+ HRESULT hResult = pDialog->GetFileTypeIndex( &nFileTypeIndex );
- BOOL bValue = FALSE;
- HRESULT hResult = iCustomize->GetCheckButtonState( css::ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, &bValue);
-
- if ( bValue )
+ if ( hResult == S_OK )
{
- UINT nIndex;
-
- pDialog->GetFileTypeIndex( &nIndex );
-
- LPCWSTR lpFilterExt = lFilters[nIndex].pszSpec;
-
- lpFilterExt = wcschr( lpFilterExt, '.' );
- if ( lpFilterExt )
- lpFilterExt++;
- pDialog->SetDefaultExtension( lpFilterExt );
+ if ( m_pInternalNotify->onFileTypeChanged( nFileTypeIndex ))
+ impl_sendEvent(E_CONTROL_STATE_CHANGED, css::ui::dialogs::CommonFilePickerElementIds::LISTBOX_FILTER);
}
- return S_OK;
-
- */
-
- impl_sendEvent(E_CONTROL_STATE_CHANGED, css::ui::dialogs::CommonFilePickerElementIds::LISTBOX_FILTER);
return S_OK;
}
@@ -334,32 +317,9 @@ STDMETHODIMP VistaFilePickerEventHandler::OnCheckButtonToggled(IFileDialogCustom
DWORD nIDCtl ,
BOOL bChecked )
{
- /*
- if (nIDCtl == css::ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION)
- {
- LPCWSTR lpFilterExt = 0;
- if ( bChecked )
- {
- UINT nIndex;
- if (m_pDialog)
- {
- m_pDialog->GetFileTypeIndex( &nIndex );
- lpFilterExt = lFilters[nIndex].pszSpec;
- lpFilterExt = wcschr( lpFilterExt, '.' );
- if ( lpFilterExt )
- lpFilterExt++;
- }
- }
-
- if (m_pDialog)
- m_pDialog->SetDefaultExtension( lpFilterExt );
- }
- */
-
if (nIDCtl == css::ui::dialogs::ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION)
m_pInternalNotify->onAutoExtensionChanged(bChecked);
-
impl_sendEvent(E_CONTROL_STATE_CHANGED, static_cast<sal_Int16>( nIDCtl));
return S_OK;
diff --git a/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx b/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx
index 677c2bdbfa7d..97afa038fcab 100644
--- a/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx
+++ b/fpicker/source/win32/filepicker/VistaFilePickerImpl.cxx
@@ -34,6 +34,7 @@
#include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
#include <com/sun/star/ui/dialogs/ControlActions.hpp>
#include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
+#include <com/sun/star/beans/StringPair.hpp>
#include <comphelper/sequenceasvector.hxx>
#include <osl/file.hxx>
#include <osl/mutex.hxx>
@@ -42,6 +43,8 @@
#endif
#include "..\misc\WinImplHelper.hxx"
+#include <Shlguid.h>
+
inline bool is_current_process_window(HWND hwnd)
{
DWORD pid;
@@ -199,6 +202,10 @@ void VistaFilePickerImpl::doRequest(const RequestRef& rRequest)
impl_sta_appendFilter(rRequest);
break;
+ case E_APPEND_FILTERGROUP :
+ impl_sta_appendFilterGroup(rRequest);
+ break;
+
case E_SET_CURRENT_FILTER :
impl_sta_setCurrentFilter(rRequest);
break;
@@ -331,6 +338,28 @@ void VistaFilePickerImpl::impl_sta_appendFilter(const RequestRef& rRequest)
}
//-------------------------------------------------------------------------------
+void VistaFilePickerImpl::impl_sta_appendFilterGroup(const RequestRef& rRequest)
+{
+ const css::uno::Sequence< css::beans::StringPair > aFilterGroup =
+ rRequest->getArgumentOrDefault(PROP_FILTER_GROUP, css::uno::Sequence< css::beans::StringPair >());
+
+ // SYNCHRONIZED->
+ ::rtl::OUString aEmpty;
+ ::osl::ResettableMutexGuard aLock(m_aMutex);
+
+ if ( m_lFilters.numFilter() > 0 && aFilterGroup.getLength() > 0 )
+ m_lFilters.addFilter( STRING_SEPARATOR, aEmpty, sal_True );
+
+ ::sal_Int32 c = aFilterGroup.getLength();
+ ::sal_Int32 i = 0;
+ for (i=0; i<c; ++i)
+ {
+ const css::beans::StringPair& rFilter = aFilterGroup[i];
+ m_lFilters.addFilter(rFilter.First, rFilter.Second);
+ }
+}
+
+//-------------------------------------------------------------------------------
void VistaFilePickerImpl::impl_sta_setCurrentFilter(const RequestRef& rRequest)
{
const ::rtl::OUString sTitle = rRequest->getArgumentOrDefault(PROP_FILTER_TITLE, ::rtl::OUString());
@@ -941,7 +970,7 @@ void VistaFilePickerImpl::impl_sta_ShowDialogModal(const RequestRef& rRequest)
return;
impl_sta_getSelectedFiles(rRequest);
- rRequest->setArgument(PROP_DIALOG_SHOW_RESULT, (::sal_Bool)sal_True);
+ rRequest->setArgument(PROP_DIALOG_SHOW_RESULT, sal_True);
}
//-------------------------------------------------------------------------------
@@ -1179,6 +1208,23 @@ void VistaFilePickerImpl::impl_SetDefaultExtension( const rtl::OUString& current
}
}
+static void impl_refreshFileDialog( TFileDialog iDialog )
+{
+ if ( SUCCEEDED(iDialog->SetFileName(L"")) &&
+ SUCCEEDED(iDialog->SetFileName(L"*.*")) )
+ {
+ IOleWindow* iOleWindow;
+ if (SUCCEEDED(iDialog->QueryInterface(IID_PPV_ARGS(&iOleWindow))))
+ {
+ HWND hwnd;
+ if (SUCCEEDED(iOleWindow->GetWindow(&hwnd)))
+ {
+ PostMessage(hwnd, WM_COMMAND, IDOK, 0);
+ }
+ iOleWindow->Release();
+ }
+ }
+}
//-------------------------------------------------------------------------------
void VistaFilePickerImpl::onAutoExtensionChanged (bool bChecked)
@@ -1207,6 +1253,11 @@ void VistaFilePickerImpl::onAutoExtensionChanged (bool bChecked)
iDialog->SetDefaultExtension( pExt );
}
+bool VistaFilePickerImpl::onFileTypeChanged( UINT /*nTypeIndex*/ )
+{
+ return true;
+}
+
} // namespace vista
} // namespace win32
} // namespace fpicker
diff --git a/fpicker/source/win32/filepicker/VistaFilePickerImpl.hxx b/fpicker/source/win32/filepicker/VistaFilePickerImpl.hxx
index 6be17935609b..201ed9f1764d 100644
--- a/fpicker/source/win32/filepicker/VistaFilePickerImpl.hxx
+++ b/fpicker/source/win32/filepicker/VistaFilePickerImpl.hxx
@@ -104,12 +104,14 @@ static const ::rtl::OUString PROP_TEMPLATE_DESCR = ::rtl::OUString::createF
static const ::rtl::OUString PROP_FILTER_TITLE = ::rtl::OUString::createFromAscii("filter_title" ); // [OUString]
static const ::rtl::OUString PROP_FILTER_VALUE = ::rtl::OUString::createFromAscii("filter_value" ); // [OUString]
static const ::rtl::OUString PROP_FORCE = ::rtl::OUString::createFromAscii("force" ); // [sal_Bool]
+static const ::rtl::OUString PROP_FILTER_GROUP = ::rtl::OUString::createFromAscii("filter_group" ); // [seq< css:beans::StringPair >] contains a group of filters
static const ::rtl::OUString PROP_CONTROL_ID = ::rtl::OUString::createFromAscii("control_id" ); // [sal_Int16]
static const ::rtl::OUString PROP_CONTROL_ACTION = ::rtl::OUString::createFromAscii("control_action" ); // [sal_Int16]
static const ::rtl::OUString PROP_CONTROL_VALUE = ::rtl::OUString::createFromAscii("control_value" ); // [Any]
static const ::rtl::OUString PROP_CONTROL_LABEL = ::rtl::OUString::createFromAscii("control_label" ); // [OUString]
static const ::rtl::OUString PROP_CONTROL_ENABLE = ::rtl::OUString::createFromAscii("control_enable" ); // [sal_Bool] true=ON, false=OFF
+static const ::rtl::OUString STRING_SEPARATOR = ::rtl::OUString::createFromAscii("------------------------------------------" );
//-----------------------------------------------------------------------------
/** native implementation of the file picker on Vista and upcoming windows versions.
@@ -149,7 +151,8 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
E_GET_CONTROL_VALUE,
E_SET_CONTROL_LABEL,
E_GET_CONTROL_LABEL,
- E_ENABLE_CONTROL
+ E_ENABLE_CONTROL,
+ E_APPEND_FILTERGROUP
};
public:
@@ -169,7 +172,10 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
virtual void after();
//---------------------------------------------------------------------
+ // IVistaFilePickerInternalNotify
+ //---------------------------------------------------------------------
virtual void onAutoExtensionChanged (bool bChecked);
+ virtual bool onFileTypeChanged( UINT nTypeIndex );
private:
@@ -186,6 +192,10 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
void impl_sta_appendFilter(const RequestRef& rRequest);
//---------------------------------------------------------------------
+ /// implementation of request E_APPEND_FILTERGROUP
+ void impl_sta_appendFilterGroup(const RequestRef& rRequest);
+
+ //---------------------------------------------------------------------
/// implementation of request E_SET_CURRENT_FILTER
void impl_sta_setCurrentFilter(const RequestRef& rRequest);
diff --git a/fpicker/source/win32/filepicker/platform_vista.h b/fpicker/source/win32/filepicker/platform_vista.h
index e8812909f757..553ff811ef5e 100644
--- a/fpicker/source/win32/filepicker/platform_vista.h
+++ b/fpicker/source/win32/filepicker/platform_vista.h
@@ -47,32 +47,6 @@
#pragma warning(pop)
#endif
-// ATL/WTL
-//#include <atlbase.h>
-//#include <atlstr.h>
-//#include <atlapp.h>
-//extern CAppModule _Module;
-//#include <atlcom.h>
-//#include <atlwin.h>
-//#include <atlframe.h>
-//#include <atlcrack.h>
-//#include <atlctrls.h>
-//#include <atlctrlx.h>
-//#include <atldlgs.h>
-//#include <atlmisc.h>
-
-/*
-// STL
-#include <vector>
-
-// Global functions
-LPCTSTR PrepFilterString ( CString& sFilters );
-bool PathFromShellItem ( IShellItem* pItem, CString& sPath );
-bool BuildFilterSpecList ( _U_STRINGorID szFilterList,
- std::vector<CString>& vecsFilterParts,
- std::vector<COMDLG_FILTERSPEC>& vecFilters );
-*/
-
#if defined _M_IX86
#pragma comment(linker, "/manifestdependency:\"type='win32' name='Microsoft.Windows.Common-Controls' version='6.0.0.0' processorArchitecture='x86' publicKeyToken='6595b64144ccf1df' language='*'\"")
#elif defined _M_IA64
@@ -84,4 +58,3 @@ bool BuildFilterSpecList ( _U_STRINGorID szFilterList,
#endif
#endif
-