1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: optsave.cxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
31 // MARKER(update_precomp.py): autogen include statement, do not remove
32 #include "precompiled_svx.hxx"
34 #ifdef SVX_DLLIMPLEMENTATION
35 #undef SVX_DLLIMPLEMENTATION
38 // include ---------------------------------------------------------------
39 #include <tools/shl.hxx>
40 #include <svtools/eitem.hxx>
41 #include <svtools/intitem.hxx>
42 #define _SVX_OPTSAVE_CXX
44 #include "optsave.hrc"
45 #include <svx/dialogs.hrc>
47 #include "optsave.hxx"
48 #include <svx/dialmgr.hxx>
49 #include <comphelper/processfactory.hxx>
50 #include <comphelper/sequenceasvector.hxx>
51 #include <comphelper/sequenceashashmap.hxx>
52 #include <svtools/moduleoptions.hxx>
53 #include <svtools/saveopt.hxx>
54 #include <comphelper/sequenceasvector.hxx>
55 #include <comphelper/sequenceashashmap.hxx>
56 #include <com/sun/star/container/XContainerQuery.hpp>
57 #include <com/sun/star/container/XEnumeration.hpp>
58 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
59 #include <com/sun/star/container/XNameContainer.hpp>
60 #include <com/sun/star/container/XContainerQuery.hpp>
61 #include <com/sun/star/container/XEnumeration.hpp>
62 #include <com/sun/star/beans/PropertyValue.hpp>
63 #include <com/sun/star/util/XFlushable.hpp>
64 #include <sfx2/docfilt.hxx>
65 #include <svtools/stdctrl.hxx>
66 #include <vcl/fixed.hxx>
67 #include <vcl/msgbox.hxx>
68 #include <unotools/configitem.hxx>
69 #include <svtools/optionsdlg.hxx>
71 #include <vcl/msgbox.hxx>
73 using namespace com::sun::star::uno
;
74 using namespace com::sun::star::util
;
75 using namespace com::sun::star::lang
;
76 using namespace com::sun::star::beans
;
77 using namespace com::sun::star::container
;
78 using namespace comphelper
;
81 #define C2U(cChar) OUString::createFromAscii(cChar)
82 #define C2S(cChar) String( RTL_CONSTASCII_STRINGPARAM(cChar) )
83 #define CFG_PAGE_AND_GROUP C2S("General"), C2S("LoadSave")
84 // !! you have to update these index, if you changed the list of the child windows !!
85 #define WININDEX_AUTOSAVE ((USHORT)6)
86 #define WININDEX_SAVEURL_RELFSYS ((USHORT)9)
88 // -------------------- --------------------------------------------------
89 class FilterWarningDialog_Impl
: public ModalDialog
94 FixedInfo aFilterWarningFT
;
97 FilterWarningDialog_Impl(Window
* pParent
);
99 void SetFilterName(const String
& rFilterUIName
);
101 // ----------------------------------------------------------------------
102 FilterWarningDialog_Impl::FilterWarningDialog_Impl(Window
* pParent
) :
103 ModalDialog(pParent
, SVX_RES( RID_SVXDLG_FILTER_WARNING
) ),
104 aOk( this, SVX_RES(PB_OK
)),
105 aCancel( this, SVX_RES(PB_CANCEL
)),
106 aImage( this, SVX_RES(IMG_WARNING
)),
107 aFilterWarningFT( this, SVX_RES(FT_FILTER_WARNING
))
110 aImage
.SetImage(WarningBox::GetStandardImage());
112 // ----------------------------------------------------------------------
113 void FilterWarningDialog_Impl::SetFilterName(const String
& rFilterUIName
)
115 String
sTmp(aFilterWarningFT
.GetText());
116 sTmp
.SearchAndReplaceAscii("%1", rFilterUIName
);
117 aFilterWarningFT
.SetText(sTmp
);
119 // ----------------------------------------------------------------------
120 #ifdef FILTER_WARNING_ENABLED
121 class SvxAlienFilterWarningConfig_Impl
: public utl::ConfigItem
124 com::sun::star::uno::Sequence
< OUString
> aPropNames
;
127 SvxAlienFilterWarningConfig_Impl();
128 ~SvxAlienFilterWarningConfig_Impl();
130 virtual void Commit();
136 bWarning
= sal_False
;
137 ConfigItem::SetModified();
141 sal_Bool
IsWarning()const{return bWarning
;}
143 // ----------------------------------------------------------------------
144 SvxAlienFilterWarningConfig_Impl::SvxAlienFilterWarningConfig_Impl() :
145 ConfigItem(C2U("TypeDetection.Misc/Defaults"),
146 CONFIG_MODE_IMMEDIATE_UPDATE
),
150 aPropNames
.getArray()[0] = C2U("ShowAlienFilterWarning");
151 Sequence
<Any
> aValues
= GetProperties(aPropNames
);
152 const Any
* pValues
= aValues
.getConstArray();
153 DBG_ASSERT(aValues
.getLength() == aPropNames
.getLength(), "GetProperties failed");
154 if(aValues
.getLength() == aPropNames
.getLength() &&
155 pValues
[0].hasValue() &&
156 pValues
[0].getValueType() == ::getBooleanCppuType())
157 bWarning
= *(sal_Bool
*)pValues
[0].getValue();
159 // ----------------------------------------------------------------------
160 SvxAlienFilterWarningConfig_Impl::~SvxAlienFilterWarningConfig_Impl()
165 // ----------------------------------------------------------------------
166 void SvxAlienFilterWarningConfig_Impl::Commit()
168 Sequence
<Any
> aValues(aPropNames
.getLength());
169 Any
* pValues
= aValues
.getArray();
170 pValues
[0].setValue(&bWarning
, ::getBooleanCppuType());
171 PutProperties(aPropNames
, aValues
);
173 #endif // FILTER_WARNING_ENABLED
174 // ----------------------------------------------------------------------
175 // ----------------------------------------------------------------------
177 struct SvxSaveTabPage_Impl
179 Reference
< XNameContainer
> xFact
;
180 Sequence
< OUString
> aFilterArr
[APP_COUNT
];
181 Sequence
< sal_Bool
> aAlienArr
[APP_COUNT
];
182 Sequence
< sal_Bool
> aODFArr
[APP_COUNT
];
183 Sequence
< OUString
> aUIFilterArr
[APP_COUNT
];
184 OUString aDefaultArr
[APP_COUNT
];
185 sal_Bool aDefaultReadonlyArr
[APP_COUNT
];
186 sal_Bool bInitialized
;
188 SvxSaveTabPage_Impl();
189 ~SvxSaveTabPage_Impl();
192 SvxSaveTabPage_Impl::SvxSaveTabPage_Impl() : bInitialized( sal_False
)
196 SvxSaveTabPage_Impl::~SvxSaveTabPage_Impl()
200 // class SvxSaveTabPage --------------------------------------------------
202 SfxSaveTabPage::SfxSaveTabPage( Window
* pParent
, const SfxItemSet
& rCoreSet
) :
204 SfxTabPage( pParent
, SVX_RES( RID_SFXPAGE_SAVE
), rCoreSet
),
206 aLoadFL ( this, SVX_RES( LB_LOAD
) ),
207 aLoadUserSettingsCB ( this, SVX_RES( CB_LOAD_SETTINGS
) ),
208 aLoadDocPrinterCB ( this, SVX_RES( CB_LOAD_DOCPRINTER
) ),
210 aSaveFL ( this, SVX_RES( GB_SAVE
) ),
211 aDocInfoCB ( this, SVX_RES( BTN_DOCINFO
) ),
212 aBackupFI ( this, SVX_RES( FI_BACKUP
) ),
213 aBackupCB ( this, SVX_RES( BTN_BACKUP
) ),
214 aAutoSaveCB ( this, SVX_RES( BTN_AUTOSAVE
) ),
215 aAutoSaveEdit ( this, SVX_RES( ED_AUTOSAVE
) ),
216 aMinuteFT ( this, SVX_RES( FT_MINUTE
) ),
217 aRelativeFsysCB ( this, SVX_RES( BTN_RELATIVE_FSYS
) ),
218 aRelativeInetCB ( this, SVX_RES( BTN_RELATIVE_INET
) ),
220 aDefaultFormatFL ( this, SVX_RES( FL_FILTER
) ),
221 aODFVersionFT ( this, SVX_RES( FT_ODF_VERSION
) ),
222 aODFVersionLB ( this, SVX_RES( LB_ODF_VERSION
) ),
223 aSizeOptimizationCB ( this, SVX_RES( BTN_NOPRETTYPRINTING
) ),
224 aWarnAlienFormatCB ( this, SVX_RES( BTN_WARNALIENFORMAT
) ),
225 aDocTypeFT ( this, SVX_RES( FT_APP
) ),
226 aDocTypeLB ( this, SVX_RES( LB_APP
) ),
227 aSaveAsFT ( this, SVX_RES( FT_FILTER
) ),
228 aSaveAsFI ( this, SVX_RES( FI_FILTER
) ),
229 aSaveAsLB ( this, SVX_RES( LB_FILTER
) ),
230 aODFWarningFI ( this, SVX_RES( FI_ODF_WARNING
) ),
231 aODFWarningFT ( this, SVX_RES( FT_WARN
) ),
233 pImpl ( new SvxSaveTabPage_Impl
)
236 sal_Bool bHighContrast
= GetDisplayBackground().GetColor().IsDark();
237 aODFWarningFI
.SetImage(
238 Image( SVX_RES( bHighContrast
? IMG_ODF_WARNING_HC
: IMG_ODF_WARNING
) ) );
242 Link aLink
= LINK( this, SfxSaveTabPage
, AutoClickHdl_Impl
);
243 aAutoSaveCB
.SetClickHdl( aLink
);
244 aAutoSaveEdit
.SetMaxTextLen( 2 );
246 SvtModuleOptions aModuleOpt
;
247 if ( !aModuleOpt
.IsModuleInstalled( SvtModuleOptions::E_SMATH
) )
249 aSaveAsLB
.RemoveEntry(aSaveAsLB
.GetEntryPos( (void*) APP_MATH
));
250 aDocTypeLB
.RemoveEntry(aDocTypeLB
.GetEntryPos( (void*) APP_MATH
));
254 pImpl
->aDefaultArr
[APP_MATH
] = aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_MATH
);
255 pImpl
->aDefaultReadonlyArr
[APP_MATH
] = aModuleOpt
.IsDefaultFilterReadonly(SvtModuleOptions::E_MATH
);
258 if ( !aModuleOpt
.IsModuleInstalled( SvtModuleOptions::E_SDRAW
) )
260 aSaveAsLB
.RemoveEntry(aSaveAsLB
.GetEntryPos( (void*) APP_DRAW
));
261 aDocTypeLB
.RemoveEntry(aDocTypeLB
.GetEntryPos( (void*) APP_DRAW
));
265 pImpl
->aDefaultArr
[APP_DRAW
] = aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_DRAW
);
266 pImpl
->aDefaultReadonlyArr
[APP_DRAW
] = aModuleOpt
.IsDefaultFilterReadonly(SvtModuleOptions::E_DRAW
);
269 if ( !aModuleOpt
.IsModuleInstalled( SvtModuleOptions::E_SIMPRESS
) )
271 aSaveAsLB
.RemoveEntry(aSaveAsLB
.GetEntryPos( (void*) APP_IMPRESS
));
272 aDocTypeLB
.RemoveEntry(aDocTypeLB
.GetEntryPos( (void*) APP_IMPRESS
));
276 pImpl
->aDefaultArr
[APP_IMPRESS
] = aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS
);
277 pImpl
->aDefaultReadonlyArr
[APP_IMPRESS
] = aModuleOpt
.IsDefaultFilterReadonly(SvtModuleOptions::E_IMPRESS
);
280 if ( !aModuleOpt
.IsModuleInstalled( SvtModuleOptions::E_SCALC
) )
282 aSaveAsLB
.RemoveEntry(aSaveAsLB
.GetEntryPos( (void*) APP_CALC
));
283 aDocTypeLB
.RemoveEntry(aDocTypeLB
.GetEntryPos( (void*) APP_CALC
));
287 pImpl
->aDefaultArr
[APP_CALC
] = aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_CALC
);
288 pImpl
->aDefaultReadonlyArr
[APP_CALC
] = aModuleOpt
.IsDefaultFilterReadonly(SvtModuleOptions::E_CALC
);
291 if ( !aModuleOpt
.IsModuleInstalled( SvtModuleOptions::E_SWRITER
) )
293 aSaveAsLB
.RemoveEntry(aSaveAsLB
.GetEntryPos( (void*) APP_WRITER
));
294 aSaveAsLB
.RemoveEntry(aSaveAsLB
.GetEntryPos( (void*) APP_WRITER_WEB
));
295 aSaveAsLB
.RemoveEntry(aSaveAsLB
.GetEntryPos( (void*) APP_WRITER_GLOBAL
));
296 aDocTypeLB
.RemoveEntry(aDocTypeLB
.GetEntryPos( (void*) APP_WRITER
));
297 aDocTypeLB
.RemoveEntry(aDocTypeLB
.GetEntryPos( (void*) APP_WRITER_WEB
));
298 aDocTypeLB
.RemoveEntry(aDocTypeLB
.GetEntryPos( (void*) APP_WRITER_GLOBAL
));
302 pImpl
->aDefaultArr
[APP_WRITER
] = aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITER
);
303 pImpl
->aDefaultArr
[APP_WRITER_WEB
] = aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB
);
304 pImpl
->aDefaultArr
[APP_WRITER_GLOBAL
] = aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL
);
305 pImpl
->aDefaultReadonlyArr
[APP_WRITER
] = aModuleOpt
.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITER
);
306 pImpl
->aDefaultReadonlyArr
[APP_WRITER_WEB
] = aModuleOpt
.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITERWEB
);
307 pImpl
->aDefaultReadonlyArr
[APP_WRITER_GLOBAL
] = aModuleOpt
.IsDefaultFilterReadonly(SvtModuleOptions::E_WRITERGLOBAL
);
310 aLink
= LINK( this, SfxSaveTabPage
, ODFVersionHdl_Impl
);
311 aODFVersionLB
.SetSelectHdl( aLink
);
312 aLink
= LINK( this, SfxSaveTabPage
, FilterHdl_Impl
);
313 aDocTypeLB
.SetSelectHdl( aLink
);
314 aSaveAsLB
.SetSelectHdl( aLink
);
316 DetectHiddenControls();
319 // -----------------------------------------------------------------------
321 SfxSaveTabPage::~SfxSaveTabPage()
326 // -----------------------------------------------------------------------
328 SfxTabPage
* SfxSaveTabPage::Create( Window
* pParent
,
329 const SfxItemSet
& rAttrSet
)
331 return ( new SfxSaveTabPage( pParent
, rAttrSet
) );
334 /* -----------------------------05.04.01 13:10--------------------------------
336 ---------------------------------------------------------------------------*/
337 OUString
lcl_ExtractUIName(const Sequence
<PropertyValue
> rProperties
)
340 const PropertyValue
* pProperties
= rProperties
.getConstArray();
341 for(int nProp
= 0; nProp
< rProperties
.getLength(); nProp
++)
343 if(!pProperties
[nProp
].Name
.compareToAscii("UIName"))
345 pProperties
[nProp
].Value
>>= sRet
;
351 // -----------------------------------------------------------------------
352 bool SfxSaveTabPage::AcceptFilter( USHORT nPos
)
354 const OUString
* pFilters
= pImpl
->aFilterArr
[nPos
].getConstArray();
355 sal_Bool bAlien
= sal_False
, bODF
= sal_False
;
356 OUString
* pUIFilters
= pImpl
->aUIFilterArr
[nPos
].getArray();
358 for(int nFilter
= 0; nFilter
< pImpl
->aFilterArr
[nPos
].getLength(); nFilter
++)
360 if( pImpl
->aDefaultArr
[nPos
] == pFilters
[nFilter
] )
362 bAlien
= pImpl
->aAlienArr
[nPos
][nFilter
];
363 bODF
= pImpl
->aODFArr
[nPos
][nFilter
];
364 sUIName
= pUIFilters
[nFilter
];;
371 // -----------------------------------------------------------------------
372 void SfxSaveTabPage::DetectHiddenControls()
375 // the index of the first child window which perhaps have to move upwards
376 USHORT nWinIndex
= WININDEX_SAVEURL_RELFSYS
;
377 SvtOptionsDialogOptions aOptionsDlgOpt
;
379 if ( aOptionsDlgOpt
.IsOptionHidden( C2S("Backup"), CFG_PAGE_AND_GROUP
) )
381 // hide controls of "Backup"
384 // the other controls have to move upwards the height of checkbox + space
385 nDelta
= aAutoSaveCB
.GetPosPixel().Y() - aBackupCB
.GetPosPixel().Y();
388 if ( aOptionsDlgOpt
.IsOptionHidden( C2S("AutoSave"), CFG_PAGE_AND_GROUP
) )
390 // hide controls of "AutoSave"
392 aAutoSaveEdit
.Hide();
394 // the other controls have to move upwards the height of checkbox + space
395 nDelta
+= aRelativeFsysCB
.GetPosPixel().Y() - aAutoSaveCB
.GetPosPixel().Y();
397 else if ( nDelta
> 0 )
398 // the "AutoSave" controls have to move upwards too
399 nWinIndex
= WININDEX_AUTOSAVE
;
403 USHORT i
, nChildCount
= GetChildCount();
404 for ( i
= nWinIndex
; i
< nChildCount
; ++i
)
406 Window
* pWin
= GetChild(i
);
407 Point aPos
= pWin
->GetPosPixel();
409 pWin
->SetPosPixel( aPos
);
413 // -----------------------------------------------------------------------
414 BOOL
SfxSaveTabPage::FillItemSet( SfxItemSet
& rSet
)
416 BOOL bModified
= FALSE
;
417 SvtSaveOptions aSaveOpt
;
418 if(aLoadUserSettingsCB
.IsChecked() != aLoadUserSettingsCB
.GetSavedValue())
420 aSaveOpt
.SetLoadUserSettings(aLoadUserSettingsCB
.IsChecked());
423 if ( aLoadDocPrinterCB
.IsChecked() != aLoadDocPrinterCB
.GetSavedValue() )
424 aSaveOpt
.SetLoadDocumentPrinter( aLoadDocPrinterCB
.IsChecked() );
426 if ( aODFVersionLB
.GetSelectEntryPos() != aODFVersionLB
.GetSavedValue() )
428 long nVersion
= long( aODFVersionLB
.GetEntryData( aODFVersionLB
.GetSelectEntryPos() ) );
429 aSaveOpt
.SetODFDefaultVersion( SvtSaveOptions::ODFDefaultVersion( nVersion
) );
432 if ( aDocInfoCB
.IsChecked() != aDocInfoCB
.GetSavedValue() )
434 rSet
.Put( SfxBoolItem( GetWhich( SID_ATTR_DOCINFO
),
435 aDocInfoCB
.IsChecked() ) );
439 if ( aBackupCB
.IsEnabled() && aBackupCB
.IsChecked() != aBackupCB
.GetSavedValue() )
441 rSet
.Put( SfxBoolItem( GetWhich( SID_ATTR_BACKUP
),
442 aBackupCB
.IsChecked() ) );
446 if ( aSizeOptimizationCB
.IsChecked() != aSizeOptimizationCB
.GetSavedValue() )
448 rSet
.Put( SfxBoolItem( GetWhich( SID_ATTR_PRETTYPRINTING
), !aSizeOptimizationCB
.IsChecked() ) );
452 if ( aAutoSaveCB
.IsChecked() != aAutoSaveCB
.GetSavedValue() )
454 rSet
.Put( SfxBoolItem( GetWhich( SID_ATTR_AUTOSAVE
),
455 aAutoSaveCB
.IsChecked() ) );
458 if ( aWarnAlienFormatCB
.IsChecked() != aWarnAlienFormatCB
.GetSavedValue() )
460 rSet
.Put( SfxBoolItem( GetWhich( SID_ATTR_WARNALIENFORMAT
),
461 aWarnAlienFormatCB
.IsChecked() ) );
465 if ( aAutoSaveEdit
.GetText() != aAutoSaveEdit
.GetSavedValue() )
467 rSet
.Put( SfxUInt16Item( GetWhich( SID_ATTR_AUTOSAVEMINUTE
),
468 (UINT16
)aAutoSaveEdit
.GetValue() ) );
472 if ( aRelativeFsysCB
.IsChecked() != aRelativeFsysCB
.GetSavedValue() )
474 rSet
.Put( SfxBoolItem( GetWhich( SID_SAVEREL_FSYS
),
475 aRelativeFsysCB
.IsChecked() ) );
479 if ( aRelativeInetCB
.IsChecked() != aRelativeInetCB
.GetSavedValue() )
481 rSet
.Put( SfxBoolItem( GetWhich( SID_SAVEREL_INET
),
482 aRelativeInetCB
.IsChecked() ) );
486 SvtModuleOptions aModuleOpt
;
487 if(pImpl
->aDefaultArr
[APP_MATH
].getLength() &&
488 pImpl
->aDefaultArr
[APP_MATH
] != aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_MATH
) &&
489 AcceptFilter( APP_MATH
))
490 aModuleOpt
.SetFactoryDefaultFilter(SvtModuleOptions::E_MATH
, pImpl
->aDefaultArr
[APP_MATH
]);
492 if( pImpl
->aDefaultArr
[APP_DRAW
].getLength() &&
493 pImpl
->aDefaultArr
[APP_DRAW
] != aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_DRAW
) &&
494 AcceptFilter( APP_DRAW
))
495 aModuleOpt
.SetFactoryDefaultFilter(SvtModuleOptions::E_DRAW
, pImpl
->aDefaultArr
[APP_DRAW
]);
497 if(pImpl
->aDefaultArr
[APP_IMPRESS
].getLength() &&
498 pImpl
->aDefaultArr
[APP_IMPRESS
] != aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS
)&&
499 AcceptFilter( APP_IMPRESS
))
500 aModuleOpt
.SetFactoryDefaultFilter(SvtModuleOptions::E_IMPRESS
, pImpl
->aDefaultArr
[APP_IMPRESS
]);
502 if(pImpl
->aDefaultArr
[APP_CALC
].getLength() &&
503 pImpl
->aDefaultArr
[APP_CALC
] != aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_CALC
)&&
504 AcceptFilter( APP_CALC
))
505 aModuleOpt
.SetFactoryDefaultFilter(SvtModuleOptions::E_CALC
, pImpl
->aDefaultArr
[APP_CALC
]);
507 if(pImpl
->aDefaultArr
[APP_WRITER
].getLength() &&
508 pImpl
->aDefaultArr
[APP_WRITER
] != aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITER
)&&
509 AcceptFilter( APP_WRITER
))
510 aModuleOpt
.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITER
, pImpl
->aDefaultArr
[APP_WRITER
]);
512 if(pImpl
->aDefaultArr
[APP_WRITER_WEB
].getLength() &&
513 pImpl
->aDefaultArr
[APP_WRITER_WEB
] != aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB
)&&
514 AcceptFilter( APP_WRITER_WEB
))
515 aModuleOpt
.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITERWEB
, pImpl
->aDefaultArr
[APP_WRITER_WEB
]);
517 if(pImpl
->aDefaultArr
[APP_WRITER_GLOBAL
].getLength() &&
518 pImpl
->aDefaultArr
[APP_WRITER_GLOBAL
] != aModuleOpt
.GetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL
)&&
519 AcceptFilter( APP_WRITER_GLOBAL
))
520 aModuleOpt
.SetFactoryDefaultFilter(SvtModuleOptions::E_WRITERGLOBAL
, pImpl
->aDefaultArr
[APP_WRITER_GLOBAL
]);
525 // -----------------------------------------------------------------------
527 sal_Bool
isODFFormat( OUString sFilter
)
529 static const char* aODFFormats
[] =
534 "writerglobal8_writer",
547 sal_Bool bRet
= sal_False
;
549 while ( aODFFormats
[i
] != NULL
)
551 if ( sFilter
.equalsAscii( aODFFormats
[i
++] ) )
561 void SfxSaveTabPage::Reset( const SfxItemSet
& )
563 SvtSaveOptions aSaveOpt
;
564 aLoadUserSettingsCB
.Check(aSaveOpt
.IsLoadUserSettings());
565 aLoadUserSettingsCB
.SaveValue();
566 aLoadDocPrinterCB
.Check( aSaveOpt
.IsLoadDocumentPrinter() );
567 aLoadDocPrinterCB
.SaveValue();
569 if ( !pImpl
->bInitialized
)
573 Reference
< XMultiServiceFactory
> xMSF
= comphelper::getProcessServiceFactory();
574 pImpl
->xFact
= Reference
<XNameContainer
>(
575 xMSF
->createInstance(C2U("com.sun.star.document.FilterFactory")), UNO_QUERY
);
577 DBG_ASSERT(pImpl
->xFact
.is(), "service com.sun.star.document.FilterFactory unavailable");
578 Reference
< XContainerQuery
> xQuery(pImpl
->xFact
, UNO_QUERY
);
581 for(USHORT n
= 0; n
< aDocTypeLB
.GetEntryCount(); n
++)
583 long nData
= (long) aDocTypeLB
.GetEntryData(n
);
585 sCommand
= C2U("matchByDocumentService=%1:iflags=");
586 sCommand
+= String::CreateFromInt32(SFX_FILTER_IMPORT
|SFX_FILTER_EXPORT
);
587 sCommand
+= C2U(":eflags=");
588 sCommand
+= String::CreateFromInt32(SFX_FILTER_NOTINFILEDLG
);
589 sCommand
+= C2U(":default_first");
593 case APP_WRITER
: sReplace
= C2U("com.sun.star.text.TextDocument"); break;
594 case APP_WRITER_WEB
: sReplace
= C2U("com.sun.star.text.WebDocument"); break;
595 case APP_WRITER_GLOBAL
: sReplace
= C2U("com.sun.star.text.GlobalDocument"); break;
596 case APP_CALC
: sReplace
= C2U("com.sun.star.sheet.SpreadsheetDocument");break;
597 case APP_IMPRESS
: sReplace
= C2U("com.sun.star.presentation.PresentationDocument");break;
598 case APP_DRAW
: sReplace
= C2U("com.sun.star.drawing.DrawingDocument");break;
599 case APP_MATH
: sReplace
= C2U("com.sun.star.formula.FormulaProperties");break;
600 default: DBG_ERROR("illegal user data");
602 String
sTmp(sCommand
);
603 sTmp
.SearchAndReplaceAscii("%1", sReplace
);
605 Reference
< XEnumeration
> xList
= xQuery
->createSubSetEnumerationByQuery(sCommand
);
606 SequenceAsVector
< OUString
> lList
;
607 SequenceAsVector
< sal_Bool
> lAlienList
;
608 SequenceAsVector
< sal_Bool
> lODFList
;
609 while(xList
->hasMoreElements())
611 SequenceAsHashMap
aFilter(xList
->nextElement());
612 OUString sFilter
= aFilter
.getUnpackedValueOrDefault(OUString::createFromAscii("Name"),OUString());
613 if (sFilter
.getLength())
615 sal_Int32 nFlags
= aFilter
.getUnpackedValueOrDefault(OUString::createFromAscii("Flags"),sal_Int32());
616 lList
.push_back(sFilter
);
617 lAlienList
.push_back(0 != (nFlags
& SFX_FILTER_ALIEN
));
618 lODFList
.push_back( isODFFormat( sFilter
) );
621 pImpl
->aFilterArr
[nData
] = lList
.getAsConstList();
622 pImpl
->aAlienArr
[nData
] = lAlienList
.getAsConstList();
623 pImpl
->aODFArr
[nData
] = lODFList
.getAsConstList();
626 aDocTypeLB
.SelectEntryPos(0);
627 FilterHdl_Impl(&aDocTypeLB
);
631 DBG_ERROR("exception in FilterFactory access");
634 pImpl
->bInitialized
= sal_True
;
637 aDocInfoCB
.Check(aSaveOpt
.IsDocInfoSave());
638 // aDocInfoCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_DOCINFSAVE));
640 aBackupCB
.Check(aSaveOpt
.IsBackup());
641 BOOL bBackupRO
= aSaveOpt
.IsReadOnly(SvtSaveOptions::E_BACKUP
);
642 aBackupCB
.Enable(!bBackupRO
);
643 aBackupFI
.Show(bBackupRO
);
645 aAutoSaveCB
.Check(aSaveOpt
.IsAutoSave());
646 aWarnAlienFormatCB
.Check(aSaveOpt
.IsWarnAlienFormat());
647 aWarnAlienFormatCB
.Enable(!aSaveOpt
.IsReadOnly(SvtSaveOptions::E_WARNALIENFORMAT
));
648 // aAutoSaveCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_AUTOSAVE));
650 // the pretty printing
651 aSizeOptimizationCB
.Check( !aSaveOpt
.IsPrettyPrinting());
652 // aSizeOptimizationCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_DOPRETTYPRINTING ));
655 aAutoSaveEdit
.SetValue( aSaveOpt
.GetAutoSaveTime() );
656 // aAutoSaveEdit.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_AUTOSAVETIME));
659 aRelativeFsysCB
.Check( aSaveOpt
.IsSaveRelFSys() );
660 // aRelativeFsysCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_SAVERELFSYS));
662 aRelativeInetCB
.Check( aSaveOpt
.IsSaveRelINet() );
663 // aRelativeInetCB.Enable(!aSaveOpt.IsReadOnly(SvtSaveOptions::E_SAVERELINET));
665 void* pDefaultVersion
= (void*)long( aSaveOpt
.GetODFDefaultVersion() );
666 aODFVersionLB
.SelectEntryPos( aODFVersionLB
.GetEntryPos( pDefaultVersion
) );
668 AutoClickHdl_Impl( &aAutoSaveCB
);
669 ODFVersionHdl_Impl( &aODFVersionLB
);
671 aDocInfoCB
.SaveValue();
672 aBackupCB
.SaveValue();
673 aWarnAlienFormatCB
.SaveValue();
674 aSizeOptimizationCB
.SaveValue();
675 aAutoSaveCB
.SaveValue();
676 aAutoSaveEdit
.SaveValue();
677 // aAutoSavePromptBtn.SaveValue();
679 aRelativeFsysCB
.SaveValue();
680 aRelativeInetCB
.SaveValue();
681 aODFVersionLB
.SaveValue();
684 // -----------------------------------------------------------------------
686 IMPL_LINK( SfxSaveTabPage
, AutoClickHdl_Impl
, CheckBox
*, pBox
)
688 if ( pBox
== &aAutoSaveCB
)
690 if ( aAutoSaveCB
.IsChecked() )
692 aAutoSaveEdit
.Enable();
694 // aAutoSavePromptBtn.Enable();
695 aAutoSaveEdit
.GrabFocus();
699 aAutoSaveEdit
.Disable();
701 // aAutoSavePromptBtn.Disable();
706 /* -----------------------------05.04.01 13:10--------------------------------
708 ---------------------------------------------------------------------------*/
709 OUString
lcl_ExtracUIName(const Sequence
<PropertyValue
> rProperties
)
713 const PropertyValue
* pProperties
= rProperties
.getConstArray();
714 for(int nProp
= 0; nProp
< rProperties
.getLength(); nProp
++)
716 if(!pProperties
[nProp
].Name
.compareToAscii("UIName"))
718 pProperties
[nProp
].Value
>>= sRet
;
721 else if(!pProperties
[nProp
].Name
.compareToAscii("Flags"))
723 if ( pProperties
[nProp
].Value
>>= nFlags
)
728 else if(!pProperties
[nProp
].Name
.compareToAscii("Name"))
730 pProperties
[nProp
].Value
>>= sRet
;
735 /* -----------------------------05.04.01 13:37--------------------------------
737 ---------------------------------------------------------------------------*/
738 IMPL_LINK( SfxSaveTabPage
, FilterHdl_Impl
, ListBox
*, pBox
)
740 USHORT nCurPos
= aDocTypeLB
.GetSelectEntryPos();
743 if(nCurPos
< APP_COUNT
)
744 nData
= (long) aDocTypeLB
.GetEntryData(nCurPos
);
746 if ( nData
>= 0 && nData
< APP_COUNT
)
748 if(&aDocTypeLB
== pBox
)
751 const OUString
* pFilters
= pImpl
->aFilterArr
[nData
].getConstArray();
752 if(!pImpl
->aUIFilterArr
[nData
].getLength())
754 pImpl
->aUIFilterArr
[nData
].realloc(pImpl
->aFilterArr
[nData
].getLength());
755 OUString
* pUIFilters
= pImpl
->aUIFilterArr
[nData
].getArray();
756 for(int nFilter
= 0; nFilter
< pImpl
->aFilterArr
[nData
].getLength(); nFilter
++)
758 Any aProps
= pImpl
->xFact
->getByName(pFilters
[nFilter
]);
759 Sequence
<PropertyValue
> aProperties
;
760 aProps
>>= aProperties
;
761 pUIFilters
[nFilter
] = lcl_ExtracUIName(aProperties
);
764 const OUString
* pUIFilters
= pImpl
->aUIFilterArr
[nData
].getConstArray();
766 for(int i
= 0; i
< pImpl
->aUIFilterArr
[nData
].getLength(); i
++)
768 USHORT nEntryPos
= aSaveAsLB
.InsertEntry(pUIFilters
[i
]);
769 if ( pImpl
->aODFArr
[nData
][i
] )
770 aSaveAsLB
.SetEntryData( nEntryPos
, (void*)pImpl
);
771 if(pFilters
[i
] == pImpl
->aDefaultArr
[nData
])
772 sSelect
= pUIFilters
[i
];
774 if(sSelect
.getLength())
775 aSaveAsLB
.SelectEntry(sSelect
);
776 aSaveAsFI
.Show(pImpl
->aDefaultReadonlyArr
[nData
]);
777 aSaveAsFT
.Enable(!pImpl
->aDefaultReadonlyArr
[nData
]);
778 aSaveAsLB
.Enable(!pImpl
->aDefaultReadonlyArr
[nData
]);
782 OUString sSelect
= pBox
->GetSelectEntry();
783 const OUString
* pFilters
= pImpl
->aFilterArr
[nData
].getConstArray();
784 OUString
* pUIFilters
= pImpl
->aUIFilterArr
[nData
].getArray();
785 for(int i
= 0; i
< pImpl
->aUIFilterArr
[nData
].getLength(); i
++)
786 if(pUIFilters
[i
] == sSelect
)
788 sSelect
= pFilters
[i
];
792 pImpl
->aDefaultArr
[nData
] = sSelect
;
796 ODFVersionHdl_Impl( &aSaveAsLB
);
800 IMPL_LINK( SfxSaveTabPage
, ODFVersionHdl_Impl
, ListBox
*, EMPTYARG
)
802 long nVersion
= long( aODFVersionLB
.GetEntryData( aODFVersionLB
.GetSelectEntryPos() ) );
803 bool bShown
= SvtSaveOptions::ODFDefaultVersion( nVersion
) != SvtSaveOptions::ODFVER_LATEST
;
806 bool bHasODFFormat
= false;
807 USHORT i
= 0, nCount
= aSaveAsLB
.GetEntryCount();
808 for ( ; i
< nCount
; ++ i
)
810 if ( aSaveAsLB
.GetEntryData(i
) != NULL
)
812 bHasODFFormat
= true;
817 bShown
= !bHasODFFormat
818 || ( aSaveAsLB
.GetEntryData( aSaveAsLB
.GetSelectEntryPos() ) != NULL
);
821 aODFWarningFI
.Show( bShown
);
822 aODFWarningFT
.Show( bShown
);