1*b1cdbd2cSJim Jagielski /**************************************************************
2*b1cdbd2cSJim Jagielski  *
3*b1cdbd2cSJim Jagielski  * Licensed to the Apache Software Foundation (ASF) under one
4*b1cdbd2cSJim Jagielski  * or more contributor license agreements.  See the NOTICE file
5*b1cdbd2cSJim Jagielski  * distributed with this work for additional information
6*b1cdbd2cSJim Jagielski  * regarding copyright ownership.  The ASF licenses this file
7*b1cdbd2cSJim Jagielski  * to you under the Apache License, Version 2.0 (the
8*b1cdbd2cSJim Jagielski  * "License"); you may not use this file except in compliance
9*b1cdbd2cSJim Jagielski  * with the License.  You may obtain a copy of the License at
10*b1cdbd2cSJim Jagielski  *
11*b1cdbd2cSJim Jagielski  *   http://www.apache.org/licenses/LICENSE-2.0
12*b1cdbd2cSJim Jagielski  *
13*b1cdbd2cSJim Jagielski  * Unless required by applicable law or agreed to in writing,
14*b1cdbd2cSJim Jagielski  * software distributed under the License is distributed on an
15*b1cdbd2cSJim Jagielski  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*b1cdbd2cSJim Jagielski  * KIND, either express or implied.  See the License for the
17*b1cdbd2cSJim Jagielski  * specific language governing permissions and limitations
18*b1cdbd2cSJim Jagielski  * under the License.
19*b1cdbd2cSJim Jagielski  *
20*b1cdbd2cSJim Jagielski  *************************************************************/
21*b1cdbd2cSJim Jagielski 
22*b1cdbd2cSJim Jagielski 
23*b1cdbd2cSJim Jagielski 
24*b1cdbd2cSJim Jagielski // MARKER(update_precomp.py): autogen include statement, do not remove
25*b1cdbd2cSJim Jagielski #include "precompiled_sdext.hxx"
26*b1cdbd2cSJim Jagielski 
27*b1cdbd2cSJim Jagielski #include "configurationaccess.hxx"
28*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XComponentLoader.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XChangesBatch.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/container/XNameContainer.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XMacroExpander.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XSingleServiceFactory.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/resource/XResourceBundleLoader.hpp>
35*b1cdbd2cSJim Jagielski 
36*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
37*b1cdbd2cSJim Jagielski 
38*b1cdbd2cSJim Jagielski #include "minimizer.hrc"
39*b1cdbd2cSJim Jagielski 
40*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
41*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
42*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
43*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
44*b1cdbd2cSJim Jagielski 
45*b1cdbd2cSJim Jagielski using rtl::OUString;
46*b1cdbd2cSJim Jagielski using rtl::OUStringBuffer;
47*b1cdbd2cSJim Jagielski 
48*b1cdbd2cSJim Jagielski 
49*b1cdbd2cSJim Jagielski #include <rtl/instance.hxx>
50*b1cdbd2cSJim Jagielski 
51*b1cdbd2cSJim Jagielski typedef std::map < sal_Int32, rtl::OUString > StringResourceMap;
52*b1cdbd2cSJim Jagielski 
53*b1cdbd2cSJim Jagielski struct StaticResourceMap
54*b1cdbd2cSJim Jagielski     : public rtl::StaticWithInit< StringResourceMap, StaticResourceMap  >
55*b1cdbd2cSJim Jagielski {
56*b1cdbd2cSJim Jagielski     StringResourceMap &
57*b1cdbd2cSJim Jagielski     operator()() const;
58*b1cdbd2cSJim Jagielski };
59*b1cdbd2cSJim Jagielski 
60*b1cdbd2cSJim Jagielski StringResourceMap &
operator ()() const61*b1cdbd2cSJim Jagielski StaticResourceMap::operator()() const
62*b1cdbd2cSJim Jagielski {
63*b1cdbd2cSJim Jagielski     static StringResourceMap aMap;
64*b1cdbd2cSJim Jagielski     return aMap;
65*b1cdbd2cSJim Jagielski }
66*b1cdbd2cSJim Jagielski 
GetConfigurationProviderServiceName(void)67*b1cdbd2cSJim Jagielski static const OUString& GetConfigurationProviderServiceName (void)
68*b1cdbd2cSJim Jagielski {
69*b1cdbd2cSJim Jagielski     static const OUString sConfigurationProviderServiceName (
70*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM(
71*b1cdbd2cSJim Jagielski             "com.sun.star.configuration.ConfigurationProvider"));
72*b1cdbd2cSJim Jagielski     return sConfigurationProviderServiceName;
73*b1cdbd2cSJim Jagielski }
GetPathToConfigurationRoot(void)74*b1cdbd2cSJim Jagielski static const OUString& GetPathToConfigurationRoot (void)
75*b1cdbd2cSJim Jagielski {
76*b1cdbd2cSJim Jagielski     static const OUString sPathToConfigurationRoot (
77*b1cdbd2cSJim Jagielski         RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.Impress/PresentationMinimizer"));
78*b1cdbd2cSJim Jagielski     return sPathToConfigurationRoot;
79*b1cdbd2cSJim Jagielski }
80*b1cdbd2cSJim Jagielski 
lcl_loadString(const Reference<resource::XResourceBundle> xResourceBundle,sal_Int32 nResourceId)81*b1cdbd2cSJim Jagielski static OUString lcl_loadString(
82*b1cdbd2cSJim Jagielski     const Reference< resource::XResourceBundle > xResourceBundle,
83*b1cdbd2cSJim Jagielski     sal_Int32 nResourceId )
84*b1cdbd2cSJim Jagielski {
85*b1cdbd2cSJim Jagielski     OUString sString;
86*b1cdbd2cSJim Jagielski     OUStringBuffer sKey;
87*b1cdbd2cSJim Jagielski     sKey.appendAscii( RTL_CONSTASCII_STRINGPARAM( "string:" ) );
88*b1cdbd2cSJim Jagielski     sKey.append( nResourceId );
89*b1cdbd2cSJim Jagielski 
90*b1cdbd2cSJim Jagielski     try
91*b1cdbd2cSJim Jagielski     {
92*b1cdbd2cSJim Jagielski         OSL_VERIFY( xResourceBundle->getByName( sKey.makeStringAndClear() ) >>= sString );
93*b1cdbd2cSJim Jagielski     }
94*b1cdbd2cSJim Jagielski     catch( const uno::Exception& )
95*b1cdbd2cSJim Jagielski     {
96*b1cdbd2cSJim Jagielski         OSL_ENSURE( false, "OptimizerSettings: missing resource!" );
97*b1cdbd2cSJim Jagielski     }
98*b1cdbd2cSJim Jagielski 
99*b1cdbd2cSJim Jagielski     return sString;
100*b1cdbd2cSJim Jagielski }
101*b1cdbd2cSJim Jagielski 
LoadSettingsFromConfiguration(const Reference<XNameAccess> & rSettings)102*b1cdbd2cSJim Jagielski void OptimizerSettings::LoadSettingsFromConfiguration( const Reference< XNameAccess >& rSettings )
103*b1cdbd2cSJim Jagielski {
104*b1cdbd2cSJim Jagielski 	if ( rSettings.is() )
105*b1cdbd2cSJim Jagielski 	{
106*b1cdbd2cSJim Jagielski 		const Sequence< OUString > aElements( rSettings->getElementNames() );
107*b1cdbd2cSJim Jagielski 		for ( int i = 0; i < aElements.getLength(); i++ )
108*b1cdbd2cSJim Jagielski 		{
109*b1cdbd2cSJim Jagielski 			try
110*b1cdbd2cSJim Jagielski 			{
111*b1cdbd2cSJim Jagielski 				const OUString aPropertyName( aElements[ i ] );
112*b1cdbd2cSJim Jagielski 				Any aValue( rSettings->getByName( aPropertyName ) );
113*b1cdbd2cSJim Jagielski 				switch( TKGet( aPropertyName ) )
114*b1cdbd2cSJim Jagielski 				{
115*b1cdbd2cSJim Jagielski 					case TK_Name :						aValue >>= maName; break;
116*b1cdbd2cSJim Jagielski 					case TK_JPEGCompression :			aValue >>= mbJPEGCompression; break;
117*b1cdbd2cSJim Jagielski 					case TK_JPEGQuality :				aValue >>= mnJPEGQuality; break;
118*b1cdbd2cSJim Jagielski 					case TK_RemoveCropArea :			aValue >>= mbRemoveCropArea; break;
119*b1cdbd2cSJim Jagielski 					case TK_ImageResolution :			aValue >>= mnImageResolution; break;
120*b1cdbd2cSJim Jagielski 					case TK_EmbedLinkedGraphics :		aValue >>= mbEmbedLinkedGraphics; break;
121*b1cdbd2cSJim Jagielski 					case TK_OLEOptimization :			aValue >>= mbOLEOptimization; break;
122*b1cdbd2cSJim Jagielski 					case TK_OLEOptimizationType :		aValue >>= mnOLEOptimizationType; break;
123*b1cdbd2cSJim Jagielski 					case TK_DeleteUnusedMasterPages :	aValue >>= mbDeleteUnusedMasterPages; break;
124*b1cdbd2cSJim Jagielski 					case TK_DeleteHiddenSlides :		aValue >>= mbDeleteHiddenSlides; break;
125*b1cdbd2cSJim Jagielski 					case TK_DeleteNotesPages :			aValue >>= mbDeleteNotesPages ;break;
126*b1cdbd2cSJim Jagielski 					case TK_SaveAs :					aValue >>= mbSaveAs; break;
127*b1cdbd2cSJim Jagielski //					case TK_SaveAsURL :					aValue >>= maSaveAsURL; break;		// URL is not saved to configuration
128*b1cdbd2cSJim Jagielski //					case TK_FilterName :				aValue >>= maFilterName; break;		// URL is not saved to configuration
129*b1cdbd2cSJim Jagielski 					case TK_OpenNewDocument :			aValue >>= mbOpenNewDocument; break;
130*b1cdbd2cSJim Jagielski 					default: break;
131*b1cdbd2cSJim Jagielski 				}
132*b1cdbd2cSJim Jagielski 			}
133*b1cdbd2cSJim Jagielski 			catch( Exception& )
134*b1cdbd2cSJim Jagielski 			{
135*b1cdbd2cSJim Jagielski 			}
136*b1cdbd2cSJim Jagielski 		}
137*b1cdbd2cSJim Jagielski 	}
138*b1cdbd2cSJim Jagielski }
139*b1cdbd2cSJim Jagielski 
SaveSettingsToConfiguration(const Reference<XNameReplace> & rSettings)140*b1cdbd2cSJim Jagielski void OptimizerSettings::SaveSettingsToConfiguration( const Reference< XNameReplace >& rSettings )
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski 	if ( rSettings.is() )
143*b1cdbd2cSJim Jagielski 	{
144*b1cdbd2cSJim Jagielski 		OUString pNames[] = {
145*b1cdbd2cSJim Jagielski 			TKGet( TK_Name ),
146*b1cdbd2cSJim Jagielski 			TKGet( TK_JPEGCompression ),
147*b1cdbd2cSJim Jagielski 			TKGet( TK_JPEGQuality ),
148*b1cdbd2cSJim Jagielski 			TKGet( TK_RemoveCropArea ),
149*b1cdbd2cSJim Jagielski 			TKGet( TK_ImageResolution ),
150*b1cdbd2cSJim Jagielski 			TKGet( TK_EmbedLinkedGraphics ),
151*b1cdbd2cSJim Jagielski 			TKGet( TK_OLEOptimization ),
152*b1cdbd2cSJim Jagielski 			TKGet( TK_OLEOptimizationType ),
153*b1cdbd2cSJim Jagielski 			TKGet( TK_DeleteUnusedMasterPages ),
154*b1cdbd2cSJim Jagielski 			TKGet( TK_DeleteHiddenSlides ),
155*b1cdbd2cSJim Jagielski 			TKGet( TK_DeleteNotesPages ),
156*b1cdbd2cSJim Jagielski 			TKGet( TK_SaveAs ),
157*b1cdbd2cSJim Jagielski //			TKGet( TK_SaveAsURL ),
158*b1cdbd2cSJim Jagielski //			TKGet( TK_FilterName ),
159*b1cdbd2cSJim Jagielski 			TKGet( TK_OpenNewDocument )	};
160*b1cdbd2cSJim Jagielski 
161*b1cdbd2cSJim Jagielski 		Any	pValues[] = {
162*b1cdbd2cSJim Jagielski 			Any( maName ),
163*b1cdbd2cSJim Jagielski 			Any( mbJPEGCompression ),
164*b1cdbd2cSJim Jagielski 			Any( mnJPEGQuality ),
165*b1cdbd2cSJim Jagielski 			Any( mbRemoveCropArea ),
166*b1cdbd2cSJim Jagielski 			Any( mnImageResolution ),
167*b1cdbd2cSJim Jagielski 			Any( mbEmbedLinkedGraphics ),
168*b1cdbd2cSJim Jagielski 			Any( mbOLEOptimization ),
169*b1cdbd2cSJim Jagielski 			Any( mnOLEOptimizationType ),
170*b1cdbd2cSJim Jagielski 			Any( mbDeleteUnusedMasterPages ),
171*b1cdbd2cSJim Jagielski 			Any( mbDeleteHiddenSlides ),
172*b1cdbd2cSJim Jagielski 			Any( mbDeleteNotesPages ),
173*b1cdbd2cSJim Jagielski 			Any( mbSaveAs ),
174*b1cdbd2cSJim Jagielski //			Any( maSaveAsURL ),
175*b1cdbd2cSJim Jagielski //			Any( maFilterName ),
176*b1cdbd2cSJim Jagielski 			Any( mbOpenNewDocument ) };
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski 		sal_Int32 i, nCount = sizeof( pNames ) / sizeof( OUString );
179*b1cdbd2cSJim Jagielski 
180*b1cdbd2cSJim Jagielski 		for ( i = 0; i < nCount; i++ )
181*b1cdbd2cSJim Jagielski 		{
182*b1cdbd2cSJim Jagielski 			try
183*b1cdbd2cSJim Jagielski 			{
184*b1cdbd2cSJim Jagielski 				rSettings->replaceByName( pNames[ i ], pValues[ i ] );
185*b1cdbd2cSJim Jagielski 			}
186*b1cdbd2cSJim Jagielski 			catch( Exception& /* rException */ )
187*b1cdbd2cSJim Jagielski 			{
188*b1cdbd2cSJim Jagielski 			}
189*b1cdbd2cSJim Jagielski 		}
190*b1cdbd2cSJim Jagielski 	}
191*b1cdbd2cSJim Jagielski }
192*b1cdbd2cSJim Jagielski 
operator ==(const OptimizerSettings & rOptimizerSettings) const193*b1cdbd2cSJim Jagielski sal_Bool OptimizerSettings::operator==( const OptimizerSettings& rOptimizerSettings ) const
194*b1cdbd2cSJim Jagielski {
195*b1cdbd2cSJim Jagielski 	return ( rOptimizerSettings.mbJPEGCompression == mbJPEGCompression )
196*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mnJPEGQuality == mnJPEGQuality )
197*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mbRemoveCropArea == mbRemoveCropArea )
198*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mnImageResolution == mnImageResolution )
199*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mbEmbedLinkedGraphics == mbEmbedLinkedGraphics )
200*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mbOLEOptimization == mbOLEOptimization )
201*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mnOLEOptimizationType == mnOLEOptimizationType )
202*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mbDeleteUnusedMasterPages == mbDeleteUnusedMasterPages )
203*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mbDeleteHiddenSlides == mbDeleteHiddenSlides )
204*b1cdbd2cSJim Jagielski 		&& ( rOptimizerSettings.mbDeleteNotesPages == mbDeleteNotesPages );
205*b1cdbd2cSJim Jagielski //		&& ( rOptimizerSettings.mbOpenNewDocument == mbOpenNewDocument );
206*b1cdbd2cSJim Jagielski }
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski 
ConfigurationAccess(const Reference<uno::XComponentContext> & rxContext,OptimizerSettings * pDefaultSettings)209*b1cdbd2cSJim Jagielski ConfigurationAccess::ConfigurationAccess( const Reference< uno::XComponentContext >& rxContext, OptimizerSettings* pDefaultSettings ) :
210*b1cdbd2cSJim Jagielski 	m_xContext( rxContext )
211*b1cdbd2cSJim Jagielski {
212*b1cdbd2cSJim Jagielski 	LoadStrings();
213*b1cdbd2cSJim Jagielski 	maSettings.push_back( pDefaultSettings ?
214*b1cdbd2cSJim Jagielski 		*pDefaultSettings : OptimizerSettings() );
215*b1cdbd2cSJim Jagielski 	maSettings.back().maName = TKGet( TK_LastUsedSettings );
216*b1cdbd2cSJim Jagielski 	LoadConfiguration();
217*b1cdbd2cSJim Jagielski 	maInitialSettings = maSettings;
218*b1cdbd2cSJim Jagielski };
219*b1cdbd2cSJim Jagielski 
~ConfigurationAccess()220*b1cdbd2cSJim Jagielski ConfigurationAccess::~ConfigurationAccess()
221*b1cdbd2cSJim Jagielski {
222*b1cdbd2cSJim Jagielski }
223*b1cdbd2cSJim Jagielski 
getString(sal_Int32 nResId)224*b1cdbd2cSJim Jagielski rtl::OUString ConfigurationAccess::getString( sal_Int32 nResId )
225*b1cdbd2cSJim Jagielski {
226*b1cdbd2cSJim Jagielski     const StringResourceMap &aStrings = StaticResourceMap::get();
227*b1cdbd2cSJim Jagielski 	StringResourceMap::const_iterator aIter( aStrings.find( nResId ) );
228*b1cdbd2cSJim Jagielski 	return aIter != aStrings.end() ? ((*aIter).second) : rtl::OUString();
229*b1cdbd2cSJim Jagielski }
230*b1cdbd2cSJim Jagielski 
LoadStrings()231*b1cdbd2cSJim Jagielski void ConfigurationAccess::LoadStrings()
232*b1cdbd2cSJim Jagielski {
233*b1cdbd2cSJim Jagielski     static bool bLoaded = false;
234*b1cdbd2cSJim Jagielski     if ( bLoaded )
235*b1cdbd2cSJim Jagielski         return;
236*b1cdbd2cSJim Jagielski     else
237*b1cdbd2cSJim Jagielski         bLoaded = true;
238*b1cdbd2cSJim Jagielski 	try
239*b1cdbd2cSJim Jagielski 	{
240*b1cdbd2cSJim Jagielski 
241*b1cdbd2cSJim Jagielski         Reference< resource::XResourceBundleLoader > xResourceBundleLoader(
242*b1cdbd2cSJim Jagielski             m_xContext->getValueByName(
243*b1cdbd2cSJim Jagielski                 OUString( RTL_CONSTASCII_USTRINGPARAM(
244*b1cdbd2cSJim Jagielski                     "/singletons/com.sun.star.resource.OfficeResourceLoader" ) ) ),
245*b1cdbd2cSJim Jagielski                         UNO_QUERY_THROW );
246*b1cdbd2cSJim Jagielski 
247*b1cdbd2cSJim Jagielski         Reference< resource::XResourceBundle > xResourceBundle(
248*b1cdbd2cSJim Jagielski             xResourceBundleLoader->loadBundle_Default(
249*b1cdbd2cSJim Jagielski                 OUString( RTL_CONSTASCII_USTRINGPARAM( "minimizer" ) ) ),
250*b1cdbd2cSJim Jagielski                     UNO_SET_THROW );
251*b1cdbd2cSJim Jagielski 
252*b1cdbd2cSJim Jagielski         StringResourceMap &aStrings = StaticResourceMap::get();
253*b1cdbd2cSJim Jagielski         aStrings[ STR_PRESENTATION_MINIMIZER   ] = lcl_loadString( xResourceBundle, STR_PRESENTATION_MINIMIZER );
254*b1cdbd2cSJim Jagielski         aStrings[ STR_STEPS                    ] = lcl_loadString( xResourceBundle, STR_STEPS );
255*b1cdbd2cSJim Jagielski         aStrings[ STR_HELP                     ] = lcl_loadString( xResourceBundle, STR_HELP );
256*b1cdbd2cSJim Jagielski         aStrings[ STR_BACK                     ] = lcl_loadString( xResourceBundle, STR_BACK );
257*b1cdbd2cSJim Jagielski         aStrings[ STR_NEXT                     ] = lcl_loadString( xResourceBundle, STR_NEXT );
258*b1cdbd2cSJim Jagielski         aStrings[ STR_FINISH                   ] = lcl_loadString( xResourceBundle, STR_FINISH );
259*b1cdbd2cSJim Jagielski         aStrings[ STR_CANCEL                   ] = lcl_loadString( xResourceBundle, STR_CANCEL );
260*b1cdbd2cSJim Jagielski         aStrings[ STR_INTRODUCTION             ] = lcl_loadString( xResourceBundle, STR_INTRODUCTION );
261*b1cdbd2cSJim Jagielski         aStrings[ STR_INTRODUCTION_T           ] = lcl_loadString( xResourceBundle, STR_INTRODUCTION_T );
262*b1cdbd2cSJim Jagielski         aStrings[ STR_CHOSE_SETTINGS           ] = lcl_loadString( xResourceBundle, STR_CHOSE_SETTINGS );
263*b1cdbd2cSJim Jagielski         aStrings[ STR_REMOVE                   ] = lcl_loadString( xResourceBundle, STR_REMOVE );
264*b1cdbd2cSJim Jagielski         aStrings[ STR_GRAPHIC_OPTIMIZATION     ] = lcl_loadString( xResourceBundle, STR_GRAPHIC_OPTIMIZATION );
265*b1cdbd2cSJim Jagielski         aStrings[ STR_IMAGE_OPTIMIZATION       ] = lcl_loadString( xResourceBundle, STR_IMAGE_OPTIMIZATION );
266*b1cdbd2cSJim Jagielski         aStrings[ STR_LOSSLESS_COMPRESSION     ] = lcl_loadString( xResourceBundle, STR_LOSSLESS_COMPRESSION );
267*b1cdbd2cSJim Jagielski         aStrings[ STR_JPEG_COMPRESSION         ] = lcl_loadString( xResourceBundle, STR_JPEG_COMPRESSION );
268*b1cdbd2cSJim Jagielski         aStrings[ STR_QUALITY                  ] = lcl_loadString( xResourceBundle, STR_QUALITY );
269*b1cdbd2cSJim Jagielski         aStrings[ STR_REMOVE_CROP_AREA         ] = lcl_loadString( xResourceBundle, STR_REMOVE_CROP_AREA );
270*b1cdbd2cSJim Jagielski         aStrings[ STR_IMAGE_RESOLUTION         ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION );
271*b1cdbd2cSJim Jagielski         aStrings[ STR_IMAGE_RESOLUTION_0       ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION_0 );
272*b1cdbd2cSJim Jagielski         aStrings[ STR_IMAGE_RESOLUTION_1       ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION_1 );
273*b1cdbd2cSJim Jagielski         aStrings[ STR_IMAGE_RESOLUTION_2       ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION_2 );
274*b1cdbd2cSJim Jagielski         aStrings[ STR_IMAGE_RESOLUTION_3       ] = lcl_loadString( xResourceBundle, STR_IMAGE_RESOLUTION_3 );
275*b1cdbd2cSJim Jagielski         aStrings[ STR_EMBED_LINKED_GRAPHICS    ] = lcl_loadString( xResourceBundle, STR_EMBED_LINKED_GRAPHICS );
276*b1cdbd2cSJim Jagielski         aStrings[ STR_OLE_OBJECTS              ] = lcl_loadString( xResourceBundle, STR_OLE_OBJECTS );
277*b1cdbd2cSJim Jagielski         aStrings[ STR_OLE_OPTIMIZATION         ] = lcl_loadString( xResourceBundle, STR_OLE_OPTIMIZATION );
278*b1cdbd2cSJim Jagielski         aStrings[ STR_OLE_REPLACE              ] = lcl_loadString( xResourceBundle, STR_OLE_REPLACE );
279*b1cdbd2cSJim Jagielski         aStrings[ STR_ALL_OLE_OBJECTS          ] = lcl_loadString( xResourceBundle, STR_ALL_OLE_OBJECTS );
280*b1cdbd2cSJim Jagielski         aStrings[ STR_ALIEN_OLE_OBJECTS_ONLY   ] = lcl_loadString( xResourceBundle, STR_ALIEN_OLE_OBJECTS_ONLY );
281*b1cdbd2cSJim Jagielski         aStrings[ STR_OLE_OBJECTS_DESC         ] = lcl_loadString( xResourceBundle, STR_OLE_OBJECTS_DESC );
282*b1cdbd2cSJim Jagielski         aStrings[ STR_NO_OLE_OBJECTS_DESC      ] = lcl_loadString( xResourceBundle, STR_NO_OLE_OBJECTS_DESC );
283*b1cdbd2cSJim Jagielski         aStrings[ STR_SLIDES                   ] = lcl_loadString( xResourceBundle, STR_SLIDES );
284*b1cdbd2cSJim Jagielski         aStrings[ STR_CHOOSE_SLIDES            ] = lcl_loadString( xResourceBundle, STR_CHOOSE_SLIDES );
285*b1cdbd2cSJim Jagielski         aStrings[ STR_MASTER_PAGES             ] = lcl_loadString( xResourceBundle, STR_MASTER_PAGES );
286*b1cdbd2cSJim Jagielski         aStrings[ STR_DELETE_MASTER_PAGES      ] = lcl_loadString( xResourceBundle, STR_DELETE_MASTER_PAGES );
287*b1cdbd2cSJim Jagielski         aStrings[ STR_DELETE_NOTES_PAGES       ] = lcl_loadString( xResourceBundle, STR_DELETE_NOTES_PAGES );
288*b1cdbd2cSJim Jagielski         aStrings[ STR_DELETE_HIDDEN_SLIDES     ] = lcl_loadString( xResourceBundle, STR_DELETE_HIDDEN_SLIDES );
289*b1cdbd2cSJim Jagielski         aStrings[ STR_CUSTOM_SHOW              ] = lcl_loadString( xResourceBundle, STR_CUSTOM_SHOW );
290*b1cdbd2cSJim Jagielski         aStrings[ STR_SUMMARY                  ] = lcl_loadString( xResourceBundle, STR_SUMMARY );
291*b1cdbd2cSJim Jagielski         aStrings[ STR_SUMMARY_TITLE            ] = lcl_loadString( xResourceBundle, STR_SUMMARY_TITLE );
292*b1cdbd2cSJim Jagielski         aStrings[ STR_PROGRESS                 ] = lcl_loadString( xResourceBundle, STR_PROGRESS );
293*b1cdbd2cSJim Jagielski         aStrings[ STR_OBJECTS_OPTIMIZED        ] = lcl_loadString( xResourceBundle, STR_OBJECTS_OPTIMIZED );
294*b1cdbd2cSJim Jagielski         aStrings[ STR_APPLY_TO_CURRENT         ] = lcl_loadString( xResourceBundle, STR_APPLY_TO_CURRENT );
295*b1cdbd2cSJim Jagielski         aStrings[ STR_AUTOMATICALLY_OPEN       ] = lcl_loadString( xResourceBundle, STR_AUTOMATICALLY_OPEN );
296*b1cdbd2cSJim Jagielski         aStrings[ STR_SAVE_SETTINGS            ] = lcl_loadString( xResourceBundle, STR_SAVE_SETTINGS );
297*b1cdbd2cSJim Jagielski         aStrings[ STR_SAVE_AS                  ] = lcl_loadString( xResourceBundle, STR_SAVE_AS );
298*b1cdbd2cSJim Jagielski         aStrings[ STR_DELETE_SLIDES            ] = lcl_loadString( xResourceBundle, STR_DELETE_SLIDES );
299*b1cdbd2cSJim Jagielski         aStrings[ STR_OPTIMIZE_IMAGES          ] = lcl_loadString( xResourceBundle, STR_OPTIMIZE_IMAGES );
300*b1cdbd2cSJim Jagielski         aStrings[ STR_CREATE_REPLACEMENT       ] = lcl_loadString( xResourceBundle, STR_CREATE_REPLACEMENT );
301*b1cdbd2cSJim Jagielski         aStrings[ STR_CURRENT_FILESIZE         ] = lcl_loadString( xResourceBundle, STR_CURRENT_FILESIZE );
302*b1cdbd2cSJim Jagielski         aStrings[ STR_ESTIMATED_FILESIZE       ] = lcl_loadString( xResourceBundle, STR_ESTIMATED_FILESIZE );
303*b1cdbd2cSJim Jagielski         aStrings[ STR_MB                       ] = lcl_loadString( xResourceBundle, STR_MB );
304*b1cdbd2cSJim Jagielski         aStrings[ STR_MY_SETTINGS              ] = lcl_loadString( xResourceBundle, STR_MY_SETTINGS );
305*b1cdbd2cSJim Jagielski         aStrings[ STR_DEFAULT_SESSION          ] = lcl_loadString( xResourceBundle, STR_DEFAULT_SESSION );
306*b1cdbd2cSJim Jagielski         aStrings[ STR_MODIFY_WARNING           ] = lcl_loadString( xResourceBundle, STR_MODIFY_WARNING );
307*b1cdbd2cSJim Jagielski         aStrings[ STR_YES                      ] = lcl_loadString( xResourceBundle, STR_YES );
308*b1cdbd2cSJim Jagielski         aStrings[ STR_OK                       ] = lcl_loadString( xResourceBundle, STR_OK );
309*b1cdbd2cSJim Jagielski         aStrings[ STR_INFO_1                   ] = lcl_loadString( xResourceBundle, STR_INFO_1 );
310*b1cdbd2cSJim Jagielski         aStrings[ STR_INFO_2                   ] = lcl_loadString( xResourceBundle, STR_INFO_2 );
311*b1cdbd2cSJim Jagielski         aStrings[ STR_INFO_3                   ] = lcl_loadString( xResourceBundle, STR_INFO_3 );
312*b1cdbd2cSJim Jagielski         aStrings[ STR_INFO_4                   ] = lcl_loadString( xResourceBundle, STR_INFO_4 );
313*b1cdbd2cSJim Jagielski         aStrings[ STR_DUPLICATING_PRESENTATION ] = lcl_loadString( xResourceBundle, STR_DUPLICATING_PRESENTATION );
314*b1cdbd2cSJim Jagielski         aStrings[ STR_DELETING_SLIDES          ] = lcl_loadString( xResourceBundle, STR_DELETING_SLIDES );
315*b1cdbd2cSJim Jagielski         aStrings[ STR_OPTIMIZING_GRAPHICS      ] = lcl_loadString( xResourceBundle, STR_OPTIMIZING_GRAPHICS );
316*b1cdbd2cSJim Jagielski         aStrings[ STR_CREATING_OLE_REPLACEMENTS] = lcl_loadString( xResourceBundle, STR_CREATING_OLE_REPLACEMENTS );
317*b1cdbd2cSJim Jagielski         aStrings[ STR_FILESIZESEPARATOR        ] = lcl_loadString( xResourceBundle, STR_FILESIZESEPARATOR );
318*b1cdbd2cSJim Jagielski         aStrings[ STR_INFO_DIALOG              ] = lcl_loadString( xResourceBundle, STR_INFO_DIALOG );
319*b1cdbd2cSJim Jagielski 	}
320*b1cdbd2cSJim Jagielski 	catch( Exception& )
321*b1cdbd2cSJim Jagielski 	{
322*b1cdbd2cSJim Jagielski 	}
323*b1cdbd2cSJim Jagielski }
324*b1cdbd2cSJim Jagielski 
LoadConfiguration()325*b1cdbd2cSJim Jagielski void ConfigurationAccess::LoadConfiguration()
326*b1cdbd2cSJim Jagielski {
327*b1cdbd2cSJim Jagielski 	try
328*b1cdbd2cSJim Jagielski 	{
329*b1cdbd2cSJim Jagielski 		do
330*b1cdbd2cSJim Jagielski 		{
331*b1cdbd2cSJim Jagielski 			Reference< XInterface > xRoot( OpenConfiguration( true ) );
332*b1cdbd2cSJim Jagielski 			if ( !xRoot.is() )
333*b1cdbd2cSJim Jagielski 				break;
334*b1cdbd2cSJim Jagielski             Reference< container::XNameAccess > xSet( GetConfigurationNode( xRoot, TKGet( TK_LastUsedSettings ) ), UNO_QUERY );
335*b1cdbd2cSJim Jagielski 			if ( xSet.is() )
336*b1cdbd2cSJim Jagielski 			{
337*b1cdbd2cSJim Jagielski 				OptimizerSettings& rCurrent( maSettings.front() );
338*b1cdbd2cSJim Jagielski 				rCurrent.LoadSettingsFromConfiguration( xSet );
339*b1cdbd2cSJim Jagielski 			}
340*b1cdbd2cSJim Jagielski 			xSet = Reference< container::XNameAccess >( GetConfigurationNode( xRoot, TKGet( TK_Settings_Templates ) ), UNO_QUERY );
341*b1cdbd2cSJim Jagielski 			if ( xSet.is() )
342*b1cdbd2cSJim Jagielski 			{
343*b1cdbd2cSJim Jagielski 				const Sequence< OUString > aElements( xSet->getElementNames() );
344*b1cdbd2cSJim Jagielski 				for ( int i = 0; i < aElements.getLength(); i++ )
345*b1cdbd2cSJim Jagielski 				{
346*b1cdbd2cSJim Jagielski 					try
347*b1cdbd2cSJim Jagielski 					{
348*b1cdbd2cSJim Jagielski 						OUString aPath( TKGet( TK_Settings_Templates_ ).concat( aElements[ i ] ) );
349*b1cdbd2cSJim Jagielski 						Reference< container::XNameAccess > xTemplates( GetConfigurationNode( xRoot, aPath ), UNO_QUERY );
350*b1cdbd2cSJim Jagielski 						if ( xTemplates.is() )
351*b1cdbd2cSJim Jagielski 						{
352*b1cdbd2cSJim Jagielski 							maSettings.push_back( OptimizerSettings() );
353*b1cdbd2cSJim Jagielski 							maSettings.back().LoadSettingsFromConfiguration( xTemplates );
354*b1cdbd2cSJim Jagielski 						}
355*b1cdbd2cSJim Jagielski 					}
356*b1cdbd2cSJim Jagielski 					catch( Exception& /* rException */ )
357*b1cdbd2cSJim Jagielski 					{
358*b1cdbd2cSJim Jagielski 					}
359*b1cdbd2cSJim Jagielski 				}
360*b1cdbd2cSJim Jagielski 			}
361*b1cdbd2cSJim Jagielski 		}
362*b1cdbd2cSJim Jagielski 		while( false );
363*b1cdbd2cSJim Jagielski 	}
364*b1cdbd2cSJim Jagielski 	catch( Exception& )
365*b1cdbd2cSJim Jagielski 	{
366*b1cdbd2cSJim Jagielski 	}
367*b1cdbd2cSJim Jagielski }
368*b1cdbd2cSJim Jagielski 
SaveConfiguration()369*b1cdbd2cSJim Jagielski void ConfigurationAccess::SaveConfiguration()
370*b1cdbd2cSJim Jagielski {
371*b1cdbd2cSJim Jagielski 	try
372*b1cdbd2cSJim Jagielski 	{
373*b1cdbd2cSJim Jagielski 		do
374*b1cdbd2cSJim Jagielski 		{
375*b1cdbd2cSJim Jagielski 			int i;
376*b1cdbd2cSJim Jagielski 			unsigned int k;
377*b1cdbd2cSJim Jagielski 			Reference<util::XChangesBatch> xRoot( OpenConfiguration( false ), UNO_QUERY_THROW );
378*b1cdbd2cSJim Jagielski 
379*b1cdbd2cSJim Jagielski 			// storing the last used settings
380*b1cdbd2cSJim Jagielski 			Reference< container::XNameReplace > xSet( GetConfigurationNode( xRoot, TKGet( TK_LastUsedSettings ) ), UNO_QUERY_THROW );
381*b1cdbd2cSJim Jagielski 			OptimizerSettings& rCurrent( maSettings.front() );
382*b1cdbd2cSJim Jagielski 			rCurrent.SaveSettingsToConfiguration( xSet );
383*b1cdbd2cSJim Jagielski 
384*b1cdbd2cSJim Jagielski 			// updating template elements
385*b1cdbd2cSJim Jagielski 			xSet = Reference< container::XNameReplace >( GetConfigurationNode( xRoot, TKGet( TK_Settings_Templates ) ), UNO_QUERY_THROW );
386*b1cdbd2cSJim Jagielski 			Reference< container::XNameContainer > xNameContainer( xSet, UNO_QUERY_THROW );
387*b1cdbd2cSJim Jagielski 
388*b1cdbd2cSJim Jagielski 			const Sequence< OUString > aElements( xSet->getElementNames() );
389*b1cdbd2cSJim Jagielski 			for( i = 0; i < aElements.getLength(); i++ )
390*b1cdbd2cSJim Jagielski 				xNameContainer->removeByName( aElements[ i ] );
391*b1cdbd2cSJim Jagielski 
392*b1cdbd2cSJim Jagielski 			for( k = 1; k < maSettings.size(); k++ )
393*b1cdbd2cSJim Jagielski 			{
394*b1cdbd2cSJim Jagielski 				OptimizerSettings& rSettings( maSettings[ k ] );
395*b1cdbd2cSJim Jagielski 				OUString aElementName( TKGet( TK_Template ).concat( OUString::valueOf( static_cast< sal_Int32 >( k ) ) ) );
396*b1cdbd2cSJim Jagielski 				Reference< lang::XSingleServiceFactory > xChildFactory ( xSet, UNO_QUERY_THROW );
397*b1cdbd2cSJim Jagielski 				Reference< container::XNameReplace > xChild( xChildFactory->createInstance(), UNO_QUERY_THROW );
398*b1cdbd2cSJim Jagielski 				xNameContainer->insertByName( aElementName, Any( xChild ) );
399*b1cdbd2cSJim Jagielski 
400*b1cdbd2cSJim Jagielski 				OUString aPath( TKGet( TK_Settings_Templates_ ).concat( aElementName ) );
401*b1cdbd2cSJim Jagielski 				Reference< container::XNameReplace > xTemplates( GetConfigurationNode( xRoot, aPath ), UNO_QUERY );
402*b1cdbd2cSJim Jagielski 				rSettings.SaveSettingsToConfiguration( xTemplates );
403*b1cdbd2cSJim Jagielski 			}
404*b1cdbd2cSJim Jagielski             xRoot->commitChanges();
405*b1cdbd2cSJim Jagielski 		}
406*b1cdbd2cSJim Jagielski 		while( false );
407*b1cdbd2cSJim Jagielski 	}
408*b1cdbd2cSJim Jagielski 	catch( Exception& /* rException */ )
409*b1cdbd2cSJim Jagielski 	{
410*b1cdbd2cSJim Jagielski 
411*b1cdbd2cSJim Jagielski 	}
412*b1cdbd2cSJim Jagielski }
413*b1cdbd2cSJim Jagielski 
OpenConfiguration(bool bReadOnly)414*b1cdbd2cSJim Jagielski Reference< XInterface > ConfigurationAccess::OpenConfiguration( bool bReadOnly )
415*b1cdbd2cSJim Jagielski {
416*b1cdbd2cSJim Jagielski 	Reference< XInterface > xRoot;
417*b1cdbd2cSJim Jagielski 	try
418*b1cdbd2cSJim Jagielski 	{
419*b1cdbd2cSJim Jagielski         Reference< lang::XMultiServiceFactory > xProvider( m_xContext->getServiceManager()->createInstanceWithContext( GetConfigurationProviderServiceName(), m_xContext ), UNO_QUERY );
420*b1cdbd2cSJim Jagielski         if ( xProvider.is() )
421*b1cdbd2cSJim Jagielski         {
422*b1cdbd2cSJim Jagielski             Sequence< Any > aCreationArguments( 2 );
423*b1cdbd2cSJim Jagielski             aCreationArguments[0] = makeAny( PropertyValue(
424*b1cdbd2cSJim Jagielski                 OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) ), 0,
425*b1cdbd2cSJim Jagielski                 makeAny( GetPathToConfigurationRoot() ),
426*b1cdbd2cSJim Jagielski                 PropertyState_DIRECT_VALUE ) );
427*b1cdbd2cSJim Jagielski             aCreationArguments[1] = makeAny(beans::PropertyValue(
428*b1cdbd2cSJim Jagielski                 OUString( RTL_CONSTASCII_USTRINGPARAM( "lazywrite" ) ), 0, makeAny( true ),
429*b1cdbd2cSJim Jagielski                 PropertyState_DIRECT_VALUE ) );
430*b1cdbd2cSJim Jagielski             OUString sAccessService;
431*b1cdbd2cSJim Jagielski             if ( bReadOnly )
432*b1cdbd2cSJim Jagielski                 sAccessService = OUString( RTL_CONSTASCII_USTRINGPARAM(
433*b1cdbd2cSJim Jagielski                     "com.sun.star.configuration.ConfigurationAccess" ) );
434*b1cdbd2cSJim Jagielski             else
435*b1cdbd2cSJim Jagielski                 sAccessService = OUString( RTL_CONSTASCII_USTRINGPARAM(
436*b1cdbd2cSJim Jagielski                     "com.sun.star.configuration.ConfigurationUpdateAccess" ) );
437*b1cdbd2cSJim Jagielski 
438*b1cdbd2cSJim Jagielski             xRoot = xProvider->createInstanceWithArguments(
439*b1cdbd2cSJim Jagielski                 sAccessService, aCreationArguments );
440*b1cdbd2cSJim Jagielski         }
441*b1cdbd2cSJim Jagielski 	}
442*b1cdbd2cSJim Jagielski 	catch ( Exception& /* rException */ )
443*b1cdbd2cSJim Jagielski 	{
444*b1cdbd2cSJim Jagielski 	}
445*b1cdbd2cSJim Jagielski 	return xRoot;
446*b1cdbd2cSJim Jagielski }
447*b1cdbd2cSJim Jagielski 
GetConfigurationNode(const Reference<XInterface> & xRoot,const OUString & sPathToNode)448*b1cdbd2cSJim Jagielski Reference< XInterface > ConfigurationAccess::GetConfigurationNode(
449*b1cdbd2cSJim Jagielski     const Reference< XInterface >& xRoot,
450*b1cdbd2cSJim Jagielski     const OUString& sPathToNode )
451*b1cdbd2cSJim Jagielski {
452*b1cdbd2cSJim Jagielski     Reference< XInterface > xNode;
453*b1cdbd2cSJim Jagielski     try
454*b1cdbd2cSJim Jagielski     {
455*b1cdbd2cSJim Jagielski 		if ( !sPathToNode.getLength() )
456*b1cdbd2cSJim Jagielski 			xNode = xRoot;
457*b1cdbd2cSJim Jagielski 		else
458*b1cdbd2cSJim Jagielski 		{
459*b1cdbd2cSJim Jagielski 			Reference< XHierarchicalNameAccess > xHierarchy( xRoot, UNO_QUERY );
460*b1cdbd2cSJim Jagielski 			if ( xHierarchy.is() )
461*b1cdbd2cSJim Jagielski 			{
462*b1cdbd2cSJim Jagielski 				xHierarchy->getByHierarchicalName( sPathToNode ) >>= xNode;
463*b1cdbd2cSJim Jagielski 			}
464*b1cdbd2cSJim Jagielski 		}
465*b1cdbd2cSJim Jagielski     }
466*b1cdbd2cSJim Jagielski     catch ( Exception& rException )
467*b1cdbd2cSJim Jagielski     {
468*b1cdbd2cSJim Jagielski         OSL_TRACE ("caught exception while getting configuration node %s: %s",
469*b1cdbd2cSJim Jagielski             ::rtl::OUStringToOString(sPathToNode,
470*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_UTF8).getStr(),
471*b1cdbd2cSJim Jagielski             ::rtl::OUStringToOString(rException.Message,
472*b1cdbd2cSJim Jagielski                 RTL_TEXTENCODING_UTF8).getStr());
473*b1cdbd2cSJim Jagielski     }
474*b1cdbd2cSJim Jagielski     return xNode;
475*b1cdbd2cSJim Jagielski }
476*b1cdbd2cSJim Jagielski 
GetConfigProperty(const PPPOptimizerTokenEnum ePropertyToken) const477*b1cdbd2cSJim Jagielski com::sun::star::uno::Any ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken ) const
478*b1cdbd2cSJim Jagielski {
479*b1cdbd2cSJim Jagielski 	Any aRetValue;
480*b1cdbd2cSJim Jagielski 	const OptimizerSettings& rSettings( maSettings.front() );
481*b1cdbd2cSJim Jagielski 	try
482*b1cdbd2cSJim Jagielski 	{
483*b1cdbd2cSJim Jagielski 		switch( ePropertyToken )
484*b1cdbd2cSJim Jagielski 		{
485*b1cdbd2cSJim Jagielski 			case TK_Name :						aRetValue <<= rSettings.maName; break;
486*b1cdbd2cSJim Jagielski 			case TK_JPEGCompression :			aRetValue <<= rSettings.mbJPEGCompression; break;
487*b1cdbd2cSJim Jagielski 			case TK_JPEGQuality :				aRetValue <<= rSettings.mnJPEGQuality; break;
488*b1cdbd2cSJim Jagielski 			case TK_RemoveCropArea :			aRetValue <<= rSettings.mbRemoveCropArea; break;
489*b1cdbd2cSJim Jagielski 			case TK_ImageResolution :			aRetValue <<= rSettings.mnImageResolution; break;
490*b1cdbd2cSJim Jagielski 			case TK_EmbedLinkedGraphics :		aRetValue <<= rSettings.mbEmbedLinkedGraphics; break;
491*b1cdbd2cSJim Jagielski 			case TK_OLEOptimization :			aRetValue <<= rSettings.mbOLEOptimization; break;
492*b1cdbd2cSJim Jagielski 			case TK_OLEOptimizationType :		aRetValue <<= rSettings.mnOLEOptimizationType; break;
493*b1cdbd2cSJim Jagielski 			case TK_DeleteUnusedMasterPages :	aRetValue <<= rSettings.mbDeleteUnusedMasterPages; break;
494*b1cdbd2cSJim Jagielski 			case TK_DeleteHiddenSlides :		aRetValue <<= rSettings.mbDeleteHiddenSlides; break;
495*b1cdbd2cSJim Jagielski 			case TK_DeleteNotesPages :			aRetValue <<= rSettings.mbDeleteNotesPages; break;
496*b1cdbd2cSJim Jagielski 			case TK_SaveAs :					aRetValue <<= rSettings.mbSaveAs; break;
497*b1cdbd2cSJim Jagielski 			case TK_SaveAsURL :					aRetValue <<= rSettings.maSaveAsURL; break;
498*b1cdbd2cSJim Jagielski 			case TK_FilterName :				aRetValue <<= rSettings.maFilterName; break;
499*b1cdbd2cSJim Jagielski 			case TK_OpenNewDocument :			aRetValue <<= rSettings.mbOpenNewDocument; break;
500*b1cdbd2cSJim Jagielski 			case TK_EstimatedFileSize :			aRetValue <<= rSettings.mnEstimatedFileSize; break;
501*b1cdbd2cSJim Jagielski 			default:
502*b1cdbd2cSJim Jagielski 				break;
503*b1cdbd2cSJim Jagielski 		}
504*b1cdbd2cSJim Jagielski 	}
505*b1cdbd2cSJim Jagielski 	catch( Exception& /* rException */ )
506*b1cdbd2cSJim Jagielski 	{
507*b1cdbd2cSJim Jagielski 	}
508*b1cdbd2cSJim Jagielski 	return aRetValue;
509*b1cdbd2cSJim Jagielski }
510*b1cdbd2cSJim Jagielski 
SetConfigProperty(const PPPOptimizerTokenEnum ePropertyToken,const com::sun::star::uno::Any & rValue)511*b1cdbd2cSJim Jagielski void ConfigurationAccess::SetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const com::sun::star::uno::Any& rValue )
512*b1cdbd2cSJim Jagielski {
513*b1cdbd2cSJim Jagielski 	OptimizerSettings& rSettings( maSettings.front() );
514*b1cdbd2cSJim Jagielski 	try
515*b1cdbd2cSJim Jagielski 	{
516*b1cdbd2cSJim Jagielski 		switch( ePropertyToken )
517*b1cdbd2cSJim Jagielski 		{
518*b1cdbd2cSJim Jagielski 			case TK_Name :						rValue >>= rSettings.maName; break;
519*b1cdbd2cSJim Jagielski 			case TK_JPEGCompression :			rValue >>= rSettings.mbJPEGCompression; break;
520*b1cdbd2cSJim Jagielski 			case TK_JPEGQuality :				rValue >>= rSettings.mnJPEGQuality; break;
521*b1cdbd2cSJim Jagielski 			case TK_RemoveCropArea :			rValue >>= rSettings.mbRemoveCropArea; break;
522*b1cdbd2cSJim Jagielski 			case TK_ImageResolution :			rValue >>= rSettings.mnImageResolution; break;
523*b1cdbd2cSJim Jagielski 			case TK_EmbedLinkedGraphics :		rValue >>= rSettings.mbEmbedLinkedGraphics; break;
524*b1cdbd2cSJim Jagielski 			case TK_OLEOptimization :			rValue >>= rSettings.mbOLEOptimization; break;
525*b1cdbd2cSJim Jagielski 			case TK_OLEOptimizationType :		rValue >>= rSettings.mnOLEOptimizationType; break;
526*b1cdbd2cSJim Jagielski 			case TK_DeleteUnusedMasterPages :	rValue >>= rSettings.mbDeleteUnusedMasterPages; break;
527*b1cdbd2cSJim Jagielski 			case TK_DeleteHiddenSlides :		rValue >>= rSettings.mbDeleteHiddenSlides; break;
528*b1cdbd2cSJim Jagielski 			case TK_DeleteNotesPages :			rValue >>= rSettings.mbDeleteNotesPages; break;
529*b1cdbd2cSJim Jagielski 			case TK_CustomShowName :			rValue >>= rSettings.maCustomShowName; break;
530*b1cdbd2cSJim Jagielski 			case TK_SaveAs :					rValue >>= rSettings.mbSaveAs; break;
531*b1cdbd2cSJim Jagielski 			case TK_SaveAsURL :					rValue >>= rSettings.maSaveAsURL; break;
532*b1cdbd2cSJim Jagielski 			case TK_FilterName :				rValue >>= rSettings.maFilterName; break;
533*b1cdbd2cSJim Jagielski 			case TK_OpenNewDocument :			rValue >>= rSettings.mbOpenNewDocument; break;
534*b1cdbd2cSJim Jagielski 			case TK_EstimatedFileSize :			rValue >>= rSettings.mnEstimatedFileSize; break;
535*b1cdbd2cSJim Jagielski 			default:
536*b1cdbd2cSJim Jagielski 				break;
537*b1cdbd2cSJim Jagielski 		}
538*b1cdbd2cSJim Jagielski 	}
539*b1cdbd2cSJim Jagielski 	catch( Exception& /* rException */ )
540*b1cdbd2cSJim Jagielski 	{
541*b1cdbd2cSJim Jagielski 	}
542*b1cdbd2cSJim Jagielski }
543*b1cdbd2cSJim Jagielski 
GetConfigProperty(const PPPOptimizerTokenEnum ePropertyToken,const sal_Bool bDefault) const544*b1cdbd2cSJim Jagielski sal_Bool ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Bool bDefault ) const
545*b1cdbd2cSJim Jagielski {
546*b1cdbd2cSJim Jagielski 	sal_Bool bRetValue = bDefault;
547*b1cdbd2cSJim Jagielski 	if ( ! ( GetConfigProperty( ePropertyToken ) >>= bRetValue ) )
548*b1cdbd2cSJim Jagielski 		bRetValue = bDefault;
549*b1cdbd2cSJim Jagielski 	return bRetValue;
550*b1cdbd2cSJim Jagielski }
551*b1cdbd2cSJim Jagielski 
GetConfigProperty(const PPPOptimizerTokenEnum ePropertyToken,const sal_Int16 nDefault) const552*b1cdbd2cSJim Jagielski sal_Int16 ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Int16 nDefault ) const
553*b1cdbd2cSJim Jagielski {
554*b1cdbd2cSJim Jagielski 	sal_Int16 nRetValue = nDefault;
555*b1cdbd2cSJim Jagielski 	if ( ! ( GetConfigProperty( ePropertyToken ) >>= nRetValue ) )
556*b1cdbd2cSJim Jagielski 		nRetValue = nDefault;
557*b1cdbd2cSJim Jagielski 	return nRetValue;
558*b1cdbd2cSJim Jagielski }
559*b1cdbd2cSJim Jagielski 
GetConfigProperty(const PPPOptimizerTokenEnum ePropertyToken,const sal_Int32 nDefault) const560*b1cdbd2cSJim Jagielski sal_Int32 ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Int32 nDefault ) const
561*b1cdbd2cSJim Jagielski {
562*b1cdbd2cSJim Jagielski 	sal_Int32 nRetValue = nDefault;
563*b1cdbd2cSJim Jagielski 	if ( ! ( GetConfigProperty( ePropertyToken ) >>= nRetValue ) )
564*b1cdbd2cSJim Jagielski 		nRetValue = nDefault;
565*b1cdbd2cSJim Jagielski 	return nRetValue;
566*b1cdbd2cSJim Jagielski }
567*b1cdbd2cSJim Jagielski 
GetConfigurationSequence()568*b1cdbd2cSJim Jagielski Sequence< PropertyValue > ConfigurationAccess::GetConfigurationSequence()
569*b1cdbd2cSJim Jagielski {
570*b1cdbd2cSJim Jagielski 	Sequence< PropertyValue > aRet( 15 );
571*b1cdbd2cSJim Jagielski 	OptimizerSettings& rSettings( maSettings.front() );
572*b1cdbd2cSJim Jagielski 	aRet[ 0 ].Name = TKGet( TK_JPEGCompression );
573*b1cdbd2cSJim Jagielski 	aRet[ 0 ].Value= Any( rSettings.mbJPEGCompression );
574*b1cdbd2cSJim Jagielski 	aRet[ 1 ].Name = TKGet( TK_JPEGQuality );
575*b1cdbd2cSJim Jagielski 	aRet[ 1 ].Value= Any( rSettings.mnJPEGQuality );
576*b1cdbd2cSJim Jagielski 	aRet[ 2 ].Name = TKGet( TK_RemoveCropArea );
577*b1cdbd2cSJim Jagielski 	aRet[ 2 ].Value= Any( rSettings.mbRemoveCropArea );
578*b1cdbd2cSJim Jagielski 	aRet[ 3 ].Name = TKGet( TK_ImageResolution );
579*b1cdbd2cSJim Jagielski 	aRet[ 3 ].Value= Any( rSettings.mnImageResolution );
580*b1cdbd2cSJim Jagielski 	aRet[ 4 ].Name = TKGet( TK_EmbedLinkedGraphics );
581*b1cdbd2cSJim Jagielski 	aRet[ 4 ].Value= Any( rSettings.mbEmbedLinkedGraphics );
582*b1cdbd2cSJim Jagielski 	aRet[ 5 ].Name = TKGet( TK_OLEOptimization );
583*b1cdbd2cSJim Jagielski 	aRet[ 5 ].Value= Any( rSettings.mbOLEOptimization );
584*b1cdbd2cSJim Jagielski 	aRet[ 6 ].Name = TKGet( TK_OLEOptimizationType );
585*b1cdbd2cSJim Jagielski 	aRet[ 6 ].Value= Any( rSettings.mnOLEOptimizationType );
586*b1cdbd2cSJim Jagielski 	aRet[ 7 ].Name = TKGet( TK_DeleteUnusedMasterPages );
587*b1cdbd2cSJim Jagielski 	aRet[ 7 ].Value= Any( rSettings.mbDeleteUnusedMasterPages );
588*b1cdbd2cSJim Jagielski 	aRet[ 8 ].Name = TKGet( TK_DeleteHiddenSlides );
589*b1cdbd2cSJim Jagielski 	aRet[ 8 ].Value= Any( rSettings.mbDeleteHiddenSlides );
590*b1cdbd2cSJim Jagielski 	aRet[ 9 ].Name = TKGet( TK_DeleteNotesPages );
591*b1cdbd2cSJim Jagielski 	aRet[ 9 ].Value= Any( rSettings.mbDeleteNotesPages );
592*b1cdbd2cSJim Jagielski 	aRet[ 10].Name = TKGet( TK_CustomShowName );
593*b1cdbd2cSJim Jagielski 	aRet[ 10].Value= Any( rSettings.maCustomShowName );
594*b1cdbd2cSJim Jagielski 	aRet[ 11].Name = TKGet( TK_SaveAsURL );
595*b1cdbd2cSJim Jagielski 	aRet[ 11].Value= Any( rSettings.maSaveAsURL );
596*b1cdbd2cSJim Jagielski 	aRet[ 12].Name = TKGet( TK_FilterName );
597*b1cdbd2cSJim Jagielski 	aRet[ 12].Value= Any( rSettings.maFilterName );
598*b1cdbd2cSJim Jagielski 	aRet[ 13].Name = TKGet( TK_OpenNewDocument );
599*b1cdbd2cSJim Jagielski 	aRet[ 13].Value= Any( rSettings.mbOpenNewDocument );
600*b1cdbd2cSJim Jagielski 	aRet[ 14].Name = TKGet( TK_EstimatedFileSize );
601*b1cdbd2cSJim Jagielski 	aRet[ 14].Value= Any( rSettings.mnEstimatedFileSize );
602*b1cdbd2cSJim Jagielski 	return aRet;
603*b1cdbd2cSJim Jagielski }
604*b1cdbd2cSJim Jagielski 
GetOptimizerSettingsByName(const rtl::OUString & rName)605*b1cdbd2cSJim Jagielski std::vector< OptimizerSettings >::iterator ConfigurationAccess::GetOptimizerSettingsByName( const rtl::OUString& rName )
606*b1cdbd2cSJim Jagielski {
607*b1cdbd2cSJim Jagielski 	std::vector< OptimizerSettings >::iterator aIter( maSettings.begin() + 1 );
608*b1cdbd2cSJim Jagielski 	while ( aIter != maSettings.end() )
609*b1cdbd2cSJim Jagielski 	{
610*b1cdbd2cSJim Jagielski 		if ( aIter->maName == rName )
611*b1cdbd2cSJim Jagielski 			break;
612*b1cdbd2cSJim Jagielski 		aIter++;
613*b1cdbd2cSJim Jagielski 	}
614*b1cdbd2cSJim Jagielski 	return aIter;
615*b1cdbd2cSJim Jagielski }
616