1*cdf0e10cSrcweir /************************************************************************* 2*cdf0e10cSrcweir * 3*cdf0e10cSrcweir * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4*cdf0e10cSrcweir * 5*cdf0e10cSrcweir * Copyright 2000, 2010 Oracle and/or its affiliates. 6*cdf0e10cSrcweir * 7*cdf0e10cSrcweir * OpenOffice.org - a multi-platform office productivity suite 8*cdf0e10cSrcweir * 9*cdf0e10cSrcweir * This file is part of OpenOffice.org. 10*cdf0e10cSrcweir * 11*cdf0e10cSrcweir * OpenOffice.org is free software: you can redistribute it and/or modify 12*cdf0e10cSrcweir * it under the terms of the GNU Lesser General Public License version 3 13*cdf0e10cSrcweir * only, as published by the Free Software Foundation. 14*cdf0e10cSrcweir * 15*cdf0e10cSrcweir * OpenOffice.org is distributed in the hope that it will be useful, 16*cdf0e10cSrcweir * but WITHOUT ANY WARRANTY; without even the implied warranty of 17*cdf0e10cSrcweir * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 18*cdf0e10cSrcweir * GNU Lesser General Public License version 3 for more details 19*cdf0e10cSrcweir * (a copy is included in the LICENSE file that accompanied this code). 20*cdf0e10cSrcweir * 21*cdf0e10cSrcweir * You should have received a copy of the GNU Lesser General Public License 22*cdf0e10cSrcweir * version 3 along with OpenOffice.org. If not, see 23*cdf0e10cSrcweir * <http://www.openoffice.org/license.html> 24*cdf0e10cSrcweir * for a copy of the LGPLv3 License. 25*cdf0e10cSrcweir * 26*cdf0e10cSrcweir ************************************************************************/ 27*cdf0e10cSrcweir 28*cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove 29*cdf0e10cSrcweir #include "precompiled_basctl.hxx" 30*cdf0e10cSrcweir 31*cdf0e10cSrcweir // CLOOKS: 32*cdf0e10cSrcweir //#define _MENUBTN_HXX 33*cdf0e10cSrcweir #define _SPIN_HXX 34*cdf0e10cSrcweir #define _PRVWIN_HXX 35*cdf0e10cSrcweir //#define _FIELD_HXX *** 36*cdf0e10cSrcweir //#define _TAB_HXX *** 37*cdf0e10cSrcweir #define _DIALOGS_HXX 38*cdf0e10cSrcweir #define _SVRTF_HXX 39*cdf0e10cSrcweir #define _ISETBRW_HXX 40*cdf0e10cSrcweir #define _VCTRLS_HXX 41*cdf0e10cSrcweir #define SI_NOCONTROL 42*cdf0e10cSrcweir #define SI_NOSBXCONTROLS 43*cdf0e10cSrcweir 44*cdf0e10cSrcweir #define ITEMID_SIZE 0 45*cdf0e10cSrcweir 46*cdf0e10cSrcweir // Falls ohne PCH's: 47*cdf0e10cSrcweir #include <ide_pch.hxx> 48*cdf0e10cSrcweir 49*cdf0e10cSrcweir 50*cdf0e10cSrcweir #define _SOLAR__PRIVATE 1 51*cdf0e10cSrcweir #include <basic/sbx.hxx> 52*cdf0e10cSrcweir #include <svl/hint.hxx> 53*cdf0e10cSrcweir #include <tools/diagnose_ex.h> 54*cdf0e10cSrcweir #include <basidesh.hrc> 55*cdf0e10cSrcweir #include <basidesh.hxx> 56*cdf0e10cSrcweir #include <basdoc.hxx> 57*cdf0e10cSrcweir #include <basobj.hxx> 58*cdf0e10cSrcweir #include <bastypes.hxx> 59*cdf0e10cSrcweir #include <basicbox.hxx> 60*cdf0e10cSrcweir #include <objdlg.hxx> 61*cdf0e10cSrcweir #include <sbxitem.hxx> 62*cdf0e10cSrcweir #include <tbxctl.hxx> 63*cdf0e10cSrcweir #include <iderdll2.hxx> 64*cdf0e10cSrcweir #include <basidectrlr.hxx> 65*cdf0e10cSrcweir #include <localizationmgr.hxx> 66*cdf0e10cSrcweir 67*cdf0e10cSrcweir #define BasicIDEShell 68*cdf0e10cSrcweir #define SFX_TYPEMAP 69*cdf0e10cSrcweir #include <idetemp.hxx> 70*cdf0e10cSrcweir #include <basslots.hxx> 71*cdf0e10cSrcweir #include <iderdll.hxx> 72*cdf0e10cSrcweir #include <svx/pszctrl.hxx> 73*cdf0e10cSrcweir #include <svx/insctrl.hxx> 74*cdf0e10cSrcweir #include <svx/srchdlg.hxx> 75*cdf0e10cSrcweir #include <svx/lboxctrl.hxx> 76*cdf0e10cSrcweir #include <svx/tbcontrl.hxx> 77*cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainer.hpp> 78*cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainerPassword.hpp> 79*cdf0e10cSrcweir #include <com/sun/star/container/XNameContainer.hpp> 80*cdf0e10cSrcweir #include <com/sun/star/container/XContainer.hpp> 81*cdf0e10cSrcweir #include <com/sun/star/container/XContainerListener.hpp> 82*cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainer.hpp> 83*cdf0e10cSrcweir 84*cdf0e10cSrcweir #include <svx/xmlsecctrl.hxx> 85*cdf0e10cSrcweir 86*cdf0e10cSrcweir using namespace ::com::sun::star::uno; 87*cdf0e10cSrcweir using namespace ::com::sun::star; 88*cdf0e10cSrcweir using ::rtl::OUString; 89*cdf0e10cSrcweir 90*cdf0e10cSrcweir static const rtl::OUString sStandardLibName( rtl::OUString::createFromAscii("Standard") ); 91*cdf0e10cSrcweir 92*cdf0e10cSrcweir typedef ::cppu::WeakImplHelper1< container::XContainerListener > ContainerListenerBASE; 93*cdf0e10cSrcweir 94*cdf0e10cSrcweir class ContainerListenerImpl : public ContainerListenerBASE 95*cdf0e10cSrcweir { 96*cdf0e10cSrcweir BasicIDEShell* mpShell; 97*cdf0e10cSrcweir public: 98*cdf0e10cSrcweir 99*cdf0e10cSrcweir ContainerListenerImpl( BasicIDEShell* pShell ) : mpShell( pShell ) {} 100*cdf0e10cSrcweir 101*cdf0e10cSrcweir ~ContainerListenerImpl() 102*cdf0e10cSrcweir { 103*cdf0e10cSrcweir } 104*cdf0e10cSrcweir 105*cdf0e10cSrcweir void addContainerListener( const ScriptDocument& rScriptDocument, const String& aLibName ) 106*cdf0e10cSrcweir { 107*cdf0e10cSrcweir try 108*cdf0e10cSrcweir { 109*cdf0e10cSrcweir uno::Reference< container::XContainer > xContainer( rScriptDocument.getLibrary( E_SCRIPTS, aLibName, sal_False ), uno::UNO_QUERY ); 110*cdf0e10cSrcweir if ( xContainer.is() ) 111*cdf0e10cSrcweir { 112*cdf0e10cSrcweir uno::Reference< container::XContainerListener > xContainerListener( this ); 113*cdf0e10cSrcweir xContainer->addContainerListener( xContainerListener ); 114*cdf0e10cSrcweir } 115*cdf0e10cSrcweir } 116*cdf0e10cSrcweir catch( uno::Exception& ) {} 117*cdf0e10cSrcweir } 118*cdf0e10cSrcweir void removeContainerListener( const ScriptDocument& rScriptDocument, const String& aLibName ) 119*cdf0e10cSrcweir { 120*cdf0e10cSrcweir try 121*cdf0e10cSrcweir { 122*cdf0e10cSrcweir uno::Reference< container::XContainer > xContainer( rScriptDocument.getLibrary( E_SCRIPTS, aLibName, sal_False ), uno::UNO_QUERY ); 123*cdf0e10cSrcweir if ( xContainer.is() ) 124*cdf0e10cSrcweir { 125*cdf0e10cSrcweir uno::Reference< container::XContainerListener > xContainerListener( this ); 126*cdf0e10cSrcweir xContainer->removeContainerListener( xContainerListener ); 127*cdf0e10cSrcweir } 128*cdf0e10cSrcweir } 129*cdf0e10cSrcweir catch( uno::Exception& ) {} 130*cdf0e10cSrcweir } 131*cdf0e10cSrcweir 132*cdf0e10cSrcweir // XEventListener 133*cdf0e10cSrcweir virtual void SAL_CALL disposing( const lang::EventObject& ) throw( uno::RuntimeException ) {} 134*cdf0e10cSrcweir 135*cdf0e10cSrcweir // XContainerListener 136*cdf0e10cSrcweir virtual void SAL_CALL elementInserted( const container::ContainerEvent& Event ) throw( uno::RuntimeException ) 137*cdf0e10cSrcweir { 138*cdf0e10cSrcweir rtl::OUString sModuleName; 139*cdf0e10cSrcweir if( mpShell && ( Event.Accessor >>= sModuleName ) ) 140*cdf0e10cSrcweir mpShell->FindBasWin( mpShell->m_aCurDocument, mpShell->m_aCurLibName, sModuleName, sal_True, sal_False ); 141*cdf0e10cSrcweir } 142*cdf0e10cSrcweir virtual void SAL_CALL elementReplaced( const container::ContainerEvent& ) throw( com::sun::star::uno::RuntimeException ) { } 143*cdf0e10cSrcweir virtual void SAL_CALL elementRemoved( const container::ContainerEvent& Event ) throw( com::sun::star::uno::RuntimeException ) 144*cdf0e10cSrcweir { 145*cdf0e10cSrcweir rtl::OUString sModuleName; 146*cdf0e10cSrcweir if( mpShell && ( Event.Accessor >>= sModuleName ) ) 147*cdf0e10cSrcweir { 148*cdf0e10cSrcweir IDEBaseWindow* pWin = mpShell->FindWindow( mpShell->m_aCurDocument, mpShell->m_aCurLibName, sModuleName, BASICIDE_TYPE_MODULE, sal_True ); 149*cdf0e10cSrcweir if( pWin ) 150*cdf0e10cSrcweir mpShell->RemoveWindow( pWin, sal_True, sal_True ); 151*cdf0e10cSrcweir } 152*cdf0e10cSrcweir } 153*cdf0e10cSrcweir 154*cdf0e10cSrcweir }; 155*cdf0e10cSrcweir 156*cdf0e10cSrcweir TYPEINIT1( BasicIDEShell, SfxViewShell ); 157*cdf0e10cSrcweir 158*cdf0e10cSrcweir SFX_IMPL_NAMED_VIEWFACTORY( BasicIDEShell, "Default" ) 159*cdf0e10cSrcweir { 160*cdf0e10cSrcweir SFX_VIEW_REGISTRATION( BasicDocShell ); 161*cdf0e10cSrcweir } 162*cdf0e10cSrcweir 163*cdf0e10cSrcweir 164*cdf0e10cSrcweir SFX_IMPL_INTERFACE( BasicIDEShell, SfxViewShell, IDEResId( RID_STR_IDENAME ) ) 165*cdf0e10cSrcweir { 166*cdf0e10cSrcweir SFX_CHILDWINDOW_REGISTRATION( SID_SEARCH_DLG ); 167*cdf0e10cSrcweir SFX_FEATURED_CHILDWINDOW_REGISTRATION(SID_SHOW_PROPERTYBROWSER, BASICIDE_UI_FEATURE_SHOW_BROWSER); 168*cdf0e10cSrcweir SFX_POPUPMENU_REGISTRATION( IDEResId( RID_POPUP_DLGED ) ); 169*cdf0e10cSrcweir } 170*cdf0e10cSrcweir 171*cdf0e10cSrcweir 172*cdf0e10cSrcweir 173*cdf0e10cSrcweir #define IDE_VIEWSHELL_FLAGS SFX_VIEW_CAN_PRINT|SFX_VIEW_NO_NEWWINDOW 174*cdf0e10cSrcweir 175*cdf0e10cSrcweir 176*cdf0e10cSrcweir // Hack for #101048 177*cdf0e10cSrcweir static sal_Int32 GnBasicIDEShellCount; 178*cdf0e10cSrcweir sal_Int32 getBasicIDEShellCount( void ) 179*cdf0e10cSrcweir { return GnBasicIDEShellCount; } 180*cdf0e10cSrcweir 181*cdf0e10cSrcweir BasicIDEShell::BasicIDEShell( SfxViewFrame* pFrame_, SfxViewShell* /* pOldShell */ ) : 182*cdf0e10cSrcweir SfxViewShell( pFrame_, IDE_VIEWSHELL_FLAGS ), 183*cdf0e10cSrcweir m_aCurDocument( ScriptDocument::getApplicationScriptDocument() ), 184*cdf0e10cSrcweir aHScrollBar( &GetViewFrame()->GetWindow(), WinBits( WB_HSCROLL | WB_DRAG ) ), 185*cdf0e10cSrcweir aVScrollBar( &GetViewFrame()->GetWindow(), WinBits( WB_VSCROLL | WB_DRAG ) ), 186*cdf0e10cSrcweir aScrollBarBox( &GetViewFrame()->GetWindow(), WinBits( WB_SIZEABLE ) ), 187*cdf0e10cSrcweir m_bAppBasicModified( sal_False ), 188*cdf0e10cSrcweir m_aNotifier( *this ) 189*cdf0e10cSrcweir { 190*cdf0e10cSrcweir m_xLibListener = new ContainerListenerImpl( this ); 191*cdf0e10cSrcweir Init(); 192*cdf0e10cSrcweir GnBasicIDEShellCount++; 193*cdf0e10cSrcweir } 194*cdf0e10cSrcweir 195*cdf0e10cSrcweir 196*cdf0e10cSrcweir 197*cdf0e10cSrcweir void BasicIDEShell::Init() 198*cdf0e10cSrcweir { 199*cdf0e10cSrcweir TbxControls::RegisterControl( SID_CHOOSE_CONTROLS ); 200*cdf0e10cSrcweir SvxPosSizeStatusBarControl::RegisterControl(); 201*cdf0e10cSrcweir SvxInsertStatusBarControl::RegisterControl(); 202*cdf0e10cSrcweir XmlSecStatusBarControl::RegisterControl( SID_SIGNATURE ); 203*cdf0e10cSrcweir SvxSimpleUndoRedoController::RegisterControl( SID_UNDO ); 204*cdf0e10cSrcweir SvxSimpleUndoRedoController::RegisterControl( SID_REDO ); 205*cdf0e10cSrcweir 206*cdf0e10cSrcweir SvxSearchDialogWrapper::RegisterChildWindow( sal_False ); 207*cdf0e10cSrcweir 208*cdf0e10cSrcweir IDE_DLL()->GetExtraData()->ShellInCriticalSection() = sal_True; 209*cdf0e10cSrcweir 210*cdf0e10cSrcweir SetName( String( RTL_CONSTASCII_USTRINGPARAM( "BasicIDE" ) ) ); 211*cdf0e10cSrcweir SetHelpId( SVX_INTERFACE_BASIDE_VIEWSH ); 212*cdf0e10cSrcweir 213*cdf0e10cSrcweir LibBoxControl::RegisterControl( SID_BASICIDE_LIBSELECTOR ); 214*cdf0e10cSrcweir LanguageBoxControl::RegisterControl( SID_BASICIDE_CURRENT_LANG ); 215*cdf0e10cSrcweir 216*cdf0e10cSrcweir CreateModulWindowLayout(); 217*cdf0e10cSrcweir 218*cdf0e10cSrcweir GetViewFrame()->GetWindow().SetBackground(); 219*cdf0e10cSrcweir 220*cdf0e10cSrcweir pCurWin = 0; 221*cdf0e10cSrcweir m_aCurDocument = ScriptDocument::getApplicationScriptDocument(); 222*cdf0e10cSrcweir pObjectCatalog = 0; 223*cdf0e10cSrcweir bCreatingWindow = sal_False; 224*cdf0e10cSrcweir 225*cdf0e10cSrcweir m_pCurLocalizationMgr = NULL; 226*cdf0e10cSrcweir 227*cdf0e10cSrcweir pTabBar = new BasicIDETabBar( &GetViewFrame()->GetWindow() ); 228*cdf0e10cSrcweir pTabBar->SetSplitHdl( LINK( this, BasicIDEShell, TabBarSplitHdl ) ); 229*cdf0e10cSrcweir bTabBarSplitted = sal_False; 230*cdf0e10cSrcweir 231*cdf0e10cSrcweir nCurKey = 100; 232*cdf0e10cSrcweir InitScrollBars(); 233*cdf0e10cSrcweir InitTabBar(); 234*cdf0e10cSrcweir 235*cdf0e10cSrcweir SetCurLib( ScriptDocument::getApplicationScriptDocument(), String::CreateFromAscii( "Standard" ), false, false ); 236*cdf0e10cSrcweir 237*cdf0e10cSrcweir if ( IDE_DLL() && IDE_DLL()->pShell == NULL ) 238*cdf0e10cSrcweir IDE_DLL()->pShell = this; 239*cdf0e10cSrcweir 240*cdf0e10cSrcweir IDE_DLL()->GetExtraData()->ShellInCriticalSection() = sal_False; 241*cdf0e10cSrcweir 242*cdf0e10cSrcweir // It's enough to create the controller ... 243*cdf0e10cSrcweir // It will be public by using magic :-) 244*cdf0e10cSrcweir new BasicIDEController( this ); 245*cdf0e10cSrcweir 246*cdf0e10cSrcweir // Force updating the title ! Because it must be set to the controller 247*cdf0e10cSrcweir // it has to be called directly after creating those controller. 248*cdf0e10cSrcweir SetMDITitle (); 249*cdf0e10cSrcweir 250*cdf0e10cSrcweir UpdateWindows(); 251*cdf0e10cSrcweir } 252*cdf0e10cSrcweir 253*cdf0e10cSrcweir __EXPORT BasicIDEShell::~BasicIDEShell() 254*cdf0e10cSrcweir { 255*cdf0e10cSrcweir m_aNotifier.dispose(); 256*cdf0e10cSrcweir 257*cdf0e10cSrcweir if ( IDE_DLL() && IDE_DLL()->pShell == this ) 258*cdf0e10cSrcweir IDE_DLL()->pShell = NULL; 259*cdf0e10cSrcweir 260*cdf0e10cSrcweir // Damit bei einem Basic-Fehler beim Speichern die Shell nicht sofort 261*cdf0e10cSrcweir // wieder hoch kommt: 262*cdf0e10cSrcweir IDE_DLL()->GetExtraData()->ShellInCriticalSection() = sal_True; 263*cdf0e10cSrcweir 264*cdf0e10cSrcweir SetWindow( 0 ); 265*cdf0e10cSrcweir SetCurWindow( 0 ); 266*cdf0e10cSrcweir 267*cdf0e10cSrcweir // Alle Fenster zerstoeren: 268*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.First(); 269*cdf0e10cSrcweir while ( pWin ) 270*cdf0e10cSrcweir { 271*cdf0e10cSrcweir // Kein Store, passiert bereits, wenn die BasicManager zerstoert werden. 272*cdf0e10cSrcweir delete pWin; 273*cdf0e10cSrcweir pWin = aIDEWindowTable.Next(); 274*cdf0e10cSrcweir } 275*cdf0e10cSrcweir 276*cdf0e10cSrcweir aIDEWindowTable.Clear(); 277*cdf0e10cSrcweir delete pTabBar; 278*cdf0e10cSrcweir delete pObjectCatalog; 279*cdf0e10cSrcweir DestroyModulWindowLayout(); 280*cdf0e10cSrcweir 281*cdf0e10cSrcweir ContainerListenerImpl* pListener = static_cast< ContainerListenerImpl* >( m_xLibListener.get() ); 282*cdf0e10cSrcweir // Destroy all ContainerListeners for Basic Container. 283*cdf0e10cSrcweir if ( pListener ) 284*cdf0e10cSrcweir pListener->removeContainerListener( m_aCurDocument, m_aCurLibName ); 285*cdf0e10cSrcweir 286*cdf0e10cSrcweir // MI: Das gab einen GPF im SDT beim Schliessen da dann der ViewFrame die 287*cdf0e10cSrcweir // ObjSh loslaesst. Es wusste auch keiner mehr wozu das gut war. 288*cdf0e10cSrcweir // GetViewFrame()->GetObjectShell()->Broadcast( SfxSimpleHint( SFX_HINT_DYING ) ); 289*cdf0e10cSrcweir 290*cdf0e10cSrcweir IDE_DLL()->GetExtraData()->ShellInCriticalSection() = sal_False; 291*cdf0e10cSrcweir 292*cdf0e10cSrcweir GnBasicIDEShellCount--; 293*cdf0e10cSrcweir } 294*cdf0e10cSrcweir 295*cdf0e10cSrcweir void BasicIDEShell::onDocumentCreated( const ScriptDocument& /*_rDocument*/ ) 296*cdf0e10cSrcweir { 297*cdf0e10cSrcweir UpdateWindows(); 298*cdf0e10cSrcweir } 299*cdf0e10cSrcweir 300*cdf0e10cSrcweir void BasicIDEShell::onDocumentOpened( const ScriptDocument& /*_rDocument*/ ) 301*cdf0e10cSrcweir { 302*cdf0e10cSrcweir UpdateWindows(); 303*cdf0e10cSrcweir } 304*cdf0e10cSrcweir 305*cdf0e10cSrcweir void BasicIDEShell::onDocumentSave( const ScriptDocument& /*_rDocument*/ ) 306*cdf0e10cSrcweir { 307*cdf0e10cSrcweir StoreAllWindowData(); 308*cdf0e10cSrcweir } 309*cdf0e10cSrcweir 310*cdf0e10cSrcweir void BasicIDEShell::onDocumentSaveDone( const ScriptDocument& /*_rDocument*/ ) 311*cdf0e10cSrcweir { 312*cdf0e10cSrcweir // #i115671: Update SID_SAVEDOC after saving is completed 313*cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr(); 314*cdf0e10cSrcweir if ( pBindings ) 315*cdf0e10cSrcweir pBindings->Invalidate( SID_SAVEDOC ); 316*cdf0e10cSrcweir } 317*cdf0e10cSrcweir 318*cdf0e10cSrcweir void BasicIDEShell::onDocumentSaveAs( const ScriptDocument& /*_rDocument*/ ) 319*cdf0e10cSrcweir { 320*cdf0e10cSrcweir StoreAllWindowData(); 321*cdf0e10cSrcweir } 322*cdf0e10cSrcweir 323*cdf0e10cSrcweir void BasicIDEShell::onDocumentSaveAsDone( const ScriptDocument& /*_rDocument*/ ) 324*cdf0e10cSrcweir { 325*cdf0e10cSrcweir // not interested in 326*cdf0e10cSrcweir } 327*cdf0e10cSrcweir 328*cdf0e10cSrcweir void BasicIDEShell::onDocumentClosed( const ScriptDocument& _rDocument ) 329*cdf0e10cSrcweir { 330*cdf0e10cSrcweir if ( !_rDocument.isValid() ) 331*cdf0e10cSrcweir return; 332*cdf0e10cSrcweir 333*cdf0e10cSrcweir bool bSetCurWindow = false; 334*cdf0e10cSrcweir bool bSetCurLib = ( _rDocument == m_aCurDocument ); 335*cdf0e10cSrcweir 336*cdf0e10cSrcweir // remove all windows which belong to this document 337*cdf0e10cSrcweir for ( sal_uLong nWin = aIDEWindowTable.Count(); nWin; ) 338*cdf0e10cSrcweir { 339*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.GetObject( --nWin ); 340*cdf0e10cSrcweir if ( pWin->IsDocument( _rDocument ) ) 341*cdf0e10cSrcweir { 342*cdf0e10cSrcweir if ( pWin->GetStatus() & (BASWIN_RUNNINGBASIC|BASWIN_INRESCHEDULE) ) 343*cdf0e10cSrcweir { 344*cdf0e10cSrcweir pWin->AddStatus( BASWIN_TOBEKILLED ); 345*cdf0e10cSrcweir pWin->Hide(); 346*cdf0e10cSrcweir StarBASIC::Stop(); 347*cdf0e10cSrcweir // there's no notify 348*cdf0e10cSrcweir pWin->BasicStopped(); 349*cdf0e10cSrcweir } 350*cdf0e10cSrcweir else 351*cdf0e10cSrcweir { 352*cdf0e10cSrcweir pWin->StoreData(); 353*cdf0e10cSrcweir if ( pWin == pCurWin ) 354*cdf0e10cSrcweir bSetCurWindow = true; 355*cdf0e10cSrcweir RemoveWindow( pWin, sal_True, sal_False ); 356*cdf0e10cSrcweir } 357*cdf0e10cSrcweir } 358*cdf0e10cSrcweir } 359*cdf0e10cSrcweir 360*cdf0e10cSrcweir // remove lib info 361*cdf0e10cSrcweir BasicIDEData* pData = IDE_DLL()->GetExtraData(); 362*cdf0e10cSrcweir if ( pData ) 363*cdf0e10cSrcweir pData->GetLibInfos().RemoveInfoFor( _rDocument ); 364*cdf0e10cSrcweir 365*cdf0e10cSrcweir if ( bSetCurLib ) 366*cdf0e10cSrcweir SetCurLib( ScriptDocument::getApplicationScriptDocument(), String::CreateFromAscii( "Standard" ), true, false ); 367*cdf0e10cSrcweir else if ( bSetCurWindow ) 368*cdf0e10cSrcweir SetCurWindow( FindApplicationWindow(), sal_True ); 369*cdf0e10cSrcweir } 370*cdf0e10cSrcweir 371*cdf0e10cSrcweir void BasicIDEShell::onDocumentTitleChanged( const ScriptDocument& /*_rDocument*/ ) 372*cdf0e10cSrcweir { 373*cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr(); 374*cdf0e10cSrcweir if ( pBindings ) 375*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_LIBSELECTOR, sal_True, sal_False ); 376*cdf0e10cSrcweir SetMDITitle(); 377*cdf0e10cSrcweir } 378*cdf0e10cSrcweir 379*cdf0e10cSrcweir void BasicIDEShell::onDocumentModeChanged( const ScriptDocument& _rDocument ) 380*cdf0e10cSrcweir { 381*cdf0e10cSrcweir for ( sal_uLong nWin = aIDEWindowTable.Count(); nWin; ) 382*cdf0e10cSrcweir { 383*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.GetObject( --nWin ); 384*cdf0e10cSrcweir if ( pWin->IsDocument( _rDocument ) && _rDocument.isDocument() ) 385*cdf0e10cSrcweir pWin->SetReadOnly( _rDocument.isReadOnly() ); 386*cdf0e10cSrcweir } 387*cdf0e10cSrcweir } 388*cdf0e10cSrcweir 389*cdf0e10cSrcweir void BasicIDEShell::StoreAllWindowData( sal_Bool bPersistent ) 390*cdf0e10cSrcweir { 391*cdf0e10cSrcweir for ( sal_uLong nWin = 0; nWin < aIDEWindowTable.Count(); nWin++ ) 392*cdf0e10cSrcweir { 393*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.GetObject( nWin ); 394*cdf0e10cSrcweir DBG_ASSERT( pWin, "PrepareClose: NULL-Pointer in Table?" ); 395*cdf0e10cSrcweir if ( !pWin->IsSuspended() ) 396*cdf0e10cSrcweir pWin->StoreData(); 397*cdf0e10cSrcweir } 398*cdf0e10cSrcweir 399*cdf0e10cSrcweir if ( bPersistent ) 400*cdf0e10cSrcweir { 401*cdf0e10cSrcweir SFX_APP()->SaveBasicAndDialogContainer(); 402*cdf0e10cSrcweir SetAppBasicModified( sal_False ); 403*cdf0e10cSrcweir 404*cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr(); 405*cdf0e10cSrcweir if ( pBindings ) 406*cdf0e10cSrcweir { 407*cdf0e10cSrcweir pBindings->Invalidate( SID_SAVEDOC ); 408*cdf0e10cSrcweir pBindings->Update( SID_SAVEDOC ); 409*cdf0e10cSrcweir } 410*cdf0e10cSrcweir } 411*cdf0e10cSrcweir } 412*cdf0e10cSrcweir 413*cdf0e10cSrcweir 414*cdf0e10cSrcweir sal_uInt16 __EXPORT BasicIDEShell::PrepareClose( sal_Bool bUI, sal_Bool bForBrowsing ) 415*cdf0e10cSrcweir { 416*cdf0e10cSrcweir (void)bForBrowsing; 417*cdf0e10cSrcweir 418*cdf0e10cSrcweir // da es nach Drucken etc. (DocInfo) modifiziert ist, hier resetten 419*cdf0e10cSrcweir GetViewFrame()->GetObjectShell()->SetModified(sal_False); 420*cdf0e10cSrcweir 421*cdf0e10cSrcweir if ( StarBASIC::IsRunning() ) 422*cdf0e10cSrcweir { 423*cdf0e10cSrcweir if( bUI ) 424*cdf0e10cSrcweir { 425*cdf0e10cSrcweir String aErrorStr( IDEResId( RID_STR_CANNOTCLOSE ) ); 426*cdf0e10cSrcweir Window *pParent = &GetViewFrame()->GetWindow(); 427*cdf0e10cSrcweir InfoBox( pParent, aErrorStr ).Execute(); 428*cdf0e10cSrcweir } 429*cdf0e10cSrcweir return sal_False; 430*cdf0e10cSrcweir } 431*cdf0e10cSrcweir else 432*cdf0e10cSrcweir { 433*cdf0e10cSrcweir // Hier unguenstig, wird zweimal gerufen... 434*cdf0e10cSrcweir // StoreAllWindowData(); 435*cdf0e10cSrcweir 436*cdf0e10cSrcweir sal_Bool bCanClose = sal_True; 437*cdf0e10cSrcweir for ( sal_uLong nWin = 0; bCanClose && ( nWin < aIDEWindowTable.Count() ); nWin++ ) 438*cdf0e10cSrcweir { 439*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.GetObject( nWin ); 440*cdf0e10cSrcweir if ( /* !pWin->IsSuspended() && */ !pWin->CanClose() ) 441*cdf0e10cSrcweir { 442*cdf0e10cSrcweir if ( m_aCurLibName.Len() && ( pWin->IsDocument( m_aCurDocument ) || pWin->GetLibName() != m_aCurLibName ) ) 443*cdf0e10cSrcweir SetCurLib( ScriptDocument::getApplicationScriptDocument(), String(), false ); 444*cdf0e10cSrcweir SetCurWindow( pWin, sal_True ); 445*cdf0e10cSrcweir bCanClose = sal_False; 446*cdf0e10cSrcweir } 447*cdf0e10cSrcweir } 448*cdf0e10cSrcweir 449*cdf0e10cSrcweir if ( bCanClose ) 450*cdf0e10cSrcweir StoreAllWindowData( sal_False ); // Nicht auf Platte schreiben, das passiert am Ende automatisch 451*cdf0e10cSrcweir 452*cdf0e10cSrcweir return bCanClose; 453*cdf0e10cSrcweir } 454*cdf0e10cSrcweir } 455*cdf0e10cSrcweir 456*cdf0e10cSrcweir void BasicIDEShell::InitScrollBars() 457*cdf0e10cSrcweir { 458*cdf0e10cSrcweir aVScrollBar.SetLineSize( 300 ); 459*cdf0e10cSrcweir aVScrollBar.SetPageSize( 2000 ); 460*cdf0e10cSrcweir aHScrollBar.SetLineSize( 300 ); 461*cdf0e10cSrcweir aHScrollBar.SetPageSize( 2000 ); 462*cdf0e10cSrcweir aHScrollBar.Enable(); 463*cdf0e10cSrcweir aVScrollBar.Enable(); 464*cdf0e10cSrcweir aVScrollBar.Show(); 465*cdf0e10cSrcweir aHScrollBar.Show(); 466*cdf0e10cSrcweir aScrollBarBox.Show(); 467*cdf0e10cSrcweir } 468*cdf0e10cSrcweir 469*cdf0e10cSrcweir 470*cdf0e10cSrcweir 471*cdf0e10cSrcweir void BasicIDEShell::InitTabBar() 472*cdf0e10cSrcweir { 473*cdf0e10cSrcweir pTabBar->Enable(); 474*cdf0e10cSrcweir pTabBar->Show(); 475*cdf0e10cSrcweir pTabBar->SetSelectHdl( LINK( this, BasicIDEShell, TabBarHdl ) ); 476*cdf0e10cSrcweir } 477*cdf0e10cSrcweir 478*cdf0e10cSrcweir 479*cdf0e10cSrcweir Size __EXPORT BasicIDEShell::GetOptimalSizePixel() const 480*cdf0e10cSrcweir { 481*cdf0e10cSrcweir return Size( 400, 300 ); 482*cdf0e10cSrcweir } 483*cdf0e10cSrcweir 484*cdf0e10cSrcweir 485*cdf0e10cSrcweir 486*cdf0e10cSrcweir void __EXPORT BasicIDEShell::OuterResizePixel( const Point &rPos, const Size &rSize ) 487*cdf0e10cSrcweir { 488*cdf0e10cSrcweir // Adjust fliegt irgendwann raus... 489*cdf0e10cSrcweir AdjustPosSizePixel( rPos, rSize ); 490*cdf0e10cSrcweir } 491*cdf0e10cSrcweir 492*cdf0e10cSrcweir 493*cdf0e10cSrcweir IMPL_LINK_INLINE_START( BasicIDEShell, TabBarSplitHdl, TabBar *, pTBar ) 494*cdf0e10cSrcweir { 495*cdf0e10cSrcweir (void)pTBar; 496*cdf0e10cSrcweir bTabBarSplitted = sal_True; 497*cdf0e10cSrcweir ArrangeTabBar(); 498*cdf0e10cSrcweir 499*cdf0e10cSrcweir return 0; 500*cdf0e10cSrcweir } 501*cdf0e10cSrcweir IMPL_LINK_INLINE_END( BasicIDEShell, TabBarSplitHdl, TabBar *, pTBar ) 502*cdf0e10cSrcweir 503*cdf0e10cSrcweir 504*cdf0e10cSrcweir 505*cdf0e10cSrcweir IMPL_LINK( BasicIDEShell, TabBarHdl, TabBar *, pCurTabBar ) 506*cdf0e10cSrcweir { 507*cdf0e10cSrcweir sal_uInt16 nCurId = pCurTabBar->GetCurPageId(); 508*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.Get( nCurId ); 509*cdf0e10cSrcweir DBG_ASSERT( pWin, "Eintrag in TabBar passt zu keinem Fenster!" ); 510*cdf0e10cSrcweir SetCurWindow( pWin ); 511*cdf0e10cSrcweir 512*cdf0e10cSrcweir return 0; 513*cdf0e10cSrcweir } 514*cdf0e10cSrcweir 515*cdf0e10cSrcweir 516*cdf0e10cSrcweir 517*cdf0e10cSrcweir sal_Bool BasicIDEShell::NextPage( sal_Bool bPrev ) 518*cdf0e10cSrcweir { 519*cdf0e10cSrcweir sal_Bool bRet = sal_False; 520*cdf0e10cSrcweir sal_uInt16 nPos = pTabBar->GetPagePos( pTabBar->GetCurPageId() ); 521*cdf0e10cSrcweir 522*cdf0e10cSrcweir if ( bPrev ) 523*cdf0e10cSrcweir --nPos; 524*cdf0e10cSrcweir else 525*cdf0e10cSrcweir ++nPos; 526*cdf0e10cSrcweir 527*cdf0e10cSrcweir if ( nPos < pTabBar->GetPageCount() ) 528*cdf0e10cSrcweir { 529*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.Get( pTabBar->GetPageId( nPos ) ); 530*cdf0e10cSrcweir SetCurWindow( pWin, sal_True ); 531*cdf0e10cSrcweir bRet = sal_True; 532*cdf0e10cSrcweir } 533*cdf0e10cSrcweir 534*cdf0e10cSrcweir return bRet; 535*cdf0e10cSrcweir } 536*cdf0e10cSrcweir 537*cdf0e10cSrcweir 538*cdf0e10cSrcweir 539*cdf0e10cSrcweir void BasicIDEShell::ArrangeTabBar() 540*cdf0e10cSrcweir { 541*cdf0e10cSrcweir Size aSz( GetViewFrame()->GetWindow().GetOutputSizePixel() ); 542*cdf0e10cSrcweir long nBoxPos = aScrollBarBox.GetPosPixel().X() - 1; 543*cdf0e10cSrcweir long nPos = pTabBar->GetSplitSize(); 544*cdf0e10cSrcweir if ( nPos <= nBoxPos ) 545*cdf0e10cSrcweir { 546*cdf0e10cSrcweir Point aPnt( pTabBar->GetPosPixel() ); 547*cdf0e10cSrcweir long nH = aHScrollBar.GetSizePixel().Height(); 548*cdf0e10cSrcweir pTabBar->SetPosSizePixel( aPnt, Size( nPos, nH ) ); 549*cdf0e10cSrcweir long nScrlStart = aPnt.X() + nPos; 550*cdf0e10cSrcweir aHScrollBar.SetPosSizePixel( Point( nScrlStart, aPnt.Y() ), Size( nBoxPos - nScrlStart + 2, nH ) ); 551*cdf0e10cSrcweir aHScrollBar.Update(); 552*cdf0e10cSrcweir } 553*cdf0e10cSrcweir } 554*cdf0e10cSrcweir 555*cdf0e10cSrcweir 556*cdf0e10cSrcweir 557*cdf0e10cSrcweir ::svl::IUndoManager* BasicIDEShell::GetUndoManager() 558*cdf0e10cSrcweir { 559*cdf0e10cSrcweir ::svl::IUndoManager* pMgr = NULL; 560*cdf0e10cSrcweir if( pCurWin ) 561*cdf0e10cSrcweir pMgr = pCurWin->GetUndoManager(); 562*cdf0e10cSrcweir 563*cdf0e10cSrcweir return pMgr; 564*cdf0e10cSrcweir } 565*cdf0e10cSrcweir 566*cdf0e10cSrcweir 567*cdf0e10cSrcweir 568*cdf0e10cSrcweir void BasicIDEShell::ShowObjectDialog( sal_Bool bShow, sal_Bool bCreateOrDestroy ) 569*cdf0e10cSrcweir { 570*cdf0e10cSrcweir if ( bShow ) 571*cdf0e10cSrcweir { 572*cdf0e10cSrcweir if ( !pObjectCatalog && bCreateOrDestroy ) 573*cdf0e10cSrcweir { 574*cdf0e10cSrcweir pObjectCatalog = new ObjectCatalog( &GetViewFrame()->GetWindow() ); 575*cdf0e10cSrcweir // Position wird in BasicIDEData gemerkt und vom Dlg eingestellt 576*cdf0e10cSrcweir if ( pObjectCatalog ) 577*cdf0e10cSrcweir { 578*cdf0e10cSrcweir pObjectCatalog->SetCancelHdl( LINK( this, BasicIDEShell, ObjectDialogCancelHdl ) ); 579*cdf0e10cSrcweir BasicEntryDescriptor aDesc; 580*cdf0e10cSrcweir IDEBaseWindow* pCurWin_ = GetCurWindow(); 581*cdf0e10cSrcweir if ( pCurWin_ ) 582*cdf0e10cSrcweir aDesc = pCurWin_->CreateEntryDescriptor(); 583*cdf0e10cSrcweir pObjectCatalog->SetCurrentEntry( aDesc ); 584*cdf0e10cSrcweir } 585*cdf0e10cSrcweir } 586*cdf0e10cSrcweir 587*cdf0e10cSrcweir // Die allerletzten Aenderungen... 588*cdf0e10cSrcweir if ( pCurWin ) 589*cdf0e10cSrcweir pCurWin->StoreData(); 590*cdf0e10cSrcweir 591*cdf0e10cSrcweir if ( pObjectCatalog ) 592*cdf0e10cSrcweir { 593*cdf0e10cSrcweir pObjectCatalog->UpdateEntries(); 594*cdf0e10cSrcweir pObjectCatalog->Show(); 595*cdf0e10cSrcweir } 596*cdf0e10cSrcweir } 597*cdf0e10cSrcweir else if ( pObjectCatalog ) 598*cdf0e10cSrcweir { 599*cdf0e10cSrcweir pObjectCatalog->Hide(); 600*cdf0e10cSrcweir if ( bCreateOrDestroy ) 601*cdf0e10cSrcweir { 602*cdf0e10cSrcweir // Wegen OS/2-Focus-Problem pObjectCatalog vorm delete auf NULL 603*cdf0e10cSrcweir ObjectCatalog* pTemp = pObjectCatalog; 604*cdf0e10cSrcweir pObjectCatalog = 0; 605*cdf0e10cSrcweir delete pTemp; 606*cdf0e10cSrcweir } 607*cdf0e10cSrcweir } 608*cdf0e10cSrcweir } 609*cdf0e10cSrcweir 610*cdf0e10cSrcweir 611*cdf0e10cSrcweir 612*cdf0e10cSrcweir void __EXPORT BasicIDEShell::SFX_NOTIFY( SfxBroadcaster& rBC, const TypeId&, 613*cdf0e10cSrcweir const SfxHint& rHint, const TypeId& ) 614*cdf0e10cSrcweir { 615*cdf0e10cSrcweir if ( IDE_DLL()->GetShell() ) 616*cdf0e10cSrcweir { 617*cdf0e10cSrcweir if ( rHint.IsA( TYPE( SfxSimpleHint ) ) ) 618*cdf0e10cSrcweir { 619*cdf0e10cSrcweir switch ( ((SfxSimpleHint&)rHint).GetId() ) 620*cdf0e10cSrcweir { 621*cdf0e10cSrcweir case SFX_HINT_DYING: 622*cdf0e10cSrcweir { 623*cdf0e10cSrcweir EndListening( rBC, sal_True /* Alle abmelden */ ); 624*cdf0e10cSrcweir if ( pObjectCatalog ) 625*cdf0e10cSrcweir pObjectCatalog->UpdateEntries(); 626*cdf0e10cSrcweir } 627*cdf0e10cSrcweir break; 628*cdf0e10cSrcweir } 629*cdf0e10cSrcweir 630*cdf0e10cSrcweir if ( rHint.IsA( TYPE( SbxHint ) ) ) 631*cdf0e10cSrcweir { 632*cdf0e10cSrcweir SbxHint& rSbxHint = (SbxHint&)rHint; 633*cdf0e10cSrcweir sal_uLong nHintId = rSbxHint.GetId(); 634*cdf0e10cSrcweir if ( ( nHintId == SBX_HINT_BASICSTART ) || 635*cdf0e10cSrcweir ( nHintId == SBX_HINT_BASICSTOP ) ) 636*cdf0e10cSrcweir { 637*cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr(); 638*cdf0e10cSrcweir if ( pBindings ) 639*cdf0e10cSrcweir { 640*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICRUN ); 641*cdf0e10cSrcweir pBindings->Update( SID_BASICRUN ); 642*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICCOMPILE ); 643*cdf0e10cSrcweir pBindings->Update( SID_BASICCOMPILE ); 644*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSTEPOVER ); 645*cdf0e10cSrcweir pBindings->Update( SID_BASICSTEPOVER ); 646*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSTEPINTO ); 647*cdf0e10cSrcweir pBindings->Update( SID_BASICSTEPINTO ); 648*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSTEPOUT ); 649*cdf0e10cSrcweir pBindings->Update( SID_BASICSTEPOUT ); 650*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSTOP ); 651*cdf0e10cSrcweir pBindings->Update( SID_BASICSTOP ); 652*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_TOGGLEBRKPNT ); 653*cdf0e10cSrcweir pBindings->Update( SID_BASICIDE_TOGGLEBRKPNT ); 654*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_MANAGEBRKPNTS ); 655*cdf0e10cSrcweir pBindings->Update( SID_BASICIDE_MANAGEBRKPNTS ); 656*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_MODULEDLG ); 657*cdf0e10cSrcweir pBindings->Update( SID_BASICIDE_MODULEDLG ); 658*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICLOAD ); 659*cdf0e10cSrcweir pBindings->Update( SID_BASICLOAD ); 660*cdf0e10cSrcweir } 661*cdf0e10cSrcweir 662*cdf0e10cSrcweir if ( nHintId == SBX_HINT_BASICSTOP ) 663*cdf0e10cSrcweir { 664*cdf0e10cSrcweir // Nicht nur bei Error/Break oder explizitem anhalten, 665*cdf0e10cSrcweir // falls durch einen Programmierfehler das Update abgeschaltet ist. 666*cdf0e10cSrcweir BasicIDE::BasicStopped(); 667*cdf0e10cSrcweir UpdateModulWindowLayout( true ); // Leer machen... 668*cdf0e10cSrcweir if( m_pCurLocalizationMgr ) 669*cdf0e10cSrcweir m_pCurLocalizationMgr->handleBasicStopped(); 670*cdf0e10cSrcweir } 671*cdf0e10cSrcweir else if( m_pCurLocalizationMgr ) 672*cdf0e10cSrcweir { 673*cdf0e10cSrcweir m_pCurLocalizationMgr->handleBasicStarted(); 674*cdf0e10cSrcweir } 675*cdf0e10cSrcweir 676*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.First(); 677*cdf0e10cSrcweir while ( pWin ) 678*cdf0e10cSrcweir { 679*cdf0e10cSrcweir if ( nHintId == SBX_HINT_BASICSTART ) 680*cdf0e10cSrcweir pWin->BasicStarted(); 681*cdf0e10cSrcweir else 682*cdf0e10cSrcweir pWin->BasicStopped(); 683*cdf0e10cSrcweir pWin = aIDEWindowTable.Next(); 684*cdf0e10cSrcweir } 685*cdf0e10cSrcweir } 686*cdf0e10cSrcweir } 687*cdf0e10cSrcweir } 688*cdf0e10cSrcweir } 689*cdf0e10cSrcweir } 690*cdf0e10cSrcweir 691*cdf0e10cSrcweir 692*cdf0e10cSrcweir 693*cdf0e10cSrcweir void BasicIDEShell::CheckWindows() 694*cdf0e10cSrcweir { 695*cdf0e10cSrcweir sal_Bool bSetCurWindow = sal_False; 696*cdf0e10cSrcweir for ( sal_uLong nWin = 0; nWin < aIDEWindowTable.Count(); nWin++ ) 697*cdf0e10cSrcweir { 698*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.GetObject( nWin ); 699*cdf0e10cSrcweir if ( pWin->GetStatus() & BASWIN_TOBEKILLED ) 700*cdf0e10cSrcweir { 701*cdf0e10cSrcweir pWin->StoreData(); 702*cdf0e10cSrcweir if ( pWin == pCurWin ) 703*cdf0e10cSrcweir bSetCurWindow = sal_True; 704*cdf0e10cSrcweir RemoveWindow( pWin, sal_True, sal_False ); 705*cdf0e10cSrcweir nWin--; 706*cdf0e10cSrcweir } 707*cdf0e10cSrcweir } 708*cdf0e10cSrcweir if ( bSetCurWindow ) 709*cdf0e10cSrcweir SetCurWindow( FindApplicationWindow(), sal_True ); 710*cdf0e10cSrcweir } 711*cdf0e10cSrcweir 712*cdf0e10cSrcweir 713*cdf0e10cSrcweir 714*cdf0e10cSrcweir void BasicIDEShell::RemoveWindows( const ScriptDocument& rDocument, const String& rLibName, sal_Bool bDestroy ) 715*cdf0e10cSrcweir { 716*cdf0e10cSrcweir sal_Bool bChangeCurWindow = pCurWin ? sal_False : sal_True; 717*cdf0e10cSrcweir for ( sal_uLong nWin = 0; nWin < aIDEWindowTable.Count(); nWin++ ) 718*cdf0e10cSrcweir { 719*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.GetObject( nWin ); 720*cdf0e10cSrcweir if ( pWin->IsDocument( rDocument ) && pWin->GetLibName() == rLibName ) 721*cdf0e10cSrcweir { 722*cdf0e10cSrcweir if ( pWin == pCurWin ) 723*cdf0e10cSrcweir bChangeCurWindow = sal_True; 724*cdf0e10cSrcweir pWin->StoreData(); 725*cdf0e10cSrcweir RemoveWindow( pWin, bDestroy, sal_False ); 726*cdf0e10cSrcweir nWin--; 727*cdf0e10cSrcweir } 728*cdf0e10cSrcweir } 729*cdf0e10cSrcweir if ( bChangeCurWindow ) 730*cdf0e10cSrcweir SetCurWindow( FindApplicationWindow(), sal_True ); 731*cdf0e10cSrcweir } 732*cdf0e10cSrcweir 733*cdf0e10cSrcweir 734*cdf0e10cSrcweir 735*cdf0e10cSrcweir void BasicIDEShell::UpdateWindows() 736*cdf0e10cSrcweir { 737*cdf0e10cSrcweir // Alle Fenster, die nicht angezeigt werden duerfen, entfernen 738*cdf0e10cSrcweir sal_Bool bChangeCurWindow = pCurWin ? sal_False : sal_True; 739*cdf0e10cSrcweir if ( m_aCurLibName.Len() ) 740*cdf0e10cSrcweir { 741*cdf0e10cSrcweir for ( sal_uLong nWin = 0; nWin < aIDEWindowTable.Count(); nWin++ ) 742*cdf0e10cSrcweir { 743*cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.GetObject( nWin ); 744*cdf0e10cSrcweir if ( !pWin->IsDocument( m_aCurDocument ) || pWin->GetLibName() != m_aCurLibName ) 745*cdf0e10cSrcweir { 746*cdf0e10cSrcweir if ( pWin == pCurWin ) 747*cdf0e10cSrcweir bChangeCurWindow = sal_True; 748*cdf0e10cSrcweir pWin->StoreData(); 749*cdf0e10cSrcweir // Die Abfrage auf RUNNING verhindert den Absturz, wenn in Reschedule. 750*cdf0e10cSrcweir // Fenster bleibt erstmal stehen, spaeter sowieso mal umstellen, 751*cdf0e10cSrcweir // dass Fenster nur als Hidden markiert werden und nicht 752*cdf0e10cSrcweir // geloescht. 753*cdf0e10cSrcweir if ( !(pWin->GetStatus() & ( BASWIN_TOBEKILLED | BASWIN_RUNNINGBASIC | BASWIN_SUSPENDED ) ) ) 754*cdf0e10cSrcweir { 755*cdf0e10cSrcweir RemoveWindow( pWin, sal_False, sal_False ); 756*cdf0e10cSrcweir nWin--; 757*cdf0e10cSrcweir } 758*cdf0e10cSrcweir } 759*cdf0e10cSrcweir } 760*cdf0e10cSrcweir } 761*cdf0e10cSrcweir 762*cdf0e10cSrcweir if ( bCreatingWindow ) 763*cdf0e10cSrcweir return; 764*cdf0e10cSrcweir 765*cdf0e10cSrcweir IDEBaseWindow* pNextActiveWindow = 0; 766*cdf0e10cSrcweir 767*cdf0e10cSrcweir // Alle anzuzeigenden Fenster anzeigen 768*cdf0e10cSrcweir ScriptDocuments aDocuments( ScriptDocument::getAllScriptDocuments( ScriptDocument::AllWithApplication ) ); 769*cdf0e10cSrcweir for ( ScriptDocuments::const_iterator doc = aDocuments.begin(); 770*cdf0e10cSrcweir doc != aDocuments.end(); 771*cdf0e10cSrcweir ++doc 772*cdf0e10cSrcweir ) 773*cdf0e10cSrcweir { 774*cdf0e10cSrcweir StartListening( *doc->getBasicManager(), sal_True /* Nur einmal anmelden */ ); 775*cdf0e10cSrcweir 776*cdf0e10cSrcweir // libraries 777*cdf0e10cSrcweir Sequence< ::rtl::OUString > aLibNames( doc->getLibraryNames() ); 778*cdf0e10cSrcweir sal_Int32 nLibCount = aLibNames.getLength(); 779*cdf0e10cSrcweir const ::rtl::OUString* pLibNames = aLibNames.getConstArray(); 780*cdf0e10cSrcweir 781*cdf0e10cSrcweir for ( sal_Int32 i = 0 ; i < nLibCount ; i++ ) 782*cdf0e10cSrcweir { 783*cdf0e10cSrcweir String aLibName = pLibNames[ i ]; 784*cdf0e10cSrcweir 785*cdf0e10cSrcweir if ( !m_aCurLibName.Len() || ( *doc == m_aCurDocument && aLibName == m_aCurLibName ) ) 786*cdf0e10cSrcweir { 787*cdf0e10cSrcweir // check, if library is password protected and not verified 788*cdf0e10cSrcweir sal_Bool bProtected = sal_False; 789*cdf0e10cSrcweir Reference< script::XLibraryContainer > xModLibContainer( doc->getLibraryContainer( E_SCRIPTS ) ); 790*cdf0e10cSrcweir if ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) ) 791*cdf0e10cSrcweir { 792*cdf0e10cSrcweir Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY ); 793*cdf0e10cSrcweir if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aLibName ) && !xPasswd->isLibraryPasswordVerified( aLibName ) ) 794*cdf0e10cSrcweir { 795*cdf0e10cSrcweir bProtected = sal_True; 796*cdf0e10cSrcweir } 797*cdf0e10cSrcweir } 798*cdf0e10cSrcweir 799*cdf0e10cSrcweir if ( !bProtected ) 800*cdf0e10cSrcweir { 801*cdf0e10cSrcweir LibInfoItem* pLibInfoItem = 0; 802*cdf0e10cSrcweir BasicIDEData* pData = IDE_DLL()->GetExtraData(); 803*cdf0e10cSrcweir if ( pData ) 804*cdf0e10cSrcweir pLibInfoItem = pData->GetLibInfos().GetInfo( LibInfoKey( *doc, aLibName ) ); 805*cdf0e10cSrcweir 806*cdf0e10cSrcweir // modules 807*cdf0e10cSrcweir if ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) ) 808*cdf0e10cSrcweir { 809*cdf0e10cSrcweir StarBASIC* pLib = doc->getBasicManager()->GetLib( aLibName ); 810*cdf0e10cSrcweir if ( pLib ) 811*cdf0e10cSrcweir ImplStartListening( pLib ); 812*cdf0e10cSrcweir 813*cdf0e10cSrcweir try 814*cdf0e10cSrcweir { 815*cdf0e10cSrcweir Sequence< ::rtl::OUString > aModNames( doc->getObjectNames( E_SCRIPTS, aLibName ) ); 816*cdf0e10cSrcweir sal_Int32 nModCount = aModNames.getLength(); 817*cdf0e10cSrcweir const ::rtl::OUString* pModNames = aModNames.getConstArray(); 818*cdf0e10cSrcweir 819*cdf0e10cSrcweir for ( sal_Int32 j = 0 ; j < nModCount ; j++ ) 820*cdf0e10cSrcweir { 821*cdf0e10cSrcweir String aModName = pModNames[ j ]; 822*cdf0e10cSrcweir ModulWindow* pWin = FindBasWin( *doc, aLibName, aModName, sal_False ); 823*cdf0e10cSrcweir if ( !pWin ) 824*cdf0e10cSrcweir pWin = CreateBasWin( *doc, aLibName, aModName ); 825*cdf0e10cSrcweir if ( !pNextActiveWindow && pLibInfoItem && pLibInfoItem->GetCurrentName() == aModName && 826*cdf0e10cSrcweir pLibInfoItem->GetCurrentType() == BASICIDE_TYPE_MODULE ) 827*cdf0e10cSrcweir { 828*cdf0e10cSrcweir pNextActiveWindow = (IDEBaseWindow*)pWin; 829*cdf0e10cSrcweir } 830*cdf0e10cSrcweir } 831*cdf0e10cSrcweir } 832*cdf0e10cSrcweir catch ( container::NoSuchElementException& ) 833*cdf0e10cSrcweir { 834*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 835*cdf0e10cSrcweir } 836*cdf0e10cSrcweir } 837*cdf0e10cSrcweir 838*cdf0e10cSrcweir // dialogs 839*cdf0e10cSrcweir Reference< script::XLibraryContainer > xDlgLibContainer( doc->getLibraryContainer( E_DIALOGS ) ); 840*cdf0e10cSrcweir if ( xDlgLibContainer.is() && xDlgLibContainer->hasByName( aLibName ) ) 841*cdf0e10cSrcweir { 842*cdf0e10cSrcweir try 843*cdf0e10cSrcweir { 844*cdf0e10cSrcweir Sequence< ::rtl::OUString > aDlgNames = doc->getObjectNames( E_DIALOGS, aLibName ); 845*cdf0e10cSrcweir sal_Int32 nDlgCount = aDlgNames.getLength(); 846*cdf0e10cSrcweir const ::rtl::OUString* pDlgNames = aDlgNames.getConstArray(); 847*cdf0e10cSrcweir 848*cdf0e10cSrcweir for ( sal_Int32 j = 0 ; j < nDlgCount ; j++ ) 849*cdf0e10cSrcweir { 850*cdf0e10cSrcweir String aDlgName = pDlgNames[ j ]; 851*cdf0e10cSrcweir // this find only looks for non-suspended windows; 852*cdf0e10cSrcweir // suspended windows are handled in CreateDlgWin 853*cdf0e10cSrcweir DialogWindow* pWin = FindDlgWin( *doc, aLibName, aDlgName, sal_False ); 854*cdf0e10cSrcweir if ( !pWin ) 855*cdf0e10cSrcweir pWin = CreateDlgWin( *doc, aLibName, aDlgName ); 856*cdf0e10cSrcweir if ( !pNextActiveWindow && pLibInfoItem && pLibInfoItem->GetCurrentName() == aDlgName && 857*cdf0e10cSrcweir pLibInfoItem->GetCurrentType() == BASICIDE_TYPE_DIALOG ) 858*cdf0e10cSrcweir { 859*cdf0e10cSrcweir pNextActiveWindow = (IDEBaseWindow*)pWin; 860*cdf0e10cSrcweir } 861*cdf0e10cSrcweir } 862*cdf0e10cSrcweir } 863*cdf0e10cSrcweir catch ( container::NoSuchElementException& ) 864*cdf0e10cSrcweir { 865*cdf0e10cSrcweir DBG_UNHANDLED_EXCEPTION(); 866*cdf0e10cSrcweir } 867*cdf0e10cSrcweir } 868*cdf0e10cSrcweir } 869*cdf0e10cSrcweir } 870*cdf0e10cSrcweir } 871*cdf0e10cSrcweir } 872*cdf0e10cSrcweir 873*cdf0e10cSrcweir if ( bChangeCurWindow ) 874*cdf0e10cSrcweir { 875*cdf0e10cSrcweir if ( !pNextActiveWindow ) 876*cdf0e10cSrcweir pNextActiveWindow = FindApplicationWindow(); 877*cdf0e10cSrcweir SetCurWindow( pNextActiveWindow, sal_True ); 878*cdf0e10cSrcweir } 879*cdf0e10cSrcweir } 880*cdf0e10cSrcweir 881*cdf0e10cSrcweir void BasicIDEShell::RemoveWindow( IDEBaseWindow* pWindow_, sal_Bool bDestroy, sal_Bool bAllowChangeCurWindow ) 882*cdf0e10cSrcweir { 883*cdf0e10cSrcweir DBG_ASSERT( pWindow_, "Kann keinen NULL-Pointer loeschen!" ); 884*cdf0e10cSrcweir sal_uLong nKey = aIDEWindowTable.GetKey( pWindow_ ); 885*cdf0e10cSrcweir pTabBar->RemovePage( (sal_uInt16)nKey ); 886*cdf0e10cSrcweir aIDEWindowTable.Remove( nKey ); 887*cdf0e10cSrcweir if ( pWindow_ == pCurWin ) 888*cdf0e10cSrcweir { 889*cdf0e10cSrcweir if ( bAllowChangeCurWindow ) 890*cdf0e10cSrcweir SetCurWindow( FindApplicationWindow(), sal_True ); 891*cdf0e10cSrcweir else 892*cdf0e10cSrcweir SetCurWindow( NULL, sal_False ); 893*cdf0e10cSrcweir } 894*cdf0e10cSrcweir if ( bDestroy ) 895*cdf0e10cSrcweir { 896*cdf0e10cSrcweir if ( !( pWindow_->GetStatus() & BASWIN_INRESCHEDULE ) ) 897*cdf0e10cSrcweir { 898*cdf0e10cSrcweir delete pWindow_; 899*cdf0e10cSrcweir } 900*cdf0e10cSrcweir else 901*cdf0e10cSrcweir { 902*cdf0e10cSrcweir pWindow_->AddStatus( BASWIN_TOBEKILLED ); 903*cdf0e10cSrcweir pWindow_->Hide(); 904*cdf0e10cSrcweir // In normal mode stop basic in windows to be deleted 905*cdf0e10cSrcweir // In VBA stop basic only if the running script is trying to delete 906*cdf0e10cSrcweir // its parent module 907*cdf0e10cSrcweir bool bStop = true; 908*cdf0e10cSrcweir if ( pWindow_->GetDocument().isInVBAMode() ) 909*cdf0e10cSrcweir { 910*cdf0e10cSrcweir SbModule* pMod = StarBASIC::GetActiveModule(); 911*cdf0e10cSrcweir if ( !pMod || ( pMod && ( pMod->GetName() != pWindow_->GetName() ) ) ) 912*cdf0e10cSrcweir bStop = false; 913*cdf0e10cSrcweir } 914*cdf0e10cSrcweir if ( bStop ) 915*cdf0e10cSrcweir { 916*cdf0e10cSrcweir StarBASIC::Stop(); 917*cdf0e10cSrcweir // Es kommt kein Notify... 918*cdf0e10cSrcweir pWindow_->BasicStopped(); 919*cdf0e10cSrcweir } 920*cdf0e10cSrcweir aIDEWindowTable.Insert( nKey, pWindow_ ); // wieder einhaegen 921*cdf0e10cSrcweir } 922*cdf0e10cSrcweir } 923*cdf0e10cSrcweir else 924*cdf0e10cSrcweir { 925*cdf0e10cSrcweir pWindow_->Hide(); 926*cdf0e10cSrcweir pWindow_->AddStatus( BASWIN_SUSPENDED ); 927*cdf0e10cSrcweir pWindow_->Deactivating(); 928*cdf0e10cSrcweir aIDEWindowTable.Insert( nKey, pWindow_ ); // wieder einhaegen 929*cdf0e10cSrcweir } 930*cdf0e10cSrcweir 931*cdf0e10cSrcweir } 932*cdf0e10cSrcweir 933*cdf0e10cSrcweir 934*cdf0e10cSrcweir 935*cdf0e10cSrcweir sal_uInt16 BasicIDEShell::InsertWindowInTable( IDEBaseWindow* pNewWin ) 936*cdf0e10cSrcweir { 937*cdf0e10cSrcweir // Eigentlich prueffen, 938*cdf0e10cSrcweir nCurKey++; 939*cdf0e10cSrcweir aIDEWindowTable.Insert( nCurKey, pNewWin ); 940*cdf0e10cSrcweir return nCurKey; 941*cdf0e10cSrcweir } 942*cdf0e10cSrcweir 943*cdf0e10cSrcweir 944*cdf0e10cSrcweir 945*cdf0e10cSrcweir void BasicIDEShell::InvalidateBasicIDESlots() 946*cdf0e10cSrcweir { 947*cdf0e10cSrcweir // Nur die, die eine optische Auswirkung haben... 948*cdf0e10cSrcweir 949*cdf0e10cSrcweir if ( IDE_DLL()->GetShell() ) 950*cdf0e10cSrcweir { 951*cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr(); 952*cdf0e10cSrcweir if ( pBindings ) 953*cdf0e10cSrcweir { 954*cdf0e10cSrcweir pBindings->Invalidate( SID_UNDO ); 955*cdf0e10cSrcweir pBindings->Invalidate( SID_REDO ); 956*cdf0e10cSrcweir pBindings->Invalidate( SID_SAVEDOC ); 957*cdf0e10cSrcweir pBindings->Invalidate( SID_SIGNATURE ); 958*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_CHOOSEMACRO ); 959*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_MODULEDLG ); 960*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_OBJCAT ); 961*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSTOP ); 962*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICRUN ); 963*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICCOMPILE ); 964*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICLOAD ); 965*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSAVEAS ); 966*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_MATCHGROUP ); 967*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSTEPINTO ); 968*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSTEPOVER ); 969*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICSTEPOUT ); 970*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_TOGGLEBRKPNT ); 971*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_MANAGEBRKPNTS ); 972*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_ADDWATCH ); 973*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_REMOVEWATCH ); 974*cdf0e10cSrcweir pBindings->Invalidate( SID_CHOOSE_CONTROLS ); 975*cdf0e10cSrcweir pBindings->Invalidate( SID_PRINTDOC ); 976*cdf0e10cSrcweir pBindings->Invalidate( SID_PRINTDOCDIRECT ); 977*cdf0e10cSrcweir pBindings->Invalidate( SID_SETUPPRINTER ); 978*cdf0e10cSrcweir pBindings->Invalidate( SID_DIALOG_TESTMODE ); 979*cdf0e10cSrcweir 980*cdf0e10cSrcweir pBindings->Invalidate( SID_DOC_MODIFIED ); 981*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_STAT_TITLE ); 982*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_STAT_POS ); 983*cdf0e10cSrcweir pBindings->Invalidate( SID_ATTR_INSERT ); 984*cdf0e10cSrcweir pBindings->Invalidate( SID_ATTR_SIZE ); 985*cdf0e10cSrcweir } 986*cdf0e10cSrcweir } 987*cdf0e10cSrcweir } 988*cdf0e10cSrcweir 989*cdf0e10cSrcweir void BasicIDEShell::EnableScrollbars( sal_Bool bEnable ) 990*cdf0e10cSrcweir { 991*cdf0e10cSrcweir if ( bEnable ) 992*cdf0e10cSrcweir { 993*cdf0e10cSrcweir aHScrollBar.Enable(); 994*cdf0e10cSrcweir aVScrollBar.Enable(); 995*cdf0e10cSrcweir } 996*cdf0e10cSrcweir else 997*cdf0e10cSrcweir { 998*cdf0e10cSrcweir aHScrollBar.Disable(); 999*cdf0e10cSrcweir aVScrollBar.Disable(); 1000*cdf0e10cSrcweir } 1001*cdf0e10cSrcweir } 1002*cdf0e10cSrcweir 1003*cdf0e10cSrcweir void BasicIDEShell::SetCurLib( const ScriptDocument& rDocument, String aLibName, bool bUpdateWindows, bool bCheck ) 1004*cdf0e10cSrcweir { 1005*cdf0e10cSrcweir if ( !bCheck || ( rDocument != m_aCurDocument || aLibName != m_aCurLibName ) ) 1006*cdf0e10cSrcweir { 1007*cdf0e10cSrcweir ContainerListenerImpl* pListener = static_cast< ContainerListenerImpl* >( m_xLibListener.get() ); 1008*cdf0e10cSrcweir 1009*cdf0e10cSrcweir if ( pListener ) 1010*cdf0e10cSrcweir pListener->removeContainerListener( m_aCurDocument, m_aCurLibName ); 1011*cdf0e10cSrcweir 1012*cdf0e10cSrcweir m_aCurDocument = rDocument; 1013*cdf0e10cSrcweir 1014*cdf0e10cSrcweir pListener->addContainerListener( m_aCurDocument, aLibName ); 1015*cdf0e10cSrcweir 1016*cdf0e10cSrcweir m_aCurLibName = aLibName; 1017*cdf0e10cSrcweir 1018*cdf0e10cSrcweir if ( bUpdateWindows ) 1019*cdf0e10cSrcweir UpdateWindows(); 1020*cdf0e10cSrcweir 1021*cdf0e10cSrcweir SetMDITitle(); 1022*cdf0e10cSrcweir 1023*cdf0e10cSrcweir SetCurLibForLocalization( rDocument, aLibName ); 1024*cdf0e10cSrcweir 1025*cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr(); 1026*cdf0e10cSrcweir if ( pBindings ) 1027*cdf0e10cSrcweir { 1028*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_LIBSELECTOR ); 1029*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_CURRENT_LANG ); 1030*cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_MANAGE_LANG ); 1031*cdf0e10cSrcweir } 1032*cdf0e10cSrcweir } 1033*cdf0e10cSrcweir } 1034*cdf0e10cSrcweir 1035*cdf0e10cSrcweir void BasicIDEShell::SetCurLibForLocalization( const ScriptDocument& rDocument, String aLibName ) 1036*cdf0e10cSrcweir { 1037*cdf0e10cSrcweir // Create LocalizationMgr 1038*cdf0e10cSrcweir delete m_pCurLocalizationMgr; 1039*cdf0e10cSrcweir Reference< resource::XStringResourceManager > xStringResourceManager; 1040*cdf0e10cSrcweir try 1041*cdf0e10cSrcweir { 1042*cdf0e10cSrcweir if( aLibName.Len() ) 1043*cdf0e10cSrcweir { 1044*cdf0e10cSrcweir Reference< container::XNameContainer > xDialogLib( rDocument.getLibrary( E_DIALOGS, aLibName, sal_True ) ); 1045*cdf0e10cSrcweir xStringResourceManager = LocalizationMgr::getStringResourceFromDialogLibrary( xDialogLib ); 1046*cdf0e10cSrcweir } 1047*cdf0e10cSrcweir } 1048*cdf0e10cSrcweir catch ( container::NoSuchElementException& ) 1049*cdf0e10cSrcweir {} 1050*cdf0e10cSrcweir m_pCurLocalizationMgr = new LocalizationMgr 1051*cdf0e10cSrcweir ( this, rDocument, aLibName, xStringResourceManager ); 1052*cdf0e10cSrcweir 1053*cdf0e10cSrcweir m_pCurLocalizationMgr->handleTranslationbar(); 1054*cdf0e10cSrcweir } 1055*cdf0e10cSrcweir 1056*cdf0e10cSrcweir void BasicIDEShell::ImplStartListening( StarBASIC* pBasic ) 1057*cdf0e10cSrcweir { 1058*cdf0e10cSrcweir StartListening( pBasic->GetBroadcaster(), sal_True /* Nur einmal anmelden */ ); 1059*cdf0e10cSrcweir } 1060*cdf0e10cSrcweir 1061*cdf0e10cSrcweir 1062