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