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