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