xref: /trunk/main/sdext/source/minimizer/optimizerdialog.cxx (revision 910823ae669d9158f41049c6cb73cb1e2d268347)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sdext.hxx"
26 
27 #include "optimizerdialog.hxx"
28 #include "fileopendialog.hxx"
29 #include <com/sun/star/ui/dialogs/ExecutableDialogResults.hpp>
30 #include <com/sun/star/ucb/XSimpleFileAccess.hpp>
31 #include <com/sun/star/io/XInputStream.hpp>
32 #ifndef _COM_SUN_STAR_UTIL_XCloseBroadcaster_HPP_
33 #include <com/sun/star/util/XCloseBroadcaster.hpp>
34 #endif
35 #include <com/sun/star/frame/XComponentLoader.hpp>
36 #include <com/sun/star/frame/XLayoutManager.hpp>
37 #include <com/sun/star/graphic/XGraphicProvider.hpp>
38 #include <osl/time.h>
39 
40 #include "minimizer.hrc"
41 #include "helpid.hrc"
42 
43 #define URL_GRAPHIC_REPO        "private:graphicrepository"
44 #define IMAGE_ROADMAP           URL_GRAPHIC_REPO "/minimizer/minimizepresi_80.png"
45 #define IMAGE_ROADMAP_HC        URL_GRAPHIC_REPO "/minimizer/minimizepresi_80.png"
46 
47 // -------------------
48 // - OPTIMIZERDIALOG -
49 // -------------------
50 
51 using namespace ::com::sun::star::io;
52 using namespace ::com::sun::star::graphic;
53 using namespace ::com::sun::star::ui;
54 using namespace ::com::sun::star::awt;
55 using namespace ::com::sun::star::ucb;
56 using namespace ::com::sun::star::uno;
57 using namespace ::com::sun::star::util;
58 using namespace ::com::sun::star::lang;
59 using namespace ::com::sun::star::frame;
60 using namespace ::com::sun::star::beans;
61 using namespace ::com::sun::star::script;
62 using namespace ::com::sun::star::container;
63 
64 using ::rtl::OUString;
65 
66 // -----------------------------------------------------------------------------
67 
68 void OptimizerDialog::InitDialog()
69 {
70    // setting the dialog properties
71     OUString pNames[] = {
72         TKGet( TK_Closeable ),
73         TKGet( TK_Height ),
74         TKGet( TK_HelpURL ),
75         TKGet( TK_Moveable ),
76         TKGet( TK_PositionX ),
77         TKGet( TK_PositionY ),
78         TKGet( TK_Title ),
79         TKGet( TK_Width ) };
80 
81     Any pValues[] = {
82         Any( sal_True ),
83         Any( sal_Int32( DIALOG_HEIGHT ) ),
84         Any( HID( HID_SDEXT_MINIMIZER_WIZ_DLG ) ),
85         Any( sal_True ),
86         Any( sal_Int32( 200 ) ),
87         Any( sal_Int32( 52 ) ),
88         Any( getString( STR_PRESENTATION_MINIMIZER ) ),
89         Any( sal_Int32( OD_DIALOG_WIDTH ) ) };
90 
91     sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString );
92 
93     Sequence< rtl::OUString >   aNames( pNames, nCount );
94     Sequence< Any >             aValues( pValues, nCount );
95 
96     mxDialogModelMultiPropertySet->setPropertyValues( aNames, aValues );
97 }
98 
99 // -----------------------------------------------------------------------------
100 
101 void OptimizerDialog::InitRoadmap()
102 {
103     try
104     {
105         OUString pNames[] = {
106             TKGet( TK_Height ),
107             TKGet( TK_PositionX ),
108             TKGet( TK_PositionY ),
109             TKGet( TK_Step ),
110             TKGet( TK_TabIndex ),
111             TKGet( TK_Width ) };
112 
113         Any pValues[] = {
114             Any( sal_Int32( DIALOG_HEIGHT - 26 ) ),
115             Any( sal_Int32( 0 ) ),
116             Any( sal_Int32( 0 ) ),
117             Any( sal_Int32( 0 ) ),
118             Any( mnTabIndex++ ),
119             Any( sal_Int32( 85 ) ) };
120 
121         sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString );
122 
123         Sequence< rtl::OUString >   aNames( pNames, nCount );
124         Sequence< Any >             aValues( pValues, nCount );
125 
126         mxRoadmapControlModel = insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlRoadmapModel" ) ),
127                                                               TKGet( TK_rdmNavi ), aNames, aValues  );
128 
129         Reference< XPropertySet > xPropertySet( mxRoadmapControlModel, UNO_QUERY_THROW );
130         xPropertySet->setPropertyValue( TKGet( TK_Name ), Any( TKGet( TK_rdmNavi ) ) );
131         mxRoadmapControl = mxDialogControlContainer->getControl( TKGet( TK_rdmNavi ) );
132         InsertRoadmapItem( 0, sal_True, getString( STR_INTRODUCTION ), ITEM_ID_INTRODUCTION );
133         InsertRoadmapItem( 1, sal_True, getString( STR_SLIDES ), ITEM_ID_SLIDES );
134         InsertRoadmapItem( 2, sal_True, getString( STR_IMAGE_OPTIMIZATION ), ITEM_ID_GRAPHIC_OPTIMIZATION );
135         InsertRoadmapItem( 3, sal_True, getString( STR_OLE_OBJECTS ), ITEM_ID_OLE_OPTIMIZATION );
136         InsertRoadmapItem( 4, sal_True, getString( STR_SUMMARY ), ITEM_ID_SUMMARY );
137 
138         rtl::OUString sBitmap(
139             isHighContrast() ?
140             rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMAGE_ROADMAP_HC ) ) :
141             rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( IMAGE_ROADMAP ) ) );
142 
143         xPropertySet->setPropertyValue( TKGet( TK_ImageURL ), Any( sBitmap ) );
144         xPropertySet->setPropertyValue( TKGet( TK_Activated ), Any( (sal_Bool)sal_True ) );
145         xPropertySet->setPropertyValue( TKGet( TK_Complete ), Any( (sal_Bool)sal_True ) );
146         xPropertySet->setPropertyValue( TKGet( TK_CurrentItemID ), Any( (sal_Int16)ITEM_ID_INTRODUCTION ) );
147         xPropertySet->setPropertyValue( TKGet( TK_Text ), Any( getString( STR_STEPS ) ) );
148     }
149     catch( Exception& )
150     {
151     }
152 }
153 
154 // -----------------------------------------------------------------------------
155 
156 void OptimizerDialog::InsertRoadmapItem( const sal_Int32 nIndex, const sal_Bool bEnabled, const rtl::OUString& rLabel, const sal_Int32 nItemID )
157 {
158     try
159     {
160         Reference< XSingleServiceFactory > xSFRoadmap( mxRoadmapControlModel, UNO_QUERY_THROW );
161         Reference< XIndexContainer > aIndexContainerRoadmap( mxRoadmapControlModel, UNO_QUERY_THROW );
162         Reference< XInterface > xRoadmapItem( xSFRoadmap->createInstance(), UNO_QUERY_THROW );
163         Reference< XPropertySet > xPropertySet( xRoadmapItem, UNO_QUERY_THROW );
164         xPropertySet->setPropertyValue( TKGet( TK_Label ), Any( rLabel ) );
165         xPropertySet->setPropertyValue( TKGet( TK_Enabled ), Any( bEnabled ) );
166         xPropertySet->setPropertyValue( TKGet( TK_ID ), Any( nItemID ) );
167         aIndexContainerRoadmap->insertByIndex( nIndex, Any( xRoadmapItem ) );
168     }
169     catch( Exception& )
170     {
171 
172     }
173 }
174 
175 // -----------------------------------------------------------------------------
176 
177 void OptimizerDialog::UpdateConfiguration()
178 {
179     sal_Int16   nInt16 = 0;
180     OUString    aString;
181     Any         aAny;
182 
183     Sequence< sal_Int16 > aSelectedItems;
184     Sequence< OUString > aStringItemList;
185 
186     // page0
187     aAny = getControlProperty( TKGet( TK_ListBox0Pg0 ), TKGet( TK_SelectedItems ) );
188     if ( aAny >>= aSelectedItems )
189     {
190         if ( aSelectedItems.getLength() )
191         {
192             sal_Int16 nSelectedItem = aSelectedItems[ 0 ];
193             aAny = getControlProperty( TKGet( TK_ListBox0Pg0 ), TKGet( TK_StringItemList ) );
194             if ( aAny >>= aStringItemList )
195             {
196                 if ( aStringItemList.getLength() > nSelectedItem )
197                     SetConfigProperty( TK_Name, Any( aStringItemList[ nSelectedItem ] ) );
198             }
199         }
200     }
201 
202     aAny = getControlProperty( TKGet( TK_CheckBox3Pg3 ), TKGet( TK_State ) );
203     if ( aAny >>= nInt16 )
204     {
205         if ( nInt16 )
206         {
207             aAny = getControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_SelectedItems ) );
208             if ( aAny >>= aSelectedItems )
209             {
210                 if ( aSelectedItems.getLength() )
211                 {
212                     sal_Int16 nSelectedItem = aSelectedItems[ 0 ];
213                     aAny = getControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_StringItemList ) );
214                     if ( aAny >>= aStringItemList )
215                     {
216                         if ( aStringItemList.getLength() > nSelectedItem )
217                             SetConfigProperty( TK_CustomShowName, Any( aStringItemList[ nSelectedItem ] ) );
218                     }
219                 }
220             }
221         }
222     }
223 }
224 
225 // -----------------------------------------------------------------------------
226 
227 OptimizerDialog::OptimizerDialog(
228     const Reference< XComponentContext > &rxContext,
229     const Reference< XFrame > &rxFrame,
230     const Reference< XWindowPeer >& rxParent )
231     : UnoDialog( rxContext, rxParent )
232     , ConfigurationAccess( rxContext, NULL )
233     , mxFrame( rxFrame )
234     , mnCurrentStep( 0 )
235     , mnTabIndex( 0 )
236 {
237     OSL_TRACE("OptimizerDialog::OptimizerDialog");
238     OSL_ENSURE( mxFrame.is(), "OptimizerDialog: no XFrame!" );
239     Reference< XController > xController( mxFrame->getController() );
240     mxModel = xController->getModel();
241     Reference< XStorable> xStorable( mxModel, UNO_QUERY_THROW );
242     mbIsReadonly = xStorable->isReadonly();
243 
244     InitDialog();
245     InitRoadmap();
246     InitNavigationBar();
247     InitPage0();
248     InitPage1();
249     InitPage2();
250     InitPage3();
251     InitPage4();
252     ActivatePage( 0 );
253 
254     OptimizationStats aStats;
255     aStats.InitializeStatusValuesFromDocument( mxModel );
256     Sequence< PropertyValue > aStatusSequence( aStats.GetStatusSequence() );
257     UpdateStatus( aStatusSequence );
258 
259     centerDialog();
260 }
261 
262 // -----------------------------------------------------------------------------
263 
264 OptimizerDialog::~OptimizerDialog()
265 {
266     OSL_TRACE("OptimizerDialog::~OptimizerDialog");
267     // not saving configuration if the dialog has been finished via cancel or close window
268     if ( mbStatus )
269         SaveConfiguration();
270 
271     Reference< XComponent > xComponent( mxDialog, UNO_QUERY );
272     if ( xComponent.is() )
273     {
274         OSL_TRACE("OptimizerDialog::~OptimizerDialog - disposing dialog!");
275         xComponent->dispose();
276     }
277 }
278 
279 
280 void SAL_CALL OptimizerDialog::statusChanged(
281     const ::com::sun::star::frame::FeatureStateEvent& aState )
282 throw (::com::sun::star::uno::RuntimeException)
283 {
284     Sequence< PropertyValue > aArguments;
285     if ( ( aState.State >>= aArguments ) && aArguments.getLength() )
286         UpdateStatus( aArguments );
287 }
288 
289 void SAL_CALL OptimizerDialog::disposing(
290     const ::com::sun::star::lang::EventObject& /*aSource*/ )
291 throw (::com::sun::star::uno::RuntimeException)
292 {}
293 
294 // -----------------------------------------------------------------------------
295 
296 sal_Bool OptimizerDialog::execute()
297 {
298     Reference< XItemEventBroadcaster > maRoadmapBroadcaster( mxRoadmapControl, UNO_QUERY_THROW );
299     maRoadmapBroadcaster->addItemListener( this );
300     UnoDialog::execute();
301     UpdateConfiguration();          // taking actual control settings for the configuration
302     maRoadmapBroadcaster->removeItemListener( this );
303     return mbStatus;
304 }
305 
306 // -----------------------------------------------------------------------------
307 
308 void OptimizerDialog::SwitchPage( sal_Int16 nNewStep )
309 {
310     if ( ( nNewStep != mnCurrentStep ) && ( ( nNewStep <= MAX_STEP ) || ( nNewStep >= 0 ) ) )
311     {
312         sal_Int16 nOldStep = mnCurrentStep;
313         if ( nNewStep == 0 )
314             disableControl( TKGet( TK_btnNavBack ) );
315         else if ( nOldStep == 0 )
316             enableControl( TKGet( TK_btnNavBack ) );
317 
318         if ( nNewStep == MAX_STEP )
319             disableControl( TKGet( TK_btnNavNext ) );
320         else if ( nOldStep == MAX_STEP )
321             enableControl( TKGet( TK_btnNavNext ) );
322 
323         setControlProperty( TKGet( TK_rdmNavi ), TKGet( TK_CurrentItemID ), Any( nNewStep ) );
324 
325         DeactivatePage( nOldStep );
326         UpdateControlStates( nNewStep );
327 
328         ActivatePage( nNewStep );
329         mnCurrentStep = nNewStep;
330     }
331 }
332 
333 void OptimizerDialog::UpdateControlStates( sal_Int16 nPage )
334 {
335     switch( nPage )
336     {
337         case 0 : UpdateControlStatesPage0(); break;
338         case 1 : UpdateControlStatesPage1(); break;
339         case 2 : UpdateControlStatesPage2(); break;
340         case 3 : UpdateControlStatesPage3(); break;
341         case 4 : UpdateControlStatesPage4(); break;
342         default:
343         {
344             UpdateControlStatesPage0();
345             UpdateControlStatesPage1();
346             UpdateControlStatesPage2();
347             UpdateControlStatesPage3();
348             UpdateControlStatesPage4();
349         }
350     }
351 }
352 
353 // -----------------------------------------------------------------------------
354 
355 rtl::OUString OptimizerDialog::GetSelectedString( const PPPOptimizerTokenEnum eToken )
356 {
357     OUString aSelectedItem;
358     Sequence< sal_Int16 > sSelectedItems;
359     Sequence< OUString >  sItemList;
360 
361     if ( ( getControlProperty( TKGet( eToken ), TKGet( TK_SelectedItems ) ) >>= sSelectedItems ) &&
362             ( getControlProperty( TKGet( eToken ), TKGet( TK_StringItemList ) ) >>= sItemList ) )
363     {
364         if ( sSelectedItems.getLength() == 1 )
365         {
366             sal_Int16 nSelectedItem = sSelectedItems[ 0 ];
367             if ( nSelectedItem < sItemList.getLength() )
368                 aSelectedItem = sItemList[ nSelectedItem ];
369         }
370     }
371     return aSelectedItem;
372 }
373 
374 // -----------------------------------------------------------------------------
375 
376 void OptimizerDialog::UpdateStatus( const com::sun::star::uno::Sequence< com::sun::star::beans::PropertyValue >& rStatus )
377 {
378     if ( mxReschedule.is() )
379     {
380         maStats.InitializeStatusValues( rStatus );
381         const Any* pVal( maStats.GetStatusValue( TK_Status ) );
382         if ( pVal )
383         {
384             rtl::OUString sStatus;
385             if ( *pVal >>= sStatus )
386             {
387                 setControlProperty( TKGet( TK_FixedText1Pg4 ), TKGet( TK_Enabled ), Any( sal_True ) );
388                 setControlProperty( TKGet( TK_FixedText1Pg4 ), TKGet( TK_Label ), Any( sStatus ) );
389             }
390         }
391         pVal = maStats.GetStatusValue( TK_Progress );
392         if ( pVal )
393         {
394             sal_Int32 nProgress = 0;
395             if ( *pVal >>= nProgress )
396                 setControlProperty( TKGet( TK_Progress ), TKGet( TK_ProgressValue ), Any( nProgress ) );
397         }
398         pVal = maStats.GetStatusValue( TK_OpenNewDocument );
399         if ( pVal )
400             SetConfigProperty( TK_OpenNewDocument, *pVal );
401 
402         mxReschedule->reschedule();
403     }
404 }
405 
406 // -----------------------------------------------------------------------------
407 
408 void OptimizerDialog::itemStateChanged( const ItemEvent& Event )
409     throw ( RuntimeException )
410 {
411     try
412     {
413         sal_Int16 nState;
414         OUString aControlName;
415         Reference< XControl > xControl;
416         Any aSource( Event.Source );
417         if ( aSource >>= xControl )
418         {
419             Reference< XPropertySet > xPropertySet( xControl->getModel(), UNO_QUERY_THROW );
420             xPropertySet->getPropertyValue( TKGet( TK_Name ) ) >>= aControlName;
421             PPPOptimizerTokenEnum eControl( TKGet( aControlName ) );
422             switch( eControl )
423             {
424                 case TK_rdmNavi :
425                 {
426                     SwitchPage( static_cast< sal_Int16 >( Event.ItemId ) );
427                 }
428                 break;
429                 case TK_CheckBox1Pg1 :
430                 {
431                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
432                         SetConfigProperty( TK_RemoveCropArea, Any( nState != 0 ) );
433                 }
434                 break;
435                 case TK_CheckBox2Pg1 :
436                 {
437                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
438                         SetConfigProperty( TK_EmbedLinkedGraphics, Any( nState != 0 ) );
439                 }
440                 break;
441                 case TK_CheckBox0Pg2 :
442                 {
443                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
444                     {
445                         SetConfigProperty( TK_OLEOptimization, Any( nState != 0 ) );
446                         setControlProperty( TKGet( TK_RadioButton0Pg2 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
447                         setControlProperty( TKGet( TK_RadioButton1Pg2 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
448                     }
449                 }
450                 break;
451                 case TK_RadioButton0Pg1 :
452                 {
453                     sal_Int16 nInt16 = 0;
454                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nInt16 )
455                     {
456                         nInt16 ^= 1;
457                         SetConfigProperty( TK_JPEGCompression, Any( nInt16 != 0 ) );
458                         setControlProperty( TKGet( TK_FixedText1Pg1 ), TKGet( TK_Enabled ), Any( nInt16 != 0 ) );
459                         setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_Enabled ), Any( nInt16 != 0 ) );
460                     }
461                 }
462                 break;
463                 case TK_RadioButton1Pg1 :
464                 {
465                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
466                     {
467                         SetConfigProperty( TK_JPEGCompression, Any( nState != 0 ) );
468                         setControlProperty( TKGet( TK_FixedText1Pg1 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
469                         setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
470                     }
471                 }
472                 break;
473                 case TK_RadioButton0Pg2 :
474                 {
475                     sal_Int16 nInt16;
476                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nInt16 )
477                     {
478                         nInt16 ^= 1;
479                         SetConfigProperty( TK_OLEOptimizationType, Any( nInt16 ) );
480                     }
481                 }
482                 break;
483                 case TK_RadioButton1Pg2 :
484                 {
485                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
486                         SetConfigProperty( TK_OLEOptimizationType, Any( nState ) );
487                 }
488                 break;
489                 case TK_CheckBox0Pg3 :
490                 {
491                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
492                         SetConfigProperty( TK_DeleteUnusedMasterPages, Any( nState != 0 ) );
493                 }
494                 break;
495                 case TK_CheckBox1Pg3 :
496                 {
497                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
498                         SetConfigProperty( TK_DeleteNotesPages, Any( nState != 0 ) );
499                 }
500                 break;
501                 case TK_CheckBox2Pg3 :
502                 {
503                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
504                         SetConfigProperty( TK_DeleteHiddenSlides, Any( nState != 0 ) );
505                 }
506                 break;
507                 case TK_CheckBox3Pg3 :
508                 {
509                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
510                         setControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
511                 }
512                 break;
513                 case TK_CheckBox1Pg4 :
514                 {
515                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
516                         setControlProperty( TKGet( TK_ComboBox0Pg4 ), TKGet( TK_Enabled ), Any( nState != 0 ) );
517                 }
518                 break;
519                 case TK_RadioButton0Pg4 :
520                 case TK_RadioButton1Pg4 :
521                 {
522                     if ( xPropertySet->getPropertyValue( TKGet( TK_State ) ) >>= nState )
523                         SetConfigProperty( TK_SaveAs, Any( eControl == TK_RadioButton1Pg4 ? nState != 0 : nState == 0 ) );
524                 }
525                 break;
526                 default:
527                 break;
528             }
529         }
530     }
531     catch ( Exception& )
532     {
533     }
534 }
535 
536 // -----------------------------------------------------------------------------
537 
538 void OptimizerDialog::actionPerformed( const ActionEvent& rEvent )
539     throw ( com::sun::star::uno::RuntimeException )
540 {
541     switch( TKGet( rEvent.ActionCommand ) )
542     {
543         case TK_btnNavBack :    SwitchPage( mnCurrentStep - 1 ); break;
544         case TK_btnNavNext :    SwitchPage( mnCurrentStep + 1 ); break;
545         case TK_btnNavFinish :
546         {
547             UpdateConfiguration();
548 
549             SwitchPage( ITEM_ID_SUMMARY );
550             DisablePage( ITEM_ID_SUMMARY );
551             setControlProperty( TKGet( TK_btnNavHelp ), TKGet( TK_Enabled ), Any( sal_False ) );
552             setControlProperty( TKGet( TK_btnNavBack ), TKGet( TK_Enabled ), Any( sal_False ) );
553             setControlProperty( TKGet( TK_btnNavNext ), TKGet( TK_Enabled ), Any( sal_False ) );
554             setControlProperty( TKGet( TK_btnNavFinish ), TKGet( TK_Enabled ), Any( sal_False ) );
555             setControlProperty( TKGet( TK_btnNavCancel ), TKGet( TK_Enabled ), Any( sal_False ) );
556             setControlProperty( TKGet( TK_FixedText0Pg4 ), TKGet( TK_Enabled ), Any( sal_True ) );
557 
558             // check if we have to open the FileDialog
559             sal_Bool    bSuccessfullyExecuted = sal_True;
560             sal_Int16   nInt16 = 0;
561             getControlProperty( TKGet( TK_RadioButton1Pg4 ), TKGet( TK_State ) ) >>= nInt16;
562             if ( nInt16 )
563             {
564                 rtl::OUString aSaveAsURL;
565                 FileOpenDialog aFileOpenDialog( mxContext, Reference< XWindow >( mxParent, UNO_QUERY ) );
566 
567                 // generating default file name
568                 Reference< XStorable > xStorable( mxModel, UNO_QUERY );
569                 if ( xStorable.is() && xStorable->hasLocation() )
570                 {
571                     rtl::OUString aLocation( xStorable->getLocation() );
572                     if ( aLocation.getLength() )
573                     {
574                         sal_Int32 nIndex = aLocation.lastIndexOf( '/', aLocation.getLength() - 1 );
575                         if ( nIndex >= 0 )
576                         {
577                             if ( nIndex < aLocation.getLength() - 1 )
578                                 aLocation = aLocation.copy( nIndex + 1 );
579 
580                             // remove extension
581                             nIndex = aLocation.lastIndexOf( '.', aLocation.getLength() - 1 );
582                             if ( nIndex >= 0 )
583                                 aLocation = aLocation.copy( 0, nIndex );
584 
585                             // adding .mini
586                             aLocation = aLocation.concat( OUString::createFromAscii( ".mini" ) );
587                             aFileOpenDialog.setDefaultName( aLocation );
588                         }
589                     }
590                 }
591                 sal_Bool bDialogExecuted = aFileOpenDialog.execute() == dialogs::ExecutableDialogResults::OK;
592                 if ( bDialogExecuted )
593                 {
594                     aSaveAsURL = aFileOpenDialog.getURL();
595                     SetConfigProperty( TK_SaveAsURL, Any( aSaveAsURL ) );
596                     SetConfigProperty( TK_FilterName, Any( aFileOpenDialog.getFilterName() ) );
597                 }
598                 if ( !aSaveAsURL.getLength() )
599                 {
600                     // something goes wrong...
601                     bSuccessfullyExecuted = sal_False;
602                 }
603 
604                 // waiting for 500ms
605                 if ( mxReschedule.is() )
606                 {
607                     mxReschedule->reschedule();
608                     for ( sal_uInt32 i = osl_getGlobalTimer(); ( i + 500 ) > ( osl_getGlobalTimer() ); )
609                     mxReschedule->reschedule();
610                 }
611             }
612             if ( bSuccessfullyExecuted )
613             {   // now check if we have to store a session template
614                 nInt16 = 0;
615                 OUString aSettingsName;
616                 getControlProperty( TKGet( TK_CheckBox1Pg4 ), TKGet( TK_State ) ) >>= nInt16;
617                 getControlProperty( TKGet( TK_ComboBox0Pg4 ), TKGet( TK_Text ) ) >>= aSettingsName;
618                 if ( nInt16 && aSettingsName.getLength() )
619                 {
620                     std::vector< OptimizerSettings >::iterator aIter( GetOptimizerSettingsByName( aSettingsName ) );
621                     std::vector< OptimizerSettings >& rSettings( GetOptimizerSettings() );
622                     OptimizerSettings aNewSettings( rSettings[ 0 ] );
623                     aNewSettings.maName = aSettingsName;
624                     if ( aIter == rSettings.end() )
625                         rSettings.push_back( aNewSettings );
626                     else
627                         *aIter = aNewSettings;
628                 }
629             }
630             if ( bSuccessfullyExecuted )
631             {
632                 Sequence< Any > aArgs( 1 );
633                 aArgs[ 0 ] <<= mxFrame;
634 
635                 Reference < XDispatch > xDispatch( mxContext->getServiceManager()->createInstanceWithArgumentsAndContext(
636                     OUString::createFromAscii( "com.sun.star.comp.PPPOptimizer" ), aArgs, mxContext ), UNO_QUERY );
637 
638                 URL aURL;
639                 aURL.Protocol = OUString( RTL_CONSTASCII_USTRINGPARAM( "vnd.com.sun.star.comp.PPPOptimizer:" ) );
640                 aURL.Path = OUString( RTL_CONSTASCII_USTRINGPARAM( "optimize" ) );
641 
642                 Sequence< PropertyValue > lArguments( 3 );
643                 lArguments[ 0 ].Name = TKGet( TK_Settings );
644                 lArguments[ 0 ].Value <<= GetConfigurationSequence();
645                 lArguments[ 1 ].Name = TKGet( TK_StatusListener );
646                 lArguments[ 1 ].Value <<= Reference< XStatusListener >( this );
647                 lArguments[ 2 ].Name = TKGet( TK_ParentWindow );
648                 lArguments[ 2 ].Value <<= mxDialogWindowPeer;
649 
650                 if( xDispatch.is() )
651                     xDispatch->dispatch( aURL, lArguments );
652 
653                 endExecute( bSuccessfullyExecuted );
654             }
655             else
656             {
657                 setControlProperty( TKGet( TK_btnNavHelp ), TKGet( TK_Enabled ), Any( sal_True ) );
658                 setControlProperty( TKGet( TK_btnNavBack ), TKGet( TK_Enabled ), Any( sal_True ) );
659                 setControlProperty( TKGet( TK_btnNavNext ), TKGet( TK_Enabled ), Any( sal_False ) );
660                 setControlProperty( TKGet( TK_btnNavFinish ), TKGet( TK_Enabled ), Any( sal_True ) );
661                 setControlProperty( TKGet( TK_btnNavCancel ), TKGet( TK_Enabled ), Any( sal_True ) );
662                 EnablePage( ITEM_ID_SUMMARY );
663             }
664         }
665         break;
666         case TK_btnNavCancel :  endExecute( sal_False ); break;
667         case TK_Button0Pg0 :    // delete configuration
668         {
669             OUString aSelectedItem( GetSelectedString( TK_ListBox0Pg0 ) );
670             if ( aSelectedItem.getLength() )
671             {
672                 std::vector< OptimizerSettings >::iterator aIter( GetOptimizerSettingsByName( aSelectedItem ) );
673                 std::vector< OptimizerSettings >& rList( GetOptimizerSettings() );
674                 if ( aIter != rList.end() )
675                 {
676                     rList.erase( aIter );
677                     UpdateControlStates();
678                 }
679             }
680         }
681         break;
682         default:
683         {
684             Reference< XControl > xControl( rEvent.Source, UNO_QUERY );
685             if ( xControl.is() )
686             {
687                 OUString aName;
688                 Reference< XPropertySet > xProps( xControl->getModel(), UNO_QUERY );
689                 xProps->getPropertyValue( TKGet( TK_Name ) ) >>= aName;
690                 if ( TKGet( aName ) == TK_ListBox0Pg0 )
691                 {
692                     if ( rEvent.ActionCommand.getLength() )
693                     {
694                         std::vector< OptimizerSettings >::iterator aIter( GetOptimizerSettingsByName( rEvent.ActionCommand ) );
695                         std::vector< OptimizerSettings >& rList( GetOptimizerSettings() );
696                         if ( aIter != rList.end() )
697                             rList[ 0 ] = *aIter;
698                     }
699                     UpdateControlStates();
700                 }
701             }
702         }
703             break;
704     }
705 }
706 
707 // -----------------------------------------------------------------------------
708 
709 void OptimizerDialog::textChanged( const TextEvent& rEvent )
710     throw ( com::sun::star::uno::RuntimeException )
711 {
712     Reference< XSpinField > xFormattedField( rEvent.Source, UNO_QUERY );
713     if ( xFormattedField.is() )
714     {
715         double fDouble = 0;
716         Any aAny = getControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ) );
717         if ( aAny >>= fDouble )
718             SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)fDouble ) );
719         return;
720     }
721 
722     Reference< XComboBox > xComboBox( rEvent.Source, UNO_QUERY );
723     if ( xComboBox.is() )
724     {
725         rtl::OUString aString;
726         Any aAny = getControlProperty( TKGet( TK_ComboBox0Pg1 ), TKGet( TK_Text ) );
727         if ( aAny >>= aString )
728         {
729             sal_Int32 nI0, nI1, nI2, nI3, nI4;
730             nI0 = nI1 = nI2 = nI3 = nI4 = 0;
731 
732             if ( getString( STR_IMAGE_RESOLUTION_0 ).getToken( 1, ';', nI0 ) == aString )
733                 aString = getString( STR_IMAGE_RESOLUTION_0 ).getToken( 0, ';', nI4 );
734             else if ( getString( STR_IMAGE_RESOLUTION_1 ).getToken( 1, ';', nI1 ) == aString )
735                 aString = getString( STR_IMAGE_RESOLUTION_1 ).getToken( 0, ';', nI4 );
736             else if ( getString( STR_IMAGE_RESOLUTION_2 ).getToken( 1, ';', nI2 ) == aString )
737                 aString = getString( STR_IMAGE_RESOLUTION_2 ).getToken( 0, ';', nI4 );
738             else if ( getString( STR_IMAGE_RESOLUTION_3 ).getToken( 1, ';', nI3 ) == aString )
739                 aString = getString( STR_IMAGE_RESOLUTION_3 ).getToken( 0, ';', nI4 );
740 
741             SetConfigProperty( TK_ImageResolution, Any( aString.toInt32() ) );
742         }
743     }
744 }
745 
746 // -----------------------------------------------------------------------------
747 
748 void OptimizerDialog::up( const SpinEvent& /* rEvent */ )
749     throw ( com::sun::star::uno::RuntimeException )
750 {
751     double fDouble;
752     Any aAny = getControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ) );
753     if ( aAny >>= fDouble )
754     {
755         fDouble += 9;
756         if ( fDouble > 100 )
757             fDouble = 100;
758         setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( fDouble ) );
759         SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)fDouble ) );
760     }
761 }
762 
763 void OptimizerDialog::down( const SpinEvent& /* rEvent */ )
764     throw ( com::sun::star::uno::RuntimeException )
765 {
766     double fDouble;
767     Any aAny = getControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ) );
768     if ( aAny >>= fDouble )
769     {
770         fDouble -= 9;
771         if ( fDouble < 0 )
772             fDouble = 0;
773         setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( fDouble ) );
774         SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)fDouble ) );
775     }
776 }
777 
778 void OptimizerDialog::first( const SpinEvent& /* rEvent */ )
779     throw ( com::sun::star::uno::RuntimeException )
780 {
781     setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( static_cast< double >( 0 ) ) );
782     SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)0 ) );
783 }
784 
785 void OptimizerDialog::last( const SpinEvent& /* rEvent */ )
786     throw ( com::sun::star::uno::RuntimeException )
787 {
788     setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( static_cast< double >( 100 ) ) );
789     SetConfigProperty( TK_JPEGQuality, Any( (sal_Int32)100 ) );
790 }
791 
792