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 "minimizer.hrc" 29 #include "helpid.hrc" 30 31 // ------------------- 32 // - OptimizerDialog - 33 // ------------------- 34 #include "pppoptimizer.hxx" 35 #include "graphiccollector.hxx" 36 #include "pagecollector.hxx" 37 #include <com/sun/star/presentation/XCustomPresentationSupplier.hpp> 38 #include <com/sun/star/drawing/XMasterPagesSupplier.hpp> 39 #include <com/sun/star/drawing/XDrawPagesSupplier.hpp> 40 #include <com/sun/star/awt/FontDescriptor.hpp> 41 #ifndef _COM_SUN_STAR_AWT_XFONTWEIGHT_HPP_ 42 #include <com/sun/star/awt/FontWeight.hpp> 43 #endif 44 #include <rtl/ustrbuf.hxx> 45 46 using namespace ::com::sun::star::awt; 47 using namespace ::com::sun::star::uno; 48 using namespace ::com::sun::star::util; 49 using namespace ::com::sun::star::lang; 50 using namespace ::com::sun::star::frame; 51 using namespace ::com::sun::star::beans; 52 using namespace ::com::sun::star::script; 53 using namespace ::com::sun::star::drawing; 54 using namespace ::com::sun::star::container; 55 using namespace ::com::sun::star::presentation; 56 57 using ::rtl::OUString; 58 using ::rtl::OUStringBuffer; 59 // ----------------------------------------------------------------------------- 60 61 void OptimizerDialog::ImplSetBold( const rtl::OUString& rControl ) 62 { 63 FontDescriptor aFontDescriptor; 64 if ( getControlProperty( rControl, TKGet( TK_FontDescriptor ) ) >>= aFontDescriptor ) 65 { 66 aFontDescriptor.Weight = FontWeight::BOLD; 67 setControlProperty( rControl, TKGet( TK_FontDescriptor ), Any( aFontDescriptor ) ); 68 } 69 } 70 71 // ----------------------------------------------------------------------------- 72 73 rtl::OUString OptimizerDialog::ImplInsertSeparator( 74 const OUString& rControlName, 75 sal_Int32 nOrientation, 76 sal_Int32 nPosX, 77 sal_Int32 nPosY, 78 sal_Int32 nWidth, 79 sal_Int32 nHeight ) 80 { 81 OUString pNames[] = { 82 TKGet( TK_Height ), 83 TKGet( TK_Orientation ), 84 TKGet( TK_PositionX ), 85 TKGet( TK_PositionY ), 86 TKGet( TK_Step ), 87 TKGet( TK_Width ) }; 88 89 Any pValues[] = { 90 Any( nHeight ), 91 Any( nOrientation ), 92 Any( nPosX ), 93 Any( nPosY ), 94 Any( sal_Int16( 0 ) ), 95 Any( nWidth ) }; 96 97 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 98 99 Sequence< rtl::OUString > aNames( pNames, nCount ); 100 Sequence< Any > aValues( pValues, nCount ); 101 102 insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlFixedLineModel" ) ), 103 rControlName, aNames, aValues ); 104 return rControlName; 105 } 106 107 // ----------------------------------------------------------------------------- 108 109 rtl::OUString OptimizerDialog::ImplInsertButton( 110 const OUString& rControlName, 111 const rtl::OUString& rHelpURL, 112 sal_Int32 nXPos, 113 sal_Int32 nYPos, 114 sal_Int32 nWidth, 115 sal_Int32 nHeight, 116 sal_Int16 nTabIndex, 117 sal_Bool bEnabled, 118 sal_Int32 nResID, 119 sal_Int16 nPushButtonType ) 120 { 121 OUString pNames[] = { 122 TKGet( TK_Enabled ), 123 TKGet( TK_Height ), 124 TKGet( TK_HelpURL ), 125 TKGet( TK_Label ), 126 TKGet( TK_PositionX ), 127 TKGet( TK_PositionY ), 128 TKGet( TK_PushButtonType ), 129 TKGet( TK_Step ), 130 TKGet( TK_TabIndex ), 131 TKGet( TK_Width ) }; 132 133 Any pValues[] = { 134 Any( bEnabled ), 135 Any( nHeight ), 136 Any( rHelpURL ), 137 Any( getString( nResID ) ), 138 Any( nXPos ), 139 Any( nYPos ), 140 Any( nPushButtonType ), 141 Any( (sal_Int16)0 ), 142 Any( nTabIndex ), 143 Any( nWidth ) }; 144 145 146 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 147 148 Sequence< rtl::OUString > aNames( pNames, nCount ); 149 Sequence< Any > aValues( pValues, nCount ); 150 151 insertButton( rControlName, this, aNames, aValues ); 152 return rControlName; 153 } 154 155 // ----------------------------------------------------------------------------- 156 157 rtl::OUString OptimizerDialog::ImplInsertFixedText( 158 const rtl::OUString& rControlName, 159 const OUString& rLabel, 160 sal_Int32 nXPos, 161 sal_Int32 nYPos, 162 sal_Int32 nWidth, 163 sal_Int32 nHeight, 164 sal_Bool bMultiLine, 165 sal_Bool bBold, 166 sal_Int16 nTabIndex ) 167 { 168 OUString pNames[] = { 169 TKGet( TK_Height ), 170 TKGet( TK_Label ), 171 TKGet( TK_MultiLine ), 172 TKGet( TK_PositionX ), 173 TKGet( TK_PositionY ), 174 TKGet( TK_Step ), 175 TKGet( TK_TabIndex ), 176 TKGet( TK_Width ) }; 177 178 Any pValues[] = { 179 Any( nHeight ), 180 Any( rLabel ), 181 Any( bMultiLine ), 182 Any( nXPos ), 183 Any( nYPos ), 184 Any( (sal_Int16)0 ), 185 Any( nTabIndex ), 186 Any( nWidth ) }; 187 188 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 189 190 Sequence< rtl::OUString > aNames( pNames, nCount ); 191 Sequence< Any > aValues( pValues, nCount ); 192 193 insertFixedText( rControlName, aNames, aValues ); 194 if ( bBold ) 195 ImplSetBold( rControlName ); 196 return rControlName; 197 } 198 199 // ----------------------------------------------------------------------------- 200 201 rtl::OUString OptimizerDialog::ImplInsertCheckBox( 202 const OUString& rControlName, 203 const OUString& rLabel, 204 const rtl::OUString& rHelpURL, 205 sal_Int32 nXPos, 206 sal_Int32 nYPos, 207 sal_Int32 nWidth, 208 sal_Int32 nHeight, 209 sal_Int16 nTabIndex ) 210 { 211 OUString pNames[] = { 212 TKGet( TK_Enabled ), 213 TKGet( TK_Height ), 214 TKGet( TK_HelpURL ), 215 TKGet( TK_Label ), 216 TKGet( TK_PositionX ), 217 TKGet( TK_PositionY ), 218 TKGet( TK_Step ), 219 TKGet( TK_TabIndex ), 220 TKGet( TK_Width ) }; 221 222 Any pValues[] = { 223 Any( sal_True ), 224 Any( nHeight ), 225 Any( rHelpURL ), 226 Any( rLabel ), 227 Any( nXPos ), 228 Any( nYPos ), 229 Any( (sal_Int16)0 ), 230 Any( nTabIndex ), 231 Any( nWidth ) }; 232 233 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 234 235 Sequence< rtl::OUString > aNames( pNames, nCount ); 236 Sequence< Any > aValues( pValues, nCount ); 237 238 Reference< XCheckBox > xCheckBox( insertCheckBox( rControlName, aNames, aValues ) ); 239 xCheckBox->addItemListener( this ); 240 return rControlName; 241 } 242 243 // ----------------------------------------------------------------------------- 244 245 rtl::OUString OptimizerDialog::ImplInsertFormattedField( 246 const OUString& rControlName, 247 const rtl::OUString& rHelpURL, 248 sal_Int32 nXPos, 249 sal_Int32 nYPos, 250 sal_Int32 nWidth, 251 double fEffectiveMin, 252 double fEffectiveMax, 253 sal_Int16 nTabIndex ) 254 { 255 OUString pNames[] = { 256 TKGet( TK_EffectiveMax ), 257 TKGet( TK_EffectiveMin ), 258 TKGet( TK_Enabled ), 259 TKGet( TK_Height ), 260 TKGet( TK_HelpURL ), 261 TKGet( TK_PositionX ), 262 TKGet( TK_PositionY ), 263 TKGet( TK_Repeat ), 264 TKGet( TK_Spin ), 265 TKGet( TK_Step ), 266 TKGet( TK_TabIndex ), 267 TKGet( TK_Width ) }; 268 269 Any pValues[] = { 270 Any( fEffectiveMax ), 271 Any( fEffectiveMin ), 272 Any( sal_True ), 273 Any( (sal_Int32)12 ), 274 Any( rHelpURL ), 275 Any( nXPos ), 276 Any( nYPos ), 277 Any( (sal_Bool)sal_True ), 278 Any( (sal_Bool)sal_True ), 279 Any( (sal_Int16)0 ), 280 Any( nTabIndex ), 281 Any( nWidth ) }; 282 283 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 284 285 Sequence< rtl::OUString > aNames( pNames, nCount ); 286 Sequence< Any > aValues( pValues, nCount ); 287 288 Reference< XTextComponent > xTextComponent( insertFormattedField( rControlName, aNames, aValues ), UNO_QUERY_THROW ); 289 xTextComponent->addTextListener( this ); 290 Reference< XSpinField > xSpinField( xTextComponent, UNO_QUERY_THROW ); 291 xSpinField->addSpinListener( this ); 292 293 return rControlName; 294 } 295 296 // ----------------------------------------------------------------------------- 297 298 rtl::OUString OptimizerDialog::ImplInsertComboBox( 299 const OUString& rControlName, 300 const rtl::OUString& rHelpURL, 301 const sal_Bool bEnabled, 302 const Sequence< OUString >& rItemList, 303 sal_Int32 nXPos, 304 sal_Int32 nYPos, 305 sal_Int32 nWidth, 306 sal_Int32 nHeight, 307 sal_Int16 nTabIndex, 308 bool bListen ) 309 { 310 OUString pNames[] = { 311 TKGet( TK_Dropdown ), 312 TKGet( TK_Enabled ), 313 TKGet( TK_Height ), 314 TKGet( TK_HelpURL ), 315 TKGet( TK_LineCount ), 316 TKGet( TK_PositionX ), 317 TKGet( TK_PositionY ), 318 TKGet( TK_Step ), 319 TKGet( TK_StringItemList ), 320 TKGet( TK_TabIndex ), 321 TKGet( TK_Width ) }; 322 323 Any pValues[] = { 324 Any( sal_True ), 325 Any( bEnabled ), 326 Any( nHeight ), 327 Any( rHelpURL ), 328 Any( (sal_Int16)8), 329 Any( nXPos ), 330 Any( nYPos ), 331 Any( (sal_Int16)0 ), 332 Any( rItemList ), 333 Any( nTabIndex ), 334 Any( nWidth ) }; 335 336 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 337 338 Sequence< rtl::OUString > aNames( pNames, nCount ); 339 Sequence< Any > aValues( pValues, nCount ); 340 341 Reference< XTextComponent > xTextComponent( insertComboBox( rControlName, aNames, aValues ), UNO_QUERY_THROW ); 342 if ( bListen ) 343 xTextComponent->addTextListener( this ); 344 return rControlName; 345 } 346 347 // ----------------------------------------------------------------------------- 348 349 rtl::OUString OptimizerDialog::ImplInsertRadioButton( 350 const rtl::OUString& rControlName, 351 const OUString& rLabel, 352 const rtl::OUString& rHelpURL, 353 sal_Int32 nXPos, 354 sal_Int32 nYPos, 355 sal_Int32 nWidth, 356 sal_Int32 nHeight, 357 sal_Bool bMultiLine, 358 sal_Int16 nTabIndex ) 359 { 360 OUString pNames[] = { 361 TKGet( TK_Height ), 362 TKGet( TK_HelpURL ), 363 TKGet( TK_Label ), 364 TKGet( TK_MultiLine ), 365 TKGet( TK_PositionX ), 366 TKGet( TK_PositionY ), 367 TKGet( TK_Step ), 368 TKGet( TK_TabIndex ), 369 TKGet( TK_Width ) }; 370 371 Any pValues[] = { 372 Any( nHeight ), 373 Any( rHelpURL ), 374 Any( rLabel ), 375 Any( bMultiLine ), 376 Any( nXPos ), 377 Any( nYPos ), 378 Any( (sal_Int16)0 ), 379 Any( nTabIndex ), 380 Any( nWidth ) }; 381 382 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 383 384 Sequence< rtl::OUString > aNames( pNames, nCount ); 385 Sequence< Any > aValues( pValues, nCount ); 386 387 Reference< XRadioButton > xRadioButton( insertRadioButton( rControlName, aNames, aValues ) ); 388 xRadioButton->addItemListener( this ); 389 return rControlName; 390 } 391 392 // ----------------------------------------------------------------------------- 393 394 rtl::OUString OptimizerDialog::ImplInsertListBox( 395 const OUString& rControlName, 396 const rtl::OUString& rHelpURL, 397 const sal_Bool bEnabled, 398 const Sequence< OUString >& rItemList, 399 sal_Int32 nXPos, 400 sal_Int32 nYPos, 401 sal_Int32 nWidth, 402 sal_Int32 nHeight, 403 sal_Int16 nTabIndex ) 404 { 405 OUString pNames[] = { 406 TKGet( TK_Dropdown ), 407 TKGet( TK_Enabled ), 408 TKGet( TK_Height ), 409 TKGet( TK_HelpURL ), 410 TKGet( TK_LineCount ), 411 TKGet( TK_MultiSelection ), 412 TKGet( TK_PositionX ), 413 TKGet( TK_PositionY ), 414 TKGet( TK_Step ), 415 TKGet( TK_StringItemList ), 416 TKGet( TK_TabIndex ), 417 TKGet( TK_Width ) }; 418 419 Any pValues[] = { 420 Any( sal_True ), 421 Any( bEnabled ), 422 Any( nHeight ), 423 Any( rHelpURL ), 424 Any( (sal_Int16)8), 425 Any( sal_False ), 426 Any( nXPos ), 427 Any( nYPos ), 428 Any( (sal_Int16)0 ), 429 Any( rItemList ), 430 Any( nTabIndex ), 431 Any( nWidth ) }; 432 433 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 434 435 Sequence< rtl::OUString > aNames( pNames, nCount ); 436 Sequence< Any > aValues( pValues, nCount ); 437 438 Reference< XListBox > xListBox( insertListBox( rControlName, aNames, aValues ) ); 439 xListBox->addActionListener( this ); 440 return rControlName; 441 } 442 443 // ----------------------------------------------------------------------------- 444 445 void OptimizerDialog::InitNavigationBar() 446 { 447 sal_Int32 nCancelPosX = OD_DIALOG_WIDTH - BUTTON_WIDTH - 6; 448 sal_Int32 nFinishPosX = nCancelPosX - 6 - BUTTON_WIDTH; 449 sal_Int32 nNextPosX = nFinishPosX - 6 - BUTTON_WIDTH; 450 sal_Int32 nBackPosX = nNextPosX - 3 - BUTTON_WIDTH; 451 452 ImplInsertSeparator( TKGet( TK_lnNavSep1 ), 0, 0, DIALOG_HEIGHT - 26, OD_DIALOG_WIDTH, 1 ); 453 ImplInsertSeparator( TKGet( TK_lnNavSep2 ), 1, 85, 0, 1, BUTTON_POS_Y - 6 ); 454 455 ImplInsertButton( TKGet( TK_btnNavHelp ), HID( HID_SDEXT_MINIMIZER_WIZ_PB_HELP ), 8, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, mnTabIndex++, sal_True, STR_HELP, PushButtonType_HELP ); 456 ImplInsertButton( TKGet( TK_btnNavBack ), HID( HID_SDEXT_MINIMIZER_WIZ_PB_BACK ), nBackPosX, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, mnTabIndex++, sal_False, STR_BACK, PushButtonType_STANDARD ); 457 ImplInsertButton( TKGet( TK_btnNavNext ), HID( HID_SDEXT_MINIMIZER_WIZ_PB_NEXT ), nNextPosX, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, mnTabIndex++, sal_True, STR_NEXT, PushButtonType_STANDARD ); 458 ImplInsertButton( TKGet( TK_btnNavFinish ), HID( HID_SDEXT_MINIMIZER_WIZ_PB_FINISH ), nFinishPosX, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, mnTabIndex++, sal_True, STR_FINISH, PushButtonType_STANDARD ); 459 ImplInsertButton( TKGet( TK_btnNavCancel ), HID( HID_SDEXT_MINIMIZER_WIZ_PB_CANCEL ), nCancelPosX, BUTTON_POS_Y, BUTTON_WIDTH, BUTTON_HEIGHT, mnTabIndex++, sal_True, STR_CANCEL, PushButtonType_STANDARD ); 460 461 setControlProperty( TKGet( TK_btnNavNext ), TKGet( TK_DefaultButton ), Any( sal_True ) ); 462 } 463 464 // ----------------------------------------------------------------------------- 465 466 void OptimizerDialog::UpdateControlStatesPage0() 467 { 468 sal_uInt32 i; 469 short nSelectedItem = -1; 470 Sequence< OUString > aItemList; 471 const std::vector< OptimizerSettings >& rList( GetOptimizerSettings() ); 472 if ( rList.size() > 1 ) // the first session in the list is the actual one -> skipping first one 473 { 474 aItemList.realloc( rList.size() - 1 ); 475 for ( i = 1; i < rList.size(); i++ ) 476 { 477 aItemList[ i - 1 ] = rList[ i ].maName; 478 if ( nSelectedItem < 0 ) 479 { 480 if ( rList[ i ] == rList[ 0 ] ) 481 nSelectedItem = static_cast< short >( i - 1 ); 482 } 483 } 484 } 485 sal_Bool bRemoveButtonEnabled = sal_False; 486 Sequence< short > aSelectedItems; 487 if ( nSelectedItem >= 0 ) 488 { 489 aSelectedItems.realloc( 1 ); 490 aSelectedItems[ 0 ] = nSelectedItem; 491 if ( nSelectedItem > 2 ) // only allowing to delete custom themes, the first can|t be deleted 492 bRemoveButtonEnabled = sal_True; 493 } 494 setControlProperty( TKGet( TK_ListBox0Pg0 ), TKGet( TK_StringItemList ), Any( aItemList ) ); 495 setControlProperty( TKGet( TK_ListBox0Pg0 ), TKGet( TK_SelectedItems ), Any( aSelectedItems ) ); 496 setControlProperty( TKGet( TK_Button0Pg0 ), TKGet( TK_Enabled ), Any( bRemoveButtonEnabled ) ); 497 } 498 void OptimizerDialog::InitPage0() 499 { 500 Sequence< OUString > aItemList; 501 std::vector< rtl::OUString > aControlList; 502 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText0Pg0 ), getString( STR_INTRODUCTION ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, sal_False, sal_True, mnTabIndex++ ) ); 503 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText1Pg0 ), getString( STR_INTRODUCTION_T ), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, 100, sal_True, sal_False, mnTabIndex++ ) ); 504 aControlList.push_back( ImplInsertSeparator( TKGet( TK_Separator1Pg0 ), 0, PAGE_POS_X + 6, DIALOG_HEIGHT - 66, PAGE_WIDTH - 12, 1 ) ); 505 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText2Pg0 ), getString( STR_CHOSE_SETTINGS ), PAGE_POS_X + 6, DIALOG_HEIGHT - 60, PAGE_WIDTH - 12, 8, sal_True, sal_False, mnTabIndex++ ) ); 506 aControlList.push_back( ImplInsertListBox( TKGet( TK_ListBox0Pg0 ), HID(HID_SDEXT_MINIMIZER_WIZ_STEP1_LB_SETTINGS),sal_True, aItemList, PAGE_POS_X + 6, DIALOG_HEIGHT - 48, ( OD_DIALOG_WIDTH - 50 ) - ( PAGE_POS_X + 6 ), 12, mnTabIndex++ ) ); 507 aControlList.push_back( ImplInsertButton( TKGet( TK_Button0Pg0 ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP1_PB_DELSETTS ),OD_DIALOG_WIDTH - 46, DIALOG_HEIGHT - 49, 40, 14, mnTabIndex++, sal_True, STR_REMOVE, PushButtonType_STANDARD ) ); 508 maControlPages.push_back( aControlList ); 509 DeactivatePage( 0 ); 510 UpdateControlStatesPage0(); 511 } 512 513 // ----------------------------------------------------------------------------- 514 515 void OptimizerDialog::UpdateControlStatesPage1() 516 { 517 sal_Bool bDeleteUnusedMasterPages( GetConfigProperty( TK_DeleteUnusedMasterPages, sal_False ) ); 518 sal_Bool bDeleteHiddenSlides( GetConfigProperty( TK_DeleteHiddenSlides, sal_False ) ); 519 sal_Bool bDeleteNotesPages( GetConfigProperty( TK_DeleteNotesPages, sal_False ) ); 520 521 setControlProperty( TKGet( TK_CheckBox0Pg3 ), TKGet( TK_State ), Any( (sal_Int16)bDeleteUnusedMasterPages ) ); 522 setControlProperty( TKGet( TK_CheckBox1Pg3 ), TKGet( TK_State ), Any( (sal_Int16)bDeleteNotesPages ) ); 523 setControlProperty( TKGet( TK_CheckBox2Pg3 ), TKGet( TK_State ), Any( (sal_Int16)bDeleteHiddenSlides ) ); 524 } 525 void OptimizerDialog::InitPage1() 526 { 527 Sequence< OUString > aCustomShowList; 528 Reference< XModel > xModel( mxModel ); 529 if ( xModel.is() ) 530 { 531 Reference< XCustomPresentationSupplier > aXCPSup( xModel, UNO_QUERY_THROW ); 532 Reference< XNameContainer > aXCont( aXCPSup->getCustomPresentations() ); 533 if ( aXCont.is() ) 534 aCustomShowList = aXCont->getElementNames(); 535 } 536 std::vector< rtl::OUString > aControlList; 537 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText0Pg3 ), getString( STR_CHOOSE_SLIDES ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, sal_False, sal_True, mnTabIndex++ ) ); 538 aControlList.push_back( ImplInsertCheckBox( TKGet( TK_CheckBox0Pg3 ), getString( STR_DELETE_MASTER_PAGES ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP2_CB_MASTERPAGES ), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, 8, mnTabIndex++ ) ); 539 aControlList.push_back( ImplInsertCheckBox( TKGet( TK_CheckBox2Pg3 ), getString( STR_DELETE_HIDDEN_SLIDES ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP2_CB_HIDDENSLIDES ), PAGE_POS_X + 6, PAGE_POS_Y + 28, PAGE_WIDTH - 12, 8, mnTabIndex++ ) ); 540 aControlList.push_back( ImplInsertCheckBox( TKGet( TK_CheckBox3Pg3 ), getString( STR_CUSTOM_SHOW ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP2_CB_CUSTOMSHOW ), PAGE_POS_X + 6, PAGE_POS_Y + 42, PAGE_WIDTH - 12, 8, mnTabIndex++ ) ); 541 aControlList.push_back( ImplInsertListBox( TKGet( TK_ListBox0Pg3 ), HID(HID_SDEXT_MINIMIZER_WIZ_STEP2_LB_CUSTOMSHOW),sal_True, aCustomShowList, PAGE_POS_X + 14, PAGE_POS_Y + 54, 150, 12, mnTabIndex++ ) ); 542 aControlList.push_back( ImplInsertCheckBox( TKGet( TK_CheckBox1Pg3 ), getString( STR_DELETE_NOTES_PAGES ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP2_CB_NOTES ), PAGE_POS_X + 6, PAGE_POS_Y + 70, PAGE_WIDTH - 12, 8, mnTabIndex++ ) ); 543 maControlPages.push_back( aControlList ); 544 DeactivatePage( 1 ); 545 546 setControlProperty( TKGet( TK_CheckBox3Pg3 ), TKGet( TK_State ), Any( sal_False ) ); 547 setControlProperty( TKGet( TK_CheckBox3Pg3 ), TKGet( TK_Enabled ), Any( aCustomShowList.getLength() != 0 ) ); 548 setControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_Enabled ), Any( sal_False ) ); 549 550 UpdateControlStatesPage1(); 551 } 552 553 // ----------------------------------------------------------------------------- 554 555 void OptimizerDialog::UpdateControlStatesPage2() 556 { 557 sal_Bool bJPEGCompression( GetConfigProperty( TK_JPEGCompression, sal_False ) ); 558 sal_Bool bRemoveCropArea( GetConfigProperty( TK_RemoveCropArea, sal_False ) ); 559 sal_Bool bEmbedLinkedGraphics( GetConfigProperty( TK_EmbedLinkedGraphics, sal_True ) ); 560 sal_Int32 nJPEGQuality( GetConfigProperty( TK_JPEGQuality, (sal_Int32)90 ) ); 561 562 sal_Int32 nImageResolution( GetConfigProperty( TK_ImageResolution, (sal_Int32)0 ) ); 563 564 sal_Int32 nI0, nI1, nI2, nI3; 565 nI0 = nI1 = nI2 = nI3 = 0; 566 OUString aResolutionText; 567 Sequence< OUString > aResolutionItemList( 4 ); 568 aResolutionItemList[ 0 ] = getString( STR_IMAGE_RESOLUTION_0 ).getToken( 1, ';', nI0 ); 569 aResolutionItemList[ 1 ] = getString( STR_IMAGE_RESOLUTION_1 ).getToken( 1, ';', nI1 ); 570 aResolutionItemList[ 2 ] = getString( STR_IMAGE_RESOLUTION_2 ).getToken( 1, ';', nI2 ); 571 aResolutionItemList[ 3 ] = getString( STR_IMAGE_RESOLUTION_3 ).getToken( 1, ';', nI3 ); 572 nI0 = nI1 = nI2 = nI3 = 0; 573 if ( getString( STR_IMAGE_RESOLUTION_0 ).getToken( 0, ';', nI0 ).toInt32() == nImageResolution ) 574 aResolutionText = aResolutionItemList[ 0 ]; 575 else if ( getString( STR_IMAGE_RESOLUTION_1 ).getToken( 0, ';', nI1 ).toInt32() == nImageResolution ) 576 aResolutionText = aResolutionItemList[ 1 ]; 577 else if ( getString( STR_IMAGE_RESOLUTION_2 ).getToken( 0, ';', nI2 ).toInt32() == nImageResolution ) 578 aResolutionText = aResolutionItemList[ 2 ]; 579 else if ( getString( STR_IMAGE_RESOLUTION_3 ).getToken( 0, ';', nI3 ).toInt32() == nImageResolution ) 580 aResolutionText = aResolutionItemList[ 3 ]; 581 if ( !aResolutionText.getLength() ) 582 aResolutionText = OUString::valueOf( nImageResolution ); 583 584 setControlProperty( TKGet( TK_RadioButton0Pg1 ), TKGet( TK_State ), Any( (sal_Int16)( bJPEGCompression != sal_True ) ) ); 585 setControlProperty( TKGet( TK_RadioButton1Pg1 ), TKGet( TK_State ), Any( (sal_Int16)( bJPEGCompression != sal_False ) ) ); 586 setControlProperty( TKGet( TK_FixedText1Pg1 ), TKGet( TK_Enabled ), Any( bJPEGCompression ) ); 587 setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_Enabled ), Any( bJPEGCompression ) ); 588 setControlProperty( TKGet( TK_FormattedField0Pg1 ), TKGet( TK_EffectiveValue ), Any( (double)nJPEGQuality ) ); 589 setControlProperty( TKGet( TK_CheckBox1Pg1 ), TKGet( TK_State ), Any( (sal_Int16)bRemoveCropArea ) ); 590 setControlProperty( TKGet( TK_ComboBox0Pg1 ), TKGet( TK_Text ), Any( aResolutionText ) ); 591 setControlProperty( TKGet( TK_CheckBox2Pg1 ), TKGet( TK_State ), Any( (sal_Int16)bEmbedLinkedGraphics ) ); 592 } 593 void OptimizerDialog::InitPage2() 594 { 595 sal_Int32 nI0, nI1, nI2, nI3; 596 nI0 = nI1 = nI2 = nI3 = 0; 597 Sequence< OUString > aResolutionItemList( 4 ); 598 aResolutionItemList[ 0 ] = getString( STR_IMAGE_RESOLUTION_0 ).getToken( 1, ';', nI0 ); 599 aResolutionItemList[ 1 ] = getString( STR_IMAGE_RESOLUTION_1 ).getToken( 1, ';', nI1 ); 600 aResolutionItemList[ 2 ] = getString( STR_IMAGE_RESOLUTION_2 ).getToken( 1, ';', nI2 ); 601 aResolutionItemList[ 3 ] = getString( STR_IMAGE_RESOLUTION_3 ).getToken( 1, ';', nI3 ); 602 603 std::vector< rtl::OUString > aControlList; 604 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText0Pg1 ), getString( STR_GRAPHIC_OPTIMIZATION ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, sal_False, sal_True, mnTabIndex++ ) ); 605 aControlList.push_back( ImplInsertRadioButton( TKGet( TK_RadioButton0Pg1 ), getString( STR_LOSSLESS_COMPRESSION ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP3_RB_LOSSLESS ), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, 8, sal_False, mnTabIndex++ ) ); 606 aControlList.push_back( ImplInsertRadioButton( TKGet( TK_RadioButton1Pg1 ), getString( STR_JPEG_COMPRESSION ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP3_RB_JPEG ), PAGE_POS_X + 6, PAGE_POS_Y + 28, PAGE_WIDTH - 12, 8, sal_False, mnTabIndex++ ) ); 607 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText1Pg1 ), getString( STR_QUALITY ), PAGE_POS_X + 20, PAGE_POS_Y + 40, 72, 8, sal_False, sal_False, mnTabIndex++ ) ); 608 aControlList.push_back( ImplInsertFormattedField( TKGet( TK_FormattedField0Pg1 ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP3_MF_QUALITY ), PAGE_POS_X + 106, PAGE_POS_Y + 38, 50, 0, 100, mnTabIndex++ ) ); 609 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText2Pg1 ), getString( STR_IMAGE_RESOLUTION ), PAGE_POS_X + 6, PAGE_POS_Y + 54, 94, 8, sal_False, sal_False, mnTabIndex++ ) ); 610 aControlList.push_back( ImplInsertComboBox( TKGet( TK_ComboBox0Pg1 ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP3_LB_DPI ), sal_True, aResolutionItemList, PAGE_POS_X + 106, PAGE_POS_Y + 52, 100, 12, mnTabIndex++ ) ); 611 aControlList.push_back( ImplInsertCheckBox( TKGet( TK_CheckBox1Pg1 ), getString( STR_REMOVE_CROP_AREA ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP3_CB_CROP ), PAGE_POS_X + 6, PAGE_POS_Y + 68, PAGE_WIDTH - 12, 8, mnTabIndex++ ) ); 612 aControlList.push_back( ImplInsertCheckBox( TKGet( TK_CheckBox2Pg1 ), getString( STR_EMBED_LINKED_GRAPHICS ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP3_CB_LINKS ), PAGE_POS_X + 6, PAGE_POS_Y + 82, PAGE_WIDTH - 12, 8, mnTabIndex++ ) ); 613 maControlPages.push_back( aControlList ); 614 DeactivatePage( 2 ); 615 UpdateControlStatesPage2(); 616 } 617 618 // ----------------------------------------------------------------------------- 619 620 void OptimizerDialog::UpdateControlStatesPage3() 621 { 622 sal_Bool bConvertOLEObjects( GetConfigProperty( TK_OLEOptimization, sal_False ) ); 623 sal_Int16 nOLEOptimizationType( GetConfigProperty( TK_OLEOptimizationType, (sal_Int16)0 ) ); 624 625 setControlProperty( TKGet( TK_CheckBox0Pg2 ), TKGet( TK_State ), Any( (sal_Int16)bConvertOLEObjects ) ); 626 setControlProperty( TKGet( TK_RadioButton0Pg2 ), TKGet( TK_Enabled ), Any( bConvertOLEObjects ) ); 627 setControlProperty( TKGet( TK_RadioButton0Pg2 ), TKGet( TK_State ), Any( (sal_Int16)( nOLEOptimizationType == 0 ) ) ); 628 setControlProperty( TKGet( TK_RadioButton1Pg2 ), TKGet( TK_Enabled ), Any( bConvertOLEObjects ) ); 629 setControlProperty( TKGet( TK_RadioButton1Pg2 ), TKGet( TK_State ), Any( (sal_Int16)( nOLEOptimizationType == 1 ) ) ); 630 } 631 void OptimizerDialog::InitPage3() 632 { 633 int nOLECount = 0; 634 Reference< XModel > xModel( mxModel ); 635 Reference< XDrawPagesSupplier > xDrawPagesSupplier( xModel, UNO_QUERY_THROW ); 636 Reference< XDrawPages > xDrawPages( xDrawPagesSupplier->getDrawPages(), UNO_QUERY_THROW ); 637 for ( sal_Int32 i = 0; i < xDrawPages->getCount(); i++ ) 638 { 639 Reference< XShapes > xShapes( xDrawPages->getByIndex( i ), UNO_QUERY_THROW ); 640 for ( sal_Int32 j = 0; j < xShapes->getCount(); j++ ) 641 { 642 const OUString sOLE2Shape( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.OLE2Shape" ) ); 643 Reference< XShape > xShape( xShapes->getByIndex( j ), UNO_QUERY_THROW ); 644 if ( xShape->getShapeType() == sOLE2Shape ) 645 nOLECount++; 646 } 647 } 648 649 std::vector< rtl::OUString > aControlList; 650 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText0Pg2 ), getString( STR_OLE_OPTIMIZATION ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, sal_False, sal_True, mnTabIndex++ ) ); 651 aControlList.push_back( ImplInsertCheckBox( TKGet( TK_CheckBox0Pg2 ), getString( STR_OLE_REPLACE ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP4_CB_OLE ), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, 8, mnTabIndex++ ) ); 652 aControlList.push_back( ImplInsertRadioButton( TKGet( TK_RadioButton0Pg2 ), getString( STR_ALL_OLE_OBJECTS ), HID(HID_SDEXT_MINIMIZER_WIZ_STEP4_RB_ALLOLE), PAGE_POS_X + 14, PAGE_POS_Y + 28, PAGE_WIDTH - 22, 8, sal_False, mnTabIndex++ ) ); 653 aControlList.push_back( ImplInsertRadioButton( TKGet( TK_RadioButton1Pg2 ), getString( STR_ALIEN_OLE_OBJECTS_ONLY ), HID(HID_SDEXT_MINIMIZER_WIZ_STEP4_RB_NOTODF),PAGE_POS_X + 14, PAGE_POS_Y + 40, PAGE_WIDTH - 22, 8, sal_False, mnTabIndex++ ) ); 654 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText1Pg2 ), nOLECount ? getString( STR_OLE_OBJECTS_DESC ) : getString( STR_NO_OLE_OBJECTS_DESC ), PAGE_POS_X + 6, PAGE_POS_Y + 64, PAGE_WIDTH - 22, 50, sal_True, sal_False, mnTabIndex++ ) ); 655 maControlPages.push_back( aControlList ); 656 DeactivatePage( 3 ); 657 UpdateControlStatesPage3(); 658 } 659 660 // ----------------------------------------------------------------------------- 661 662 static OUString ImpValueOfInMB( const sal_Int64& rVal, sal_Unicode nSeparator = '.' ) 663 { 664 double fVal( static_cast<double>( rVal ) ); 665 fVal /= ( 1 << 20 ); 666 fVal += 0.05; 667 rtl::OUStringBuffer aVal( OUString::valueOf( fVal ) ); 668 sal_Int32 nX( OUString( aVal.getStr() ).indexOf( '.', 0 ) ); 669 if ( nX >= 0 ) 670 { 671 aVal.setLength( nX + 2 ); 672 aVal.setCharAt( nX, nSeparator ); 673 } 674 aVal.append( OUString::createFromAscii( " MB" ) ); 675 return aVal.makeStringAndClear(); 676 } 677 678 void OptimizerDialog::UpdateControlStatesPage4() 679 { 680 sal_Bool bSaveAs( GetConfigProperty( TK_SaveAs, sal_True ) ); 681 if ( mbIsReadonly ) 682 { 683 setControlProperty( TKGet( TK_RadioButton0Pg4 ), TKGet( TK_State ), Any( (sal_Int16)( sal_False ) ) ); 684 setControlProperty( TKGet( TK_RadioButton1Pg4 ), TKGet( TK_State ), Any( (sal_Int16)( sal_True ) ) ); 685 } 686 else 687 { 688 setControlProperty( TKGet( TK_RadioButton0Pg4 ), TKGet( TK_State ), Any( (sal_Int16)( bSaveAs == sal_False ) ) ); 689 setControlProperty( TKGet( TK_RadioButton1Pg4 ), TKGet( TK_State ), Any( (sal_Int16)( bSaveAs == sal_True ) ) ); 690 } 691 setControlProperty( TKGet( TK_ComboBox0Pg4 ), TKGet( TK_Enabled ), Any( sal_False ) ); 692 693 sal_uInt32 w; 694 Sequence< OUString > aItemList; 695 const std::vector< OptimizerSettings >& rList( GetOptimizerSettings() ); 696 if ( rList.size() > 1 ) // the first session in the list is the actual one -> skipping first one 697 { 698 aItemList.realloc( rList.size() - 1 ); 699 for ( w = 1; w < rList.size(); w++ ) 700 aItemList[ w - 1 ] = rList[ w ].maName; 701 } 702 setControlProperty( TKGet( TK_ComboBox0Pg4 ), TKGet( TK_StringItemList ), Any( aItemList ) ); 703 704 // now check if it is sensible to enable the combo box 705 sal_Bool bSaveSettingsEnabled = sal_True; 706 if ( rList.size() > 1 ) // the first session in the list is the actual one -> skipping first one 707 { 708 for ( w = 1; w < rList.size(); w++ ) 709 { 710 if ( rList[ w ] == rList[ 0 ] ) 711 { 712 bSaveSettingsEnabled = sal_False; 713 break; 714 } 715 } 716 } 717 sal_Int16 nInt16 = 0; 718 getControlProperty( TKGet( TK_CheckBox1Pg4 ), TKGet( TK_State ) ) >>= nInt16; 719 setControlProperty( TKGet( TK_CheckBox1Pg4 ), TKGet( TK_Enabled ), Any( bSaveSettingsEnabled ) ); 720 setControlProperty( TKGet( TK_ComboBox0Pg4 ), TKGet( TK_Enabled ), Any( bSaveSettingsEnabled && nInt16 ) ); 721 722 std::vector< OUString > aSummaryStrings; 723 724 // taking care of deleted slides 725 sal_Int32 nDeletedSlides = 0; 726 rtl::OUString aCustomShowName; 727 if ( getControlProperty( TKGet( TK_CheckBox3Pg3 ), TKGet( TK_State ) ) >>= nInt16 ) 728 { 729 if ( nInt16 ) 730 { 731 Sequence< short > aSelectedItems; 732 Sequence< OUString > aStringItemList; 733 Any aAny = getControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_SelectedItems ) ); 734 if ( aAny >>= aSelectedItems ) 735 { 736 if ( aSelectedItems.getLength() ) 737 { 738 sal_Int16 nSelectedItem = aSelectedItems[ 0 ]; 739 aAny = getControlProperty( TKGet( TK_ListBox0Pg3 ), TKGet( TK_StringItemList ) ); 740 if ( aAny >>= aStringItemList ) 741 { 742 if ( aStringItemList.getLength() > nSelectedItem ) 743 SetConfigProperty( TK_CustomShowName, Any( aStringItemList[ nSelectedItem ] ) ); 744 } 745 } 746 } 747 } 748 } 749 if ( aCustomShowName.getLength() ) 750 { 751 std::vector< Reference< XDrawPage > > vNonUsedPageList; 752 PageCollector::CollectNonCustomShowPages( mxModel, aCustomShowName, vNonUsedPageList ); 753 nDeletedSlides += vNonUsedPageList.size(); 754 } 755 if ( GetConfigProperty( TK_DeleteHiddenSlides, sal_False ) ) 756 { 757 if ( aCustomShowName.getLength() ) 758 { 759 std::vector< Reference< XDrawPage > > vUsedPageList; 760 PageCollector::CollectCustomShowPages( mxModel, aCustomShowName, vUsedPageList ); 761 std::vector< Reference< XDrawPage > >::iterator aIter( vUsedPageList.begin() ); 762 while( aIter != vUsedPageList.end() ) 763 { 764 Reference< XPropertySet > xPropSet( *aIter, UNO_QUERY_THROW ); 765 sal_Bool bVisible = sal_True; 766 const OUString sVisible( RTL_CONSTASCII_USTRINGPARAM( "Visible" ) ); 767 if ( xPropSet->getPropertyValue( sVisible ) >>= bVisible ) 768 { 769 if (!bVisible ) 770 nDeletedSlides++; 771 } 772 aIter++; 773 } 774 } 775 else 776 { 777 Reference< XDrawPagesSupplier > xDrawPagesSupplier( mxModel, UNO_QUERY_THROW ); 778 Reference< XDrawPages > xDrawPages( xDrawPagesSupplier->getDrawPages(), UNO_QUERY_THROW ); 779 for( sal_Int32 i = 0; i < xDrawPages->getCount(); i++ ) 780 { 781 Reference< XDrawPage > xDrawPage( xDrawPages->getByIndex( i ), UNO_QUERY_THROW ); 782 Reference< XPropertySet > xPropSet( xDrawPage, UNO_QUERY_THROW ); 783 784 sal_Bool bVisible = sal_True; 785 const OUString sVisible( RTL_CONSTASCII_USTRINGPARAM( "Visible" ) ); 786 if ( xPropSet->getPropertyValue( sVisible ) >>= bVisible ) 787 { 788 if (!bVisible ) 789 nDeletedSlides++; 790 } 791 } 792 } 793 } 794 if ( GetConfigProperty( TK_DeleteUnusedMasterPages, sal_False ) ) 795 { 796 std::vector< PageCollector::MasterPageEntity > aMasterPageList; 797 PageCollector::CollectMasterPages( mxModel, aMasterPageList ); 798 Reference< XMasterPagesSupplier > xMasterPagesSupplier( mxModel, UNO_QUERY_THROW ); 799 Reference< XDrawPages > xMasterPages( xMasterPagesSupplier->getMasterPages(), UNO_QUERY_THROW ); 800 std::vector< PageCollector::MasterPageEntity >::iterator aIter( aMasterPageList.begin() ); 801 while( aIter != aMasterPageList.end() ) 802 { 803 if ( !aIter->bUsed ) 804 nDeletedSlides++; 805 aIter++; 806 } 807 } 808 if ( nDeletedSlides > 1 ) 809 { 810 OUString aStr( getString( STR_DELETE_SLIDES ) ); 811 OUString aPlaceholder( RTL_CONSTASCII_USTRINGPARAM( "%SLIDES" ) ); 812 sal_Int32 i = aStr.indexOf( aPlaceholder, 0 ); 813 if ( i >= 0 ) 814 aStr = aStr.replaceAt( i, aPlaceholder.getLength(), OUString::valueOf( nDeletedSlides ) ); 815 aSummaryStrings.push_back( aStr ); 816 } 817 818 // generating graphic compression info 819 sal_Int32 nGraphics = 0; 820 sal_Bool bJPEGCompression( GetConfigProperty( TK_JPEGCompression, sal_False ) ); 821 sal_Int32 nJPEGQuality( GetConfigProperty( TK_JPEGQuality, (sal_Int32)90 ) ); 822 sal_Int32 nImageResolution( GetConfigProperty( TK_ImageResolution, (sal_Int32)0 ) ); 823 GraphicSettings aGraphicSettings( bJPEGCompression, nJPEGQuality, GetConfigProperty( TK_RemoveCropArea, sal_False ), 824 nImageResolution, GetConfigProperty( TK_EmbedLinkedGraphics, sal_True ) ); 825 GraphicCollector::CountGraphics( mxContext, mxModel, aGraphicSettings, nGraphics ); 826 if ( nGraphics > 1 ) 827 { 828 OUString aStr( getString( STR_OPTIMIZE_IMAGES ) ); 829 OUString aImagePlaceholder( RTL_CONSTASCII_USTRINGPARAM( "%IMAGES" ) ); 830 OUString aQualityPlaceholder( RTL_CONSTASCII_USTRINGPARAM( "%QUALITY" ) ); 831 OUString aResolutionPlaceholder( RTL_CONSTASCII_USTRINGPARAM( "%RESOLUTION" ) ); 832 sal_Int32 i = aStr.indexOf( aImagePlaceholder, 0 ); 833 if ( i >= 0 ) 834 aStr = aStr.replaceAt( i, aImagePlaceholder.getLength(), OUString::valueOf( nGraphics ) ); 835 836 sal_Int32 j = aStr.indexOf( aQualityPlaceholder, 0 ); 837 if ( j >= 0 ) 838 aStr = aStr.replaceAt( j, aQualityPlaceholder.getLength(), OUString::valueOf( nJPEGQuality ) ); 839 840 sal_Int32 k = aStr.indexOf( aResolutionPlaceholder, 0 ); 841 if ( k >= 0 ) 842 aStr = aStr.replaceAt( k, aResolutionPlaceholder.getLength(), OUString::valueOf( nImageResolution ) ); 843 844 aSummaryStrings.push_back( aStr ); 845 } 846 847 if ( GetConfigProperty( TK_OLEOptimization, sal_False ) ) 848 { 849 sal_Int32 nOLEReplacements = 0; 850 Reference< XDrawPagesSupplier > xDrawPagesSupplier( mxModel, UNO_QUERY_THROW ); 851 Reference< XDrawPages > xDrawPages( xDrawPagesSupplier->getDrawPages(), UNO_QUERY_THROW ); 852 for ( sal_Int32 i = 0; i < xDrawPages->getCount(); i++ ) 853 { 854 Reference< XShapes > xShapes( xDrawPages->getByIndex( i ), UNO_QUERY_THROW ); 855 for ( sal_Int32 j = 0; j < xShapes->getCount(); j++ ) 856 { 857 const OUString sOLE2Shape( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.drawing.OLE2Shape" ) ); 858 Reference< XShape > xShape( xShapes->getByIndex( j ), UNO_QUERY_THROW ); 859 if ( xShape->getShapeType() == sOLE2Shape ) 860 nOLEReplacements++; 861 } 862 } 863 if ( nOLEReplacements > 1 ) 864 { 865 OUString aStr( getString( STR_CREATE_REPLACEMENT ) ); 866 OUString aPlaceholder( RTL_CONSTASCII_USTRINGPARAM( "%OLE" ) ); 867 sal_Int32 i = aStr.indexOf( aPlaceholder, 0 ); 868 if ( i >= 0 ) 869 aStr = aStr.replaceAt( i, aPlaceholder.getLength(), OUString::valueOf( nOLEReplacements ) ); 870 aSummaryStrings.push_back( aStr ); 871 } 872 } 873 while( aSummaryStrings.size() < 3 ) 874 aSummaryStrings.push_back( OUString() ); 875 setControlProperty( TKGet( TK_FixedText4Pg4 ), TKGet( TK_Label ), Any( aSummaryStrings[ 0 ] ) ); 876 setControlProperty( TKGet( TK_FixedText5Pg4 ), TKGet( TK_Label ), Any( aSummaryStrings[ 1 ] ) ); 877 setControlProperty( TKGet( TK_FixedText6Pg4 ), TKGet( TK_Label ), Any( aSummaryStrings[ 2 ] ) ); 878 879 sal_Int64 nCurrentFileSize = 0; 880 sal_Int64 nEstimatedFileSize = 0; 881 Reference< XStorable > xStorable( mxModel, UNO_QUERY ); 882 if ( xStorable.is() && xStorable->hasLocation() ) 883 nCurrentFileSize = PPPOptimizer::GetFileSize( xStorable->getLocation() ); 884 885 if ( nCurrentFileSize ) 886 { 887 double fE = static_cast< double >( nCurrentFileSize ); 888 if ( nImageResolution ) 889 { 890 double v = ( static_cast< double >( nImageResolution ) + 75.0 ) / 300.0; 891 if ( v < 1.0 ) 892 fE *= v; 893 } 894 if ( bJPEGCompression ) 895 { 896 double v = 0.75 - ( ( 100.0 - static_cast< double >( nJPEGQuality ) ) / 400.0 ) ; 897 fE *= v; 898 } 899 nEstimatedFileSize = static_cast< sal_Int64 >( fE ); 900 } 901 sal_Unicode nSeparator = '.'; 902 OUString aStr( getString( STR_FILESIZESEPARATOR ) ); 903 if ( aStr.getLength() ) 904 nSeparator = aStr[ 0 ]; 905 setControlProperty( TKGet( TK_FixedText7Pg4 ), TKGet( TK_Label ), Any( ImpValueOfInMB( nCurrentFileSize, nSeparator ) ) ); 906 setControlProperty( TKGet( TK_FixedText8Pg4 ), TKGet( TK_Label ), Any( ImpValueOfInMB( nEstimatedFileSize, nSeparator ) ) ); 907 SetConfigProperty( TK_EstimatedFileSize, Any( nEstimatedFileSize ) ); 908 } 909 910 void OptimizerDialog::InitPage4() 911 { 912 { // creating progress bar: 913 OUString pNames[] = { 914 TKGet( TK_Height ), 915 TKGet( TK_Name ), 916 TKGet( TK_PositionX ), 917 TKGet( TK_PositionY ), 918 TKGet( TK_ProgressValue ), 919 TKGet( TK_ProgressValueMax ), 920 TKGet( TK_ProgressValueMin ), 921 TKGet( TK_Width ) }; 922 923 Any pValues[] = { 924 Any( (sal_Int32)12 ), 925 Any( OUString( RTL_CONSTASCII_USTRINGPARAM("STR_SAVE_AS") ) ),//TODO 926 Any( (sal_Int32)( PAGE_POS_X + 6 ) ), 927 Any( (sal_Int32)( DIALOG_HEIGHT - 75 ) ), 928 Any( (sal_Int32)( 0 ) ), 929 Any( (sal_Int32)( 100 ) ), 930 Any( (sal_Int32)( 0 ) ), 931 Any( (sal_Int32)( PAGE_WIDTH - 12 ) ) }; 932 933 sal_Int32 nCount = sizeof( pNames ) / sizeof( OUString ); 934 935 Sequence< rtl::OUString > aNames( pNames, nCount ); 936 Sequence< Any > aValues( pValues, nCount ); 937 938 Reference< XMultiPropertySet > xMultiPropertySet( insertControlModel( OUString( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.awt.UnoControlProgressBarModel" ) ), 939 TKGet( TK_Progress ), aNames, aValues ), UNO_QUERY ); 940 } 941 942 Sequence< OUString > aItemList; 943 std::vector< rtl::OUString > aControlList; 944 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText0Pg4 ), getString( STR_SUMMARY_TITLE ), PAGE_POS_X, PAGE_POS_Y, PAGE_WIDTH, 8, sal_False, sal_True, mnTabIndex++ ) ); 945 // aControlList.push_back( ImplInsertSeparator( TKGet( TK_Separator0Pg4 ), 0, PAGE_POS_X + 6, PAGE_POS_Y + 90, PAGE_WIDTH - 12, 1 ) ); 946 947 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText4Pg4 ), OUString(), PAGE_POS_X + 6, PAGE_POS_Y + 14, PAGE_WIDTH - 12, 8, sal_False, sal_False, mnTabIndex++ ) ); 948 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText5Pg4 ), OUString(), PAGE_POS_X + 6, PAGE_POS_Y + 22, PAGE_WIDTH - 12, 8, sal_False, sal_False, mnTabIndex++ ) ); 949 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText6Pg4 ), OUString(), PAGE_POS_X + 6, PAGE_POS_Y + 30, PAGE_WIDTH - 12, 8, sal_False, sal_False, mnTabIndex++ ) ); 950 951 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText2Pg4 ), getString( STR_CURRENT_FILESIZE ), PAGE_POS_X + 6, PAGE_POS_Y + 50, 88, 8, sal_False, sal_False, mnTabIndex++ ) ); 952 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText7Pg4 ), OUString(), PAGE_POS_X + 100, PAGE_POS_Y + 50, 30, 8, sal_False, sal_False, mnTabIndex++ ) ); 953 setControlProperty( TKGet( TK_FixedText7Pg4 ), TKGet( TK_Align ), Any( static_cast< short >( 2 ) ) ); 954 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText3Pg4 ), getString( STR_ESTIMATED_FILESIZE ), PAGE_POS_X + 6, PAGE_POS_Y + 58, 88, 8, sal_False, sal_False, mnTabIndex++ ) ); 955 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText8Pg4 ), OUString(), PAGE_POS_X + 100, PAGE_POS_Y + 58, 30, 8, sal_False, sal_False, mnTabIndex++ ) ); 956 setControlProperty( TKGet( TK_FixedText8Pg4 ), TKGet( TK_Align ), Any( static_cast< short >( 2 ) ) ); 957 958 aControlList.push_back( ImplInsertRadioButton( TKGet( TK_RadioButton0Pg4 ), getString( STR_APPLY_TO_CURRENT ), HID(HID_SDEXT_MINIMIZER_WIZ_STEP5_RB_CURDOC),PAGE_POS_X + 6, PAGE_POS_Y + 78, PAGE_WIDTH - 12, 8, sal_False, mnTabIndex++ ) ); 959 aControlList.push_back( ImplInsertRadioButton( TKGet( TK_RadioButton1Pg4 ), getString( STR_SAVE_AS ), HID(HID_SDEXT_MINIMIZER_WIZ_STEP5_RB_NEWDOC),PAGE_POS_X + 6, PAGE_POS_Y + 90, PAGE_WIDTH - 12, 8, sal_False, mnTabIndex++ ) ); 960 aControlList.push_back( ImplInsertFixedText( TKGet( TK_FixedText1Pg4 ), OUString(), PAGE_POS_X + 6, DIALOG_HEIGHT - 87, PAGE_WIDTH - 12, 8, sal_True, sal_False, mnTabIndex++ ) ); 961 aControlList.push_back( TKGet( TK_Progress ) ); 962 aControlList.push_back( ImplInsertSeparator( TKGet( TK_Separator1Pg4 ), 0, PAGE_POS_X + 6, DIALOG_HEIGHT - 58, PAGE_WIDTH - 12, 1 ) ); 963 aControlList.push_back( ImplInsertCheckBox( TKGet( TK_CheckBox1Pg4 ), getString( STR_SAVE_SETTINGS ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP5_CB_SAVESETTINGS ), PAGE_POS_X + 6, DIALOG_HEIGHT - 47, 100, 8, mnTabIndex++ ) ); 964 // don't listen to this 965 aControlList.push_back( 966 ImplInsertComboBox( 967 TKGet( TK_ComboBox0Pg4 ), HID( HID_SDEXT_MINIMIZER_WIZ_STEP5_LB_SETTINGSNAME ),sal_True, aItemList, 968 PAGE_POS_X + 106, DIALOG_HEIGHT - 48, 100, 12, mnTabIndex++ , 969 false) ); 970 maControlPages.push_back( aControlList ); 971 DeactivatePage( 4 ); 972 973 // creating a default session name that hasn't been used yet 974 OUString aSettingsName; 975 OUString aDefault( getString( STR_MY_SETTINGS ) ); 976 sal_Int32 nSession = 1; 977 sal_uInt32 i; 978 const std::vector< OptimizerSettings >& rList( GetOptimizerSettings() ); 979 do 980 { 981 OUString aTemp( aDefault.concat( OUString::valueOf( nSession++ ) ) ); 982 for ( i = 1; i < rList.size(); i++ ) 983 { 984 if ( rList[ i ].maName == aTemp ) 985 break; 986 } 987 if ( i == rList.size() ) 988 aSettingsName = aTemp; 989 } 990 while( !aSettingsName.getLength() ); 991 992 setControlProperty( TKGet( TK_ComboBox0Pg4 ), TKGet( TK_Text ), Any( aSettingsName ) ); 993 setControlProperty( TKGet( TK_RadioButton0Pg4 ), TKGet( TK_Enabled ), Any( !mbIsReadonly ) ); 994 setControlProperty( TKGet( TK_RadioButton1Pg4 ), TKGet( TK_Enabled ), Any( !mbIsReadonly ) ); 995 996 UpdateControlStatesPage4(); 997 } 998 999 // ----------------------------------------------------------------------------- 1000 void OptimizerDialog::EnablePage( sal_Int16 nStep ) 1001 { 1002 std::vector< rtl::OUString >::iterator aBeg( maControlPages[ nStep ].begin() ); 1003 std::vector< rtl::OUString >::iterator aEnd( maControlPages[ nStep ].end() ); 1004 while( aBeg != aEnd ) 1005 setControlProperty( *aBeg++, TKGet( TK_Enabled ), Any( sal_True ) ); 1006 } 1007 void OptimizerDialog::DisablePage( sal_Int16 nStep ) 1008 { 1009 std::vector< rtl::OUString >::iterator aBeg( maControlPages[ nStep ].begin() ); 1010 std::vector< rtl::OUString >::iterator aEnd( maControlPages[ nStep ].end() ); 1011 while( aBeg != aEnd ) 1012 setControlProperty( *aBeg++, TKGet( TK_Enabled ), Any( sal_False ) ); 1013 } 1014 void OptimizerDialog::ActivatePage( sal_Int16 nStep ) 1015 { 1016 std::vector< rtl::OUString >::iterator aBeg( maControlPages[ nStep ].begin() ); 1017 std::vector< rtl::OUString >::iterator aEnd( maControlPages[ nStep ].end() ); 1018 while( aBeg != aEnd ) 1019 setVisible( *aBeg++, sal_True ); 1020 } 1021 void OptimizerDialog::DeactivatePage( sal_Int16 nStep ) 1022 { 1023 std::vector< rtl::OUString >::iterator aBeg( maControlPages[ nStep ].begin() ); 1024 std::vector< rtl::OUString >::iterator aEnd( maControlPages[ nStep ].end() ); 1025 while( aBeg != aEnd ) 1026 setVisible( *aBeg++, sal_False ); 1027 } 1028