xref: /aoo4110/main/sfx2/source/appl/appserv.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_sfx2.hxx"
26*b1cdbd2cSJim Jagielski #include <com/sun/star/uno/Reference.hxx>
27*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/XMultiServiceFactory.hpp>
28*b1cdbd2cSJim Jagielski #include <com/sun/star/lang/IllegalArgumentException.hpp>
29*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/DispatchResultEvent.hpp>
30*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/DispatchResultState.hpp>
31*b1cdbd2cSJim Jagielski #include <com/sun/star/task/XJobExecutor.hpp>
32*b1cdbd2cSJim Jagielski #include <com/sun/star/ui/dialogs/XExecutableDialog.hpp>
33*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDesktop.hpp>
34*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XDispatchHelper.hpp>
35*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XFramesSupplier.hpp>
36*b1cdbd2cSJim Jagielski #include <com/sun/star/util/XCloseable.hpp>
37*b1cdbd2cSJim Jagielski #include <com/sun/star/util/CloseVetoException.hpp>
38*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XLayoutManager.hpp>
39*b1cdbd2cSJim Jagielski #include <com/sun/star/document/XEmbeddedScripts.hpp>
40*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/XStorage.hpp>
41*b1cdbd2cSJim Jagielski #include <com/sun/star/embed/ElementModes.hpp>
42*b1cdbd2cSJim Jagielski #include <com/sun/star/system/SystemShellExecute.hpp>
43*b1cdbd2cSJim Jagielski #include <com/sun/star/system/SystemShellExecuteFlags.hpp>
44*b1cdbd2cSJim Jagielski #include <com/sun/star/system/SystemShellExecuteException.hpp>
45*b1cdbd2cSJim Jagielski 
46*b1cdbd2cSJim Jagielski #include <comphelper/processfactory.hxx>
47*b1cdbd2cSJim Jagielski #include <comphelper/storagehelper.hxx>
48*b1cdbd2cSJim Jagielski #include "comphelper/configurationhelper.hxx"
49*b1cdbd2cSJim Jagielski 
50*b1cdbd2cSJim Jagielski #include <svtools/addresstemplate.hxx>
51*b1cdbd2cSJim Jagielski #include <svl/visitem.hxx>
52*b1cdbd2cSJim Jagielski #include <unotools/intlwrapper.hxx>
53*b1cdbd2cSJim Jagielski 
54*b1cdbd2cSJim Jagielski #include <unotools/configmgr.hxx>
55*b1cdbd2cSJim Jagielski #include <tools/config.hxx>
56*b1cdbd2cSJim Jagielski #include <tools/diagnose_ex.h>
57*b1cdbd2cSJim Jagielski #include <vcl/msgbox.hxx>
58*b1cdbd2cSJim Jagielski #include <svl/intitem.hxx>
59*b1cdbd2cSJim Jagielski #include <svl/eitem.hxx>
60*b1cdbd2cSJim Jagielski #include <svl/stritem.hxx>
61*b1cdbd2cSJim Jagielski #include <basic/sbstar.hxx>
62*b1cdbd2cSJim Jagielski #include <basic/basmgr.hxx>
63*b1cdbd2cSJim Jagielski #include <basic/basrdll.hxx>
64*b1cdbd2cSJim Jagielski #include <svtools/sfxecode.hxx>
65*b1cdbd2cSJim Jagielski #include <svtools/ehdl.hxx>
66*b1cdbd2cSJim Jagielski #include <vcl/help.hxx>
67*b1cdbd2cSJim Jagielski #include <vcl/stdtext.hxx>
68*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
69*b1cdbd2cSJim Jagielski 
70*b1cdbd2cSJim Jagielski #include <unotools/pathoptions.hxx>
71*b1cdbd2cSJim Jagielski #include <unotools/moduleoptions.hxx>
72*b1cdbd2cSJim Jagielski #include <svtools/helpopt.hxx>
73*b1cdbd2cSJim Jagielski #include <toolkit/helper/vclunohelper.hxx>
74*b1cdbd2cSJim Jagielski #include <tools/shl.hxx>
75*b1cdbd2cSJim Jagielski #include <unotools/bootstrap.hxx>
76*b1cdbd2cSJim Jagielski #include <vos/process.hxx>
77*b1cdbd2cSJim Jagielski #include <rtl/bootstrap.hxx>
78*b1cdbd2cSJim Jagielski #include <cppuhelper/exc_hlp.hxx>
79*b1cdbd2cSJim Jagielski #include <rtl/ustrbuf.hxx>
80*b1cdbd2cSJim Jagielski 
81*b1cdbd2cSJim Jagielski #include <com/sun/star/script/provider/XScriptProviderFactory.hpp>
82*b1cdbd2cSJim Jagielski #include <com/sun/star/frame/XModuleManager.hpp>
83*b1cdbd2cSJim Jagielski #include <com/sun/star/beans/XPropertySet.hpp>
84*b1cdbd2cSJim Jagielski 
85*b1cdbd2cSJim Jagielski #include "frmload.hxx"
86*b1cdbd2cSJim Jagielski #include "referers.hxx"
87*b1cdbd2cSJim Jagielski #include <sfx2/app.hxx>
88*b1cdbd2cSJim Jagielski #include <sfx2/request.hxx>
89*b1cdbd2cSJim Jagielski #include <sfx2/dispatch.hxx>
90*b1cdbd2cSJim Jagielski #include <sfx2/bindings.hxx>
91*b1cdbd2cSJim Jagielski #include <sfx2/msg.hxx>
92*b1cdbd2cSJim Jagielski #include <sfx2/objface.hxx>
93*b1cdbd2cSJim Jagielski #include <sfx2/objitem.hxx>
94*b1cdbd2cSJim Jagielski #include <sfx2/objsh.hxx>
95*b1cdbd2cSJim Jagielski #include <sfx2/hintpost.hxx>
96*b1cdbd2cSJim Jagielski #include <sfx2/viewsh.hxx>
97*b1cdbd2cSJim Jagielski #include <sfx2/docfac.hxx>
98*b1cdbd2cSJim Jagielski #include <sfx2/docfile.hxx>
99*b1cdbd2cSJim Jagielski #include <sfx2/docfilt.hxx>
100*b1cdbd2cSJim Jagielski #include "docvor.hxx"
101*b1cdbd2cSJim Jagielski #include <sfx2/new.hxx>
102*b1cdbd2cSJim Jagielski #include <sfx2/templdlg.hxx>
103*b1cdbd2cSJim Jagielski #include "sfxtypes.hxx"
104*b1cdbd2cSJim Jagielski #include <sfx2/tabdlg.hxx>
105*b1cdbd2cSJim Jagielski #include "arrdecl.hxx"
106*b1cdbd2cSJim Jagielski #include "fltfnc.hxx"
107*b1cdbd2cSJim Jagielski #include <sfx2/sfx.hrc>
108*b1cdbd2cSJim Jagielski #include "app.hrc"
109*b1cdbd2cSJim Jagielski #include <sfx2/passwd.hxx>
110*b1cdbd2cSJim Jagielski #include "sfx2/sfxresid.hxx"
111*b1cdbd2cSJim Jagielski #include "arrdecl.hxx"
112*b1cdbd2cSJim Jagielski #include <sfx2/childwin.hxx>
113*b1cdbd2cSJim Jagielski #include "appdata.hxx"
114*b1cdbd2cSJim Jagielski #include "sfx2/minfitem.hxx"
115*b1cdbd2cSJim Jagielski #include <sfx2/event.hxx>
116*b1cdbd2cSJim Jagielski #include <sfx2/module.hxx>
117*b1cdbd2cSJim Jagielski #include <sfx2/viewfrm.hxx>
118*b1cdbd2cSJim Jagielski #include "sfxpicklist.hxx"
119*b1cdbd2cSJim Jagielski #include "imestatuswindow.hxx"
120*b1cdbd2cSJim Jagielski #include <sfx2/sfxdlg.hxx>
121*b1cdbd2cSJim Jagielski #include <sfx2/dialogs.hrc>
122*b1cdbd2cSJim Jagielski #include "sorgitm.hxx"
123*b1cdbd2cSJim Jagielski #include "sfx2/sfxhelp.hxx"
124*b1cdbd2cSJim Jagielski #include <tools/svlibrary.hxx>
125*b1cdbd2cSJim Jagielski 
126*b1cdbd2cSJim Jagielski using namespace ::com::sun::star;
127*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::beans;
128*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::uno;
129*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::frame;
130*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::container;
131*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::util;
132*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::script;
133*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::system;
134*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::lang;
135*b1cdbd2cSJim Jagielski using namespace ::com::sun::star::document;
136*b1cdbd2cSJim Jagielski 
137*b1cdbd2cSJim Jagielski namespace css = com::sun::star;
138*b1cdbd2cSJim Jagielski 
139*b1cdbd2cSJim Jagielski //-------------------------------------------------------------------------
QuitAgain_Impl(void * pObj,void * pArg)140*b1cdbd2cSJim Jagielski long QuitAgain_Impl( void* pObj, void* pArg )
141*b1cdbd2cSJim Jagielski {
142*b1cdbd2cSJim Jagielski 	SfxApplication* pApp = (SfxApplication*)pObj;
143*b1cdbd2cSJim Jagielski 	Timer* pTimer = (Timer*)pArg;
144*b1cdbd2cSJim Jagielski 	delete pTimer;
145*b1cdbd2cSJim Jagielski 	pApp->GetDispatcher_Impl()->Execute( SID_QUITAPP, SFX_CALLMODE_ASYNCHRON );
146*b1cdbd2cSJim Jagielski 	return 0;
147*b1cdbd2cSJim Jagielski }
148*b1cdbd2cSJim Jagielski 
MiscExec_Impl(SfxRequest & rReq)149*b1cdbd2cSJim Jagielski void SfxApplication::MiscExec_Impl( SfxRequest& rReq )
150*b1cdbd2cSJim Jagielski {
151*b1cdbd2cSJim Jagielski 	DBG_MEMTEST();
152*b1cdbd2cSJim Jagielski 	bool bDone = sal_False;
153*b1cdbd2cSJim Jagielski 	switch ( rReq.GetSlot() )
154*b1cdbd2cSJim Jagielski 	{
155*b1cdbd2cSJim Jagielski 		case SID_SETOPTIONS:
156*b1cdbd2cSJim Jagielski 		{
157*b1cdbd2cSJim Jagielski 			if( rReq.GetArgs() )
158*b1cdbd2cSJim Jagielski 				SetOptions_Impl( *rReq.GetArgs() );
159*b1cdbd2cSJim Jagielski 			break;
160*b1cdbd2cSJim Jagielski 		}
161*b1cdbd2cSJim Jagielski 
162*b1cdbd2cSJim Jagielski 		case SID_QUITAPP:
163*b1cdbd2cSJim Jagielski 		case SID_EXITANDRETURN:
164*b1cdbd2cSJim Jagielski         case SID_LOGOUT:
165*b1cdbd2cSJim Jagielski 		{
166*b1cdbd2cSJim Jagielski             // protect against reentrant calls
167*b1cdbd2cSJim Jagielski             if ( pAppData_Impl->bInQuit )
168*b1cdbd2cSJim Jagielski                 return;
169*b1cdbd2cSJim Jagielski 
170*b1cdbd2cSJim Jagielski             if ( rReq.GetSlot() == SID_LOGOUT )
171*b1cdbd2cSJim Jagielski             {
172*b1cdbd2cSJim Jagielski                 for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst();
173*b1cdbd2cSJim Jagielski                     pObjSh; pObjSh = SfxObjectShell::GetNext( *pObjSh ) )
174*b1cdbd2cSJim Jagielski                 {
175*b1cdbd2cSJim Jagielski                     if ( !pObjSh->IsModified() )
176*b1cdbd2cSJim Jagielski                         continue;
177*b1cdbd2cSJim Jagielski 
178*b1cdbd2cSJim Jagielski                     SfxViewFrame* pFrame = SfxViewFrame::GetFirst( pObjSh );
179*b1cdbd2cSJim Jagielski                     if ( !pFrame || !pFrame->GetWindow().IsReallyVisible() )
180*b1cdbd2cSJim Jagielski                         continue;
181*b1cdbd2cSJim Jagielski 
182*b1cdbd2cSJim Jagielski                     if ( pObjSh->PrepareClose(2) )
183*b1cdbd2cSJim Jagielski                         pObjSh->SetModified( sal_False );
184*b1cdbd2cSJim Jagielski                     else
185*b1cdbd2cSJim Jagielski                         return;
186*b1cdbd2cSJim Jagielski                 }
187*b1cdbd2cSJim Jagielski 
188*b1cdbd2cSJim Jagielski                 String aName = String::CreateFromAscii("vnd.sun.star.cmd:logout");
189*b1cdbd2cSJim Jagielski                 SfxStringItem aNameItem( SID_FILE_NAME, aName );
190*b1cdbd2cSJim Jagielski                 SfxStringItem aReferer( SID_REFERER, DEFINE_CONST_UNICODE( "private/user" ) );
191*b1cdbd2cSJim Jagielski                 pAppData_Impl->pAppDispat->Execute( SID_OPENDOC, SFX_CALLMODE_SLOT, &aNameItem, &aReferer, 0L );
192*b1cdbd2cSJim Jagielski                 return;
193*b1cdbd2cSJim Jagielski             }
194*b1cdbd2cSJim Jagielski 
195*b1cdbd2cSJim Jagielski             // aus verschachtelten Requests nach 100ms nochmal probieren
196*b1cdbd2cSJim Jagielski             if( Application::GetDispatchLevel() > 1 )
197*b1cdbd2cSJim Jagielski             {
198*b1cdbd2cSJim Jagielski                 /* Dont save the request for closing the application and try it later
199*b1cdbd2cSJim Jagielski                    again. This is an UI bound functionality ... and the user will  try it again
200*b1cdbd2cSJim Jagielski                    if the dialog is closed. But we shouldnt close the application automaticly
201*b1cdbd2cSJim Jagielski                    if this dialog is closed by the user ...
202*b1cdbd2cSJim Jagielski                    So we ignore this request now and wait for a new user decision.
203*b1cdbd2cSJim Jagielski                 */
204*b1cdbd2cSJim Jagielski                 DBG_TRACE1( "QueryExit => FALSE (DispatchLevel == %u)", Application::GetDispatchLevel() );
205*b1cdbd2cSJim Jagielski                 return;
206*b1cdbd2cSJim Jagielski             }
207*b1cdbd2cSJim Jagielski 
208*b1cdbd2cSJim Jagielski             // block reentrant calls
209*b1cdbd2cSJim Jagielski             pAppData_Impl->bInQuit = sal_True;
210*b1cdbd2cSJim Jagielski             Reference < XDesktop > xDesktop ( ::comphelper::getProcessServiceFactory()->createInstance( DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY );
211*b1cdbd2cSJim Jagielski 
212*b1cdbd2cSJim Jagielski             rReq.ForgetAllArgs();
213*b1cdbd2cSJim Jagielski 
214*b1cdbd2cSJim Jagielski             // if terminate() failed, pAppData_Impl->bInQuit will now be sal_False, allowing further calls of SID_QUITAPP
215*b1cdbd2cSJim Jagielski 			sal_Bool bTerminated = xDesktop->terminate();
216*b1cdbd2cSJim Jagielski 			if (!bTerminated)
217*b1cdbd2cSJim Jagielski 				// if terminate() was successful, SfxApplication is now dead!
218*b1cdbd2cSJim Jagielski 				pAppData_Impl->bInQuit = sal_False;
219*b1cdbd2cSJim Jagielski 
220*b1cdbd2cSJim Jagielski 			// Returnwert setzten, ggf. terminieren
221*b1cdbd2cSJim Jagielski             rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bTerminated ) );
222*b1cdbd2cSJim Jagielski 			return;
223*b1cdbd2cSJim Jagielski 		}
224*b1cdbd2cSJim Jagielski 
225*b1cdbd2cSJim Jagielski 		case SID_CONFIG:
226*b1cdbd2cSJim Jagielski 		case SID_TOOLBOXOPTIONS:
227*b1cdbd2cSJim Jagielski 		case SID_CONFIGSTATUSBAR:
228*b1cdbd2cSJim Jagielski 		case SID_CONFIGMENU:
229*b1cdbd2cSJim Jagielski 		case SID_CONFIGACCEL:
230*b1cdbd2cSJim Jagielski 		case SID_CONFIGEVENT:
231*b1cdbd2cSJim Jagielski 		{
232*b1cdbd2cSJim Jagielski 			SfxAbstractDialogFactory* pFact =
233*b1cdbd2cSJim Jagielski 				SfxAbstractDialogFactory::Create();
234*b1cdbd2cSJim Jagielski 
235*b1cdbd2cSJim Jagielski 			if ( pFact )
236*b1cdbd2cSJim Jagielski 			{
237*b1cdbd2cSJim Jagielski 				SFX_REQUEST_ARG(rReq, pStringItem,
238*b1cdbd2cSJim Jagielski 					SfxStringItem, SID_CONFIG, sal_False);
239*b1cdbd2cSJim Jagielski 
240*b1cdbd2cSJim Jagielski 				SfxItemSet aSet(
241*b1cdbd2cSJim Jagielski 					GetPool(), SID_CONFIG, SID_CONFIG );
242*b1cdbd2cSJim Jagielski 
243*b1cdbd2cSJim Jagielski 				if ( pStringItem )
244*b1cdbd2cSJim Jagielski 				{
245*b1cdbd2cSJim Jagielski 					aSet.Put( SfxStringItem(
246*b1cdbd2cSJim Jagielski 						SID_CONFIG, pStringItem->GetValue() ) );
247*b1cdbd2cSJim Jagielski 				}
248*b1cdbd2cSJim Jagielski 
249*b1cdbd2cSJim Jagielski                 Reference< XFrame > xFrame;
250*b1cdbd2cSJim Jagielski 				const SfxItemSet* pIntSet = rReq.GetInternalArgs_Impl();
251*b1cdbd2cSJim Jagielski                 SFX_ITEMSET_ARG( pIntSet, pFrameItem, SfxUnoFrameItem, SID_FILLFRAME, sal_False );
252*b1cdbd2cSJim Jagielski                 if ( pFrameItem )
253*b1cdbd2cSJim Jagielski                     xFrame = pFrameItem->GetFrame();
254*b1cdbd2cSJim Jagielski 
255*b1cdbd2cSJim Jagielski 				SfxAbstractTabDialog* pDlg = pFact->CreateTabDialog(
256*b1cdbd2cSJim Jagielski 					RID_SVXDLG_CUSTOMIZE,
257*b1cdbd2cSJim Jagielski 					NULL, &aSet, xFrame );
258*b1cdbd2cSJim Jagielski 
259*b1cdbd2cSJim Jagielski 			  	if ( pDlg )
260*b1cdbd2cSJim Jagielski 				{
261*b1cdbd2cSJim Jagielski 					const short nRet = pDlg->Execute();
262*b1cdbd2cSJim Jagielski 
263*b1cdbd2cSJim Jagielski             		if ( nRet )
264*b1cdbd2cSJim Jagielski                 		bDone = sal_True;
265*b1cdbd2cSJim Jagielski 
266*b1cdbd2cSJim Jagielski             		delete pDlg;
267*b1cdbd2cSJim Jagielski 				}
268*b1cdbd2cSJim Jagielski 			}
269*b1cdbd2cSJim Jagielski 			break;
270*b1cdbd2cSJim Jagielski 		}
271*b1cdbd2cSJim Jagielski 
272*b1cdbd2cSJim Jagielski 		case SID_CLOSEDOCS:
273*b1cdbd2cSJim Jagielski 		case SID_CLOSEWINS:
274*b1cdbd2cSJim Jagielski 		{
275*b1cdbd2cSJim Jagielski 
276*b1cdbd2cSJim Jagielski             Reference < XFramesSupplier > xDesktop ( ::comphelper::getProcessServiceFactory()->createInstance( DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY );
277*b1cdbd2cSJim Jagielski             Reference< XIndexAccess > xTasks( xDesktop->getFrames(), UNO_QUERY );
278*b1cdbd2cSJim Jagielski             if ( !xTasks.is() )
279*b1cdbd2cSJim Jagielski                 break;
280*b1cdbd2cSJim Jagielski 
281*b1cdbd2cSJim Jagielski             sal_Int32 n=0;
282*b1cdbd2cSJim Jagielski             do
283*b1cdbd2cSJim Jagielski             {
284*b1cdbd2cSJim Jagielski                 if ( xTasks->getCount() <= n )
285*b1cdbd2cSJim Jagielski                     break;
286*b1cdbd2cSJim Jagielski 
287*b1cdbd2cSJim Jagielski                 Any aAny = xTasks->getByIndex(n);
288*b1cdbd2cSJim Jagielski                 Reference < XCloseable > xTask;
289*b1cdbd2cSJim Jagielski                 aAny >>= xTask;
290*b1cdbd2cSJim Jagielski                 try
291*b1cdbd2cSJim Jagielski                 {
292*b1cdbd2cSJim Jagielski                     xTask->close(sal_True);
293*b1cdbd2cSJim Jagielski                     n++;
294*b1cdbd2cSJim Jagielski                 }
295*b1cdbd2cSJim Jagielski                 catch( CloseVetoException& )
296*b1cdbd2cSJim Jagielski                 {
297*b1cdbd2cSJim Jagielski                 }
298*b1cdbd2cSJim Jagielski             }
299*b1cdbd2cSJim Jagielski             while( sal_True );
300*b1cdbd2cSJim Jagielski 
301*b1cdbd2cSJim Jagielski             sal_Bool bOk = ( n == 0);
302*b1cdbd2cSJim Jagielski 			rReq.SetReturnValue( SfxBoolItem( 0, bOk ) );
303*b1cdbd2cSJim Jagielski 			bDone = sal_True;
304*b1cdbd2cSJim Jagielski 			break;
305*b1cdbd2cSJim Jagielski 		}
306*b1cdbd2cSJim Jagielski 
307*b1cdbd2cSJim Jagielski 		case SID_SAVEDOCS:
308*b1cdbd2cSJim Jagielski 		{
309*b1cdbd2cSJim Jagielski 			sal_Bool bOK = sal_True;
310*b1cdbd2cSJim Jagielski 			sal_Bool bTmpDone = sal_True;
311*b1cdbd2cSJim Jagielski 			for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst();
312*b1cdbd2cSJim Jagielski 				  pObjSh;
313*b1cdbd2cSJim Jagielski 				  pObjSh = SfxObjectShell::GetNext( *pObjSh ) )
314*b1cdbd2cSJim Jagielski 			{
315*b1cdbd2cSJim Jagielski 				SfxRequest aReq( SID_SAVEDOC, 0, pObjSh->GetPool() );
316*b1cdbd2cSJim Jagielski 				if ( pObjSh->IsModified() )
317*b1cdbd2cSJim Jagielski 				{
318*b1cdbd2cSJim Jagielski 					pObjSh->ExecuteSlot( aReq );
319*b1cdbd2cSJim Jagielski 					SfxBoolItem *pItem = PTR_CAST( SfxBoolItem, aReq.GetReturnValue() );
320*b1cdbd2cSJim Jagielski 					bTmpDone = aReq.IsDone();
321*b1cdbd2cSJim Jagielski 					if ( !pItem || !pItem->GetValue() )
322*b1cdbd2cSJim Jagielski 						bOK = sal_False;
323*b1cdbd2cSJim Jagielski 				}
324*b1cdbd2cSJim Jagielski 			}
325*b1cdbd2cSJim Jagielski 
326*b1cdbd2cSJim Jagielski 			rReq.SetReturnValue( SfxBoolItem( 0, bOK ) );
327*b1cdbd2cSJim Jagielski 			rReq.Done();
328*b1cdbd2cSJim Jagielski 			break;
329*b1cdbd2cSJim Jagielski 		}
330*b1cdbd2cSJim Jagielski 
331*b1cdbd2cSJim Jagielski         // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
332*b1cdbd2cSJim Jagielski         case SID_HELPINDEX:
333*b1cdbd2cSJim Jagielski         case SID_HELP_SUPPORTPAGE:
334*b1cdbd2cSJim Jagielski         {
335*b1cdbd2cSJim Jagielski             Help* pHelp = Application::GetHelp();
336*b1cdbd2cSJim Jagielski             if ( pHelp )
337*b1cdbd2cSJim Jagielski             {
338*b1cdbd2cSJim Jagielski                 if ( rReq.GetSlot() == SID_HELP_SUPPORTPAGE )
339*b1cdbd2cSJim Jagielski                 {
340*b1cdbd2cSJim Jagielski                     // show Support page with new URL
341*b1cdbd2cSJim Jagielski                     // Create a dummy Help URL to get the Language and System
342*b1cdbd2cSJim Jagielski                     // but don't use a real command, otherwise we may get an anchor
343*b1cdbd2cSJim Jagielski                     rtl::OUString sEmpty;
344*b1cdbd2cSJim Jagielski                     rtl::OUString sTmp( SfxHelp::CreateHelpURL( sEmpty, sEmpty ) );
345*b1cdbd2cSJim Jagielski 
346*b1cdbd2cSJim Jagielski                     rtl::OUStringBuffer aBuff;
347*b1cdbd2cSJim Jagielski                     aBuff.appendAscii( RTL_CONSTASCII_STRINGPARAM( "vnd.sun.star.help://shared/text/shared/05/00000001.xhp" ) );
348*b1cdbd2cSJim Jagielski                     aBuff.append( sTmp.copy( sTmp.indexOf( sal_Unicode( '?' ) ) ) );
349*b1cdbd2cSJim Jagielski                     aBuff.appendAscii( RTL_CONSTASCII_STRINGPARAM( "&UseDB=no" ) );
350*b1cdbd2cSJim Jagielski 
351*b1cdbd2cSJim Jagielski                     pHelp->Start( aBuff.makeStringAndClear(), NULL );
352*b1cdbd2cSJim Jagielski                 }
353*b1cdbd2cSJim Jagielski                 else
354*b1cdbd2cSJim Jagielski                     pHelp->Start( rtl::OUString(RTL_CONSTASCII_USTRINGPARAM(".uno:HelpIndex")), NULL ); // show start page
355*b1cdbd2cSJim Jagielski                 bDone = sal_True;
356*b1cdbd2cSJim Jagielski             }
357*b1cdbd2cSJim Jagielski             break;
358*b1cdbd2cSJim Jagielski         }
359*b1cdbd2cSJim Jagielski 
360*b1cdbd2cSJim Jagielski 		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
361*b1cdbd2cSJim Jagielski 		case SID_HELPTIPS:
362*b1cdbd2cSJim Jagielski 		{
363*b1cdbd2cSJim Jagielski 			// Parameter aus werten
364*b1cdbd2cSJim Jagielski 			SFX_REQUEST_ARG(rReq, pOnItem, SfxBoolItem, SID_HELPTIPS, sal_False);
365*b1cdbd2cSJim Jagielski 			bool bOn = pOnItem
366*b1cdbd2cSJim Jagielski 							? ((SfxBoolItem*)pOnItem)->GetValue()
367*b1cdbd2cSJim Jagielski 							: !Help::IsQuickHelpEnabled();
368*b1cdbd2cSJim Jagielski 
369*b1cdbd2cSJim Jagielski 			// ausf"uhren
370*b1cdbd2cSJim Jagielski 			if ( bOn )
371*b1cdbd2cSJim Jagielski 				Help::EnableQuickHelp();
372*b1cdbd2cSJim Jagielski 			else
373*b1cdbd2cSJim Jagielski 				Help::DisableQuickHelp();
374*b1cdbd2cSJim Jagielski 			SvtHelpOptions().SetHelpTips( bOn );
375*b1cdbd2cSJim Jagielski 			Invalidate(SID_HELPTIPS);
376*b1cdbd2cSJim Jagielski 			bDone = sal_True;
377*b1cdbd2cSJim Jagielski 
378*b1cdbd2cSJim Jagielski 			// ggf. recorden
379*b1cdbd2cSJim Jagielski 			if ( !rReq.IsAPI() )
380*b1cdbd2cSJim Jagielski 				rReq.AppendItem( SfxBoolItem( SID_HELPTIPS, bOn) );
381*b1cdbd2cSJim Jagielski 			break;
382*b1cdbd2cSJim Jagielski 		}
383*b1cdbd2cSJim Jagielski 		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
384*b1cdbd2cSJim Jagielski 		case SID_EXTENDEDHELP:
385*b1cdbd2cSJim Jagielski 		{
386*b1cdbd2cSJim Jagielski 			Help::StartExtHelp();
387*b1cdbd2cSJim Jagielski 			break;
388*b1cdbd2cSJim Jagielski 		}
389*b1cdbd2cSJim Jagielski 		case SID_HELPBALLOONS:
390*b1cdbd2cSJim Jagielski 		{
391*b1cdbd2cSJim Jagielski 			// Parameter auswerten
392*b1cdbd2cSJim Jagielski 			SFX_REQUEST_ARG(rReq, pOnItem, SfxBoolItem, SID_HELPBALLOONS, sal_False);
393*b1cdbd2cSJim Jagielski 			bool bOn = pOnItem
394*b1cdbd2cSJim Jagielski 							? ((SfxBoolItem*)pOnItem)->GetValue()
395*b1cdbd2cSJim Jagielski 							: !Help::IsBalloonHelpEnabled();
396*b1cdbd2cSJim Jagielski 
397*b1cdbd2cSJim Jagielski 			// ausf"uhren
398*b1cdbd2cSJim Jagielski 			if ( bOn )
399*b1cdbd2cSJim Jagielski 				Help::EnableBalloonHelp();
400*b1cdbd2cSJim Jagielski 			else
401*b1cdbd2cSJim Jagielski 				Help::DisableBalloonHelp();
402*b1cdbd2cSJim Jagielski 			SvtHelpOptions().SetExtendedHelp( bOn );
403*b1cdbd2cSJim Jagielski 			Invalidate(SID_HELPBALLOONS);
404*b1cdbd2cSJim Jagielski 			bDone = sal_True;
405*b1cdbd2cSJim Jagielski 
406*b1cdbd2cSJim Jagielski 			// ggf. recorden
407*b1cdbd2cSJim Jagielski 			if ( !rReq.IsAPI() )
408*b1cdbd2cSJim Jagielski 				rReq.AppendItem( SfxBoolItem( SID_HELPBALLOONS, bOn) );
409*b1cdbd2cSJim Jagielski 			break;
410*b1cdbd2cSJim Jagielski 		}
411*b1cdbd2cSJim Jagielski 
412*b1cdbd2cSJim Jagielski 		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
413*b1cdbd2cSJim Jagielski 		case SID_HELP_PI:
414*b1cdbd2cSJim Jagielski 		{
415*b1cdbd2cSJim Jagielski 			SvtHelpOptions aHelpOpt;
416*b1cdbd2cSJim Jagielski 			SFX_REQUEST_ARG(rReq, pOnItem, SfxBoolItem, SID_HELP_PI, sal_False);
417*b1cdbd2cSJim Jagielski 			sal_Bool bOn = pOnItem
418*b1cdbd2cSJim Jagielski 							? ((SfxBoolItem*)pOnItem)->GetValue()
419*b1cdbd2cSJim Jagielski 							: !aHelpOpt.IsHelpAgentAutoStartMode();
420*b1cdbd2cSJim Jagielski 			aHelpOpt.SetHelpAgentAutoStartMode( bOn );
421*b1cdbd2cSJim Jagielski 			Invalidate(SID_HELP_PI);
422*b1cdbd2cSJim Jagielski 			bDone = sal_True;
423*b1cdbd2cSJim Jagielski 			break;
424*b1cdbd2cSJim Jagielski 		}
425*b1cdbd2cSJim Jagielski 
426*b1cdbd2cSJim Jagielski 		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
427*b1cdbd2cSJim Jagielski 		case SID_ABOUT:
428*b1cdbd2cSJim Jagielski 		{
429*b1cdbd2cSJim Jagielski  			SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
430*b1cdbd2cSJim Jagielski 			if ( pFact )
431*b1cdbd2cSJim Jagielski             {
432*b1cdbd2cSJim Jagielski                 VclAbstractDialog* pDlg = pFact->CreateVclDialog( 0, RID_DEFAULTABOUT );
433*b1cdbd2cSJim Jagielski 			    pDlg->Execute();
434*b1cdbd2cSJim Jagielski 			    delete pDlg;
435*b1cdbd2cSJim Jagielski 			    bDone = sal_True;
436*b1cdbd2cSJim Jagielski             }
437*b1cdbd2cSJim Jagielski 			break;
438*b1cdbd2cSJim Jagielski 		}
439*b1cdbd2cSJim Jagielski 
440*b1cdbd2cSJim Jagielski 		// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
441*b1cdbd2cSJim Jagielski 		case SID_ORGANIZER:
442*b1cdbd2cSJim Jagielski 		{
443*b1cdbd2cSJim Jagielski 			SfxTemplateOrganizeDlg  *pDlg =
444*b1cdbd2cSJim Jagielski 				new SfxTemplateOrganizeDlg(NULL);
445*b1cdbd2cSJim Jagielski 			pDlg->Execute();
446*b1cdbd2cSJim Jagielski 			delete pDlg;
447*b1cdbd2cSJim Jagielski 			bDone = sal_True;
448*b1cdbd2cSJim Jagielski 			break;
449*b1cdbd2cSJim Jagielski 		}
450*b1cdbd2cSJim Jagielski 
451*b1cdbd2cSJim Jagielski 		case SID_TEMPLATE_ADDRESSBOKSOURCE:
452*b1cdbd2cSJim Jagielski 		{
453*b1cdbd2cSJim Jagielski 			svt::AddressBookSourceDialog aDialog(GetTopWindow(), ::comphelper::getProcessServiceFactory());
454*b1cdbd2cSJim Jagielski 			aDialog.Execute();
455*b1cdbd2cSJim Jagielski 			bDone = sal_True;
456*b1cdbd2cSJim Jagielski 			break;
457*b1cdbd2cSJim Jagielski 		}
458*b1cdbd2cSJim Jagielski 
459*b1cdbd2cSJim Jagielski 		case SID_BASICSTOP:
460*b1cdbd2cSJim Jagielski 			StarBASIC::Stop();
461*b1cdbd2cSJim Jagielski 			break;
462*b1cdbd2cSJim Jagielski 
463*b1cdbd2cSJim Jagielski         case SID_BASICBREAK :
464*b1cdbd2cSJim Jagielski             BASIC_DLL()->BasicBreak();
465*b1cdbd2cSJim Jagielski             break;
466*b1cdbd2cSJim Jagielski 
467*b1cdbd2cSJim Jagielski         case SID_CRASH :
468*b1cdbd2cSJim Jagielski         {
469*b1cdbd2cSJim Jagielski             // Provoke a crash:
470*b1cdbd2cSJim Jagielski             char * crash = 0;
471*b1cdbd2cSJim Jagielski             *crash = 0;
472*b1cdbd2cSJim Jagielski             break;
473*b1cdbd2cSJim Jagielski         }
474*b1cdbd2cSJim Jagielski 
475*b1cdbd2cSJim Jagielski         case SID_SHOW_IME_STATUS_WINDOW:
476*b1cdbd2cSJim Jagielski             if (pAppData_Impl->m_xImeStatusWindow->canToggle())
477*b1cdbd2cSJim Jagielski             {
478*b1cdbd2cSJim Jagielski                 SfxBoolItem const * pItem = static_cast< SfxBoolItem const * >(
479*b1cdbd2cSJim Jagielski                     rReq.GetArg(SID_SHOW_IME_STATUS_WINDOW, false,
480*b1cdbd2cSJim Jagielski                                 TYPE(SfxBoolItem)));
481*b1cdbd2cSJim Jagielski                 bool bShow = pItem == 0
482*b1cdbd2cSJim Jagielski                     ? !pAppData_Impl->m_xImeStatusWindow->isShowing()
483*b1cdbd2cSJim Jagielski                     : ( pItem->GetValue() == sal_True );
484*b1cdbd2cSJim Jagielski                 pAppData_Impl->m_xImeStatusWindow->show(bShow);
485*b1cdbd2cSJim Jagielski                 if (pItem == 0)
486*b1cdbd2cSJim Jagielski                     rReq.AppendItem(SfxBoolItem(SID_SHOW_IME_STATUS_WINDOW,
487*b1cdbd2cSJim Jagielski                                                 bShow));
488*b1cdbd2cSJim Jagielski             }
489*b1cdbd2cSJim Jagielski             bDone = true;
490*b1cdbd2cSJim Jagielski             break;
491*b1cdbd2cSJim Jagielski 
492*b1cdbd2cSJim Jagielski         case SID_AVAILABLE_TOOLBARS:
493*b1cdbd2cSJim Jagielski         {
494*b1cdbd2cSJim Jagielski             SfxStringItem const * pToolbarName = static_cast< SfxStringItem const *>(
495*b1cdbd2cSJim Jagielski                     rReq.GetArg(SID_AVAILABLE_TOOLBARS, false, TYPE(SfxStringItem)));
496*b1cdbd2cSJim Jagielski 
497*b1cdbd2cSJim Jagielski             if ( pToolbarName )
498*b1cdbd2cSJim Jagielski             {
499*b1cdbd2cSJim Jagielski                 com::sun::star::uno::Reference< com::sun::star::frame::XFrame > xFrame;
500*b1cdbd2cSJim Jagielski                 Reference < XFramesSupplier > xDesktop ( ::comphelper::getProcessServiceFactory()->createInstance(
501*b1cdbd2cSJim Jagielski                                                             DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY );
502*b1cdbd2cSJim Jagielski                 xFrame = xDesktop->getActiveFrame();
503*b1cdbd2cSJim Jagielski 
504*b1cdbd2cSJim Jagielski 	            Reference< com::sun::star::beans::XPropertySet > xPropSet( xFrame, UNO_QUERY );
505*b1cdbd2cSJim Jagielski                 Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager;
506*b1cdbd2cSJim Jagielski 	            if ( xPropSet.is() )
507*b1cdbd2cSJim Jagielski 	            {
508*b1cdbd2cSJim Jagielski 		            try
509*b1cdbd2cSJim Jagielski 		            {
510*b1cdbd2cSJim Jagielski 			            Any aValue = xPropSet->getPropertyValue( rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "LayoutManager" )));
511*b1cdbd2cSJim Jagielski 			            aValue >>= xLayoutManager;
512*b1cdbd2cSJim Jagielski                     }
513*b1cdbd2cSJim Jagielski                     catch ( ::com::sun::star::uno::RuntimeException& e )
514*b1cdbd2cSJim Jagielski                     {
515*b1cdbd2cSJim Jagielski                         throw e;
516*b1cdbd2cSJim Jagielski                     }
517*b1cdbd2cSJim Jagielski                     catch ( ::com::sun::star::uno::Exception& )
518*b1cdbd2cSJim Jagielski                     {
519*b1cdbd2cSJim Jagielski                     }
520*b1cdbd2cSJim Jagielski                 }
521*b1cdbd2cSJim Jagielski 
522*b1cdbd2cSJim Jagielski                 if ( xLayoutManager.is() )
523*b1cdbd2cSJim Jagielski                 {
524*b1cdbd2cSJim Jagielski                     rtl::OUString aToolbarResName( RTL_CONSTASCII_USTRINGPARAM( "private:resource/toolbar/" ));
525*b1cdbd2cSJim Jagielski                     rtl::OUStringBuffer aBuf( aToolbarResName );
526*b1cdbd2cSJim Jagielski                     aBuf.append( pToolbarName->GetValue() );
527*b1cdbd2cSJim Jagielski 
528*b1cdbd2cSJim Jagielski                     // Parameter auswerten
529*b1cdbd2cSJim Jagielski                     rtl::OUString aToolbarName( aBuf.makeStringAndClear() );
530*b1cdbd2cSJim Jagielski                     sal_Bool bShow( !xLayoutManager->isElementVisible( aToolbarName ));
531*b1cdbd2cSJim Jagielski 
532*b1cdbd2cSJim Jagielski                     if ( bShow )
533*b1cdbd2cSJim Jagielski                     {
534*b1cdbd2cSJim Jagielski                         xLayoutManager->createElement( aToolbarName );
535*b1cdbd2cSJim Jagielski                         xLayoutManager->showElement( aToolbarName );
536*b1cdbd2cSJim Jagielski                     }
537*b1cdbd2cSJim Jagielski                     else
538*b1cdbd2cSJim Jagielski                         xLayoutManager->hideElement( aToolbarName );
539*b1cdbd2cSJim Jagielski                 }
540*b1cdbd2cSJim Jagielski             }
541*b1cdbd2cSJim Jagielski 
542*b1cdbd2cSJim Jagielski             bDone = true;
543*b1cdbd2cSJim Jagielski             break;
544*b1cdbd2cSJim Jagielski         }
545*b1cdbd2cSJim Jagielski 
546*b1cdbd2cSJim Jagielski         default:
547*b1cdbd2cSJim Jagielski             break;
548*b1cdbd2cSJim Jagielski 	}
549*b1cdbd2cSJim Jagielski 
550*b1cdbd2cSJim Jagielski 	if ( bDone )
551*b1cdbd2cSJim Jagielski 		rReq.Done();
552*b1cdbd2cSJim Jagielski }
553*b1cdbd2cSJim Jagielski 
554*b1cdbd2cSJim Jagielski //--------------------------------------------------------------------
555*b1cdbd2cSJim Jagielski 
MiscState_Impl(SfxItemSet & rSet)556*b1cdbd2cSJim Jagielski void SfxApplication::MiscState_Impl(SfxItemSet &rSet)
557*b1cdbd2cSJim Jagielski {
558*b1cdbd2cSJim Jagielski 	DBG_MEMTEST();
559*b1cdbd2cSJim Jagielski 
560*b1cdbd2cSJim Jagielski 	LocaleDataWrapper aLocaleWrapper( ::comphelper::getProcessServiceFactory(), Application::GetSettings().GetLocale() );
561*b1cdbd2cSJim Jagielski 	const sal_uInt16 *pRanges = rSet.GetRanges();
562*b1cdbd2cSJim Jagielski 	DBG_ASSERT(pRanges && *pRanges, "Set ohne Bereich");
563*b1cdbd2cSJim Jagielski 	while ( *pRanges )
564*b1cdbd2cSJim Jagielski 	{
565*b1cdbd2cSJim Jagielski 		for(sal_uInt16 nWhich = *pRanges++; nWhich <= *pRanges; ++nWhich)
566*b1cdbd2cSJim Jagielski 		{
567*b1cdbd2cSJim Jagielski 			switch(nWhich)
568*b1cdbd2cSJim Jagielski 			{
569*b1cdbd2cSJim Jagielski                 case SID_TEMPLATE_ADDRESSBOKSOURCE:
570*b1cdbd2cSJim Jagielski                     if ( !SvtModuleOptions().IsModuleInstalled(SvtModuleOptions::E_SDATABASE) )
571*b1cdbd2cSJim Jagielski                         rSet.Put(SfxVisibilityItem(nWhich, sal_False));
572*b1cdbd2cSJim Jagielski                     break;
573*b1cdbd2cSJim Jagielski 				case SID_EXITANDRETURN:
574*b1cdbd2cSJim Jagielski 				case SID_QUITAPP:
575*b1cdbd2cSJim Jagielski 				{
576*b1cdbd2cSJim Jagielski 					if ( pAppData_Impl->nDocModalMode )
577*b1cdbd2cSJim Jagielski 						rSet.DisableItem(nWhich);
578*b1cdbd2cSJim Jagielski 					else
579*b1cdbd2cSJim Jagielski                         rSet.Put(SfxStringItem(nWhich, String(SfxResId(STR_QUITAPP))));
580*b1cdbd2cSJim Jagielski 					break;
581*b1cdbd2cSJim Jagielski 				}
582*b1cdbd2cSJim Jagielski 
583*b1cdbd2cSJim Jagielski 				case SID_BASICSTOP:
584*b1cdbd2cSJim Jagielski 					if ( !StarBASIC::IsRunning() )
585*b1cdbd2cSJim Jagielski 						rSet.DisableItem(nWhich);
586*b1cdbd2cSJim Jagielski 					break;
587*b1cdbd2cSJim Jagielski 
588*b1cdbd2cSJim Jagielski 				case SID_HELPTIPS:
589*b1cdbd2cSJim Jagielski 				{
590*b1cdbd2cSJim Jagielski 					rSet.Put( SfxBoolItem( SID_HELPTIPS, Help::IsQuickHelpEnabled() ) );
591*b1cdbd2cSJim Jagielski 				}
592*b1cdbd2cSJim Jagielski 				break;
593*b1cdbd2cSJim Jagielski 				case SID_HELPBALLOONS:
594*b1cdbd2cSJim Jagielski 				{
595*b1cdbd2cSJim Jagielski 					rSet.Put( SfxBoolItem( SID_HELPBALLOONS, Help::IsBalloonHelpEnabled() ) );
596*b1cdbd2cSJim Jagielski 				}
597*b1cdbd2cSJim Jagielski 				break;
598*b1cdbd2cSJim Jagielski 				case SID_HELP_PI:
599*b1cdbd2cSJim Jagielski 				{
600*b1cdbd2cSJim Jagielski 					rSet.Put( SfxBoolItem( SID_HELP_PI, SvtHelpOptions().IsHelpAgentAutoStartMode() ) );
601*b1cdbd2cSJim Jagielski 				}
602*b1cdbd2cSJim Jagielski 				break;
603*b1cdbd2cSJim Jagielski 
604*b1cdbd2cSJim Jagielski 				case SID_EXTENDEDHELP:
605*b1cdbd2cSJim Jagielski 				{
606*b1cdbd2cSJim Jagielski 				}
607*b1cdbd2cSJim Jagielski 				break;
608*b1cdbd2cSJim Jagielski 
609*b1cdbd2cSJim Jagielski 				case SID_CLOSEDOCS:
610*b1cdbd2cSJim Jagielski 				case SID_CLOSEWINS:
611*b1cdbd2cSJim Jagielski 				{
612*b1cdbd2cSJim Jagielski                     Reference < XFramesSupplier > xDesktop ( ::comphelper::getProcessServiceFactory()->createInstance( DEFINE_CONST_UNICODE("com.sun.star.frame.Desktop") ), UNO_QUERY );
613*b1cdbd2cSJim Jagielski                     Reference< XIndexAccess > xTasks( xDesktop->getFrames(), UNO_QUERY );
614*b1cdbd2cSJim Jagielski                     if ( !xTasks.is() || !xTasks->getCount() )
615*b1cdbd2cSJim Jagielski 						rSet.DisableItem(nWhich);
616*b1cdbd2cSJim Jagielski 					break;
617*b1cdbd2cSJim Jagielski 				}
618*b1cdbd2cSJim Jagielski 
619*b1cdbd2cSJim Jagielski 				case SID_SAVEDOCS:
620*b1cdbd2cSJim Jagielski 				{
621*b1cdbd2cSJim Jagielski 					sal_Bool bModified = sal_False;
622*b1cdbd2cSJim Jagielski 					for ( SfxObjectShell *pObjSh = SfxObjectShell::GetFirst();
623*b1cdbd2cSJim Jagielski 						  pObjSh;
624*b1cdbd2cSJim Jagielski 						  pObjSh = SfxObjectShell::GetNext( *pObjSh ) )
625*b1cdbd2cSJim Jagielski 					{
626*b1cdbd2cSJim Jagielski 						if ( pObjSh->IsModified() )
627*b1cdbd2cSJim Jagielski 						{
628*b1cdbd2cSJim Jagielski 							bModified = sal_True;
629*b1cdbd2cSJim Jagielski 							break;
630*b1cdbd2cSJim Jagielski 						}
631*b1cdbd2cSJim Jagielski 					}
632*b1cdbd2cSJim Jagielski 
633*b1cdbd2cSJim Jagielski 					if ( !bModified )
634*b1cdbd2cSJim Jagielski 						rSet.DisableItem( nWhich );
635*b1cdbd2cSJim Jagielski 					break;
636*b1cdbd2cSJim Jagielski 				}
637*b1cdbd2cSJim Jagielski 
638*b1cdbd2cSJim Jagielski                 case SID_SHOW_IME_STATUS_WINDOW:
639*b1cdbd2cSJim Jagielski                     if (pAppData_Impl->m_xImeStatusWindow->canToggle())
640*b1cdbd2cSJim Jagielski                         rSet.Put(SfxBoolItem(
641*b1cdbd2cSJim Jagielski                                      SID_SHOW_IME_STATUS_WINDOW,
642*b1cdbd2cSJim Jagielski                                      pAppData_Impl->m_xImeStatusWindow->
643*b1cdbd2cSJim Jagielski                                          isShowing()));
644*b1cdbd2cSJim Jagielski                     else
645*b1cdbd2cSJim Jagielski                         rSet.DisableItem(SID_SHOW_IME_STATUS_WINDOW);
646*b1cdbd2cSJim Jagielski                     break;
647*b1cdbd2cSJim Jagielski 
648*b1cdbd2cSJim Jagielski                 default:
649*b1cdbd2cSJim Jagielski 					break;
650*b1cdbd2cSJim Jagielski 			}
651*b1cdbd2cSJim Jagielski 		}
652*b1cdbd2cSJim Jagielski 
653*b1cdbd2cSJim Jagielski 		++pRanges;
654*b1cdbd2cSJim Jagielski 	}
655*b1cdbd2cSJim Jagielski }
656*b1cdbd2cSJim Jagielski 
657*b1cdbd2cSJim Jagielski typedef	rtl_uString* (SAL_CALL *basicide_choose_macro)(XModel*, sal_Bool, rtl_uString*);
658*b1cdbd2cSJim Jagielski typedef	void (SAL_CALL *basicide_macro_organizer)( sal_Int16 );
659*b1cdbd2cSJim Jagielski 
660*b1cdbd2cSJim Jagielski #define DOSTRING( x )			   			#x
661*b1cdbd2cSJim Jagielski #define STRING( x )				   			DOSTRING( x )
662*b1cdbd2cSJim Jagielski 
thisModule()663*b1cdbd2cSJim Jagielski extern "C" { static void SAL_CALL thisModule() {} }
664*b1cdbd2cSJim Jagielski 
ChooseMacro(const Reference<XModel> & rxLimitToDocument,sal_Bool bChooseOnly,const::rtl::OUString & rMacroDesc=::rtl::OUString ())665*b1cdbd2cSJim Jagielski ::rtl::OUString ChooseMacro( const Reference< XModel >& rxLimitToDocument, sal_Bool bChooseOnly, const ::rtl::OUString& rMacroDesc = ::rtl::OUString() )
666*b1cdbd2cSJim Jagielski {
667*b1cdbd2cSJim Jagielski     // get basctl dllname
668*b1cdbd2cSJim Jagielski     static ::rtl::OUString aLibName( RTL_CONSTASCII_USTRINGPARAM( SVLIBRARY( "basctl" ) ) );
669*b1cdbd2cSJim Jagielski 
670*b1cdbd2cSJim Jagielski     // load module
671*b1cdbd2cSJim Jagielski 	oslModule handleMod = osl_loadModuleRelative(
672*b1cdbd2cSJim Jagielski         &thisModule, aLibName.pData, 0 );
673*b1cdbd2cSJim Jagielski 
674*b1cdbd2cSJim Jagielski     // get symbol
675*b1cdbd2cSJim Jagielski     ::rtl::OUString aSymbol( RTL_CONSTASCII_USTRINGPARAM( "basicide_choose_macro" ) );
676*b1cdbd2cSJim Jagielski     basicide_choose_macro pSymbol = (basicide_choose_macro) osl_getFunctionSymbol( handleMod, aSymbol.pData );
677*b1cdbd2cSJim Jagielski 
678*b1cdbd2cSJim Jagielski     // call basicide_choose_macro in basctl
679*b1cdbd2cSJim Jagielski     rtl_uString* pScriptURL = pSymbol( rxLimitToDocument.get(), bChooseOnly, rMacroDesc.pData );
680*b1cdbd2cSJim Jagielski     ::rtl::OUString aScriptURL( pScriptURL );
681*b1cdbd2cSJim Jagielski     rtl_uString_release( pScriptURL );
682*b1cdbd2cSJim Jagielski 	return aScriptURL;
683*b1cdbd2cSJim Jagielski }
684*b1cdbd2cSJim Jagielski 
MacroOrganizer(sal_Int16 nTabId)685*b1cdbd2cSJim Jagielski void MacroOrganizer( sal_Int16 nTabId )
686*b1cdbd2cSJim Jagielski {
687*b1cdbd2cSJim Jagielski     // get basctl dllname
688*b1cdbd2cSJim Jagielski     static ::rtl::OUString aLibName( RTL_CONSTASCII_USTRINGPARAM( SVLIBRARY( "basctl" ) ) );
689*b1cdbd2cSJim Jagielski 
690*b1cdbd2cSJim Jagielski     // load module
691*b1cdbd2cSJim Jagielski 	oslModule handleMod = osl_loadModuleRelative(
692*b1cdbd2cSJim Jagielski         &thisModule, aLibName.pData, 0 );
693*b1cdbd2cSJim Jagielski 
694*b1cdbd2cSJim Jagielski     // get symbol
695*b1cdbd2cSJim Jagielski     ::rtl::OUString aSymbol( RTL_CONSTASCII_USTRINGPARAM( "basicide_macro_organizer" ) );
696*b1cdbd2cSJim Jagielski     basicide_macro_organizer pSymbol = (basicide_macro_organizer) osl_getFunctionSymbol( handleMod, aSymbol.pData );
697*b1cdbd2cSJim Jagielski 
698*b1cdbd2cSJim Jagielski     // call basicide_macro_organizer in basctl
699*b1cdbd2cSJim Jagielski     pSymbol( nTabId );
700*b1cdbd2cSJim Jagielski }
701*b1cdbd2cSJim Jagielski 
702*b1cdbd2cSJim Jagielski #define RID_ERRBOX_MODULENOTINSTALLED     (RID_OFA_START + 72)
703*b1cdbd2cSJim Jagielski 
GetOffResManager_Impl()704*b1cdbd2cSJim Jagielski ResMgr* SfxApplication::GetOffResManager_Impl()
705*b1cdbd2cSJim Jagielski {
706*b1cdbd2cSJim Jagielski     if ( !pAppData_Impl->pOfaResMgr )
707*b1cdbd2cSJim Jagielski         pAppData_Impl->pOfaResMgr = CreateResManager( "ofa");
708*b1cdbd2cSJim Jagielski     return pAppData_Impl->pOfaResMgr;
709*b1cdbd2cSJim Jagielski }
710*b1cdbd2cSJim Jagielski 
711*b1cdbd2cSJim Jagielski namespace
712*b1cdbd2cSJim Jagielski {
lcl_getDialogParent(const Reference<XFrame> & _rxFrame,Window * _pFallback)713*b1cdbd2cSJim Jagielski     Window* lcl_getDialogParent( const Reference< XFrame >& _rxFrame, Window* _pFallback )
714*b1cdbd2cSJim Jagielski     {
715*b1cdbd2cSJim Jagielski         if ( !_rxFrame.is() )
716*b1cdbd2cSJim Jagielski             return _pFallback;
717*b1cdbd2cSJim Jagielski 
718*b1cdbd2cSJim Jagielski         try
719*b1cdbd2cSJim Jagielski         {
720*b1cdbd2cSJim Jagielski             Reference< awt::XWindow > xContainerWindow( _rxFrame->getContainerWindow(), UNO_SET_THROW );
721*b1cdbd2cSJim Jagielski             Window* pWindow = VCLUnoHelper::GetWindow( xContainerWindow );
722*b1cdbd2cSJim Jagielski             OSL_ENSURE( pWindow, "lcl_getDialogParent: cool, somebody implemented a VCL-less toolkit!" );
723*b1cdbd2cSJim Jagielski 
724*b1cdbd2cSJim Jagielski             if ( pWindow )
725*b1cdbd2cSJim Jagielski                 return pWindow->GetSystemWindow();
726*b1cdbd2cSJim Jagielski         }
727*b1cdbd2cSJim Jagielski         catch( const Exception& )
728*b1cdbd2cSJim Jagielski         {
729*b1cdbd2cSJim Jagielski         	DBG_UNHANDLED_EXCEPTION();
730*b1cdbd2cSJim Jagielski         }
731*b1cdbd2cSJim Jagielski         return _pFallback;
732*b1cdbd2cSJim Jagielski     }
733*b1cdbd2cSJim Jagielski 
lcl_getBasicIDEServiceName()734*b1cdbd2cSJim Jagielski     const ::rtl::OUString& lcl_getBasicIDEServiceName()
735*b1cdbd2cSJim Jagielski     {
736*b1cdbd2cSJim Jagielski         static const ::rtl::OUString s_sBasicName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.script.BasicIDE" ) );
737*b1cdbd2cSJim Jagielski         return s_sBasicName;
738*b1cdbd2cSJim Jagielski     }
739*b1cdbd2cSJim Jagielski 
lcl_getBasicIDEViewFrame(SfxObjectShell * i_pBasicIDE)740*b1cdbd2cSJim Jagielski     SfxViewFrame* lcl_getBasicIDEViewFrame( SfxObjectShell* i_pBasicIDE )
741*b1cdbd2cSJim Jagielski     {
742*b1cdbd2cSJim Jagielski         SfxViewFrame* pView = SfxViewFrame::GetFirst( i_pBasicIDE );
743*b1cdbd2cSJim Jagielski         while ( pView )
744*b1cdbd2cSJim Jagielski         {
745*b1cdbd2cSJim Jagielski             if ( pView->GetObjectShell()->GetFactory().GetDocumentServiceName() == lcl_getBasicIDEServiceName() )
746*b1cdbd2cSJim Jagielski                 break;
747*b1cdbd2cSJim Jagielski             pView = SfxViewFrame::GetNext( *pView, i_pBasicIDE );
748*b1cdbd2cSJim Jagielski         }
749*b1cdbd2cSJim Jagielski         return pView;
750*b1cdbd2cSJim Jagielski     }
lcl_findStartModuleFrame(const::comphelper::ComponentContext & i_rContext)751*b1cdbd2cSJim Jagielski     Reference< XFrame > lcl_findStartModuleFrame( const ::comphelper::ComponentContext& i_rContext )
752*b1cdbd2cSJim Jagielski     {
753*b1cdbd2cSJim Jagielski         try
754*b1cdbd2cSJim Jagielski         {
755*b1cdbd2cSJim Jagielski             Reference < XFramesSupplier > xSupplier( i_rContext.createComponent( "com.sun.star.frame.Desktop" ), UNO_QUERY_THROW );
756*b1cdbd2cSJim Jagielski             Reference < XIndexAccess > xContainer( xSupplier->getFrames(), UNO_QUERY_THROW );
757*b1cdbd2cSJim Jagielski 
758*b1cdbd2cSJim Jagielski             Reference< XModuleManager > xCheck( i_rContext.createComponent( "com.sun.star.frame.ModuleManager" ), UNO_QUERY_THROW );
759*b1cdbd2cSJim Jagielski 
760*b1cdbd2cSJim Jagielski             sal_Int32 nCount = xContainer->getCount();
761*b1cdbd2cSJim Jagielski             for ( sal_Int32 i=0; i<nCount; ++i )
762*b1cdbd2cSJim Jagielski             {
763*b1cdbd2cSJim Jagielski                 try
764*b1cdbd2cSJim Jagielski                 {
765*b1cdbd2cSJim Jagielski                     Reference < XFrame > xFrame( xContainer->getByIndex(i), UNO_QUERY_THROW );
766*b1cdbd2cSJim Jagielski                     ::rtl::OUString sModule = xCheck->identify( xFrame );
767*b1cdbd2cSJim Jagielski                     if ( sModule.equalsAscii( "com.sun.star.frame.StartModule" ) )
768*b1cdbd2cSJim Jagielski                         return xFrame;
769*b1cdbd2cSJim Jagielski                 }
770*b1cdbd2cSJim Jagielski                 catch( const UnknownModuleException& )
771*b1cdbd2cSJim Jagielski                 {
772*b1cdbd2cSJim Jagielski                     // silence
773*b1cdbd2cSJim Jagielski                 }
774*b1cdbd2cSJim Jagielski                 catch(const Exception&)
775*b1cdbd2cSJim Jagielski                 {
776*b1cdbd2cSJim Jagielski                     // re-throw, caught below
777*b1cdbd2cSJim Jagielski                     throw;
778*b1cdbd2cSJim Jagielski                 }
779*b1cdbd2cSJim Jagielski             }
780*b1cdbd2cSJim Jagielski         }
781*b1cdbd2cSJim Jagielski         catch( const Exception& )
782*b1cdbd2cSJim Jagielski         {
783*b1cdbd2cSJim Jagielski                DBG_UNHANDLED_EXCEPTION();
784*b1cdbd2cSJim Jagielski         }
785*b1cdbd2cSJim Jagielski         return NULL;
786*b1cdbd2cSJim Jagielski     }
787*b1cdbd2cSJim Jagielski }
788*b1cdbd2cSJim Jagielski 
getConfigurationStringValue(const::rtl::OUString & rPackage,const::rtl::OUString & rRelPath,const::rtl::OUString & rKey,const::rtl::OUString & rDefaultValue)789*b1cdbd2cSJim Jagielski static ::rtl::OUString getConfigurationStringValue(
790*b1cdbd2cSJim Jagielski     const ::rtl::OUString& rPackage,
791*b1cdbd2cSJim Jagielski     const ::rtl::OUString& rRelPath,
792*b1cdbd2cSJim Jagielski     const ::rtl::OUString& rKey,
793*b1cdbd2cSJim Jagielski     const ::rtl::OUString& rDefaultValue )
794*b1cdbd2cSJim Jagielski {
795*b1cdbd2cSJim Jagielski     ::rtl::OUString aDefVal( rDefaultValue );
796*b1cdbd2cSJim Jagielski 
797*b1cdbd2cSJim Jagielski     try
798*b1cdbd2cSJim Jagielski     {
799*b1cdbd2cSJim Jagielski         ::comphelper::ConfigurationHelper::readDirectKey(
800*b1cdbd2cSJim Jagielski             comphelper::getProcessServiceFactory(),
801*b1cdbd2cSJim Jagielski             rPackage,
802*b1cdbd2cSJim Jagielski             rRelPath,
803*b1cdbd2cSJim Jagielski             rKey,
804*b1cdbd2cSJim Jagielski             ::comphelper::ConfigurationHelper::E_READONLY) >>= aDefVal;
805*b1cdbd2cSJim Jagielski     }
806*b1cdbd2cSJim Jagielski     catch(const com::sun::star::uno::RuntimeException& exRun)
807*b1cdbd2cSJim Jagielski     { throw exRun; }
808*b1cdbd2cSJim Jagielski     catch(const com::sun::star::uno::Exception&)
809*b1cdbd2cSJim Jagielski     {}
810*b1cdbd2cSJim Jagielski 
811*b1cdbd2cSJim Jagielski     return aDefVal;
812*b1cdbd2cSJim Jagielski }
813*b1cdbd2cSJim Jagielski 
OfaExec_Impl(SfxRequest & rReq)814*b1cdbd2cSJim Jagielski void SfxApplication::OfaExec_Impl( SfxRequest& rReq )
815*b1cdbd2cSJim Jagielski {
816*b1cdbd2cSJim Jagielski 	DBG_MEMTEST();
817*b1cdbd2cSJim Jagielski 	switch ( rReq.GetSlot() )
818*b1cdbd2cSJim Jagielski 	{
819*b1cdbd2cSJim Jagielski 		case SID_OPTIONS_TREEDIALOG:
820*b1cdbd2cSJim Jagielski 		{
821*b1cdbd2cSJim Jagielski             String sPageURL;
822*b1cdbd2cSJim Jagielski             SFX_REQUEST_ARG( rReq, pURLItem, SfxStringItem, SID_OPTIONS_PAGEURL, sal_False );
823*b1cdbd2cSJim Jagielski             if ( pURLItem )
824*b1cdbd2cSJim Jagielski                 sPageURL = pURLItem->GetValue();
825*b1cdbd2cSJim Jagielski             const SfxItemSet* pArgs = rReq.GetInternalArgs_Impl();
826*b1cdbd2cSJim Jagielski             const SfxPoolItem* pItem = NULL;
827*b1cdbd2cSJim Jagielski             Reference < XFrame > xFrame;
828*b1cdbd2cSJim Jagielski             if ( pArgs && pArgs->GetItemState( SID_FILLFRAME, sal_False, &pItem ) == SFX_ITEM_SET )
829*b1cdbd2cSJim Jagielski             {
830*b1cdbd2cSJim Jagielski                 OSL_ENSURE( pItem->ISA( SfxUnoFrameItem ), "SfxApplication::OfaExec_Impl: XFrames are to be transported via SfxUnoFrameItem by now!" );
831*b1cdbd2cSJim Jagielski                 xFrame = static_cast< const SfxUnoFrameItem*>( pItem )->GetFrame();
832*b1cdbd2cSJim Jagielski             }
833*b1cdbd2cSJim Jagielski 			SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
834*b1cdbd2cSJim Jagielski 			if ( pFact )
835*b1cdbd2cSJim Jagielski 			{
836*b1cdbd2cSJim Jagielski                 VclAbstractDialog* pDlg =
837*b1cdbd2cSJim Jagielski                     pFact->CreateFrameDialog( NULL, xFrame, rReq.GetSlot(), sPageURL );
838*b1cdbd2cSJim Jagielski 			  	pDlg->Execute();
839*b1cdbd2cSJim Jagielski 			  	delete pDlg;
840*b1cdbd2cSJim Jagielski 				SfxViewFrame* pView = SfxViewFrame::GetFirst();
841*b1cdbd2cSJim Jagielski 				while ( pView )
842*b1cdbd2cSJim Jagielski 				{
843*b1cdbd2cSJim Jagielski 					pView->GetBindings().InvalidateAll(sal_False);
844*b1cdbd2cSJim Jagielski 					pView = SfxViewFrame::GetNext( *pView );
845*b1cdbd2cSJim Jagielski 				}
846*b1cdbd2cSJim Jagielski 			}
847*b1cdbd2cSJim Jagielski 			break;
848*b1cdbd2cSJim Jagielski 		}
849*b1cdbd2cSJim Jagielski 
850*b1cdbd2cSJim Jagielski         case SID_MORE_DICTIONARIES:
851*b1cdbd2cSJim Jagielski         {
852*b1cdbd2cSJim Jagielski             try
853*b1cdbd2cSJim Jagielski             {
854*b1cdbd2cSJim Jagielski                 uno::Reference< css::system::XSystemShellExecute > xSystemShell(
855*b1cdbd2cSJim Jagielski                     css::system::SystemShellExecute::create(
856*b1cdbd2cSJim Jagielski                         ::comphelper::getProcessComponentContext() ) );
857*b1cdbd2cSJim Jagielski 
858*b1cdbd2cSJim Jagielski                 // read repository URL from configuration
859*b1cdbd2cSJim Jagielski                 ::rtl::OUString sTemplRepoURL =
860*b1cdbd2cSJim Jagielski                     getConfigurationStringValue(
861*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii("org.openoffice.Office.Common"),
862*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii("Dictionaries"),
863*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii("RepositoryURL"),
864*b1cdbd2cSJim Jagielski                         ::rtl::OUString());
865*b1cdbd2cSJim Jagielski 
866*b1cdbd2cSJim Jagielski                 if ( xSystemShell.is() && sTemplRepoURL.getLength() > 0 )
867*b1cdbd2cSJim Jagielski                 {
868*b1cdbd2cSJim Jagielski                     ::rtl::OUStringBuffer aURLBuf( sTemplRepoURL );
869*b1cdbd2cSJim Jagielski                     aURLBuf.appendAscii( "?" );
870*b1cdbd2cSJim Jagielski                     aURLBuf.appendAscii( "lang=" );
871*b1cdbd2cSJim Jagielski 
872*b1cdbd2cSJim Jagielski                     // read locale from configuration
873*b1cdbd2cSJim Jagielski                     ::rtl::OUString sLocale = getConfigurationStringValue(
874*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii("org.openoffice.Setup"),
875*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii("L10N"),
876*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii("ooLocale"),
877*b1cdbd2cSJim Jagielski                         ::rtl::OUString::createFromAscii("en-US"));
878*b1cdbd2cSJim Jagielski 
879*b1cdbd2cSJim Jagielski                     aURLBuf.append( sLocale );
880*b1cdbd2cSJim Jagielski                     xSystemShell->execute(
881*b1cdbd2cSJim Jagielski                         aURLBuf.makeStringAndClear(),
882*b1cdbd2cSJim Jagielski                         ::rtl::OUString(),
883*b1cdbd2cSJim Jagielski                         css::system::SystemShellExecuteFlags::DEFAULTS );
884*b1cdbd2cSJim Jagielski                 }
885*b1cdbd2cSJim Jagielski             }
886*b1cdbd2cSJim Jagielski             catch( const ::com::sun::star::uno::Exception& )
887*b1cdbd2cSJim Jagielski             {
888*b1cdbd2cSJim Jagielski                 DBG_ERRORFILE( "SfxApplication::OfaExec_Impl(SID_MORE_DICTIONARIES): caught an exception!" );
889*b1cdbd2cSJim Jagielski             }
890*b1cdbd2cSJim Jagielski             break;
891*b1cdbd2cSJim Jagielski         }
892*b1cdbd2cSJim Jagielski 
893*b1cdbd2cSJim Jagielski 		case SID_BASICIDE_APPEAR:
894*b1cdbd2cSJim Jagielski 		{
895*b1cdbd2cSJim Jagielski             SfxViewFrame* pView = lcl_getBasicIDEViewFrame( NULL );
896*b1cdbd2cSJim Jagielski             if ( !pView )
897*b1cdbd2cSJim Jagielski             {
898*b1cdbd2cSJim Jagielski                 SfxObjectShell* pBasicIDE = SfxObjectShell::CreateObject( lcl_getBasicIDEServiceName() );
899*b1cdbd2cSJim Jagielski                 pBasicIDE->DoInitNew( 0 );
900*b1cdbd2cSJim Jagielski                 pBasicIDE->SetModified( sal_False );
901*b1cdbd2cSJim Jagielski                 try
902*b1cdbd2cSJim Jagielski                 {
903*b1cdbd2cSJim Jagielski                     // load the Basic IDE via direct access to the SFX frame loader. A generic loadComponentFromURL
904*b1cdbd2cSJim Jagielski                     // (which could be done via SfxViewFrame::LoadDocumentIntoFrame) is not feasible here, since the Basic IDE
905*b1cdbd2cSJim Jagielski                     // does not really play nice with the framework's concept. For instance, it is a "singleton document",
906*b1cdbd2cSJim Jagielski                     // which conflicts, at the latest, with the framework's concept of loading into _blank frames.
907*b1cdbd2cSJim Jagielski                     // So, since we know that our frame loader can handle it, we skip the generic framework loader
908*b1cdbd2cSJim Jagielski                     // mechanism, and the type detection (which doesn't know about the Basic IDE).
909*b1cdbd2cSJim Jagielski                     ::comphelper::ComponentContext aContext( ::comphelper::getProcessServiceFactory() );
910*b1cdbd2cSJim Jagielski                     Reference< XSynchronousFrameLoader > xLoader( aContext.createComponent(
911*b1cdbd2cSJim Jagielski                         SfxFrameLoader_Impl::impl_getStaticImplementationName() ), UNO_QUERY_THROW );
912*b1cdbd2cSJim Jagielski                     ::comphelper::NamedValueCollection aLoadArgs;
913*b1cdbd2cSJim Jagielski                     aLoadArgs.put( "Model", pBasicIDE->GetModel() );
914*b1cdbd2cSJim Jagielski                     aLoadArgs.put( "URL", ::rtl::OUString( RTL_CONSTASCII_USTRINGPARAM( "private:factory/sbasic" ) ) );
915*b1cdbd2cSJim Jagielski 
916*b1cdbd2cSJim Jagielski                     Reference< XFrame > xTargetFrame( lcl_findStartModuleFrame( aContext ) );
917*b1cdbd2cSJim Jagielski                     if ( !xTargetFrame.is() )
918*b1cdbd2cSJim Jagielski                         xTargetFrame = SfxFrame::CreateBlankFrame();
919*b1cdbd2cSJim Jagielski                     ENSURE_OR_THROW( xTargetFrame.is(), "could not obtain a frameto load the Basic IDE into!" );
920*b1cdbd2cSJim Jagielski 
921*b1cdbd2cSJim Jagielski                     xLoader->load( aLoadArgs.getPropertyValues(), xTargetFrame );
922*b1cdbd2cSJim Jagielski                 }
923*b1cdbd2cSJim Jagielski                 catch( const Exception& )
924*b1cdbd2cSJim Jagielski                 {
925*b1cdbd2cSJim Jagielski                 	DBG_UNHANDLED_EXCEPTION();
926*b1cdbd2cSJim Jagielski                 }
927*b1cdbd2cSJim Jagielski 
928*b1cdbd2cSJim Jagielski                 pView = lcl_getBasicIDEViewFrame( pBasicIDE );
929*b1cdbd2cSJim Jagielski                 if ( pView )
930*b1cdbd2cSJim Jagielski                     pView->SetName( String( RTL_CONSTASCII_USTRINGPARAM( "BASIC:1" ) ) );
931*b1cdbd2cSJim Jagielski             }
932*b1cdbd2cSJim Jagielski 
933*b1cdbd2cSJim Jagielski             if ( pView )
934*b1cdbd2cSJim Jagielski                 pView->GetFrame().Appear();
935*b1cdbd2cSJim Jagielski 
936*b1cdbd2cSJim Jagielski             const SfxItemSet* pArgs = rReq.GetArgs();
937*b1cdbd2cSJim Jagielski             if ( pArgs && pView )
938*b1cdbd2cSJim Jagielski             {
939*b1cdbd2cSJim Jagielski                 SfxViewShell* pViewShell = pView->GetViewShell();
940*b1cdbd2cSJim Jagielski                 SfxObjectShell* pObjShell = pView->GetObjectShell();
941*b1cdbd2cSJim Jagielski                 if ( pViewShell && pObjShell )
942*b1cdbd2cSJim Jagielski                 {
943*b1cdbd2cSJim Jagielski                     SfxRequest aReq( SID_BASICIDE_SHOWWINDOW, SFX_CALLMODE_SYNCHRON, pObjShell->GetPool() );
944*b1cdbd2cSJim Jagielski                     aReq.SetArgs( *pArgs );
945*b1cdbd2cSJim Jagielski                     pViewShell->ExecuteSlot( aReq );
946*b1cdbd2cSJim Jagielski                 }
947*b1cdbd2cSJim Jagielski             }
948*b1cdbd2cSJim Jagielski 
949*b1cdbd2cSJim Jagielski 			rReq.Done();
950*b1cdbd2cSJim Jagielski 		}
951*b1cdbd2cSJim Jagielski 		break;
952*b1cdbd2cSJim Jagielski 
953*b1cdbd2cSJim Jagielski 		case SID_BASICCHOOSER:
954*b1cdbd2cSJim Jagielski 		{
955*b1cdbd2cSJim Jagielski 			const SfxItemSet* pArgs = rReq.GetArgs();
956*b1cdbd2cSJim Jagielski 			const SfxPoolItem* pItem;
957*b1cdbd2cSJim Jagielski             sal_Bool bChooseOnly = sal_False;
958*b1cdbd2cSJim Jagielski             Reference< XModel > xLimitToModel;
959*b1cdbd2cSJim Jagielski             if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_RECORDMACRO, sal_False, &pItem) )
960*b1cdbd2cSJim Jagielski             {
961*b1cdbd2cSJim Jagielski                 sal_Bool bRecord = ((SfxBoolItem*)pItem)->GetValue();
962*b1cdbd2cSJim Jagielski                 if ( bRecord )
963*b1cdbd2cSJim Jagielski                 {
964*b1cdbd2cSJim Jagielski                     // !Hack
965*b1cdbd2cSJim Jagielski                     bChooseOnly = sal_False;
966*b1cdbd2cSJim Jagielski                     SfxObjectShell* pCurrentShell = SfxObjectShell::Current();
967*b1cdbd2cSJim Jagielski                     OSL_ENSURE( pCurrentShell, "macro recording outside an SFX document?" );
968*b1cdbd2cSJim Jagielski                     if ( pCurrentShell )
969*b1cdbd2cSJim Jagielski                         xLimitToModel = pCurrentShell->GetModel();
970*b1cdbd2cSJim Jagielski                 }
971*b1cdbd2cSJim Jagielski             }
972*b1cdbd2cSJim Jagielski 
973*b1cdbd2cSJim Jagielski             rReq.SetReturnValue( SfxStringItem( rReq.GetSlot(), ChooseMacro( xLimitToModel, bChooseOnly ) ) );
974*b1cdbd2cSJim Jagielski 			rReq.Done();
975*b1cdbd2cSJim Jagielski 		}
976*b1cdbd2cSJim Jagielski 		break;
977*b1cdbd2cSJim Jagielski 
978*b1cdbd2cSJim Jagielski 		case SID_MACROORGANIZER:
979*b1cdbd2cSJim Jagielski 		{
980*b1cdbd2cSJim Jagielski             OSL_TRACE("handling SID_MACROORGANIZER");
981*b1cdbd2cSJim Jagielski 			const SfxItemSet* pArgs = rReq.GetArgs();
982*b1cdbd2cSJim Jagielski 			const SfxPoolItem* pItem;
983*b1cdbd2cSJim Jagielski             sal_Int16 nTabId = 0;
984*b1cdbd2cSJim Jagielski             if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_MACROORGANIZER, sal_False, &pItem) )
985*b1cdbd2cSJim Jagielski             {
986*b1cdbd2cSJim Jagielski                 nTabId = ((SfxUInt16Item*)pItem)->GetValue();
987*b1cdbd2cSJim Jagielski             }
988*b1cdbd2cSJim Jagielski 
989*b1cdbd2cSJim Jagielski             SfxApplication::MacroOrganizer( nTabId );
990*b1cdbd2cSJim Jagielski 			rReq.Done();
991*b1cdbd2cSJim Jagielski 		}
992*b1cdbd2cSJim Jagielski 		break;
993*b1cdbd2cSJim Jagielski 
994*b1cdbd2cSJim Jagielski         case SID_RUNMACRO:
995*b1cdbd2cSJim Jagielski         {
996*b1cdbd2cSJim Jagielski             SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
997*b1cdbd2cSJim Jagielski             OSL_TRACE("SfxApplication::OfaExec_Impl: case ScriptOrg");
998*b1cdbd2cSJim Jagielski 
999*b1cdbd2cSJim Jagielski             Reference< XFrame > xFrame;
1000*b1cdbd2cSJim Jagielski 			const SfxItemSet* pIntSet = rReq.GetInternalArgs_Impl();
1001*b1cdbd2cSJim Jagielski             SFX_ITEMSET_ARG( pIntSet, pFrameItem, SfxUnoFrameItem, SID_FILLFRAME, sal_False );
1002*b1cdbd2cSJim Jagielski             if ( pFrameItem )
1003*b1cdbd2cSJim Jagielski                 xFrame = pFrameItem->GetFrame();
1004*b1cdbd2cSJim Jagielski 
1005*b1cdbd2cSJim Jagielski             if ( !xFrame.is() )
1006*b1cdbd2cSJim Jagielski             {
1007*b1cdbd2cSJim Jagielski                 const SfxViewFrame* pViewFrame = SfxViewFrame::Current();
1008*b1cdbd2cSJim Jagielski                 if ( pViewFrame )
1009*b1cdbd2cSJim Jagielski                     xFrame = pViewFrame->GetFrame().GetFrameInterface();
1010*b1cdbd2cSJim Jagielski             }
1011*b1cdbd2cSJim Jagielski 
1012*b1cdbd2cSJim Jagielski             do  // artificial loop for flow control
1013*b1cdbd2cSJim Jagielski             {
1014*b1cdbd2cSJim Jagielski                 AbstractScriptSelectorDialog* pDlg = pFact->CreateScriptSelectorDialog(
1015*b1cdbd2cSJim Jagielski                     lcl_getDialogParent( xFrame, GetTopWindow() ), sal_False, xFrame );
1016*b1cdbd2cSJim Jagielski                 OSL_ENSURE( pDlg, "SfxApplication::OfaExec_Impl( SID_RUNMACRO ): no dialog!" );
1017*b1cdbd2cSJim Jagielski                 if ( !pDlg )
1018*b1cdbd2cSJim Jagielski                     break;
1019*b1cdbd2cSJim Jagielski                 pDlg->SetRunLabel();
1020*b1cdbd2cSJim Jagielski 
1021*b1cdbd2cSJim Jagielski                 short nDialogResult = pDlg->Execute();
1022*b1cdbd2cSJim Jagielski                 if ( !nDialogResult )
1023*b1cdbd2cSJim Jagielski                     break;
1024*b1cdbd2cSJim Jagielski 
1025*b1cdbd2cSJim Jagielski                 Sequence< Any > args;
1026*b1cdbd2cSJim Jagielski                 Sequence< sal_Int16 > outIndex;
1027*b1cdbd2cSJim Jagielski                 Sequence< Any > outArgs;
1028*b1cdbd2cSJim Jagielski                 Any ret;
1029*b1cdbd2cSJim Jagielski 
1030*b1cdbd2cSJim Jagielski                 Reference< XInterface > xScriptContext;
1031*b1cdbd2cSJim Jagielski 
1032*b1cdbd2cSJim Jagielski                 Reference< XController > xController;
1033*b1cdbd2cSJim Jagielski                 if ( xFrame.is() )
1034*b1cdbd2cSJim Jagielski                     xController = xFrame->getController();
1035*b1cdbd2cSJim Jagielski                 if ( xController.is() )
1036*b1cdbd2cSJim Jagielski                     xScriptContext = xController->getModel();
1037*b1cdbd2cSJim Jagielski                 if ( !xScriptContext.is() )
1038*b1cdbd2cSJim Jagielski                     xScriptContext = xController;
1039*b1cdbd2cSJim Jagielski 
1040*b1cdbd2cSJim Jagielski                 SfxObjectShell::CallXScript( xScriptContext, pDlg->GetScriptURL(), args, ret, outIndex, outArgs );
1041*b1cdbd2cSJim Jagielski             }
1042*b1cdbd2cSJim Jagielski             while ( false );
1043*b1cdbd2cSJim Jagielski 			rReq.Done();
1044*b1cdbd2cSJim Jagielski 		}
1045*b1cdbd2cSJim Jagielski         break;
1046*b1cdbd2cSJim Jagielski 
1047*b1cdbd2cSJim Jagielski         case SID_SCRIPTORGANIZER:
1048*b1cdbd2cSJim Jagielski         {
1049*b1cdbd2cSJim Jagielski             SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
1050*b1cdbd2cSJim Jagielski             OSL_TRACE("SfxApplication::OfaExec_Impl: case ScriptOrg");
1051*b1cdbd2cSJim Jagielski 			const SfxItemSet* pArgs = rReq.GetArgs();
1052*b1cdbd2cSJim Jagielski 			const SfxPoolItem* pItem;
1053*b1cdbd2cSJim Jagielski             String aLanguage;
1054*b1cdbd2cSJim Jagielski             if(pArgs && SFX_ITEM_SET == pArgs->GetItemState(SID_SCRIPTORGANIZER, sal_False, &pItem) )
1055*b1cdbd2cSJim Jagielski             {
1056*b1cdbd2cSJim Jagielski                 aLanguage = ((SfxScriptOrganizerItem*)pItem)->getLanguage();
1057*b1cdbd2cSJim Jagielski             }
1058*b1cdbd2cSJim Jagielski 
1059*b1cdbd2cSJim Jagielski             ::rtl::OUString aLang( aLanguage );
1060*b1cdbd2cSJim Jagielski             OSL_TRACE("SfxApplication::OfaExec_Impl: about to create dialog for: %s", ::rtl::OUStringToOString( aLang , RTL_TEXTENCODING_ASCII_US ).pData->buffer);
1061*b1cdbd2cSJim Jagielski             // not sure about the Window*
1062*b1cdbd2cSJim Jagielski             VclAbstractDialog* pDlg = pFact->CreateSvxScriptOrgDialog( GetTopWindow(), aLanguage );
1063*b1cdbd2cSJim Jagielski             if( pDlg )
1064*b1cdbd2cSJim Jagielski             {
1065*b1cdbd2cSJim Jagielski                 pDlg->Execute();
1066*b1cdbd2cSJim Jagielski             }
1067*b1cdbd2cSJim Jagielski             else
1068*b1cdbd2cSJim Jagielski             {
1069*b1cdbd2cSJim Jagielski                 OSL_TRACE("no dialog!!!");
1070*b1cdbd2cSJim Jagielski             }
1071*b1cdbd2cSJim Jagielski 			rReq.Done();
1072*b1cdbd2cSJim Jagielski 		}
1073*b1cdbd2cSJim Jagielski 		break;
1074*b1cdbd2cSJim Jagielski 
1075*b1cdbd2cSJim Jagielski 		case SID_OFFICE_CHECK_PLZ:
1076*b1cdbd2cSJim Jagielski 		{
1077*b1cdbd2cSJim Jagielski 			sal_Bool bRet = sal_False;
1078*b1cdbd2cSJim Jagielski 			SFX_REQUEST_ARG(rReq, pStringItem, SfxStringItem, rReq.GetSlot(), sal_False);
1079*b1cdbd2cSJim Jagielski 
1080*b1cdbd2cSJim Jagielski 			if ( pStringItem )
1081*b1cdbd2cSJim Jagielski 			{
1082*b1cdbd2cSJim Jagielski 				String aPLZ = pStringItem->GetValue();
1083*b1cdbd2cSJim Jagielski 				bRet = sal_True /*!!!SfxIniManager::CheckPLZ( aPLZ )*/;
1084*b1cdbd2cSJim Jagielski 			}
1085*b1cdbd2cSJim Jagielski 			else
1086*b1cdbd2cSJim Jagielski 				SbxBase::SetError( SbxERR_WRONG_ARGS );
1087*b1cdbd2cSJim Jagielski 			rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bRet ) );
1088*b1cdbd2cSJim Jagielski 		}
1089*b1cdbd2cSJim Jagielski 		break;
1090*b1cdbd2cSJim Jagielski 
1091*b1cdbd2cSJim Jagielski         case SID_AUTO_CORRECT_DLG:
1092*b1cdbd2cSJim Jagielski 		{
1093*b1cdbd2cSJim Jagielski 			SfxAbstractDialogFactory* pFact = SfxAbstractDialogFactory::Create();
1094*b1cdbd2cSJim Jagielski 			if ( pFact )
1095*b1cdbd2cSJim Jagielski 			{
1096*b1cdbd2cSJim Jagielski 				SfxItemSet aSet(GetPool(), SID_AUTO_CORRECT_DLG, SID_AUTO_CORRECT_DLG);
1097*b1cdbd2cSJim Jagielski 				const SfxPoolItem* pItem=NULL;
1098*b1cdbd2cSJim Jagielski 				const SfxItemSet* pSet = rReq.GetArgs();
1099*b1cdbd2cSJim Jagielski 				SfxItemPool* pSetPool = pSet ? pSet->GetPool() : NULL;
1100*b1cdbd2cSJim Jagielski 				if ( pSet && pSet->GetItemState( pSetPool->GetWhich( SID_AUTO_CORRECT_DLG ), sal_False, &pItem ) == SFX_ITEM_SET )
1101*b1cdbd2cSJim Jagielski 					aSet.Put( *pItem );
1102*b1cdbd2cSJim Jagielski 
1103*b1cdbd2cSJim Jagielski 			  	SfxAbstractTabDialog* pDlg = pFact->CreateTabDialog( RID_OFA_AUTOCORR_DLG, NULL, &aSet, NULL );
1104*b1cdbd2cSJim Jagielski 			  	pDlg->Execute();
1105*b1cdbd2cSJim Jagielski 			  	delete pDlg;
1106*b1cdbd2cSJim Jagielski 			}
1107*b1cdbd2cSJim Jagielski 
1108*b1cdbd2cSJim Jagielski 			break;
1109*b1cdbd2cSJim Jagielski 		}
1110*b1cdbd2cSJim Jagielski 
1111*b1cdbd2cSJim Jagielski 		case SID_SD_AUTOPILOT :
1112*b1cdbd2cSJim Jagielski 		case SID_NEWSD :
1113*b1cdbd2cSJim Jagielski 		{
1114*b1cdbd2cSJim Jagielski 			SvtModuleOptions aModuleOpt;
1115*b1cdbd2cSJim Jagielski 			if ( !aModuleOpt.IsImpress() )
1116*b1cdbd2cSJim Jagielski 			{
1117*b1cdbd2cSJim Jagielski 				ErrorBox( 0, ResId( RID_ERRBOX_MODULENOTINSTALLED, *GetOffResManager_Impl() )).Execute();
1118*b1cdbd2cSJim Jagielski 				return;
1119*b1cdbd2cSJim Jagielski 			}
1120*b1cdbd2cSJim Jagielski 
1121*b1cdbd2cSJim Jagielski 			Reference< com::sun::star::lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory();
1122*b1cdbd2cSJim Jagielski 			Reference< com::sun::star::frame::XDispatchProvider > xProv(
1123*b1cdbd2cSJim Jagielski 				xORB->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.drawing.ModuleDispatcher")), UNO_QUERY );
1124*b1cdbd2cSJim Jagielski 
1125*b1cdbd2cSJim Jagielski 			if ( xProv.is() )
1126*b1cdbd2cSJim Jagielski 			{
1127*b1cdbd2cSJim Jagielski 				::rtl::OUString aCmd = ::rtl::OUString::createFromAscii( GetInterface()->GetSlot( rReq.GetSlot() )->GetUnoName() );
1128*b1cdbd2cSJim Jagielski 				Reference< com::sun::star::frame::XDispatchHelper > xHelper(
1129*b1cdbd2cSJim Jagielski 					xORB->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.frame.DispatchHelper")), UNO_QUERY );
1130*b1cdbd2cSJim Jagielski 				if ( xHelper.is() )
1131*b1cdbd2cSJim Jagielski 				{
1132*b1cdbd2cSJim Jagielski 					Sequence < com::sun::star::beans::PropertyValue > aSeq;
1133*b1cdbd2cSJim Jagielski 					if ( rReq.GetArgs() )
1134*b1cdbd2cSJim Jagielski 						TransformItems( rReq.GetSlot(), *rReq.GetArgs(), aSeq );
1135*b1cdbd2cSJim Jagielski 					Any aResult = xHelper->executeDispatch( xProv, aCmd, ::rtl::OUString(), 0, aSeq );
1136*b1cdbd2cSJim Jagielski 					::com::sun::star::frame::DispatchResultEvent aEvent;
1137*b1cdbd2cSJim Jagielski 					sal_Bool bSuccess = (
1138*b1cdbd2cSJim Jagielski 										 (aResult >>= aEvent) &&
1139*b1cdbd2cSJim Jagielski                                          (aEvent.State == ::com::sun::star::frame::DispatchResultState::SUCCESS)
1140*b1cdbd2cSJim Jagielski 										);
1141*b1cdbd2cSJim Jagielski 					rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bSuccess ) );
1142*b1cdbd2cSJim Jagielski 				}
1143*b1cdbd2cSJim Jagielski 			}
1144*b1cdbd2cSJim Jagielski 		}
1145*b1cdbd2cSJim Jagielski 		break;
1146*b1cdbd2cSJim Jagielski 
1147*b1cdbd2cSJim Jagielski         case FN_LABEL :
1148*b1cdbd2cSJim Jagielski         case FN_BUSINESS_CARD :
1149*b1cdbd2cSJim Jagielski         case FN_XFORMS_INIT :
1150*b1cdbd2cSJim Jagielski 		{
1151*b1cdbd2cSJim Jagielski 			Reference< com::sun::star::lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory();
1152*b1cdbd2cSJim Jagielski 			Reference< com::sun::star::frame::XDispatchProvider > xProv(
1153*b1cdbd2cSJim Jagielski 				xORB->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.text.ModuleDispatcher")), UNO_QUERY );
1154*b1cdbd2cSJim Jagielski 
1155*b1cdbd2cSJim Jagielski 			if ( xProv.is() )
1156*b1cdbd2cSJim Jagielski 			{
1157*b1cdbd2cSJim Jagielski 				::rtl::OUString aCmd = ::rtl::OUString::createFromAscii( GetInterface()->GetSlot( rReq.GetSlot() )->GetUnoName() );
1158*b1cdbd2cSJim Jagielski 				Reference< com::sun::star::frame::XDispatchHelper > xHelper(
1159*b1cdbd2cSJim Jagielski 					xORB->createInstance( ::rtl::OUString::createFromAscii("com.sun.star.frame.DispatchHelper")), UNO_QUERY );
1160*b1cdbd2cSJim Jagielski 				if ( xHelper.is() )
1161*b1cdbd2cSJim Jagielski 				{
1162*b1cdbd2cSJim Jagielski 					Sequence < com::sun::star::beans::PropertyValue > aSeq;
1163*b1cdbd2cSJim Jagielski 					if ( rReq.GetArgs() )
1164*b1cdbd2cSJim Jagielski 						TransformItems( rReq.GetSlot(), *rReq.GetArgs(), aSeq );
1165*b1cdbd2cSJim Jagielski 					Any aResult = xHelper->executeDispatch( xProv, aCmd, ::rtl::OUString(), 0, aSeq );
1166*b1cdbd2cSJim Jagielski 					::com::sun::star::frame::DispatchResultEvent aEvent;
1167*b1cdbd2cSJim Jagielski 					sal_Bool bSuccess = (
1168*b1cdbd2cSJim Jagielski 										 (aResult >>= aEvent) &&
1169*b1cdbd2cSJim Jagielski                                          (aEvent.State == ::com::sun::star::frame::DispatchResultState::SUCCESS)
1170*b1cdbd2cSJim Jagielski 										);
1171*b1cdbd2cSJim Jagielski 					rReq.SetReturnValue( SfxBoolItem( rReq.GetSlot(), bSuccess ) );
1172*b1cdbd2cSJim Jagielski 				}
1173*b1cdbd2cSJim Jagielski 			}
1174*b1cdbd2cSJim Jagielski 		}
1175*b1cdbd2cSJim Jagielski 		break;
1176*b1cdbd2cSJim Jagielski 
1177*b1cdbd2cSJim Jagielski 		case SID_ADDRESS_DATA_SOURCE:
1178*b1cdbd2cSJim Jagielski 		{
1179*b1cdbd2cSJim Jagielski             ::rtl::OUString sDialogServiceName( RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.AddressBookSourcePilot" ) );
1180*b1cdbd2cSJim Jagielski 			try
1181*b1cdbd2cSJim Jagielski 			{
1182*b1cdbd2cSJim Jagielski 				Reference< com::sun::star::lang::XMultiServiceFactory > xORB = ::comphelper::getProcessServiceFactory();
1183*b1cdbd2cSJim Jagielski 				Reference< com::sun::star::ui::dialogs::XExecutableDialog > xDialog;
1184*b1cdbd2cSJim Jagielski 				if (xORB.is())
1185*b1cdbd2cSJim Jagielski 					xDialog = Reference< com::sun::star::ui::dialogs::XExecutableDialog >(xORB->createInstance(sDialogServiceName), UNO_QUERY);
1186*b1cdbd2cSJim Jagielski 				if (xDialog.is())
1187*b1cdbd2cSJim Jagielski 					xDialog->execute();
1188*b1cdbd2cSJim Jagielski 				else
1189*b1cdbd2cSJim Jagielski 					ShowServiceNotAvailableError(NULL, sDialogServiceName, sal_True);
1190*b1cdbd2cSJim Jagielski 			}
1191*b1cdbd2cSJim Jagielski 			catch(::com::sun::star::uno::Exception&)
1192*b1cdbd2cSJim Jagielski 			{
1193*b1cdbd2cSJim Jagielski 			}
1194*b1cdbd2cSJim Jagielski 		}
1195*b1cdbd2cSJim Jagielski 		break;
1196*b1cdbd2cSJim Jagielski 
1197*b1cdbd2cSJim Jagielski 		case SID_COMP_BIBLIOGRAPHY:
1198*b1cdbd2cSJim Jagielski 		{
1199*b1cdbd2cSJim Jagielski 			SfxStringItem aURL(SID_FILE_NAME, String::CreateFromAscii(".component:Bibliography/View1"));
1200*b1cdbd2cSJim Jagielski 			SfxStringItem aRef(SID_REFERER, String::CreateFromAscii("private:user"));
1201*b1cdbd2cSJim Jagielski 			SfxStringItem aTarget(SID_TARGETNAME, String::CreateFromAscii("_blank"));
1202*b1cdbd2cSJim Jagielski 			SfxViewFrame::Current()->GetDispatcher()->Execute( SID_OPENDOC, SFX_CALLMODE_ASYNCHRON, &aURL, &aRef, &aTarget, 0L);
1203*b1cdbd2cSJim Jagielski 		}
1204*b1cdbd2cSJim Jagielski 		break;
1205*b1cdbd2cSJim Jagielski 	}
1206*b1cdbd2cSJim Jagielski }
1207*b1cdbd2cSJim Jagielski 
OfaState_Impl(SfxItemSet & rSet)1208*b1cdbd2cSJim Jagielski void SfxApplication::OfaState_Impl(SfxItemSet &rSet)
1209*b1cdbd2cSJim Jagielski {
1210*b1cdbd2cSJim Jagielski 	SvtModuleOptions aModuleOpt;
1211*b1cdbd2cSJim Jagielski 
1212*b1cdbd2cSJim Jagielski     if( !aModuleOpt.IsWriter())
1213*b1cdbd2cSJim Jagielski     {
1214*b1cdbd2cSJim Jagielski         rSet.DisableItem( FN_LABEL );
1215*b1cdbd2cSJim Jagielski         rSet.DisableItem( FN_BUSINESS_CARD );
1216*b1cdbd2cSJim Jagielski         rSet.DisableItem( FN_XFORMS_INIT );
1217*b1cdbd2cSJim Jagielski     }
1218*b1cdbd2cSJim Jagielski 
1219*b1cdbd2cSJim Jagielski 	if ( !aModuleOpt.IsImpress() )
1220*b1cdbd2cSJim Jagielski         rSet.DisableItem( SID_SD_AUTOPILOT );
1221*b1cdbd2cSJim Jagielski }
1222