Kaydet (Commit) 1b50fa88 authored tarafından Ilhan Yesil's avatar Ilhan Yesil Kaydeden (comit) Thorsten Behrens

tdf#119747 FileSaveDialog: Windows dialog shows only one extension.

A temporary composed list of file types and extension types is build
from the original list and provided to the IFileSaveDialog object,
so that this dialog shows only one extension.

Change-Id: Iae01c3e889ea38034332fc29e4cc397941930ac0
Reviewed-on: https://gerrit.libreoffice.org/60268
Tested-by: Jenkins
Reviewed-by: 's avatarThorsten Behrens <Thorsten.Behrens@CIB.de>
üst afd4f48d
......@@ -119,7 +119,7 @@ void SAL_CALL VistaFilePicker::appendFilter(const OUString& sTitle ,
{
RequestRef rRequest(new Request());
rRequest->setRequest (VistaFilePickerImpl::E_APPEND_FILTER);
rRequest->setArgument(PROP_FILTER_TITLE, sTitle );
rRequest->setArgument(PROP_FILTER_TITLE, sTitle);
rRequest->setArgument(PROP_FILTER_VALUE, sFilter);
m_aAsyncExecute.triggerRequestThreadAware(rRequest, AsyncRequests::NON_BLOCKED);
......
......@@ -360,11 +360,22 @@ void VistaFilePickerImpl::impl_sta_appendFilter(const RequestRef& rRequest)
{
const OUString sTitle = rRequest->getArgumentOrDefault(PROP_FILTER_TITLE, OUString());
const OUString sFilter = rRequest->getArgumentOrDefault(PROP_FILTER_VALUE, OUString());
// SYNCHRONIZED->
::osl::ResettableMutexGuard aLock(m_aMutex);
m_lFilters.addFilter(sTitle, sFilter);
const sal_Int32 idx = sTitle.indexOf("(.");
if (idx > 0)
{
const OUString sTitle_ = sTitle.copy(0, idx);
m_mapRealFilter[sTitle_] = std::make_pair(sTitle, sFilter);
m_lFilters.addFilter(sTitle_, sFilter);
}
else
{
m_mapRealFilter[sTitle] = std::make_pair(sTitle, sFilter);
m_lFilters.addFilter(sTitle, sFilter);
}
}
......@@ -384,7 +395,20 @@ void VistaFilePickerImpl::impl_sta_appendFilterGroup(const RequestRef& rRequest)
for (i=0; i<c; ++i)
{
const css::beans::StringPair& rFilter = aFilterGroup[i];
m_lFilters.addFilter(rFilter.First, rFilter.Second);
const OUString sTitle = rFilter.First;
const OUString sFilter = rFilter.Second;
const sal_Int32 idx = sTitle.indexOf("(.");
if (idx > 0)
{
const OUString sTitle_ = sTitle.copy(0, idx);
m_mapRealFilter[sTitle_] = std::make_pair(sTitle, sFilter);
m_lFilters.addFilter(sTitle_, sFilter);
}
else
{
m_mapRealFilter[sTitle] = std::make_pair(sTitle, sFilter);
m_lFilters.addFilter(sTitle, sFilter);
}
}
}
......@@ -417,10 +441,15 @@ void VistaFilePickerImpl::impl_sta_getCurrentFilter(const RequestRef& rRequest)
OUString sTitle;
::sal_Int32 nRealIndex = (nIndex-1); // COM dialog base on 1 ... filter container on 0 .-)
if (
(nRealIndex >= 0 ) &&
(nRealIndex >= 0) &&
(m_lFilters.getFilter(nRealIndex, sTitle))
)
)
{
if (m_mapRealFilter.find(sTitle) != m_mapRealFilter.end())
sTitle = m_mapRealFilter[sTitle].first;
rRequest->setArgument(PROP_FILTER_TITLE, sTitle);
}
else if ( nRealIndex == -1 ) // Dialog not visible yet
{
sTitle = m_lFilters.getCurrentFilter();
......
......@@ -37,6 +37,7 @@
#include <osl/thread.hxx>
#include <osl/conditn.hxx>
#include <rtl/ustring.hxx>
#include <map>
namespace fpicker{
namespace win32{
......@@ -305,6 +306,7 @@ class VistaFilePickerImpl : private ::cppu::BaseMutex
/// @todo document me
CFilterContainer m_lFilters;
std::map<OUString, std::pair<OUString, OUString>> m_mapRealFilter;
/** help us to handle dialog events and provide them to interested office
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment