xref: /AOO41X/main/basctl/source/basicide/baside2.cxx (revision 0848378beb0d0fcd9a9bf3cafa6204dbc20d39f7)
131598a22SAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
331598a22SAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
431598a22SAndrew Rist  * or more contributor license agreements.  See the NOTICE file
531598a22SAndrew Rist  * distributed with this work for additional information
631598a22SAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
731598a22SAndrew Rist  * to you under the Apache License, Version 2.0 (the
831598a22SAndrew Rist  * "License"); you may not use this file except in compliance
931598a22SAndrew Rist  * with the License.  You may obtain a copy of the License at
10cdf0e10cSrcweir  *
1131598a22SAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12cdf0e10cSrcweir  *
1331598a22SAndrew Rist  * Unless required by applicable law or agreed to in writing,
1431598a22SAndrew Rist  * software distributed under the License is distributed on an
1531598a22SAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
1631598a22SAndrew Rist  * KIND, either express or implied.  See the License for the
1731598a22SAndrew Rist  * specific language governing permissions and limitations
1831598a22SAndrew Rist  * under the License.
19cdf0e10cSrcweir  *
2031598a22SAndrew Rist  *************************************************************/
2131598a22SAndrew Rist 
2231598a22SAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_basctl.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <ide_pch.hxx>
29cdf0e10cSrcweir 
30cdf0e10cSrcweir 
31cdf0e10cSrcweir #include <svtools/texteng.hxx>
32cdf0e10cSrcweir #include <svtools/textview.hxx>
33cdf0e10cSrcweir #include <svtools/xtextedt.hxx>
34cdf0e10cSrcweir #include <basic/sbx.hxx>
35cdf0e10cSrcweir #include <comphelper/processfactory.hxx>
36cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilePicker.hpp>
37cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilePickerControlAccess.hpp>
38cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/XFilterManager.hpp>
39cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/TemplateDescription.hpp>
40cdf0e10cSrcweir #include <com/sun/star/ui/dialogs/ExtendedFilePickerElementIds.hpp>
41cdf0e10cSrcweir #ifndef _COM_SUN_STAR_SCRIPT_XLIBRYARYCONTAINER2_HPP_
42cdf0e10cSrcweir #include <com/sun/star/script/XLibraryContainer2.hpp>
43cdf0e10cSrcweir #endif
44cdf0e10cSrcweir #include <com/sun/star/document/MacroExecMode.hpp>
45cdf0e10cSrcweir #include <com/sun/star/script/ModuleType.hpp>
46cdf0e10cSrcweir #include <toolkit/helper/vclunohelper.hxx>
47cdf0e10cSrcweir #include <sfx2/docfile.hxx>
48cdf0e10cSrcweir #include <basic/basrdll.hxx>
49cdf0e10cSrcweir 
50cdf0e10cSrcweir 
51cdf0e10cSrcweir #include <baside2.hrc>
52cdf0e10cSrcweir #include <baside2.hxx>
53cdf0e10cSrcweir #include <objdlg.hxx>
54cdf0e10cSrcweir #include <iderdll.hxx>
55cdf0e10cSrcweir #include <iderdll2.hxx>
56cdf0e10cSrcweir 
57cdf0e10cSrcweir #include <basobj.hxx>
58cdf0e10cSrcweir #include <brkdlg.hxx>
59cdf0e10cSrcweir 
60cdf0e10cSrcweir #include <svx/srchdlg.hxx>
61cdf0e10cSrcweir 
62cdf0e10cSrcweir #include <vcl/sound.hxx>
63cdf0e10cSrcweir 
64cdf0e10cSrcweir //#ifndef _TXTCMP_HXX //autogen
65cdf0e10cSrcweir //#include <svtools/txtcmp.hxx>
66cdf0e10cSrcweir //#endif
67cdf0e10cSrcweir 
68cdf0e10cSrcweir #include <unotools/textsearch.hxx>
69cdf0e10cSrcweir #include <tools/diagnose_ex.h>
70cdf0e10cSrcweir 
71cdf0e10cSrcweir using namespace ::com::sun::star;
72cdf0e10cSrcweir using namespace ::com::sun::star::uno;
73cdf0e10cSrcweir 
74cdf0e10cSrcweir 
75cdf0e10cSrcweir #define SPLIT_MARGIN	5
76cdf0e10cSrcweir #define SPLIT_HEIGHT	2
77cdf0e10cSrcweir 
78cdf0e10cSrcweir #define LMARGPRN		1700
79cdf0e10cSrcweir #define RMARGPRN		 900
80cdf0e10cSrcweir #define TMARGPRN    	2000
81cdf0e10cSrcweir #define BMARGPRN    	1000
82cdf0e10cSrcweir #define BORDERPRN		300
83cdf0e10cSrcweir 
84cdf0e10cSrcweir #define APPWAIT_START	100
85cdf0e10cSrcweir 
86cdf0e10cSrcweir #define VALIDWINDOW		0x1234
87cdf0e10cSrcweir 
88cdf0e10cSrcweir #if defined(OW) || defined(MTF)
89cdf0e10cSrcweir #define FILTERMASK_ALL "*"
90cdf0e10cSrcweir #elif defined(PM2)
91cdf0e10cSrcweir #define FILTERMASK_ALL ""
92cdf0e10cSrcweir #else
93cdf0e10cSrcweir #define FILTERMASK_ALL "*.*"
94cdf0e10cSrcweir #endif
95cdf0e10cSrcweir 
96cdf0e10cSrcweir using namespace ::com::sun::star;
97cdf0e10cSrcweir using namespace ::com::sun::star::uno;
98cdf0e10cSrcweir using namespace ::com::sun::star::ui::dialogs;
99cdf0e10cSrcweir using namespace utl;
100cdf0e10cSrcweir using namespace comphelper;
101cdf0e10cSrcweir 
102cdf0e10cSrcweir 
103cdf0e10cSrcweir DBG_NAME( ModulWindow )
104cdf0e10cSrcweir 
105cdf0e10cSrcweir TYPEINIT1( ModulWindow , IDEBaseWindow );
106cdf0e10cSrcweir 
lcl_PrintHeader(Printer * pPrinter,sal_uInt16 nPages,sal_uInt16 nCurPage,const String & rTitle,bool bOutput)107cdf0e10cSrcweir void lcl_PrintHeader( Printer* pPrinter, sal_uInt16 nPages, sal_uInt16 nCurPage, const String& rTitle, bool bOutput )
108cdf0e10cSrcweir {
109cdf0e10cSrcweir 	short nLeftMargin 	= LMARGPRN;
110cdf0e10cSrcweir 	Size aSz = pPrinter->GetOutputSize();
111cdf0e10cSrcweir 	short nBorder = BORDERPRN;
112cdf0e10cSrcweir 
113cdf0e10cSrcweir 	const Color aOldLineColor( pPrinter->GetLineColor() );
114cdf0e10cSrcweir 	const Color aOldFillColor( pPrinter->GetFillColor() );
115cdf0e10cSrcweir 	const Font	aOldFont( pPrinter->GetFont() );
116cdf0e10cSrcweir 
117cdf0e10cSrcweir 	pPrinter->SetLineColor( Color( COL_BLACK ) );
118cdf0e10cSrcweir 	pPrinter->SetFillColor();
119cdf0e10cSrcweir 
120cdf0e10cSrcweir 	Font aFont( aOldFont );
121cdf0e10cSrcweir 	aFont.SetWeight( WEIGHT_BOLD );
122cdf0e10cSrcweir 	aFont.SetAlign( ALIGN_BOTTOM );
123cdf0e10cSrcweir 	pPrinter->SetFont( aFont );
124cdf0e10cSrcweir 
125cdf0e10cSrcweir 	long nFontHeight = pPrinter->GetTextHeight();
126cdf0e10cSrcweir 
127cdf0e10cSrcweir 	// 1.Border => Strich, 2+3 Border = Freiraum.
128cdf0e10cSrcweir 	long nYTop = TMARGPRN-3*nBorder-nFontHeight;
129cdf0e10cSrcweir 
130cdf0e10cSrcweir 	long nXLeft = nLeftMargin-nBorder;
131cdf0e10cSrcweir 	long nXRight = aSz.Width()-RMARGPRN+nBorder;
132cdf0e10cSrcweir 
133cdf0e10cSrcweir     if( bOutput )
134cdf0e10cSrcweir         pPrinter->DrawRect( Rectangle(
135cdf0e10cSrcweir             Point( nXLeft, nYTop ),
136cdf0e10cSrcweir             Size( nXRight-nXLeft, aSz.Height() - nYTop - BMARGPRN + nBorder ) ) );
137cdf0e10cSrcweir 
138cdf0e10cSrcweir 
139cdf0e10cSrcweir 	long nY = TMARGPRN-2*nBorder;
140cdf0e10cSrcweir 	Point aPos( nLeftMargin, nY );
141cdf0e10cSrcweir     if( bOutput )
142cdf0e10cSrcweir         pPrinter->DrawText( aPos, rTitle );
143cdf0e10cSrcweir 	if ( nPages != 1 )
144cdf0e10cSrcweir 	{
145cdf0e10cSrcweir 		aFont.SetWeight( WEIGHT_NORMAL );
146cdf0e10cSrcweir 		pPrinter->SetFont( aFont );
147cdf0e10cSrcweir 		String aPageStr( RTL_CONSTASCII_USTRINGPARAM( " [" ) );
148cdf0e10cSrcweir 		aPageStr += String( IDEResId( RID_STR_PAGE ) );
149cdf0e10cSrcweir 		aPageStr += ' ';
150cdf0e10cSrcweir 		aPageStr += String::CreateFromInt32( nCurPage );
151cdf0e10cSrcweir 		aPageStr += ']';
152cdf0e10cSrcweir 		aPos.X() += pPrinter->GetTextWidth( rTitle );
153cdf0e10cSrcweir         if( bOutput )
154cdf0e10cSrcweir             pPrinter->DrawText( aPos, aPageStr );
155cdf0e10cSrcweir 	}
156cdf0e10cSrcweir 
157cdf0e10cSrcweir 
158cdf0e10cSrcweir 	nY = TMARGPRN-nBorder;
159cdf0e10cSrcweir 
160cdf0e10cSrcweir     if( bOutput )
161cdf0e10cSrcweir         pPrinter->DrawLine( Point( nXLeft, nY ), Point( nXRight, nY ) );
162cdf0e10cSrcweir 
163cdf0e10cSrcweir 	pPrinter->SetFont( aOldFont );
164cdf0e10cSrcweir 	pPrinter->SetFillColor( aOldFillColor );
165cdf0e10cSrcweir 	pPrinter->SetLineColor( aOldLineColor );
166cdf0e10cSrcweir }
167cdf0e10cSrcweir 
lcl_ConvertTabsToSpaces(String & rLine)168cdf0e10cSrcweir void lcl_ConvertTabsToSpaces( String& rLine )
169cdf0e10cSrcweir {
170cdf0e10cSrcweir 	if ( rLine.Len() )
171cdf0e10cSrcweir 	{
172cdf0e10cSrcweir 		sal_uInt16 nPos = 0;
173cdf0e10cSrcweir 		sal_uInt16 nMax = rLine.Len();
174cdf0e10cSrcweir 		while ( nPos < nMax )
175cdf0e10cSrcweir 		{
176cdf0e10cSrcweir 			if ( rLine.GetChar( nPos ) == '\t' )
177cdf0e10cSrcweir 			{
178cdf0e10cSrcweir 				// Nicht 4 Blanks, sondern an 4er TabPos:
179cdf0e10cSrcweir 				String aBlanker;
180cdf0e10cSrcweir 				aBlanker.Fill( ( 4 - ( nPos % 4 ) ), ' ' );
181cdf0e10cSrcweir 				rLine.Erase( nPos, 1 );
182cdf0e10cSrcweir 				rLine.Insert( aBlanker, nPos );
183cdf0e10cSrcweir 				nMax = rLine.Len();
184cdf0e10cSrcweir 			}
185cdf0e10cSrcweir 			nPos++;	// Nicht optimal, falls Tab, aber auch nicht verkehrt...
186cdf0e10cSrcweir 		}
187cdf0e10cSrcweir 	}
188cdf0e10cSrcweir }
189cdf0e10cSrcweir 
190cdf0e10cSrcweir 
ModulWindow(ModulWindowLayout * pParent,const ScriptDocument & rDocument,String aLibName,String aName,::rtl::OUString & aModule)191cdf0e10cSrcweir ModulWindow::ModulWindow( ModulWindowLayout* pParent, const ScriptDocument& rDocument, String aLibName,
192cdf0e10cSrcweir                           String aName, ::rtl::OUString& aModule )
193cdf0e10cSrcweir 		:IDEBaseWindow( pParent, rDocument, aLibName, aName )
194cdf0e10cSrcweir 		,aXEditorWindow( this )
195cdf0e10cSrcweir         ,m_aModule( aModule )
196cdf0e10cSrcweir {
197cdf0e10cSrcweir 	DBG_CTOR( ModulWindow, 0 );
198cdf0e10cSrcweir 	nValid = VALIDWINDOW;
199cdf0e10cSrcweir 	pLayout = pParent;
200cdf0e10cSrcweir 	aXEditorWindow.Show();
201cdf0e10cSrcweir 
202cdf0e10cSrcweir 	SetBackground();
203cdf0e10cSrcweir }
204cdf0e10cSrcweir 
XModule()205cdf0e10cSrcweir SbModuleRef ModulWindow::XModule()
206cdf0e10cSrcweir {
207cdf0e10cSrcweir     // ModuleWindows can now be created as a result of the
208cdf0e10cSrcweir     // modules getting created via the api. This is a result of an
209cdf0e10cSrcweir     // elementInserted event from the BasicLibrary container.
210cdf0e10cSrcweir     // However the SbModule is also created from a different listener to
211cdf0e10cSrcweir     // the same event ( in basmgr ) Therefore it is possible when we look
212cdf0e10cSrcweir     // for xModule it may not yet be available, here we keep tring to access
213cdf0e10cSrcweir     // the module until such time as it exists
214cdf0e10cSrcweir 
215cdf0e10cSrcweir     if ( !xModule.Is() )
216cdf0e10cSrcweir     {
217cdf0e10cSrcweir         BasicManager* pBasMgr = GetDocument().getBasicManager();
218cdf0e10cSrcweir         if ( pBasMgr )
219cdf0e10cSrcweir         {
220cdf0e10cSrcweir             StarBASIC* pBasic = pBasMgr->GetLib( GetLibName() );
221cdf0e10cSrcweir             if ( pBasic )
222cdf0e10cSrcweir             {
223cdf0e10cSrcweir                 xBasic = pBasic;
224cdf0e10cSrcweir                 xModule = (SbModule*)pBasic->FindModule( GetName() );
225cdf0e10cSrcweir             }
226cdf0e10cSrcweir         }
227cdf0e10cSrcweir     }
228cdf0e10cSrcweir     return xModule;
229cdf0e10cSrcweir }
230cdf0e10cSrcweir 
~ModulWindow()231cdf0e10cSrcweir __EXPORT ModulWindow::~ModulWindow()
232cdf0e10cSrcweir {
233cdf0e10cSrcweir 	DBG_DTOR( ModulWindow, 0 );
234cdf0e10cSrcweir 	nValid = 0;
235cdf0e10cSrcweir 
236cdf0e10cSrcweir 	StarBASIC::Stop();
237cdf0e10cSrcweir }
238cdf0e10cSrcweir 
239cdf0e10cSrcweir 
GetFocus()240cdf0e10cSrcweir void __EXPORT ModulWindow::GetFocus()
241cdf0e10cSrcweir {
242cdf0e10cSrcweir 	if ( nValid != VALIDWINDOW  )
243cdf0e10cSrcweir 		return;
244cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
245cdf0e10cSrcweir 	aXEditorWindow.GetEdtWindow().GrabFocus();
246cdf0e10cSrcweir 	// Basisklasse nicht rufen, weil Focus jetzt woanders...
247cdf0e10cSrcweir }
248cdf0e10cSrcweir 
DoInit()249cdf0e10cSrcweir void ModulWindow::DoInit()
250cdf0e10cSrcweir {
251cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
252cdf0e10cSrcweir 	// Wird beim Umschalten der Fenster gerufen...
253cdf0e10cSrcweir 	if ( GetVScrollBar() )
254cdf0e10cSrcweir 		GetVScrollBar()->Hide();
255cdf0e10cSrcweir 	GetHScrollBar()->Show();
256cdf0e10cSrcweir //	GetEditorWindow().SetScrollBarRanges();
257cdf0e10cSrcweir 	GetEditorWindow().InitScrollBars();
258cdf0e10cSrcweir //	GetEditorWindow().GrabFocus();
259cdf0e10cSrcweir }
260cdf0e10cSrcweir 
261cdf0e10cSrcweir 
Paint(const Rectangle &)262cdf0e10cSrcweir void __EXPORT ModulWindow::Paint( const Rectangle& )
263cdf0e10cSrcweir {
264cdf0e10cSrcweir }
265cdf0e10cSrcweir 
Resize()266cdf0e10cSrcweir void __EXPORT ModulWindow::Resize()
267cdf0e10cSrcweir {
268cdf0e10cSrcweir 	aXEditorWindow.SetPosSizePixel( Point( 0, 0 ),
269cdf0e10cSrcweir 									Size( GetOutputSizePixel() ) );
270cdf0e10cSrcweir }
271cdf0e10cSrcweir 
272cdf0e10cSrcweir 
273cdf0e10cSrcweir // "Import" von baside4.cxx
274cdf0e10cSrcweir void CreateEngineForBasic( StarBASIC* pBasic );
275cdf0e10cSrcweir 
CheckCompileBasic()276cdf0e10cSrcweir void ModulWindow::CheckCompileBasic()
277cdf0e10cSrcweir {
278cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
279cdf0e10cSrcweir 
280cdf0e10cSrcweir     if ( XModule().Is() )
281cdf0e10cSrcweir     {
282cdf0e10cSrcweir 	    // Zur Laufzeit wird niemals compiliert!
283cdf0e10cSrcweir 	    sal_Bool bRunning = StarBASIC::IsRunning();
284cdf0e10cSrcweir 	    sal_Bool bModified = ( !xModule->IsCompiled() ||
285cdf0e10cSrcweir 		    ( GetEditEngine() && GetEditEngine()->IsModified() ) );
286cdf0e10cSrcweir 
287cdf0e10cSrcweir 	    if ( !bRunning && bModified )
288cdf0e10cSrcweir 	    {
289cdf0e10cSrcweir 		    sal_Bool bDone = sal_False;
290cdf0e10cSrcweir 
291cdf0e10cSrcweir 			BasicIDEShell* pIDEShell = IDE_DLL()->GetShell();
292cdf0e10cSrcweir 		    pIDEShell->GetViewFrame()->GetWindow().EnterWait();
293cdf0e10cSrcweir 
294cdf0e10cSrcweir 		    if( bModified )
295cdf0e10cSrcweir 		    {
296cdf0e10cSrcweir 			    AssertValidEditEngine();
297cdf0e10cSrcweir 			    GetEditorWindow().SetSourceInBasic( sal_False );
298cdf0e10cSrcweir 		    }
299cdf0e10cSrcweir 
300cdf0e10cSrcweir 		    sal_Bool bWasModified = GetBasic()->IsModified();
301cdf0e10cSrcweir 
302cdf0e10cSrcweir 		    bDone = GetBasic()->Compile( xModule );
303cdf0e10cSrcweir 		    if ( !bWasModified )
304cdf0e10cSrcweir 			    GetBasic()->SetModified( sal_False );
305cdf0e10cSrcweir 
306cdf0e10cSrcweir 		    if ( bDone )
307cdf0e10cSrcweir 		    {
308cdf0e10cSrcweir 			    GetBreakPoints().SetBreakPointsInBasic( xModule );
309cdf0e10cSrcweir 		    }
310cdf0e10cSrcweir 
311cdf0e10cSrcweir 		    pIDEShell->GetViewFrame()->GetWindow().LeaveWait();
312cdf0e10cSrcweir 
313cdf0e10cSrcweir 		    aStatus.bError = !bDone;
314cdf0e10cSrcweir 		    aStatus.bIsRunning = sal_False;
315cdf0e10cSrcweir 	    }
316cdf0e10cSrcweir     }
317cdf0e10cSrcweir }
318cdf0e10cSrcweir 
BasicExecute()319cdf0e10cSrcweir sal_Bool ModulWindow::BasicExecute()
320cdf0e10cSrcweir {
321cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
322cdf0e10cSrcweir 
323cdf0e10cSrcweir     // #116444# check security settings before macro execution
324cdf0e10cSrcweir     ScriptDocument aDocument( GetDocument() );
325cdf0e10cSrcweir     if ( aDocument.isDocument() )
326cdf0e10cSrcweir     {
327cdf0e10cSrcweir         if ( !aDocument.allowMacros() )
328cdf0e10cSrcweir         {
329cdf0e10cSrcweir             WarningBox( this, WB_OK, String( IDEResId( RID_STR_CANNOTRUNMACRO ) ) ).Execute();
330cdf0e10cSrcweir             return sal_False;
331cdf0e10cSrcweir         }
332cdf0e10cSrcweir     }
333cdf0e10cSrcweir 
334cdf0e10cSrcweir 	CheckCompileBasic();
335cdf0e10cSrcweir 
336cdf0e10cSrcweir 	if ( XModule().Is() && xModule->IsCompiled() && !aStatus.bError )
337cdf0e10cSrcweir 	{
338cdf0e10cSrcweir 		if ( GetBreakPoints().Count() )
339cdf0e10cSrcweir 			aStatus.nBasicFlags = aStatus.nBasicFlags | SbDEBUG_BREAK;
340cdf0e10cSrcweir 
341cdf0e10cSrcweir 		if ( !aStatus.bIsRunning )
342cdf0e10cSrcweir 		{
343cdf0e10cSrcweir 			DBG_ASSERT( xModule.Is(), "Kein Modul!" );
344cdf0e10cSrcweir 			AddStatus( BASWIN_RUNNINGBASIC );
345cdf0e10cSrcweir 			sal_uInt16 nStart, nEnd, nCurMethodStart = 0;
346cdf0e10cSrcweir 			TextSelection aSel = GetEditView()->GetSelection();
347cdf0e10cSrcweir 			if ( aDocument.isInVBAMode() )
348cdf0e10cSrcweir 				nCurMethodStart = ( aSel.GetStart().GetPara() + 1 );
349cdf0e10cSrcweir 			SbMethod* pMethod = 0;
350cdf0e10cSrcweir 			// erstes Macro, sonst blind "Main" (ExtSearch?)
351cdf0e10cSrcweir 			for ( sal_uInt16 nMacro = 0; nMacro < xModule->GetMethods()->Count(); nMacro++ )
352cdf0e10cSrcweir 			{
353cdf0e10cSrcweir 				SbMethod* pM = (SbMethod*)xModule->GetMethods()->Get( nMacro );
354cdf0e10cSrcweir 				DBG_ASSERT( pM, "Method?" );
355cdf0e10cSrcweir 				pM->GetLineRange( nStart, nEnd );
356cdf0e10cSrcweir 				if ( aDocument.isInVBAMode() )
357cdf0e10cSrcweir 				{
358cdf0e10cSrcweir 					if (  nCurMethodStart >= nStart && nCurMethodStart <= nEnd )
359cdf0e10cSrcweir 					{
360cdf0e10cSrcweir 						pMethod = pM;
361cdf0e10cSrcweir 						break;
362cdf0e10cSrcweir 					}
363cdf0e10cSrcweir 				}
364cdf0e10cSrcweir 				else if  ( !pMethod || ( nStart < nCurMethodStart && !pM->IsHidden() ) )
365cdf0e10cSrcweir 				{
366cdf0e10cSrcweir 					pMethod = pM;
367cdf0e10cSrcweir 					nCurMethodStart = nStart;
368cdf0e10cSrcweir 				}
369cdf0e10cSrcweir 			}
370cdf0e10cSrcweir 			if ( !pMethod )
371cdf0e10cSrcweir 			{
372cdf0e10cSrcweir 				if ( aDocument.isInVBAMode() )
373*0848378bSHerbert Dürr 					return ( BasicIDE::ChooseMacro( uno::Reference< frame::XModel >(), sal_False, rtl::OUString() ).isEmpty() == false ) ? sal_True : sal_False;
374cdf0e10cSrcweir 				else
375cdf0e10cSrcweir 					pMethod = (SbMethod*)xModule->Find( String( RTL_CONSTASCII_USTRINGPARAM( "Main" ) ), SbxCLASS_METHOD );
376cdf0e10cSrcweir 			}
377cdf0e10cSrcweir 			if ( pMethod )
378cdf0e10cSrcweir 			{
379cdf0e10cSrcweir 				pMethod->SetDebugFlags( aStatus.nBasicFlags );
380cdf0e10cSrcweir 				BasicDLL::SetDebugMode( sal_True );
381cdf0e10cSrcweir 				BasicIDE::RunMethod( pMethod );
382cdf0e10cSrcweir 				BasicDLL::SetDebugMode( sal_False );
383cdf0e10cSrcweir 				// Falls waehrend Interactive=sal_False abgebrochen
384cdf0e10cSrcweir 				BasicDLL::EnableBreak( sal_True );
385cdf0e10cSrcweir 			}
386cdf0e10cSrcweir 			ClearStatus( BASWIN_RUNNINGBASIC );
387cdf0e10cSrcweir 		}
388cdf0e10cSrcweir 		else
389cdf0e10cSrcweir 			aStatus.bIsRunning = sal_False;	// Abbruch von Reschedule()
390cdf0e10cSrcweir 	}
391cdf0e10cSrcweir 
392cdf0e10cSrcweir 	sal_Bool bDone = !aStatus.bError;
393cdf0e10cSrcweir 
394cdf0e10cSrcweir 	return bDone;
395cdf0e10cSrcweir }
396cdf0e10cSrcweir 
CompileBasic()397cdf0e10cSrcweir sal_Bool ModulWindow::CompileBasic()
398cdf0e10cSrcweir {
399cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
400cdf0e10cSrcweir 	CheckCompileBasic();
401cdf0e10cSrcweir 
402cdf0e10cSrcweir     sal_Bool bIsCompiled = sal_False;
403cdf0e10cSrcweir     if ( XModule().Is() )
404cdf0e10cSrcweir         bIsCompiled = xModule->IsCompiled();
405cdf0e10cSrcweir 
406cdf0e10cSrcweir     return bIsCompiled;
407cdf0e10cSrcweir }
408cdf0e10cSrcweir 
BasicRun()409cdf0e10cSrcweir sal_Bool ModulWindow::BasicRun()
410cdf0e10cSrcweir {
411cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
412cdf0e10cSrcweir 
413cdf0e10cSrcweir 	aStatus.nBasicFlags = 0;
414cdf0e10cSrcweir 	sal_Bool bDone = BasicExecute();
415cdf0e10cSrcweir 	return bDone;
416cdf0e10cSrcweir }
417cdf0e10cSrcweir 
BasicStepOver()418cdf0e10cSrcweir sal_Bool ModulWindow::BasicStepOver()
419cdf0e10cSrcweir {
420cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
421cdf0e10cSrcweir 	aStatus.nBasicFlags = SbDEBUG_STEPINTO | SbDEBUG_STEPOVER;
422cdf0e10cSrcweir 	sal_Bool bDone = BasicExecute();
423cdf0e10cSrcweir 	return bDone;
424cdf0e10cSrcweir }
425cdf0e10cSrcweir 
426cdf0e10cSrcweir 
BasicStepInto()427cdf0e10cSrcweir sal_Bool ModulWindow::BasicStepInto()
428cdf0e10cSrcweir {
429cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
430cdf0e10cSrcweir 
431cdf0e10cSrcweir 	aStatus.nBasicFlags = SbDEBUG_STEPINTO;
432cdf0e10cSrcweir 	sal_Bool bDone = BasicExecute();
433cdf0e10cSrcweir 	return bDone;
434cdf0e10cSrcweir }
435cdf0e10cSrcweir 
BasicStepOut()436cdf0e10cSrcweir sal_Bool ModulWindow::BasicStepOut()
437cdf0e10cSrcweir {
438cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
439cdf0e10cSrcweir 
440cdf0e10cSrcweir 	aStatus.nBasicFlags = SbDEBUG_STEPOUT;
441cdf0e10cSrcweir 	sal_Bool bDone = BasicExecute();
442cdf0e10cSrcweir 	return bDone;
443cdf0e10cSrcweir }
444cdf0e10cSrcweir 
445cdf0e10cSrcweir 
446cdf0e10cSrcweir 
BasicStop()447cdf0e10cSrcweir void ModulWindow::BasicStop()
448cdf0e10cSrcweir {
449cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
450cdf0e10cSrcweir 
451cdf0e10cSrcweir 	GetBasic()->Stop();
452cdf0e10cSrcweir 	aStatus.bIsRunning = sal_False;
453cdf0e10cSrcweir }
454cdf0e10cSrcweir 
LoadBasic()455cdf0e10cSrcweir sal_Bool ModulWindow::LoadBasic()
456cdf0e10cSrcweir {
457cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
458cdf0e10cSrcweir 	sal_Bool bDone = sal_False;
459cdf0e10cSrcweir 
460cdf0e10cSrcweir     Reference< lang::XMultiServiceFactory > xMSF( ::comphelper::getProcessServiceFactory() );
461cdf0e10cSrcweir     Reference < XFilePicker > xFP;
462cdf0e10cSrcweir     if( xMSF.is() )
463cdf0e10cSrcweir     {
464cdf0e10cSrcweir 		Sequence <Any> aServiceType(1);
465cdf0e10cSrcweir 		aServiceType[0] <<= TemplateDescription::FILEOPEN_SIMPLE;
466cdf0e10cSrcweir         xFP = Reference< XFilePicker >( xMSF->createInstanceWithArguments(
467cdf0e10cSrcweir 					::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ), aServiceType ), UNO_QUERY );
468cdf0e10cSrcweir     }
469cdf0e10cSrcweir 
470cdf0e10cSrcweir 	if ( aCurPath.Len() )
471cdf0e10cSrcweir 		xFP->setDisplayDirectory ( aCurPath );
472cdf0e10cSrcweir 
473cdf0e10cSrcweir 	//xFP->setTitle( String( IDEResId( RID_STR_OPEN ) ) );
474cdf0e10cSrcweir 
475cdf0e10cSrcweir     Reference< XFilterManager > xFltMgr(xFP, UNO_QUERY);
476cdf0e10cSrcweir 	xFltMgr->appendFilter( String( RTL_CONSTASCII_USTRINGPARAM( "BASIC" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.bas" ) ) );
477cdf0e10cSrcweir 	xFltMgr->appendFilter( String( IDEResId( RID_STR_FILTER_ALLFILES ) ), String( RTL_CONSTASCII_USTRINGPARAM( FILTERMASK_ALL ) ) );
478cdf0e10cSrcweir 	xFltMgr->setCurrentFilter( String( RTL_CONSTASCII_USTRINGPARAM( "BASIC" ) ) );
479cdf0e10cSrcweir 
480cdf0e10cSrcweir     if( xFP->execute() == RET_OK )
481cdf0e10cSrcweir 	{
482cdf0e10cSrcweir 		Sequence< ::rtl::OUString > aPaths = xFP->getFiles();
483cdf0e10cSrcweir 		aCurPath = aPaths[0];
484cdf0e10cSrcweir 		SfxMedium aMedium( aCurPath, STREAM_READ | STREAM_SHARE_DENYWRITE | STREAM_NOCREATE, sal_True );
485cdf0e10cSrcweir 		SvStream* pStream = aMedium.GetInStream();
486cdf0e10cSrcweir 		if ( pStream )
487cdf0e10cSrcweir 		{
488cdf0e10cSrcweir 			AssertValidEditEngine();
489cdf0e10cSrcweir 			sal_uLong nLines = CalcLineCount( *pStream );
490cdf0e10cSrcweir 			// nLines*4: ReadText/Formatting/Highlighting/Formatting
491cdf0e10cSrcweir 			GetEditorWindow().CreateProgress( String( IDEResId( RID_STR_GENERATESOURCE ) ), nLines*4 );
492cdf0e10cSrcweir 			GetEditEngine()->SetUpdateMode( sal_False );
493cdf0e10cSrcweir 			GetEditView()->Read( *pStream );
494cdf0e10cSrcweir 			GetEditEngine()->SetUpdateMode( sal_True );
495cdf0e10cSrcweir 			GetEditorWindow().Update();	// Es wurde bei UpdateMode = sal_True nur Invalidiert
496cdf0e10cSrcweir 			GetEditorWindow().ForceSyntaxTimeout();
497cdf0e10cSrcweir 			GetEditorWindow().DestroyProgress();
498cdf0e10cSrcweir 			sal_uLong nError = aMedium.GetError();
499cdf0e10cSrcweir 			if ( nError )
500cdf0e10cSrcweir 				ErrorHandler::HandleError( nError );
501cdf0e10cSrcweir 			else
502cdf0e10cSrcweir 				bDone = sal_True;
503cdf0e10cSrcweir 		}
504cdf0e10cSrcweir 		else
505cdf0e10cSrcweir 			ErrorBox( this, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_COULDNTREAD ) ) ).Execute();
506cdf0e10cSrcweir 	}
507cdf0e10cSrcweir 	return bDone;
508cdf0e10cSrcweir }
509cdf0e10cSrcweir 
510cdf0e10cSrcweir 
SaveBasicSource()511cdf0e10cSrcweir sal_Bool ModulWindow::SaveBasicSource()
512cdf0e10cSrcweir {
513cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
514cdf0e10cSrcweir 	sal_Bool bDone = sal_False;
515cdf0e10cSrcweir 
516cdf0e10cSrcweir     Reference< lang::XMultiServiceFactory > xMSF( ::comphelper::getProcessServiceFactory() );
517cdf0e10cSrcweir     Reference < XFilePicker > xFP;
518cdf0e10cSrcweir     if( xMSF.is() )
519cdf0e10cSrcweir     {
520cdf0e10cSrcweir 		Sequence <Any> aServiceType(1);
521cdf0e10cSrcweir 		aServiceType[0] <<= TemplateDescription::FILESAVE_AUTOEXTENSION_PASSWORD;
522cdf0e10cSrcweir         xFP = Reference< XFilePicker >( xMSF->createInstanceWithArguments(
523cdf0e10cSrcweir 					::rtl::OUString(RTL_CONSTASCII_USTRINGPARAM( "com.sun.star.ui.dialogs.FilePicker" ) ), aServiceType ), UNO_QUERY );
524cdf0e10cSrcweir     }
525cdf0e10cSrcweir 
526cdf0e10cSrcweir 	Reference< XFilePickerControlAccess > xFPControl(xFP, UNO_QUERY);
527cdf0e10cSrcweir 	xFPControl->enableControl(ExtendedFilePickerElementIds::CHECKBOX_PASSWORD, sal_False);
528cdf0e10cSrcweir     Any aValue;
529cdf0e10cSrcweir     aValue <<= (sal_Bool) sal_True;
530cdf0e10cSrcweir 	xFPControl->setValue(ExtendedFilePickerElementIds::CHECKBOX_AUTOEXTENSION, 0, aValue);
531cdf0e10cSrcweir 
532cdf0e10cSrcweir 	if ( aCurPath.Len() )
533cdf0e10cSrcweir 		xFP->setDisplayDirectory ( aCurPath );
534cdf0e10cSrcweir 
535cdf0e10cSrcweir 	//xFP->setTitle( String( IDEResId( RID_STR_SAVE ) ) );
536cdf0e10cSrcweir 
537cdf0e10cSrcweir     Reference< XFilterManager > xFltMgr(xFP, UNO_QUERY);
538cdf0e10cSrcweir 	xFltMgr->appendFilter( String( RTL_CONSTASCII_USTRINGPARAM( "BASIC" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.bas" ) ) );
539cdf0e10cSrcweir 	xFltMgr->appendFilter( String( IDEResId( RID_STR_FILTER_ALLFILES ) ), String( RTL_CONSTASCII_USTRINGPARAM( FILTERMASK_ALL ) ) );
540cdf0e10cSrcweir 	xFltMgr->setCurrentFilter( String( RTL_CONSTASCII_USTRINGPARAM( "BASIC" ) ) );
541cdf0e10cSrcweir 
542cdf0e10cSrcweir     if( xFP->execute() == RET_OK )
543cdf0e10cSrcweir 	{
544cdf0e10cSrcweir 		Sequence< ::rtl::OUString > aPaths = xFP->getFiles();
545cdf0e10cSrcweir 		aCurPath = aPaths[0];
54646d2a04eSHerbert Dürr 		SfxMedium aMedium( aCurPath, STREAM_WRITE | STREAM_SHARE_DENYWRITE | STREAM_TRUNC, sal_True, NULL );
547cdf0e10cSrcweir 		SvStream* pStream = aMedium.GetOutStream();
548cdf0e10cSrcweir 		if ( pStream )
549cdf0e10cSrcweir 		{
550cdf0e10cSrcweir 			EnterWait();
551cdf0e10cSrcweir 			AssertValidEditEngine();
552cdf0e10cSrcweir 			GetEditEngine()->Write( *pStream );
553cdf0e10cSrcweir 			aMedium.Commit();
554cdf0e10cSrcweir 			LeaveWait();
555cdf0e10cSrcweir 			sal_uLong nError = aMedium.GetError();
556cdf0e10cSrcweir 			if ( nError )
557cdf0e10cSrcweir 				ErrorHandler::HandleError( nError );
558cdf0e10cSrcweir 			else
559cdf0e10cSrcweir 				bDone = sal_True;
560cdf0e10cSrcweir 		}
561cdf0e10cSrcweir 		else
562cdf0e10cSrcweir 			ErrorBox( this, WB_OK | WB_DEF_OK, String( IDEResId( RID_STR_COULDNTWRITE) ) ).Execute();
563cdf0e10cSrcweir 	}
564cdf0e10cSrcweir 
565cdf0e10cSrcweir 	return bDone;
566cdf0e10cSrcweir }
567cdf0e10cSrcweir 
568cdf0e10cSrcweir sal_Bool implImportDialog( Window* pWin, const String& rCurPath, const ScriptDocument& rDocument, const String& aLibName );
569cdf0e10cSrcweir 
ImportDialog()570cdf0e10cSrcweir sal_Bool ModulWindow::ImportDialog()
571cdf0e10cSrcweir {
572cdf0e10cSrcweir 	const ScriptDocument& rDocument = GetDocument();
573cdf0e10cSrcweir 	String aLibName = GetLibName();
574cdf0e10cSrcweir 	sal_Bool bRet = implImportDialog( this, aCurPath, rDocument, aLibName );
575cdf0e10cSrcweir 	return bRet;
576cdf0e10cSrcweir }
577cdf0e10cSrcweir 
ToggleBreakPoint(sal_uLong nLine)578cdf0e10cSrcweir sal_Bool ModulWindow::ToggleBreakPoint( sal_uLong nLine )
579cdf0e10cSrcweir {
580cdf0e10cSrcweir 	DBG_ASSERT( XModule().Is(), "Kein Modul!" );
581cdf0e10cSrcweir 
582cdf0e10cSrcweir 	sal_Bool bNewBreakPoint = sal_False;
583cdf0e10cSrcweir 
584cdf0e10cSrcweir     if ( XModule().Is() )
585cdf0e10cSrcweir     {
586cdf0e10cSrcweir         CheckCompileBasic();
587cdf0e10cSrcweir 	    if ( aStatus.bError )
588cdf0e10cSrcweir 	    {
589cdf0e10cSrcweir 		    Sound::Beep();
590cdf0e10cSrcweir 		    return sal_False;
591cdf0e10cSrcweir 	    }
592cdf0e10cSrcweir 
593cdf0e10cSrcweir         BreakPoint* pBrk = GetBreakPoints().FindBreakPoint( nLine );
594cdf0e10cSrcweir 	    if ( pBrk ) // entfernen
595cdf0e10cSrcweir 	    {
596cdf0e10cSrcweir 		    xModule->ClearBP( (sal_uInt16)nLine );
597cdf0e10cSrcweir 		    delete GetBreakPoints().Remove( pBrk );
598cdf0e10cSrcweir 	    }
599cdf0e10cSrcweir 	    else // einen erzeugen
600cdf0e10cSrcweir 	    {
601cdf0e10cSrcweir 		    if ( xModule->SetBP( (sal_uInt16)nLine) )
602cdf0e10cSrcweir 		    {
603cdf0e10cSrcweir 			    GetBreakPoints().InsertSorted( new BreakPoint( nLine ) );
604cdf0e10cSrcweir 			    bNewBreakPoint = sal_True;
605cdf0e10cSrcweir 			    if ( StarBASIC::IsRunning() )
606cdf0e10cSrcweir 			    {
607cdf0e10cSrcweir 				    for ( sal_uInt16 nMethod = 0; nMethod < xModule->GetMethods()->Count(); nMethod++ )
608cdf0e10cSrcweir 				    {
609cdf0e10cSrcweir 					    SbMethod* pMethod = (SbMethod*)xModule->GetMethods()->Get( nMethod );
610cdf0e10cSrcweir 					    DBG_ASSERT( pMethod, "Methode nicht gefunden! (NULL)" );
611cdf0e10cSrcweir 					    pMethod->SetDebugFlags( pMethod->GetDebugFlags() | SbDEBUG_BREAK );
612cdf0e10cSrcweir 				    }
613cdf0e10cSrcweir 			    }
614cdf0e10cSrcweir 		    }
615cdf0e10cSrcweir 
616cdf0e10cSrcweir 		    if ( !bNewBreakPoint )
617cdf0e10cSrcweir 			    Sound::Beep();
618cdf0e10cSrcweir 	    }
619cdf0e10cSrcweir     }
620cdf0e10cSrcweir 
621cdf0e10cSrcweir 	return bNewBreakPoint;
622cdf0e10cSrcweir }
623cdf0e10cSrcweir 
UpdateBreakPoint(const BreakPoint & rBrk)624cdf0e10cSrcweir void ModulWindow::UpdateBreakPoint( const BreakPoint& rBrk )
625cdf0e10cSrcweir {
626cdf0e10cSrcweir 	DBG_ASSERT( XModule().Is(), "Kein Modul!" );
627cdf0e10cSrcweir 
628cdf0e10cSrcweir     if ( XModule().Is() )
629cdf0e10cSrcweir     {
630cdf0e10cSrcweir 	    CheckCompileBasic();
631cdf0e10cSrcweir 
632cdf0e10cSrcweir         if ( rBrk.bEnabled )
633cdf0e10cSrcweir 		    xModule->SetBP( (sal_uInt16)rBrk.nLine );
634cdf0e10cSrcweir 	    else
635cdf0e10cSrcweir 		    xModule->ClearBP( (sal_uInt16)rBrk.nLine );
636cdf0e10cSrcweir     }
637cdf0e10cSrcweir }
638cdf0e10cSrcweir 
639cdf0e10cSrcweir 
BasicToggleBreakPoint()640cdf0e10cSrcweir sal_Bool ModulWindow::BasicToggleBreakPoint()
641cdf0e10cSrcweir {
642cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
643cdf0e10cSrcweir 	AssertValidEditEngine();
644cdf0e10cSrcweir 
645cdf0e10cSrcweir 	TextSelection aSel = GetEditView()->GetSelection();
646cdf0e10cSrcweir 	aSel.GetStart().GetPara()++;	// Basic-Zeilen beginnen bei 1!
647cdf0e10cSrcweir 	aSel.GetEnd().GetPara()++;
648cdf0e10cSrcweir 
649cdf0e10cSrcweir 	sal_Bool bNewBreakPoint = sal_False;
650cdf0e10cSrcweir 
651cdf0e10cSrcweir 	for ( sal_uLong nLine = aSel.GetStart().GetPara(); nLine <= aSel.GetEnd().GetPara(); nLine++ )
652cdf0e10cSrcweir 	{
653cdf0e10cSrcweir 		if ( ToggleBreakPoint( nLine ) )
654cdf0e10cSrcweir 			bNewBreakPoint = sal_True;
655cdf0e10cSrcweir 	}
656cdf0e10cSrcweir 
657cdf0e10cSrcweir 	aXEditorWindow.GetBrkWindow().Invalidate();
658cdf0e10cSrcweir 	return bNewBreakPoint;
659cdf0e10cSrcweir }
660cdf0e10cSrcweir 
661cdf0e10cSrcweir 
BasicToggleBreakPointEnabled()662cdf0e10cSrcweir void ModulWindow::BasicToggleBreakPointEnabled()
663cdf0e10cSrcweir {
664cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
665cdf0e10cSrcweir 	AssertValidEditEngine();
666cdf0e10cSrcweir 
667cdf0e10cSrcweir 	ExtTextView* pView = GetEditView();
668cdf0e10cSrcweir 	if ( pView )
669cdf0e10cSrcweir 	{
670cdf0e10cSrcweir 		TextSelection aSel = pView->GetSelection();
671cdf0e10cSrcweir 		BreakPointList& rList = GetBreakPoints();
672cdf0e10cSrcweir 
673cdf0e10cSrcweir 		for ( sal_uLong nLine = ++aSel.GetStart().GetPara(), nEnd = ++aSel.GetEnd().GetPara(); nLine <= nEnd; ++nLine )
674cdf0e10cSrcweir 		{
675cdf0e10cSrcweir 			BreakPoint* pBrk = rList.FindBreakPoint( nLine );
676cdf0e10cSrcweir 			if ( pBrk )
677cdf0e10cSrcweir 			{
678cdf0e10cSrcweir 				pBrk->bEnabled = pBrk->bEnabled ? sal_False : sal_True;
679cdf0e10cSrcweir 				UpdateBreakPoint( *pBrk );
680cdf0e10cSrcweir 			}
681cdf0e10cSrcweir 		}
682cdf0e10cSrcweir 
683cdf0e10cSrcweir 		GetBreakPointWindow().Invalidate();
684cdf0e10cSrcweir 	}
685cdf0e10cSrcweir }
686cdf0e10cSrcweir 
687cdf0e10cSrcweir 
ManageBreakPoints()688cdf0e10cSrcweir void ModulWindow::ManageBreakPoints()
689cdf0e10cSrcweir {
690cdf0e10cSrcweir 	BreakPointWindow& rBrkWin = GetBreakPointWindow();
691cdf0e10cSrcweir 	BreakPointDialog aBrkDlg( &rBrkWin, GetBreakPoints() );
692cdf0e10cSrcweir 	aBrkDlg.Execute();
693cdf0e10cSrcweir 	rBrkWin.Invalidate();
694cdf0e10cSrcweir }
695cdf0e10cSrcweir 
696cdf0e10cSrcweir 
IMPL_LINK(ModulWindow,BasicErrorHdl,StarBASIC *,pBasic)697cdf0e10cSrcweir IMPL_LINK( ModulWindow, BasicErrorHdl, StarBASIC *, pBasic )
698cdf0e10cSrcweir {
699cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
700cdf0e10cSrcweir 	GoOnTop();
701cdf0e10cSrcweir 
702cdf0e10cSrcweir 	// ReturnWert: BOOL
703cdf0e10cSrcweir 	//	FALSE:	Abbrechen
704cdf0e10cSrcweir 	//	TRUE:	Weiter....
705cdf0e10cSrcweir 	String aErrorText( pBasic->GetErrorText() );
706cdf0e10cSrcweir 	sal_uInt16 nErrorLine = pBasic->GetLine() - 1;
707cdf0e10cSrcweir 	sal_uInt16 nErrCol1 = pBasic->GetCol1();
708cdf0e10cSrcweir 	sal_uInt16 nErrCol2 = pBasic->GetCol2();
709cdf0e10cSrcweir 	if ( nErrCol2 != 0xFFFF )
710cdf0e10cSrcweir 		nErrCol2++;
711cdf0e10cSrcweir 
712cdf0e10cSrcweir 	AssertValidEditEngine();
713cdf0e10cSrcweir 	GetEditView()->SetSelection( TextSelection( TextPaM( nErrorLine, nErrCol1 ), TextPaM( nErrorLine, nErrCol2 ) ) );
714cdf0e10cSrcweir 
715cdf0e10cSrcweir 	String aErrorTextPrefix;
716cdf0e10cSrcweir 	if( pBasic->IsCompilerError() )
717cdf0e10cSrcweir 	{
718cdf0e10cSrcweir 		aErrorTextPrefix = String( IDEResId( RID_STR_COMPILEERROR ) );
719cdf0e10cSrcweir 	}
720cdf0e10cSrcweir 	else
721cdf0e10cSrcweir 	{
722cdf0e10cSrcweir 		aErrorTextPrefix = String( IDEResId( RID_STR_RUNTIMEERROR ) );
723cdf0e10cSrcweir 		aErrorTextPrefix += StarBASIC::GetVBErrorCode( pBasic->GetErrorCode() );
724cdf0e10cSrcweir 		aErrorTextPrefix += ' ';
725cdf0e10cSrcweir 		pLayout->GetStackWindow().UpdateCalls();
726cdf0e10cSrcweir 	}
727cdf0e10cSrcweir 	// Wenn anderes Basic, dan sollte die IDE versuchen, da richtige
728cdf0e10cSrcweir 	// Modul anzuzeigen...
729cdf0e10cSrcweir 	sal_Bool bMarkError = ( pBasic == GetBasic() ) ? sal_True : sal_False;
730cdf0e10cSrcweir 	if ( bMarkError )
731cdf0e10cSrcweir 		aXEditorWindow.GetBrkWindow().SetMarkerPos( nErrorLine, sal_True );
732cdf0e10cSrcweir //	ErrorBox( this, WB_OK | WB_DEF_OK, String( aErrorTextPrefix + aErrorText ) ).Execute();
733cdf0e10cSrcweir //	ErrorHandler::HandleError( pBasic->GetErrorCode() );
734cdf0e10cSrcweir 
735cdf0e10cSrcweir     // #i47002#
736cdf0e10cSrcweir     Reference< awt::XWindow > xWindow = VCLUnoHelper::GetInterface( this );
737cdf0e10cSrcweir 
738cdf0e10cSrcweir     ErrorHandler::HandleError( StarBASIC::GetErrorCode() );
739cdf0e10cSrcweir 
740cdf0e10cSrcweir     // #i47002#
741cdf0e10cSrcweir     Window* pWindow = VCLUnoHelper::GetWindow( xWindow );
742cdf0e10cSrcweir     if ( !pWindow )
743cdf0e10cSrcweir         return sal_False;
744cdf0e10cSrcweir 
745cdf0e10cSrcweir     if ( bMarkError )
746cdf0e10cSrcweir 		aXEditorWindow.GetBrkWindow().SetMarkerPos( MARKER_NOMARKER );
747cdf0e10cSrcweir 	return sal_False;
748cdf0e10cSrcweir }
749cdf0e10cSrcweir 
BasicBreakHdl(StarBASIC * pBasic)750cdf0e10cSrcweir long __EXPORT ModulWindow::BasicBreakHdl( StarBASIC* pBasic )
751cdf0e10cSrcweir {
752cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
753cdf0e10cSrcweir 	// Ein GoOnTop aktiviert da Fenster, das veraendert aber den Context fuer
754cdf0e10cSrcweir 	// das Programm!
755cdf0e10cSrcweir //	GoOnTop();
756cdf0e10cSrcweir 
757cdf0e10cSrcweir 	// #i69280 Required in Window despite normal usage in next command!
758cdf0e10cSrcweir 	(void)pBasic;
759cdf0e10cSrcweir 
760cdf0e10cSrcweir 	// ReturnWert: sal_uInt16 => siehe SB-Debug-Flags
761cdf0e10cSrcweir 	sal_uInt16 nErrorLine = pBasic->GetLine();
762cdf0e10cSrcweir 
763cdf0e10cSrcweir 	// Gibt es hier einen BreakPoint?
764cdf0e10cSrcweir 	BreakPoint* pBrk = GetBreakPoints().FindBreakPoint( nErrorLine );
765cdf0e10cSrcweir     if ( pBrk )
766cdf0e10cSrcweir     {
767cdf0e10cSrcweir         pBrk->nHitCount++;
768cdf0e10cSrcweir         if ( pBrk->nHitCount < pBrk->nStopAfter && GetBasic()->IsBreak() )
769cdf0e10cSrcweir             return aStatus.nBasicFlags; // weiterlaufen...
770cdf0e10cSrcweir     }
771cdf0e10cSrcweir 
772cdf0e10cSrcweir 	nErrorLine--;	// EditEngine begint bei 0, Basic bei 1
773cdf0e10cSrcweir 	// Alleine schon damit gescrollt wird...
774cdf0e10cSrcweir 	AssertValidEditEngine();
775cdf0e10cSrcweir 	GetEditView()->SetSelection( TextSelection( TextPaM( nErrorLine, 0 ), TextPaM( nErrorLine, 0 ) ) );
776cdf0e10cSrcweir 	aXEditorWindow.GetBrkWindow().SetMarkerPos( nErrorLine );
777cdf0e10cSrcweir 
778cdf0e10cSrcweir 	pLayout->GetWatchWindow().UpdateWatches();
779cdf0e10cSrcweir 	pLayout->GetStackWindow().UpdateCalls();
780cdf0e10cSrcweir 
781cdf0e10cSrcweir 	aStatus.bIsInReschedule = sal_True;
782cdf0e10cSrcweir 	aStatus.bIsRunning = sal_True;
783cdf0e10cSrcweir 
784cdf0e10cSrcweir 	AddStatus( BASWIN_INRESCHEDULE );
785cdf0e10cSrcweir 
786cdf0e10cSrcweir 	BasicIDE::InvalidateDebuggerSlots();
787cdf0e10cSrcweir 
788cdf0e10cSrcweir 	while( aStatus.bIsRunning )
789cdf0e10cSrcweir 		Application::Yield();
790cdf0e10cSrcweir 
791cdf0e10cSrcweir 	aStatus.bIsInReschedule = sal_False;
792cdf0e10cSrcweir 	aXEditorWindow.GetBrkWindow().SetMarkerPos( MARKER_NOMARKER );
793cdf0e10cSrcweir 
794cdf0e10cSrcweir 	ClearStatus( BASWIN_INRESCHEDULE );
795cdf0e10cSrcweir 
796cdf0e10cSrcweir 	return aStatus.nBasicFlags;
797cdf0e10cSrcweir }
798cdf0e10cSrcweir 
BasicAddWatch()799cdf0e10cSrcweir void ModulWindow::BasicAddWatch()
800cdf0e10cSrcweir {
801cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
802cdf0e10cSrcweir 	String aWatchStr;
803cdf0e10cSrcweir 	sal_Bool bInserted = sal_False;
804cdf0e10cSrcweir 	AssertValidEditEngine();
805cdf0e10cSrcweir 	sal_Bool bAdd = sal_True;
806cdf0e10cSrcweir 	if ( !GetEditView()->HasSelection() )
807cdf0e10cSrcweir 	{
808cdf0e10cSrcweir //		bAdd = GetEditView()->SelectCurrentWord();
809cdf0e10cSrcweir 		TextPaM aWordStart;
810cdf0e10cSrcweir 		String aWord = GetEditEngine()->GetWord( GetEditView()->GetSelection().GetEnd(), &aWordStart );
811cdf0e10cSrcweir 		if ( aWord.Len() )
812cdf0e10cSrcweir 		{
813cdf0e10cSrcweir 			TextSelection aSel( aWordStart );
814cdf0e10cSrcweir 			sal_uInt16& rIndex = aSel.GetEnd().GetIndex();
815cdf0e10cSrcweir 			rIndex = rIndex + aWord.Len();
816cdf0e10cSrcweir 			// aSel.GetEnd().GetIndex() += sal::static_int_cast<int>( aWord.Len() );
817cdf0e10cSrcweir 			GetEditView()->SetSelection( aSel );
818cdf0e10cSrcweir 			bAdd = sal_True;
819cdf0e10cSrcweir 		}
820cdf0e10cSrcweir 	}
821cdf0e10cSrcweir 	if ( bAdd )
822cdf0e10cSrcweir 	{
823cdf0e10cSrcweir 		TextSelection aSel = GetEditView()->GetSelection();
824cdf0e10cSrcweir 		if ( aSel.GetStart().GetPara() == aSel.GetEnd().GetPara() )
825cdf0e10cSrcweir 		{
826cdf0e10cSrcweir 			aWatchStr = GetEditView()->GetSelected();
827cdf0e10cSrcweir 			pLayout->GetWatchWindow().AddWatch( aWatchStr );
828cdf0e10cSrcweir 			pLayout->GetWatchWindow().UpdateWatches();
829cdf0e10cSrcweir 			bInserted = sal_True;
830cdf0e10cSrcweir 		}
831cdf0e10cSrcweir 	}
832cdf0e10cSrcweir 
833cdf0e10cSrcweir 	if ( !bInserted )
834cdf0e10cSrcweir 		Sound::Beep();
835cdf0e10cSrcweir }
836cdf0e10cSrcweir 
837cdf0e10cSrcweir 
838cdf0e10cSrcweir 
BasicRemoveWatch()839cdf0e10cSrcweir void ModulWindow::BasicRemoveWatch()
840cdf0e10cSrcweir {
841cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
842cdf0e10cSrcweir 	sal_Bool bRemoved = pLayout->GetWatchWindow().RemoveSelectedWatch();
843cdf0e10cSrcweir 
844cdf0e10cSrcweir 	if ( !bRemoved )
845cdf0e10cSrcweir 		Sound::Beep();
846cdf0e10cSrcweir }
847cdf0e10cSrcweir 
848cdf0e10cSrcweir 
EditMacro(const String & rMacroName)849cdf0e10cSrcweir void ModulWindow::EditMacro( const String& rMacroName )
850cdf0e10cSrcweir {
851cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
852cdf0e10cSrcweir 	DBG_ASSERT( XModule().Is(), "Kein Modul!" );
853cdf0e10cSrcweir 
854cdf0e10cSrcweir     if ( XModule().Is() )
855cdf0e10cSrcweir     {
856cdf0e10cSrcweir         CheckCompileBasic();
857cdf0e10cSrcweir 
858cdf0e10cSrcweir 	    if ( !aStatus.bError )
859cdf0e10cSrcweir 	    {
860cdf0e10cSrcweir 		    sal_uInt16 nStart, nEnd;
861cdf0e10cSrcweir 		    SbMethod* pMethod = (SbMethod*)xModule->Find( rMacroName, SbxCLASS_METHOD );
862cdf0e10cSrcweir 		    if ( pMethod )
863cdf0e10cSrcweir 		    {
864cdf0e10cSrcweir 			    pMethod->GetLineRange( nStart, nEnd );
865cdf0e10cSrcweir 			    if ( nStart )
866cdf0e10cSrcweir 			    {
867cdf0e10cSrcweir 				    // Basic beginnt bei 1
868cdf0e10cSrcweir 				    nStart--;
869cdf0e10cSrcweir 				    nEnd--;
870cdf0e10cSrcweir 			    }
871cdf0e10cSrcweir 			    TextSelection aSel( TextPaM( nStart, 0 ), TextPaM( nStart, 0 ) );
872cdf0e10cSrcweir 			    AssertValidEditEngine();
873cdf0e10cSrcweir 			    TextView * pView = GetEditView();
874cdf0e10cSrcweir 			    // ggf. hinscrollen, so dass erste Zeile oben...
875cdf0e10cSrcweir 			    long nVisHeight = GetOutputSizePixel().Height();
876cdf0e10cSrcweir 			    if ( (long)pView->GetTextEngine()->GetTextHeight() > nVisHeight )
877cdf0e10cSrcweir 			    {
878cdf0e10cSrcweir 				    long nMaxY = pView->GetTextEngine()->GetTextHeight() - nVisHeight;
879cdf0e10cSrcweir 				    long nOldStartY = pView->GetStartDocPos().Y();
880cdf0e10cSrcweir 				    long nNewStartY = nStart * pView->GetTextEngine()->GetCharHeight();
881cdf0e10cSrcweir 				    nNewStartY = Min( nNewStartY, nMaxY );
882cdf0e10cSrcweir 				    pView->Scroll( 0, -(nNewStartY-nOldStartY) );
883cdf0e10cSrcweir 				    pView->ShowCursor( sal_False, sal_True );
884cdf0e10cSrcweir 				    GetEditVScrollBar().SetThumbPos( pView->GetStartDocPos().Y() );
885cdf0e10cSrcweir 			    }
886cdf0e10cSrcweir 			    pView->SetSelection( aSel );
887cdf0e10cSrcweir 			    pView->ShowCursor();
888cdf0e10cSrcweir 			    pView->GetWindow()->GrabFocus();
889cdf0e10cSrcweir 		    }
890cdf0e10cSrcweir 	    }
891cdf0e10cSrcweir     }
892cdf0e10cSrcweir }
893cdf0e10cSrcweir 
894cdf0e10cSrcweir 
StoreData()895cdf0e10cSrcweir void __EXPORT ModulWindow::StoreData()
896cdf0e10cSrcweir {
897cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
898cdf0e10cSrcweir 	// StoreData wird gerufen, wenn der BasicManager zerstoert oder
899cdf0e10cSrcweir 	// dieses Fenster beendet wird.
900cdf0e10cSrcweir 	// => Keine Unterbrechungen erwuenscht!
901cdf0e10cSrcweir 	// Und bei SAVE, wenn AppBasic...
902cdf0e10cSrcweir 	GetEditorWindow().SetSourceInBasic( sal_True );
903cdf0e10cSrcweir 	// Nicht das Modify loeschen, sonst wird das Basic nicht gespeichert
904cdf0e10cSrcweir 	// Es wird beim Speichern sowieso geloescht.
905cdf0e10cSrcweir //	xModule->SetModified( sal_False );
906cdf0e10cSrcweir }
907cdf0e10cSrcweir 
CanClose()908cdf0e10cSrcweir sal_Bool __EXPORT ModulWindow::CanClose()
909cdf0e10cSrcweir {
910cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
911cdf0e10cSrcweir 	return sal_True;
912cdf0e10cSrcweir }
913cdf0e10cSrcweir 
914cdf0e10cSrcweir 
AllowUndo()915cdf0e10cSrcweir sal_Bool __EXPORT ModulWindow::AllowUndo()
916cdf0e10cSrcweir {
917cdf0e10cSrcweir 	return GetEditorWindow().CanModify();
918cdf0e10cSrcweir }
919cdf0e10cSrcweir 
920cdf0e10cSrcweir 
UpdateData()921cdf0e10cSrcweir void __EXPORT ModulWindow::UpdateData()
922cdf0e10cSrcweir {
923cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
924cdf0e10cSrcweir 	DBG_ASSERT( XModule().Is(), "Kein Modul!" );
925cdf0e10cSrcweir 	// UpdateData wird gerufen, wenn sich der Source von aussen
926cdf0e10cSrcweir 	// geaendert hat.
927cdf0e10cSrcweir 	// => Keine Unterbrechungen erwuenscht!
928cdf0e10cSrcweir 
929cdf0e10cSrcweir     if ( XModule().Is() )
930cdf0e10cSrcweir     {
931cdf0e10cSrcweir         SetModule( xModule->GetSource32() );
932cdf0e10cSrcweir 
933cdf0e10cSrcweir         if ( GetEditView() )
934cdf0e10cSrcweir 	    {
935cdf0e10cSrcweir 		    TextSelection aSel = GetEditView()->GetSelection();
936cdf0e10cSrcweir             setTextEngineText( GetEditEngine(), xModule->GetSource32() );
937cdf0e10cSrcweir 		    GetEditView()->SetSelection( aSel );
938cdf0e10cSrcweir 		    GetEditEngine()->SetModified( sal_False );
939cdf0e10cSrcweir 		    BasicIDE::MarkDocumentModified( GetDocument() );
940cdf0e10cSrcweir 	    }
941cdf0e10cSrcweir     }
942cdf0e10cSrcweir }
943cdf0e10cSrcweir 
countPages(Printer * pPrinter)944cdf0e10cSrcweir sal_Int32 ModulWindow::countPages( Printer* pPrinter )
945cdf0e10cSrcweir {
946cdf0e10cSrcweir     return FormatAndPrint( pPrinter, -1 );
947cdf0e10cSrcweir }
948cdf0e10cSrcweir 
printPage(sal_Int32 nPage,Printer * pPrinter)949cdf0e10cSrcweir void ModulWindow::printPage( sal_Int32 nPage, Printer* pPrinter )
950cdf0e10cSrcweir {
951cdf0e10cSrcweir     FormatAndPrint( pPrinter, nPage );
952cdf0e10cSrcweir }
953cdf0e10cSrcweir 
954cdf0e10cSrcweir /* implementation note: this is totally inefficient for the XRenderable interface
955cdf0e10cSrcweir    usage since the whole "document" will be format for every page. Should this ever
956cdf0e10cSrcweir    become a problem we should
957cdf0e10cSrcweir    - format only once for every new printer
958cdf0e10cSrcweir    - keep an index list for each page which is the starting paragraph
959cdf0e10cSrcweir */
FormatAndPrint(Printer * pPrinter,sal_Int32 nPrintPage)960cdf0e10cSrcweir sal_Int32 ModulWindow::FormatAndPrint( Printer* pPrinter, sal_Int32 nPrintPage )
961cdf0e10cSrcweir {
962cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
963cdf0e10cSrcweir 
964cdf0e10cSrcweir 	AssertValidEditEngine();
965cdf0e10cSrcweir 
966cdf0e10cSrcweir 	MapMode eOldMapMode( pPrinter->GetMapMode() );
967cdf0e10cSrcweir 	Font aOldFont( pPrinter->GetFont() );
968cdf0e10cSrcweir 
969cdf0e10cSrcweir //	Font aFont( GetEditEngine()->CreateFontFromItemSet( GetEditEngine()->GetEmptyItemSet() ) );
970cdf0e10cSrcweir 	Font aFont( GetEditEngine()->GetFont() );
971cdf0e10cSrcweir 	aFont.SetAlign( ALIGN_BOTTOM );
972cdf0e10cSrcweir 	aFont.SetTransparent( sal_True );
973cdf0e10cSrcweir 	aFont.SetSize( Size( 0, 360 ) );
974cdf0e10cSrcweir 	pPrinter->SetFont( aFont );
975cdf0e10cSrcweir 	pPrinter->SetMapMode( MAP_100TH_MM );
976cdf0e10cSrcweir 
977cdf0e10cSrcweir 	String aTitle( CreateQualifiedName() );
978cdf0e10cSrcweir 
979cdf0e10cSrcweir 	sal_uInt16 nLineHeight = (sal_uInt16) pPrinter->GetTextHeight(); // etwas mehr.
980cdf0e10cSrcweir 	sal_uInt16 nParaSpace = 10;
981cdf0e10cSrcweir 
982cdf0e10cSrcweir 	Size aPaperSz = pPrinter->GetOutputSize();
983cdf0e10cSrcweir 	aPaperSz.Width() -= (LMARGPRN+RMARGPRN);
984cdf0e10cSrcweir 	aPaperSz.Height() -= (TMARGPRN+BMARGPRN);
985cdf0e10cSrcweir 
986cdf0e10cSrcweir 	// nLinepPage stimmt nicht, wenn Zeilen umgebrochen werden muessen...
987cdf0e10cSrcweir 	sal_uInt16 nLinespPage = (sal_uInt16) (aPaperSz.Height()/nLineHeight);
988cdf0e10cSrcweir 	sal_uInt16 nCharspLine = (sal_uInt16) (aPaperSz.Width() / pPrinter->GetTextWidth( 'X' ) );
989cdf0e10cSrcweir 	sal_uLong nParas = GetEditEngine()->GetParagraphCount();
990cdf0e10cSrcweir 
991cdf0e10cSrcweir 	sal_uInt16 nPages = (sal_uInt16) (nParas/nLinespPage+1 );
992cdf0e10cSrcweir 	sal_uInt16 nCurPage = 1;
993cdf0e10cSrcweir 
994cdf0e10cSrcweir 	// Header drucken...
995cdf0e10cSrcweir 	lcl_PrintHeader( pPrinter, nPages, nCurPage, aTitle, nPrintPage == 0 );
996cdf0e10cSrcweir 	Point aPos( LMARGPRN, TMARGPRN );
997cdf0e10cSrcweir 	for ( sal_uLong nPara = 0; nPara < nParas; nPara++ )
998cdf0e10cSrcweir 	{
999cdf0e10cSrcweir 		String aLine( GetEditEngine()->GetText( nPara ) );
1000cdf0e10cSrcweir 		lcl_ConvertTabsToSpaces( aLine );
1001cdf0e10cSrcweir 		sal_uInt16 nLines = aLine.Len()/nCharspLine+1;
1002cdf0e10cSrcweir 		for ( sal_uInt16 nLine = 0; nLine < nLines; nLine++ )
1003cdf0e10cSrcweir 		{
1004cdf0e10cSrcweir 			String aTmpLine( aLine, nLine*nCharspLine, nCharspLine );
1005cdf0e10cSrcweir 			aPos.Y() += nLineHeight;
1006cdf0e10cSrcweir 			if ( aPos.Y() > ( aPaperSz.Height()+TMARGPRN ) )
1007cdf0e10cSrcweir 			{
1008cdf0e10cSrcweir 				nCurPage++;
1009cdf0e10cSrcweir 				lcl_PrintHeader( pPrinter, nPages, nCurPage, aTitle, nCurPage-1 == nPrintPage );
1010cdf0e10cSrcweir 				aPos = Point( LMARGPRN, TMARGPRN+nLineHeight );
1011cdf0e10cSrcweir 			}
1012cdf0e10cSrcweir             if( nCurPage-1 == nPrintPage )
1013cdf0e10cSrcweir                 pPrinter->DrawText( aPos, aTmpLine );
1014cdf0e10cSrcweir 		}
1015cdf0e10cSrcweir 		aPos.Y() += nParaSpace;
1016cdf0e10cSrcweir 	}
1017cdf0e10cSrcweir 
1018cdf0e10cSrcweir 	pPrinter->SetFont( aOldFont );
1019cdf0e10cSrcweir 	pPrinter->SetMapMode( eOldMapMode );
1020cdf0e10cSrcweir 
1021cdf0e10cSrcweir     return sal_Int32(nCurPage);
1022cdf0e10cSrcweir }
1023cdf0e10cSrcweir 
1024cdf0e10cSrcweir 
ExecuteCommand(SfxRequest & rReq)1025cdf0e10cSrcweir void __EXPORT ModulWindow::ExecuteCommand( SfxRequest& rReq )
1026cdf0e10cSrcweir {
1027cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
1028cdf0e10cSrcweir 	AssertValidEditEngine();
1029cdf0e10cSrcweir 	sal_uInt16 nSlot = rReq.GetSlot();
1030cdf0e10cSrcweir 	switch ( nSlot )
1031cdf0e10cSrcweir 	{
1032cdf0e10cSrcweir 		case SID_BASICRUN:
1033cdf0e10cSrcweir 		{
1034cdf0e10cSrcweir 			BasicRun();
1035cdf0e10cSrcweir 		}
1036cdf0e10cSrcweir 		break;
1037cdf0e10cSrcweir 		case SID_BASICCOMPILE:
1038cdf0e10cSrcweir 		{
1039cdf0e10cSrcweir 			CompileBasic();
1040cdf0e10cSrcweir 		}
1041cdf0e10cSrcweir 		break;
1042cdf0e10cSrcweir 		case SID_BASICSTEPOVER:
1043cdf0e10cSrcweir 		{
1044cdf0e10cSrcweir 			BasicStepOver();
1045cdf0e10cSrcweir 		}
1046cdf0e10cSrcweir 		break;
1047cdf0e10cSrcweir 		case SID_BASICSTEPINTO:
1048cdf0e10cSrcweir 		{
1049cdf0e10cSrcweir 			BasicStepInto();
1050cdf0e10cSrcweir 		}
1051cdf0e10cSrcweir 		break;
1052cdf0e10cSrcweir 		case SID_BASICSTEPOUT:
1053cdf0e10cSrcweir 		{
1054cdf0e10cSrcweir 			BasicStepOut();
1055cdf0e10cSrcweir 		}
1056cdf0e10cSrcweir 		break;
1057cdf0e10cSrcweir 		case SID_BASICLOAD:
1058cdf0e10cSrcweir 		{
1059cdf0e10cSrcweir 			LoadBasic();
1060cdf0e10cSrcweir 		}
1061cdf0e10cSrcweir 		break;
1062cdf0e10cSrcweir 		case SID_BASICSAVEAS:
1063cdf0e10cSrcweir 		{
1064cdf0e10cSrcweir 			SaveBasicSource();
1065cdf0e10cSrcweir 		}
1066cdf0e10cSrcweir 		break;
1067cdf0e10cSrcweir 		case SID_IMPORT_DIALOG:
1068cdf0e10cSrcweir 		{
1069cdf0e10cSrcweir 			ImportDialog();
1070cdf0e10cSrcweir 		}
1071cdf0e10cSrcweir 		break;
1072cdf0e10cSrcweir 		case SID_BASICIDE_MATCHGROUP:
1073cdf0e10cSrcweir 		{
1074cdf0e10cSrcweir 			if ( !GetEditView()->MatchGroup() )
1075cdf0e10cSrcweir 				Sound::Beep();
1076cdf0e10cSrcweir 		}
1077cdf0e10cSrcweir 		break;
1078cdf0e10cSrcweir 		case SID_BASICIDE_TOGGLEBRKPNT:
1079cdf0e10cSrcweir 		{
1080cdf0e10cSrcweir 			BasicToggleBreakPoint();
1081cdf0e10cSrcweir 		}
1082cdf0e10cSrcweir 		break;
1083cdf0e10cSrcweir 		case SID_BASICIDE_MANAGEBRKPNTS:
1084cdf0e10cSrcweir 		{
1085cdf0e10cSrcweir 			ManageBreakPoints();
1086cdf0e10cSrcweir 		}
1087cdf0e10cSrcweir 		break;
1088cdf0e10cSrcweir 		case SID_BASICIDE_TOGGLEBRKPNTENABLED:
1089cdf0e10cSrcweir 		{
1090cdf0e10cSrcweir 			BasicToggleBreakPointEnabled();
1091cdf0e10cSrcweir 		}
1092cdf0e10cSrcweir 		break;
1093cdf0e10cSrcweir 		case SID_BASICIDE_ADDWATCH:
1094cdf0e10cSrcweir 		{
1095cdf0e10cSrcweir 			BasicAddWatch();
1096cdf0e10cSrcweir 		}
1097cdf0e10cSrcweir 		break;
1098cdf0e10cSrcweir 		case SID_BASICIDE_REMOVEWATCH:
1099cdf0e10cSrcweir 		{
1100cdf0e10cSrcweir 			BasicRemoveWatch();
1101cdf0e10cSrcweir 		}
1102cdf0e10cSrcweir 		break;
1103cdf0e10cSrcweir 		case SID_CUT:
1104cdf0e10cSrcweir 		{
1105cdf0e10cSrcweir             if ( !IsReadOnly() )
1106cdf0e10cSrcweir             {
1107cdf0e10cSrcweir 			    GetEditView()->Cut();
1108cdf0e10cSrcweir                 SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
1109cdf0e10cSrcweir                 if ( pBindings )
1110cdf0e10cSrcweir                     pBindings->Invalidate( SID_DOC_MODIFIED );
1111cdf0e10cSrcweir             }
1112cdf0e10cSrcweir 		}
1113cdf0e10cSrcweir 		break;
1114cdf0e10cSrcweir 		case SID_COPY:
1115cdf0e10cSrcweir 		{
1116cdf0e10cSrcweir 			GetEditView()->Copy();
1117cdf0e10cSrcweir 		}
1118cdf0e10cSrcweir 		break;
1119cdf0e10cSrcweir 		case SID_PASTE:
1120cdf0e10cSrcweir 		{
1121cdf0e10cSrcweir             if ( !IsReadOnly() )
1122cdf0e10cSrcweir             {
1123cdf0e10cSrcweir 			    GetEditView()->Paste();
1124cdf0e10cSrcweir                 SfxBindings* pBindings = BasicIDE::GetBindingsPtr();
1125cdf0e10cSrcweir                 if ( pBindings )
1126cdf0e10cSrcweir                     pBindings->Invalidate( SID_DOC_MODIFIED );
1127cdf0e10cSrcweir             }
1128cdf0e10cSrcweir 		}
1129cdf0e10cSrcweir 		break;
1130cdf0e10cSrcweir 		case SID_BASICIDE_BRKPNTSCHANGED:
1131cdf0e10cSrcweir 		{
1132cdf0e10cSrcweir 			GetBreakPointWindow().Invalidate();
1133cdf0e10cSrcweir 		}
1134cdf0e10cSrcweir 		break;
11358a25ac93STsutomu Uchino 		case SID_SELECTALL:
11368a25ac93STsutomu Uchino 		{
11378a25ac93STsutomu Uchino 			TextSelection aSel( TextPaM( 0, 0 ), TextPaM( TEXT_PARA_ALL, 0xFFFF ) );
11388a25ac93STsutomu Uchino 			TextView * pView = GetEditView();
11398a25ac93STsutomu Uchino 			pView->SetSelection( aSel );
11408a25ac93STsutomu Uchino 			pView->GetWindow()->GrabFocus();
11418a25ac93STsutomu Uchino 		}
11428a25ac93STsutomu Uchino 		break;
1143cdf0e10cSrcweir 	}
1144cdf0e10cSrcweir }
1145cdf0e10cSrcweir 
1146cdf0e10cSrcweir 
1147cdf0e10cSrcweir 
GetState(SfxItemSet & rSet)1148cdf0e10cSrcweir void __EXPORT ModulWindow::GetState( SfxItemSet &rSet )
1149cdf0e10cSrcweir {
1150cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
1151cdf0e10cSrcweir 	SfxWhichIter aIter(rSet);
1152cdf0e10cSrcweir 	for ( sal_uInt16 nWh = aIter.FirstWhich(); 0 != nWh; nWh = aIter.NextWhich() )
1153cdf0e10cSrcweir 	{
1154cdf0e10cSrcweir 		switch ( nWh )
1155cdf0e10cSrcweir 		{
1156cdf0e10cSrcweir 			// allgemeine Items:
1157cdf0e10cSrcweir 			case SID_CUT:
1158cdf0e10cSrcweir 			{
1159cdf0e10cSrcweir 				if ( !GetEditView() || !GetEditView()->HasSelection() )
1160cdf0e10cSrcweir 					rSet.DisableItem( nWh );
1161cdf0e10cSrcweir 
1162cdf0e10cSrcweir                 if ( IsReadOnly() )
1163cdf0e10cSrcweir                     rSet.DisableItem( nWh );
1164cdf0e10cSrcweir             }
1165cdf0e10cSrcweir 			break;
1166cdf0e10cSrcweir             case SID_COPY:
1167cdf0e10cSrcweir 			{
1168cdf0e10cSrcweir 				if ( !GetEditView() || !GetEditView()->HasSelection() )
1169cdf0e10cSrcweir 					rSet.DisableItem( nWh );
1170cdf0e10cSrcweir 			}
1171cdf0e10cSrcweir 			break;
1172cdf0e10cSrcweir             case SID_PASTE:
1173cdf0e10cSrcweir             {
1174cdf0e10cSrcweir                 if ( !IsPasteAllowed() )
1175cdf0e10cSrcweir                     rSet.DisableItem( nWh );
1176cdf0e10cSrcweir 
1177cdf0e10cSrcweir                 if ( IsReadOnly() )
1178cdf0e10cSrcweir                     rSet.DisableItem( nWh );
1179cdf0e10cSrcweir             }
1180cdf0e10cSrcweir 			break;
1181cdf0e10cSrcweir 			case SID_BASICIDE_STAT_POS:
1182cdf0e10cSrcweir 			{
1183cdf0e10cSrcweir 				TextView* pView = GetEditView();
1184cdf0e10cSrcweir 				if ( pView )
1185cdf0e10cSrcweir 				{
1186cdf0e10cSrcweir 					TextSelection aSel = pView->GetSelection();
1187cdf0e10cSrcweir 					String aPos( IDEResId( RID_STR_LINE ) );
1188cdf0e10cSrcweir 					aPos += ' ';
1189cdf0e10cSrcweir 					aPos += String::CreateFromInt32( aSel.GetEnd().GetPara()+1 );
1190cdf0e10cSrcweir 					aPos += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
1191cdf0e10cSrcweir 					aPos += String( IDEResId( RID_STR_COLUMN ) );
1192cdf0e10cSrcweir 					aPos += ' ';
1193cdf0e10cSrcweir 					aPos += String::CreateFromInt32( aSel.GetEnd().GetIndex()+1 );
1194cdf0e10cSrcweir 					SfxStringItem aItem( SID_BASICIDE_STAT_POS, aPos );
1195cdf0e10cSrcweir 					rSet.Put( aItem );
1196cdf0e10cSrcweir 				}
1197cdf0e10cSrcweir 			}
1198cdf0e10cSrcweir 			break;
1199cdf0e10cSrcweir 			case SID_ATTR_INSERT:
1200cdf0e10cSrcweir 			{
1201cdf0e10cSrcweir 				TextView* pView = GetEditView();
1202cdf0e10cSrcweir 				if ( pView )
1203cdf0e10cSrcweir 				{
1204cdf0e10cSrcweir 					SfxBoolItem aItem( SID_ATTR_INSERT, pView->IsInsertMode() );
1205cdf0e10cSrcweir 					rSet.Put( aItem );
1206cdf0e10cSrcweir 				}
1207cdf0e10cSrcweir 			}
1208cdf0e10cSrcweir 			break;
12098a25ac93STsutomu Uchino 			case SID_SELECTALL:
12108a25ac93STsutomu Uchino 			{
12118a25ac93STsutomu Uchino 				if ( !GetEditView() )
12128a25ac93STsutomu Uchino 					rSet.DisableItem( nWh );
12138a25ac93STsutomu Uchino 			}
12148a25ac93STsutomu Uchino 			break;
1215cdf0e10cSrcweir 		}
1216cdf0e10cSrcweir 	}
1217cdf0e10cSrcweir }
1218cdf0e10cSrcweir 
1219cdf0e10cSrcweir 
DoScroll(ScrollBar * pCurScrollBar)1220cdf0e10cSrcweir void __EXPORT ModulWindow::DoScroll( ScrollBar* pCurScrollBar )
1221cdf0e10cSrcweir {
1222cdf0e10cSrcweir 	DBG_CHKTHIS( ModulWindow, 0 );
1223cdf0e10cSrcweir 	if ( ( pCurScrollBar == GetHScrollBar() ) && GetEditView() )
1224cdf0e10cSrcweir 	{
1225cdf0e10cSrcweir 		// Nicht mit dem Wert Scrollen, sondern lieber die Thumb-Pos fuer die
1226cdf0e10cSrcweir 		// VisArea verwenden:
1227cdf0e10cSrcweir 		long nDiff = GetEditView()->GetStartDocPos().X() - pCurScrollBar->GetThumbPos();
1228cdf0e10cSrcweir 		GetEditView()->Scroll( nDiff, 0 );
1229cdf0e10cSrcweir 		GetEditView()->ShowCursor( sal_False, sal_True );
1230cdf0e10cSrcweir 		pCurScrollBar->SetThumbPos( GetEditView()->GetStartDocPos().X() );
1231cdf0e10cSrcweir 
1232cdf0e10cSrcweir 	}
1233cdf0e10cSrcweir }
1234cdf0e10cSrcweir 
1235cdf0e10cSrcweir 
IsModified()1236cdf0e10cSrcweir sal_Bool __EXPORT ModulWindow::IsModified()
1237cdf0e10cSrcweir {
1238cdf0e10cSrcweir 	return GetEditEngine() ? GetEditEngine()->IsModified() : sal_False;
1239cdf0e10cSrcweir }
1240cdf0e10cSrcweir 
1241cdf0e10cSrcweir 
1242cdf0e10cSrcweir 
GoOnTop()1243cdf0e10cSrcweir void __EXPORT ModulWindow::GoOnTop()
1244cdf0e10cSrcweir {
1245cdf0e10cSrcweir 	IDE_DLL()->GetShell()->GetViewFrame()->ToTop();
1246cdf0e10cSrcweir }
1247cdf0e10cSrcweir 
GetSbModuleName()1248cdf0e10cSrcweir String ModulWindow::GetSbModuleName()
1249cdf0e10cSrcweir {
1250cdf0e10cSrcweir 	String aModuleName;
1251cdf0e10cSrcweir 	if ( XModule().Is() )
1252cdf0e10cSrcweir 		aModuleName = xModule->GetName();
1253cdf0e10cSrcweir 	return aModuleName;
1254cdf0e10cSrcweir }
1255cdf0e10cSrcweir 
1256cdf0e10cSrcweir 
1257cdf0e10cSrcweir 
GetTitle()1258cdf0e10cSrcweir String __EXPORT ModulWindow::GetTitle()
1259cdf0e10cSrcweir {
1260cdf0e10cSrcweir 	return GetSbModuleName();
1261cdf0e10cSrcweir }
1262cdf0e10cSrcweir 
1263cdf0e10cSrcweir 
1264cdf0e10cSrcweir 
FrameWindowMoved()1265cdf0e10cSrcweir void ModulWindow::FrameWindowMoved()
1266cdf0e10cSrcweir {
1267cdf0e10cSrcweir //	if ( GetEditEngine() && GetEditEngine()->IsInSelectionMode() )
1268cdf0e10cSrcweir //		GetEditEngine()->StopSelectionMode();
1269cdf0e10cSrcweir }
1270cdf0e10cSrcweir 
1271cdf0e10cSrcweir 
1272cdf0e10cSrcweir 
ShowCursor(sal_Bool bOn)1273cdf0e10cSrcweir void ModulWindow::ShowCursor( sal_Bool bOn )
1274cdf0e10cSrcweir {
1275cdf0e10cSrcweir 	if ( GetEditEngine() )
1276cdf0e10cSrcweir 	{
1277cdf0e10cSrcweir 		TextView* pView = GetEditEngine()->GetActiveView();
1278cdf0e10cSrcweir 		if ( pView )
1279cdf0e10cSrcweir 		{
1280cdf0e10cSrcweir 			if ( bOn )
1281cdf0e10cSrcweir 				pView->ShowCursor();
1282cdf0e10cSrcweir 			else
1283cdf0e10cSrcweir 				pView->HideCursor();
1284cdf0e10cSrcweir 		}
1285cdf0e10cSrcweir 	}
1286cdf0e10cSrcweir }
1287cdf0e10cSrcweir 
1288cdf0e10cSrcweir 
GetLayoutWindow()1289cdf0e10cSrcweir Window* __EXPORT ModulWindow::GetLayoutWindow()
1290cdf0e10cSrcweir {
1291cdf0e10cSrcweir 	return pLayout;
1292cdf0e10cSrcweir }
1293cdf0e10cSrcweir 
AssertValidEditEngine()1294cdf0e10cSrcweir void ModulWindow::AssertValidEditEngine()
1295cdf0e10cSrcweir {
1296cdf0e10cSrcweir 	if ( !GetEditEngine() )
1297cdf0e10cSrcweir 		GetEditorWindow().CreateEditEngine();
1298cdf0e10cSrcweir }
1299cdf0e10cSrcweir 
Deactivating()1300cdf0e10cSrcweir void ModulWindow::Deactivating()
1301cdf0e10cSrcweir {
1302cdf0e10cSrcweir 	if ( GetEditView() )
1303cdf0e10cSrcweir 		GetEditView()->EraseVirtualDevice();
1304cdf0e10cSrcweir }
1305cdf0e10cSrcweir 
StartSearchAndReplace(const SvxSearchItem & rSearchItem,sal_Bool bFromStart)1306cdf0e10cSrcweir sal_uInt16 ModulWindow::StartSearchAndReplace( const SvxSearchItem& rSearchItem, sal_Bool bFromStart )
1307cdf0e10cSrcweir {
1308cdf0e10cSrcweir 	// Mann koennte fuer das blinde Alle-Ersetzen auch auf
1309cdf0e10cSrcweir 	// Syntaxhighlighting/Formatierung verzichten...
1310cdf0e10cSrcweir 	AssertValidEditEngine();
1311cdf0e10cSrcweir 	ExtTextView* pView = GetEditView();
1312cdf0e10cSrcweir 	TextSelection aSel;
1313cdf0e10cSrcweir 	if ( bFromStart )
1314cdf0e10cSrcweir 	{
1315cdf0e10cSrcweir 		aSel = pView->GetSelection();
1316cdf0e10cSrcweir 		if ( !rSearchItem.GetBackward() )
1317cdf0e10cSrcweir 			pView->SetSelection( TextSelection() );
1318cdf0e10cSrcweir 		else
1319cdf0e10cSrcweir 			pView->SetSelection( TextSelection( TextPaM( 0xFFFFFFFF, 0xFFFF ), TextPaM( 0xFFFFFFFF, 0xFFFF ) ) );
1320cdf0e10cSrcweir 	}
1321cdf0e10cSrcweir 
1322cdf0e10cSrcweir 	sal_Bool bForward = !rSearchItem.GetBackward();
1323cdf0e10cSrcweir 	sal_uInt16 nFound = 0;
1324cdf0e10cSrcweir 	if ( ( rSearchItem.GetCommand() == SVX_SEARCHCMD_FIND ) ||
1325cdf0e10cSrcweir 		 ( rSearchItem.GetCommand() == SVX_SEARCHCMD_FIND_ALL ) )
1326cdf0e10cSrcweir 	{
1327cdf0e10cSrcweir 		nFound = pView->Search( rSearchItem.GetSearchOptions() , bForward );
1328cdf0e10cSrcweir 	}
1329cdf0e10cSrcweir 	else if ( ( rSearchItem.GetCommand() == SVX_SEARCHCMD_REPLACE ) ||
1330cdf0e10cSrcweir 			  ( rSearchItem.GetCommand() == SVX_SEARCHCMD_REPLACE_ALL ) )
1331cdf0e10cSrcweir 	{
1332cdf0e10cSrcweir         if ( !IsReadOnly() )
1333cdf0e10cSrcweir         {
1334cdf0e10cSrcweir             sal_Bool bAll = rSearchItem.GetCommand() == SVX_SEARCHCMD_REPLACE_ALL;
1335cdf0e10cSrcweir             nFound = pView->Replace( rSearchItem.GetSearchOptions() , bAll , bForward );
1336cdf0e10cSrcweir         }
1337cdf0e10cSrcweir 	}
1338cdf0e10cSrcweir 
1339cdf0e10cSrcweir 	if ( bFromStart && !nFound )
1340cdf0e10cSrcweir 		pView->SetSelection( aSel );
1341cdf0e10cSrcweir 
1342cdf0e10cSrcweir 	return nFound;
1343cdf0e10cSrcweir }
1344cdf0e10cSrcweir 
GetUndoManager()1345cdf0e10cSrcweir ::svl::IUndoManager* __EXPORT ModulWindow::GetUndoManager()
1346cdf0e10cSrcweir {
1347cdf0e10cSrcweir 	if ( GetEditEngine() )
1348cdf0e10cSrcweir 		return &GetEditEngine()->GetUndoManager();
1349cdf0e10cSrcweir 	return NULL;
1350cdf0e10cSrcweir }
1351cdf0e10cSrcweir 
GetSearchOptions()1352cdf0e10cSrcweir sal_uInt16 __EXPORT ModulWindow::GetSearchOptions()
1353cdf0e10cSrcweir {
1354cdf0e10cSrcweir     sal_uInt16 nOptions = SEARCH_OPTIONS_SEARCH |
1355cdf0e10cSrcweir                       SEARCH_OPTIONS_WHOLE_WORDS |
1356cdf0e10cSrcweir                       SEARCH_OPTIONS_BACKWARDS |
1357cdf0e10cSrcweir                       SEARCH_OPTIONS_REG_EXP |
1358cdf0e10cSrcweir                       SEARCH_OPTIONS_EXACT |
1359cdf0e10cSrcweir                       SEARCH_OPTIONS_SELECTION |
1360cdf0e10cSrcweir                       SEARCH_OPTIONS_SIMILARITY;
1361cdf0e10cSrcweir 
1362cdf0e10cSrcweir     if ( !IsReadOnly() )
1363cdf0e10cSrcweir     {
1364cdf0e10cSrcweir         nOptions |= SEARCH_OPTIONS_REPLACE;
1365cdf0e10cSrcweir         nOptions |= SEARCH_OPTIONS_REPLACE_ALL;
1366cdf0e10cSrcweir     }
1367cdf0e10cSrcweir 
1368cdf0e10cSrcweir     return nOptions;
1369cdf0e10cSrcweir }
1370cdf0e10cSrcweir 
BasicStarted()1371cdf0e10cSrcweir void __EXPORT ModulWindow::BasicStarted()
1372cdf0e10cSrcweir {
1373cdf0e10cSrcweir     if ( XModule().Is() )
1374cdf0e10cSrcweir     {
1375cdf0e10cSrcweir         aStatus.bIsRunning = sal_True;
1376cdf0e10cSrcweir         BreakPointList& rList = GetBreakPoints();
1377cdf0e10cSrcweir         if ( rList.Count() )
1378cdf0e10cSrcweir 	    {
1379cdf0e10cSrcweir             rList.ResetHitCount();
1380cdf0e10cSrcweir 		    rList.SetBreakPointsInBasic( xModule );
1381cdf0e10cSrcweir 		    for ( sal_uInt16 nMethod = 0; nMethod < xModule->GetMethods()->Count(); nMethod++ )
1382cdf0e10cSrcweir 		    {
1383cdf0e10cSrcweir 			    SbMethod* pMethod = (SbMethod*)xModule->GetMethods()->Get( nMethod );
1384cdf0e10cSrcweir 			    DBG_ASSERT( pMethod, "Methode nicht gefunden! (NULL)" );
1385cdf0e10cSrcweir 			    pMethod->SetDebugFlags( pMethod->GetDebugFlags() | SbDEBUG_BREAK );
1386cdf0e10cSrcweir 		    }
1387cdf0e10cSrcweir 	    }
1388cdf0e10cSrcweir     }
1389cdf0e10cSrcweir }
1390cdf0e10cSrcweir 
BasicStopped()1391cdf0e10cSrcweir void __EXPORT ModulWindow::BasicStopped()
1392cdf0e10cSrcweir {
1393cdf0e10cSrcweir 	aStatus.bIsRunning = sal_False;
1394cdf0e10cSrcweir 	GetBreakPointWindow().SetMarkerPos( MARKER_NOMARKER );
1395cdf0e10cSrcweir }
1396cdf0e10cSrcweir 
CreateEntryDescriptor()1397cdf0e10cSrcweir BasicEntryDescriptor ModulWindow::CreateEntryDescriptor()
1398cdf0e10cSrcweir {
1399cdf0e10cSrcweir     ScriptDocument aDocument( GetDocument() );
1400cdf0e10cSrcweir     String aLibName( GetLibName() );
1401cdf0e10cSrcweir     LibraryLocation eLocation = aDocument.getLibraryLocation( aLibName );
1402cdf0e10cSrcweir     String aModName( GetName() );
1403cdf0e10cSrcweir     String aLibSubName;
1404cdf0e10cSrcweir     if( xBasic.Is() && aDocument.isInVBAMode() && XModule().Is() )
1405cdf0e10cSrcweir     {
1406cdf0e10cSrcweir         switch( xModule->GetModuleType() )
1407cdf0e10cSrcweir         {
1408cdf0e10cSrcweir             case script::ModuleType::DOCUMENT:
1409cdf0e10cSrcweir             {
1410cdf0e10cSrcweir                 aLibSubName = String( IDEResId( RID_STR_DOCUMENT_OBJECTS ) );
1411cdf0e10cSrcweir                 uno::Reference< container::XNameContainer > xLib = aDocument.getOrCreateLibrary( E_SCRIPTS, aLibName );
1412cdf0e10cSrcweir                 if( xLib.is() )
1413cdf0e10cSrcweir                 {
1414cdf0e10cSrcweir                     String sObjName;
1415cdf0e10cSrcweir                     ModuleInfoHelper::getObjectName( xLib, aModName, sObjName );
1416cdf0e10cSrcweir                     if( sObjName.Len() )
1417cdf0e10cSrcweir                     {
1418cdf0e10cSrcweir                         aModName.AppendAscii(" (").Append(sObjName).AppendAscii(")");
1419cdf0e10cSrcweir                     }
1420cdf0e10cSrcweir                 }
1421cdf0e10cSrcweir                 break;
1422cdf0e10cSrcweir             }
1423cdf0e10cSrcweir             case script::ModuleType::FORM:
1424cdf0e10cSrcweir                 aLibSubName = String( IDEResId( RID_STR_USERFORMS ) );
1425cdf0e10cSrcweir                 break;
1426cdf0e10cSrcweir             case script::ModuleType::NORMAL:
1427cdf0e10cSrcweir                 aLibSubName = String( IDEResId( RID_STR_NORMAL_MODULES ) );
1428cdf0e10cSrcweir                 break;
1429cdf0e10cSrcweir             case script::ModuleType::CLASS:
1430cdf0e10cSrcweir                 aLibSubName = String( IDEResId( RID_STR_CLASS_MODULES ) );
1431cdf0e10cSrcweir                 break;
1432cdf0e10cSrcweir         }
1433cdf0e10cSrcweir     }
1434cdf0e10cSrcweir     return BasicEntryDescriptor( aDocument, eLocation, aLibName, aLibSubName, aModName, OBJ_TYPE_MODULE );
1435cdf0e10cSrcweir }
1436cdf0e10cSrcweir 
SetReadOnly(sal_Bool b)1437cdf0e10cSrcweir void ModulWindow::SetReadOnly( sal_Bool b )
1438cdf0e10cSrcweir {
1439cdf0e10cSrcweir 	if ( GetEditView() )
1440cdf0e10cSrcweir 		GetEditView()->SetReadOnly( b );
1441cdf0e10cSrcweir }
1442cdf0e10cSrcweir 
IsReadOnly()1443cdf0e10cSrcweir sal_Bool ModulWindow::IsReadOnly()
1444cdf0e10cSrcweir {
1445cdf0e10cSrcweir     sal_Bool bReadOnly = sal_False;
1446cdf0e10cSrcweir 
1447cdf0e10cSrcweir     if ( GetEditView() )
1448cdf0e10cSrcweir         bReadOnly = GetEditView()->IsReadOnly();
1449cdf0e10cSrcweir 
1450cdf0e10cSrcweir     return bReadOnly;
1451cdf0e10cSrcweir }
1452cdf0e10cSrcweir 
IsPasteAllowed()1453cdf0e10cSrcweir sal_Bool ModulWindow::IsPasteAllowed()
1454cdf0e10cSrcweir {
1455cdf0e10cSrcweir     sal_Bool bPaste = sal_False;
1456cdf0e10cSrcweir 
1457cdf0e10cSrcweir     // get clipboard
1458cdf0e10cSrcweir 	Reference< datatransfer::clipboard::XClipboard > xClipboard = GetClipboard();
1459cdf0e10cSrcweir 	if ( xClipboard.is() )
1460cdf0e10cSrcweir 	{
1461cdf0e10cSrcweir 		// get clipboard content
1462cdf0e10cSrcweir 		const sal_uInt32 nRef = Application::ReleaseSolarMutex();
1463cdf0e10cSrcweir 		Reference< datatransfer::XTransferable > xTransf = xClipboard->getContents();
1464cdf0e10cSrcweir 		Application::AcquireSolarMutex( nRef );
1465cdf0e10cSrcweir 		if ( xTransf.is() )
1466cdf0e10cSrcweir 		{
1467cdf0e10cSrcweir 			datatransfer::DataFlavor aFlavor;
1468cdf0e10cSrcweir 			SotExchange::GetFormatDataFlavor( SOT_FORMAT_STRING, aFlavor );
1469cdf0e10cSrcweir             if ( xTransf->isDataFlavorSupported( aFlavor ) )
1470cdf0e10cSrcweir 			{
1471cdf0e10cSrcweir                 bPaste = sal_True;
1472cdf0e10cSrcweir             }
1473cdf0e10cSrcweir         }
1474cdf0e10cSrcweir     }
1475cdf0e10cSrcweir 
1476cdf0e10cSrcweir     return bPaste;
1477cdf0e10cSrcweir }
1478cdf0e10cSrcweir 
ModulWindowLayout(Window * pParent)1479cdf0e10cSrcweir ModulWindowLayout::ModulWindowLayout( Window* pParent ) :
1480cdf0e10cSrcweir 	Window( pParent, WB_CLIPCHILDREN ),
1481cdf0e10cSrcweir 	aVSplitter( this, WinBits( WB_VSCROLL ) ),
1482cdf0e10cSrcweir 	aHSplitter( this, WinBits( WB_HSCROLL ) ),
1483cdf0e10cSrcweir 	aWatchWindow( this ),
1484cdf0e10cSrcweir 	aStackWindow( this ),
1485cdf0e10cSrcweir 	bVSplitted(sal_False),
1486cdf0e10cSrcweir 	bHSplitted(sal_False),
1487cdf0e10cSrcweir     m_pModulWindow(0),
1488cdf0e10cSrcweir     m_aImagesNormal(IDEResId(RID_IMGLST_LAYOUT)),
1489cdf0e10cSrcweir     m_aImagesHighContrast(IDEResId(RID_IMGLST_LAYOUT_HC))
1490cdf0e10cSrcweir {
1491cdf0e10cSrcweir     SetBackground(GetSettings().GetStyleSettings().GetWindowColor());
1492cdf0e10cSrcweir 
1493cdf0e10cSrcweir 	aVSplitter.SetSplitHdl( LINK( this, ModulWindowLayout, SplitHdl ) );
1494cdf0e10cSrcweir 	aHSplitter.SetSplitHdl( LINK( this, ModulWindowLayout, SplitHdl ) );
1495cdf0e10cSrcweir 	aVSplitter.Show();
1496cdf0e10cSrcweir 	aHSplitter.Show();
1497cdf0e10cSrcweir 
1498cdf0e10cSrcweir 	aWatchWindow.Show();
1499cdf0e10cSrcweir 	aStackWindow.Show();
1500cdf0e10cSrcweir 
1501cdf0e10cSrcweir     Color aColor(GetSettings().GetStyleSettings().GetFieldTextColor());
1502cdf0e10cSrcweir     m_aSyntaxColors[TT_UNKNOWN] = aColor;
1503cdf0e10cSrcweir     m_aSyntaxColors[TT_WHITESPACE] = aColor;
1504cdf0e10cSrcweir     m_aSyntaxColors[TT_EOL] = aColor;
1505cdf0e10cSrcweir     m_aColorConfig.AddListener(this);
1506cdf0e10cSrcweir     m_aSyntaxColors[TT_IDENTIFIER]
1507cdf0e10cSrcweir         = Color(m_aColorConfig.GetColorValue(svtools::BASICIDENTIFIER).nColor);
1508cdf0e10cSrcweir     m_aSyntaxColors[TT_NUMBER]
1509cdf0e10cSrcweir         = Color(m_aColorConfig.GetColorValue(svtools::BASICNUMBER).nColor);
1510cdf0e10cSrcweir     m_aSyntaxColors[TT_STRING]
1511cdf0e10cSrcweir         = Color(m_aColorConfig.GetColorValue(svtools::BASICSTRING).nColor);
1512cdf0e10cSrcweir     m_aSyntaxColors[TT_COMMENT]
1513cdf0e10cSrcweir         = Color(m_aColorConfig.GetColorValue(svtools::BASICCOMMENT).nColor);
1514cdf0e10cSrcweir     m_aSyntaxColors[TT_ERROR]
1515cdf0e10cSrcweir         = Color(m_aColorConfig.GetColorValue(svtools::BASICERROR).nColor);
1516cdf0e10cSrcweir     m_aSyntaxColors[TT_OPERATOR]
1517cdf0e10cSrcweir         = Color(m_aColorConfig.GetColorValue(svtools::BASICOPERATOR).nColor);
1518cdf0e10cSrcweir     m_aSyntaxColors[TT_KEYWORDS]
1519cdf0e10cSrcweir         = Color(m_aColorConfig.GetColorValue(svtools::BASICKEYWORD).nColor);
1520cdf0e10cSrcweir 
1521cdf0e10cSrcweir 	Font aFont( GetFont() );
1522cdf0e10cSrcweir 	Size aSz( aFont.GetSize() );
1523cdf0e10cSrcweir 	aSz.Height() *= 3;
1524cdf0e10cSrcweir 	aSz.Height() /= 2;
1525cdf0e10cSrcweir 	aFont.SetSize( aSz );
1526cdf0e10cSrcweir 	aFont.SetWeight( WEIGHT_BOLD );
1527cdf0e10cSrcweir     aFont.SetColor(GetSettings().GetStyleSettings().GetWindowTextColor());
1528cdf0e10cSrcweir 	SetFont( aFont );
1529cdf0e10cSrcweir }
1530cdf0e10cSrcweir 
~ModulWindowLayout()1531cdf0e10cSrcweir ModulWindowLayout::~ModulWindowLayout()
1532cdf0e10cSrcweir {
1533cdf0e10cSrcweir     m_aColorConfig.RemoveListener(this);
1534cdf0e10cSrcweir }
1535cdf0e10cSrcweir 
Resize()1536cdf0e10cSrcweir void __EXPORT ModulWindowLayout::Resize()
1537cdf0e10cSrcweir {
1538cdf0e10cSrcweir 	// ScrollBars, etc. passiert in BasicIDEShell:Adjust...
1539cdf0e10cSrcweir 	ArrangeWindows();
1540cdf0e10cSrcweir //	Invalidate();
1541cdf0e10cSrcweir }
1542cdf0e10cSrcweir 
Paint(const Rectangle &)1543cdf0e10cSrcweir void __EXPORT ModulWindowLayout::Paint( const Rectangle& )
1544cdf0e10cSrcweir {
1545cdf0e10cSrcweir 	DrawText( Point(), String( IDEResId( RID_STR_NOMODULE ) ) );
1546cdf0e10cSrcweir }
1547cdf0e10cSrcweir 
1548cdf0e10cSrcweir 
ArrangeWindows()1549cdf0e10cSrcweir void ModulWindowLayout::ArrangeWindows()
1550cdf0e10cSrcweir {
1551cdf0e10cSrcweir 	Size aSz = GetOutputSizePixel();
1552cdf0e10cSrcweir 
1553cdf0e10cSrcweir 	// prueffen, ob der Splitter in einem gueltigen Bereich liegt...
1554cdf0e10cSrcweir 	long nMinPos = SPLIT_MARGIN;
1555cdf0e10cSrcweir 	long nMaxPos = aSz.Height() - SPLIT_MARGIN;
1556cdf0e10cSrcweir 
1557cdf0e10cSrcweir 	long nVSplitPos = aVSplitter.GetSplitPosPixel();
1558cdf0e10cSrcweir 	long nHSplitPos = aHSplitter.GetSplitPosPixel();
1559cdf0e10cSrcweir 	if ( !bVSplitted )
1560cdf0e10cSrcweir 	{
1561cdf0e10cSrcweir 		// Wenn noch nie gesplitted wurde, Verhaeltniss = 3 : 4
1562cdf0e10cSrcweir 		nVSplitPos = aSz.Height() * 3 / 4;
1563cdf0e10cSrcweir 		aVSplitter.SetSplitPosPixel( nVSplitPos );
1564cdf0e10cSrcweir 	}
1565cdf0e10cSrcweir 	if ( !bHSplitted )
1566cdf0e10cSrcweir 	{
1567cdf0e10cSrcweir 		// Wenn noch nie gesplitted wurde, Verhaeltniss = 2 : 3
1568cdf0e10cSrcweir 		nHSplitPos = aSz.Width() * 2 / 3;
1569cdf0e10cSrcweir 		aHSplitter.SetSplitPosPixel( nHSplitPos );
1570cdf0e10cSrcweir 	}
1571cdf0e10cSrcweir 	if ( ( nVSplitPos < nMinPos ) || ( nVSplitPos > nMaxPos ) )
1572cdf0e10cSrcweir 		nVSplitPos = ( nVSplitPos < nMinPos ) ? 0 : ( aSz.Height() - SPLIT_HEIGHT );
1573cdf0e10cSrcweir 
1574cdf0e10cSrcweir 	Size aXEWSz;
1575cdf0e10cSrcweir 	aXEWSz.Width() = aSz.Width();
1576cdf0e10cSrcweir 	aXEWSz.Height() = nVSplitPos + 1;
1577cdf0e10cSrcweir 	if ( m_pModulWindow )
1578cdf0e10cSrcweir 	{
1579cdf0e10cSrcweir 		DBG_CHKOBJ( m_pModulWindow, ModulWindow, 0 );
1580cdf0e10cSrcweir 		m_pModulWindow->SetPosSizePixel( Point( 0, 0 ), aXEWSz );
1581cdf0e10cSrcweir 	}
1582cdf0e10cSrcweir 
1583cdf0e10cSrcweir 	aVSplitter.SetDragRectPixel( Rectangle( Point( 0, 0 ), Size( aSz.Width(), aSz.Height() ) ) );
1584cdf0e10cSrcweir 	aVSplitter.SetPosPixel( Point( 0, nVSplitPos ) );
1585cdf0e10cSrcweir 	aVSplitter.SetSizePixel( Size( aSz.Width(), SPLIT_HEIGHT ) );
1586cdf0e10cSrcweir 
1587cdf0e10cSrcweir 	aHSplitter.SetDragRectPixel( Rectangle( Point( 0, nVSplitPos+SPLIT_HEIGHT ), Size( aSz.Width(), aSz.Height() - nVSplitPos - SPLIT_HEIGHT ) ) );
1588cdf0e10cSrcweir 	aHSplitter.SetPosPixel( Point( nHSplitPos, nVSplitPos ) );
1589cdf0e10cSrcweir 	aHSplitter.SetSizePixel( Size( SPLIT_HEIGHT, aSz.Height() - nVSplitPos ) );
1590cdf0e10cSrcweir 
1591cdf0e10cSrcweir 	Size aWWSz;
1592cdf0e10cSrcweir 	Point aWWPos( 0, nVSplitPos+SPLIT_HEIGHT );
1593cdf0e10cSrcweir 	aWWSz.Width() = nHSplitPos;
1594cdf0e10cSrcweir 	aWWSz.Height() = aSz.Height() - aWWPos.Y();
1595cdf0e10cSrcweir 	if ( !aWatchWindow.IsFloatingMode() )
1596cdf0e10cSrcweir 		aWatchWindow.SetPosSizePixel( aWWPos, aWWSz );
1597cdf0e10cSrcweir 
1598cdf0e10cSrcweir 	Size aSWSz;
1599cdf0e10cSrcweir 	Point aSWPos( nHSplitPos+SPLIT_HEIGHT, nVSplitPos+SPLIT_HEIGHT );
1600cdf0e10cSrcweir 	aSWSz.Width() = aSz.Width() - aSWPos.X();
1601cdf0e10cSrcweir 	aSWSz.Height() = aSz.Height() - aSWPos.Y();
1602cdf0e10cSrcweir 	if ( !aStackWindow.IsFloatingMode() )
1603cdf0e10cSrcweir 		aStackWindow.SetPosSizePixel( aSWPos, aSWSz );
1604cdf0e10cSrcweir 
1605cdf0e10cSrcweir     if ( aStackWindow.IsFloatingMode() && aWatchWindow.IsFloatingMode() )
1606cdf0e10cSrcweir 		aHSplitter.Hide();
1607cdf0e10cSrcweir 	else
1608cdf0e10cSrcweir 		aHSplitter.Show();
1609cdf0e10cSrcweir 
1610cdf0e10cSrcweir 	long nHDoubleClickSplitPosX = aSz.Width()-aHSplitter.GetSizePixel().Width();
1611cdf0e10cSrcweir 	if ( aHSplitter.GetSplitPosPixel() < nHDoubleClickSplitPosX )
1612cdf0e10cSrcweir 		aHSplitter.SetLastSplitPosPixel( nHDoubleClickSplitPosX );
1613cdf0e10cSrcweir 
1614cdf0e10cSrcweir 
1615cdf0e10cSrcweir 	long nHDoubleClickSplitPosY = aSz.Height()-aVSplitter.GetSizePixel().Height();
1616cdf0e10cSrcweir 	if ( aVSplitter.GetSplitPosPixel() < nHDoubleClickSplitPosY )
1617cdf0e10cSrcweir 		aVSplitter.SetLastSplitPosPixel( nHDoubleClickSplitPosY );
1618cdf0e10cSrcweir }
1619cdf0e10cSrcweir 
IMPL_LINK(ModulWindowLayout,SplitHdl,Splitter *,pSplitter)1620cdf0e10cSrcweir IMPL_LINK( ModulWindowLayout, SplitHdl, Splitter *, pSplitter )
1621cdf0e10cSrcweir {
1622cdf0e10cSrcweir 	if ( pSplitter == &aVSplitter )
1623cdf0e10cSrcweir 		bVSplitted = sal_True;
1624cdf0e10cSrcweir 	else
1625cdf0e10cSrcweir 		bHSplitted = sal_True;
1626cdf0e10cSrcweir 
1627cdf0e10cSrcweir 	ArrangeWindows();
1628cdf0e10cSrcweir 	return 0;
1629cdf0e10cSrcweir }
1630cdf0e10cSrcweir 
IsToBeDocked(DockingWindow * pDockingWindow,const Point & rPos,Rectangle & rRect)1631cdf0e10cSrcweir sal_Bool ModulWindowLayout::IsToBeDocked( DockingWindow* pDockingWindow, const Point& rPos, Rectangle& rRect )
1632cdf0e10cSrcweir {
1633cdf0e10cSrcweir 	// prueffen, ob als Dock oder als Child:
1634cdf0e10cSrcweir 	// TRUE:	Floating
1635cdf0e10cSrcweir 	// FALSE:	Child
1636cdf0e10cSrcweir 	Point aPosInMe = ScreenToOutputPixel( rPos );
1637cdf0e10cSrcweir 	Size aSz = GetOutputSizePixel();
1638cdf0e10cSrcweir 	if ( ( aPosInMe.X() > 0 ) && ( aPosInMe.X() < aSz.Width() ) &&
1639cdf0e10cSrcweir 		 ( aPosInMe.Y() > 0 ) && ( aPosInMe.Y() < aSz.Height() ) )
1640cdf0e10cSrcweir 	{
1641cdf0e10cSrcweir 		long nVSplitPos = aVSplitter.GetSplitPosPixel();
1642cdf0e10cSrcweir 		long nHSplitPos = aHSplitter.GetSplitPosPixel();
1643cdf0e10cSrcweir 		if ( pDockingWindow == &aWatchWindow )
1644cdf0e10cSrcweir 		{
1645cdf0e10cSrcweir 			if ( ( aPosInMe.Y() > nVSplitPos ) && ( aPosInMe.X() < nHSplitPos ) )
1646cdf0e10cSrcweir 			{
1647cdf0e10cSrcweir 				rRect.SetSize( Size( nHSplitPos, aSz.Height() - nVSplitPos ) );
1648cdf0e10cSrcweir 				rRect.SetPos( OutputToScreenPixel( Point( 0, nVSplitPos ) ) );
1649cdf0e10cSrcweir 				return sal_True;
1650cdf0e10cSrcweir 			}
1651cdf0e10cSrcweir 		}
1652cdf0e10cSrcweir 		if ( pDockingWindow == &aStackWindow )
1653cdf0e10cSrcweir 		{
1654cdf0e10cSrcweir 			if ( ( aPosInMe.Y() > nVSplitPos ) && ( aPosInMe.X() > nHSplitPos ) )
1655cdf0e10cSrcweir 			{
1656cdf0e10cSrcweir 				rRect.SetSize( Size( aSz.Width() - nHSplitPos, aSz.Height() - nVSplitPos ) );
1657cdf0e10cSrcweir 				rRect.SetPos( OutputToScreenPixel( Point( nHSplitPos, nVSplitPos ) ) );
1658cdf0e10cSrcweir 				return sal_True;
1659cdf0e10cSrcweir 			}
1660cdf0e10cSrcweir 		}
1661cdf0e10cSrcweir 	}
1662cdf0e10cSrcweir 	return sal_False;
1663cdf0e10cSrcweir }
1664cdf0e10cSrcweir 
DockaWindow(DockingWindow * pDockingWindow)1665cdf0e10cSrcweir void ModulWindowLayout::DockaWindow( DockingWindow* pDockingWindow )
1666cdf0e10cSrcweir {
1667cdf0e10cSrcweir 	if ( pDockingWindow == &aWatchWindow )
1668cdf0e10cSrcweir 	{
1669cdf0e10cSrcweir 		// evtl. Sonderbehandlung...
1670cdf0e10cSrcweir 		ArrangeWindows();
1671cdf0e10cSrcweir 	}
1672cdf0e10cSrcweir 	else if ( pDockingWindow == &aStackWindow )
1673cdf0e10cSrcweir 	{
1674cdf0e10cSrcweir 		// evtl. Sonderbehandlung...
1675cdf0e10cSrcweir 		ArrangeWindows();
1676cdf0e10cSrcweir 	}
1677cdf0e10cSrcweir #ifdef DBG_UTIL
1678cdf0e10cSrcweir 	else
1679cdf0e10cSrcweir 		DBG_ERROR( "Wer will sich denn hier andocken ?" );
1680cdf0e10cSrcweir #endif
1681cdf0e10cSrcweir }
1682cdf0e10cSrcweir 
SetModulWindow(ModulWindow * pModWin)1683cdf0e10cSrcweir void ModulWindowLayout::SetModulWindow( ModulWindow* pModWin )
1684cdf0e10cSrcweir {
1685cdf0e10cSrcweir     m_pModulWindow = pModWin;
1686cdf0e10cSrcweir 	ArrangeWindows();
1687cdf0e10cSrcweir }
1688cdf0e10cSrcweir 
1689cdf0e10cSrcweir // virtual
DataChanged(DataChangedEvent const & rDCEvt)1690cdf0e10cSrcweir void ModulWindowLayout::DataChanged(DataChangedEvent const & rDCEvt)
1691cdf0e10cSrcweir {
1692cdf0e10cSrcweir     Window::DataChanged(rDCEvt);
1693cdf0e10cSrcweir     if (rDCEvt.GetType() == DATACHANGED_SETTINGS
1694cdf0e10cSrcweir         && (rDCEvt.GetFlags() & SETTINGS_STYLE) != 0)
1695cdf0e10cSrcweir     {
1696cdf0e10cSrcweir         bool bInvalidate = false;
1697cdf0e10cSrcweir         Color aColor(GetSettings().GetStyleSettings().GetWindowColor());
1698cdf0e10cSrcweir         if (aColor
1699cdf0e10cSrcweir             != rDCEvt.GetOldSettings()->GetStyleSettings().GetWindowColor())
1700cdf0e10cSrcweir         {
1701cdf0e10cSrcweir             SetBackground(Wallpaper(aColor));
1702cdf0e10cSrcweir             bInvalidate = true;
1703cdf0e10cSrcweir         }
1704cdf0e10cSrcweir         aColor = GetSettings().GetStyleSettings().GetWindowTextColor();
1705cdf0e10cSrcweir         if (aColor != rDCEvt.GetOldSettings()->
1706cdf0e10cSrcweir             GetStyleSettings().GetWindowTextColor())
1707cdf0e10cSrcweir         {
1708cdf0e10cSrcweir             Font aFont(GetFont());
1709cdf0e10cSrcweir             aFont.SetColor(aColor);
1710cdf0e10cSrcweir             SetFont(aFont);
1711cdf0e10cSrcweir             bInvalidate = true;
1712cdf0e10cSrcweir         }
1713cdf0e10cSrcweir         if (bInvalidate)
1714cdf0e10cSrcweir             Invalidate();
1715cdf0e10cSrcweir         aColor = GetSettings().GetStyleSettings().GetFieldTextColor();
1716cdf0e10cSrcweir         if (aColor != m_aSyntaxColors[TT_UNKNOWN])
1717cdf0e10cSrcweir         {
1718cdf0e10cSrcweir             m_aSyntaxColors[TT_UNKNOWN] = aColor;
1719cdf0e10cSrcweir             m_aSyntaxColors[TT_WHITESPACE] = aColor;
1720cdf0e10cSrcweir             m_aSyntaxColors[TT_EOL] = aColor;
1721cdf0e10cSrcweir             updateSyntaxHighlighting();
1722cdf0e10cSrcweir         }
1723cdf0e10cSrcweir     }
1724cdf0e10cSrcweir }
1725cdf0e10cSrcweir 
1726cdf0e10cSrcweir // virtual
ConfigurationChanged(utl::ConfigurationBroadcaster *,sal_uInt32)1727cdf0e10cSrcweir void ModulWindowLayout::ConfigurationChanged( utl::ConfigurationBroadcaster*, sal_uInt32 )
1728cdf0e10cSrcweir {
1729cdf0e10cSrcweir     {
1730cdf0e10cSrcweir         Color aColor(m_aColorConfig.GetColorValue(svtools::BASICIDENTIFIER).
1731cdf0e10cSrcweir                      nColor);
1732cdf0e10cSrcweir         bool bChanged = aColor != m_aSyntaxColors[TT_IDENTIFIER];
1733cdf0e10cSrcweir         m_aSyntaxColors[TT_IDENTIFIER] = aColor;
1734cdf0e10cSrcweir         aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICNUMBER).nColor);
1735cdf0e10cSrcweir 	if (bChanged || aColor != m_aSyntaxColors[TT_NUMBER])
1736cdf0e10cSrcweir             bChanged = true;
1737cdf0e10cSrcweir         m_aSyntaxColors[TT_NUMBER] = aColor;
1738cdf0e10cSrcweir         aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICSTRING).nColor);
1739cdf0e10cSrcweir         if (bChanged || aColor != m_aSyntaxColors[TT_STRING])
1740cdf0e10cSrcweir             bChanged = true;
1741cdf0e10cSrcweir         m_aSyntaxColors[TT_STRING] = aColor;
1742cdf0e10cSrcweir         aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICCOMMENT).
1743cdf0e10cSrcweir                        nColor);
1744cdf0e10cSrcweir         if (bChanged || aColor != m_aSyntaxColors[TT_COMMENT])
1745cdf0e10cSrcweir             bChanged = true;
1746cdf0e10cSrcweir         m_aSyntaxColors[TT_COMMENT] = aColor;
1747cdf0e10cSrcweir         aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICERROR).nColor);
1748cdf0e10cSrcweir         if (bChanged || aColor != m_aSyntaxColors[TT_ERROR])
1749cdf0e10cSrcweir             bChanged = true;
1750cdf0e10cSrcweir         m_aSyntaxColors[TT_ERROR] = aColor;
1751cdf0e10cSrcweir         aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICOPERATOR).
1752cdf0e10cSrcweir                        nColor);
1753cdf0e10cSrcweir         if (bChanged || aColor != m_aSyntaxColors[TT_OPERATOR])
1754cdf0e10cSrcweir             bChanged = true;
1755cdf0e10cSrcweir         m_aSyntaxColors[TT_OPERATOR] = aColor;
1756cdf0e10cSrcweir         aColor = Color(m_aColorConfig.GetColorValue(svtools::BASICKEYWORD).
1757cdf0e10cSrcweir                        nColor);
1758cdf0e10cSrcweir         if (bChanged || aColor != m_aSyntaxColors[TT_KEYWORDS])
1759cdf0e10cSrcweir             bChanged = true;
1760cdf0e10cSrcweir         m_aSyntaxColors[TT_KEYWORDS] = aColor;
1761cdf0e10cSrcweir         if (bChanged)
1762cdf0e10cSrcweir             updateSyntaxHighlighting();
1763cdf0e10cSrcweir     }
1764cdf0e10cSrcweir }
1765cdf0e10cSrcweir 
updateSyntaxHighlighting()1766cdf0e10cSrcweir void ModulWindowLayout::updateSyntaxHighlighting()
1767cdf0e10cSrcweir {
1768cdf0e10cSrcweir     if (m_pModulWindow != 0)
1769cdf0e10cSrcweir     {
1770cdf0e10cSrcweir         EditorWindow & rEditor = m_pModulWindow->GetEditorWindow();
1771cdf0e10cSrcweir         sal_uLong nCount = rEditor.GetEditEngine()->GetParagraphCount();
1772cdf0e10cSrcweir         for (sal_uLong i = 0; i < nCount; ++i)
1773cdf0e10cSrcweir             rEditor.DoDelayedSyntaxHighlight(i);
1774cdf0e10cSrcweir     }
1775cdf0e10cSrcweir }
1776cdf0e10cSrcweir 
getImage(sal_uInt16 nId,bool bHighContrastMode) const1777cdf0e10cSrcweir Image ModulWindowLayout::getImage(sal_uInt16 nId, bool bHighContrastMode) const
1778cdf0e10cSrcweir {
1779cdf0e10cSrcweir     return (bHighContrastMode ? m_aImagesHighContrast : m_aImagesNormal).
1780cdf0e10cSrcweir         GetImage(nId);
1781cdf0e10cSrcweir }
1782