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_cui.hxx" 26 27 // include --------------------------------------------------------------- 28 #include <tools/shl.hxx> 29 #include <svl/eitem.hxx> 30 #include <svl/intitem.hxx> 31 #define _SVX_OPTSAVE_CXX 32 33 #include "optsave.hrc" 34 #include <cuires.hrc> 35 36 #include "optsave.hxx" 37 #include <dialmgr.hxx> 38 #include <comphelper/processfactory.hxx> 39 #include <comphelper/sequenceasvector.hxx> 40 #include <comphelper/sequenceashashmap.hxx> 41 #include <unotools/moduleoptions.hxx> 42 #include <unotools/saveopt.hxx> 43 #include <comphelper/sequenceasvector.hxx> 44 #include <comphelper/sequenceashashmap.hxx> 45 #include <com/sun/star/container/XContainerQuery.hpp> 46 #include <com/sun/star/container/XEnumeration.hpp> 47 #include <com/sun/star/lang/XMultiServiceFactory.hpp> 48 #include <com/sun/star/container/XNameContainer.hpp> 49 #include <com/sun/star/container/XContainerQuery.hpp> 50 #include <com/sun/star/container/XEnumeration.hpp> 51 #include <com/sun/star/beans/PropertyValue.hpp> 52 #include <com/sun/star/util/XFlushable.hpp> 53 #include <sfx2/docfilt.hxx> 54 #include <svtools/stdctrl.hxx> 55 #include <vcl/fixed.hxx> 56 #include <vcl/msgbox.hxx> 57 #include <unotools/configitem.hxx> 58 #include <unotools/optionsdlg.hxx> 59 60 #include <vcl/msgbox.hxx> 61 62 using namespace com::sun::star::uno; 63 using namespace com::sun::star::util; 64 using namespace com::sun::star::lang; 65 using namespace com::sun::star::beans; 66 using namespace com::sun::star::container; 67 using namespace comphelper; 68 using rtl::OUString; 69 70 #define C2U(cChar) OUString::createFromAscii(cChar) 71 #define C2S(cChar) String( RTL_CONSTASCII_STRINGPARAM(cChar) ) 72 #define CFG_PAGE_AND_GROUP C2S("General"), C2S("LoadSave") 73 // !! you have to update these index, if you changed the list of the child windows !! 74 #define WININDEX_AUTOSAVE ((sal_uInt16)6) 75 #define WININDEX_SAVEURL_RELFSYS ((sal_uInt16)9) 76 77 // ---------------------------------------------------------------------- 78 #ifdef FILTER_WARNING_ENABLED 79 class SvxAlienFilterWarningConfig_Impl : public utl::ConfigItem 80 { 81 sal_Bool bWarning; 82 com::sun::star::uno::Sequence< OUString > aPropNames; 83 84 public: 85 SvxAlienFilterWarningConfig_Impl(); 86 ~SvxAlienFilterWarningConfig_Impl(); 87 88 virtual void Commit(); 89 90 void ResetWarning() 91 { 92 if(bWarning) 93 { 94 bWarning = sal_False; 95 ConfigItem::SetModified(); 96 } 97 98 } 99 sal_Bool IsWarning()const{return bWarning;} 100 }; 101 // ---------------------------------------------------------------------- 102 SvxAlienFilterWarningConfig_Impl::SvxAlienFilterWarningConfig_Impl() : 103 ConfigItem(C2U("TypeDetection.Misc/Defaults"), 104 CONFIG_MODE_IMMEDIATE_UPDATE), 105 aPropNames(1), 106 bWarning(sal_True) 107 { 108 aPropNames.getArray()[0] = C2U("ShowAlienFilterWarning"); 109 Sequence<Any> aValues = GetProperties(aPropNames); 110 const Any* pValues = aValues.getConstArray(); 111 DBG_ASSERT(aValues.getLength() == aPropNames.getLength(), "GetProperties failed"); 112 if(aValues.getLength() == aPropNames.getLength() && 113 pValues[0].hasValue() && 114 pValues[0].getValueType() == ::getBooleanCppuType()) 115 bWarning = *(sal_Bool*)pValues[0].getValue(); 116 } 117 // ---------------------------------------------------------------------- 118 SvxAlienFilterWarningConfig_Impl::~SvxAlienFilterWarningConfig_Impl() 119 { 120 if(IsModified()) 121 Commit(); 122 } 123 // ---------------------------------------------------------------------- 124 void SvxAlienFilterWarningConfig_Impl::Commit() 125 { 126 Sequence<Any> aValues(aPropNames.getLength()); 127 Any* pValues = aValues.getArray(); 128 pValues[0].setValue(&bWarning, ::getBooleanCppuType()); 129 PutProperties(aPropNames, aValues); 130 } 131 #endif // FILTER_WARNING_ENABLED 132 // ---------------------------------------------------------------------- 133 // ---------------------------------------------------------------------- 134 135 struct SvxSaveTabPage_Impl 136 { 137 Reference< XNameContainer > xFact; 138 Sequence< OUString > aFilterArr[APP_COUNT]; 139 Sequence< sal_Bool > aAlienArr[APP_COUNT]; 140 Sequence< sal_Bool > aODFArr[APP_COUNT]; 141 Sequence< OUString > aUIFilterArr[APP_COUNT]; 142 OUString aDefaultArr[APP_COUNT]; 143 sal_Bool aDefaultReadonlyArr[APP_COUNT]; 144 sal_Bool bInitialized; 145 146 SvxSaveTabPage_Impl(); 147 ~SvxSaveTabPage_Impl(); 148 }; 149 150 SvxSaveTabPage_Impl::SvxSaveTabPage_Impl() : bInitialized( sal_False ) 151 { 152 } 153 154 SvxSaveTabPage_Impl::~SvxSaveTabPage_Impl() 155 { 156 } 157 158 // class SvxSaveTabPage -------------------------------------------------- 159 160 SfxSaveTabPage::SfxSaveTabPage( Window* pParent, const SfxItemSet& rCoreSet ) : 161 162 SfxTabPage( pParent, CUI_RES( RID_SFXPAGE_SAVE ), rCoreSet ), 163 164 aLoadFL ( this, CUI_RES( LB_LOAD ) ), 165 aLoadUserSettingsCB ( this, CUI_RES( CB_LOAD_SETTINGS ) ), 166 aLoadDocPrinterCB ( this, CUI_RES( CB_LOAD_DOCPRINTER ) ), 167 168 aSaveFL ( this, CUI_RES( GB_SAVE ) ), 169 aDocInfoCB ( this, CUI_RES( BTN_DOCINFO ) ), 170 aBackupFI ( this, CUI_RES( FI_BACKUP ) ), 171 aBackupCB ( this, CUI_RES( BTN_BACKUP ) ), 172 aAutoSaveCB ( this, CUI_RES( BTN_AUTOSAVE ) ), 173 aAutoSaveEdit ( this, CUI_RES( ED_AUTOSAVE ) ), 174 aMinuteFT ( this, CUI_RES( FT_MINUTE ) ), 175 aRelativeFsysCB ( this, CUI_RES( BTN_RELATIVE_FSYS ) ), 176 aRelativeInetCB ( this, CUI_RES( BTN_RELATIVE_INET ) ), 177 178 aDefaultFormatFL ( this, CUI_RES( FL_FILTER ) ), 179 aODFVersionFT ( this, CUI_RES( FT_ODF_VERSION ) ), 180 aODFVersionLB ( this, CUI_RES( LB_ODF_VERSION ) ), 181 aODFEncryptionCB ( this, CUI_RES( BTN_ODFENCRYPTION ) ), 182 aSizeOptimizationCB ( this, CUI_RES( BTN_NOPRETTYPRINTING ) ), 183 aWarnAlienFormatCB ( this, CUI_RES( BTN_WARNALIENFORMAT ) ), 184 aDocTypeFT ( this, CUI_RES( FT_APP ) ), 185 aDocTypeLB ( this, CUI_RES( LB_APP ) ), 186 aSaveAsFT ( this, CUI_RES( FT_FILTER ) ), 187 aSaveAsFI ( this, CUI_RES( FI_FILTER ) ), 188 aSaveAsLB ( this, CUI_RES( LB_FILTER ) ), 189 aODFWarningFI ( this, CUI_RES( FI_ODF_WARNING ) ), 190 aODFWarningFT ( this, CUI_RES( FT_WARN ) ), 191 192 pImpl ( new SvxSaveTabPage_Impl ) 193 194 { 195 sal_Bool bHighContrast = GetSettings().GetStyleSettings().GetHighContrastMode(); 196 aODFWarningFI.SetImage( 197 Image( CUI_RES( bHighContrast ? IMG_ODF_WARNING_HC : IMG_ODF_WARNING ) ) ); 198 199 FreeResource(); 200 201 Link aLink = LINK( this, SfxSaveTabPage, AutoClickHdl_Impl ); 202 aAutoSaveCB.SetClickHdl( aLink ); 203 aAutoSaveEdit.SetMaxTextLen( 2 ); 204 205 SvtModuleOptions aModuleOpt; 206 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SMATH ) ) 207 { 208 aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_MATH )); 209 aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_MATH )); 210 } 211 else 212 { 213 pImpl->aDefaultArr[APP_MATH] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_MATH); 214 pImpl->aDefaultReadonlyArr[APP_MATH] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_MATH); 215 } 216 217 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SDRAW ) ) 218 { 219 aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_DRAW )); 220 aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_DRAW )); 221 } 222 else 223 { 224 pImpl->aDefaultArr[APP_DRAW] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_DRAW); 225 pImpl->aDefaultReadonlyArr[APP_DRAW] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_DRAW); 226 } 227 228 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS ) ) 229 { 230 aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_IMPRESS )); 231 aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_IMPRESS )); 232 } 233 else 234 { 235 pImpl->aDefaultArr[APP_IMPRESS] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS); 236 pImpl->aDefaultReadonlyArr[APP_IMPRESS] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_IMPRESS); 237 } 238 239 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) ) 240 { 241 aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_CALC )); 242 aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_CALC )); 243 } 244 else 245 { 246 pImpl->aDefaultArr[APP_CALC] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_CALC); 247 pImpl->aDefaultReadonlyArr[APP_CALC] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_CALC); 248 } 249 250 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) ) 251 { 252 aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_WRITER )); 253 aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_WRITER_WEB )); 254 aSaveAsLB.RemoveEntry(aSaveAsLB.GetEntryPos( (void*) APP_WRITER_GLOBAL )); 255 aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_WRITER )); 256 aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_WRITER_WEB )); 257 aDocTypeLB.RemoveEntry(aDocTypeLB.GetEntryPos( (void*) APP_WRITER_GLOBAL )); 258 } 259 else 260 { 261 pImpl->aDefaultArr[APP_WRITER] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITER); 262 pImpl->aDefaultArr[APP_WRITER_WEB] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB); 263 pImpl->aDefaultArr[APP_WRITER_GLOBAL] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL); 264 pImpl->aDefaultReadonlyArr[APP_WRITER] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITER); 265 pImpl->aDefaultReadonlyArr[APP_WRITER_WEB] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITERWEB); 266 pImpl->aDefaultReadonlyArr[APP_WRITER_GLOBAL] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITERGLOBAL); 267 } 268 269 aLink = LINK( this, SfxSaveTabPage, ODFVersionHdl_Impl ); 270 aODFVersionLB.SetSelectHdl( aLink ); 271 aLink = LINK( this, SfxSaveTabPage, FilterHdl_Impl ); 272 aDocTypeLB.SetSelectHdl( aLink ); 273 aSaveAsLB.SetSelectHdl( aLink ); 274 275 DetectHiddenControls(); 276 } 277 278 // ----------------------------------------------------------------------- 279 280 SfxSaveTabPage::~SfxSaveTabPage() 281 { 282 delete pImpl; 283 } 284 285 // ----------------------------------------------------------------------- 286 287 SfxTabPage* SfxSaveTabPage::Create( Window* pParent, 288 const SfxItemSet& rAttrSet ) 289 { 290 return ( new SfxSaveTabPage( pParent, rAttrSet ) ); 291 } 292 293 // ----------------------------------------------------------------------- 294 bool SfxSaveTabPage::AcceptFilter( sal_uInt16 nPos ) 295 { 296 const OUString* pFilters = pImpl->aFilterArr[nPos].getConstArray(); 297 sal_Bool bAlien = sal_False, bODF = sal_False; 298 OUString* pUIFilters = pImpl->aUIFilterArr[nPos].getArray(); 299 OUString sUIName; 300 for(int nFilter = 0; nFilter < pImpl->aFilterArr[nPos].getLength(); nFilter++) 301 { 302 if( pImpl->aDefaultArr[nPos] == pFilters[nFilter] ) 303 { 304 bAlien = pImpl->aAlienArr[nPos][nFilter]; 305 bODF = pImpl->aODFArr[nPos][nFilter]; 306 sUIName = pUIFilters[nFilter];; 307 break; 308 } 309 } 310 bool bSet = true; 311 return bSet; 312 } 313 // ----------------------------------------------------------------------- 314 void SfxSaveTabPage::DetectHiddenControls() 315 { 316 long nDelta = 0; 317 // the index of the first child window which perhaps have to move upwards 318 sal_uInt16 nWinIndex = WININDEX_SAVEURL_RELFSYS; 319 SvtOptionsDialogOptions aOptionsDlgOpt; 320 321 if ( aOptionsDlgOpt.IsOptionHidden( C2S("Backup"), CFG_PAGE_AND_GROUP ) ) 322 { 323 // hide controls of "Backup" 324 aBackupFI.Hide(); 325 aBackupCB.Hide(); 326 // the other controls have to move upwards the height of checkbox + space 327 nDelta = aAutoSaveCB.GetPosPixel().Y() - aBackupCB.GetPosPixel().Y(); 328 } 329 330 if ( aOptionsDlgOpt.IsOptionHidden( C2S("AutoSave"), CFG_PAGE_AND_GROUP ) ) 331 { 332 // hide controls of "AutoSave" 333 aAutoSaveCB.Hide(); 334 aAutoSaveEdit.Hide(); 335 aMinuteFT.Hide(); 336 // the other controls have to move upwards the height of checkbox + space 337 nDelta += aRelativeFsysCB.GetPosPixel().Y() - aAutoSaveCB.GetPosPixel().Y(); 338 } 339 else if ( nDelta > 0 ) 340 // the "AutoSave" controls have to move upwards too 341 nWinIndex = WININDEX_AUTOSAVE; 342 343 if ( nDelta > 0 ) 344 { 345 sal_uInt16 i, nChildCount = GetChildCount(); 346 for ( i = nWinIndex; i < nChildCount; ++i ) 347 { 348 Window* pWin = GetChild(i); 349 Point aPos = pWin->GetPosPixel(); 350 aPos.Y() -= nDelta; 351 pWin->SetPosPixel( aPos ); 352 } 353 } 354 } 355 // ----------------------------------------------------------------------- 356 sal_Bool SfxSaveTabPage::FillItemSet( SfxItemSet& rSet ) 357 { 358 sal_Bool bModified = sal_False; 359 SvtSaveOptions aSaveOpt; 360 if(aLoadUserSettingsCB.IsChecked() != aLoadUserSettingsCB.GetSavedValue()) 361 { 362 aSaveOpt.SetLoadUserSettings(aLoadUserSettingsCB.IsChecked()); 363 } 364 365 if ( aLoadDocPrinterCB.IsChecked() != aLoadDocPrinterCB.GetSavedValue() ) 366 aSaveOpt.SetLoadDocumentPrinter( aLoadDocPrinterCB.IsChecked() ); 367 368 if ( aODFVersionLB.GetSelectEntryPos() != aODFVersionLB.GetSavedValue() ) 369 { 370 long nVersion = long( aODFVersionLB.GetEntryData( aODFVersionLB.GetSelectEntryPos() ) ); 371 aSaveOpt.SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion( nVersion ) ); 372 } 373 374 if ( aDocInfoCB.IsChecked() != aDocInfoCB.GetSavedValue() ) 375 { 376 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_DOCINFO ), 377 aDocInfoCB.IsChecked() ) ); 378 bModified |= sal_True; 379 } 380 381 if ( aBackupCB.IsEnabled() && aBackupCB.IsChecked() != aBackupCB.GetSavedValue() ) 382 { 383 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_BACKUP ), 384 aBackupCB.IsChecked() ) ); 385 bModified |= sal_True; 386 } 387 388 if ( aODFEncryptionCB.IsChecked() != aODFEncryptionCB.GetSavedValue() ) 389 { 390 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_ODFENCRYPTION ), aODFEncryptionCB.IsChecked() ) ); 391 bModified |= sal_True; 392 } 393 394 if ( aSizeOptimizationCB.IsChecked() != aSizeOptimizationCB.GetSavedValue() ) 395 { 396 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_PRETTYPRINTING ), !aSizeOptimizationCB.IsChecked() ) ); 397 bModified |= sal_True; 398 } 399 400 if ( aAutoSaveCB.IsChecked() != aAutoSaveCB.GetSavedValue() ) 401 { 402 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_AUTOSAVE ), 403 aAutoSaveCB.IsChecked() ) ); 404 bModified |= sal_True; 405 } 406 if ( aWarnAlienFormatCB.IsChecked() != aWarnAlienFormatCB.GetSavedValue() ) 407 { 408 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_WARNALIENFORMAT ), 409 aWarnAlienFormatCB.IsChecked() ) ); 410 bModified |= sal_True; 411 } 412 413 if ( aAutoSaveEdit.GetText() != aAutoSaveEdit.GetSavedValue() ) 414 { 415 rSet.Put( SfxUInt16Item( GetWhich( SID_ATTR_AUTOSAVEMINUTE ), 416 (sal_uInt16)aAutoSaveEdit.GetValue() ) ); 417 bModified |= sal_True; 418 } 419 // relativ speichern 420 if ( aRelativeFsysCB.IsChecked() != aRelativeFsysCB.GetSavedValue() ) 421 { 422 rSet.Put( SfxBoolItem( GetWhich( SID_SAVEREL_FSYS ), 423 aRelativeFsysCB.IsChecked() ) ); 424 bModified |= sal_True; 425 } 426 427 if ( aRelativeInetCB.IsChecked() != aRelativeInetCB.GetSavedValue() ) 428 { 429 rSet.Put( SfxBoolItem( GetWhich( SID_SAVEREL_INET ), 430 aRelativeInetCB.IsChecked() ) ); 431 bModified |= sal_True; 432 } 433 434 SvtModuleOptions aModuleOpt; 435 if(pImpl->aDefaultArr[APP_MATH].getLength() && 436 pImpl->aDefaultArr[APP_MATH] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_MATH) && 437 AcceptFilter( APP_MATH )) 438 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_MATH, pImpl->aDefaultArr[APP_MATH]); 439 440 if( pImpl->aDefaultArr[APP_DRAW].getLength() && 441 pImpl->aDefaultArr[APP_DRAW] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_DRAW) && 442 AcceptFilter( APP_DRAW )) 443 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_DRAW, pImpl->aDefaultArr[APP_DRAW]); 444 445 if(pImpl->aDefaultArr[APP_IMPRESS].getLength() && 446 pImpl->aDefaultArr[APP_IMPRESS] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS)&& 447 AcceptFilter( APP_IMPRESS )) 448 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS, pImpl->aDefaultArr[APP_IMPRESS]); 449 450 if(pImpl->aDefaultArr[APP_CALC].getLength() && 451 pImpl->aDefaultArr[APP_CALC] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_CALC)&& 452 AcceptFilter( APP_CALC )) 453 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_CALC, pImpl->aDefaultArr[APP_CALC]); 454 455 if(pImpl->aDefaultArr[APP_WRITER].getLength() && 456 pImpl->aDefaultArr[APP_WRITER] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITER)&& 457 AcceptFilter( APP_WRITER)) 458 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITER, pImpl->aDefaultArr[APP_WRITER]); 459 460 if(pImpl->aDefaultArr[APP_WRITER_WEB].getLength() && 461 pImpl->aDefaultArr[APP_WRITER_WEB] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB)&& 462 AcceptFilter( APP_WRITER_WEB )) 463 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB, pImpl->aDefaultArr[APP_WRITER_WEB]); 464 465 if(pImpl->aDefaultArr[APP_WRITER_GLOBAL].getLength() && 466 pImpl->aDefaultArr[APP_WRITER_GLOBAL] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL)&& 467 AcceptFilter( APP_WRITER_GLOBAL )) 468 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL, pImpl->aDefaultArr[APP_WRITER_GLOBAL]); 469 470 return bModified; 471 } 472 473 // ----------------------------------------------------------------------- 474 475 sal_Bool isODFFormat( OUString sFilter ) 476 { 477 static const char* aODFFormats[] = 478 { 479 "writer8", 480 "writer8_template", 481 "writerglobal8", 482 "writerglobal8_writer", 483 "calc8", 484 "calc8_template", 485 "draw8", 486 "draw8_template", 487 "impress8", 488 "impress8_template", 489 "impress8_draw", 490 "chart8", 491 "math8", 492 NULL 493 }; 494 495 sal_Bool bRet = sal_False; 496 int i = 0; 497 while ( aODFFormats[i] != NULL ) 498 { 499 if ( sFilter.equalsAscii( aODFFormats[i++] ) ) 500 { 501 bRet = sal_True; 502 break; 503 } 504 } 505 506 return bRet; 507 } 508 509 void SfxSaveTabPage::Reset( const SfxItemSet& ) 510 { 511 SvtSaveOptions aSaveOpt; 512 aLoadUserSettingsCB.Check(aSaveOpt.IsLoadUserSettings()); 513 aLoadUserSettingsCB.SaveValue(); 514 aLoadDocPrinterCB.Check( aSaveOpt.IsLoadDocumentPrinter() ); 515 aLoadDocPrinterCB.SaveValue(); 516 517 if ( !pImpl->bInitialized ) 518 { 519 try 520 { 521 Reference< XMultiServiceFactory > xMSF = comphelper::getProcessServiceFactory(); 522 pImpl->xFact = Reference<XNameContainer>( 523 xMSF->createInstance(C2U("com.sun.star.document.FilterFactory")), UNO_QUERY); 524 525 DBG_ASSERT(pImpl->xFact.is(), "service com.sun.star.document.FilterFactory unavailable"); 526 Reference< XContainerQuery > xQuery(pImpl->xFact, UNO_QUERY); 527 if(xQuery.is()) 528 { 529 for(sal_uInt16 n = 0; n < aDocTypeLB.GetEntryCount(); n++) 530 { 531 long nData = (long) aDocTypeLB.GetEntryData(n); 532 OUString sCommand; 533 sCommand = C2U("matchByDocumentService=%1:iflags="); 534 sCommand += String::CreateFromInt32(SFX_FILTER_IMPORT|SFX_FILTER_EXPORT); 535 sCommand += C2U(":eflags="); 536 sCommand += String::CreateFromInt32(SFX_FILTER_NOTINFILEDLG); 537 sCommand += C2U(":default_first"); 538 String sReplace; 539 switch(nData) 540 { 541 case APP_WRITER : sReplace = C2U("com.sun.star.text.TextDocument"); break; 542 case APP_WRITER_WEB : sReplace = C2U("com.sun.star.text.WebDocument"); break; 543 case APP_WRITER_GLOBAL : sReplace = C2U("com.sun.star.text.GlobalDocument"); break; 544 case APP_CALC : sReplace = C2U("com.sun.star.sheet.SpreadsheetDocument");break; 545 case APP_IMPRESS : sReplace = C2U("com.sun.star.presentation.PresentationDocument");break; 546 case APP_DRAW : sReplace = C2U("com.sun.star.drawing.DrawingDocument");break; 547 case APP_MATH : sReplace = C2U("com.sun.star.formula.FormulaProperties");break; 548 default: DBG_ERROR("illegal user data"); 549 } 550 String sTmp(sCommand); 551 sTmp.SearchAndReplaceAscii("%1", sReplace); 552 sCommand = sTmp; 553 Reference< XEnumeration > xList = xQuery->createSubSetEnumerationByQuery(sCommand); 554 SequenceAsVector< OUString > lList; 555 SequenceAsVector< sal_Bool > lAlienList; 556 SequenceAsVector< sal_Bool > lODFList; 557 while(xList->hasMoreElements()) 558 { 559 SequenceAsHashMap aFilter(xList->nextElement()); 560 OUString sFilter = aFilter.getUnpackedValueOrDefault(OUString::createFromAscii("Name"),OUString()); 561 if (sFilter.getLength()) 562 { 563 sal_Int32 nFlags = aFilter.getUnpackedValueOrDefault(OUString::createFromAscii("Flags"),sal_Int32()); 564 lList.push_back(sFilter); 565 lAlienList.push_back(0 != (nFlags & SFX_FILTER_ALIEN)); 566 lODFList.push_back( isODFFormat( sFilter ) ); 567 } 568 } 569 pImpl->aFilterArr[nData] = lList.getAsConstList(); 570 pImpl->aAlienArr[nData] = lAlienList.getAsConstList(); 571 pImpl->aODFArr[nData] = lODFList.getAsConstList(); 572 } 573 } 574 aDocTypeLB.SelectEntryPos(0); 575 FilterHdl_Impl(&aDocTypeLB); 576 } 577 catch(Exception& e) 578 { 579 (void) e; 580 DBG_ERROR( 581 rtl::OUStringToOString( 582 (rtl::OUString( 583 RTL_CONSTASCII_USTRINGPARAM( 584 "exception in FilterFactory access: ")) + 585 e.Message), 586 RTL_TEXTENCODING_UTF8). 587 getStr()); 588 } 589 590 pImpl->bInitialized = sal_True; 591 } 592 593 aDocInfoCB.Check(aSaveOpt.IsDocInfoSave()); 594 // aDocInfoCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_DOCINFSAVE)); 595 596 aBackupCB.Check(aSaveOpt.IsBackup()); 597 sal_Bool bBackupRO = aSaveOpt.IsReadOnly(SvtSaveOptions::E_BACKUP); 598 aBackupCB.Enable(!bBackupRO); 599 aBackupFI.Show(bBackupRO); 600 601 aAutoSaveCB.Check(aSaveOpt.IsAutoSave()); 602 aWarnAlienFormatCB.Check(aSaveOpt.IsWarnAlienFormat()); 603 aWarnAlienFormatCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_WARNALIENFORMAT)); 604 // aAutoSaveCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_AUTOSAVE)); 605 606 // ODF encryption 607 aODFEncryptionCB.Check( !aSaveOpt.IsUseSHA1InODF12()); 608 609 // the pretty printing 610 aSizeOptimizationCB.Check( !aSaveOpt.IsPrettyPrinting()); 611 // aSizeOptimizationCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_DOPRETTYPRINTING )); 612 613 614 aAutoSaveEdit.SetValue( aSaveOpt.GetAutoSaveTime() ); 615 // aAutoSaveEdit.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_AUTOSAVETIME)); 616 617 // relativ speichern 618 aRelativeFsysCB.Check( aSaveOpt.IsSaveRelFSys() ); 619 // aRelativeFsysCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_SAVERELFSYS)); 620 621 aRelativeInetCB.Check( aSaveOpt.IsSaveRelINet() ); 622 // aRelativeInetCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_SAVERELINET)); 623 624 void* pDefaultVersion = (void*)long( aSaveOpt.GetODFDefaultVersion() ); 625 aODFVersionLB.SelectEntryPos( aODFVersionLB.GetEntryPos( pDefaultVersion ) ); 626 627 AutoClickHdl_Impl( &aAutoSaveCB ); 628 ODFVersionHdl_Impl( &aODFVersionLB ); 629 630 aDocInfoCB.SaveValue(); 631 aBackupCB.SaveValue(); 632 aWarnAlienFormatCB.SaveValue(); 633 aODFEncryptionCB.SaveValue(); 634 aSizeOptimizationCB.SaveValue(); 635 aAutoSaveCB.SaveValue(); 636 aAutoSaveEdit.SaveValue(); 637 // aAutoSavePromptBtn.SaveValue(); 638 639 aRelativeFsysCB.SaveValue(); 640 aRelativeInetCB.SaveValue(); 641 aODFVersionLB.SaveValue(); 642 } 643 644 // ----------------------------------------------------------------------- 645 646 IMPL_LINK( SfxSaveTabPage, AutoClickHdl_Impl, CheckBox *, pBox ) 647 { 648 if ( pBox == &aAutoSaveCB ) 649 { 650 if ( aAutoSaveCB.IsChecked() ) 651 { 652 aAutoSaveEdit.Enable(); 653 aMinuteFT.Enable(); 654 // aAutoSavePromptBtn.Enable(); 655 aAutoSaveEdit.GrabFocus(); 656 } 657 else 658 { 659 aAutoSaveEdit.Disable(); 660 aMinuteFT.Disable(); 661 // aAutoSavePromptBtn.Disable(); 662 } 663 } 664 return 0; 665 } 666 /* -----------------------------05.04.01 13:10-------------------------------- 667 668 ---------------------------------------------------------------------------*/ 669 OUString lcl_ExtracUIName(const Sequence<PropertyValue> &rProperties) 670 { 671 OUString sName; 672 const PropertyValue* pPropVal = rProperties.getConstArray(); 673 const PropertyValue* const pEnd = pPropVal + rProperties.getLength(); 674 for( ; pPropVal != pEnd; pPropVal++ ) 675 { 676 const OUString &rName = pPropVal->Name; 677 if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "UIName" ) ) ) 678 { 679 OUString sUIName; 680 if ( ( pPropVal->Value >>= sUIName ) && sUIName.getLength() ) 681 return sUIName; 682 } 683 else if( rName.equalsAsciiL( RTL_CONSTASCII_STRINGPARAM( "Name" ) ) ) 684 { 685 pPropVal->Value >>= sName; 686 } 687 } 688 689 OSL_ENSURE( false, "Filter without UIName!" ); 690 691 return sName; 692 } 693 /* -----------------------------05.04.01 13:37-------------------------------- 694 695 ---------------------------------------------------------------------------*/ 696 IMPL_LINK( SfxSaveTabPage, FilterHdl_Impl, ListBox *, pBox ) 697 { 698 sal_uInt16 nCurPos = aDocTypeLB.GetSelectEntryPos(); 699 700 long nData = -1; 701 if(nCurPos < APP_COUNT) 702 nData = (long) aDocTypeLB.GetEntryData(nCurPos); 703 704 if ( nData >= 0 && nData < APP_COUNT ) 705 { 706 if(&aDocTypeLB == pBox) 707 { 708 aSaveAsLB.Clear(); 709 const OUString* pFilters = pImpl->aFilterArr[nData].getConstArray(); 710 if(!pImpl->aUIFilterArr[nData].getLength()) 711 { 712 pImpl->aUIFilterArr[nData].realloc(pImpl->aFilterArr[nData].getLength()); 713 OUString* pUIFilters = pImpl->aUIFilterArr[nData].getArray(); 714 for(int nFilter = 0; nFilter < pImpl->aFilterArr[nData].getLength(); nFilter++) 715 { 716 Any aProps = pImpl->xFact->getByName(pFilters[nFilter]); 717 Sequence<PropertyValue> aProperties; 718 aProps >>= aProperties; 719 pUIFilters[nFilter] = lcl_ExtracUIName(aProperties); 720 } 721 } 722 const OUString* pUIFilters = pImpl->aUIFilterArr[nData].getConstArray(); 723 OUString sSelect; 724 for(int i = 0; i < pImpl->aUIFilterArr[nData].getLength(); i++) 725 { 726 sal_uInt16 nEntryPos = aSaveAsLB.InsertEntry(pUIFilters[i]); 727 if ( pImpl->aODFArr[nData][i] ) 728 aSaveAsLB.SetEntryData( nEntryPos, (void*)pImpl ); 729 if(pFilters[i] == pImpl->aDefaultArr[nData]) 730 sSelect = pUIFilters[i]; 731 } 732 if(sSelect.getLength()) 733 aSaveAsLB.SelectEntry(sSelect); 734 aSaveAsFI.Show(pImpl->aDefaultReadonlyArr[nData]); 735 aSaveAsFT.Enable(!pImpl->aDefaultReadonlyArr[nData]); 736 aSaveAsLB.Enable(!pImpl->aDefaultReadonlyArr[nData]); 737 } 738 else 739 { 740 OUString sSelect = pBox->GetSelectEntry(); 741 const OUString* pFilters = pImpl->aFilterArr[nData].getConstArray(); 742 OUString* pUIFilters = pImpl->aUIFilterArr[nData].getArray(); 743 for(int i = 0; i < pImpl->aUIFilterArr[nData].getLength(); i++) 744 if(pUIFilters[i] == sSelect) 745 { 746 sSelect = pFilters[i]; 747 break; 748 } 749 750 pImpl->aDefaultArr[nData] = sSelect; 751 } 752 } 753 754 ODFVersionHdl_Impl( &aSaveAsLB ); 755 return 0; 756 }; 757 758 IMPL_LINK( SfxSaveTabPage, ODFVersionHdl_Impl, ListBox *, EMPTYARG ) 759 { 760 long nVersion = long( aODFVersionLB.GetEntryData( aODFVersionLB.GetSelectEntryPos() ) ); 761 bool bShown = SvtSaveOptions::ODFDefaultVersion( nVersion ) != SvtSaveOptions::ODFVER_LATEST; 762 if ( bShown ) 763 { 764 bool bHasODFFormat = false; 765 sal_uInt16 i = 0, nCount = aSaveAsLB.GetEntryCount(); 766 for ( ; i < nCount; ++ i ) 767 { 768 if ( aSaveAsLB.GetEntryData(i) != NULL ) 769 { 770 bHasODFFormat = true; 771 break; 772 } 773 } 774 775 bShown = !bHasODFFormat 776 || ( aSaveAsLB.GetEntryData( aSaveAsLB.GetSelectEntryPos() ) != NULL ); 777 } 778 779 aODFWarningFI.Show( bShown ); 780 aODFWarningFT.Show( bShown ); 781 782 return 0; 783 } 784 785