131598a22SAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 331598a22SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 431598a22SAndrew Rist * or more contributor license agreements. See the NOTICE file 531598a22SAndrew Rist * distributed with this work for additional information 631598a22SAndrew Rist * regarding copyright ownership. The ASF licenses this file 731598a22SAndrew Rist * to you under the Apache License, Version 2.0 (the 831598a22SAndrew Rist * "License"); you may not use this file except in compliance 931598a22SAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 1131598a22SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 1331598a22SAndrew Rist * Unless required by applicable law or agreed to in writing, 1431598a22SAndrew Rist * software distributed under the License is distributed on an 1531598a22SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 1631598a22SAndrew Rist * KIND, either express or implied. See the License for the 1731598a22SAndrew Rist * specific language governing permissions and limitations 1831598a22SAndrew Rist * under the License. 19cdf0e10cSrcweir * 2031598a22SAndrew Rist *************************************************************/ 2131598a22SAndrew Rist 2231598a22SAndrew Rist 23cdf0e10cSrcweir 24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 25cdf0e10cSrcweir #include "precompiled_basctl.hxx" 26*1dda6fa0Smseidel 27cdf0e10cSrcweir 28cdf0e10cSrcweir #include <ide_pch.hxx> 29cdf0e10cSrcweir 30cdf0e10cSrcweir 31cdf0e10cSrcweir #include <svheader.hxx> 32cdf0e10cSrcweir #include <sfx2/app.hxx> 33cdf0e10cSrcweir #include <sfx2/dispatch.hxx> 34cdf0e10cSrcweir #include <sfx2/genlink.hxx> 35cdf0e10cSrcweir 36cdf0e10cSrcweir 37cdf0e10cSrcweir #include <svl/solar.hrc> 38cdf0e10cSrcweir #include <iderdll.hxx> 39cdf0e10cSrcweir #include <iderdll2.hxx> 40cdf0e10cSrcweir #include <iderid.hxx> 41cdf0e10cSrcweir #include <svx/svxids.hrc> 42cdf0e10cSrcweir #include <basidesh.hxx> 43cdf0e10cSrcweir #include <basidesh.hrc> 44cdf0e10cSrcweir #include <basobj.hxx> 45cdf0e10cSrcweir #include <bastypes.hxx> 46cdf0e10cSrcweir #include <basdoc.hxx> 47cdf0e10cSrcweir #include <basicmod.hxx> 48cdf0e10cSrcweir #include <propbrw.hxx> 49cdf0e10cSrcweir 50cdf0e10cSrcweir 51cdf0e10cSrcweir #define ITEMID_SEARCH 0 52cdf0e10cSrcweir #include <svl/srchitem.hxx> 53cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainerPassword.hpp> 54cdf0e10cSrcweir 55cdf0e10cSrcweir using ::rtl::OUString; 56cdf0e10cSrcweir using namespace ::com::sun::star; 57cdf0e10cSrcweir using namespace ::com::sun::star::uno; 58cdf0e10cSrcweir 59cdf0e10cSrcweir 60cdf0e10cSrcweir static BasicIDEDLL* pBasicIDEDLL = 0; 61cdf0e10cSrcweir 62cdf0e10cSrcweir BasicIDEDLL* BasicIDEDLL::GetDLL() 63cdf0e10cSrcweir { 64cdf0e10cSrcweir return pBasicIDEDLL; 65cdf0e10cSrcweir } 66cdf0e10cSrcweir 67cdf0e10cSrcweir IDEResId::IDEResId( sal_uInt16 nId ): 68cdf0e10cSrcweir ResId( nId, *(*(BasicIDEModule**)GetAppData(SHL_IDE))->GetResMgr() ) 69cdf0e10cSrcweir { 70cdf0e10cSrcweir } 71cdf0e10cSrcweir 72cdf0e10cSrcweir BasicIDEDLL::BasicIDEDLL() 73cdf0e10cSrcweir { 74cdf0e10cSrcweir pBasicIDEDLL = this; 75cdf0e10cSrcweir pShell = 0; 76cdf0e10cSrcweir pExtraData = 0; 77cdf0e10cSrcweir 78cdf0e10cSrcweir GetExtraData(); // damit GlobalErrorHdl gesetzt wird. 79cdf0e10cSrcweir } 80cdf0e10cSrcweir 81cdf0e10cSrcweir BasicIDEDLL::~BasicIDEDLL() 82cdf0e10cSrcweir { 83cdf0e10cSrcweir delete pExtraData; 84cdf0e10cSrcweir *(BasicIDEDLL**)GetAppData(SHL_IDE) = NULL; 85cdf0e10cSrcweir } 86cdf0e10cSrcweir 87cdf0e10cSrcweir void BasicIDEDLL::Init() 88cdf0e10cSrcweir { 89cdf0e10cSrcweir if ( pBasicIDEDLL ) 90cdf0e10cSrcweir return; 91cdf0e10cSrcweir 92cdf0e10cSrcweir SfxObjectFactory* pFact = &BasicDocShell::Factory(); 93cdf0e10cSrcweir (void)pFact; 94cdf0e10cSrcweir 95cdf0e10cSrcweir ByteString aResMgrName( "basctl" ); 96cdf0e10cSrcweir ResMgr* pMgr = ResMgr::CreateResMgr( 97cdf0e10cSrcweir aResMgrName.GetBuffer(), Application::GetSettings().GetUILocale() ); 98cdf0e10cSrcweir 99cdf0e10cSrcweir BASIC_MOD() = new BasicIDEModule( pMgr, &BasicDocShell::Factory() ); 100cdf0e10cSrcweir 101cdf0e10cSrcweir new BasicIDEDLL; 102cdf0e10cSrcweir SfxModule* pMod = BASIC_MOD(); 103cdf0e10cSrcweir 104cdf0e10cSrcweir SfxObjectFactory& rFactory = BasicDocShell::Factory(); 105cdf0e10cSrcweir rFactory.SetDocumentServiceName( String::CreateFromAscii( "com.sun.star.script.BasicIDE" ) ); 106cdf0e10cSrcweir 107cdf0e10cSrcweir BasicDocShell::RegisterInterface( pMod ); 108cdf0e10cSrcweir BasicIDEShell::RegisterFactory( SVX_INTERFACE_BASIDE_VIEWSH ); 109cdf0e10cSrcweir BasicIDEShell::RegisterInterface( pMod ); 110cdf0e10cSrcweir 111cdf0e10cSrcweir PropBrwMgr::RegisterChildWindow(); 112cdf0e10cSrcweir } 113cdf0e10cSrcweir 114cdf0e10cSrcweir /************************************************************************* 115cdf0e10cSrcweir |* 116cdf0e10cSrcweir |* Deinitialisierung 117cdf0e10cSrcweir |* 118cdf0e10cSrcweir \************************************************************************/ 119cdf0e10cSrcweir void BasicIDEDLL::Exit() 120cdf0e10cSrcweir { 121cdf0e10cSrcweir // the BasicIDEModule must be destroyed 122cdf0e10cSrcweir BasicIDEModule** ppShlPtr = (BasicIDEModule**) GetAppData(SHL_IDE); 123cdf0e10cSrcweir delete (*ppShlPtr); 124cdf0e10cSrcweir (*ppShlPtr) = NULL; 125cdf0e10cSrcweir DELETEZ( pBasicIDEDLL ); 126cdf0e10cSrcweir } 127cdf0e10cSrcweir 128cdf0e10cSrcweir BasicIDEData* BasicIDEDLL::GetExtraData() 129cdf0e10cSrcweir { 130cdf0e10cSrcweir if ( !pExtraData ) 131cdf0e10cSrcweir pExtraData = new BasicIDEData; 132cdf0e10cSrcweir return pExtraData; 133cdf0e10cSrcweir } 134cdf0e10cSrcweir 135cdf0e10cSrcweir BasicIDEData::BasicIDEData() : aObjCatPos( INVPOSITION, INVPOSITION ) 136cdf0e10cSrcweir { 137cdf0e10cSrcweir nBasicDialogCount = 0; 138cdf0e10cSrcweir bChoosingMacro = sal_False; 139cdf0e10cSrcweir bShellInCriticalSection = sal_False; 140cdf0e10cSrcweir pSearchItem = new SvxSearchItem( SID_SEARCH_ITEM ); 141cdf0e10cSrcweir 142cdf0e10cSrcweir StarBASIC::SetGlobalBreakHdl( LINK( this, BasicIDEData, GlobalBasicBreakHdl ) ); 143cdf0e10cSrcweir 144cdf0e10cSrcweir pAccelerator = 0; 145cdf0e10cSrcweir } 146cdf0e10cSrcweir 147cdf0e10cSrcweir BasicIDEData::~BasicIDEData() 148cdf0e10cSrcweir { 149cdf0e10cSrcweir // ErrorHdl zuruecksetzen ist zwar sauberer, aber diese Instanz wird 150cdf0e10cSrcweir // sowieso sehr spaet, nach dem letzten Basic, zerstoert. 151cdf0e10cSrcweir // Durch den Aufruf werden dann aber wieder AppDaten erzeugt und nicht 152cdf0e10cSrcweir // mehr zerstoert => MLK's beim Purify 153cdf0e10cSrcweir // StarBASIC::SetGlobalErrorHdl( Link() ); 154cdf0e10cSrcweir // StarBASIC::SetGlobalBreakHdl( Link() ); 155cdf0e10cSrcweir // StarBASIC::setGlobalStarScriptListener( XEngineListenerRef() ); 156cdf0e10cSrcweir 157cdf0e10cSrcweir delete pSearchItem; 158cdf0e10cSrcweir //delete pAccelerator; 159cdf0e10cSrcweir } 160cdf0e10cSrcweir 161cdf0e10cSrcweir SvxSearchItem& BasicIDEData::GetSearchItem() const 162cdf0e10cSrcweir { 163cdf0e10cSrcweir return *pSearchItem; 164cdf0e10cSrcweir } 165cdf0e10cSrcweir 166cdf0e10cSrcweir void BasicIDEData::SetSearchItem( const SvxSearchItem& rItem ) 167cdf0e10cSrcweir { 168cdf0e10cSrcweir delete pSearchItem; 169cdf0e10cSrcweir pSearchItem = (SvxSearchItem*)rItem.Clone(); 170cdf0e10cSrcweir } 171cdf0e10cSrcweir 172cdf0e10cSrcweir IMPL_LINK( BasicIDEData, GlobalBasicBreakHdl, StarBASIC *, pBasic ) 173cdf0e10cSrcweir { 174cdf0e10cSrcweir long nRet = 0; 175cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell(); 176cdf0e10cSrcweir if ( pIDEShell ) 177cdf0e10cSrcweir { 178cdf0e10cSrcweir BasicManager* pBasMgr = BasicIDE::FindBasicManager( pBasic ); 179cdf0e10cSrcweir if ( pBasMgr ) 180cdf0e10cSrcweir { 181cdf0e10cSrcweir // Hier lande ich zweimal, wenn Step into protected Basic 182cdf0e10cSrcweir // => schlecht, wenn Passwortabfrage 2x, ausserdem sieht man in 183cdf0e10cSrcweir // dem PasswordDlg nicht, fuer welche Lib... 184cdf0e10cSrcweir // => An dieser Stelle keine Passwort-Abfrage starten 185cdf0e10cSrcweir ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) ); 186cdf0e10cSrcweir OSL_ENSURE( aDocument.isValid(), "BasicIDEData::GlobalBasicBreakHdl: no document for the basic manager!" ); 187cdf0e10cSrcweir if ( aDocument.isValid() ) 188cdf0e10cSrcweir { 189cdf0e10cSrcweir ::rtl::OUString aOULibName( pBasic->GetName() ); 190cdf0e10cSrcweir Reference< script::XLibraryContainer > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ), UNO_QUERY ); 191cdf0e10cSrcweir if ( xModLibContainer.is() && xModLibContainer->hasByName( aOULibName ) ) 192cdf0e10cSrcweir { 193cdf0e10cSrcweir Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY ); 194cdf0e10cSrcweir if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aOULibName ) && !xPasswd->isLibraryPasswordVerified( aOULibName ) ) 195cdf0e10cSrcweir { 196cdf0e10cSrcweir // Ein Step-Out muesste mich aus den geschuetzten Bereich befoerdern... 197cdf0e10cSrcweir nRet = SbDEBUG_STEPOUT; 198cdf0e10cSrcweir } 199cdf0e10cSrcweir else 200cdf0e10cSrcweir { 201cdf0e10cSrcweir nRet = pIDEShell->CallBasicBreakHdl( pBasic ); 202cdf0e10cSrcweir } 203cdf0e10cSrcweir } 204cdf0e10cSrcweir } 205cdf0e10cSrcweir } 206cdf0e10cSrcweir } 207cdf0e10cSrcweir 208cdf0e10cSrcweir return nRet; 209cdf0e10cSrcweir } 210