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