1*31598a22SAndrew Rist /**************************************************************
2cdf0e10cSrcweir *
3*31598a22SAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one
4*31598a22SAndrew Rist * or more contributor license agreements. See the NOTICE file
5*31598a22SAndrew Rist * distributed with this work for additional information
6*31598a22SAndrew Rist * regarding copyright ownership. The ASF licenses this file
7*31598a22SAndrew Rist * to you under the Apache License, Version 2.0 (the
8*31598a22SAndrew Rist * "License"); you may not use this file except in compliance
9*31598a22SAndrew Rist * with the License. You may obtain a copy of the License at
10*31598a22SAndrew Rist *
11*31598a22SAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0
12*31598a22SAndrew Rist *
13*31598a22SAndrew Rist * Unless required by applicable law or agreed to in writing,
14*31598a22SAndrew Rist * software distributed under the License is distributed on an
15*31598a22SAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16*31598a22SAndrew Rist * KIND, either express or implied. See the License for the
17*31598a22SAndrew Rist * specific language governing permissions and limitations
18*31598a22SAndrew Rist * under the License.
19*31598a22SAndrew Rist *
20*31598a22SAndrew Rist *************************************************************/
21*31598a22SAndrew Rist
22*31598a22SAndrew Rist
23cdf0e10cSrcweir
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_basctl.hxx"
26cdf0e10cSrcweir
27cdf0e10cSrcweir #include "docsignature.hxx"
28cdf0e10cSrcweir
29cdf0e10cSrcweir #define GLOBALOVERFLOW2
30cdf0e10cSrcweir #include <basic/sbx.hxx>
31cdf0e10cSrcweir #define _SVSTDARR_STRINGS
32cdf0e10cSrcweir #include <svl/svstdarr.hxx>
33cdf0e10cSrcweir #include <ide_pch.hxx>
34cdf0e10cSrcweir
35cdf0e10cSrcweir #define _SOLAR__PRIVATE 1
36cdf0e10cSrcweir
37cdf0e10cSrcweir // #define _SVX_NOIDERESIDS
38cdf0e10cSrcweir
39cdf0e10cSrcweir #define SI_NOCONTROL
40cdf0e10cSrcweir #define SI_NOSBXCONTROLS
41cdf0e10cSrcweir #define SI_NOITEMS
42cdf0e10cSrcweir #define SI_NODRW
43cdf0e10cSrcweir #define _VCTRLS_HXX
44cdf0e10cSrcweir
45cdf0e10cSrcweir #include <basidesh.hrc>
46cdf0e10cSrcweir #include <basidesh.hxx>
47cdf0e10cSrcweir #include <baside2.hxx>
48cdf0e10cSrcweir #include <baside3.hxx>
49cdf0e10cSrcweir #include <basobj.hxx>
50cdf0e10cSrcweir #include <iderdll.hxx>
51cdf0e10cSrcweir #include <iderdll2.hxx>
52cdf0e10cSrcweir #include <sbxitem.hxx>
53cdf0e10cSrcweir #include <managelang.hxx>
54cdf0e10cSrcweir #include <localizationmgr.hxx>
55cdf0e10cSrcweir #include <helpid.hrc>
56cdf0e10cSrcweir
57cdf0e10cSrcweir #include <svtools/texteng.hxx>
58cdf0e10cSrcweir #include <svtools/textview.hxx>
59cdf0e10cSrcweir #include <svtools/xtextedt.hxx>
60cdf0e10cSrcweir #include <tools/urlobj.hxx>
61cdf0e10cSrcweir #include <tools/diagnose_ex.h>
62cdf0e10cSrcweir #include <sfx2/minfitem.hxx>
63cdf0e10cSrcweir #include <sfx2/docfile.hxx>
64cdf0e10cSrcweir #include <com/sun/star/task/XStatusIndicator.hpp>
65cdf0e10cSrcweir #include <com/sun/star/task/XStatusIndicatorFactory.hpp>
66cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainer.hpp>
67cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainerPassword.hpp>
68cdf0e10cSrcweir #include <com/sun/star/frame/XDispatchProvider.hpp>
69cdf0e10cSrcweir #include <com/sun/star/frame/XLayoutManager.hpp>
70cdf0e10cSrcweir
71cdf0e10cSrcweir #include <algorithm>
72cdf0e10cSrcweir #include <memory>
73cdf0e10cSrcweir
74cdf0e10cSrcweir
75cdf0e10cSrcweir using namespace ::com::sun::star;
76cdf0e10cSrcweir using namespace ::com::sun::star::uno;
77cdf0e10cSrcweir using namespace ::com::sun::star::frame;
78cdf0e10cSrcweir
79cdf0e10cSrcweir class SvxSearchItem;
80cdf0e10cSrcweir
81cdf0e10cSrcweir // Egal was, einfach ans aktuelle Fenster:
ExecuteCurrent(SfxRequest & rReq)82cdf0e10cSrcweir void __EXPORT BasicIDEShell::ExecuteCurrent( SfxRequest& rReq )
83cdf0e10cSrcweir {
84cdf0e10cSrcweir if ( !pCurWin )
85cdf0e10cSrcweir return;
86cdf0e10cSrcweir
87cdf0e10cSrcweir switch ( rReq.GetSlot() )
88cdf0e10cSrcweir {
89cdf0e10cSrcweir case SID_BASICIDE_HIDECURPAGE:
90cdf0e10cSrcweir {
91cdf0e10cSrcweir pCurWin->StoreData();
92cdf0e10cSrcweir RemoveWindow( pCurWin, sal_False );
93cdf0e10cSrcweir }
94cdf0e10cSrcweir break;
95cdf0e10cSrcweir case SID_BASICIDE_DELETECURRENT:
96cdf0e10cSrcweir {
97cdf0e10cSrcweir ScriptDocument aDocument( pCurWin->GetDocument() );
98cdf0e10cSrcweir String aLibName = pCurWin->GetLibName();
99cdf0e10cSrcweir String aName = pCurWin->GetName();
100cdf0e10cSrcweir
101cdf0e10cSrcweir if ( pCurWin->ISA( ModulWindow ) )
102cdf0e10cSrcweir {
103cdf0e10cSrcweir // module
104cdf0e10cSrcweir if ( QueryDelModule( aName, pCurWin ) )
105cdf0e10cSrcweir {
106cdf0e10cSrcweir if ( aDocument.removeModule( aLibName, aName ) )
107cdf0e10cSrcweir {
108cdf0e10cSrcweir BasicIDE::MarkDocumentModified( aDocument );
109cdf0e10cSrcweir }
110cdf0e10cSrcweir }
111cdf0e10cSrcweir }
112cdf0e10cSrcweir else
113cdf0e10cSrcweir {
114cdf0e10cSrcweir // dialog
115cdf0e10cSrcweir if ( QueryDelDialog( aName, pCurWin ) )
116cdf0e10cSrcweir {
117cdf0e10cSrcweir if ( BasicIDE::RemoveDialog( aDocument, aLibName, aName ) )
118cdf0e10cSrcweir {
119cdf0e10cSrcweir RemoveWindow( pCurWin, sal_True );
120cdf0e10cSrcweir BasicIDE::MarkDocumentModified( aDocument );
121cdf0e10cSrcweir }
122cdf0e10cSrcweir }
123cdf0e10cSrcweir }
124cdf0e10cSrcweir }
125cdf0e10cSrcweir break;
126cdf0e10cSrcweir case SID_BASICIDE_RENAMECURRENT:
127cdf0e10cSrcweir {
128cdf0e10cSrcweir pTabBar->StartEditMode( pTabBar->GetCurPageId() );
129cdf0e10cSrcweir }
130cdf0e10cSrcweir break;
131cdf0e10cSrcweir case FID_SEARCH_NOW:
132cdf0e10cSrcweir {
133cdf0e10cSrcweir if ( pCurWin->ISA( ModulWindow ) )
134cdf0e10cSrcweir {
135cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
136cdf0e10cSrcweir const SfxItemSet* pArgs = rReq.GetArgs();
137cdf0e10cSrcweir // Leider kenne ich die ID nicht:
138cdf0e10cSrcweir sal_uInt16 nWhich = pArgs->GetWhichByPos( 0 );
139cdf0e10cSrcweir DBG_ASSERT( nWhich, "Wich fuer SearchItem ?" );
140cdf0e10cSrcweir const SfxPoolItem& rItem = pArgs->Get( nWhich );
141cdf0e10cSrcweir DBG_ASSERT( rItem.ISA( SvxSearchItem ), "Kein Searchitem!" );
142cdf0e10cSrcweir if ( rItem.ISA( SvxSearchItem ) )
143cdf0e10cSrcweir {
144cdf0e10cSrcweir // Item wegen der Einstellungen merken...
145cdf0e10cSrcweir IDE_DLL()->GetExtraData()->SetSearchItem( (const SvxSearchItem&)rItem );
146cdf0e10cSrcweir sal_uInt16 nFound = 0;
147cdf0e10cSrcweir sal_Bool bCanceled = sal_False;
148cdf0e10cSrcweir if ( ((const SvxSearchItem&)rItem).GetCommand() == SVX_SEARCHCMD_REPLACE_ALL )
149cdf0e10cSrcweir {
150cdf0e10cSrcweir sal_uInt16 nActModWindows = 0;
151cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.First();
152cdf0e10cSrcweir while ( pWin )
153cdf0e10cSrcweir {
154cdf0e10cSrcweir if ( !pWin->IsSuspended() && pWin->IsA( TYPE( ModulWindow ) ) )
155cdf0e10cSrcweir nActModWindows++;
156cdf0e10cSrcweir pWin = aIDEWindowTable.Next();
157cdf0e10cSrcweir }
158cdf0e10cSrcweir
159cdf0e10cSrcweir if ( ( nActModWindows <= 1 ) || ( !((const SvxSearchItem&)rItem).GetSelection() && QueryBox( pCurWin, WB_YES_NO|WB_DEF_YES, String( IDEResId( RID_STR_SEARCHALLMODULES ) ) ).Execute() == RET_YES ) )
160cdf0e10cSrcweir {
161cdf0e10cSrcweir pWin = aIDEWindowTable.First();
162cdf0e10cSrcweir while ( pWin )
163cdf0e10cSrcweir {
164cdf0e10cSrcweir if ( !pWin->IsSuspended() && pWin->IsA( TYPE( ModulWindow ) ) )
165cdf0e10cSrcweir nFound = nFound + ((ModulWindow*)pWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem );
166cdf0e10cSrcweir pWin = aIDEWindowTable.Next();
167cdf0e10cSrcweir }
168cdf0e10cSrcweir }
169cdf0e10cSrcweir else
170cdf0e10cSrcweir nFound = ((ModulWindow*)pCurWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem );
171cdf0e10cSrcweir
172cdf0e10cSrcweir IDEResId nId( RID_STR_SEARCHREPLACES );
173cdf0e10cSrcweir String aReplStr( nId );
174cdf0e10cSrcweir aReplStr.SearchAndReplace( String( RTL_CONSTASCII_USTRINGPARAM( "XX" ) ), String::CreateFromInt32( nFound ) );
175cdf0e10cSrcweir InfoBox( pCurWin, aReplStr ).Execute();
176cdf0e10cSrcweir }
177cdf0e10cSrcweir else
178cdf0e10cSrcweir {
179cdf0e10cSrcweir nFound = ((ModulWindow*)pCurWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem );
180cdf0e10cSrcweir if ( !nFound && !((const SvxSearchItem&)rItem).GetSelection() )
181cdf0e10cSrcweir {
182cdf0e10cSrcweir // Andere Module durchsuchen...
183cdf0e10cSrcweir sal_Bool bChangeCurWindow = sal_False;
184cdf0e10cSrcweir aIDEWindowTable.Seek( pCurWin );
185cdf0e10cSrcweir // Erstmal beim naechsten Anfangen, ggf. spaeter von vorne
186cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.Next();
187cdf0e10cSrcweir sal_Bool bSearchedFromStart = sal_False;
188cdf0e10cSrcweir while ( !nFound && !bCanceled && ( pWin || !bSearchedFromStart ) )
189cdf0e10cSrcweir {
190cdf0e10cSrcweir if ( !pWin )
191cdf0e10cSrcweir {
192cdf0e10cSrcweir SfxViewFrame* pViewFrame = GetViewFrame();
193cdf0e10cSrcweir SfxChildWindow* pChildWin = pViewFrame ? pViewFrame->GetChildWindow( SID_SEARCH_DLG ) : NULL;
194cdf0e10cSrcweir Window* pParent = pChildWin ? pChildWin->GetWindow() : NULL;
195cdf0e10cSrcweir QueryBox aQuery( pParent, WB_YES_NO|WB_DEF_YES, String( IDEResId( RID_STR_SEARCHFROMSTART ) ) );
196cdf0e10cSrcweir if ( aQuery.Execute() == RET_YES )
197cdf0e10cSrcweir {
198cdf0e10cSrcweir pWin = aIDEWindowTable.First();
199cdf0e10cSrcweir bSearchedFromStart = sal_True;
200cdf0e10cSrcweir }
201cdf0e10cSrcweir else
202cdf0e10cSrcweir bCanceled = sal_True;
203cdf0e10cSrcweir }
204cdf0e10cSrcweir
205cdf0e10cSrcweir if ( pWin && !pWin->IsSuspended() && pWin->IsA( TYPE( ModulWindow ) ) )
206cdf0e10cSrcweir {
207cdf0e10cSrcweir if ( pWin != pCurWin )
208cdf0e10cSrcweir {
209cdf0e10cSrcweir // Groesse einstellen, damit die View
210cdf0e10cSrcweir // gleich richtig justiert werden kann.
211cdf0e10cSrcweir if ( pCurWin )
212cdf0e10cSrcweir pWin->SetSizePixel( pCurWin->GetSizePixel() );
213cdf0e10cSrcweir nFound = ((ModulWindow*)pWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem, sal_True );
214cdf0e10cSrcweir }
215cdf0e10cSrcweir if ( nFound )
216cdf0e10cSrcweir {
217cdf0e10cSrcweir bChangeCurWindow = sal_True;
218cdf0e10cSrcweir break;
219cdf0e10cSrcweir }
220cdf0e10cSrcweir }
221cdf0e10cSrcweir if ( pWin && ( pWin != pCurWin ) )
222cdf0e10cSrcweir pWin = aIDEWindowTable.Next();
223cdf0e10cSrcweir else
224cdf0e10cSrcweir pWin = 0; // Dann sind wir durch...
225cdf0e10cSrcweir }
226cdf0e10cSrcweir if ( !nFound && bSearchedFromStart ) // Aktuelles von vorne...
227cdf0e10cSrcweir nFound = ((ModulWindow*)pCurWin)->StartSearchAndReplace( (const SvxSearchItem&)rItem, sal_True );
228cdf0e10cSrcweir if ( bChangeCurWindow )
229cdf0e10cSrcweir SetCurWindow( pWin, sal_True );
230cdf0e10cSrcweir }
231cdf0e10cSrcweir if ( !nFound && !bCanceled )
232cdf0e10cSrcweir InfoBox( pCurWin, String( IDEResId( RID_STR_SEARCHNOTFOUND ) ) ).Execute();
233cdf0e10cSrcweir }
234cdf0e10cSrcweir
235cdf0e10cSrcweir rReq.Done();
236cdf0e10cSrcweir }
237cdf0e10cSrcweir }
238cdf0e10cSrcweir }
239cdf0e10cSrcweir break;
240cdf0e10cSrcweir case FID_SEARCH_OFF:
241cdf0e10cSrcweir {
242cdf0e10cSrcweir if ( pCurWin && pCurWin->ISA( ModulWindow ) )
243cdf0e10cSrcweir pCurWin->GrabFocus();
244cdf0e10cSrcweir }
245cdf0e10cSrcweir break;
246cdf0e10cSrcweir case SID_UNDO:
247cdf0e10cSrcweir case SID_REDO:
248cdf0e10cSrcweir {
249cdf0e10cSrcweir if ( GetUndoManager() && pCurWin->AllowUndo() )
250cdf0e10cSrcweir {
251cdf0e10cSrcweir GetViewFrame()->ExecuteSlot( rReq );
252cdf0e10cSrcweir }
253cdf0e10cSrcweir }
254cdf0e10cSrcweir break;
255cdf0e10cSrcweir default:
256cdf0e10cSrcweir {
257cdf0e10cSrcweir pCurWin->ExecuteCommand( rReq );
258cdf0e10cSrcweir }
259cdf0e10cSrcweir }
260cdf0e10cSrcweir }
261cdf0e10cSrcweir
262cdf0e10cSrcweir // Egal, wer oben, Einfluss auf die Shell:
ExecuteGlobal(SfxRequest & rReq)263cdf0e10cSrcweir void __EXPORT BasicIDEShell::ExecuteGlobal( SfxRequest& rReq )
264cdf0e10cSrcweir {
265cdf0e10cSrcweir sal_uInt16 nSlot = rReq.GetSlot();
266cdf0e10cSrcweir switch ( nSlot )
267cdf0e10cSrcweir {
268cdf0e10cSrcweir case SID_BASICSTOP:
269cdf0e10cSrcweir {
270cdf0e10cSrcweir // Evtl. nicht einfach anhalten, falls auf Brechpunkt!
271cdf0e10cSrcweir if ( pCurWin && pCurWin->IsA( TYPE( ModulWindow ) ) )
272cdf0e10cSrcweir ((ModulWindow*)pCurWin)->BasicStop();
273cdf0e10cSrcweir BasicIDE::StopBasic();
274cdf0e10cSrcweir }
275cdf0e10cSrcweir break;
276cdf0e10cSrcweir
277cdf0e10cSrcweir case SID_SAVEDOC:
278cdf0e10cSrcweir {
279cdf0e10cSrcweir if ( pCurWin )
280cdf0e10cSrcweir {
281cdf0e10cSrcweir // Daten ins BASIC zurueckschreiben
282cdf0e10cSrcweir StoreAllWindowData();
283cdf0e10cSrcweir
284cdf0e10cSrcweir // document basic
285cdf0e10cSrcweir ScriptDocument aDocument( pCurWin->GetDocument() );
286cdf0e10cSrcweir if ( aDocument.isDocument() )
287cdf0e10cSrcweir {
288cdf0e10cSrcweir uno::Reference< task::XStatusIndicator > xStatusIndicator;
289cdf0e10cSrcweir
290cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pStatusIndicatorItem, SfxUnoAnyItem, SID_PROGRESS_STATUSBAR_CONTROL, sal_False );
291cdf0e10cSrcweir if ( pStatusIndicatorItem )
292cdf0e10cSrcweir OSL_VERIFY( pStatusIndicatorItem->GetValue() >>= xStatusIndicator );
293cdf0e10cSrcweir else
294cdf0e10cSrcweir {
295cdf0e10cSrcweir // get statusindicator
296cdf0e10cSrcweir SfxViewFrame *pFrame_ = GetFrame();
297cdf0e10cSrcweir if ( pFrame_ )
298cdf0e10cSrcweir {
299cdf0e10cSrcweir uno::Reference< task::XStatusIndicatorFactory > xStatFactory(
300cdf0e10cSrcweir pFrame_->GetFrame().GetFrameInterface(),
301cdf0e10cSrcweir uno::UNO_QUERY );
302cdf0e10cSrcweir if( xStatFactory.is() )
303cdf0e10cSrcweir xStatusIndicator = xStatFactory->createStatusIndicator();
304cdf0e10cSrcweir }
305cdf0e10cSrcweir
306cdf0e10cSrcweir if ( xStatusIndicator.is() )
307cdf0e10cSrcweir rReq.AppendItem( SfxUnoAnyItem( SID_PROGRESS_STATUSBAR_CONTROL, uno::makeAny( xStatusIndicator ) ) );
308cdf0e10cSrcweir }
309cdf0e10cSrcweir
310cdf0e10cSrcweir aDocument.saveDocument( xStatusIndicator );
311cdf0e10cSrcweir }
312cdf0e10cSrcweir
313cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
314cdf0e10cSrcweir if ( pBindings )
315cdf0e10cSrcweir {
316cdf0e10cSrcweir pBindings->Invalidate( SID_DOC_MODIFIED );
317cdf0e10cSrcweir pBindings->Invalidate( SID_SAVEDOC );
318cdf0e10cSrcweir pBindings->Invalidate( SID_SIGNATURE );
319cdf0e10cSrcweir }
320cdf0e10cSrcweir }
321cdf0e10cSrcweir }
322cdf0e10cSrcweir break;
323cdf0e10cSrcweir case SID_SIGNATURE:
324cdf0e10cSrcweir {
325cdf0e10cSrcweir if ( pCurWin )
326cdf0e10cSrcweir {
327cdf0e10cSrcweir ::basctl::DocumentSignature aSignature( pCurWin->GetDocument() );
328cdf0e10cSrcweir if ( aSignature.supportsSignatures() )
329cdf0e10cSrcweir {
330cdf0e10cSrcweir aSignature.signScriptingContent();
331cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
332cdf0e10cSrcweir if ( pBindings )
333cdf0e10cSrcweir pBindings->Invalidate( SID_SIGNATURE );
334cdf0e10cSrcweir }
335cdf0e10cSrcweir }
336cdf0e10cSrcweir }
337cdf0e10cSrcweir break;
338cdf0e10cSrcweir
339cdf0e10cSrcweir case SID_BASICIDE_MODULEDLG:
340cdf0e10cSrcweir {
341cdf0e10cSrcweir if ( rReq.GetArgs() )
342cdf0e10cSrcweir {
343cdf0e10cSrcweir const SfxUInt16Item &rTabId = (const SfxUInt16Item&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_TABID );
344cdf0e10cSrcweir BasicIDE::Organize( rTabId.GetValue() );
345cdf0e10cSrcweir }
346cdf0e10cSrcweir else
347cdf0e10cSrcweir BasicIDE::Organize( 0 );
348cdf0e10cSrcweir }
349cdf0e10cSrcweir break;
350cdf0e10cSrcweir case SID_BASICIDE_CHOOSEMACRO:
351cdf0e10cSrcweir {
352cdf0e10cSrcweir BasicIDE::ChooseMacro( NULL, sal_False, ::rtl::OUString() );
353cdf0e10cSrcweir }
354cdf0e10cSrcweir break;
355cdf0e10cSrcweir case SID_BASICIDE_CREATEMACRO:
356cdf0e10cSrcweir case SID_BASICIDE_EDITMACRO:
357cdf0e10cSrcweir {
358cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
359cdf0e10cSrcweir const SfxMacroInfoItem& rInfo = (const SfxMacroInfoItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_MACROINFO );
360cdf0e10cSrcweir BasicManager* pBasMgr = (BasicManager*)rInfo.GetBasicManager();
361cdf0e10cSrcweir DBG_ASSERT( pBasMgr, "Nichts selektiert im Basic-Baum ?" );
362cdf0e10cSrcweir
363cdf0e10cSrcweir ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
364cdf0e10cSrcweir
365cdf0e10cSrcweir StartListening( *pBasMgr, sal_True /* Nur einmal anmelden */ );
366cdf0e10cSrcweir String aLibName( rInfo.GetLib() );
367cdf0e10cSrcweir if ( !aLibName.Len() )
368cdf0e10cSrcweir aLibName = String::CreateFromAscii( "Standard" );
369cdf0e10cSrcweir StarBASIC* pBasic = pBasMgr->GetLib( aLibName );
370cdf0e10cSrcweir if ( !pBasic )
371cdf0e10cSrcweir {
372cdf0e10cSrcweir // load module and dialog library (if not loaded)
373cdf0e10cSrcweir aDocument.loadLibraryIfExists( E_SCRIPTS, aLibName );
374cdf0e10cSrcweir aDocument.loadLibraryIfExists( E_DIALOGS, aLibName );
375cdf0e10cSrcweir
376cdf0e10cSrcweir // get Basic
377cdf0e10cSrcweir pBasic = pBasMgr->GetLib( aLibName );
378cdf0e10cSrcweir }
379cdf0e10cSrcweir DBG_ASSERT( pBasic, "Kein Basic!" );
380cdf0e10cSrcweir
381cdf0e10cSrcweir SetCurLib( aDocument, aLibName );
382cdf0e10cSrcweir
383cdf0e10cSrcweir if ( rReq.GetSlot() == SID_BASICIDE_CREATEMACRO )
384cdf0e10cSrcweir {
385cdf0e10cSrcweir SbModule* pModule = pBasic->FindModule( rInfo.GetModule() );
386cdf0e10cSrcweir if ( !pModule )
387cdf0e10cSrcweir {
388cdf0e10cSrcweir if ( rInfo.GetModule().Len() || !pBasic->GetModules()->Count() )
389cdf0e10cSrcweir {
390cdf0e10cSrcweir String aModName = rInfo.GetModule();
391cdf0e10cSrcweir
392cdf0e10cSrcweir ::rtl::OUString sModuleCode;
393cdf0e10cSrcweir if ( aDocument.createModule( aLibName, aModName, sal_False, sModuleCode ) )
394cdf0e10cSrcweir pModule = pBasic->FindModule( aModName );
395cdf0e10cSrcweir }
396cdf0e10cSrcweir else
397cdf0e10cSrcweir pModule = (SbModule*) pBasic->GetModules()->Get(0);
398cdf0e10cSrcweir }
399cdf0e10cSrcweir DBG_ASSERT( pModule, "Kein Modul!" );
400cdf0e10cSrcweir if ( !pModule->GetMethods()->Find( rInfo.GetMethod(), SbxCLASS_METHOD ) )
401cdf0e10cSrcweir BasicIDE::CreateMacro( pModule, rInfo.GetMethod() );
402cdf0e10cSrcweir }
403cdf0e10cSrcweir SfxViewFrame* pViewFrame = GetViewFrame();
404cdf0e10cSrcweir if ( pViewFrame )
405cdf0e10cSrcweir pViewFrame->ToTop();
406cdf0e10cSrcweir ModulWindow* pWin = FindBasWin( aDocument, aLibName, rInfo.GetModule(), sal_True );
407cdf0e10cSrcweir DBG_ASSERT( pWin, "Edit/Create Macro: Fenster wurde nicht erzeugt/gefunden!" );
408cdf0e10cSrcweir SetCurWindow( pWin, sal_True );
409cdf0e10cSrcweir pWin->EditMacro( rInfo.GetMethod() );
410cdf0e10cSrcweir }
411cdf0e10cSrcweir break;
412cdf0e10cSrcweir case SID_BASICIDE_OBJCAT:
413cdf0e10cSrcweir {
414cdf0e10cSrcweir ShowObjectDialog( sal_True, sal_True );
415cdf0e10cSrcweir }
416cdf0e10cSrcweir break;
417cdf0e10cSrcweir case SID_BASICIDE_NAMECHANGEDONTAB:
418cdf0e10cSrcweir {
419cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
420cdf0e10cSrcweir const SfxUInt16Item &rTabId = (const SfxUInt16Item&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_TABID );
421cdf0e10cSrcweir const SfxStringItem &rModName = (const SfxStringItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_MODULENAME );
422cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.Get( rTabId.GetValue() );
423cdf0e10cSrcweir DBG_ASSERT( pWin, "Window nicht im Liste, aber in TabBar ?" );
424cdf0e10cSrcweir if ( pWin )
425cdf0e10cSrcweir {
426cdf0e10cSrcweir String aNewName( rModName.GetValue() );
427cdf0e10cSrcweir String aOldName( pWin->GetName() );
428cdf0e10cSrcweir if ( aNewName != aOldName )
429cdf0e10cSrcweir {
430cdf0e10cSrcweir bool bRenameOk = false;
431cdf0e10cSrcweir if ( pWin->IsA( TYPE( ModulWindow ) ) )
432cdf0e10cSrcweir {
433cdf0e10cSrcweir ModulWindow* pModWin = (ModulWindow*)pWin;
434cdf0e10cSrcweir String aLibName = ( pModWin->GetLibName() );
435cdf0e10cSrcweir ScriptDocument aDocument( pWin->GetDocument() );
436cdf0e10cSrcweir
437cdf0e10cSrcweir if ( BasicIDE::RenameModule( pModWin, aDocument, aLibName, aOldName, aNewName ) )
438cdf0e10cSrcweir {
439cdf0e10cSrcweir bRenameOk = true;
440cdf0e10cSrcweir // Because we listen for container events for script
441cdf0e10cSrcweir // modules, rename will delete the 'old' window
442cdf0e10cSrcweir // pWin has been invalidated, restore now
443cdf0e10cSrcweir pWin = FindBasWin( aDocument, aLibName, aNewName, sal_True );
444cdf0e10cSrcweir }
445cdf0e10cSrcweir
446cdf0e10cSrcweir }
447cdf0e10cSrcweir else if ( pWin->IsA( TYPE( DialogWindow ) ) )
448cdf0e10cSrcweir {
449cdf0e10cSrcweir DialogWindow* pDlgWin = (DialogWindow*)pWin;
450cdf0e10cSrcweir bRenameOk = pDlgWin->RenameDialog( aNewName );
451cdf0e10cSrcweir }
452cdf0e10cSrcweir if ( bRenameOk )
453cdf0e10cSrcweir {
454cdf0e10cSrcweir BasicIDE::MarkDocumentModified( pWin->GetDocument() );
455cdf0e10cSrcweir }
456cdf0e10cSrcweir else
457cdf0e10cSrcweir {
458cdf0e10cSrcweir // set old name in TabWriter
459cdf0e10cSrcweir sal_uInt16 nId = (sal_uInt16)aIDEWindowTable.GetKey( pWin );
460cdf0e10cSrcweir DBG_ASSERT( nId, "No entry in Tabbar!" );
461cdf0e10cSrcweir if ( nId )
462cdf0e10cSrcweir pTabBar->SetPageText( nId, aOldName );
463cdf0e10cSrcweir }
464cdf0e10cSrcweir }
465cdf0e10cSrcweir
466cdf0e10cSrcweir // set focus to current window
467cdf0e10cSrcweir pWin->GrabFocus();
468cdf0e10cSrcweir }
469cdf0e10cSrcweir }
470cdf0e10cSrcweir break;
471cdf0e10cSrcweir case SID_BASICIDE_STOREMODULESOURCE:
472cdf0e10cSrcweir case SID_BASICIDE_UPDATEMODULESOURCE:
473cdf0e10cSrcweir {
474cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
475cdf0e10cSrcweir const SfxMacroInfoItem& rInfo = (const SfxMacroInfoItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_MACROINFO );
476cdf0e10cSrcweir BasicManager* pBasMgr = (BasicManager*)rInfo.GetBasicManager();
477cdf0e10cSrcweir DBG_ASSERT( pBasMgr, "Store source: Kein BasMgr?" );
478cdf0e10cSrcweir ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
479cdf0e10cSrcweir ModulWindow* pWin = FindBasWin( aDocument, rInfo.GetLib(), rInfo.GetModule(), sal_False, sal_True );
480cdf0e10cSrcweir if ( pWin )
481cdf0e10cSrcweir {
482cdf0e10cSrcweir if ( rReq.GetSlot() == SID_BASICIDE_STOREMODULESOURCE )
483cdf0e10cSrcweir pWin->StoreData();
484cdf0e10cSrcweir else
485cdf0e10cSrcweir pWin->UpdateData();
486cdf0e10cSrcweir }
487cdf0e10cSrcweir }
488cdf0e10cSrcweir break;
489cdf0e10cSrcweir case SID_BASICIDE_STOREALLMODULESOURCES:
490cdf0e10cSrcweir case SID_BASICIDE_UPDATEALLMODULESOURCES:
491cdf0e10cSrcweir {
492cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.First();
493cdf0e10cSrcweir while ( pWin )
494cdf0e10cSrcweir {
495cdf0e10cSrcweir if ( !pWin->IsSuspended() && pWin->IsA( TYPE( ModulWindow ) ) )
496cdf0e10cSrcweir {
497cdf0e10cSrcweir if ( rReq.GetSlot() == SID_BASICIDE_STOREALLMODULESOURCES )
498cdf0e10cSrcweir pWin->StoreData();
499cdf0e10cSrcweir else
500cdf0e10cSrcweir pWin->UpdateData();
501cdf0e10cSrcweir }
502cdf0e10cSrcweir pWin = aIDEWindowTable.Next();
503cdf0e10cSrcweir }
504cdf0e10cSrcweir }
505cdf0e10cSrcweir break;
506cdf0e10cSrcweir case SID_BASICIDE_LIBSELECTED:
507cdf0e10cSrcweir case SID_BASICIDE_LIBREMOVED:
508cdf0e10cSrcweir case SID_BASICIDE_LIBLOADED:
509cdf0e10cSrcweir {
510cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
511cdf0e10cSrcweir const SfxUsrAnyItem& rShellItem = (const SfxUsrAnyItem&)rReq.GetArgs()->Get( SID_BASICIDE_ARG_DOCUMENT_MODEL );
512cdf0e10cSrcweir uno::Reference< frame::XModel > xModel( rShellItem.GetValue(), UNO_QUERY );
513cdf0e10cSrcweir ScriptDocument aDocument( xModel.is() ? ScriptDocument( xModel ) : ScriptDocument::getApplicationScriptDocument() );
514cdf0e10cSrcweir const SfxStringItem& rLibNameItem = (const SfxStringItem&)rReq.GetArgs()->Get( SID_BASICIDE_ARG_LIBNAME );
515cdf0e10cSrcweir String aLibName( rLibNameItem.GetValue() );
516cdf0e10cSrcweir
517cdf0e10cSrcweir if ( nSlot == SID_BASICIDE_LIBSELECTED )
518cdf0e10cSrcweir {
519cdf0e10cSrcweir // load module and dialog library (if not loaded)
520cdf0e10cSrcweir aDocument.loadLibraryIfExists( E_SCRIPTS, aLibName );
521cdf0e10cSrcweir aDocument.loadLibraryIfExists( E_DIALOGS, aLibName );
522cdf0e10cSrcweir
523cdf0e10cSrcweir // check password, if library is password protected and not verified
524cdf0e10cSrcweir sal_Bool bOK = sal_True;
525cdf0e10cSrcweir Reference< script::XLibraryContainer > xModLibContainer( aDocument.getLibraryContainer( E_SCRIPTS ) );
526cdf0e10cSrcweir if ( xModLibContainer.is() && xModLibContainer->hasByName( aLibName ) )
527cdf0e10cSrcweir {
528cdf0e10cSrcweir Reference< script::XLibraryContainerPassword > xPasswd( xModLibContainer, UNO_QUERY );
529cdf0e10cSrcweir if ( xPasswd.is() && xPasswd->isLibraryPasswordProtected( aLibName ) && !xPasswd->isLibraryPasswordVerified( aLibName ) )
530cdf0e10cSrcweir {
531cdf0e10cSrcweir String aPassword;
532cdf0e10cSrcweir bOK = QueryPassword( xModLibContainer, aLibName, aPassword );
533cdf0e10cSrcweir }
534cdf0e10cSrcweir }
535cdf0e10cSrcweir
536cdf0e10cSrcweir if ( bOK )
537cdf0e10cSrcweir {
538cdf0e10cSrcweir SetCurLib( aDocument, aLibName, true, false );
539cdf0e10cSrcweir }
540cdf0e10cSrcweir else
541cdf0e10cSrcweir {
542cdf0e10cSrcweir // alten Wert einstellen...
543cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
544cdf0e10cSrcweir if ( pBindings )
545cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_LIBSELECTOR, sal_True, sal_False );
546cdf0e10cSrcweir }
547cdf0e10cSrcweir }
548cdf0e10cSrcweir else if ( nSlot == SID_BASICIDE_LIBREMOVED )
549cdf0e10cSrcweir {
550cdf0e10cSrcweir if ( !m_aCurLibName.Len() || ( aDocument == m_aCurDocument && aLibName == m_aCurLibName ) )
551cdf0e10cSrcweir {
552cdf0e10cSrcweir RemoveWindows( aDocument, aLibName, sal_True );
553cdf0e10cSrcweir if ( aDocument == m_aCurDocument && aLibName == m_aCurLibName )
554cdf0e10cSrcweir {
555cdf0e10cSrcweir m_aCurDocument = ScriptDocument::getApplicationScriptDocument();
556cdf0e10cSrcweir m_aCurLibName = String();
557cdf0e10cSrcweir // Kein UpdateWindows!
558cdf0e10cSrcweir SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
559cdf0e10cSrcweir if ( pBindings )
560cdf0e10cSrcweir pBindings->Invalidate( SID_BASICIDE_LIBSELECTOR );
561cdf0e10cSrcweir }
562cdf0e10cSrcweir }
563cdf0e10cSrcweir }
564cdf0e10cSrcweir else // Loaded...
565cdf0e10cSrcweir UpdateWindows();
566cdf0e10cSrcweir }
567cdf0e10cSrcweir break;
568cdf0e10cSrcweir case SID_BASICIDE_NEWMODULE:
569cdf0e10cSrcweir {
570cdf0e10cSrcweir ModulWindow* pWin = CreateBasWin( m_aCurDocument, m_aCurLibName, String() );
571cdf0e10cSrcweir DBG_ASSERT( pWin, "New Module: Konnte Fenster nicht erzeugen!" );
572cdf0e10cSrcweir SetCurWindow( pWin, sal_True );
573cdf0e10cSrcweir }
574cdf0e10cSrcweir break;
575cdf0e10cSrcweir case SID_BASICIDE_NEWDIALOG:
576cdf0e10cSrcweir {
577cdf0e10cSrcweir DialogWindow* pWin = CreateDlgWin( m_aCurDocument, m_aCurLibName, String() );
578cdf0e10cSrcweir DBG_ASSERT( pWin, "New Module: Konnte Fenster nicht erzeugen!" );
579cdf0e10cSrcweir SetCurWindow( pWin, sal_True );
580cdf0e10cSrcweir }
581cdf0e10cSrcweir break;
582cdf0e10cSrcweir case SID_BASICIDE_SBXRENAMED:
583cdf0e10cSrcweir {
584cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
585cdf0e10cSrcweir }
586cdf0e10cSrcweir break;
587cdf0e10cSrcweir case SID_BASICIDE_SBXINSERTED:
588cdf0e10cSrcweir {
589cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
590cdf0e10cSrcweir const SbxItem& rSbxItem = (const SbxItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX );
591cdf0e10cSrcweir ScriptDocument aDocument( rSbxItem.GetDocument() );
592cdf0e10cSrcweir String aLibName( rSbxItem.GetLibName() );
593cdf0e10cSrcweir String aName( rSbxItem.GetName() );
594cdf0e10cSrcweir if ( !m_aCurLibName.Len() || ( aDocument == m_aCurDocument && aLibName == m_aCurLibName ) )
595cdf0e10cSrcweir {
596cdf0e10cSrcweir IDEBaseWindow* pWin = 0;
597cdf0e10cSrcweir if ( rSbxItem.GetType() == BASICIDE_TYPE_MODULE )
598cdf0e10cSrcweir pWin = FindBasWin( aDocument, aLibName, aName, sal_True );
599cdf0e10cSrcweir else if ( rSbxItem.GetType() == BASICIDE_TYPE_DIALOG )
600cdf0e10cSrcweir pWin = FindDlgWin( aDocument, aLibName, aName, sal_True );
601cdf0e10cSrcweir }
602cdf0e10cSrcweir }
603cdf0e10cSrcweir break;
604cdf0e10cSrcweir case SID_BASICIDE_SBXDELETED:
605cdf0e10cSrcweir {
606cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
607cdf0e10cSrcweir const SbxItem& rSbxItem = (const SbxItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX );
608cdf0e10cSrcweir ScriptDocument aDocument( rSbxItem.GetDocument() );
609cdf0e10cSrcweir IDEBaseWindow* pWin = FindWindow( aDocument, rSbxItem.GetLibName(), rSbxItem.GetName(), rSbxItem.GetType(), sal_True );
610cdf0e10cSrcweir if ( pWin )
611cdf0e10cSrcweir RemoveWindow( pWin, sal_True );
612cdf0e10cSrcweir }
613cdf0e10cSrcweir break;
614cdf0e10cSrcweir case SID_BASICIDE_SHOWSBX:
615cdf0e10cSrcweir {
616cdf0e10cSrcweir DBG_ASSERT( rReq.GetArgs(), "arguments expected" );
617cdf0e10cSrcweir const SbxItem& rSbxItem = (const SbxItem&)rReq.GetArgs()->Get(SID_BASICIDE_ARG_SBX );
618cdf0e10cSrcweir ScriptDocument aDocument( rSbxItem.GetDocument() );
619cdf0e10cSrcweir String aLibName( rSbxItem.GetLibName() );
620cdf0e10cSrcweir String aName( rSbxItem.GetName() );
621cdf0e10cSrcweir SetCurLib( aDocument, aLibName );
622cdf0e10cSrcweir IDEBaseWindow* pWin = 0;
623cdf0e10cSrcweir if ( rSbxItem.GetType() == BASICIDE_TYPE_DIALOG )
624cdf0e10cSrcweir {
625cdf0e10cSrcweir pWin = FindDlgWin( aDocument, aLibName, aName, sal_True );
626cdf0e10cSrcweir }
627cdf0e10cSrcweir else if ( rSbxItem.GetType() == BASICIDE_TYPE_MODULE )
628cdf0e10cSrcweir {
629cdf0e10cSrcweir pWin = FindBasWin( aDocument, aLibName, aName, sal_True );
630cdf0e10cSrcweir }
631cdf0e10cSrcweir else if ( rSbxItem.GetType() == BASICIDE_TYPE_METHOD )
632cdf0e10cSrcweir {
633cdf0e10cSrcweir pWin = FindBasWin( aDocument, aLibName, aName, sal_True );
634cdf0e10cSrcweir ((ModulWindow*)pWin)->EditMacro( rSbxItem.GetMethodName() );
635cdf0e10cSrcweir }
636cdf0e10cSrcweir DBG_ASSERT( pWin, "Fenster wurde nicht erzeugt!" );
637cdf0e10cSrcweir SetCurWindow( pWin, sal_True );
638cdf0e10cSrcweir pTabBar->MakeVisible( pTabBar->GetCurPageId() );
639cdf0e10cSrcweir }
640cdf0e10cSrcweir break;
641cdf0e10cSrcweir case SID_SHOW_PROPERTYBROWSER:
642cdf0e10cSrcweir {
643cdf0e10cSrcweir GetViewFrame()->ChildWindowExecute( rReq );
644cdf0e10cSrcweir rReq.Done();
645cdf0e10cSrcweir }
646cdf0e10cSrcweir break;
647cdf0e10cSrcweir case SID_BASICIDE_SHOWWINDOW:
648cdf0e10cSrcweir {
649cdf0e10cSrcweir ::std::auto_ptr< ScriptDocument > pDocument;
650cdf0e10cSrcweir
651cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pDocumentItem, SfxStringItem, SID_BASICIDE_ARG_DOCUMENT, sal_False );
652cdf0e10cSrcweir if ( pDocumentItem )
653cdf0e10cSrcweir {
654cdf0e10cSrcweir String sDocumentCaption = pDocumentItem->GetValue();
655cdf0e10cSrcweir if ( sDocumentCaption.Len() )
656cdf0e10cSrcweir pDocument.reset( new ScriptDocument( ScriptDocument::getDocumentWithURLOrCaption( sDocumentCaption ) ) );
657cdf0e10cSrcweir }
658cdf0e10cSrcweir
659cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pDocModelItem, SfxUsrAnyItem, SID_BASICIDE_ARG_DOCUMENT_MODEL, sal_False );
660cdf0e10cSrcweir if ( !pDocument.get() && pDocModelItem )
661cdf0e10cSrcweir {
662cdf0e10cSrcweir uno::Reference< frame::XModel > xModel( pDocModelItem->GetValue(), UNO_QUERY );
663cdf0e10cSrcweir if ( xModel.is() )
664cdf0e10cSrcweir pDocument.reset( new ScriptDocument( xModel ) );
665cdf0e10cSrcweir }
666cdf0e10cSrcweir
667cdf0e10cSrcweir if ( !pDocument.get() )
668cdf0e10cSrcweir break;
669cdf0e10cSrcweir
670cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pLibNameItem, SfxStringItem, SID_BASICIDE_ARG_LIBNAME, sal_False );
671cdf0e10cSrcweir if ( !pLibNameItem )
672cdf0e10cSrcweir break;
673cdf0e10cSrcweir
674cdf0e10cSrcweir String aLibName( pLibNameItem->GetValue() );
675cdf0e10cSrcweir pDocument->loadLibraryIfExists( E_SCRIPTS, aLibName );
676cdf0e10cSrcweir SetCurLib( *pDocument, aLibName );
677cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pNameItem, SfxStringItem, SID_BASICIDE_ARG_NAME, sal_False );
678cdf0e10cSrcweir if ( pNameItem )
679cdf0e10cSrcweir {
680cdf0e10cSrcweir String aName( pNameItem->GetValue() );
681cdf0e10cSrcweir String aModType( String::CreateFromAscii( "Module" ) );
682cdf0e10cSrcweir String aDlgType( String::CreateFromAscii( "Dialog" ) );
683cdf0e10cSrcweir String aType( aModType );
684cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pTypeItem, SfxStringItem, SID_BASICIDE_ARG_TYPE, sal_False );
685cdf0e10cSrcweir if ( pTypeItem )
686cdf0e10cSrcweir aType = pTypeItem->GetValue();
687cdf0e10cSrcweir
688cdf0e10cSrcweir IDEBaseWindow* pWin = 0;
689cdf0e10cSrcweir if ( aType == aModType )
690cdf0e10cSrcweir pWin = FindBasWin( *pDocument, aLibName, aName, sal_False );
691cdf0e10cSrcweir else if ( aType == aDlgType )
692cdf0e10cSrcweir pWin = FindDlgWin( *pDocument, aLibName, aName, sal_False );
693cdf0e10cSrcweir
694cdf0e10cSrcweir if ( pWin )
695cdf0e10cSrcweir {
696cdf0e10cSrcweir SetCurWindow( pWin, sal_True );
697cdf0e10cSrcweir if ( pTabBar )
698cdf0e10cSrcweir pTabBar->MakeVisible( pTabBar->GetCurPageId() );
699cdf0e10cSrcweir
700cdf0e10cSrcweir if ( pWin->ISA( ModulWindow ) )
701cdf0e10cSrcweir {
702cdf0e10cSrcweir ModulWindow* pModWin = (ModulWindow*)pWin;
703cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pLineItem, SfxUInt32Item, SID_BASICIDE_ARG_LINE, sal_False );
704cdf0e10cSrcweir if ( pLineItem )
705cdf0e10cSrcweir {
706cdf0e10cSrcweir pModWin->AssertValidEditEngine();
707cdf0e10cSrcweir TextView* pTextView = pModWin->GetEditView();
708cdf0e10cSrcweir if ( pTextView )
709cdf0e10cSrcweir {
710cdf0e10cSrcweir TextEngine* pTextEngine = pTextView->GetTextEngine();
711cdf0e10cSrcweir if ( pTextEngine )
712cdf0e10cSrcweir {
713cdf0e10cSrcweir sal_uInt32 nLine = pLineItem->GetValue();
714cdf0e10cSrcweir sal_uInt32 nLineCount = 0;
715cdf0e10cSrcweir for ( sal_uInt32 i = 0, nCount = pTextEngine->GetParagraphCount(); i < nCount; ++i )
716cdf0e10cSrcweir nLineCount += pTextEngine->GetLineCount( i );
717cdf0e10cSrcweir if ( nLine > nLineCount )
718cdf0e10cSrcweir nLine = nLineCount;
719cdf0e10cSrcweir if ( nLine > 0 )
720cdf0e10cSrcweir --nLine;
721cdf0e10cSrcweir
722cdf0e10cSrcweir // scroll window and set selection
723cdf0e10cSrcweir long nVisHeight = pModWin->GetOutputSizePixel().Height();
724cdf0e10cSrcweir long nTextHeight = pTextEngine->GetTextHeight();
725cdf0e10cSrcweir if ( nTextHeight > nVisHeight )
726cdf0e10cSrcweir {
727cdf0e10cSrcweir long nMaxY = nTextHeight - nVisHeight;
728cdf0e10cSrcweir long nOldY = pTextView->GetStartDocPos().Y();
729cdf0e10cSrcweir long nNewY = nLine * pTextEngine->GetCharHeight() - nVisHeight / 2;
730cdf0e10cSrcweir nNewY = ::std::min( nNewY, nMaxY );
731cdf0e10cSrcweir pTextView->Scroll( 0, -( nNewY - nOldY ) );
732cdf0e10cSrcweir pTextView->ShowCursor( sal_False, sal_True );
733cdf0e10cSrcweir pModWin->GetEditVScrollBar().SetThumbPos( pTextView->GetStartDocPos().Y() );
734cdf0e10cSrcweir }
735cdf0e10cSrcweir sal_uInt16 nCol1 = 0, nCol2 = 0;
736cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pCol1Item, SfxUInt16Item, SID_BASICIDE_ARG_COLUMN1, sal_False );
737cdf0e10cSrcweir if ( pCol1Item )
738cdf0e10cSrcweir {
739cdf0e10cSrcweir nCol1 = pCol1Item->GetValue();
740cdf0e10cSrcweir if ( nCol1 > 0 )
741cdf0e10cSrcweir --nCol1;
742cdf0e10cSrcweir nCol2 = nCol1;
743cdf0e10cSrcweir }
744cdf0e10cSrcweir SFX_REQUEST_ARG( rReq, pCol2Item, SfxUInt16Item, SID_BASICIDE_ARG_COLUMN2, sal_False );
745cdf0e10cSrcweir if ( pCol2Item )
746cdf0e10cSrcweir {
747cdf0e10cSrcweir nCol2 = pCol2Item->GetValue();
748cdf0e10cSrcweir if ( nCol2 > 0 )
749cdf0e10cSrcweir --nCol2;
750cdf0e10cSrcweir }
751cdf0e10cSrcweir TextSelection aSel( TextPaM( nLine, nCol1 ), TextPaM( nLine, nCol2 ) );
752cdf0e10cSrcweir pTextView->SetSelection( aSel );
753cdf0e10cSrcweir pTextView->ShowCursor();
754cdf0e10cSrcweir Window* pWindow_ = pTextView->GetWindow();
755cdf0e10cSrcweir if ( pWindow_ )
756cdf0e10cSrcweir pWindow_->GrabFocus();
757cdf0e10cSrcweir }
758cdf0e10cSrcweir }
759cdf0e10cSrcweir }
760cdf0e10cSrcweir }
761cdf0e10cSrcweir }
762cdf0e10cSrcweir }
763cdf0e10cSrcweir rReq.Done();
764cdf0e10cSrcweir }
765cdf0e10cSrcweir break;
766cdf0e10cSrcweir
767cdf0e10cSrcweir case SID_BASICIDE_MANAGE_LANG:
768cdf0e10cSrcweir {
769cdf0e10cSrcweir ManageLanguageDialog aDlg( GetCurWindow(), GetCurLocalizationMgr() );
770cdf0e10cSrcweir aDlg.Execute();
771cdf0e10cSrcweir rReq.Done();
772cdf0e10cSrcweir }
773cdf0e10cSrcweir break;
774cdf0e10cSrcweir }
775cdf0e10cSrcweir }
776cdf0e10cSrcweir
GetState(SfxItemSet & rSet)777cdf0e10cSrcweir void __EXPORT BasicIDEShell::GetState(SfxItemSet &rSet)
778cdf0e10cSrcweir {
779cdf0e10cSrcweir SfxWhichIter aIter(rSet);
780cdf0e10cSrcweir for ( sal_uInt16 nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich() )
781cdf0e10cSrcweir {
782cdf0e10cSrcweir switch ( nWh )
783cdf0e10cSrcweir {
784cdf0e10cSrcweir case SID_DOCINFO:
785cdf0e10cSrcweir {
786cdf0e10cSrcweir rSet.DisableItem( nWh );
787cdf0e10cSrcweir }
788cdf0e10cSrcweir break;
789cdf0e10cSrcweir case SID_SAVEDOC:
790cdf0e10cSrcweir {
791cdf0e10cSrcweir sal_Bool bDisable = sal_False;
792cdf0e10cSrcweir
793cdf0e10cSrcweir if ( pCurWin )
794cdf0e10cSrcweir {
795cdf0e10cSrcweir if ( !pCurWin->IsModified() )
796cdf0e10cSrcweir {
797cdf0e10cSrcweir ScriptDocument aDocument( pCurWin->GetDocument() );
798cdf0e10cSrcweir bDisable = ( !aDocument.isAlive() )
799cdf0e10cSrcweir || ( aDocument.isDocument() ? !aDocument.isDocumentModified() : !IsAppBasicModified() );
800cdf0e10cSrcweir }
801cdf0e10cSrcweir }
802cdf0e10cSrcweir else
803cdf0e10cSrcweir {
804cdf0e10cSrcweir bDisable = sal_True;
805cdf0e10cSrcweir }
806cdf0e10cSrcweir
807cdf0e10cSrcweir if ( bDisable )
808cdf0e10cSrcweir rSet.DisableItem( nWh );
809cdf0e10cSrcweir }
810cdf0e10cSrcweir break;
811cdf0e10cSrcweir case SID_NEWWINDOW:
812cdf0e10cSrcweir case SID_SAVEASDOC:
813cdf0e10cSrcweir {
814cdf0e10cSrcweir rSet.DisableItem( nWh );
815cdf0e10cSrcweir }
816cdf0e10cSrcweir break;
817cdf0e10cSrcweir case SID_SIGNATURE:
818cdf0e10cSrcweir {
819cdf0e10cSrcweir sal_uInt16 nState = 0;
820cdf0e10cSrcweir if ( pCurWin )
821cdf0e10cSrcweir {
822cdf0e10cSrcweir ::basctl::DocumentSignature aSignature( pCurWin->GetDocument() );
823cdf0e10cSrcweir nState = aSignature.getScriptingSignatureState();
824cdf0e10cSrcweir }
825cdf0e10cSrcweir rSet.Put( SfxUInt16Item( SID_SIGNATURE, nState ) );
826cdf0e10cSrcweir }
827cdf0e10cSrcweir break;
828cdf0e10cSrcweir case SID_BASICIDE_MODULEDLG:
829cdf0e10cSrcweir {
830cdf0e10cSrcweir if ( StarBASIC::IsRunning() )
831cdf0e10cSrcweir rSet.DisableItem( nWh );
832cdf0e10cSrcweir }
833cdf0e10cSrcweir break;
834cdf0e10cSrcweir case SID_BASICIDE_CHOOSEMACRO:
835cdf0e10cSrcweir case SID_BASICIDE_OBJCAT:
836cdf0e10cSrcweir case SID_BASICIDE_SHOWSBX:
837cdf0e10cSrcweir case SID_BASICIDE_CREATEMACRO:
838cdf0e10cSrcweir case SID_BASICIDE_EDITMACRO:
839cdf0e10cSrcweir case SID_BASICIDE_NAMECHANGEDONTAB:
840cdf0e10cSrcweir {
841cdf0e10cSrcweir ;
842cdf0e10cSrcweir }
843cdf0e10cSrcweir break;
844cdf0e10cSrcweir
845cdf0e10cSrcweir case SID_BASICIDE_ADDWATCH:
846cdf0e10cSrcweir case SID_BASICIDE_REMOVEWATCH:
847cdf0e10cSrcweir case SID_BASICLOAD:
848cdf0e10cSrcweir case SID_BASICSAVEAS:
849cdf0e10cSrcweir case SID_BASICIDE_MATCHGROUP:
850cdf0e10cSrcweir {
851cdf0e10cSrcweir if ( !pCurWin || !pCurWin->IsA( TYPE( ModulWindow ) ) )
852cdf0e10cSrcweir rSet.DisableItem( nWh );
853cdf0e10cSrcweir else if ( ( nWh == SID_BASICLOAD ) && ( StarBASIC::IsRunning() || ( pCurWin && pCurWin->IsReadOnly() ) ) )
854cdf0e10cSrcweir rSet.DisableItem( nWh );
855cdf0e10cSrcweir }
856cdf0e10cSrcweir break;
857cdf0e10cSrcweir case SID_BASICRUN:
858cdf0e10cSrcweir case SID_BASICSTEPINTO:
859cdf0e10cSrcweir case SID_BASICSTEPOVER:
860cdf0e10cSrcweir case SID_BASICSTEPOUT:
861cdf0e10cSrcweir case SID_BASICIDE_TOGGLEBRKPNT:
862cdf0e10cSrcweir case SID_BASICIDE_MANAGEBRKPNTS:
863cdf0e10cSrcweir {
864cdf0e10cSrcweir if ( !pCurWin || !pCurWin->IsA( TYPE( ModulWindow ) ) )
865cdf0e10cSrcweir rSet.DisableItem( nWh );
866cdf0e10cSrcweir else if ( StarBASIC::IsRunning() && !((ModulWindow*)pCurWin)->GetBasicStatus().bIsInReschedule )
867cdf0e10cSrcweir rSet.DisableItem( nWh );
868cdf0e10cSrcweir }
869cdf0e10cSrcweir break;
870cdf0e10cSrcweir case SID_BASICCOMPILE:
871cdf0e10cSrcweir {
872cdf0e10cSrcweir if ( !pCurWin || !pCurWin->IsA( TYPE( ModulWindow ) ) || StarBASIC::IsRunning() )
873cdf0e10cSrcweir rSet.DisableItem( nWh );
874cdf0e10cSrcweir }
875cdf0e10cSrcweir break;
876cdf0e10cSrcweir case SID_BASICSTOP:
877cdf0e10cSrcweir {
878cdf0e10cSrcweir // Stop immermoeglich, wenn irgendein Basic lauft...
879cdf0e10cSrcweir if ( !StarBASIC::IsRunning() )
880cdf0e10cSrcweir rSet.DisableItem( nWh );
881cdf0e10cSrcweir }
882cdf0e10cSrcweir break;
883cdf0e10cSrcweir case SID_CHOOSE_CONTROLS:
884cdf0e10cSrcweir case SID_DIALOG_TESTMODE:
885cdf0e10cSrcweir {
886cdf0e10cSrcweir if( !pCurWin || !pCurWin->IsA( TYPE( DialogWindow ) ) )
887cdf0e10cSrcweir rSet.DisableItem( nWh );
888cdf0e10cSrcweir }
889cdf0e10cSrcweir break;
890cdf0e10cSrcweir case SID_SHOW_FORMS:
891cdf0e10cSrcweir case SID_SHOW_HIDDEN:
892cdf0e10cSrcweir {
893cdf0e10cSrcweir rSet.DisableItem( nWh );
894cdf0e10cSrcweir }
895cdf0e10cSrcweir break;
896cdf0e10cSrcweir case SID_SEARCH_OPTIONS:
897cdf0e10cSrcweir {
898cdf0e10cSrcweir sal_uInt16 nOptions = 0;
899cdf0e10cSrcweir if( pCurWin )
900cdf0e10cSrcweir nOptions = pCurWin->GetSearchOptions();
901cdf0e10cSrcweir rSet.Put( SfxUInt16Item( SID_SEARCH_OPTIONS, nOptions ) );
902cdf0e10cSrcweir }
903cdf0e10cSrcweir break;
904cdf0e10cSrcweir case SID_BASICIDE_LIBSELECTOR:
905cdf0e10cSrcweir {
906cdf0e10cSrcweir String aName;
907cdf0e10cSrcweir if ( m_aCurLibName.Len() )
908cdf0e10cSrcweir {
909cdf0e10cSrcweir LibraryLocation eLocation = m_aCurDocument.getLibraryLocation( m_aCurLibName );
910cdf0e10cSrcweir aName = CreateMgrAndLibStr( m_aCurDocument.getTitle( eLocation ), m_aCurLibName );
911cdf0e10cSrcweir }
912cdf0e10cSrcweir SfxStringItem aItem( SID_BASICIDE_LIBSELECTOR, aName );
913cdf0e10cSrcweir rSet.Put( aItem );
914cdf0e10cSrcweir }
915cdf0e10cSrcweir break;
916cdf0e10cSrcweir case SID_SEARCH_ITEM:
917cdf0e10cSrcweir {
918cdf0e10cSrcweir String aSelected = GetSelectionText( sal_True );
919cdf0e10cSrcweir SvxSearchItem& rItem = IDE_DLL()->GetExtraData()->GetSearchItem();
920cdf0e10cSrcweir rItem.SetSearchString( aSelected );
921cdf0e10cSrcweir rSet.Put( rItem );
922cdf0e10cSrcweir }
923cdf0e10cSrcweir break;
924cdf0e10cSrcweir case SID_BASICIDE_STAT_DATE:
925cdf0e10cSrcweir {
926cdf0e10cSrcweir String aDate;
927cdf0e10cSrcweir aDate = String( RTL_CONSTASCII_USTRINGPARAM( "Datum?!" ) );
928cdf0e10cSrcweir SfxStringItem aItem( SID_BASICIDE_STAT_DATE, aDate );
929cdf0e10cSrcweir rSet.Put( aItem );
930cdf0e10cSrcweir }
931cdf0e10cSrcweir break;
932cdf0e10cSrcweir case SID_DOC_MODIFIED:
933cdf0e10cSrcweir {
934cdf0e10cSrcweir String aModifiedMarker;
935cdf0e10cSrcweir sal_Bool bModified = sal_False;
936cdf0e10cSrcweir
937cdf0e10cSrcweir if ( pCurWin )
938cdf0e10cSrcweir {
939cdf0e10cSrcweir if ( pCurWin->IsModified() )
940cdf0e10cSrcweir bModified = sal_True;
941cdf0e10cSrcweir else
942cdf0e10cSrcweir {
943cdf0e10cSrcweir ScriptDocument aDocument( pCurWin->GetDocument() );
944cdf0e10cSrcweir bModified = aDocument.isDocument() ? aDocument.isDocumentModified() : IsAppBasicModified();
945cdf0e10cSrcweir }
946cdf0e10cSrcweir }
947cdf0e10cSrcweir
948cdf0e10cSrcweir if ( bModified )
949cdf0e10cSrcweir aModifiedMarker = '*';
950cdf0e10cSrcweir
951cdf0e10cSrcweir SfxStringItem aItem( SID_DOC_MODIFIED, aModifiedMarker );
952cdf0e10cSrcweir rSet.Put( aItem );
953cdf0e10cSrcweir }
954cdf0e10cSrcweir break;
955cdf0e10cSrcweir case SID_BASICIDE_STAT_TITLE:
956cdf0e10cSrcweir {
957cdf0e10cSrcweir if ( pCurWin )
958cdf0e10cSrcweir {
959cdf0e10cSrcweir String aTitle = pCurWin->CreateQualifiedName();
960cdf0e10cSrcweir SfxStringItem aItem( SID_BASICIDE_STAT_TITLE, aTitle );
961cdf0e10cSrcweir rSet.Put( aItem );
962cdf0e10cSrcweir }
963cdf0e10cSrcweir }
964cdf0e10cSrcweir break;
965cdf0e10cSrcweir // Werden vom Controller ausgewertet:
966cdf0e10cSrcweir case SID_ATTR_SIZE:
967cdf0e10cSrcweir case SID_ATTR_INSERT:
968cdf0e10cSrcweir break;
969cdf0e10cSrcweir case SID_UNDO:
970cdf0e10cSrcweir case SID_REDO:
971cdf0e10cSrcweir {
972cdf0e10cSrcweir if( GetUndoManager() ) // sonst rekursives GetState
973cdf0e10cSrcweir GetViewFrame()->GetSlotState( nWh, NULL, &rSet );
974cdf0e10cSrcweir }
975cdf0e10cSrcweir break;
976cdf0e10cSrcweir case SID_SHOW_PROPERTYBROWSER:
977cdf0e10cSrcweir {
978cdf0e10cSrcweir if ( GetViewFrame()->KnowsChildWindow( nWh ) )
979cdf0e10cSrcweir rSet.Put( SfxBoolItem( nWh, GetViewFrame()->HasChildWindow( nWh ) ) );
980cdf0e10cSrcweir else
981cdf0e10cSrcweir rSet.DisableItem( nWh );
982cdf0e10cSrcweir }
983cdf0e10cSrcweir break;
984cdf0e10cSrcweir
985cdf0e10cSrcweir case SID_BASICIDE_CURRENT_LANG:
986cdf0e10cSrcweir {
987cdf0e10cSrcweir if( (pCurWin && pCurWin->IsReadOnly()) || GetCurLibName().Len() == 0 )
988cdf0e10cSrcweir rSet.DisableItem( nWh );
989cdf0e10cSrcweir else
990cdf0e10cSrcweir {
991cdf0e10cSrcweir String aItemStr;
992cdf0e10cSrcweir LocalizationMgr* pCurMgr = GetCurLocalizationMgr();
993cdf0e10cSrcweir if ( pCurMgr->isLibraryLocalized() )
994cdf0e10cSrcweir {
995cdf0e10cSrcweir Sequence< lang::Locale > aLocaleSeq = pCurMgr->getStringResourceManager()->getLocales();
996cdf0e10cSrcweir const lang::Locale* pLocale = aLocaleSeq.getConstArray();
997cdf0e10cSrcweir sal_Int32 i, nCount = aLocaleSeq.getLength();
998cdf0e10cSrcweir
999cdf0e10cSrcweir // Force different results for any combination of locales and default locale
1000cdf0e10cSrcweir ::rtl::OUString aLangStr;
1001cdf0e10cSrcweir for ( i = 0; i <= nCount; ++i )
1002cdf0e10cSrcweir {
1003cdf0e10cSrcweir lang::Locale aLocale;
1004cdf0e10cSrcweir if( i < nCount )
1005cdf0e10cSrcweir aLocale = pLocale[i];
1006cdf0e10cSrcweir else
1007cdf0e10cSrcweir aLocale = pCurMgr->getStringResourceManager()->getDefaultLocale();
1008cdf0e10cSrcweir
1009cdf0e10cSrcweir aLangStr += aLocale.Language;
1010cdf0e10cSrcweir aLangStr += aLocale.Country;
1011cdf0e10cSrcweir aLangStr += aLocale.Variant;
1012cdf0e10cSrcweir }
1013cdf0e10cSrcweir aItemStr = aLangStr;
1014cdf0e10cSrcweir }
1015cdf0e10cSrcweir rSet.Put( SfxStringItem( nWh, aItemStr ) );
1016cdf0e10cSrcweir }
1017cdf0e10cSrcweir }
1018cdf0e10cSrcweir break;
1019cdf0e10cSrcweir
1020cdf0e10cSrcweir case SID_BASICIDE_MANAGE_LANG:
1021cdf0e10cSrcweir {
1022cdf0e10cSrcweir if( (pCurWin && pCurWin->IsReadOnly()) || GetCurLibName().Len() == 0 )
1023cdf0e10cSrcweir rSet.DisableItem( nWh );
1024cdf0e10cSrcweir }
1025cdf0e10cSrcweir break;
1026cdf0e10cSrcweir }
1027cdf0e10cSrcweir }
1028cdf0e10cSrcweir if ( pCurWin )
1029cdf0e10cSrcweir pCurWin->GetState( rSet );
1030cdf0e10cSrcweir }
1031cdf0e10cSrcweir
HasUIFeature(sal_uInt32 nFeature)1032cdf0e10cSrcweir sal_Bool BasicIDEShell::HasUIFeature( sal_uInt32 nFeature )
1033cdf0e10cSrcweir {
1034cdf0e10cSrcweir sal_Bool bResult = sal_False;
1035cdf0e10cSrcweir
1036cdf0e10cSrcweir if ( (nFeature & BASICIDE_UI_FEATURE_SHOW_BROWSER) == BASICIDE_UI_FEATURE_SHOW_BROWSER )
1037cdf0e10cSrcweir {
1038cdf0e10cSrcweir // fade out (in) property browser in module (dialog) windows
1039cdf0e10cSrcweir if ( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) && !pCurWin->IsReadOnly() )
1040cdf0e10cSrcweir bResult = sal_True;
1041cdf0e10cSrcweir }
1042cdf0e10cSrcweir
1043cdf0e10cSrcweir return bResult;
1044cdf0e10cSrcweir }
1045cdf0e10cSrcweir
SetCurWindow(IDEBaseWindow * pNewWin,sal_Bool bUpdateTabBar,sal_Bool bRememberAsCurrent)1046cdf0e10cSrcweir void BasicIDEShell::SetCurWindow( IDEBaseWindow* pNewWin, sal_Bool bUpdateTabBar, sal_Bool bRememberAsCurrent )
1047cdf0e10cSrcweir {
1048cdf0e10cSrcweir // Es muss ein EditWindow am Sfx gesetzt sein, sonst kommt kein
1049cdf0e10cSrcweir // Resize, also stehen die Controls auf den Wiese...
1050cdf0e10cSrcweir // Sieht dann sowieso besser aus, wenn das Modul-Layout angezeigt wird...
1051cdf0e10cSrcweir if ( !pNewWin && ( GetWindow() != pModulLayout ) )
1052cdf0e10cSrcweir {
1053cdf0e10cSrcweir pModulLayout->Show();
1054cdf0e10cSrcweir AdjustPosSizePixel( Point( 0, 0 ), GetViewFrame()->GetWindow().GetOutputSizePixel() );
1055cdf0e10cSrcweir SetWindow( pModulLayout );
1056cdf0e10cSrcweir EnableScrollbars( sal_False );
1057cdf0e10cSrcweir aVScrollBar.Hide();
1058cdf0e10cSrcweir }
1059cdf0e10cSrcweir
1060cdf0e10cSrcweir if ( pNewWin != pCurWin )
1061cdf0e10cSrcweir {
1062cdf0e10cSrcweir IDEBaseWindow* pPrevCurWin = pCurWin;
1063cdf0e10cSrcweir pCurWin = pNewWin;
1064cdf0e10cSrcweir if ( pPrevCurWin )
1065cdf0e10cSrcweir {
1066cdf0e10cSrcweir pPrevCurWin->Hide();
1067cdf0e10cSrcweir pPrevCurWin->Deactivating();
1068cdf0e10cSrcweir // pPrevCurWin->GetLayoutWindow()->Hide();
1069cdf0e10cSrcweir if( pPrevCurWin->IsA( TYPE( DialogWindow ) ) )
1070cdf0e10cSrcweir {
1071cdf0e10cSrcweir ((DialogWindow*)pPrevCurWin)->DisableBrowser();
1072cdf0e10cSrcweir }
1073cdf0e10cSrcweir else
1074cdf0e10cSrcweir {
1075cdf0e10cSrcweir pModulLayout->SetModulWindow( NULL );
1076cdf0e10cSrcweir }
1077cdf0e10cSrcweir }
1078cdf0e10cSrcweir if ( pCurWin )
1079cdf0e10cSrcweir {
1080cdf0e10cSrcweir AdjustPosSizePixel( Point( 0, 0 ), GetViewFrame()->GetWindow().GetOutputSizePixel() );
1081cdf0e10cSrcweir if( pCurWin->IsA( TYPE( ModulWindow ) ) )
1082cdf0e10cSrcweir {
1083cdf0e10cSrcweir GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_MODULWINDOW );
1084cdf0e10cSrcweir pModulLayout->SetModulWindow( (ModulWindow*)pCurWin );
1085cdf0e10cSrcweir pModulLayout->Show();
1086cdf0e10cSrcweir }
1087cdf0e10cSrcweir else
1088cdf0e10cSrcweir {
1089cdf0e10cSrcweir pModulLayout->Hide();
1090cdf0e10cSrcweir GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_DIALOGWINDOW );
1091cdf0e10cSrcweir }
1092cdf0e10cSrcweir
1093cdf0e10cSrcweir if ( bRememberAsCurrent )
1094cdf0e10cSrcweir {
1095cdf0e10cSrcweir BasicIDEData* pData = IDE_DLL()->GetExtraData();
1096cdf0e10cSrcweir if ( pData )
1097cdf0e10cSrcweir {
1098cdf0e10cSrcweir sal_uInt16 nCurrentType = pCurWin->IsA( TYPE( ModulWindow ) ) ? BASICIDE_TYPE_MODULE : BASICIDE_TYPE_DIALOG;
1099cdf0e10cSrcweir LibInfoItem* pLibInfoItem = new LibInfoItem( pCurWin->GetDocument(), pCurWin->GetLibName(), pCurWin->GetName(), nCurrentType );
1100cdf0e10cSrcweir pData->GetLibInfos().InsertInfo( pLibInfoItem );
1101cdf0e10cSrcweir }
1102cdf0e10cSrcweir }
1103cdf0e10cSrcweir
1104cdf0e10cSrcweir if ( GetViewFrame()->GetWindow().IsVisible() ) // sonst macht es spaeter der SFX
1105cdf0e10cSrcweir pCurWin->Show();
1106cdf0e10cSrcweir
1107cdf0e10cSrcweir pCurWin->Init();
1108cdf0e10cSrcweir
1109cdf0e10cSrcweir if ( !IDE_DLL()->GetExtraData()->ShellInCriticalSection() )
1110cdf0e10cSrcweir {
1111cdf0e10cSrcweir Window* pFrameWindow = &GetViewFrame()->GetWindow();
1112cdf0e10cSrcweir Window* pFocusWindow = Application::GetFocusWindow();
1113cdf0e10cSrcweir while ( pFocusWindow && ( pFocusWindow != pFrameWindow ) )
1114cdf0e10cSrcweir pFocusWindow = pFocusWindow->GetParent();
1115cdf0e10cSrcweir if ( pFocusWindow ) // Focus in BasicIDE
1116cdf0e10cSrcweir pNewWin->GrabFocus();
1117cdf0e10cSrcweir }
1118cdf0e10cSrcweir if( pCurWin->IsA( TYPE( DialogWindow ) ) )
1119cdf0e10cSrcweir ((DialogWindow*)pCurWin)->UpdateBrowser();
1120cdf0e10cSrcweir }
1121cdf0e10cSrcweir if ( bUpdateTabBar )
1122cdf0e10cSrcweir {
1123cdf0e10cSrcweir sal_uLong nKey = aIDEWindowTable.GetKey( pCurWin );
1124cdf0e10cSrcweir if ( pCurWin && ( pTabBar->GetPagePos( (sal_uInt16)nKey ) == TAB_PAGE_NOTFOUND ) )
1125cdf0e10cSrcweir pTabBar->InsertPage( (sal_uInt16)nKey, pCurWin->GetTitle() ); // wurde neu eingeblendet
1126cdf0e10cSrcweir pTabBar->SetCurPageId( (sal_uInt16)nKey );
1127cdf0e10cSrcweir }
1128cdf0e10cSrcweir if ( pCurWin && pCurWin->IsSuspended() ) // Wenn das Fenster im Fehlerfall angezeigt wird...
1129cdf0e10cSrcweir pCurWin->SetStatus( pCurWin->GetStatus() & ~BASWIN_SUSPENDED );
1130cdf0e10cSrcweir if ( pCurWin )
1131cdf0e10cSrcweir {
1132cdf0e10cSrcweir SetWindow( pCurWin );
1133cdf0e10cSrcweir if ( pCurWin->GetDocument().isDocument() )
1134cdf0e10cSrcweir SfxObjectShell::SetCurrentComponent( pCurWin->GetDocument().getDocument() );
1135cdf0e10cSrcweir }
1136cdf0e10cSrcweir else
1137cdf0e10cSrcweir {
1138cdf0e10cSrcweir SetWindow( pModulLayout );
1139cdf0e10cSrcweir GetViewFrame()->GetWindow().SetHelpId( HID_BASICIDE_MODULWINDOW );
1140cdf0e10cSrcweir SfxObjectShell::SetCurrentComponent( NULL );
1141cdf0e10cSrcweir }
1142cdf0e10cSrcweir SetUndoManager( pCurWin ? pCurWin->GetUndoManager() : 0 );
1143cdf0e10cSrcweir InvalidateBasicIDESlots();
1144cdf0e10cSrcweir EnableScrollbars( pCurWin ? sal_True : sal_False );
1145cdf0e10cSrcweir
1146cdf0e10cSrcweir if ( m_pCurLocalizationMgr )
1147cdf0e10cSrcweir m_pCurLocalizationMgr->handleTranslationbar();
1148cdf0e10cSrcweir
1149cdf0e10cSrcweir ManageToolbars();
1150cdf0e10cSrcweir
1151cdf0e10cSrcweir // fade out (in) property browser in module (dialog) windows
1152cdf0e10cSrcweir UIFeatureChanged();
1153cdf0e10cSrcweir }
1154cdf0e10cSrcweir }
1155cdf0e10cSrcweir
ManageToolbars()1156cdf0e10cSrcweir void BasicIDEShell::ManageToolbars()
1157cdf0e10cSrcweir {
1158cdf0e10cSrcweir static ::rtl::OUString aLayoutManagerName = ::rtl::OUString::createFromAscii( "LayoutManager" );
1159cdf0e10cSrcweir static ::rtl::OUString aMacroBarResName =
1160cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "private:resource/toolbar/macrobar" );
1161cdf0e10cSrcweir static ::rtl::OUString aDialogBarResName =
1162cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "private:resource/toolbar/dialogbar" );
1163cdf0e10cSrcweir static ::rtl::OUString aInsertControlsBarResName =
1164cdf0e10cSrcweir ::rtl::OUString::createFromAscii( "private:resource/toolbar/insertcontrolsbar" );
1165cdf0e10cSrcweir (void)aInsertControlsBarResName;
1166cdf0e10cSrcweir
1167cdf0e10cSrcweir if( !pCurWin )
1168cdf0e10cSrcweir return;
1169cdf0e10cSrcweir
1170cdf0e10cSrcweir Reference< beans::XPropertySet > xFrameProps
1171cdf0e10cSrcweir ( GetViewFrame()->GetFrame().GetFrameInterface(), uno::UNO_QUERY );
1172cdf0e10cSrcweir if ( xFrameProps.is() )
1173cdf0e10cSrcweir {
1174cdf0e10cSrcweir Reference< ::com::sun::star::frame::XLayoutManager > xLayoutManager;
1175cdf0e10cSrcweir uno::Any a = xFrameProps->getPropertyValue( aLayoutManagerName );
1176cdf0e10cSrcweir a >>= xLayoutManager;
1177cdf0e10cSrcweir if ( xLayoutManager.is() )
1178cdf0e10cSrcweir {
1179cdf0e10cSrcweir xLayoutManager->lock();
1180cdf0e10cSrcweir if( pCurWin->IsA( TYPE( DialogWindow ) ) )
1181cdf0e10cSrcweir {
1182cdf0e10cSrcweir xLayoutManager->destroyElement( aMacroBarResName );
1183cdf0e10cSrcweir
1184cdf0e10cSrcweir xLayoutManager->requestElement( aDialogBarResName );
1185cdf0e10cSrcweir xLayoutManager->requestElement( aInsertControlsBarResName );
1186cdf0e10cSrcweir }
1187cdf0e10cSrcweir else
1188cdf0e10cSrcweir {
1189cdf0e10cSrcweir xLayoutManager->destroyElement( aDialogBarResName );
1190cdf0e10cSrcweir xLayoutManager->destroyElement( aInsertControlsBarResName );
1191cdf0e10cSrcweir
1192cdf0e10cSrcweir xLayoutManager->requestElement( aMacroBarResName );
1193cdf0e10cSrcweir }
1194cdf0e10cSrcweir xLayoutManager->unlock();
1195cdf0e10cSrcweir }
1196cdf0e10cSrcweir }
1197cdf0e10cSrcweir }
1198cdf0e10cSrcweir
FindApplicationWindow()1199cdf0e10cSrcweir IDEBaseWindow* BasicIDEShell::FindApplicationWindow()
1200cdf0e10cSrcweir {
1201cdf0e10cSrcweir return FindWindow( ScriptDocument::getApplicationScriptDocument() );
1202cdf0e10cSrcweir }
1203cdf0e10cSrcweir
FindWindow(const ScriptDocument & rDocument,const String & rLibName,const String & rName,sal_uInt16 nType,sal_Bool bFindSuspended)1204cdf0e10cSrcweir IDEBaseWindow* BasicIDEShell::FindWindow( const ScriptDocument& rDocument, const String& rLibName, const String& rName, sal_uInt16 nType, sal_Bool bFindSuspended )
1205cdf0e10cSrcweir {
1206cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.First();
1207cdf0e10cSrcweir while ( pWin )
1208cdf0e10cSrcweir {
1209cdf0e10cSrcweir if ( !pWin->IsSuspended() || bFindSuspended )
1210cdf0e10cSrcweir {
1211cdf0e10cSrcweir if ( !rLibName.Len() || !rName.Len() || nType == BASICIDE_TYPE_UNKNOWN )
1212cdf0e10cSrcweir {
1213cdf0e10cSrcweir // return any non-suspended window
1214cdf0e10cSrcweir return pWin;
1215cdf0e10cSrcweir }
1216cdf0e10cSrcweir else if ( pWin->IsDocument( rDocument ) && pWin->GetLibName() == rLibName && pWin->GetName() == rName &&
1217cdf0e10cSrcweir ( ( pWin->IsA( TYPE( ModulWindow ) ) && nType == BASICIDE_TYPE_MODULE ) ||
1218cdf0e10cSrcweir ( pWin->IsA( TYPE( DialogWindow ) ) && nType == BASICIDE_TYPE_DIALOG ) ) )
1219cdf0e10cSrcweir {
1220cdf0e10cSrcweir return pWin;
1221cdf0e10cSrcweir }
1222cdf0e10cSrcweir }
1223cdf0e10cSrcweir pWin = aIDEWindowTable.Next();
1224cdf0e10cSrcweir }
1225cdf0e10cSrcweir return 0;
1226cdf0e10cSrcweir }
1227cdf0e10cSrcweir
CallBasicErrorHdl(StarBASIC * pBasic)1228cdf0e10cSrcweir long BasicIDEShell::CallBasicErrorHdl( StarBASIC* pBasic )
1229cdf0e10cSrcweir {
1230cdf0e10cSrcweir long nRet = 0;
1231cdf0e10cSrcweir ModulWindow* pModWin = ShowActiveModuleWindow( pBasic );
1232cdf0e10cSrcweir if ( pModWin )
1233cdf0e10cSrcweir nRet = pModWin->BasicErrorHdl( pBasic );
1234cdf0e10cSrcweir return nRet;
1235cdf0e10cSrcweir }
1236cdf0e10cSrcweir
CallBasicBreakHdl(StarBASIC * pBasic)1237cdf0e10cSrcweir long BasicIDEShell::CallBasicBreakHdl( StarBASIC* pBasic )
1238cdf0e10cSrcweir {
1239cdf0e10cSrcweir long nRet = 0;
1240cdf0e10cSrcweir ModulWindow* pModWin = ShowActiveModuleWindow( pBasic );
1241cdf0e10cSrcweir if ( pModWin )
1242cdf0e10cSrcweir {
1243cdf0e10cSrcweir sal_Bool bAppWindowDisabled, bDispatcherLocked;
1244cdf0e10cSrcweir sal_uInt16 nWaitCount;
1245cdf0e10cSrcweir SfxUInt16Item *pSWActionCount, *pSWLockViewCount;
1246cdf0e10cSrcweir BasicIDE::BasicStopped( &bAppWindowDisabled, &bDispatcherLocked,
1247cdf0e10cSrcweir &nWaitCount, &pSWActionCount, &pSWLockViewCount );
1248cdf0e10cSrcweir
1249cdf0e10cSrcweir nRet = pModWin->BasicBreakHdl( pBasic );
1250cdf0e10cSrcweir
1251cdf0e10cSrcweir if ( StarBASIC::IsRunning() ) // Falls abgebrochen...
1252cdf0e10cSrcweir {
1253cdf0e10cSrcweir if ( bAppWindowDisabled )
1254cdf0e10cSrcweir Application::GetDefDialogParent()->Enable( sal_False );
1255cdf0e10cSrcweir /*
1256cdf0e10cSrcweir if ( bDispatcherLocked )
1257cdf0e10cSrcweir SFX_APP()->LockDispatcher( sal_True );
1258cdf0e10cSrcweir */
1259cdf0e10cSrcweir if ( nWaitCount )
1260cdf0e10cSrcweir {
1261cdf0e10cSrcweir BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
1262cdf0e10cSrcweir for ( sal_uInt16 n = 0; n < nWaitCount; n++ )
1263cdf0e10cSrcweir pIDEShell->GetViewFrame()->GetWindow().EnterWait();
1264cdf0e10cSrcweir }
1265cdf0e10cSrcweir }
1266cdf0e10cSrcweir }
1267cdf0e10cSrcweir return nRet;
1268cdf0e10cSrcweir }
1269cdf0e10cSrcweir
ShowActiveModuleWindow(StarBASIC * pBasic)1270cdf0e10cSrcweir ModulWindow* BasicIDEShell::ShowActiveModuleWindow( StarBASIC* pBasic )
1271cdf0e10cSrcweir {
1272cdf0e10cSrcweir SetCurLib( ScriptDocument::getApplicationScriptDocument(), String(), false );
1273cdf0e10cSrcweir
1274cdf0e10cSrcweir SbModule* pActiveModule = StarBASIC::GetActiveModule();
1275cdf0e10cSrcweir SbClassModuleObject* pClassModuleObject = PTR_CAST(SbClassModuleObject,pActiveModule);
1276cdf0e10cSrcweir if( pClassModuleObject != NULL )
1277cdf0e10cSrcweir pActiveModule = pClassModuleObject->getClassModule();
1278cdf0e10cSrcweir
1279cdf0e10cSrcweir DBG_ASSERT( pActiveModule, "Kein aktives Modul im ErrorHdl?!" );
1280cdf0e10cSrcweir if ( pActiveModule )
1281cdf0e10cSrcweir {
1282cdf0e10cSrcweir ModulWindow* pWin = 0;
1283cdf0e10cSrcweir SbxObject* pParent = pActiveModule->GetParent();
1284cdf0e10cSrcweir DBG_ASSERT( pParent && pParent->ISA( StarBASIC ), "Kein BASIC!" );
1285cdf0e10cSrcweir StarBASIC* pLib = static_cast< StarBASIC* >( pParent );
1286cdf0e10cSrcweir if ( pLib )
1287cdf0e10cSrcweir {
1288cdf0e10cSrcweir BasicManager* pBasMgr = BasicIDE::FindBasicManager( pLib );
1289cdf0e10cSrcweir if ( pBasMgr )
1290cdf0e10cSrcweir {
1291cdf0e10cSrcweir ScriptDocument aDocument( ScriptDocument::getDocumentForBasicManager( pBasMgr ) );
1292cdf0e10cSrcweir String aLibName = pLib->GetName();
1293cdf0e10cSrcweir pWin = FindBasWin( aDocument, aLibName, pActiveModule->GetName(), sal_True );
1294cdf0e10cSrcweir DBG_ASSERT( pWin, "Error/Step-Hdl: Fenster wurde nicht erzeugt/gefunden!" );
1295cdf0e10cSrcweir SetCurLib( aDocument, aLibName );
1296cdf0e10cSrcweir SetCurWindow( pWin, sal_True );
1297cdf0e10cSrcweir }
1298cdf0e10cSrcweir }
1299cdf0e10cSrcweir BasicManager* pBasicMgr = BasicIDE::FindBasicManager( pBasic );
1300cdf0e10cSrcweir if ( pBasicMgr )
1301cdf0e10cSrcweir StartListening( *pBasicMgr, sal_True /* Nur einmal anmelden */ );
1302cdf0e10cSrcweir return pWin;
1303cdf0e10cSrcweir }
1304cdf0e10cSrcweir return 0;
1305cdf0e10cSrcweir }
1306cdf0e10cSrcweir
AdjustPosSizePixel(const Point & rPos,const Size & rSize)1307cdf0e10cSrcweir void __EXPORT BasicIDEShell::AdjustPosSizePixel( const Point &rPos, const Size &rSize )
1308cdf0e10cSrcweir {
1309cdf0e10cSrcweir // Nicht wenn minimiert, weil dann bei Restore der Text verschoben ist.
1310cdf0e10cSrcweir if ( GetViewFrame()->GetWindow().GetOutputSizePixel().Height() == 0 )
1311cdf0e10cSrcweir return;
1312cdf0e10cSrcweir
1313cdf0e10cSrcweir Size aSz( rSize );
1314cdf0e10cSrcweir // long nScrollbarWidthPixel = aVScrollBar.GetSizePixel().Width();
1315cdf0e10cSrcweir Size aScrollBarBoxSz( aScrollBarBox.GetSizePixel() );
1316cdf0e10cSrcweir aSz.Height() -= aScrollBarBoxSz.Height();
1317cdf0e10cSrcweir
1318cdf0e10cSrcweir Size aOutSz( aSz );
1319cdf0e10cSrcweir aSz.Width() -= aScrollBarBoxSz.Width();
1320cdf0e10cSrcweir aScrollBarBox.SetPosPixel( Point( rSize.Width() - aScrollBarBoxSz.Width(), rSize.Height() - aScrollBarBoxSz.Height() ) );
1321cdf0e10cSrcweir aVScrollBar.SetPosSizePixel( Point( rPos.X()+aSz.Width(), rPos.Y() ), Size( aScrollBarBoxSz.Width(), aSz.Height() ) );
1322cdf0e10cSrcweir if ( bTabBarSplitted )
1323cdf0e10cSrcweir {
1324cdf0e10cSrcweir // SplitSize ist beim Resize 0 !
1325cdf0e10cSrcweir long nSplitPos = pTabBar->GetSizePixel().Width();
1326cdf0e10cSrcweir if ( nSplitPos > aSz.Width() )
1327cdf0e10cSrcweir nSplitPos = aSz.Width();
1328cdf0e10cSrcweir pTabBar->SetPosSizePixel( Point( rPos.X(), rPos.Y()+aSz.Height() ), Size( nSplitPos, aScrollBarBoxSz.Height() ) );
1329cdf0e10cSrcweir long nScrlStart = rPos.X() + nSplitPos;
1330cdf0e10cSrcweir aHScrollBar.SetPosSizePixel( Point( nScrlStart, rPos.Y()+aSz.Height() ), Size( aSz.Width() - nScrlStart + 1, aScrollBarBoxSz.Height() ) );
1331cdf0e10cSrcweir aHScrollBar.Update();
1332cdf0e10cSrcweir }
1333cdf0e10cSrcweir else
1334cdf0e10cSrcweir {
1335cdf0e10cSrcweir aHScrollBar.SetPosSizePixel( Point( rPos.X()+ aSz.Width()/2 - 1, rPos.Y()+aSz.Height() ), Size( aSz.Width()/2 + 2, aScrollBarBoxSz.Height() ) );
1336cdf0e10cSrcweir pTabBar->SetPosSizePixel( Point( rPos.X(), rPos.Y()+aSz.Height() ), Size( aSz.Width()/2, aScrollBarBoxSz.Height() ) );
1337cdf0e10cSrcweir }
1338cdf0e10cSrcweir
1339cdf0e10cSrcweir Window* pEdtWin = pCurWin ? pCurWin->GetLayoutWindow() : pModulLayout;
1340cdf0e10cSrcweir if ( pEdtWin )
1341cdf0e10cSrcweir {
1342cdf0e10cSrcweir if( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) )
1343cdf0e10cSrcweir pEdtWin->SetPosSizePixel( rPos, aSz ); // Ohne ScrollBar
1344cdf0e10cSrcweir else
1345cdf0e10cSrcweir pEdtWin->SetPosSizePixel( rPos, aOutSz );
1346cdf0e10cSrcweir }
1347cdf0e10cSrcweir }
1348cdf0e10cSrcweir
GetCurrentDocument() const1349cdf0e10cSrcweir Reference< XModel > BasicIDEShell::GetCurrentDocument() const
1350cdf0e10cSrcweir {
1351cdf0e10cSrcweir Reference< XModel > xDocument;
1352cdf0e10cSrcweir if ( pCurWin && pCurWin->GetDocument().isDocument() )
1353cdf0e10cSrcweir xDocument = pCurWin->GetDocument().getDocument();
1354cdf0e10cSrcweir return xDocument;
1355cdf0e10cSrcweir }
1356cdf0e10cSrcweir
Activate(sal_Bool bMDI)1357cdf0e10cSrcweir void __EXPORT BasicIDEShell::Activate( sal_Bool bMDI )
1358cdf0e10cSrcweir {
1359cdf0e10cSrcweir SfxViewShell::Activate( bMDI );
1360cdf0e10cSrcweir
1361cdf0e10cSrcweir if ( bMDI )
1362cdf0e10cSrcweir {
1363cdf0e10cSrcweir if( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) )
1364cdf0e10cSrcweir ((DialogWindow*)pCurWin)->UpdateBrowser();
1365cdf0e10cSrcweir
1366cdf0e10cSrcweir ShowObjectDialog( sal_True, sal_False );
1367cdf0e10cSrcweir }
1368cdf0e10cSrcweir }
1369cdf0e10cSrcweir
Deactivate(sal_Bool bMDI)1370cdf0e10cSrcweir void __EXPORT BasicIDEShell::Deactivate( sal_Bool bMDI )
1371cdf0e10cSrcweir {
1372cdf0e10cSrcweir // bMDI sal_True heisst, dass ein anderes MDI aktiviert wurde, bei einem
1373cdf0e10cSrcweir // Deactivate durch eine MessageBox ist bMDI FALSE
1374cdf0e10cSrcweir if ( bMDI )
1375cdf0e10cSrcweir {
1376cdf0e10cSrcweir if( pCurWin && pCurWin->IsA( TYPE( DialogWindow ) ) )
1377cdf0e10cSrcweir {
1378cdf0e10cSrcweir DialogWindow* pXDlgWin = (DialogWindow*)pCurWin;
1379cdf0e10cSrcweir pXDlgWin->DisableBrowser();
1380cdf0e10cSrcweir if( pXDlgWin->IsModified() )
1381cdf0e10cSrcweir BasicIDE::MarkDocumentModified( pXDlgWin->GetDocument() );
1382cdf0e10cSrcweir }
1383cdf0e10cSrcweir
1384cdf0e10cSrcweir // CanClose pruefen, damit auch beim deaktivieren der BasicIDE geprueft wird,
1385cdf0e10cSrcweir // ob in einem Modul der Sourcecode zu gross ist...
1386cdf0e10cSrcweir for ( sal_uLong nWin = 0; nWin < aIDEWindowTable.Count(); nWin++ )
1387cdf0e10cSrcweir {
1388cdf0e10cSrcweir IDEBaseWindow* pWin = aIDEWindowTable.GetObject( nWin );
1389cdf0e10cSrcweir if ( /* !pWin->IsSuspended() && */ !pWin->CanClose() )
1390cdf0e10cSrcweir {
1391cdf0e10cSrcweir if ( m_aCurLibName.Len() && ( pWin->IsDocument( m_aCurDocument ) || pWin->GetLibName() != m_aCurLibName ) )
1392cdf0e10cSrcweir SetCurLib( ScriptDocument::getApplicationScriptDocument(), String(), false );
1393cdf0e10cSrcweir SetCurWindow( pWin, sal_True );
1394cdf0e10cSrcweir break;
1395cdf0e10cSrcweir }
1396cdf0e10cSrcweir }
1397cdf0e10cSrcweir
1398cdf0e10cSrcweir ShowObjectDialog( sal_False, sal_False );
1399cdf0e10cSrcweir }
1400cdf0e10cSrcweir }
1401cdf0e10cSrcweir
1402cdf0e10cSrcweir
IMPL_LINK(BasicIDEShell,AccelSelectHdl,Accelerator *,pAccel)1403cdf0e10cSrcweir IMPL_LINK( BasicIDEShell, AccelSelectHdl, Accelerator*, pAccel )
1404cdf0e10cSrcweir {
1405cdf0e10cSrcweir sal_Bool bDone = sal_True;
1406cdf0e10cSrcweir SfxViewFrame* pViewFrame = GetViewFrame();
1407cdf0e10cSrcweir SfxDispatcher* pDispatcher = pViewFrame ? pViewFrame->GetDispatcher() : NULL;
1408cdf0e10cSrcweir if( !pDispatcher )
1409cdf0e10cSrcweir return sal_False;
1410cdf0e10cSrcweir switch ( pAccel->GetCurKeyCode().GetCode() )
1411cdf0e10cSrcweir {
1412cdf0e10cSrcweir case KEY_F5:
1413cdf0e10cSrcweir if ( pAccel->GetCurKeyCode().IsShift() )
1414cdf0e10cSrcweir pDispatcher->Execute( SID_BASICSTOP, SFX_CALLMODE_SYNCHRON );
1415cdf0e10cSrcweir else
1416cdf0e10cSrcweir pDispatcher->Execute( SID_BASICRUN, SFX_CALLMODE_SYNCHRON );
1417cdf0e10cSrcweir break;
1418cdf0e10cSrcweir case KEY_F7:
1419cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_ADDWATCH, SFX_CALLMODE_SYNCHRON );
1420cdf0e10cSrcweir break;
1421cdf0e10cSrcweir case KEY_F8:
1422cdf0e10cSrcweir if ( pAccel->GetCurKeyCode().IsShift() )
1423cdf0e10cSrcweir pDispatcher->Execute( SID_BASICSTEPOVER, SFX_CALLMODE_SYNCHRON );
1424cdf0e10cSrcweir else
1425cdf0e10cSrcweir pDispatcher->Execute( SID_BASICSTEPINTO, SFX_CALLMODE_SYNCHRON );
1426cdf0e10cSrcweir break;
1427cdf0e10cSrcweir case KEY_F9:
1428cdf0e10cSrcweir if ( pAccel->GetCurKeyCode().IsShift() )
1429cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_TOGGLEBRKPNTENABLED, SFX_CALLMODE_SYNCHRON );
1430cdf0e10cSrcweir else
1431cdf0e10cSrcweir pDispatcher->Execute( SID_BASICIDE_TOGGLEBRKPNT, SFX_CALLMODE_SYNCHRON );
1432cdf0e10cSrcweir break;
1433cdf0e10cSrcweir default: bDone = sal_False;
1434cdf0e10cSrcweir }
1435cdf0e10cSrcweir return bDone;
1436cdf0e10cSrcweir }
1437cdf0e10cSrcweir
1438