1 /*************************************************************************
2  *
3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4  *
5  * Copyright 2000, 2010 Oracle and/or its affiliates.
6  *
7  * OpenOffice.org - a multi-platform office productivity suite
8  *
9  * This file is part of OpenOffice.org.
10  *
11  * OpenOffice.org is free software: you can redistribute it and/or modify
12  * it under the terms of the GNU Lesser General Public License version 3
13  * only, as published by the Free Software Foundation.
14  *
15  * OpenOffice.org is distributed in the hope that it will be useful,
16  * but WITHOUT ANY WARRANTY; without even the implied warranty of
17  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18  * GNU Lesser General Public License version 3 for more details
19  * (a copy is included in the LICENSE file that accompanied this code).
20  *
21  * You should have received a copy of the GNU Lesser General Public License
22  * version 3 along with OpenOffice.org.  If not, see
23  * <http://www.openoffice.org/license.html>
24  * for a copy of the LGPLv3 License.
25  *
26  ************************************************************************/
27 
28 // MARKER(update_precomp.py): autogen include statement, do not remove
29 #include "precompiled_sdext.hxx"
30 
31 #include "configurationaccess.hxx"
32 #include <com/sun/star/frame/XComponentLoader.hpp>
33 #include <com/sun/star/container/XHierarchicalNameAccess.hpp>
34 #include <com/sun/star/util/XChangesBatch.hpp>
35 #include <com/sun/star/container/XNameContainer.hpp>
36 #include <com/sun/star/util/XMacroExpander.hpp>
37 #include <com/sun/star/lang/XSingleServiceFactory.hpp>
38 
39 using namespace ::rtl;
40 using namespace ::com::sun::star;
41 using namespace ::com::sun::star::uno;
42 using namespace ::com::sun::star::beans;
43 using namespace ::com::sun::star::container;
44 
45 static const OUString& GetConfigurationProviderServiceName (void)
46 {
47     static const OUString sConfigurationProviderServiceName (
48         RTL_CONSTASCII_USTRINGPARAM(
49             "com.sun.star.configuration.ConfigurationProvider"));
50     return sConfigurationProviderServiceName;
51 }
52 static const OUString& GetPathToConfigurationRoot (void)
53 {
54     static const OUString sPathToConfigurationRoot (
55         RTL_CONSTASCII_USTRINGPARAM("org.openoffice.Office.extension.SunPresentationMinimizer"));
56     return sPathToConfigurationRoot;
57 }
58 
59 void OptimizerSettings::LoadSettingsFromConfiguration( const Reference< XNameAccess >& rSettings )
60 {
61 	if ( rSettings.is() )
62 	{
63 		const Sequence< OUString > aElements( rSettings->getElementNames() );
64 		for ( int i = 0; i < aElements.getLength(); i++ )
65 		{
66 			try
67 			{
68 				const OUString aPropertyName( aElements[ i ] );
69 				Any aValue( rSettings->getByName( aPropertyName ) );
70 				switch( TKGet( aPropertyName ) )
71 				{
72 					case TK_Name :						aValue >>= maName; break;
73 					case TK_JPEGCompression :			aValue >>= mbJPEGCompression; break;
74 					case TK_JPEGQuality :				aValue >>= mnJPEGQuality; break;
75 					case TK_RemoveCropArea :			aValue >>= mbRemoveCropArea; break;
76 					case TK_ImageResolution :			aValue >>= mnImageResolution; break;
77 					case TK_EmbedLinkedGraphics :		aValue >>= mbEmbedLinkedGraphics; break;
78 					case TK_OLEOptimization :			aValue >>= mbOLEOptimization; break;
79 					case TK_OLEOptimizationType :		aValue >>= mnOLEOptimizationType; break;
80 					case TK_DeleteUnusedMasterPages :	aValue >>= mbDeleteUnusedMasterPages; break;
81 					case TK_DeleteHiddenSlides :		aValue >>= mbDeleteHiddenSlides; break;
82 					case TK_DeleteNotesPages :			aValue >>= mbDeleteNotesPages ;break;
83 					case TK_SaveAs :					aValue >>= mbSaveAs; break;
84 //					case TK_SaveAsURL :					aValue >>= maSaveAsURL; break;		// URL is not saved to configuration
85 //					case TK_FilterName :				aValue >>= maFilterName; break;		// URL is not saved to configuration
86 					case TK_OpenNewDocument :			aValue >>= mbOpenNewDocument; break;
87 					default: break;
88 				}
89 			}
90 			catch( Exception& )
91 			{
92 			}
93 		}
94 	}
95 }
96 
97 void OptimizerSettings::SaveSettingsToConfiguration( const Reference< XNameReplace >& rSettings )
98 {
99 	if ( rSettings.is() )
100 	{
101 		OUString pNames[] = {
102 			TKGet( TK_Name ),
103 			TKGet( TK_JPEGCompression ),
104 			TKGet( TK_JPEGQuality ),
105 			TKGet( TK_RemoveCropArea ),
106 			TKGet( TK_ImageResolution ),
107 			TKGet( TK_EmbedLinkedGraphics ),
108 			TKGet( TK_OLEOptimization ),
109 			TKGet( TK_OLEOptimizationType ),
110 			TKGet( TK_DeleteUnusedMasterPages ),
111 			TKGet( TK_DeleteHiddenSlides ),
112 			TKGet( TK_DeleteNotesPages ),
113 			TKGet( TK_SaveAs ),
114 //			TKGet( TK_SaveAsURL ),
115 //			TKGet( TK_FilterName ),
116 			TKGet( TK_OpenNewDocument )	};
117 
118 		Any	pValues[] = {
119 			Any( maName ),
120 			Any( mbJPEGCompression ),
121 			Any( mnJPEGQuality ),
122 			Any( mbRemoveCropArea ),
123 			Any( mnImageResolution ),
124 			Any( mbEmbedLinkedGraphics ),
125 			Any( mbOLEOptimization ),
126 			Any( mnOLEOptimizationType ),
127 			Any( mbDeleteUnusedMasterPages ),
128 			Any( mbDeleteHiddenSlides ),
129 			Any( mbDeleteNotesPages ),
130 			Any( mbSaveAs ),
131 //			Any( maSaveAsURL ),
132 //			Any( maFilterName ),
133 			Any( mbOpenNewDocument ) };
134 
135 		sal_Int32 i, nCount = sizeof( pNames ) / sizeof( OUString );
136 
137 		for ( i = 0; i < nCount; i++ )
138 		{
139 			try
140 			{
141 				rSettings->replaceByName( pNames[ i ], pValues[ i ] );
142 			}
143 			catch( Exception& /* rException */ )
144 			{
145 			}
146 		}
147 	}
148 }
149 
150 sal_Bool OptimizerSettings::operator==( const OptimizerSettings& rOptimizerSettings ) const
151 {
152 	return ( rOptimizerSettings.mbJPEGCompression == mbJPEGCompression )
153 		&& ( rOptimizerSettings.mnJPEGQuality == mnJPEGQuality )
154 		&& ( rOptimizerSettings.mbRemoveCropArea == mbRemoveCropArea )
155 		&& ( rOptimizerSettings.mnImageResolution == mnImageResolution )
156 		&& ( rOptimizerSettings.mbEmbedLinkedGraphics == mbEmbedLinkedGraphics )
157 		&& ( rOptimizerSettings.mbOLEOptimization == mbOLEOptimization )
158 		&& ( rOptimizerSettings.mnOLEOptimizationType == mnOLEOptimizationType )
159 		&& ( rOptimizerSettings.mbDeleteUnusedMasterPages == mbDeleteUnusedMasterPages )
160 		&& ( rOptimizerSettings.mbDeleteHiddenSlides == mbDeleteHiddenSlides )
161 		&& ( rOptimizerSettings.mbDeleteNotesPages == mbDeleteNotesPages );
162 //		&& ( rOptimizerSettings.mbOpenNewDocument == mbOpenNewDocument );
163 }
164 
165 
166 ConfigurationAccess::ConfigurationAccess( const Reference< uno::XComponentContext >& rxMSF, OptimizerSettings* pDefaultSettings ) :
167 	mxMSF( rxMSF )
168 {
169 	LoadStrings();
170 	maSettings.push_back( pDefaultSettings ?
171 		*pDefaultSettings : OptimizerSettings() );
172 	maSettings.back().maName = TKGet( TK_LastUsedSettings );
173 	LoadConfiguration();
174 	maInitialSettings = maSettings;
175 };
176 
177 ConfigurationAccess::~ConfigurationAccess()
178 {
179 }
180 
181 rtl::OUString ConfigurationAccess::getPath( const PPPOptimizerTokenEnum eToken )
182 {
183 	rtl::OUString aPath;
184 	try
185 	{
186 		static const OUString sProtocol( RTL_CONSTASCII_USTRINGPARAM( "vnd.sun.star.expand:" ) );
187 		static const OUString stheMacroExpander( RTL_CONSTASCII_USTRINGPARAM( "/singletons/com.sun.star.util.theMacroExpander" ) );
188 		Reference< container::XNameAccess > xSet( OpenConfiguration( true ), UNO_QUERY_THROW );
189 		if ( xSet->hasByName( TKGet( eToken ) ) )
190 			xSet->getByName( TKGet( eToken ) ) >>= aPath;
191 		if ( aPath.match( sProtocol, 0 ) )
192 		{
193 			rtl::OUString aTmp( aPath.copy( 20 ) );
194 			Reference< util::XMacroExpander > xExpander;
195 			if ( mxMSF->getValueByName( stheMacroExpander ) >>= xExpander )
196 			{
197 				aPath = xExpander->expandMacros( aTmp );
198 			}
199 		}
200 	}
201 	catch ( Exception& )
202 	{
203 	}
204 	return aPath;
205 }
206 
207 rtl::OUString ConfigurationAccess::getString( const PPPOptimizerTokenEnum eToken ) const
208 {
209 	std::map< PPPOptimizerTokenEnum, rtl::OUString, Compare >::const_iterator aIter( maStrings.find( eToken ) );
210 	return aIter != maStrings.end() ? ((*aIter).second) : rtl::OUString();
211 }
212 
213 void ConfigurationAccess::LoadStrings()
214 {
215 	try
216 	{
217 		do
218 		{
219 			Reference< XInterface > xRoot( OpenConfiguration( true ) );
220 			if ( !xRoot.is() )
221 				break;
222 			Reference< container::XNameAccess > xSet( GetConfigurationNode( xRoot, TKGet( TK_Strings ) ), UNO_QUERY );
223 			if ( xSet.is() )
224 			{
225 				const Sequence< OUString > aElements( xSet->getElementNames() );
226 				for ( int i = 0; i < aElements.getLength(); i++ )
227 				{
228 					try
229 					{
230 						OUString aString, aPropertyName( aElements[ i ] );
231 						if ( xSet->getByName( aPropertyName ) >>= aString )
232 							maStrings[ TKGet( aPropertyName ) ] = aString;
233 					}
234 					catch( Exception& )
235 					{
236 					}
237 				}
238 			}
239 		}
240 		while( false );
241 	}
242 	catch( Exception& )
243 	{
244 	}
245 }
246 
247 void ConfigurationAccess::LoadConfiguration()
248 {
249 	try
250 	{
251 		do
252 		{
253 			Reference< XInterface > xRoot( OpenConfiguration( true ) );
254 			if ( !xRoot.is() )
255 				break;
256             Reference< container::XNameAccess > xSet( GetConfigurationNode( xRoot, TKGet( TK_LastUsedSettings ) ), UNO_QUERY );
257 			if ( xSet.is() )
258 			{
259 				OptimizerSettings& rCurrent( maSettings.front() );
260 				rCurrent.LoadSettingsFromConfiguration( xSet );
261 			}
262 			xSet = Reference< container::XNameAccess >( GetConfigurationNode( xRoot, TKGet( TK_Settings_Templates ) ), UNO_QUERY );
263 			if ( xSet.is() )
264 			{
265 				const Sequence< OUString > aElements( xSet->getElementNames() );
266 				for ( int i = 0; i < aElements.getLength(); i++ )
267 				{
268 					try
269 					{
270 						OUString aPath( TKGet( TK_Settings_Templates_ ).concat( aElements[ i ] ) );
271 						Reference< container::XNameAccess > xTemplates( GetConfigurationNode( xRoot, aPath ), UNO_QUERY );
272 						if ( xTemplates.is() )
273 						{
274 							maSettings.push_back( OptimizerSettings() );
275 							maSettings.back().LoadSettingsFromConfiguration( xTemplates );
276 						}
277 					}
278 					catch( Exception& /* rException */ )
279 					{
280 					}
281 				}
282 			}
283 		}
284 		while( false );
285 	}
286 	catch( Exception& )
287 	{
288 	}
289 }
290 
291 void ConfigurationAccess::SaveConfiguration()
292 {
293 	try
294 	{
295 		do
296 		{
297 			int i;
298 			unsigned int k;
299 			Reference<util::XChangesBatch> xRoot( OpenConfiguration( false ), UNO_QUERY_THROW );
300 
301 			// storing the last used settings
302 			Reference< container::XNameReplace > xSet( GetConfigurationNode( xRoot, TKGet( TK_LastUsedSettings ) ), UNO_QUERY_THROW );
303 			OptimizerSettings& rCurrent( maSettings.front() );
304 			rCurrent.SaveSettingsToConfiguration( xSet );
305 
306 			// updating template elements
307 			xSet = Reference< container::XNameReplace >( GetConfigurationNode( xRoot, TKGet( TK_Settings_Templates ) ), UNO_QUERY_THROW );
308 			Reference< container::XNameContainer > xNameContainer( xSet, UNO_QUERY_THROW );
309 
310 			const Sequence< OUString > aElements( xSet->getElementNames() );
311 			for( i = 0; i < aElements.getLength(); i++ )
312 				xNameContainer->removeByName( aElements[ i ] );
313 
314 			for( k = 1; k < maSettings.size(); k++ )
315 			{
316 				OptimizerSettings& rSettings( maSettings[ k ] );
317 				OUString aElementName( TKGet( TK_Template ).concat( OUString::valueOf( static_cast< sal_Int32 >( k ) ) ) );
318 				Reference< lang::XSingleServiceFactory > xChildFactory ( xSet, UNO_QUERY_THROW );
319 				Reference< container::XNameReplace > xChild( xChildFactory->createInstance(), UNO_QUERY_THROW );
320 				xNameContainer->insertByName( aElementName, Any( xChild ) );
321 
322 				OUString aPath( TKGet( TK_Settings_Templates_ ).concat( aElementName ) );
323 				Reference< container::XNameReplace > xTemplates( GetConfigurationNode( xRoot, aPath ), UNO_QUERY );
324 				rSettings.SaveSettingsToConfiguration( xTemplates );
325 			}
326             xRoot->commitChanges();
327 		}
328 		while( false );
329 	}
330 	catch( Exception& /* rException */ )
331 	{
332 
333 	}
334 }
335 
336 Reference< XInterface > ConfigurationAccess::OpenConfiguration( bool bReadOnly )
337 {
338 	Reference< XInterface > xRoot;
339 	try
340 	{
341         Reference< lang::XMultiServiceFactory > xProvider( mxMSF->getServiceManager()->createInstanceWithContext( GetConfigurationProviderServiceName(), mxMSF ), UNO_QUERY );
342         if ( xProvider.is() )
343         {
344             Sequence< Any > aCreationArguments( 2 );
345             aCreationArguments[0] = makeAny( PropertyValue(
346                 OUString( RTL_CONSTASCII_USTRINGPARAM( "nodepath" ) ), 0,
347                 makeAny( GetPathToConfigurationRoot() ),
348                 PropertyState_DIRECT_VALUE ) );
349             aCreationArguments[1] = makeAny(beans::PropertyValue(
350                 OUString( RTL_CONSTASCII_USTRINGPARAM( "lazywrite" ) ), 0, makeAny( true ),
351                 PropertyState_DIRECT_VALUE ) );
352             OUString sAccessService;
353             if ( bReadOnly )
354                 sAccessService = OUString( RTL_CONSTASCII_USTRINGPARAM(
355                     "com.sun.star.configuration.ConfigurationAccess" ) );
356             else
357                 sAccessService = OUString( RTL_CONSTASCII_USTRINGPARAM(
358                     "com.sun.star.configuration.ConfigurationUpdateAccess" ) );
359 
360             xRoot = xProvider->createInstanceWithArguments(
361                 sAccessService, aCreationArguments );
362         }
363 	}
364 	catch ( Exception& /* rException */ )
365 	{
366 	}
367 	return xRoot;
368 }
369 
370 Reference< XInterface > ConfigurationAccess::GetConfigurationNode(
371     const Reference< XInterface >& xRoot,
372     const OUString& sPathToNode )
373 {
374     Reference< XInterface > xNode;
375     try
376     {
377 		if ( !sPathToNode.getLength() )
378 			xNode = xRoot;
379 		else
380 		{
381 			Reference< XHierarchicalNameAccess > xHierarchy( xRoot, UNO_QUERY );
382 			if ( xHierarchy.is() )
383 			{
384 				xHierarchy->getByHierarchicalName( sPathToNode ) >>= xNode;
385 			}
386 		}
387     }
388     catch ( Exception& rException )
389     {
390         OSL_TRACE ("caught exception while getting configuration node %s: %s",
391             ::rtl::OUStringToOString(sPathToNode,
392                 RTL_TEXTENCODING_UTF8).getStr(),
393             ::rtl::OUStringToOString(rException.Message,
394                 RTL_TEXTENCODING_UTF8).getStr());
395     }
396     return xNode;
397 }
398 
399 com::sun::star::uno::Any ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken ) const
400 {
401 	Any aRetValue;
402 	const OptimizerSettings& rSettings( maSettings.front() );
403 	try
404 	{
405 		switch( ePropertyToken )
406 		{
407 			case TK_Name :						aRetValue <<= rSettings.maName; break;
408 			case TK_JPEGCompression :			aRetValue <<= rSettings.mbJPEGCompression; break;
409 			case TK_JPEGQuality :				aRetValue <<= rSettings.mnJPEGQuality; break;
410 			case TK_RemoveCropArea :			aRetValue <<= rSettings.mbRemoveCropArea; break;
411 			case TK_ImageResolution :			aRetValue <<= rSettings.mnImageResolution; break;
412 			case TK_EmbedLinkedGraphics :		aRetValue <<= rSettings.mbEmbedLinkedGraphics; break;
413 			case TK_OLEOptimization :			aRetValue <<= rSettings.mbOLEOptimization; break;
414 			case TK_OLEOptimizationType :		aRetValue <<= rSettings.mnOLEOptimizationType; break;
415 			case TK_DeleteUnusedMasterPages :	aRetValue <<= rSettings.mbDeleteUnusedMasterPages; break;
416 			case TK_DeleteHiddenSlides :		aRetValue <<= rSettings.mbDeleteHiddenSlides; break;
417 			case TK_DeleteNotesPages :			aRetValue <<= rSettings.mbDeleteNotesPages; break;
418 			case TK_SaveAs :					aRetValue <<= rSettings.mbSaveAs; break;
419 			case TK_SaveAsURL :					aRetValue <<= rSettings.maSaveAsURL; break;
420 			case TK_FilterName :				aRetValue <<= rSettings.maFilterName; break;
421 			case TK_OpenNewDocument :			aRetValue <<= rSettings.mbOpenNewDocument; break;
422 			case TK_EstimatedFileSize :			aRetValue <<= rSettings.mnEstimatedFileSize; break;
423 			default:
424 				break;
425 		}
426 	}
427 	catch( Exception& /* rException */ )
428 	{
429 	}
430 	return aRetValue;
431 }
432 
433 void ConfigurationAccess::SetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const com::sun::star::uno::Any& rValue )
434 {
435 	OptimizerSettings& rSettings( maSettings.front() );
436 	try
437 	{
438 		switch( ePropertyToken )
439 		{
440 			case TK_Name :						rValue >>= rSettings.maName; break;
441 			case TK_JPEGCompression :			rValue >>= rSettings.mbJPEGCompression; break;
442 			case TK_JPEGQuality :				rValue >>= rSettings.mnJPEGQuality; break;
443 			case TK_RemoveCropArea :			rValue >>= rSettings.mbRemoveCropArea; break;
444 			case TK_ImageResolution :			rValue >>= rSettings.mnImageResolution; break;
445 			case TK_EmbedLinkedGraphics :		rValue >>= rSettings.mbEmbedLinkedGraphics; break;
446 			case TK_OLEOptimization :			rValue >>= rSettings.mbOLEOptimization; break;
447 			case TK_OLEOptimizationType :		rValue >>= rSettings.mnOLEOptimizationType; break;
448 			case TK_DeleteUnusedMasterPages :	rValue >>= rSettings.mbDeleteUnusedMasterPages; break;
449 			case TK_DeleteHiddenSlides :		rValue >>= rSettings.mbDeleteHiddenSlides; break;
450 			case TK_DeleteNotesPages :			rValue >>= rSettings.mbDeleteNotesPages; break;
451 			case TK_CustomShowName :			rValue >>= rSettings.maCustomShowName; break;
452 			case TK_SaveAs :					rValue >>= rSettings.mbSaveAs; break;
453 			case TK_SaveAsURL :					rValue >>= rSettings.maSaveAsURL; break;
454 			case TK_FilterName :				rValue >>= rSettings.maFilterName; break;
455 			case TK_OpenNewDocument :			rValue >>= rSettings.mbOpenNewDocument; break;
456 			case TK_EstimatedFileSize :			rValue >>= rSettings.mnEstimatedFileSize; break;
457 			default:
458 				break;
459 		}
460 	}
461 	catch( Exception& /* rException */ )
462 	{
463 	}
464 }
465 
466 sal_Bool ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Bool bDefault ) const
467 {
468 	sal_Bool bRetValue = bDefault;
469 	if ( ! ( GetConfigProperty( ePropertyToken ) >>= bRetValue ) )
470 		bRetValue = bDefault;
471 	return bRetValue;
472 }
473 
474 sal_Int16 ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Int16 nDefault ) const
475 {
476 	sal_Int16 nRetValue = nDefault;
477 	if ( ! ( GetConfigProperty( ePropertyToken ) >>= nRetValue ) )
478 		nRetValue = nDefault;
479 	return nRetValue;
480 }
481 
482 sal_Int32 ConfigurationAccess::GetConfigProperty( const PPPOptimizerTokenEnum ePropertyToken, const sal_Int32 nDefault ) const
483 {
484 	sal_Int32 nRetValue = nDefault;
485 	if ( ! ( GetConfigProperty( ePropertyToken ) >>= nRetValue ) )
486 		nRetValue = nDefault;
487 	return nRetValue;
488 }
489 
490 Sequence< PropertyValue > ConfigurationAccess::GetConfigurationSequence()
491 {
492 	Sequence< PropertyValue > aRet( 15 );
493 	OptimizerSettings& rSettings( maSettings.front() );
494 	aRet[ 0 ].Name = TKGet( TK_JPEGCompression );
495 	aRet[ 0 ].Value= Any( rSettings.mbJPEGCompression );
496 	aRet[ 1 ].Name = TKGet( TK_JPEGQuality );
497 	aRet[ 1 ].Value= Any( rSettings.mnJPEGQuality );
498 	aRet[ 2 ].Name = TKGet( TK_RemoveCropArea );
499 	aRet[ 2 ].Value= Any( rSettings.mbRemoveCropArea );
500 	aRet[ 3 ].Name = TKGet( TK_ImageResolution );
501 	aRet[ 3 ].Value= Any( rSettings.mnImageResolution );
502 	aRet[ 4 ].Name = TKGet( TK_EmbedLinkedGraphics );
503 	aRet[ 4 ].Value= Any( rSettings.mbEmbedLinkedGraphics );
504 	aRet[ 5 ].Name = TKGet( TK_OLEOptimization );
505 	aRet[ 5 ].Value= Any( rSettings.mbOLEOptimization );
506 	aRet[ 6 ].Name = TKGet( TK_OLEOptimizationType );
507 	aRet[ 6 ].Value= Any( rSettings.mnOLEOptimizationType );
508 	aRet[ 7 ].Name = TKGet( TK_DeleteUnusedMasterPages );
509 	aRet[ 7 ].Value= Any( rSettings.mbDeleteUnusedMasterPages );
510 	aRet[ 8 ].Name = TKGet( TK_DeleteHiddenSlides );
511 	aRet[ 8 ].Value= Any( rSettings.mbDeleteHiddenSlides );
512 	aRet[ 9 ].Name = TKGet( TK_DeleteNotesPages );
513 	aRet[ 9 ].Value= Any( rSettings.mbDeleteNotesPages );
514 	aRet[ 10].Name = TKGet( TK_CustomShowName );
515 	aRet[ 10].Value= Any( rSettings.maCustomShowName );
516 	aRet[ 11].Name = TKGet( TK_SaveAsURL );
517 	aRet[ 11].Value= Any( rSettings.maSaveAsURL );
518 	aRet[ 12].Name = TKGet( TK_FilterName );
519 	aRet[ 12].Value= Any( rSettings.maFilterName );
520 	aRet[ 13].Name = TKGet( TK_OpenNewDocument );
521 	aRet[ 13].Value= Any( rSettings.mbOpenNewDocument );
522 	aRet[ 14].Name = TKGet( TK_EstimatedFileSize );
523 	aRet[ 14].Value= Any( rSettings.mnEstimatedFileSize );
524 	return aRet;
525 }
526 
527 std::vector< OptimizerSettings >::iterator ConfigurationAccess::GetOptimizerSettingsByName( const rtl::OUString& rName )
528 {
529 	std::vector< OptimizerSettings >::iterator aIter( maSettings.begin() + 1 );
530 	while ( aIter != maSettings.end() )
531 	{
532 		if ( aIter->maName == rName )
533 			break;
534 		aIter++;
535 	}
536 	return aIter;
537 }
538