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