1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
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"
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
));
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
));
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
));
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
));
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
));
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()
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"
226 if ( aOptionsDlgOpt
.IsOptionHidden( "AutoSave", CFG_PAGE_AND_GROUP
) )
228 // hide controls of "AutoSave"
230 aAutoSaveEdit
->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
;
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
]);
353 // -----------------------------------------------------------------------
355 sal_Bool
isODFFormat( OUString sFilter
)
357 static const char* aODFFormats
[] =
362 "writerglobal8_writer",
375 sal_Bool bRet
= sal_False
;
377 while ( aODFFormats
[i
] != NULL
)
379 if ( sFilter
.equalsAscii( aODFFormats
[i
++] ) )
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
);
409 for(sal_uInt16 n
= 0; n
< aDocTypeLB
->GetEntryCount(); n
++)
411 long nData
= (long) aDocTypeLB
->GetEntryData(n
);
413 sCommand
= "matchByDocumentService=%1:iflags=" +
414 OUString::number(SFX_FILTER_IMPORT
|SFX_FILTER_EXPORT
) +
416 OUString::number(SFX_FILTER_NOTINFILEDLG
) +
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
);
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
);
462 "exception in FilterFactory access: ") +
464 RTL_TEXTENCODING_UTF8
).
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() );
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();
522 aUserAutoSaveCB
->Enable();
526 aAutoSaveEdit
->Disable();
527 aMinuteFT
->Disable();
528 aUserAutoSaveCB
->Disable();
534 static OUString
lcl_ExtracUIName(const Sequence
<PropertyValue
> rProperties
)
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
;
545 else if(!pProperties
[nProp
].Name
.compareToAscii("Name"))
547 pProperties
[nProp
].Value
>>= sRet
;
553 IMPL_LINK( SfxSaveTabPage
, FilterHdl_Impl
, ListBox
*, pBox
)
555 sal_uInt16 nCurPos
= aDocTypeLB
->GetSelectEntryPos();
558 if(nCurPos
< APP_COUNT
)
559 nData
= (long) aDocTypeLB
->GetEntryData(nCurPos
);
561 if ( nData
>= 0 && nData
< APP_COUNT
)
563 if(aDocTypeLB
== pBox
)
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();
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
]);
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
];
609 pImpl
->aDefaultArr
[nData
] = sSelect
;
613 ODFVersionHdl_Impl( aSaveAsLB
);
617 IMPL_LINK_NOARG(SfxSaveTabPage
, ODFVersionHdl_Impl
)
619 long nVersion
= long( aODFVersionLB
->GetEntryData( aODFVersionLB
->GetSelectEntryPos() ) );
620 bool bShown
= SvtSaveOptions::ODFDefaultVersion( nVersion
) != SvtSaveOptions::ODFVER_LATEST
;
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;
634 bShown
= !bHasODFFormat
635 || ( aSaveAsLB
->GetEntryData( aSaveAsLB
->GetSelectEntryPos() ) != NULL
);
638 aODFWarningFI
->Show( bShown
);
639 aODFWarningFT
->Show( bShown
);
644 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */