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