Kaydet (Commit) 704e8f6e authored tarafından Caolán McNamara's avatar Caolán McNamara

#i113141# show all appropiate formats by default on save as

üst 311325ee
...@@ -314,5 +314,10 @@ String STR_SVT_NOREMOVABLEDEVICE ...@@ -314,5 +314,10 @@ String STR_SVT_NOREMOVABLEDEVICE
Text [ en-US ] = "No removable storage device detected.\nMake sure it is plugged in properly and try again." ; Text [ en-US ] = "No removable storage device detected.\nMake sure it is plugged in properly and try again." ;
}; };
String STR_SVT_ALLFORMATS
{
Text [ en-US ] = "All Formats" ;
};
//******************************************************************** EOF //******************************************************************** EOF
...@@ -52,6 +52,7 @@ ...@@ -52,6 +52,7 @@
#include <iostream> #include <iostream>
#include <algorithm> #include <algorithm>
#include <set>
#include "resourceprovider.hxx" #include "resourceprovider.hxx"
#include <tools/rc.hxx> #include <tools/rc.hxx>
...@@ -179,6 +180,7 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact ...@@ -179,6 +180,7 @@ SalGtkFilePicker::SalGtkFilePicker( const uno::Reference<lang::XMultiServiceFact
mbPreviewState( sal_False ), mbPreviewState( sal_False ),
mHID_Preview( 0 ), mHID_Preview( 0 ),
m_pPreview( NULL ), m_pPreview( NULL ),
m_pPseudoFilter( NULL ),
m_PreviewImageWidth( 256 ), m_PreviewImageWidth( 256 ),
m_PreviewImageHeight( 256 ) m_PreviewImageHeight( 256 )
{ {
...@@ -690,7 +692,7 @@ void SalGtkFilePicker::ensureFilterList( const ::rtl::OUString& _rInitialCurrent ...@@ -690,7 +692,7 @@ void SalGtkFilePicker::ensureFilterList( const ::rtl::OUString& _rInitialCurrent
m_pFilterList = new FilterList; m_pFilterList = new FilterList;
// set the first filter to the current filter // set the first filter to the current filter
if( ( !m_aCurrentFilter ) || ( !m_aCurrentFilter.getLength() ) ) if ( !m_aCurrentFilter.getLength() )
m_aCurrentFilter = _rInitialCurrentFilter; m_aCurrentFilter = _rInitialCurrentFilter;
} }
} }
...@@ -713,7 +715,6 @@ void SAL_CALL SalGtkFilePicker::appendFilter( const rtl::OUString& aTitle, const ...@@ -713,7 +715,6 @@ void SAL_CALL SalGtkFilePicker::appendFilter( const rtl::OUString& aTitle, const
// append the filter // append the filter
m_pFilterList->insert( m_pFilterList->end(), FilterEntry( aTitle, aFilter ) ); m_pFilterList->insert( m_pFilterList->end(), FilterEntry( aTitle, aFilter ) );
// implAddFilter( aTitle, aFilter );
} }
//----------------------------------------------------------------------------------------- //-----------------------------------------------------------------------------------------
...@@ -780,7 +781,10 @@ void SalGtkFilePicker::UpdateFilterfromUI() ...@@ -780,7 +781,10 @@ void SalGtkFilePicker::UpdateFilterfromUI()
} }
else if( GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(m_pDialog))) else if( GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(m_pDialog)))
{ {
updateCurrentFilterFromName(gtk_file_filter_get_name( filter )); if (m_pPseudoFilter != filter)
updateCurrentFilterFromName(gtk_file_filter_get_name( filter ));
else
updateCurrentFilterFromName(OUStringToOString( m_aInitialFilter, RTL_TEXTENCODING_UTF8 ).getStr());
} }
} }
...@@ -948,9 +952,14 @@ uno::Sequence<rtl::OUString> SAL_CALL SalGtkFilePicker::getSelectedFiles() throw ...@@ -948,9 +952,14 @@ uno::Sequence<rtl::OUString> SAL_CALL SalGtkFilePicker::getSelectedFiles() throw
} }
} }
const gchar* filtername = GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(m_pDialog));
gtk_file_filter_get_name( gtk_file_chooser_get_filter( GTK_FILE_CHOOSER( m_pDialog ) ) ); if (m_pPseudoFilter != filter)
sFilterName = OUString( filtername, strlen( filtername ), RTL_TEXTENCODING_UTF8 ); {
const gchar* filtername = gtk_file_filter_get_name( filter );
sFilterName = OUString( filtername, strlen( filtername ), RTL_TEXTENCODING_UTF8 );
}
else
sFilterName = m_aInitialFilter;
} }
OSL_TRACE( "2: current filter is %s\n", OSL_TRACE( "2: current filter is %s\n",
...@@ -1915,7 +1924,7 @@ case_insensitive_filter (const GtkFileFilterInfo *filter_info, gpointer data) ...@@ -1915,7 +1924,7 @@ case_insensitive_filter (const GtkFileFilterInfo *filter_info, gpointer data)
} }
} }
int SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rType ) GtkFileFilter* SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rType )
{ {
GdkThreadLock aLock; GdkThreadLock aLock;
...@@ -1966,7 +1975,6 @@ int SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rT ...@@ -1966,7 +1975,6 @@ int SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rT
gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( m_pDialog ), filter ); gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( m_pDialog ), filter );
int nAdded = 0;
if (!bAllGlob) if (!bAllGlob)
{ {
GtkTreeIter iter; GtkTreeIter iter;
...@@ -1977,30 +1985,67 @@ int SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rT ...@@ -1977,30 +1985,67 @@ int SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rT
2, aFilterName.getStr(), 2, aFilterName.getStr(),
3, OUStringToOString(rType, RTL_TEXTENCODING_UTF8).getStr(), 3, OUStringToOString(rType, RTL_TEXTENCODING_UTF8).getStr(),
-1); -1);
nAdded = 1;
} }
return nAdded; return filter;
} }
int SalGtkFilePicker::implAddFilterGroup( const OUString& /*_rFilter*/, const Sequence< StringPair >& _rFilters ) void SalGtkFilePicker::implAddFilterGroup( const OUString& /*_rFilter*/, const Sequence< StringPair >& _rFilters )
{ {
// Gtk+ has no filter group concept I think so ... // Gtk+ has no filter group concept I think so ...
// implAddFilter( _rFilter, String() ); // implAddFilter( _rFilter, String() );
int nAdded = 0;
const StringPair* pSubFilters = _rFilters.getConstArray(); const StringPair* pSubFilters = _rFilters.getConstArray();
const StringPair* pSubFiltersEnd = pSubFilters + _rFilters.getLength(); const StringPair* pSubFiltersEnd = pSubFilters + _rFilters.getLength();
for( ; pSubFilters != pSubFiltersEnd; ++pSubFilters ) for( ; pSubFilters != pSubFiltersEnd; ++pSubFilters )
nAdded += implAddFilter( pSubFilters->First, pSubFilters->Second ); implAddFilter( pSubFilters->First, pSubFilters->Second );
return nAdded;
} }
void SalGtkFilePicker::SetFilters() void SalGtkFilePicker::SetFilters()
{ {
OSL_TRACE( "start setting filters\n");
GdkThreadLock aLock; GdkThreadLock aLock;
int nAdded = 0; if (!m_aInitialFilter.getLength())
m_aInitialFilter = m_aCurrentFilter;
rtl::OUString sPseudoFilter;
if( GTK_FILE_CHOOSER_ACTION_SAVE == gtk_file_chooser_get_action( GTK_FILE_CHOOSER( m_pDialog ) ) )
{
std::set<OUString> aAllFormats;
if( m_pFilterList && !m_pFilterList->empty() )
{
for ( FilterList::iterator aListIter = m_pFilterList->begin();
aListIter != m_pFilterList->end();
++aListIter
)
{
if( aListIter->hasSubFilters() )
{ // it's a filter group
UnoFilterList aSubFilters;
aListIter->getSubFilters( aSubFilters );
const StringPair* pSubFilters = aSubFilters.getConstArray();
const StringPair* pSubFiltersEnd = pSubFilters + aSubFilters.getLength();
for( ; pSubFilters != pSubFiltersEnd; ++pSubFilters )
aAllFormats.insert(pSubFilters->Second);
}
else
aAllFormats.insert(aListIter->getFilter());
}
}
if (aAllFormats.size() > 1)
{
rtl::OUString sAllFilter;
std::set<OUString>::const_iterator aEnd = aAllFormats.end();
for (std::set<OUString>::const_iterator aIter = aAllFormats.begin(); aIter != aEnd; ++aIter)
{
if (sAllFilter.getLength())
sAllFilter += OUString(sal_Unicode(';'));
sAllFilter += *aIter;
}
CResourceProvider aResProvider;
sPseudoFilter = aResProvider.getResString(FILE_PICKER_ALLFORMATS);
m_pPseudoFilter = implAddFilter( sPseudoFilter, sAllFilter );
}
}
if( m_pFilterList && !m_pFilterList->empty() ) if( m_pFilterList && !m_pFilterList->empty() )
{ {
for ( FilterList::iterator aListIter = m_pFilterList->begin(); for ( FilterList::iterator aListIter = m_pFilterList->begin();
...@@ -2014,30 +2059,27 @@ void SalGtkFilePicker::SetFilters() ...@@ -2014,30 +2059,27 @@ void SalGtkFilePicker::SetFilters()
UnoFilterList aSubFilters; UnoFilterList aSubFilters;
aListIter->getSubFilters( aSubFilters ); aListIter->getSubFilters( aSubFilters );
nAdded += implAddFilterGroup( aListIter->getTitle(), aSubFilters ); implAddFilterGroup( aListIter->getTitle(), aSubFilters );
} }
else else
{ {
// it's a single filter // it's a single filter
nAdded += implAddFilter( aListIter->getTitle(), aListIter->getFilter() ); implAddFilter( aListIter->getTitle(), aListIter->getFilter() );
} }
} }
} }
if (nAdded) if (gtk_tree_model_iter_n_children(GTK_TREE_MODEL(m_pFilterStore), NULL)) //If m_pFilterStore is not empty
gtk_widget_show( m_pFilterExpander ); gtk_widget_show( m_pFilterExpander );
else else
gtk_widget_hide( m_pFilterExpander ); gtk_widget_hide( m_pFilterExpander );
// set the default filter // set the default filter
if( m_aCurrentFilter && (m_aCurrentFilter.getLength() > 0) ) if (sPseudoFilter.getLength())
{ SetCurFilter( sPseudoFilter );
OSL_TRACE( "Setting current filter to %s\n", else if(m_aCurrentFilter.getLength())
OUStringToOString( m_aCurrentFilter, RTL_TEXTENCODING_UTF8 ).getStr() );
SetCurFilter( m_aCurrentFilter ); SetCurFilter( m_aCurrentFilter );
}
OSL_TRACE( "end setting filters\n"); OSL_TRACE( "end setting filters\n");
} }
......
...@@ -310,11 +310,13 @@ class SalGtkFilePicker : ...@@ -310,11 +310,13 @@ class SalGtkFilePicker :
gulong mnHID_SelectionChange; gulong mnHID_SelectionChange;
::rtl::OUString m_aCurrentFilter; ::rtl::OUString m_aCurrentFilter;
::rtl::OUString m_aInitialFilter;
bool bVersionWidthUnset; bool bVersionWidthUnset;
sal_Bool mbPreviewState; sal_Bool mbPreviewState;
gulong mHID_Preview; gulong mHID_Preview;
GtkWidget* m_pPreview; GtkWidget* m_pPreview;
GtkFileFilter* m_pPseudoFilter;
sal_Int32 m_PreviewImageWidth; sal_Int32 m_PreviewImageWidth;
sal_Int32 m_PreviewImageHeight; sal_Int32 m_PreviewImageHeight;
...@@ -325,8 +327,8 @@ class SalGtkFilePicker : ...@@ -325,8 +327,8 @@ class SalGtkFilePicker :
void UpdateFilterfromUI(); void UpdateFilterfromUI();
void implChangeType( GtkTreeSelection *selection ); void implChangeType( GtkTreeSelection *selection );
int implAddFilter( const OUString& rFilter, const OUString& rType); GtkFileFilter * implAddFilter( const OUString& rFilter, const OUString& rType );
int implAddFilterGroup( const OUString& rFilter, void implAddFilterGroup( const OUString& rFilter,
const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair>& _rFilters ); const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair>& _rFilters );
void updateCurrentFilterFromName(const gchar* filtername); void updateCurrentFilterFromName(const gchar* filtername);
void unselect_type(); void unselect_type();
......
...@@ -82,7 +82,8 @@ _Entry CtrlIdToResIdTable[] = { ...@@ -82,7 +82,8 @@ _Entry CtrlIdToResIdTable[] = {
{ CHECKBOX_SELECTION, STR_SVT_FILEPICKER_SELECTION }, { CHECKBOX_SELECTION, STR_SVT_FILEPICKER_SELECTION },
{ FOLDERPICKER_TITLE, STR_SVT_FOLDERPICKER_DEFAULT_TITLE }, { FOLDERPICKER_TITLE, STR_SVT_FOLDERPICKER_DEFAULT_TITLE },
{ FOLDER_PICKER_DEF_DESCRIPTION, STR_SVT_FOLDERPICKER_DEFAULT_DESCRIPTION }, { FOLDER_PICKER_DEF_DESCRIPTION, STR_SVT_FOLDERPICKER_DEFAULT_DESCRIPTION },
{ FILE_PICKER_OVERWRITE, STR_SVT_ALREADYEXISTOVERWRITE } { FILE_PICKER_OVERWRITE, STR_SVT_ALREADYEXISTOVERWRITE },
{ FILE_PICKER_ALLFORMATS, STR_SVT_ALLFORMATS }
}; };
_Entry OtherCtrlIdToResIdTable[] = { _Entry OtherCtrlIdToResIdTable[] = {
......
...@@ -43,6 +43,7 @@ ...@@ -43,6 +43,7 @@
#define FILE_PICKER_TITLE_SAVE 503 #define FILE_PICKER_TITLE_SAVE 503
#define FILE_PICKER_FILE_TYPE 504 #define FILE_PICKER_FILE_TYPE 504
#define FILE_PICKER_OVERWRITE 505 #define FILE_PICKER_OVERWRITE 505
#define FILE_PICKER_ALLFORMATS 506
//------------------------------------------------------------------------ //------------------------------------------------------------------------
// deklarations // deklarations
......
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