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