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