Sophie

Sophie

distrib > Fedora > 13 > i386 > media > updates-src > by-pkgid > cd8ce32c919af60229fca1d7f792c60e > files > 28

openoffice.org-3.2.0-12.35.fc13.src.rpm

diff -ru svtools.orig/inc/svtools/svtools.hrc svtools/inc/svtools/svtools.hrc
--- openoffice.org.orig/svtools/inc/svtools/svtools.hrc	2009-01-14 15:52:54.000000000 +0000
+++ openoffice.org/svtools/inc/svtools/svtools.hrc	2009-01-14 15:53:18.000000000 +0000
@@ -73,6 +73,7 @@
 #define RID_FILEOPEN_INVALIDFOLDER		(RID_SVTOOLS_START + 34)
 #define RID_FILEOPEN_NOTEXISTENTFILE	(RID_SVTOOLS_START + 35)
 #define STR_SVT_NOREMOVABLEDEVICE       (RID_SVTOOLS_START + 36)
+#define STR_SVT_ALLFORMATS				(RID_SVTOOLS_START + 37)
 
 // doc template dialog
 #define DLG_DOCTEMPLATE					(RID_SVTOOLS_START+50)
diff -ru fpicker.orig/source/office/iodlg.src fpicker/source/office/iodlg.src
--- openoffice.org.orig/fpicker/source/office/iodlg.src	2009-01-14 11:56:02.000000000 +0000
+++ openoffice.org/fpicker/source/office/iodlg.src	2009-01-14 15:59:44.000000000 +0000
@@ -317,5 +312,10 @@
     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
 
diff -ru fpicker.orig/source/unx/gnome/resourceprovider.cxx fpicker/source/unx/gnome/resourceprovider.cxx
--- openoffice.org.orig/fpicker/source/unx/gnome/resourceprovider.cxx	2009-01-14 11:56:02.000000000 +0000
+++ openoffice.org/fpicker/source/unx/gnome/resourceprovider.cxx	2009-01-14 15:42:26.000000000 +0000
@@ -85,7 +85,8 @@
     { CHECKBOX_SELECTION,                       STR_SVT_FILEPICKER_SELECTION },
     { FOLDERPICKER_TITLE,                       STR_SVT_FOLDERPICKER_DEFAULT_TITLE },
     { 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[] = {
diff -ru fpicker.orig/source/unx/gnome/resourceprovider.hxx fpicker/source/unx/gnome/resourceprovider.hxx
--- openoffice.org.orig/fpicker/source/unx/gnome/resourceprovider.hxx	2009-01-14 11:56:02.000000000 +0000
+++ openoffice.org/fpicker/source/unx/gnome/resourceprovider.hxx	2009-01-14 15:40:34.000000000 +0000
@@ -48,6 +48,7 @@
 #define FILE_PICKER_TITLE_SAVE        503
 #define FILE_PICKER_FILE_TYPE         504
 #define FILE_PICKER_OVERWRITE         505
+#define FILE_PICKER_ALLFORMATS        506
 
 //------------------------------------------------------------------------
 // deklarations
diff -ru fpicker.orig/source/unx/gnome/SalGtkFilePicker.cxx fpicker/source/unx/gnome/SalGtkFilePicker.cxx
--- openoffice.org.orig/fpicker/source/unx/gnome/SalGtkFilePicker.cxx	2009-01-14 11:56:02.000000000 +0000
+++ openoffice.org/fpicker/source/unx/gnome/SalGtkFilePicker.cxx	2009-01-14 15:42:05.000000000 +0000
@@ -55,6 +55,7 @@
 
 #include <iostream>
 #include <algorithm>
+#include <set>
 #include "resourceprovider.hxx"
 #ifndef _SV_RC_H
 #include <tools/rc.hxx>
@@ -180,6 +181,7 @@
     mbPreviewState( sal_False ),
     mHID_Preview( 0 ),
 	m_pPreview( NULL ),
+    m_pPseudoFilter( NULL ),
 	m_PreviewImageWidth( 256 ),
     m_PreviewImageHeight( 256 )
 {
@@ -689,7 +691,7 @@
 		m_pFilterList = new FilterList;
 
 		// set the first filter to the current filter
-		if( ( !m_aCurrentFilter ) || ( !m_aCurrentFilter.getLength() ) )
+		if ( !m_aCurrentFilter.getLength() )
 			m_aCurrentFilter = _rInitialCurrentFilter;
 	}
 }
@@ -713,7 +715,6 @@
 
 	// append the filter
 	m_pFilterList->insert( m_pFilterList->end(), FilterEntry( aTitle, aFilter ) );
-	// implAddFilter( aTitle, aFilter );
 }
 
 //-----------------------------------------------------------------------------------------
@@ -778,7 +779,10 @@
     }
     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());
     }
 }
 
@@ -945,9 +949,15 @@
                     }
                 }
 
-			    const gchar* filtername = 
-				    gtk_file_filter_get_name( gtk_file_chooser_get_filter( GTK_FILE_CHOOSER( m_pDialog ) ) );
-                sFilterName = OUString( filtername, strlen( filtername ), RTL_TEXTENCODING_UTF8 );
+				GtkFileFilter *filter = gtk_file_chooser_get_filter(GTK_FILE_CHOOSER(m_pDialog));
+        		if (m_pPseudoFilter != filter)
+				{
+			    	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", 
@@ -1904,7 +1914,7 @@
 }
 }
 
-int SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rType )
+GtkFileFilter * SalGtkFilePicker::implAddFilter( const OUString& rFilter, const OUString& rType )
 {
 	GtkFileFilter *filter = gtk_file_filter_new();
 
@@ -1953,7 +1963,6 @@
 
 	gtk_file_chooser_add_filter( GTK_FILE_CHOOSER( m_pDialog ), filter );
 
-    int nAdded = 0;
     if (!bAllGlob)
     {
         GtkTreeIter iter;
@@ -1964,27 +1973,66 @@
             2, aFilterName.getStr(),
             3, OUStringToOString(rType, RTL_TEXTENCODING_UTF8).getStr(),
             -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 ...
 	// implAddFilter( _rFilter, String() );
-    int nAdded = 0;
 	const StringPair* pSubFilters	= _rFilters.getConstArray();
 	const StringPair* pSubFiltersEnd = pSubFilters + _rFilters.getLength();
 	for( ; pSubFilters != pSubFiltersEnd; ++pSubFilters )
-		nAdded += implAddFilter( pSubFilters->First, pSubFilters->Second );
-    return nAdded;
+		implAddFilter( pSubFilters->First, pSubFilters->Second );
 }
 
 void SalGtkFilePicker::SetFilters()
 {
-	OSL_TRACE( "start setting filters\n");
-    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() )
 	{
 		for	(	FilterList::iterator aListIter = m_pFilterList->begin();
@@ -1998,30 +2046,27 @@
 				UnoFilterList aSubFilters;
 				aListIter->getSubFilters( aSubFilters );
 
-				nAdded += implAddFilterGroup( aListIter->getTitle(), aSubFilters );
+				implAddFilterGroup( aListIter->getTitle(), aSubFilters );
 			}
 			else
 			{
 				// 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 );
     else
         gtk_widget_hide( m_pFilterExpander );
 
 	// set the default filter
-	if( m_aCurrentFilter && (m_aCurrentFilter.getLength() > 0) )
-	{
-		OSL_TRACE( "Setting current filter to %s\n", 
-			OUStringToOString( m_aCurrentFilter, RTL_TEXTENCODING_UTF8 ).getStr() );
-
+	if (sPseudoFilter.getLength())
+		SetCurFilter( sPseudoFilter );
+	else if(m_aCurrentFilter.getLength())
 		SetCurFilter( m_aCurrentFilter );
-	}
 
 	OSL_TRACE( "end setting filters\n");
 }
diff -ru fpicker.orig/source/unx/gnome/SalGtkFilePicker.hxx fpicker/source/unx/gnome/SalGtkFilePicker.hxx
--- openoffice.org.orig/fpicker/source/unx/gnome/SalGtkFilePicker.hxx	2009-01-14 11:56:02.000000000 +0000
+++ openoffice.org/fpicker/source/unx/gnome/SalGtkFilePicker.hxx	2009-01-14 15:34:41.000000000 +0000
@@ -317,11 +317,13 @@
         gulong mnHID_SelectionChange;
 
 		::rtl::OUString	m_aCurrentFilter;
+		::rtl::OUString	m_aInitialFilter;
 
         bool bVersionWidthUnset;
         sal_Bool mbPreviewState;
         gulong mHID_Preview;
         GtkWidget* m_pPreview;
+		GtkFileFilter* m_pPseudoFilter;
         sal_Int32 m_PreviewImageWidth;
         sal_Int32 m_PreviewImageHeight;
         
@@ -332,8 +334,8 @@
         void UpdateFilterfromUI();
 
         void implChangeType( GtkTreeSelection *selection );
-		int implAddFilter( const OUString& rFilter, const OUString& rType);
-		int implAddFilterGroup( const OUString& rFilter, 
+		GtkFileFilter * implAddFilter( const OUString& rFilter, const OUString& rType );
+		void implAddFilterGroup( const OUString& rFilter, 
 					 const ::com::sun::star::uno::Sequence< ::com::sun::star::beans::StringPair>& _rFilters );
         void updateCurrentFilterFromName(const gchar* filtername);
         void unselect_type();