bump product version to 4.1.6.2
[LibreOffice.git] / cui / source / options / optsave.cxx
blob24e8a08166f0f319750e9f4e0771fba78d471a8c
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*
3 * This file is part of the LibreOffice project.
5 * This Source Code Form is subject to the terms of the Mozilla Public
6 * License, v. 2.0. If a copy of the MPL was not distributed with this
7 * file, You can obtain one at http://mozilla.org/MPL/2.0/.
9 * This file incorporates work covered by the following license notice:
11 * Licensed to the Apache Software Foundation (ASF) under one or more
12 * contributor license agreements. See the NOTICE file distributed
13 * with this work for additional information regarding copyright
14 * ownership. The ASF licenses this file to you under the Apache
15 * License, Version 2.0 (the "License"); you may not use this file
16 * except in compliance with the License. You may obtain a copy of
17 * the License at http://www.apache.org/licenses/LICENSE-2.0 .
20 #include <tools/shl.hxx>
21 #include <svl/eitem.hxx>
22 #include <svl/intitem.hxx>
24 #include "optsave.hrc"
25 #include <cuires.hrc>
27 #include "optsave.hxx"
28 #include <dialmgr.hxx>
29 #include <comphelper/processfactory.hxx>
30 #include <unotools/moduleoptions.hxx>
31 #include <unotools/saveopt.hxx>
32 #include <comphelper/sequenceasvector.hxx>
33 #include <comphelper/sequenceashashmap.hxx>
34 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
35 #include <com/sun/star/container/XNameContainer.hpp>
36 #include <com/sun/star/container/XContainerQuery.hpp>
37 #include <com/sun/star/container/XEnumeration.hpp>
38 #include <com/sun/star/beans/PropertyValue.hpp>
39 #include <com/sun/star/util/XFlushable.hpp>
40 #include <sfx2/docfilt.hxx>
41 #include <svtools/stdctrl.hxx>
42 #include <vcl/fixed.hxx>
43 #include <unotools/configitem.hxx>
44 #include <unotools/optionsdlg.hxx>
46 #include <vcl/msgbox.hxx>
48 using namespace com::sun::star::uno;
49 using namespace com::sun::star::util;
50 using namespace com::sun::star::lang;
51 using namespace com::sun::star::beans;
52 using namespace com::sun::star::container;
53 using namespace comphelper;
55 #define CFG_PAGE_AND_GROUP OUString("General"), OUString("LoadSave")
57 // ----------------------------------------------------------------------
59 struct SvxSaveTabPage_Impl
61 Reference< XNameContainer > xFact;
62 Sequence< OUString > aFilterArr[APP_COUNT];
63 Sequence< sal_Bool > aAlienArr[APP_COUNT];
64 Sequence< sal_Bool > aODFArr[APP_COUNT];
65 Sequence< OUString > aUIFilterArr[APP_COUNT];
66 OUString aDefaultArr[APP_COUNT];
67 sal_Bool aDefaultReadonlyArr[APP_COUNT];
68 sal_Bool bInitialized;
70 SvxSaveTabPage_Impl();
71 ~SvxSaveTabPage_Impl();
74 SvxSaveTabPage_Impl::SvxSaveTabPage_Impl() : bInitialized( sal_False )
78 SvxSaveTabPage_Impl::~SvxSaveTabPage_Impl()
82 // class SvxSaveTabPage --------------------------------------------------
84 SfxSaveTabPage::SfxSaveTabPage( Window* pParent, const SfxItemSet& rCoreSet ) :
85 SfxTabPage( pParent, "OptSavePage", "cui/ui/optsavepage.ui", rCoreSet ),
86 pImpl ( new SvxSaveTabPage_Impl )
88 get(aLoadUserSettingsCB, "load_settings");
89 get(aLoadDocPrinterCB, "load_docprinter");
91 get(aDocInfoCB, "docinfo");
92 get(aBackupCB, "backup");
93 get(aAutoSaveCB, "autosave");
94 get(aAutoSaveEdit, "autosave_spin");
95 get(aMinuteFT, "autosave_mins");
96 get(aUserAutoSaveCB, "userautosave");
97 get(aRelativeFsysCB, "relative_fsys");
98 get(aRelativeInetCB, "relative_inet");
100 get(aODFVersionLB, "odfversion");
101 get(aSizeOptimizationCB, "sizeoptimization");
102 get(aWarnAlienFormatCB, "warnalienformat");
103 get(aDocTypeLB, "doctype");
104 get(aSaveAsFT, "saveas_label");
105 get(aSaveAsLB, "saveas");
106 get(aODFWarningFI, "odfwarning_image");
107 get(aODFWarningFT, "odfwarning_label");
110 aODFVersionLB->SetEntryData(0, (void*)2 ); // 1.0/1.1
111 aODFVersionLB->SetEntryData(1, (void*)4 ); // 1.2
112 aODFVersionLB->SetEntryData(2, (void*)8 ); // 1.2 Extended (compat mode)
113 aODFVersionLB->SetEntryData(3, (void*)0x7fffffff); // 1.2 Extended (recommended)
115 aDocTypeLB->SetEntryData(0, (void*)APP_WRITER );
116 aDocTypeLB->SetEntryData(1, (void*)APP_WRITER_WEB );
117 aDocTypeLB->SetEntryData(2, (void*)APP_WRITER_GLOBAL);
118 aDocTypeLB->SetEntryData(3, (void*)APP_CALC );
119 aDocTypeLB->SetEntryData(4, (void*)APP_IMPRESS );
120 aDocTypeLB->SetEntryData(5, (void*)APP_DRAW );
121 aDocTypeLB->SetEntryData(6, (void*)APP_MATH );
123 Link aLink = LINK( this, SfxSaveTabPage, AutoClickHdl_Impl );
124 aAutoSaveCB->SetClickHdl( aLink );
125 aAutoSaveEdit->SetMaxTextLen( 2 );
127 SvtModuleOptions aModuleOpt;
128 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SMATH ) )
130 aSaveAsLB->RemoveEntry(aSaveAsLB->GetEntryPos( (void*) APP_MATH ));
131 aDocTypeLB->RemoveEntry(aDocTypeLB->GetEntryPos( (void*) APP_MATH ));
133 else
135 pImpl->aDefaultArr[APP_MATH] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_MATH);
136 pImpl->aDefaultReadonlyArr[APP_MATH] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_MATH);
139 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SDRAW ) )
141 aSaveAsLB->RemoveEntry(aSaveAsLB->GetEntryPos( (void*) APP_DRAW ));
142 aDocTypeLB->RemoveEntry(aDocTypeLB->GetEntryPos( (void*) APP_DRAW ));
144 else
146 pImpl->aDefaultArr[APP_DRAW] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_DRAW);
147 pImpl->aDefaultReadonlyArr[APP_DRAW] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_DRAW);
150 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS ) )
152 aSaveAsLB->RemoveEntry(aSaveAsLB->GetEntryPos( (void*) APP_IMPRESS ));
153 aDocTypeLB->RemoveEntry(aDocTypeLB->GetEntryPos( (void*) APP_IMPRESS ));
155 else
157 pImpl->aDefaultArr[APP_IMPRESS] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS);
158 pImpl->aDefaultReadonlyArr[APP_IMPRESS] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_IMPRESS);
161 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SCALC ) )
163 aSaveAsLB->RemoveEntry(aSaveAsLB->GetEntryPos( (void*) APP_CALC ));
164 aDocTypeLB->RemoveEntry(aDocTypeLB->GetEntryPos( (void*) APP_CALC ));
166 else
168 pImpl->aDefaultArr[APP_CALC] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_CALC);
169 pImpl->aDefaultReadonlyArr[APP_CALC] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_CALC);
172 if ( !aModuleOpt.IsModuleInstalled( SvtModuleOptions::E_SWRITER ) )
174 aSaveAsLB->RemoveEntry(aSaveAsLB->GetEntryPos( (void*) APP_WRITER ));
175 aSaveAsLB->RemoveEntry(aSaveAsLB->GetEntryPos( (void*) APP_WRITER_WEB ));
176 aSaveAsLB->RemoveEntry(aSaveAsLB->GetEntryPos( (void*) APP_WRITER_GLOBAL ));
177 aDocTypeLB->RemoveEntry(aDocTypeLB->GetEntryPos( (void*) APP_WRITER ));
178 aDocTypeLB->RemoveEntry(aDocTypeLB->GetEntryPos( (void*) APP_WRITER_WEB ));
179 aDocTypeLB->RemoveEntry(aDocTypeLB->GetEntryPos( (void*) APP_WRITER_GLOBAL ));
181 else
183 pImpl->aDefaultArr[APP_WRITER] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITER);
184 pImpl->aDefaultArr[APP_WRITER_WEB] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB);
185 pImpl->aDefaultArr[APP_WRITER_GLOBAL] = aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL);
186 pImpl->aDefaultReadonlyArr[APP_WRITER] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITER);
187 pImpl->aDefaultReadonlyArr[APP_WRITER_WEB] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITERWEB);
188 pImpl->aDefaultReadonlyArr[APP_WRITER_GLOBAL] = aModuleOpt.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITERGLOBAL);
191 aLink = LINK( this, SfxSaveTabPage, ODFVersionHdl_Impl );
192 aODFVersionLB->SetSelectHdl( aLink );
193 aLink = LINK( this, SfxSaveTabPage, FilterHdl_Impl );
194 aDocTypeLB->SetSelectHdl( aLink );
195 aSaveAsLB->SetSelectHdl( aLink );
197 DetectHiddenControls();
200 // -----------------------------------------------------------------------
202 SfxSaveTabPage::~SfxSaveTabPage()
204 delete pImpl;
207 // -----------------------------------------------------------------------
209 SfxTabPage* SfxSaveTabPage::Create( Window* pParent,
210 const SfxItemSet& rAttrSet )
212 return ( new SfxSaveTabPage( pParent, rAttrSet ) );
215 // -----------------------------------------------------------------------
216 void SfxSaveTabPage::DetectHiddenControls()
218 SvtOptionsDialogOptions aOptionsDlgOpt;
220 if ( aOptionsDlgOpt.IsOptionHidden( "Backup", CFG_PAGE_AND_GROUP ) )
222 // hide controls of "Backup"
223 aBackupCB->Hide();
226 if ( aOptionsDlgOpt.IsOptionHidden( "AutoSave", CFG_PAGE_AND_GROUP ) )
228 // hide controls of "AutoSave"
229 aAutoSaveCB->Hide();
230 aAutoSaveEdit->Hide();
231 aMinuteFT->Hide();
234 if ( aOptionsDlgOpt.IsOptionHidden( "UserAutoSave", CFG_PAGE_AND_GROUP ) )
236 // hide controls of "UserAutoSave"
237 aUserAutoSaveCB->Hide();
241 // -----------------------------------------------------------------------
242 sal_Bool SfxSaveTabPage::FillItemSet( SfxItemSet& rSet )
244 sal_Bool bModified = sal_False;
245 SvtSaveOptions aSaveOpt;
246 if(aLoadUserSettingsCB->IsChecked() != aLoadUserSettingsCB->GetSavedValue())
248 aSaveOpt.SetLoadUserSettings(aLoadUserSettingsCB->IsChecked());
251 if ( aLoadDocPrinterCB->IsChecked() != aLoadDocPrinterCB->GetSavedValue() )
252 aSaveOpt.SetLoadDocumentPrinter( aLoadDocPrinterCB->IsChecked() );
254 if ( aODFVersionLB->GetSelectEntryPos() != aODFVersionLB->GetSavedValue() )
256 long nVersion = long( aODFVersionLB->GetEntryData( aODFVersionLB->GetSelectEntryPos() ) );
257 aSaveOpt.SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion( nVersion ) );
260 if ( aDocInfoCB->IsChecked() != aDocInfoCB->GetSavedValue() )
262 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_DOCINFO ),
263 aDocInfoCB->IsChecked() ) );
264 bModified |= sal_True;
267 if ( aBackupCB->IsEnabled() && aBackupCB->IsChecked() != aBackupCB->GetSavedValue() )
269 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_BACKUP ),
270 aBackupCB->IsChecked() ) );
271 bModified |= sal_True;
274 if ( aSizeOptimizationCB->IsChecked() != aSizeOptimizationCB->GetSavedValue() )
276 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_PRETTYPRINTING ), !aSizeOptimizationCB->IsChecked() ) );
277 bModified |= sal_True;
280 if ( aAutoSaveCB->IsChecked() != aAutoSaveCB->GetSavedValue() )
282 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_AUTOSAVE ),
283 aAutoSaveCB->IsChecked() ) );
284 bModified |= sal_True;
286 if ( aWarnAlienFormatCB->IsChecked() != aWarnAlienFormatCB->GetSavedValue() )
288 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_WARNALIENFORMAT ),
289 aWarnAlienFormatCB->IsChecked() ) );
290 bModified |= sal_True;
293 if ( aAutoSaveEdit->GetText() != aAutoSaveEdit->GetSavedValue() )
295 rSet.Put( SfxUInt16Item( GetWhich( SID_ATTR_AUTOSAVEMINUTE ),
296 (sal_uInt16)aAutoSaveEdit->GetValue() ) );
297 bModified |= sal_True;
300 if ( aUserAutoSaveCB->IsChecked() != aUserAutoSaveCB->GetSavedValue() )
302 rSet.Put( SfxBoolItem( GetWhich( SID_ATTR_USERAUTOSAVE ),
303 aUserAutoSaveCB->IsChecked() ) );
304 bModified |= sal_True;
306 // save relatively
307 if ( aRelativeFsysCB->IsChecked() != aRelativeFsysCB->GetSavedValue() )
309 rSet.Put( SfxBoolItem( GetWhich( SID_SAVEREL_FSYS ),
310 aRelativeFsysCB->IsChecked() ) );
311 bModified |= sal_True;
314 if ( aRelativeInetCB->IsChecked() != aRelativeInetCB->GetSavedValue() )
316 rSet.Put( SfxBoolItem( GetWhich( SID_SAVEREL_INET ),
317 aRelativeInetCB->IsChecked() ) );
318 bModified |= sal_True;
321 SvtModuleOptions aModuleOpt;
322 if(!pImpl->aDefaultArr[APP_MATH].isEmpty() &&
323 pImpl->aDefaultArr[APP_MATH] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_MATH))
324 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_MATH, pImpl->aDefaultArr[APP_MATH]);
326 if( !pImpl->aDefaultArr[APP_DRAW].isEmpty() &&
327 pImpl->aDefaultArr[APP_DRAW] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_DRAW))
328 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_DRAW, pImpl->aDefaultArr[APP_DRAW]);
330 if(!pImpl->aDefaultArr[APP_IMPRESS].isEmpty() &&
331 pImpl->aDefaultArr[APP_IMPRESS] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS))
332 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS, pImpl->aDefaultArr[APP_IMPRESS]);
334 if(!pImpl->aDefaultArr[APP_CALC].isEmpty() &&
335 pImpl->aDefaultArr[APP_CALC] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_CALC))
336 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_CALC, pImpl->aDefaultArr[APP_CALC]);
338 if(!pImpl->aDefaultArr[APP_WRITER].isEmpty() &&
339 pImpl->aDefaultArr[APP_WRITER] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITER))
340 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITER, pImpl->aDefaultArr[APP_WRITER]);
342 if(!pImpl->aDefaultArr[APP_WRITER_WEB].isEmpty() &&
343 pImpl->aDefaultArr[APP_WRITER_WEB] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB))
344 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB, pImpl->aDefaultArr[APP_WRITER_WEB]);
346 if(!pImpl->aDefaultArr[APP_WRITER_GLOBAL].isEmpty() &&
347 pImpl->aDefaultArr[APP_WRITER_GLOBAL] != aModuleOpt.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL))
348 aModuleOpt.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL, pImpl->aDefaultArr[APP_WRITER_GLOBAL]);
350 return bModified;
353 // -----------------------------------------------------------------------
355 sal_Bool isODFFormat( OUString sFilter )
357 static const char* aODFFormats[] =
359 "writer8",
360 "writer8_template",
361 "writerglobal8",
362 "writerglobal8_writer",
363 "calc8",
364 "calc8_template",
365 "draw8",
366 "draw8_template",
367 "impress8",
368 "impress8_template",
369 "impress8_draw",
370 "chart8",
371 "math8",
372 NULL
375 sal_Bool bRet = sal_False;
376 int i = 0;
377 while ( aODFFormats[i] != NULL )
379 if ( sFilter.equalsAscii( aODFFormats[i++] ) )
381 bRet = sal_True;
382 break;
386 return bRet;
389 void SfxSaveTabPage::Reset( const SfxItemSet& )
391 SvtSaveOptions aSaveOpt;
392 aLoadUserSettingsCB->Check(aSaveOpt.IsLoadUserSettings());
393 aLoadUserSettingsCB->SaveValue();
394 aLoadDocPrinterCB->Check( aSaveOpt.IsLoadDocumentPrinter() );
395 aLoadDocPrinterCB->SaveValue();
397 if ( !pImpl->bInitialized )
401 Reference< XMultiServiceFactory > xMSF = comphelper::getProcessServiceFactory();
402 pImpl->xFact = Reference<XNameContainer>(
403 xMSF->createInstance("com.sun.star.document.FilterFactory"), UNO_QUERY);
405 DBG_ASSERT(pImpl->xFact.is(), "service com.sun.star.document.FilterFactory unavailable");
406 Reference< XContainerQuery > xQuery(pImpl->xFact, UNO_QUERY);
407 if(xQuery.is())
409 for(sal_uInt16 n = 0; n < aDocTypeLB->GetEntryCount(); n++)
411 long nData = (long) aDocTypeLB->GetEntryData(n);
412 OUString sCommand;
413 sCommand = "matchByDocumentService=%1:iflags=" +
414 OUString::number(SFX_FILTER_IMPORT|SFX_FILTER_EXPORT) +
415 ":eflags=" +
416 OUString::number(SFX_FILTER_NOTINFILEDLG) +
417 ":default_first";
418 OUString sReplace;
419 switch(nData)
421 case APP_WRITER : sReplace = "com.sun.star.text.TextDocument"; break;
422 case APP_WRITER_WEB : sReplace = "com.sun.star.text.WebDocument"; break;
423 case APP_WRITER_GLOBAL : sReplace = "com.sun.star.text.GlobalDocument"; break;
424 case APP_CALC : sReplace = "com.sun.star.sheet.SpreadsheetDocument";break;
425 case APP_IMPRESS : sReplace = "com.sun.star.presentation.PresentationDocument";break;
426 case APP_DRAW : sReplace = "com.sun.star.drawing.DrawingDocument";break;
427 case APP_MATH : sReplace = "com.sun.star.formula.FormulaProperties";break;
428 default: OSL_FAIL("illegal user data");
430 OUString sTmp = sCommand.replaceFirst("%1", sReplace);
431 sCommand = sTmp;
432 Reference< XEnumeration > xList = xQuery->createSubSetEnumerationByQuery(sCommand);
433 SequenceAsVector< OUString > lList;
434 SequenceAsVector< sal_Bool > lAlienList;
435 SequenceAsVector< sal_Bool > lODFList;
436 while(xList->hasMoreElements())
438 SequenceAsHashMap aFilter(xList->nextElement());
439 OUString sFilter = aFilter.getUnpackedValueOrDefault(OUString("Name"),OUString());
440 if (!sFilter.isEmpty())
442 sal_Int32 nFlags = aFilter.getUnpackedValueOrDefault(OUString("Flags"),sal_Int32());
443 lList.push_back(sFilter);
444 lAlienList.push_back(0 != (nFlags & SFX_FILTER_ALIEN));
445 lODFList.push_back( isODFFormat( sFilter ) );
448 pImpl->aFilterArr[nData] = lList.getAsConstList();
449 pImpl->aAlienArr[nData] = lAlienList.getAsConstList();
450 pImpl->aODFArr[nData] = lODFList.getAsConstList();
453 aDocTypeLB->SelectEntryPos(0);
454 FilterHdl_Impl(aDocTypeLB);
456 catch(Exception& e)
458 (void) e;
459 OSL_FAIL(
460 OUStringToOString(
461 (OUString(
462 "exception in FilterFactory access: ") +
463 e.Message),
464 RTL_TEXTENCODING_UTF8).
465 getStr());
468 pImpl->bInitialized = sal_True;
471 aDocInfoCB->Check(aSaveOpt.IsDocInfoSave());
473 aBackupCB->Check(aSaveOpt.IsBackup());
474 sal_Bool bBackupRO = aSaveOpt.IsReadOnly(SvtSaveOptions::E_BACKUP);
475 aBackupCB->Enable(!bBackupRO);
477 aAutoSaveCB->Check(aSaveOpt.IsAutoSave());
478 aUserAutoSaveCB->Check(aSaveOpt.IsUserAutoSave());
479 aWarnAlienFormatCB->Check(aSaveOpt.IsWarnAlienFormat());
480 aWarnAlienFormatCB->Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_WARNALIENFORMAT));
482 // the pretty printing
483 aSizeOptimizationCB->Check( !aSaveOpt.IsPrettyPrinting());
485 aAutoSaveEdit->SetValue( aSaveOpt.GetAutoSaveTime() );
487 // save relatively
488 aRelativeFsysCB->Check( aSaveOpt.IsSaveRelFSys() );
490 aRelativeInetCB->Check( aSaveOpt.IsSaveRelINet() );
492 void* pDefaultVersion = (void*)long( aSaveOpt.GetODFDefaultVersion() );
493 aODFVersionLB->SelectEntryPos( aODFVersionLB->GetEntryPos( pDefaultVersion ) );
495 AutoClickHdl_Impl( aAutoSaveCB );
496 ODFVersionHdl_Impl( aODFVersionLB );
498 aDocInfoCB->SaveValue();
499 aBackupCB->SaveValue();
500 aWarnAlienFormatCB->SaveValue();
501 aSizeOptimizationCB->SaveValue();
502 aAutoSaveCB->SaveValue();
503 aAutoSaveEdit->SaveValue();
505 aUserAutoSaveCB->SaveValue();
507 aRelativeFsysCB->SaveValue();
508 aRelativeInetCB->SaveValue();
509 aODFVersionLB->SaveValue();
512 // -----------------------------------------------------------------------
514 IMPL_LINK( SfxSaveTabPage, AutoClickHdl_Impl, CheckBox *, pBox )
516 if ( pBox == aAutoSaveCB )
518 if ( aAutoSaveCB->IsChecked() )
520 aAutoSaveEdit->Enable();
521 aMinuteFT->Enable();
522 aUserAutoSaveCB->Enable();
524 else
526 aAutoSaveEdit->Disable();
527 aMinuteFT->Disable();
528 aUserAutoSaveCB->Disable();
531 return 0;
534 static OUString lcl_ExtracUIName(const Sequence<PropertyValue> rProperties)
536 OUString sRet;
537 const PropertyValue* pProperties = rProperties.getConstArray();
538 for(int nProp = 0; nProp < rProperties.getLength(); nProp++)
540 if(!pProperties[nProp].Name.compareToAscii("UIName"))
542 pProperties[nProp].Value >>= sRet;
543 break;
545 else if(!pProperties[nProp].Name.compareToAscii("Name"))
547 pProperties[nProp].Value >>= sRet;
550 return sRet;
553 IMPL_LINK( SfxSaveTabPage, FilterHdl_Impl, ListBox *, pBox )
555 sal_uInt16 nCurPos = aDocTypeLB->GetSelectEntryPos();
557 long nData = -1;
558 if(nCurPos < APP_COUNT)
559 nData = (long) aDocTypeLB->GetEntryData(nCurPos);
561 if ( nData >= 0 && nData < APP_COUNT )
563 if(aDocTypeLB == pBox)
565 aSaveAsLB->Clear();
566 const OUString* pFilters = pImpl->aFilterArr[nData].getConstArray();
567 if(!pImpl->aUIFilterArr[nData].getLength())
569 pImpl->aUIFilterArr[nData].realloc(pImpl->aFilterArr[nData].getLength());
570 OUString* pUIFilters = pImpl->aUIFilterArr[nData].getArray();
571 for(int nFilter = 0; nFilter < pImpl->aFilterArr[nData].getLength(); nFilter++)
573 Any aProps = pImpl->xFact->getByName(pFilters[nFilter]);
574 Sequence<PropertyValue> aProperties;
575 aProps >>= aProperties;
576 pUIFilters[nFilter] = lcl_ExtracUIName(aProperties);
579 const OUString* pUIFilters = pImpl->aUIFilterArr[nData].getConstArray();
580 OUString sSelect;
581 for(int i = 0; i < pImpl->aUIFilterArr[nData].getLength(); i++)
583 sal_uInt16 nEntryPos = aSaveAsLB->InsertEntry(pUIFilters[i]);
584 if ( pImpl->aODFArr[nData][i] )
585 aSaveAsLB->SetEntryData( nEntryPos, (void*)pImpl );
586 if(pFilters[i] == pImpl->aDefaultArr[nData])
587 sSelect = pUIFilters[i];
589 if(!sSelect.isEmpty())
591 aSaveAsLB->SelectEntry(sSelect);
594 aSaveAsFT->Enable(!pImpl->aDefaultReadonlyArr[nData]);
595 aSaveAsLB->Enable(!pImpl->aDefaultReadonlyArr[nData]);
597 else
599 OUString sSelect = pBox->GetSelectEntry();
600 const OUString* pFilters = pImpl->aFilterArr[nData].getConstArray();
601 OUString* pUIFilters = pImpl->aUIFilterArr[nData].getArray();
602 for(int i = 0; i < pImpl->aUIFilterArr[nData].getLength(); i++)
603 if(pUIFilters[i] == sSelect)
605 sSelect = pFilters[i];
606 break;
609 pImpl->aDefaultArr[nData] = sSelect;
613 ODFVersionHdl_Impl( aSaveAsLB );
614 return 0;
617 IMPL_LINK_NOARG(SfxSaveTabPage, ODFVersionHdl_Impl)
619 long nVersion = long( aODFVersionLB->GetEntryData( aODFVersionLB->GetSelectEntryPos() ) );
620 bool bShown = SvtSaveOptions::ODFDefaultVersion( nVersion ) != SvtSaveOptions::ODFVER_LATEST;
621 if ( bShown )
623 bool bHasODFFormat = false;
624 sal_uInt16 i = 0, nCount = aSaveAsLB->GetEntryCount();
625 for ( ; i < nCount; ++ i )
627 if ( aSaveAsLB->GetEntryData(i) != NULL )
629 bHasODFFormat = true;
630 break;
634 bShown = !bHasODFFormat
635 || ( aSaveAsLB->GetEntryData( aSaveAsLB->GetSelectEntryPos() ) != NULL );
638 aODFWarningFI->Show( bShown );
639 aODFWarningFT->Show( bShown );
641 return 0;
644 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */