summaryrefslogtreecommitdiff
path: root/sd/source/ui/func/fuinsfil.cxx
diff options
context:
space:
mode:
authorKatarina Behrens <Katarina.Behrens@cib.de>2015-04-15 14:50:43 +0200
committerKatarina Behrens <Katarina.Behrens@cib.de>2015-04-15 14:51:59 +0200
commit24d6c704a6a5fb9d0bfbea4156a8d95c27693544 (patch)
treef86b9a4906c3574bfa2d4241a9012bf78efcaa17 /sd/source/ui/func/fuinsfil.cxx
parentfd9f706f2e8b048a83ea002ecb5f525ca3e21f61 (diff)
tdf#62101: Show only file extensions we're able to insert
Change-Id: If8f53ac8af85f15958cd488fb0fd4c37997963c9
Diffstat (limited to 'sd/source/ui/func/fuinsfil.cxx')
-rw-r--r--sd/source/ui/func/fuinsfil.cxx106
1 files changed, 72 insertions, 34 deletions
diff --git a/sd/source/ui/func/fuinsfil.cxx b/sd/source/ui/func/fuinsfil.cxx
index ce6d3e755681..7b554d2f74d7 100644
--- a/sd/source/ui/func/fuinsfil.cxx
+++ b/sd/source/ui/func/fuinsfil.cxx
@@ -69,6 +69,42 @@ using namespace ::com::sun::star::uno;
using namespace ::com::sun::star::ui::dialogs;
using namespace ::com::sun::star;
+typedef ::std::pair< OUString, OUString > FilterDesc;
+
+namespace
+{
+
+OUString lcl_GetExtensionsList ( ::std::vector< FilterDesc > const& rFilterDescList )
+{
+ OUString aExtensions;
+ ::std::vector< FilterDesc >::const_iterator aIter( rFilterDescList.begin() );
+
+ while (aIter != rFilterDescList.end())
+ {
+ OUString sWildcard = (*aIter).second;
+
+ if ( aExtensions.indexOf( sWildcard ) == -1 )
+ {
+ if ( !aExtensions.isEmpty() )
+ aExtensions += ";";
+ aExtensions += sWildcard;
+ }
+
+ ++aIter;
+ }
+
+ return aExtensions;
+}
+
+void lcl_AddFilter ( ::std::vector< FilterDesc >& rFilterDescList,
+ const SfxFilter *pFilter )
+{
+ if (pFilter)
+ rFilterDescList.push_back( ::std::make_pair( pFilter->GetUIName(), pFilter->GetDefaultExtension() ) );
+}
+
+}
+
namespace sd {
TYPEINIT1( FuInsertFile, FuPoor );
@@ -93,10 +129,11 @@ rtl::Reference<FuPoor> FuInsertFile::Create( ViewShell* pViewSh, ::sd::Window* p
void FuInsertFile::DoExecute( SfxRequest& rReq )
{
SfxFilterMatcher& rMatcher = SfxGetpApp()->GetFilterMatcher();
- ::std::vector< OUString > aFilterVector;
+ ::std::vector< FilterDesc > aFilterVector;
+ ::std::vector< OUString > aOtherFilterVector;
const SfxItemSet* pArgs = rReq.GetArgs ();
- FuInsertFile::GetSupportedFilterVector( aFilterVector );
+ FuInsertFile::GetSupportedFilterVector( aOtherFilterVector );
if (!pArgs)
{
@@ -128,72 +165,73 @@ void FuInsertFile::DoExecute( SfxRequest& rReq )
// Get filter for current format
try
{
- OUString aAllSpec( SD_RESSTR( STR_ALL_FILES ) );
-
- xFilterManager->appendFilter( aAllSpec, OUString("*.*") );
- xFilterManager->setCurrentFilter( aAllSpec ); // set default-filter (<All>)
-
// Get main filter
const SfxFilter* pFilter = SfxFilter::GetDefaultFilterFromFactory( aOwnCont );
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
// get template filter
if( mpDoc->GetDocumentType() == DOCUMENT_TYPE_IMPRESS )
pFilter = DrawDocShell::Factory().GetTemplateFilter();
else
pFilter = GraphicDocShell::Factory().GetTemplateFilter();
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
// get cross filter
pFilter = SfxFilter::GetDefaultFilterFromFactory( aOtherCont );
- if( pFilter )
- {
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
- }
+ lcl_AddFilter( aFilterVector, pFilter );
// get Powerpoint filter
OUString aExt = ".ppt";
pFilter = aMatch.GetFilter4Extension( aExt );
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
// Get other draw/impress filters
pFilter = aMatch.GetFilter4ClipBoardId( SotClipboardFormatId::STARIMPRESS_60, SfxFilterFlags::IMPORT, SfxFilterFlags::TEMPLATEPATH );
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
pFilter = aMatch.GetFilter4ClipBoardId( SotClipboardFormatId::STARIMPRESS_60, SfxFilterFlags::TEMPLATEPATH );
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
pFilter = aMatch.GetFilter4ClipBoardId( SotClipboardFormatId::STARDRAW_60, SfxFilterFlags::IMPORT, SfxFilterFlags::TEMPLATEPATH );
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
pFilter = aMatch.GetFilter4ClipBoardId( SotClipboardFormatId::STARDRAW_60, SfxFilterFlags::TEMPLATEPATH );
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
pFilter = aMatch.GetFilter4ClipBoardId( SotClipboardFormatId::STARDRAW, SfxFilterFlags::IMPORT, SfxFilterFlags::TEMPLATEPATH );
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
pFilter = aMatch.GetFilter4ClipBoardId( SotClipboardFormatId::STARDRAW, SfxFilterFlags::TEMPLATEPATH );
- if( pFilter )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ lcl_AddFilter( aFilterVector, pFilter );
// add additional supported filters
- ::std::vector< OUString >::const_iterator aIter( aFilterVector.begin() );
+ ::std::vector< OUString >::const_iterator aOtherIter( aOtherFilterVector.begin() );
- while( aIter != aFilterVector.end() )
+ while( aOtherIter != aOtherFilterVector.end() )
{
- if( ( pFilter = rMatcher.GetFilter4Mime( *aIter ) ) != NULL )
- xFilterManager->appendFilter( pFilter->GetUIName(), pFilter->GetDefaultExtension() );
+ if( ( pFilter = rMatcher.GetFilter4Mime( *aOtherIter ) ) != NULL )
+ lcl_AddFilter( aFilterVector, pFilter );
+ ++aOtherIter;
+ }
+
+ // set default-filter (<All>)
+ OUString aAllSpec( SD_RESSTR( STR_ALL_FILES ) );
+ OUString aExtensions = lcl_GetExtensionsList( aFilterVector );
+ OUString aGUIName = aAllSpec + " (" + aExtensions + ")";
+
+ xFilterManager->appendFilter( aGUIName, aExtensions );
+ xFilterManager->setCurrentFilter( aAllSpec );
+
+ // add filters to filter manager finally
+ ::std::vector< ::std::pair < OUString, OUString > >::const_iterator aIter( aFilterVector.begin() );
+
+ while( aIter != aFilterVector.end() )
+ {
+ xFilterManager->appendFilter( (*aIter).first, (*aIter).second );
++aIter;
}
+
}
catch (const IllegalArgumentException&)
{
@@ -252,7 +290,7 @@ void FuInsertFile::DoExecute( SfxRequest& rReq )
}
else
{
- bool bFound = ( ::std::find( aFilterVector.begin(), aFilterVector.end(), pFilter->GetMimeType() ) != aFilterVector.end() );
+ bool bFound = ( ::std::find( aOtherFilterVector.begin(), aOtherFilterVector.end(), pFilter->GetMimeType() ) != aOtherFilterVector.end() );
if( !bFound &&
( aFilterName.indexOf( "Text" ) != -1 ||
aFilterName.indexOf( "Rich" ) != -1 ||