xref: /aoo42x/main/sfx2/source/appl/appbas.cxx (revision d119d52d)
1*d119d52dSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3*d119d52dSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4*d119d52dSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5*d119d52dSAndrew Rist  * distributed with this work for additional information
6*d119d52dSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7*d119d52dSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8*d119d52dSAndrew Rist  * "License"); you may not use this file except in compliance
9*d119d52dSAndrew Rist  * with the License.  You may obtain a copy of the License at
10*d119d52dSAndrew Rist  *
11*d119d52dSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12*d119d52dSAndrew Rist  *
13*d119d52dSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14*d119d52dSAndrew Rist  * software distributed under the License is distributed on an
15*d119d52dSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*d119d52dSAndrew Rist  * KIND, either express or implied.  See the License for the
17*d119d52dSAndrew Rist  * specific language governing permissions and limitations
18*d119d52dSAndrew Rist  * under the License.
19*d119d52dSAndrew Rist  *
20*d119d52dSAndrew Rist  *************************************************************/
21*d119d52dSAndrew Rist 
22*d119d52dSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sfx2.hxx"
26cdf0e10cSrcweir #include <com/sun/star/frame/XDesktop.hpp>
27cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainer.hpp>
28cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
29cdf0e10cSrcweir #include <com/sun/star/uno/Reference.h>
30cdf0e10cSrcweir #include <basic/basrdll.hxx>
31cdf0e10cSrcweir #include <tools/urlobj.hxx>
32cdf0e10cSrcweir #include <svl/macitem.hxx>
33cdf0e10cSrcweir #include <basic/sbxfac.hxx>
34cdf0e10cSrcweir #include <basic/sbx.hxx>
35cdf0e10cSrcweir #include <vcl/gradient.hxx>
36cdf0e10cSrcweir #include <svl/rectitem.hxx>
37cdf0e10cSrcweir #include <svl/intitem.hxx>
38cdf0e10cSrcweir #include <svl/eitem.hxx>
39cdf0e10cSrcweir #include <basic/sbmod.hxx>
40cdf0e10cSrcweir #include <svl/whiter.hxx>
41cdf0e10cSrcweir #include <basic/sbmeth.hxx>
42cdf0e10cSrcweir #include <basic/sbstar.hxx>
43cdf0e10cSrcweir #include <vcl/wrkwin.hxx>
44cdf0e10cSrcweir #include <vcl/msgbox.hxx>
45cdf0e10cSrcweir #include <basic/sbuno.hxx>
46cdf0e10cSrcweir #include <svtools/sfxecode.hxx>
47cdf0e10cSrcweir #include <svtools/ehdl.hxx>
48cdf0e10cSrcweir 
49cdf0e10cSrcweir #include <unotools/undoopt.hxx>
50cdf0e10cSrcweir #include <unotools/pathoptions.hxx>
51cdf0e10cSrcweir #include <unotools/useroptions.hxx>
52cdf0e10cSrcweir #include <unotools/bootstrap.hxx>
53cdf0e10cSrcweir 
54cdf0e10cSrcweir #include <sfx2/appuno.hxx>
55cdf0e10cSrcweir #include <sfx2/module.hxx>
56cdf0e10cSrcweir #include "arrdecl.hxx"
57cdf0e10cSrcweir #include <sfx2/app.hxx>
58cdf0e10cSrcweir #include "sfxtypes.hxx"
59cdf0e10cSrcweir #include "sfx2/sfxresid.hxx"
60cdf0e10cSrcweir #include <sfx2/msg.hxx>
61cdf0e10cSrcweir #include <sfx2/msgpool.hxx>
62cdf0e10cSrcweir #include <sfx2/progress.hxx>
63cdf0e10cSrcweir #include <sfx2/objsh.hxx>
64cdf0e10cSrcweir #include <sfx2/objitem.hxx>
65cdf0e10cSrcweir #include <sfx2/viewfrm.hxx>
66cdf0e10cSrcweir #include <sfx2/viewsh.hxx>
67cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
68cdf0e10cSrcweir #include "sfx2/tplpitem.hxx"
69cdf0e10cSrcweir #include "sfx2/minfitem.hxx"
70cdf0e10cSrcweir #include "app.hrc"
71cdf0e10cSrcweir #include <sfx2/evntconf.hxx>
72cdf0e10cSrcweir #include <sfx2/request.hxx>
73cdf0e10cSrcweir #include <sfx2/dinfdlg.hxx>
74cdf0e10cSrcweir #include "appdata.hxx"
75cdf0e10cSrcweir #include "appbas.hxx"
76cdf0e10cSrcweir #include "sfx2/sfxhelp.hxx"
77cdf0e10cSrcweir #include "sfx2/basmgr.hxx"
78cdf0e10cSrcweir #include "sorgitm.hxx"
79cdf0e10cSrcweir #include "appbaslib.hxx"
80cdf0e10cSrcweir #include <basic/basicmanagerrepository.hxx>
81cdf0e10cSrcweir 
82cdf0e10cSrcweir #define ITEMID_SEARCH SID_SEARCH_ITEM
83cdf0e10cSrcweir 
84cdf0e10cSrcweir #include <svl/srchitem.hxx>
85cdf0e10cSrcweir #include <vos/socket.hxx>
86cdf0e10cSrcweir 
87cdf0e10cSrcweir #define SFX_TYPEMAP
88cdf0e10cSrcweir #define Selection
89cdf0e10cSrcweir #include "sfxslots.hxx"
90cdf0e10cSrcweir 
91cdf0e10cSrcweir using namespace ::com::sun::star;
92cdf0e10cSrcweir using namespace ::com::sun::star::uno;
93cdf0e10cSrcweir using namespace ::com::sun::star::frame;
94cdf0e10cSrcweir using namespace ::com::sun::star::script;
95cdf0e10cSrcweir 
96cdf0e10cSrcweir using ::basic::BasicManagerRepository;
97cdf0e10cSrcweir 
98cdf0e10cSrcweir //========================================================================
99cdf0e10cSrcweir 
100cdf0e10cSrcweir //------------------------------------------------------------------------
lcl_GetVersionString(ResMgr *)101cdf0e10cSrcweir String lcl_GetVersionString(ResMgr* /*pAppData_ImplResMgr*/)
102cdf0e10cSrcweir {
103cdf0e10cSrcweir 	::rtl::OUString aDefault;
104cdf0e10cSrcweir 	String aVersion( utl::Bootstrap::getBuildIdData( aDefault ));
105cdf0e10cSrcweir 
106cdf0e10cSrcweir 	if ( aVersion.Len() == 0 )
107cdf0e10cSrcweir     {
108cdf0e10cSrcweir 		DBG_ERROR( "No BUILDID in bootstrap file found" );
109cdf0e10cSrcweir     }
110cdf0e10cSrcweir 
111cdf0e10cSrcweir 	aVersion.Erase( 0, aVersion.Search( ':' ) + 1 );
112cdf0e10cSrcweir 	aVersion.Erase( aVersion.Search( ')' ) );
113cdf0e10cSrcweir 	return aVersion;
114cdf0e10cSrcweir }
115cdf0e10cSrcweir 
116cdf0e10cSrcweir //=========================================================================
SaveBasicManager() const117cdf0e10cSrcweir sal_uInt16 SfxApplication::SaveBasicManager() const
118cdf0e10cSrcweir {
119cdf0e10cSrcweir 	return 0;
120cdf0e10cSrcweir }
121cdf0e10cSrcweir 
122cdf0e10cSrcweir //--------------------------------------------------------------------
SaveBasicAndDialogContainer() const123cdf0e10cSrcweir sal_uInt16 SfxApplication::SaveBasicAndDialogContainer() const
124cdf0e10cSrcweir {
125cdf0e10cSrcweir     if ( pAppData_Impl->pBasicManager->isValid() )
126cdf0e10cSrcweir         pAppData_Impl->pBasicManager->storeAllLibraries();
127cdf0e10cSrcweir 	return 0;
128cdf0e10cSrcweir }
129cdf0e10cSrcweir 
130cdf0e10cSrcweir //--------------------------------------------------------------------
131cdf0e10cSrcweir 
RegisterBasicConstants(const char *,const SfxConstant *,sal_uInt16)132cdf0e10cSrcweir void SfxApplication::RegisterBasicConstants
133cdf0e10cSrcweir (
134cdf0e10cSrcweir 	const char*,        // Prefix vor Konstanten-Namen
135cdf0e10cSrcweir 	const SfxConstant*, // Array von <SfxConstant> Instanzen
136cdf0e10cSrcweir 	sal_uInt16			// Anahl der Kontanten in pConsts
137cdf0e10cSrcweir )
138cdf0e10cSrcweir 
139cdf0e10cSrcweir /*	[Beschreibung]
140cdf0e10cSrcweir 
141cdf0e10cSrcweir 	Diese Methode meldet Konstanten beim BASIC an. Sie sollte on-demand
142cdf0e10cSrcweir 	(in GetSbxObject() der Applikation) gerufen werden. Das Array mu\s
143cdf0e10cSrcweir 	alphabetisch nach den Namen sortiert sein!
144cdf0e10cSrcweir 
145cdf0e10cSrcweir 	Durch den Prefix kann Speicher gespart und das Suchen beschleunigt
146cdf0e10cSrcweir 	werden. Im StarOffice soll der Prefix "so" verwendet werden.
147cdf0e10cSrcweir 
148cdf0e10cSrcweir 
149cdf0e10cSrcweir 	[Beispiel]
150cdf0e10cSrcweir 
151cdf0e10cSrcweir 	const SfxConstant __FAR_DATA aConstants[] =
152cdf0e10cSrcweir 	{
153cdf0e10cSrcweir 		SFX_BOOL_CONSTANT( "False", sal_False ),
154cdf0e10cSrcweir 		SFX_BOOL_CONSTANT( "True",  sal_True ),
155cdf0e10cSrcweir 	};
156cdf0e10cSrcweir 
157cdf0e10cSrcweir 	...
158cdf0e10cSrcweir 	SFX_APP()->RegisterBasicConstants( 0, aConstants, 2 );
159cdf0e10cSrcweir 	...
160cdf0e10cSrcweir 
161cdf0e10cSrcweir */
162cdf0e10cSrcweir 
163cdf0e10cSrcweir {
164cdf0e10cSrcweir //  DBG_ASSERT( pAppData_Impl->pBasicMgr, "no basic available" );
165cdf0e10cSrcweir 
166cdf0e10cSrcweir //  pAppData_Impl->pBasicMgr->GetLib(0)->Insert(
167cdf0e10cSrcweir //				new SfxConstants_Impl( pPrefix, pConsts, nCount ) );
168cdf0e10cSrcweir }
169cdf0e10cSrcweir 
170cdf0e10cSrcweir //--------------------------------------------------------------------
171cdf0e10cSrcweir 
MakeVariable(StarBASIC * pBas,SbxObject * pObject,const char * pName,sal_uInt32 nSID,SbxDataType eType,SbxClassType eClassType)172cdf0e10cSrcweir SbxVariable* MakeVariable( StarBASIC *pBas, SbxObject *pObject,
173cdf0e10cSrcweir 		   const char *pName, sal_uInt32 nSID, SbxDataType eType, SbxClassType eClassType )
174cdf0e10cSrcweir {
175cdf0e10cSrcweir 	SbxVariable *pVar = pBas->Make( String::CreateFromAscii(pName), eClassType, eType ); //SbxCLASS_PROPERTY
176cdf0e10cSrcweir 	pVar->SetUserData( nSID );
177cdf0e10cSrcweir 	pVar->SetFlag( SBX_DONTSTORE );
178cdf0e10cSrcweir 	pObject->StartListening( pVar->GetBroadcaster() );
179cdf0e10cSrcweir 	return pVar;
180cdf0e10cSrcweir }
181cdf0e10cSrcweir 
182cdf0e10cSrcweir //--------------------------------------------------------------------
183cdf0e10cSrcweir 
GetBasicManager()184cdf0e10cSrcweir BasicManager* SfxApplication::GetBasicManager()
185cdf0e10cSrcweir {
186cdf0e10cSrcweir     return BasicManagerRepository::getApplicationBasicManager( true );
187cdf0e10cSrcweir }
188cdf0e10cSrcweir 
189cdf0e10cSrcweir //--------------------------------------------------------------------
190cdf0e10cSrcweir 
GetDialogContainer()191cdf0e10cSrcweir Reference< XLibraryContainer > SfxApplication::GetDialogContainer()
192cdf0e10cSrcweir {
193cdf0e10cSrcweir     if ( !pAppData_Impl->pBasicManager->isValid() )
194cdf0e10cSrcweir         GetBasicManager();
195cdf0e10cSrcweir     return pAppData_Impl->pBasicManager->getLibraryContainer( SfxBasicManagerHolder::DIALOGS );
196cdf0e10cSrcweir }
197cdf0e10cSrcweir 
198cdf0e10cSrcweir //--------------------------------------------------------------------
199cdf0e10cSrcweir 
GetBasicContainer()200cdf0e10cSrcweir Reference< XLibraryContainer > SfxApplication::GetBasicContainer()
201cdf0e10cSrcweir {
202cdf0e10cSrcweir     if ( !pAppData_Impl->pBasicManager->isValid() )
203cdf0e10cSrcweir         GetBasicManager();
204cdf0e10cSrcweir     return pAppData_Impl->pBasicManager->getLibraryContainer( SfxBasicManagerHolder::SCRIPTS );
205cdf0e10cSrcweir }
206cdf0e10cSrcweir 
207cdf0e10cSrcweir //--------------------------------------------------------------------
208cdf0e10cSrcweir 
GetBasic()209cdf0e10cSrcweir StarBASIC* SfxApplication::GetBasic()
210cdf0e10cSrcweir {
211cdf0e10cSrcweir 	return GetBasicManager()->GetLib(0);
212cdf0e10cSrcweir }
213cdf0e10cSrcweir 
214cdf0e10cSrcweir //-------------------------------------------------------------------------
PropExec_Impl(SfxRequest & rReq)215cdf0e10cSrcweir void SfxApplication::PropExec_Impl( SfxRequest &rReq )
216cdf0e10cSrcweir {
217cdf0e10cSrcweir 	rReq.GetArgs();
218cdf0e10cSrcweir 	sal_uInt16 nSID = rReq.GetSlot();
219cdf0e10cSrcweir 	switch ( nSID )
220cdf0e10cSrcweir 	{
221cdf0e10cSrcweir 		case SID_CREATE_BASICOBJECT:
222cdf0e10cSrcweir 		{
223cdf0e10cSrcweir 			SFX_REQUEST_ARG(rReq, pItem, SfxStringItem, nSID, sal_False);
224cdf0e10cSrcweir 			if ( pItem )
225cdf0e10cSrcweir 			{
226cdf0e10cSrcweir 				SbxObject* pObject = SbxBase::CreateObject( pItem->GetValue() );
227cdf0e10cSrcweir 				pObject->AddRef();
228cdf0e10cSrcweir //(mba)                rReq.SetReturnValue( SfxObjectItem( 0, pObject ) );
229cdf0e10cSrcweir 				rReq.Done();
230cdf0e10cSrcweir 			}
231cdf0e10cSrcweir 			break;
232cdf0e10cSrcweir 		}
233cdf0e10cSrcweir 
234cdf0e10cSrcweir 		case SID_DELETE_BASICOBJECT:
235cdf0e10cSrcweir 		{
236cdf0e10cSrcweir 			SFX_REQUEST_ARG(rReq, pItem, SfxObjectItem, nSID, sal_False);
237cdf0e10cSrcweir 			if ( pItem )
238cdf0e10cSrcweir 			{
239cdf0e10cSrcweir //(mba)                SbxObject* pObject = pItem->GetObject();
240cdf0e10cSrcweir //(mba)                pObject->ReleaseRef();
241cdf0e10cSrcweir 			}
242cdf0e10cSrcweir 			break;
243cdf0e10cSrcweir 		}
244cdf0e10cSrcweir 
245cdf0e10cSrcweir 		case SID_ATTR_UNDO_COUNT:
246cdf0e10cSrcweir 		{
247cdf0e10cSrcweir 			SFX_REQUEST_ARG(rReq, pCountItem, SfxUInt16Item, nSID, sal_False);
248cdf0e10cSrcweir             SvtUndoOptions().SetUndoCount( pCountItem->GetValue() );
249cdf0e10cSrcweir 			break;
250cdf0e10cSrcweir 		}
251cdf0e10cSrcweir 
252cdf0e10cSrcweir 		case SID_WIN_VISIBLE:
253cdf0e10cSrcweir 		{
254cdf0e10cSrcweir 			break;
255cdf0e10cSrcweir 		}
256cdf0e10cSrcweir 
257cdf0e10cSrcweir 		case SID_STATUSBARTEXT:
258cdf0e10cSrcweir 		{
259cdf0e10cSrcweir 			SFX_REQUEST_ARG(rReq, pStringItem, SfxStringItem, nSID, sal_False);
260cdf0e10cSrcweir 			String aText = pStringItem->GetValue();
261cdf0e10cSrcweir 			if ( aText.Len() )
262cdf0e10cSrcweir 				GetpApp()->ShowStatusText( aText );
263cdf0e10cSrcweir 			else
264cdf0e10cSrcweir 				GetpApp()->HideStatusText();
265cdf0e10cSrcweir 			break;
266cdf0e10cSrcweir 		}
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 		case SID_OFFICE_PRIVATE_USE:
269cdf0e10cSrcweir 		case SID_OFFICE_COMMERCIAL_USE:
270cdf0e10cSrcweir 		{
271cdf0e10cSrcweir 			DBG_ASSERT( sal_False, "SfxApplication::PropExec_Impl()\nSID_OFFICE_PRIVATE_USE & SID_OFFICE_COMMERCIAL_USE are obsolete!\n" );
272cdf0e10cSrcweir 			break;
273cdf0e10cSrcweir 		}
274cdf0e10cSrcweir 
275cdf0e10cSrcweir 		case SID_OFFICE_CUSTOMERNUMBER:
276cdf0e10cSrcweir 		{
277cdf0e10cSrcweir 			SFX_REQUEST_ARG(rReq, pStringItem, SfxStringItem, nSID, sal_False);
278cdf0e10cSrcweir 
279cdf0e10cSrcweir 			if ( pStringItem )
280cdf0e10cSrcweir 				SvtUserOptions().SetCustomerNumber( pStringItem->GetValue() );
281cdf0e10cSrcweir 			break;
282cdf0e10cSrcweir 		}
283cdf0e10cSrcweir 	}
284cdf0e10cSrcweir }
285cdf0e10cSrcweir 
286cdf0e10cSrcweir //-------------------------------------------------------------------------
PropState_Impl(SfxItemSet & rSet)287cdf0e10cSrcweir void SfxApplication::PropState_Impl( SfxItemSet &rSet )
288cdf0e10cSrcweir {
289cdf0e10cSrcweir //	SfxViewFrame *pFrame = SfxViewFrame::Current();
290cdf0e10cSrcweir 	SfxWhichIter aIter(rSet);
291cdf0e10cSrcweir 	for ( sal_uInt16 nSID = aIter.FirstWhich(); nSID; nSID = aIter.NextWhich() )
292cdf0e10cSrcweir 	{
293cdf0e10cSrcweir 		switch ( nSID )
294cdf0e10cSrcweir 		{
295cdf0e10cSrcweir 			case SID_PROGNAME:
296cdf0e10cSrcweir 				rSet.Put( SfxStringItem( SID_PROGNAME, GetName() ) );
297cdf0e10cSrcweir 				break;
298cdf0e10cSrcweir 
299cdf0e10cSrcweir 			case SID_ACTIVEDOCUMENT:
300cdf0e10cSrcweir 				rSet.Put( SfxObjectItem( SID_ACTIVEDOCUMENT, SfxObjectShell::Current() ) );
301cdf0e10cSrcweir 				break;
302cdf0e10cSrcweir 
303cdf0e10cSrcweir 			case SID_APPLICATION:
304cdf0e10cSrcweir                 rSet.Put( SfxObjectItem( SID_APPLICATION, this ) );
305cdf0e10cSrcweir 				break;
306cdf0e10cSrcweir 
307cdf0e10cSrcweir 			case SID_PROGFILENAME:
308cdf0e10cSrcweir 				rSet.Put( SfxStringItem( SID_PROGFILENAME, Application::GetAppFileName() ) );
309cdf0e10cSrcweir 				break;
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 			case SID_ATTR_UNDO_COUNT:
312cdf0e10cSrcweir                 rSet.Put( SfxUInt16Item( SID_ATTR_UNDO_COUNT, sal::static_int_cast< sal_uInt16 >( SvtUndoOptions().GetUndoCount() ) ) );
313cdf0e10cSrcweir 				break;
314cdf0e10cSrcweir 
315cdf0e10cSrcweir 			case SID_UPDATE_VERSION:
316cdf0e10cSrcweir 				rSet.Put( SfxUInt32Item( SID_UPDATE_VERSION, SUPD ) );
317cdf0e10cSrcweir 				break;
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 			case SID_OFFICE_CUSTOMERNUMBER:
320cdf0e10cSrcweir 			{
321cdf0e10cSrcweir 				rSet.Put( SfxStringItem( nSID, SvtUserOptions().GetCustomerNumber() ) );
322cdf0e10cSrcweir 				break;
323cdf0e10cSrcweir 			}
324cdf0e10cSrcweir 		}
325cdf0e10cSrcweir 	}
326cdf0e10cSrcweir }
327cdf0e10cSrcweir 
328