xref: /aoo42x/main/sfx2/source/appl/appcfg.cxx (revision 972a6c96)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_sfx2.hxx"
26 #include <com/sun/star/uno/Reference.hxx>
27 #include <com/sun/star/frame/XDesktop.hpp>
28 #include <com/sun/star/util/XURLTransformer.hpp>
29 #ifndef _COM_SUN_STAR_BEANS_PropertyValue_HPP_
30 #include <com/sun/star/beans/PropertyValue.hpp>
31 #endif
32 #include <com/sun/star/beans/XPropertySet.hpp>
33 #include <com/sun/star/util/XFlushable.hpp>
34 
35 #ifndef _STDLIB_H
36 #include <stdlib.h>
37 #endif
38 #include <tools/config.hxx>
39 #include <vcl/sound.hxx>
40 #include <vcl/msgbox.hxx>
41 #include <tools/string.hxx>
42 #include <svl/itempool.hxx>
43 #include <svl/aeitem.hxx>
44 #include <svl/slstitm.hxx>
45 #include <svl/stritem.hxx>
46 #include <svl/intitem.hxx>
47 #include <svl/eitem.hxx>
48 #include <svl/szitem.hxx>
49 #include <svl/undo.hxx>
50 
51 #define _SVSTDARR_STRINGS
52 #include <svl/svstdarr.hxx>
53 #include <svtools/ttprops.hxx>
54 #include <sfx2/sfxsids.hrc>
55 #include <sot/exchange.hxx>
56 
57 #include <svl/isethint.hxx>
58 
59 #include <unotools/configmgr.hxx>
60 #include <tools/urlobj.hxx>
61 #include <tools/wldcrd.hxx>
62 #include <unotools/saveopt.hxx>
63 #include <svtools/helpopt.hxx>
64 #include <unotools/undoopt.hxx>
65 #include <unotools/securityoptions.hxx>
66 #include <unotools/pathoptions.hxx>
67 #include <unotools/inetoptions.hxx>
68 #include <svtools/miscopt.hxx>
69 #include <vcl/toolbox.hxx>
70 #include <unotools/localfilehelper.hxx>
71 #include <comphelper/processfactory.hxx>
72 #include <rtl/ustrbuf.hxx>
73 
74 #include <sfx2/app.hxx>
75 #include <sfx2/docfile.hxx>
76 #include <sfx2/viewfrm.hxx>
77 #include "sfx2/sfxhelp.hxx"
78 #include "sfxtypes.hxx"
79 #include <sfx2/dispatch.hxx>
80 #include <sfx2/objsh.hxx>
81 #include "objshimp.hxx"
82 #include <sfx2/viewsh.hxx>
83 #include <sfx2/request.hxx>
84 #include <sfx2/evntconf.hxx>
85 #include "appdata.hxx"
86 #include "workwin.hxx"
87 #include "helper.hxx"	// SfxContentHelper::...
88 #include "app.hrc"
89 #include "sfx2/sfxresid.hxx"
90 #include "shutdownicon.hxx"
91 
92 using namespace ::com::sun::star::uno;
93 using namespace ::com::sun::star::util;
94 using namespace ::com::sun::star::frame;
95 using namespace ::com::sun::star::beans;
96 
97 //-------------------------------------------------------------------------
98 
99 class SfxEventAsyncer_Impl : public SfxListener
100 {
101     SfxEventHint        aHint;
102     Timer*              pTimer;
103 
104 public:
105 
106 	virtual void		Notify( SfxBroadcaster& rBC, const SfxHint& rHint );
107     SfxEventAsyncer_Impl( const SfxEventHint& rHint );
108     ~SfxEventAsyncer_Impl();
109 	DECL_LINK( TimerHdl, Timer*);
110 };
111 
112 // -----------------------------------------------------------------------
113 
Notify(SfxBroadcaster &,const SfxHint & rHint)114 void SfxEventAsyncer_Impl::Notify( SfxBroadcaster&, const SfxHint& rHint )
115 {
116 	SfxSimpleHint* pHint = PTR_CAST( SfxSimpleHint, &rHint );
117 	if( pHint && pHint->GetId() == SFX_HINT_DYING && pTimer->IsActive() )
118 	{
119 		pTimer->Stop();
120 		delete this;
121 	}
122 }
123 
124 // -----------------------------------------------------------------------
125 
SfxEventAsyncer_Impl(const SfxEventHint & rHint)126 SfxEventAsyncer_Impl::SfxEventAsyncer_Impl( const SfxEventHint& rHint )
127  : aHint( rHint )
128 {
129     if( rHint.GetObjShell() )
130         StartListening( *rHint.GetObjShell() );
131 	pTimer = new Timer;
132     pTimer->SetTimeoutHdl( LINK(this, SfxEventAsyncer_Impl, TimerHdl) );
133 	pTimer->SetTimeout( 0 );
134 	pTimer->Start();
135 }
136 
137 // -----------------------------------------------------------------------
138 
~SfxEventAsyncer_Impl()139 SfxEventAsyncer_Impl::~SfxEventAsyncer_Impl()
140 {
141 	delete pTimer;
142 }
143 
144 // -----------------------------------------------------------------------
145 
IMPL_LINK(SfxEventAsyncer_Impl,TimerHdl,Timer *,pAsyncTimer)146 IMPL_LINK(SfxEventAsyncer_Impl, TimerHdl, Timer*, pAsyncTimer)
147 {
148     (void)pAsyncTimer; // unused variable
149     SfxObjectShellRef xRef( aHint.GetObjShell() );
150     pAsyncTimer->Stop();
151 #ifdef DBG_UTIL
152 	if (!xRef.Is())
153 	{
154 		ByteString aTmp( "SfxEvent: ");
155 		aTmp += ByteString( String( aHint.GetEventName() ), RTL_TEXTENCODING_UTF8 );
156 		DBG_TRACE( aTmp.GetBuffer() );
157 	}
158 #endif
159     SFX_APP()->Broadcast( aHint );
160     if ( xRef.Is() )
161         xRef->Broadcast( aHint );
162     delete this;
163 	return 0L;
164 }
165 
166 
167 //--------------------------------------------------------------------
168 
GetOptions(SfxItemSet & rSet)169 sal_Bool SfxApplication::GetOptions( SfxItemSet& rSet )
170 {
171     sal_Bool bRet = sal_False;
172     SfxItemPool &rPool = GetPool();
173 	String aTRUEStr('1');
174 
175 	const sal_uInt16 *pRanges = rSet.GetRanges();
176     SvtSaveOptions aSaveOptions;
177     SvtUndoOptions aUndoOptions;
178     SvtHelpOptions aHelpOptions;
179 	SvtInetOptions aInetOptions;
180 	SvtSecurityOptions	aSecurityOptions;
181     SvtMiscOptions aMiscOptions;
182 
183 	while ( *pRanges )
184 	{
185 		for(sal_uInt16 nWhich = *pRanges++; nWhich <= *pRanges; ++nWhich)
186 		{
187 			switch(nWhich)
188 			{
189     			case SID_ATTR_BUTTON_OUTSTYLE3D :
190 					if(rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_BUTTON_OUTSTYLE3D ),
191                               aMiscOptions.GetToolboxStyle() != TOOLBOX_STYLE_FLAT)))
192 						bRet = sal_True;
193 					break;
194     			case SID_ATTR_BUTTON_BIGSIZE :
195                 {
196 					if( rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_BUTTON_BIGSIZE ), aMiscOptions.AreCurrentSymbolsLarge() ) ) )
197 						bRet = sal_True;
198 					break;
199                 }
200     			case SID_ATTR_BACKUP :
201                     {
202                         bRet = sal_True;
203                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_BACKUP))
204                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_BACKUP ),aSaveOptions.IsBackup())))
205                                 bRet = sal_False;
206                     }
207 					break;
208                 case SID_ATTR_ODFENCRYPTION:
209                     {
210                         bRet = sal_True;
211                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_USESHA1INODF12) &&
212                             !aSaveOptions.IsReadOnly(SvtSaveOptions::E_USEBLOWFISHINODF12))
213                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_ODFENCRYPTION ),
214                                                         !(aSaveOptions.IsUseSHA1InODF12() && aSaveOptions.IsUseBlowfishInODF12()))))
215                                 bRet = sal_False;
216                     }
217 					break;
218     			case SID_ATTR_PRETTYPRINTING:
219                     {
220                         bRet = sal_True;
221                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_DOPRETTYPRINTING))
222                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_PRETTYPRINTING ), aSaveOptions.IsPrettyPrinting())))
223                                 bRet = sal_False;
224                     }
225 					break;
226                 case SID_ATTR_WARNALIENFORMAT:
227                     {
228                         bRet = sal_True;
229                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_WARNALIENFORMAT))
230                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_WARNALIENFORMAT ), aSaveOptions.IsWarnAlienFormat())))
231                                 bRet = sal_False;
232                     }
233 					break;
234     			case SID_ATTR_AUTOSAVE :
235                     {
236                         bRet = sal_True;
237                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_AUTOSAVE))
238                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_AUTOSAVE ), aSaveOptions.IsAutoSave())))
239                                 bRet = sal_False;
240                     }
241 					break;
242 				case SID_ATTR_AUTOSAVEPROMPT :
243                     {
244                         bRet = sal_True;
245                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_AUTOSAVEPROMPT))
246                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_AUTOSAVEPROMPT ), aSaveOptions.IsAutoSavePrompt())))
247                                 bRet = sal_False;
248                     }
249 					break;
250     			case SID_ATTR_AUTOSAVEMINUTE :
251                     {
252                         bRet = sal_True;
253                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_AUTOSAVETIME))
254                             if (!rSet.Put( SfxUInt16Item( rPool.GetWhich( SID_ATTR_AUTOSAVEMINUTE ), (sal_uInt16)aSaveOptions.GetAutoSaveTime())))
255                                 bRet = sal_False;
256                     }
257 					break;
258     			case SID_ATTR_DOCINFO :
259                     {
260                         bRet = sal_True;
261                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_DOCINFSAVE))
262                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_DOCINFO ), aSaveOptions.IsDocInfoSave())))
263                                 bRet = sal_False;
264                     }
265 					break;
266     			case SID_ATTR_WORKINGSET :
267                     {
268                         bRet = sal_True;
269                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_SAVEWORKINGSET))
270                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_WORKINGSET ), aSaveOptions.IsSaveWorkingSet())))
271                                 bRet = sal_False;
272                     }
273 					break;
274     			case SID_ATTR_SAVEDOCVIEW :
275                     {
276                         bRet = sal_True;
277                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_SAVEDOCVIEW))
278                             if (!rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_SAVEDOCVIEW ), aSaveOptions.IsSaveDocView())))
279                                 bRet = sal_False;
280                     }
281 					break;
282     			case SID_ATTR_METRIC :
283 //                    if(rSet.Put( SfxUInt16Item( rPool.GetWhich( SID_ATTR_METRIC ),
284 //                                pOptions->GetMetric() ) ) )
285 //                        bRet = sal_True;
286 					break;
287     			case SID_HELPBALLOONS :
288 					if(rSet.Put( SfxBoolItem ( rPool.GetWhich( SID_HELPBALLOONS ),
289                                aHelpOptions.IsExtendedHelp() ) ) )
290         				bRet = sal_True;
291 					break;
292     			case SID_HELPTIPS :
293 					if(rSet.Put( SfxBoolItem ( rPool.GetWhich( SID_HELPTIPS ),
294                                aHelpOptions.IsHelpTips() ) ) )
295         				bRet = sal_True;
296 					break;
297     			case SID_ATTR_AUTOHELPAGENT :
298 					if(rSet.Put( SfxBoolItem ( rPool.GetWhich( SID_ATTR_AUTOHELPAGENT ),
299                                aHelpOptions.IsHelpAgentAutoStartMode() ) ) )
300         				bRet = sal_True;
301 					break;
302     			case SID_HELPAGENT_TIMEOUT :
303 					if ( rSet.Put( SfxInt32Item( rPool.GetWhich( SID_HELPAGENT_TIMEOUT ),
304 												 aHelpOptions.GetHelpAgentTimeoutPeriod() ) ) )
305         				bRet = sal_True;
306 					break;
307     			case SID_ATTR_WELCOMESCREEN :
308 					if(rSet.Put( SfxBoolItem ( rPool.GetWhich( SID_ATTR_WELCOMESCREEN ),
309                                aHelpOptions.IsWelcomeScreen() ) ) )
310         				bRet = sal_True;
311 					break;
312                 case SID_HELP_STYLESHEET :
313                     if(rSet.Put( SfxStringItem ( rPool.GetWhich( SID_HELP_STYLESHEET ),
314                                aHelpOptions.GetHelpStyleSheet() ) ) )
315         				bRet = sal_True;
316                 break;
317     			case SID_ATTR_UNDO_COUNT :
318 					if(rSet.Put( SfxUInt16Item ( rPool.GetWhich( SID_ATTR_UNDO_COUNT ),
319                                  (sal_uInt16)aUndoOptions.GetUndoCount() ) ) )
320         				bRet = sal_True;
321 					break;
322     			case SID_ATTR_QUICKLAUNCHER :
323                 {
324                     if ( ShutdownIcon::IsQuickstarterInstalled() )
325                     {
326                         if ( rSet.Put( SfxBoolItem( rPool.GetWhich( SID_ATTR_QUICKLAUNCHER ),
327                                                     ShutdownIcon::GetAutostart() ) ) )
328                             bRet = sal_True;
329                     }
330                     else
331                     {
332                         rSet.DisableItem( rPool.GetWhich( SID_ATTR_QUICKLAUNCHER ) );
333                         bRet = sal_True;
334                     }
335 					break;
336                 }
337     			case SID_SAVEREL_INET :
338                     {
339                         bRet = sal_True;
340                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_SAVERELINET))
341                             if (!rSet.Put( SfxBoolItem ( rPool.GetWhich( SID_SAVEREL_INET ), aSaveOptions.IsSaveRelINet() )))
342                                 bRet = sal_False;
343                     }
344 					break;
345     			case SID_SAVEREL_FSYS :
346                     {
347                         bRet = sal_True;
348                         if (!aSaveOptions.IsReadOnly(SvtSaveOptions::E_SAVERELFSYS))
349                             if (!rSet.Put( SfxBoolItem ( rPool.GetWhich( SID_SAVEREL_FSYS ), aSaveOptions.IsSaveRelFSys() )))
350                                 bRet = sal_False;
351                     }
352 					break;
353                 case SID_BASIC_ENABLED :
354                     {
355                         bRet = sal_True;
356                         if (!aSecurityOptions.IsReadOnly(SvtSecurityOptions::E_BASICMODE))
357                         {
358                             if ( !rSet.Put( SfxUInt16Item( rPool.GetWhich( SID_BASIC_ENABLED ), sal::static_int_cast< sal_uInt16 >(aSecurityOptions.GetBasicMode()))))
359                                 bRet = sal_False;
360                         }
361                     }
362                     break;
363                 case SID_INET_EXE_PLUGIN  :
364                     {
365                         bRet = sal_True;
366                         if (!aSecurityOptions.IsReadOnly(SvtSecurityOptions::E_EXECUTEPLUGINS))
367                         {
368                             if ( !rSet.Put( SfxBoolItem( SID_INET_EXE_PLUGIN, aSecurityOptions.IsExecutePlugins() ) ) )
369                                 bRet = sal_False;
370                         }
371                     }
372                     break;
373                 case SID_MACRO_WARNING :
374                     {
375                         bRet = sal_True;
376                         if (!aSecurityOptions.IsReadOnly(SvtSecurityOptions::E_WARNING))
377                         {
378                             if ( !rSet.Put( SfxBoolItem( SID_MACRO_WARNING, aSecurityOptions.IsWarningEnabled() ) ) )
379                                 bRet = sal_False;
380                         }
381                     }
382                     break;
383                 case SID_MACRO_CONFIRMATION :
384                     {
385                         bRet = sal_True;
386                         if (!aSecurityOptions.IsReadOnly(SvtSecurityOptions::E_CONFIRMATION))
387                         {
388                             if ( !rSet.Put( SfxBoolItem( SID_MACRO_CONFIRMATION, aSecurityOptions.IsConfirmationEnabled() ) ) )
389                                 bRet = sal_False;
390                         }
391                     }
392                     break;
393                 case SID_SECURE_URL :
394                     {
395                         bRet = sal_True;
396                         if (!aSecurityOptions.IsReadOnly(SvtSecurityOptions::E_SECUREURLS))
397                         {
398                             ::com::sun::star::uno::Sequence< ::rtl::OUString > seqURLs = aSecurityOptions.GetSecureURLs();
399                             List aList;
400                             sal_uInt32 nCount = seqURLs.getLength();
401                             sal_uInt32 nURL;
402                             for( nURL=0; nURL<nCount; ++nURL )
403                             {
404                                 aList.Insert( new String( seqURLs[nURL] ), LIST_APPEND );
405                             }
406                             if( !rSet.Put( SfxStringListItem( rPool.GetWhich(SID_SECURE_URL),
407                                     &aList ) ) )
408                             {
409                                 bRet = sal_False;
410                             }
411                             for( nURL=0; nURL<nCount; ++nURL )
412                             {
413                                 delete (String*)aList.GetObject(nURL);
414                             }
415                             aList.Clear();
416                         }
417                     }
418                     break;
419     			case SID_ENABLE_METAFILEPRINT :
420 #ifdef ENABLE_MISSINGKEYASSERTIONS//MUSTINI
421 					DBG_ASSERT(sal_False, "SfxApplication::GetOptions()\nSoffice.ini key \"Common\\MetafilePrint\" is obsolete! .. How I can support SID_ENABLE_METAFILEPRINT any longer?\n");
422 #endif
423 					break;
424                 case SID_INET_PROXY_TYPE :
425                 {
426                     if( rSet.Put( SfxUInt16Item ( rPool.GetWhich( SID_INET_PROXY_TYPE ),
427                         (sal_uInt16)aInetOptions.GetProxyType() )))
428                             bRet = sal_True;
429                     break;
430                 }
431                 case SID_INET_HTTP_PROXY_NAME :
432                 {
433                     if ( rSet.Put( SfxStringItem ( rPool.GetWhich(SID_INET_HTTP_PROXY_NAME ),
434                         aInetOptions.GetProxyHttpName() )))
435                             bRet = sal_True;
436                     break;
437                 }
438                 case SID_INET_HTTP_PROXY_PORT :
439                     if ( rSet.Put( SfxInt32Item( rPool.GetWhich(SID_INET_HTTP_PROXY_PORT ),
440                         aInetOptions.GetProxyHttpPort() )))
441                             bRet = sal_True;
442                     break;
443                 case SID_INET_FTP_PROXY_NAME :
444                     if ( rSet.Put( SfxStringItem ( rPool.GetWhich(SID_INET_FTP_PROXY_NAME ),
445                         aInetOptions.GetProxyFtpName() )))
446                             bRet = sal_True;
447                     break;
448                 case SID_INET_FTP_PROXY_PORT :
449                     if ( rSet.Put( SfxInt32Item ( rPool.GetWhich(SID_INET_FTP_PROXY_PORT ),
450                         aInetOptions.GetProxyFtpPort() )))
451                             bRet = sal_True;
452                     break;
453                 case SID_INET_SECURITY_PROXY_NAME :
454                 case SID_INET_SECURITY_PROXY_PORT :
455 #ifdef ENABLE_MISSINGKEYASSERTIONS//MUSTINI
456                     DBG_ASSERT( sal_False, "SfxApplication::GetOptions()\nSome INET values no longer supported!\n" );
457 #endif
458                     break;
459                 case SID_INET_NOPROXY :
460                     if( rSet.Put( SfxStringItem ( rPool.GetWhich( SID_INET_NOPROXY),
461                         aInetOptions.GetProxyNoProxy() )))
462                             bRet = sal_True;
463                     break;
464 				case SID_ATTR_PATHNAME :
465 				case SID_ATTR_PATHGROUP :
466 				{
467 					SfxAllEnumItem aNames(rPool.GetWhich(SID_ATTR_PATHGROUP));
468     				SfxAllEnumItem aValues(rPool.GetWhich(SID_ATTR_PATHNAME));
469                     SvtPathOptions aPathCfg;
470                     for ( sal_uInt16 nProp = SvtPathOptions::PATH_ADDIN;
471 						  nProp <= SvtPathOptions::PATH_WORK; nProp++ )
472                     {
473 						const String aName( SfxResId( CONFIG_PATH_START + nProp ) );
474 						aNames.InsertValue( nProp, aName );
475                         String aValue;
476                         switch ( nProp )
477                         {
478                             case SvtPathOptions::PATH_ADDIN:        ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aPathCfg.GetAddinPath(), aValue ); break;
479                             case SvtPathOptions::PATH_AUTOCORRECT:  aValue = aPathCfg.GetAutoCorrectPath(); break;
480                             case SvtPathOptions::PATH_AUTOTEXT:     aValue = aPathCfg.GetAutoTextPath(); break;
481                             case SvtPathOptions::PATH_BACKUP:       aValue = aPathCfg.GetBackupPath(); break;
482                             case SvtPathOptions::PATH_BASIC:        aValue = aPathCfg.GetBasicPath(); break;
483                             case SvtPathOptions::PATH_BITMAP:       aValue = aPathCfg.GetBitmapPath(); break;
484                             case SvtPathOptions::PATH_CONFIG:       aValue = aPathCfg.GetConfigPath(); break;
485                             case SvtPathOptions::PATH_DICTIONARY:   aValue = aPathCfg.GetDictionaryPath(); break;
486                             case SvtPathOptions::PATH_FAVORITES:    aValue = aPathCfg.GetFavoritesPath(); break;
487                             case SvtPathOptions::PATH_FILTER:       ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aPathCfg.GetFilterPath(), aValue ); break;
488                             case SvtPathOptions::PATH_GALLERY:      aValue = aPathCfg.GetGalleryPath(); break;
489                             case SvtPathOptions::PATH_GRAPHIC:      aValue = aPathCfg.GetGraphicPath(); break;
490                             case SvtPathOptions::PATH_HELP:         ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aPathCfg.GetHelpPath(), aValue ); break;
491                             case SvtPathOptions::PATH_LINGUISTIC:   aValue = aPathCfg.GetLinguisticPath(); break;
492                             case SvtPathOptions::PATH_MODULE:       ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aPathCfg.GetModulePath(), aValue ); break;
493                             case SvtPathOptions::PATH_PALETTE:      aValue = aPathCfg.GetPalettePath(); break;
494                             case SvtPathOptions::PATH_PLUGIN:       ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aPathCfg.GetPluginPath(), aValue ); break;
495                             case SvtPathOptions::PATH_STORAGE:      ::utl::LocalFileHelper::ConvertPhysicalNameToURL( aPathCfg.GetStoragePath(), aValue ); break;
496                             case SvtPathOptions::PATH_TEMP:         aValue = aPathCfg.GetTempPath(); break;
497                             case SvtPathOptions::PATH_TEMPLATE:     aValue = aPathCfg.GetTemplatePath(); break;
498                             case SvtPathOptions::PATH_USERCONFIG:   aValue = aPathCfg.GetUserConfigPath(); break;
499                             case SvtPathOptions::PATH_WORK:         aValue = aPathCfg.GetWorkPath(); break;
500                         }
501                         aValues.InsertValue( nProp, aValue );
502                     }
503 
504 					if ( rSet.Put(aNames) || rSet.Put(aValues) )
505 						bRet = sal_True;
506 				}
507 
508 				default:
509 					DBG_WARNING( "W1:Wrong ID while getting Options!" );
510 					break;
511 			}
512 #ifdef DBG_UTIL
513 			if ( !bRet )
514 				DBG_ERROR( "Putting options failed!" );
515 #endif
516 		}
517 		pRanges++;
518 	}
519 
520 	return bRet;
521 }
522 
523 //--------------------------------------------------------------------
IsSecureURL(const INetURLObject & rURL,const String * pReferer) const524 sal_Bool SfxApplication::IsSecureURL( const INetURLObject& rURL, const String* pReferer ) const
525 {
526 	return SvtSecurityOptions().IsSecureURL( rURL.GetMainURL( INetURLObject::NO_DECODE ), *pReferer );
527 }
528 //--------------------------------------------------------------------
529 // TODO/CLEANUP: wieso zwei SetOptions Methoden?
SetOptions_Impl(const SfxItemSet & rSet)530 void SfxApplication::SetOptions_Impl( const SfxItemSet& rSet )
531 {
532     const SfxPoolItem *pItem = 0;
533     SfxItemPool &rPool = GetPool();
534 	sal_Bool bResetSession = sal_False;
535 	sal_Bool bProxiesModified = sal_False;
536 
537     SvtSaveOptions aSaveOptions;
538     SvtUndoOptions aUndoOptions;
539     SvtHelpOptions aHelpOptions;
540 	SvtSecurityOptions aSecurityOptions;
541 	SvtPathOptions aPathOptions;
542 	SvtInetOptions aInetOptions;
543     SvtMiscOptions aMiscOptions;
544     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_BUTTON_OUTSTYLE3D), sal_True, &pItem) )
545     {
546         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
547 		sal_uInt16 nOutStyle =
548 			( (const SfxBoolItem *)pItem)->GetValue() ? 0 : TOOLBOX_STYLE_FLAT;
549         aMiscOptions.SetToolboxStyle( nOutStyle );
550     }
551 
552     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_BUTTON_BIGSIZE), sal_True, &pItem) )
553     {
554         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
555 		sal_Bool bBigSize = ( (const SfxBoolItem*)pItem )->GetValue();
556         aMiscOptions.SetSymbolsSize(
557             sal::static_int_cast< sal_Int16 >(
558                 bBigSize ? SFX_SYMBOLS_SIZE_LARGE : SFX_SYMBOLS_SIZE_SMALL ) );
559         SfxViewFrame* pCurrViewFrame = SfxViewFrame::GetFirst();
560         while ( pCurrViewFrame )
561         {
562             // update all "final" dispatchers
563             if ( !pCurrViewFrame->GetActiveChildFrame_Impl() )
564                 pCurrViewFrame->GetDispatcher()->Update_Impl(sal_True);
565             pCurrViewFrame = SfxViewFrame::GetNext(*pCurrViewFrame);
566         }
567     }
568 
569 	// Backup
570     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_BACKUP), sal_True, &pItem) )
571     {
572         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
573         aSaveOptions.SetBackup( ( (const SfxBoolItem*)pItem )->GetValue() );
574     }
575 
576     // ODF Encryption
577     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_ATTR_ODFENCRYPTION ), sal_True, &pItem ) )
578     {
579         DBG_ASSERT( pItem->ISA( SfxBoolItem ), "BoolItem expected" );
580         sal_Bool bItemValue =  static_cast< const SfxBoolItem*>(pItem)->GetValue();
581 
582         aSaveOptions.SetUseSHA1InODF12( !bItemValue );
583         aSaveOptions.SetUseBlowfishInODF12( !bItemValue );
584     }
585 
586 	// PrettyPrinting
587     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_ATTR_PRETTYPRINTING ), sal_True, &pItem ) )
588     {
589         DBG_ASSERT( pItem->ISA( SfxBoolItem ), "BoolItem expected" );
590         aSaveOptions.SetPrettyPrinting( static_cast< const SfxBoolItem*> ( pItem )->GetValue() );
591     }
592 
593     // WarnAlienFormat
594     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_ATTR_WARNALIENFORMAT ), sal_True, &pItem ) )
595     {
596         DBG_ASSERT( pItem->ISA( SfxBoolItem ), "BoolItem expected" );
597         aSaveOptions.SetWarnAlienFormat( static_cast< const SfxBoolItem*> ( pItem )->GetValue() );
598     }
599 
600 	// AutoSave
601     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_AUTOSAVE), sal_True, &pItem))
602     {
603         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
604         aSaveOptions.SetAutoSave( ( (const SfxBoolItem*)pItem )->GetValue() );
605     }
606 
607 	// AutoSave-Propt
608     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_AUTOSAVEPROMPT), sal_True, &pItem))
609     {
610         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
611         aSaveOptions.SetAutoSavePrompt(((const SfxBoolItem *)pItem)->GetValue());
612     }
613 
614 	// AutoSave-Time
615     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_AUTOSAVEMINUTE), sal_True, &pItem))
616     {
617         DBG_ASSERT(pItem->ISA(SfxUInt16Item), "UInt16Item expected");
618         aSaveOptions.SetAutoSaveTime(((const SfxUInt16Item *)pItem)->GetValue());
619     }
620 
621 	// DocInfo
622     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_DOCINFO), sal_True, &pItem))
623     {
624         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
625         aSaveOptions.SetDocInfoSave(((const SfxBoolItem *)pItem)->GetValue());
626     }
627 
628 	// offende Dokumente merken
629     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_WORKINGSET), sal_True, &pItem))
630     {
631         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
632         aSaveOptions.SetSaveWorkingSet(((const SfxBoolItem *)pItem)->GetValue());
633     }
634 
635 	// Fenster-Einstellung speichern
636     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_SAVEDOCVIEW), sal_True, &pItem))
637     {
638         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
639         aSaveOptions.SetSaveDocView(((const SfxBoolItem *)pItem)->GetValue());
640     }
641 
642 	// Metric
643     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_METRIC), sal_True, &pItem))
644     {
645         DBG_ASSERT(pItem->ISA(SfxUInt16Item), "UInt16Item expected");
646 //        pOptions->SetMetric((FieldUnit)((const SfxUInt16Item*)pItem)->GetValue());
647     }
648 
649 	// HelpBalloons
650     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_HELPBALLOONS), sal_True, &pItem))
651     {
652         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
653         aHelpOptions.SetExtendedHelp(((const SfxBoolItem *)pItem)->GetValue());
654     }
655 
656 	// HelpTips
657     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_HELPTIPS), sal_True, &pItem))
658     {
659         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
660         aHelpOptions.SetHelpTips(((const SfxBoolItem *)pItem)->GetValue());
661     }
662 
663 	// AutoHelpAgent
664     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_AUTOHELPAGENT ), sal_True, &pItem))
665     {
666         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
667         aHelpOptions.SetHelpAgentAutoStartMode( ((const SfxBoolItem *)pItem)->GetValue() );
668     }
669 
670 	// help agent timeout
671     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_HELPAGENT_TIMEOUT ), sal_True, &pItem ) )
672     {
673         DBG_ASSERT(pItem->ISA(SfxInt32Item), "Int32Item expected");
674 		aHelpOptions.SetHelpAgentTimeoutPeriod( ( (const SfxInt32Item*)pItem )->GetValue() );
675     }
676 
677 	// WelcomeScreen
678     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_WELCOMESCREEN ), sal_True, &pItem))
679     {
680         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
681         aHelpOptions.SetWelcomeScreen( ((const SfxBoolItem *)pItem)->GetValue() );
682     }
683 
684 	// WelcomeScreen
685     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_WELCOMESCREEN_RESET ), sal_True, &pItem))
686     {
687         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
688 		sal_Bool bReset = ((const SfxBoolItem *)pItem)->GetValue();
689 		if ( bReset )
690 		{
691             DBG_ERROR( "Not implemented, may be EOL!" );
692         }                                                   }
693 
694     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_HELP_STYLESHEET ), sal_True, &pItem))
695     {
696         DBG_ASSERT(pItem->ISA(SfxStringItem), "StringItem expected");
697         aHelpOptions.SetHelpStyleSheet( ((const SfxStringItem *)pItem)->GetValue() );
698     }
699 
700     // SaveRelINet
701     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_SAVEREL_INET), sal_True, &pItem))
702     {
703         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
704         aSaveOptions.SetSaveRelINet(((const SfxBoolItem *)pItem)->GetValue());
705     }
706 
707 	// SaveRelFSys
708     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_SAVEREL_FSYS), sal_True, &pItem))
709     {
710         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
711         aSaveOptions.SetSaveRelFSys(((const SfxBoolItem *)pItem)->GetValue());
712     }
713 
714 	// Undo-Count
715     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_UNDO_COUNT), sal_True, &pItem))
716     {
717         DBG_ASSERT(pItem->ISA(SfxUInt16Item), "UInt16Item expected");
718         sal_uInt16 nUndoCount = ((const SfxUInt16Item*)pItem)->GetValue();
719         aUndoOptions.SetUndoCount( nUndoCount );
720 
721         // um alle Undo-Manager zu erwischen: "uber alle Frames iterieren
722         for ( SfxViewFrame *pFrame = SfxViewFrame::GetFirst();
723               pFrame;
724               pFrame = SfxViewFrame::GetNext(*pFrame) )
725         {
726             // den Dispatcher des Frames rausholen
727             SfxDispatcher *pDispat = pFrame->GetDispatcher();
728             pDispat->Flush();
729 
730             // "uber alle SfxShells auf dem Stack des Dispatchers iterieren
731             sal_uInt16 nIdx = 0;
732             for ( SfxShell *pSh = pDispat->GetShell(nIdx);
733                   pSh;
734                   ++nIdx, pSh = pDispat->GetShell(nIdx) )
735             {
736                 ::svl::IUndoManager *pShUndoMgr = pSh->GetUndoManager();
737                 if ( pShUndoMgr )
738                     pShUndoMgr->SetMaxUndoActionCount( nUndoCount );
739             }
740         }
741     }
742 
743 	// Office autostart
744     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_QUICKLAUNCHER), sal_True, &pItem))
745     {
746         DBG_ASSERT(pItem->ISA(SfxBoolItem), "BoolItem expected");
747         ShutdownIcon::SetAutostart( ( (const SfxBoolItem*)pItem )->GetValue() != sal_False );
748     }
749 
750 	// StarBasic Enable
751 	if ( SFX_ITEM_SET == rSet.GetItemState(SID_BASIC_ENABLED, sal_True, &pItem))
752     {
753 		DBG_ASSERT(pItem->ISA(SfxUInt16Item), "SfxInt16Item expected");
754 		aSecurityOptions.SetBasicMode( (EBasicSecurityMode)( (const SfxUInt16Item*)pItem )->GetValue() );
755     }
756 
757 	// Execute PlugIns
758 	if ( SFX_ITEM_SET == rSet.GetItemState(SID_INET_EXE_PLUGIN, sal_True, &pItem))
759     {
760 		DBG_ASSERT(pItem->ISA(SfxBoolItem), "SfxBoolItem expected");
761         aSecurityOptions.SetExecutePlugins( ( (const SfxBoolItem *)pItem )->GetValue() );
762 		bResetSession = sal_True;
763     }
764 
765     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_INET_PROXY_TYPE), sal_True, &pItem))
766     {
767         DBG_ASSERT( pItem->ISA(SfxUInt16Item), "UInt16Item expected" );
768         aInetOptions.SetProxyType((SvtInetOptions::ProxyType)( (const SfxUInt16Item*)pItem )->GetValue());
769         bResetSession = sal_True;
770         bProxiesModified = sal_True;
771     }
772 
773     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_INET_HTTP_PROXY_NAME ), sal_True, &pItem ) )
774     {
775         DBG_ASSERT( pItem->ISA(SfxStringItem), "StringItem expected" );
776         aInetOptions.SetProxyHttpName( ((const SfxStringItem *)pItem)->GetValue() );
777         bResetSession = sal_True;
778         bProxiesModified = sal_True;
779     }
780     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_INET_HTTP_PROXY_PORT ), sal_True, &pItem ) )
781     {
782         DBG_ASSERT( pItem->ISA(SfxInt32Item), "Int32Item expected" );
783         aInetOptions.SetProxyHttpPort( ( (const SfxInt32Item*)pItem )->GetValue() );
784         bResetSession = sal_True;
785         bProxiesModified = sal_True;
786     }
787     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_INET_FTP_PROXY_NAME ), sal_True, &pItem ) )
788     {
789         DBG_ASSERT( pItem->ISA(SfxStringItem), "StringItem expected" );
790         aInetOptions.SetProxyFtpName( ((const SfxStringItem *)pItem)->GetValue() );
791         bResetSession = sal_True;
792         bProxiesModified = sal_True;
793     }
794     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_INET_FTP_PROXY_PORT ), sal_True, &pItem ) )
795     {
796         DBG_ASSERT( pItem->ISA(SfxInt32Item), "Int32Item expected" );
797         aInetOptions.SetProxyFtpPort( ( (const SfxInt32Item*)pItem )->GetValue() );
798         bResetSession = sal_True;
799         bProxiesModified = sal_True;
800     }
801     if ( SFX_ITEM_SET == rSet.GetItemState(SID_INET_NOPROXY, sal_True, &pItem))
802     {
803         DBG_ASSERT(pItem->ISA(SfxStringItem), "StringItem expected");
804         aInetOptions.SetProxyNoProxy(((const SfxStringItem *)pItem)->GetValue());
805         bResetSession = sal_True;
806         bProxiesModified = sal_True;
807     }
808 
809 	// Secure-Referers
810 	if ( SFX_ITEM_SET == rSet.GetItemState(SID_SECURE_URL, sal_True, &pItem))
811     {
812 		DELETEZ(pAppData_Impl->pSecureURLs);
813 
814 		DBG_ASSERT(pItem->ISA(SfxStringListItem), "StringListItem expected");
815 		const List *pList = ((SfxStringListItem*)pItem)->GetList();
816 		sal_uInt32 nCount = pList->Count();
817 		::com::sun::star::uno::Sequence< ::rtl::OUString > seqURLs(nCount);
818 		for( sal_uInt32 nPosition=0;nPosition<nCount;++nPosition)
819 		{
820 			seqURLs[nPosition] = *(const String*)(pList->GetObject(nPosition));
821 		}
822 		aSecurityOptions.SetSecureURLs( seqURLs );
823     }
824 
825     if ( SFX_ITEM_SET == rSet.GetItemState(SID_MACRO_WARNING, sal_True, &pItem))
826     {
827 		DBG_ASSERT(pItem->ISA(SfxBoolItem), "SfxBoolItem expected");
828         aSecurityOptions.SetWarningEnabled( ( (const SfxBoolItem *)pItem )->GetValue() );
829     }
830     if ( SFX_ITEM_SET == rSet.GetItemState(SID_MACRO_CONFIRMATION, sal_True, &pItem))
831     {
832 		DBG_ASSERT(pItem->ISA(SfxBoolItem), "SfxBoolItem expected");
833         aSecurityOptions.SetConfirmationEnabled( ( (const SfxBoolItem *)pItem )->GetValue() );
834     }
835 
836     // EnableMetafilePrint
837     if ( SFX_ITEM_SET == rSet.GetItemState( rPool.GetWhich( SID_ENABLE_METAFILEPRINT ), sal_True, &pItem ) )
838     {
839 #ifdef ENABLE_MISSINGKEYASSERTIONS//MUSTINI
840 		DBG_ASSERT(sal_False, "SfxApplication::SetOptions_Impl()\nsoffice.ini key \"MetafilPrint\" not supported any longer!\n");
841 #endif
842     }
843 
844 	// geaenderte Daten speichern
845 	aInetOptions.flush();
846 }
847 
848 //--------------------------------------------------------------------
SetOptions(const SfxItemSet & rSet)849 void SfxApplication::SetOptions(const SfxItemSet &rSet)
850 {
851 	SvtPathOptions aPathOptions;
852 
853 	// Daten werden in DocInfo und IniManager gespeichert
854     const SfxPoolItem *pItem = 0;
855     SfxItemPool &rPool = GetPool();
856 
857 	SfxAllItemSet aSendSet( rSet );
858 
859 	// PathName
860     if ( SFX_ITEM_SET == rSet.GetItemState(rPool.GetWhich(SID_ATTR_PATHNAME), sal_True, &pItem))
861     {
862         DBG_ASSERT(pItem->ISA(SfxAllEnumItem), "AllEnumItem expected");
863 		const SfxAllEnumItem* pEnumItem = (const SfxAllEnumItem *)pItem;
864 		sal_uInt32 nCount = pEnumItem->GetValueCount();
865 		String aNoChangeStr( ' ' );
866 		for( sal_uInt32 nPath=0; nPath<nCount; ++nPath )
867 		{
868 			String sValue = pEnumItem->GetValueTextByPos((sal_uInt16)nPath);
869 			if ( sValue != aNoChangeStr )
870 			{
871 				switch( nPath )
872 				{
873                     case SvtPathOptions::PATH_ADDIN:
874                     {
875                         String aTmp;
876                         if( ::utl::LocalFileHelper::ConvertURLToPhysicalName( sValue, aTmp ) )
877                             aPathOptions.SetAddinPath( aTmp );
878                         break;
879                     }
880 
881 					case SvtPathOptions::PATH_AUTOCORRECT:	aPathOptions.SetAutoCorrectPath( sValue );break;
882 					case SvtPathOptions::PATH_AUTOTEXT:		aPathOptions.SetAutoTextPath( sValue );break;
883 					case SvtPathOptions::PATH_BACKUP:		aPathOptions.SetBackupPath( sValue );break;
884 					case SvtPathOptions::PATH_BASIC:		aPathOptions.SetBasicPath( sValue );break;
885 					case SvtPathOptions::PATH_BITMAP:		aPathOptions.SetBitmapPath( sValue );break;
886 					case SvtPathOptions::PATH_CONFIG:		aPathOptions.SetConfigPath( sValue );break;
887 					case SvtPathOptions::PATH_DICTIONARY:	aPathOptions.SetDictionaryPath( sValue );break;
888 					case SvtPathOptions::PATH_FAVORITES:	aPathOptions.SetFavoritesPath( sValue );break;
889                     case SvtPathOptions::PATH_FILTER:
890                     {
891                         String aTmp;
892                         if( ::utl::LocalFileHelper::ConvertURLToPhysicalName( sValue, aTmp ) )
893                             aPathOptions.SetFilterPath( aTmp );
894                         break;
895                     }
896 					case SvtPathOptions::PATH_GALLERY:		aPathOptions.SetGalleryPath( sValue );break;
897 					case SvtPathOptions::PATH_GRAPHIC:		aPathOptions.SetGraphicPath( sValue );break;
898                     case SvtPathOptions::PATH_HELP:
899                     {
900                         String aTmp;
901                         if( ::utl::LocalFileHelper::ConvertURLToPhysicalName( sValue, aTmp ) )
902                             aPathOptions.SetHelpPath( aTmp );
903                         break;
904                     }
905 
906 					case SvtPathOptions::PATH_LINGUISTIC:	aPathOptions.SetLinguisticPath( sValue );break;
907                     case SvtPathOptions::PATH_MODULE:
908                     {
909                         String aTmp;
910                         if( ::utl::LocalFileHelper::ConvertURLToPhysicalName( sValue, aTmp ) )
911                             aPathOptions.SetModulePath( aTmp );
912                         break;
913                     }
914 
915 					case SvtPathOptions::PATH_PALETTE:		aPathOptions.SetPalettePath( sValue );break;
916                     case SvtPathOptions::PATH_PLUGIN:
917                     {
918                         String aTmp;
919                         if( ::utl::LocalFileHelper::ConvertURLToPhysicalName( sValue, aTmp ) )
920                             aPathOptions.SetPluginPath( aTmp );
921                         break;
922                     }
923 
924                     case SvtPathOptions::PATH_STORAGE:
925                     {
926                         String aTmp;
927                         if( ::utl::LocalFileHelper::ConvertURLToPhysicalName( sValue, aTmp ) )
928                             aPathOptions.SetStoragePath( aTmp );
929                         break;
930                     }
931 
932 					case SvtPathOptions::PATH_TEMP:			aPathOptions.SetTempPath( sValue );break;
933 					case SvtPathOptions::PATH_TEMPLATE:		aPathOptions.SetTemplatePath( sValue );break;
934 					case SvtPathOptions::PATH_USERCONFIG:	aPathOptions.SetUserConfigPath( sValue );break;
935 					case SvtPathOptions::PATH_WORK:			aPathOptions.SetWorkPath( sValue );break;
936 					default: DBG_ERRORFILE("SfxApplication::SetOptions_Impl()\nInvalid path number found for set directories!");
937 				}
938 			}
939 		}
940 
941 		aSendSet.ClearItem( rPool.GetWhich( SID_ATTR_PATHNAME ) );
942     }
943 
944 	SetOptions_Impl( rSet );
945 
946 	// Undo-Count
947 	Broadcast( SfxItemSetHint( rSet ) );
948 }
949 
950 //--------------------------------------------------------------------
951 
952 // alle Dokumente speichern
953 
SaveAll_Impl(sal_Bool bPrompt,sal_Bool bAutoSave)954 sal_Bool SfxApplication::SaveAll_Impl(sal_Bool bPrompt, sal_Bool bAutoSave)
955 {
956     bAutoSave = sal_False; // functionality moved to new AutoRecovery Service!
957 
958     sal_Bool bFunc = sal_True;
959     short nRet;
960 
961     for ( SfxObjectShell *pDoc = SfxObjectShell::GetFirst();
962           pDoc;
963           pDoc = SfxObjectShell::GetNext(*pDoc) )
964     {
965 		if( SFX_CREATE_MODE_STANDARD == pDoc->GetCreateMode() &&
966 			SfxViewFrame::GetFirst(pDoc) &&
967 			!pDoc->IsInModalMode() &&
968 			!pDoc->HasModalViews() )
969 		{
970 			if ( pDoc->GetProgress() == 0 )
971 			{
972 				if ( !pDoc->IsModified() )
973 					continue;
974 
975 				if ( bPrompt || (bAutoSave && !pDoc->HasName()) )
976 					nRet = QuerySave_Impl( *pDoc, bAutoSave );
977 				else
978 					nRet = RET_YES;
979 
980 				if ( nRet == RET_YES )
981 				{
982 					SfxRequest aReq( SID_SAVEDOC, 0, pDoc->GetPool() );
983 					const SfxPoolItem *pPoolItem = pDoc->ExecuteSlot( aReq );
984 					if ( !pPoolItem || !pPoolItem->ISA(SfxBoolItem) ||
985 						!( (const SfxBoolItem*) pPoolItem )->GetValue() )
986 						bFunc = sal_False;
987 				}
988 				else if ( nRet == RET_CANCEL )
989 				{
990 					bFunc = sal_False;
991 					break;
992 				}
993 				else if ( nRet == RET_NO )
994 				{
995 				}
996 			}
997 		}
998     }
999 
1000     return bFunc;
1001 }
1002 
1003 //--------------------------------------------------------------------
1004 
1005 //--------------------------------------------------------------------
NotifyEvent(const SfxEventHint & rEventHint,bool bSynchron)1006 void SfxApplication::NotifyEvent( const SfxEventHint& rEventHint, bool bSynchron )
1007 {
1008     SfxObjectShell *pDoc = rEventHint.GetObjShell();
1009     if ( pDoc && ( pDoc->IsPreview() || !pDoc->Get_Impl()->bInitialized ) )
1010         return;
1011 
1012 #ifdef DBG_UTIL
1013     //::rtl::OUString aName = SfxEventConfiguration::GetEventName_Impl( rEventHint.GetEventId() );
1014     //ByteString aTmp( "SfxEvent: ");
1015     //aTmp += ByteString( String(aName), RTL_TEXTENCODING_UTF8 );
1016     //DBG_TRACE( aTmp.GetBuffer() );
1017 #endif
1018 
1019 	if ( bSynchron )
1020     {
1021 #ifdef DBG_UTIL
1022 		if (!pDoc)
1023 		{
1024 			ByteString aTmp( "SfxEvent: ");
1025 			aTmp += ByteString( String( rEventHint.GetEventName() ), RTL_TEXTENCODING_UTF8 );
1026 			DBG_TRACE( aTmp.GetBuffer() );
1027 		}
1028 #endif
1029         Broadcast(rEventHint);
1030         if ( pDoc )
1031             pDoc->Broadcast( rEventHint );
1032     }
1033     else
1034         new SfxEventAsyncer_Impl( rEventHint );
1035 }
1036 
1037 IMPL_OBJHINT( SfxStringHint, String )
1038 
1039