xref: /aoo42x/main/sw/source/ui/docvw/srcedtw.cxx (revision 7a980842)
1efeef26fSAndrew Rist /**************************************************************
2cdf0e10cSrcweir  *
3efeef26fSAndrew Rist  * Licensed to the Apache Software Foundation (ASF) under one
4efeef26fSAndrew Rist  * or more contributor license agreements.  See the NOTICE file
5efeef26fSAndrew Rist  * distributed with this work for additional information
6efeef26fSAndrew Rist  * regarding copyright ownership.  The ASF licenses this file
7efeef26fSAndrew Rist  * to you under the Apache License, Version 2.0 (the
8efeef26fSAndrew Rist  * "License"); you may not use this file except in compliance
9efeef26fSAndrew Rist  * with the License.  You may obtain a copy of the License at
10efeef26fSAndrew Rist  *
11efeef26fSAndrew Rist  *   http://www.apache.org/licenses/LICENSE-2.0
12efeef26fSAndrew Rist  *
13efeef26fSAndrew Rist  * Unless required by applicable law or agreed to in writing,
14efeef26fSAndrew Rist  * software distributed under the License is distributed on an
15efeef26fSAndrew Rist  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16efeef26fSAndrew Rist  * KIND, either express or implied.  See the License for the
17efeef26fSAndrew Rist  * specific language governing permissions and limitations
18efeef26fSAndrew Rist  * under the License.
19efeef26fSAndrew Rist  *
20efeef26fSAndrew Rist  *************************************************************/
21efeef26fSAndrew Rist 
22efeef26fSAndrew Rist 
23cdf0e10cSrcweir 
24cdf0e10cSrcweir // MARKER(update_precomp.py): autogen include statement, do not remove
25cdf0e10cSrcweir #include "precompiled_sw.hxx"
26cdf0e10cSrcweir 
27cdf0e10cSrcweir 
28cdf0e10cSrcweir #include <hintids.hxx>
29cdf0e10cSrcweir #ifndef _CMDID_H
30cdf0e10cSrcweir #include <cmdid.h>
31cdf0e10cSrcweir #endif
32cdf0e10cSrcweir 
33cdf0e10cSrcweir 
34cdf0e10cSrcweir #include <svtools/textview.hxx>
35cdf0e10cSrcweir #ifndef _SVX_SVXIDS_HRC
36cdf0e10cSrcweir #include <svx/svxids.hrc>
37cdf0e10cSrcweir #endif
38cdf0e10cSrcweir #ifndef _SCRBAR_HXX //autogen
39cdf0e10cSrcweir #include <vcl/scrbar.hxx>
40cdf0e10cSrcweir #endif
41cdf0e10cSrcweir #include <sfx2/dispatch.hxx>
42cdf0e10cSrcweir #include <sfx2/app.hxx>
43cdf0e10cSrcweir #include <svtools/htmltokn.h>
44cdf0e10cSrcweir #include <svtools/txtattr.hxx>
45cdf0e10cSrcweir #include <unotools/sourceviewconfig.hxx>
46cdf0e10cSrcweir #include <svtools/colorcfg.hxx>
47cdf0e10cSrcweir #include <editeng/flstitem.hxx>
48cdf0e10cSrcweir #include <vcl/metric.hxx>
49cdf0e10cSrcweir #include <svtools/ctrltool.hxx>
50cdf0e10cSrcweir #include <tools/time.hxx>
51cdf0e10cSrcweir #include <swmodule.hxx>
52cdf0e10cSrcweir #ifndef _DOCSH_HXX
53cdf0e10cSrcweir #include <docsh.hxx>
54cdf0e10cSrcweir #endif
55cdf0e10cSrcweir #ifndef _SRCVIEW_HXX
56cdf0e10cSrcweir #include <srcview.hxx>
57cdf0e10cSrcweir #endif
58cdf0e10cSrcweir #ifndef _HELPID_H
59cdf0e10cSrcweir #include <helpid.h>
60cdf0e10cSrcweir #endif
61cdf0e10cSrcweir #include <deque>
62cdf0e10cSrcweir 
63cdf0e10cSrcweir 
64cdf0e10cSrcweir 
65cdf0e10cSrcweir struct SwTextPortion
66cdf0e10cSrcweir {
67*7a980842SDamjanJovanovic 	sal_uInt32 nLine;
68cdf0e10cSrcweir 	sal_uInt16 nStart, nEnd;
69cdf0e10cSrcweir     svtools::ColorConfigEntry eType;
70cdf0e10cSrcweir };
71cdf0e10cSrcweir 
72cdf0e10cSrcweir #define MAX_SYNTAX_HIGHLIGHT 20
73cdf0e10cSrcweir #define MAX_HIGHLIGHTTIME 200
74cdf0e10cSrcweir #define SYNTAX_HIGHLIGHT_TIMEOUT 200
75cdf0e10cSrcweir 
76cdf0e10cSrcweir typedef std::deque<SwTextPortion> SwTextPortions;
77cdf0e10cSrcweir 
78cdf0e10cSrcweir 
lcl_Highlight(const String & rSource,SwTextPortions & aPortionList)79cdf0e10cSrcweir static void lcl_Highlight(const String& rSource, SwTextPortions& aPortionList)
80cdf0e10cSrcweir {
81cdf0e10cSrcweir 	const sal_Unicode cOpenBracket = '<';
82cdf0e10cSrcweir 	const sal_Unicode cCloseBracket= '>';
83cdf0e10cSrcweir 	const sal_Unicode cSlash		= '/';
84cdf0e10cSrcweir 	const sal_Unicode cExclamation = '!';
85cdf0e10cSrcweir 	const sal_Unicode cMinus		= '-';
86cdf0e10cSrcweir 	const sal_Unicode cSpace		= ' ';
87cdf0e10cSrcweir 	const sal_Unicode cTab			= 0x09;
88cdf0e10cSrcweir 	const sal_Unicode cLF          = 0x0a;
89cdf0e10cSrcweir 	const sal_Unicode cCR          = 0x0d;
90cdf0e10cSrcweir 
91cdf0e10cSrcweir 
92cdf0e10cSrcweir 	const sal_uInt16 nStrLen = rSource.Len();
93cdf0e10cSrcweir 	sal_uInt16 nInsert = 0;				// Number of inserted Portions
94cdf0e10cSrcweir 	sal_uInt16 nActPos = 0;				// Position, at the '<' was found
95cdf0e10cSrcweir 	sal_uInt16 nOffset = 0; 			// Offset of nActPos for '<'
96cdf0e10cSrcweir 	sal_uInt16 nPortStart = USHRT_MAX; 	// For the TextPortion
97cdf0e10cSrcweir 	sal_uInt16 nPortEnd  = 	0;  		//
98cdf0e10cSrcweir 	SwTextPortion aText;
99cdf0e10cSrcweir 	while(nActPos < nStrLen)
100cdf0e10cSrcweir 	{
101cdf0e10cSrcweir         svtools::ColorConfigEntry eFoundType = svtools::HTMLUNKNOWN;
102cdf0e10cSrcweir 		if(rSource.GetChar(nActPos) == cOpenBracket && nActPos < nStrLen - 2 )
103cdf0e10cSrcweir 		{
104cdf0e10cSrcweir 			// 'leere' Portion einfuegen
105cdf0e10cSrcweir 			if(nPortEnd < nActPos - 1 )
106cdf0e10cSrcweir 			{
107cdf0e10cSrcweir 				aText.nLine = 0;
108cdf0e10cSrcweir 				// am Anfang nicht verschieben
109cdf0e10cSrcweir 				aText.nStart = nPortEnd;
110cdf0e10cSrcweir 				if(nInsert)
111cdf0e10cSrcweir 					aText.nStart += 1;
112cdf0e10cSrcweir 				aText.nEnd = nActPos - 1;
113cdf0e10cSrcweir                 aText.eType = svtools::HTMLUNKNOWN;
114cdf0e10cSrcweir 				aPortionList.push_back( aText );
115cdf0e10cSrcweir                 nInsert++;
116cdf0e10cSrcweir 			}
117cdf0e10cSrcweir 			sal_Unicode cFollowFirst = rSource.GetChar((xub_StrLen)(nActPos + 1));
118cdf0e10cSrcweir 			sal_Unicode cFollowNext = rSource.GetChar((xub_StrLen)(nActPos + 2));
119cdf0e10cSrcweir 			if(cExclamation == cFollowFirst)
120cdf0e10cSrcweir 			{
121cdf0e10cSrcweir 				// "<!" SGML oder Kommentar
122cdf0e10cSrcweir 				if(cMinus == cFollowNext &&
123cdf0e10cSrcweir 					nActPos < nStrLen - 3 && cMinus == rSource.GetChar((xub_StrLen)(nActPos + 3)))
124cdf0e10cSrcweir 				{
125cdf0e10cSrcweir                     eFoundType = svtools::HTMLCOMMENT;
126cdf0e10cSrcweir 				}
127cdf0e10cSrcweir 				else
128cdf0e10cSrcweir                     eFoundType = svtools::HTMLSGML;
129cdf0e10cSrcweir 				nPortStart = nActPos;
130cdf0e10cSrcweir 				nPortEnd = nActPos + 1;
131cdf0e10cSrcweir 			}
132cdf0e10cSrcweir 			else if(cSlash == cFollowFirst)
133cdf0e10cSrcweir 			{
134cdf0e10cSrcweir 				// "</" Slash ignorieren
135cdf0e10cSrcweir 				nPortStart = nActPos;
136cdf0e10cSrcweir 				nActPos++;
137cdf0e10cSrcweir 				nOffset++;
138cdf0e10cSrcweir 			}
139cdf0e10cSrcweir             if(svtools::HTMLUNKNOWN == eFoundType)
140cdf0e10cSrcweir 			{
141cdf0e10cSrcweir 				//jetzt koennte hier ein keyword folgen
142cdf0e10cSrcweir 				sal_uInt16 nSrchPos = nActPos;
143cdf0e10cSrcweir 				while(++nSrchPos < nStrLen - 1)
144cdf0e10cSrcweir 				{
145cdf0e10cSrcweir 					sal_Unicode cNext = rSource.GetChar(nSrchPos);
146cdf0e10cSrcweir 					if( cNext == cSpace	||
147cdf0e10cSrcweir 						cNext == cTab 	||
148cdf0e10cSrcweir 						cNext == cLF 	||
149cdf0e10cSrcweir 						cNext == cCR)
150cdf0e10cSrcweir 						break;
151cdf0e10cSrcweir 					else if(cNext == cCloseBracket)
152cdf0e10cSrcweir 					{
153cdf0e10cSrcweir 						break;
154cdf0e10cSrcweir 					}
155cdf0e10cSrcweir 				}
156cdf0e10cSrcweir 				if(nSrchPos > nActPos + 1)
157cdf0e10cSrcweir 				{
158cdf0e10cSrcweir 					//irgend ein String wurde gefunden
159cdf0e10cSrcweir 					String sToken = rSource.Copy(nActPos + 1, nSrchPos - nActPos - 1 );
160cdf0e10cSrcweir 					sToken.ToUpperAscii();
161cdf0e10cSrcweir 					int nToken = ::GetHTMLToken(sToken);
162cdf0e10cSrcweir 					if(nToken)
163cdf0e10cSrcweir 					{
164cdf0e10cSrcweir 						//Token gefunden
165cdf0e10cSrcweir                         eFoundType = svtools::HTMLKEYWORD;
166cdf0e10cSrcweir 						nPortEnd = nSrchPos;
167cdf0e10cSrcweir 						nPortStart = nActPos;
168cdf0e10cSrcweir 					}
169cdf0e10cSrcweir 					else
170cdf0e10cSrcweir 					{
171cdf0e10cSrcweir 						//was war das denn?
172cdf0e10cSrcweir #if OSL_DEBUG_LEVEL > 1
173cdf0e10cSrcweir                         DBG_ERROR("Token nicht erkannt!");
174cdf0e10cSrcweir                         DBG_ERROR(ByteString(sToken, gsl_getSystemTextEncoding()).GetBuffer());
175cdf0e10cSrcweir #endif
176cdf0e10cSrcweir 					}
177cdf0e10cSrcweir 
178cdf0e10cSrcweir 				}
179cdf0e10cSrcweir 			}
180cdf0e10cSrcweir 			// jetzt muss noch '>' gesucht werden
181cdf0e10cSrcweir             if(svtools::HTMLUNKNOWN != eFoundType)
182cdf0e10cSrcweir 			{
183cdf0e10cSrcweir 				sal_Bool bFound = sal_False;
184cdf0e10cSrcweir 				for(sal_uInt16 i = nPortEnd; i < nStrLen; i++)
185cdf0e10cSrcweir 					if(cCloseBracket == rSource.GetChar(i))
186cdf0e10cSrcweir 					{
187cdf0e10cSrcweir 						bFound = sal_True;
188cdf0e10cSrcweir 						nPortEnd = i;
189cdf0e10cSrcweir 						break;
190cdf0e10cSrcweir 					}
191cdf0e10cSrcweir                 if(!bFound && (eFoundType == svtools::HTMLCOMMENT))
192cdf0e10cSrcweir 				{
193cdf0e10cSrcweir 					// Kommentar ohne Ende in dieser Zeile
194cdf0e10cSrcweir 					bFound  = sal_True;
195cdf0e10cSrcweir 					nPortEnd = nStrLen - 1;
196cdf0e10cSrcweir 				}
197cdf0e10cSrcweir 
198cdf0e10cSrcweir                 if(bFound ||(eFoundType == svtools::HTMLCOMMENT))
199cdf0e10cSrcweir 				{
200cdf0e10cSrcweir                     SwTextPortion aTextPortion;
201cdf0e10cSrcweir                     aTextPortion.nLine = 0;
202cdf0e10cSrcweir                     aTextPortion.nStart = nPortStart + 1;
203cdf0e10cSrcweir                     aTextPortion.nEnd = nPortEnd;
204cdf0e10cSrcweir                     aTextPortion.eType = eFoundType;
205cdf0e10cSrcweir                     aPortionList.push_back( aTextPortion );
206cdf0e10cSrcweir                     nInsert++;
207cdf0e10cSrcweir                     eFoundType = svtools::HTMLUNKNOWN;
208cdf0e10cSrcweir 				}
209cdf0e10cSrcweir 
210cdf0e10cSrcweir 			}
211cdf0e10cSrcweir 		}
212cdf0e10cSrcweir 		nActPos++;
213cdf0e10cSrcweir 	}
214cdf0e10cSrcweir 	if(nInsert && nPortEnd < nActPos - 1)
215cdf0e10cSrcweir 	{
216cdf0e10cSrcweir 		aText.nLine = 0;
217cdf0e10cSrcweir 		aText.nStart = nPortEnd + 1;
218cdf0e10cSrcweir 		aText.nEnd = nActPos - 1;
219cdf0e10cSrcweir         aText.eType = svtools::HTMLUNKNOWN;
220cdf0e10cSrcweir 		aPortionList.push_back( aText );
221cdf0e10cSrcweir         nInsert++;
222cdf0e10cSrcweir 	}
223cdf0e10cSrcweir }
224cdf0e10cSrcweir 
225cdf0e10cSrcweir /*--------------------------------------------------------------------
226cdf0e10cSrcweir 	Beschreibung:
227cdf0e10cSrcweir  --------------------------------------------------------------------*/
228cdf0e10cSrcweir 
229cdf0e10cSrcweir 
SwSrcEditWindow(Window * pParent,SwSrcView * pParentView)230cdf0e10cSrcweir SwSrcEditWindow::SwSrcEditWindow( Window* pParent, SwSrcView* pParentView ) :
231cdf0e10cSrcweir 	Window( pParent, WB_BORDER|WB_CLIPCHILDREN ),
232cdf0e10cSrcweir 
233cdf0e10cSrcweir     pTextEngine(0),
234cdf0e10cSrcweir 
235cdf0e10cSrcweir     pOutWin(0),
236cdf0e10cSrcweir     pHScrollbar(0),
237cdf0e10cSrcweir 	pVScrollbar(0),
238cdf0e10cSrcweir 
239cdf0e10cSrcweir     pSrcView(pParentView),
240cdf0e10cSrcweir     pSourceViewConfig(new utl::SourceViewConfig),
241cdf0e10cSrcweir 
242cdf0e10cSrcweir 	nCurTextWidth(0),
243cdf0e10cSrcweir     nStartLine(USHRT_MAX),
244cdf0e10cSrcweir     eSourceEncoding(gsl_getSystemTextEncoding()),
245cdf0e10cSrcweir 	bDoSyntaxHighlight(sal_True),
246cdf0e10cSrcweir     bHighlighting(sal_False)
247cdf0e10cSrcweir {
248cdf0e10cSrcweir 	SetHelpId(HID_SOURCE_EDITWIN);
249cdf0e10cSrcweir 	CreateTextEngine();
250cdf0e10cSrcweir     pSourceViewConfig->AddListener(this);
251cdf0e10cSrcweir }
252cdf0e10cSrcweir /*--------------------------------------------------------------------
253cdf0e10cSrcweir 	Beschreibung:
254cdf0e10cSrcweir  --------------------------------------------------------------------*/
~SwSrcEditWindow()255cdf0e10cSrcweir  SwSrcEditWindow::~SwSrcEditWindow()
256cdf0e10cSrcweir {
257cdf0e10cSrcweir     pSourceViewConfig->RemoveListener(this);
258cdf0e10cSrcweir     delete pSourceViewConfig;
259cdf0e10cSrcweir     aSyntaxIdleTimer.Stop();
260cdf0e10cSrcweir 	if ( pTextEngine )
261cdf0e10cSrcweir 	{
262cdf0e10cSrcweir 		EndListening( *pTextEngine );
263cdf0e10cSrcweir 		pTextEngine->RemoveView( pTextView );
264cdf0e10cSrcweir 
265cdf0e10cSrcweir 		delete pHScrollbar;
266cdf0e10cSrcweir 		delete pVScrollbar;
267cdf0e10cSrcweir 
268cdf0e10cSrcweir 		delete pTextView;
269cdf0e10cSrcweir 		delete pTextEngine;
270cdf0e10cSrcweir 	}
271cdf0e10cSrcweir 	delete pOutWin;
272cdf0e10cSrcweir }
273cdf0e10cSrcweir 
274cdf0e10cSrcweir /*--------------------------------------------------------------------
275cdf0e10cSrcweir 	Beschreibung:
276cdf0e10cSrcweir  --------------------------------------------------------------------*/
277cdf0e10cSrcweir 
DataChanged(const DataChangedEvent & rDCEvt)278cdf0e10cSrcweir void SwSrcEditWindow::DataChanged( const DataChangedEvent& rDCEvt )
279cdf0e10cSrcweir {
280cdf0e10cSrcweir 	Window::DataChanged( rDCEvt );
281cdf0e10cSrcweir 
282cdf0e10cSrcweir 	switch ( rDCEvt.GetType() )
283cdf0e10cSrcweir 	{
284cdf0e10cSrcweir 	case DATACHANGED_SETTINGS:
285cdf0e10cSrcweir 		// ScrollBars neu anordnen bzw. Resize ausloesen, da sich
286cdf0e10cSrcweir 		// ScrollBar-Groesse geaendert haben kann. Dazu muss dann im
287cdf0e10cSrcweir 		// Resize-Handler aber auch die Groesse der ScrollBars aus
288cdf0e10cSrcweir 		// den Settings abgefragt werden.
289cdf0e10cSrcweir 		if( rDCEvt.GetFlags() & SETTINGS_STYLE )
290cdf0e10cSrcweir 			Resize();
291cdf0e10cSrcweir 		break;
292cdf0e10cSrcweir 	}
293cdf0e10cSrcweir }
294cdf0e10cSrcweir 
Resize()295cdf0e10cSrcweir void  SwSrcEditWindow::Resize()
296cdf0e10cSrcweir {
297cdf0e10cSrcweir 	// ScrollBars, etc. passiert in Adjust...
298cdf0e10cSrcweir 	if ( pTextView )
299cdf0e10cSrcweir 	{
300cdf0e10cSrcweir 		long nVisY = pTextView->GetStartDocPos().Y();
301cdf0e10cSrcweir 		pTextView->ShowCursor();
302cdf0e10cSrcweir 		Size aOutSz( GetOutputSizePixel() );
303cdf0e10cSrcweir 		long nMaxVisAreaStart = pTextView->GetTextEngine()->GetTextHeight() - aOutSz.Height();
304cdf0e10cSrcweir 		if ( nMaxVisAreaStart < 0 )
305cdf0e10cSrcweir 			nMaxVisAreaStart = 0;
306cdf0e10cSrcweir 		if ( pTextView->GetStartDocPos().Y() > nMaxVisAreaStart )
307cdf0e10cSrcweir 		{
308cdf0e10cSrcweir 			Point aStartDocPos( pTextView->GetStartDocPos() );
309cdf0e10cSrcweir 			aStartDocPos.Y() = nMaxVisAreaStart;
310cdf0e10cSrcweir 			pTextView->SetStartDocPos( aStartDocPos );
311cdf0e10cSrcweir 			pTextView->ShowCursor();
312cdf0e10cSrcweir 		}
313cdf0e10cSrcweir         long nScrollStd = GetSettings().GetStyleSettings().GetScrollBarSize();
314cdf0e10cSrcweir 		Size aScrollSz(aOutSz.Width() - nScrollStd, nScrollStd );
315cdf0e10cSrcweir 		Point aScrollPos(0, aOutSz.Height() - nScrollStd);
316cdf0e10cSrcweir 
317cdf0e10cSrcweir 		pHScrollbar->SetPosSizePixel( aScrollPos, aScrollSz);
318cdf0e10cSrcweir 
319cdf0e10cSrcweir 		aScrollSz.Width() = aScrollSz.Height();
320cdf0e10cSrcweir 		aScrollSz.Height() = aOutSz.Height();
321cdf0e10cSrcweir 		aScrollPos = Point(aOutSz.Width() - nScrollStd, 0);
322cdf0e10cSrcweir 
323cdf0e10cSrcweir 		pVScrollbar->SetPosSizePixel( aScrollPos, aScrollSz);
324cdf0e10cSrcweir 		aOutSz.Width() 	-= nScrollStd;
325cdf0e10cSrcweir 		aOutSz.Height() 	-= nScrollStd;
326cdf0e10cSrcweir 		pOutWin->SetOutputSizePixel(aOutSz);
327cdf0e10cSrcweir         InitScrollBars();
328cdf0e10cSrcweir 
329cdf0e10cSrcweir         // Zeile im ersten Resize setzen
330cdf0e10cSrcweir 		if(USHRT_MAX != nStartLine)
331cdf0e10cSrcweir 		{
332cdf0e10cSrcweir 			if(nStartLine < pTextEngine->GetParagraphCount())
333cdf0e10cSrcweir 			{
334cdf0e10cSrcweir 				TextSelection aSel(TextPaM( nStartLine, 0 ), TextPaM( nStartLine, 0x0 ));
335cdf0e10cSrcweir 				pTextView->SetSelection(aSel);
336cdf0e10cSrcweir 				pTextView->ShowCursor();
337cdf0e10cSrcweir 			}
338cdf0e10cSrcweir 			nStartLine = USHRT_MAX;
339cdf0e10cSrcweir 		}
340cdf0e10cSrcweir 
341cdf0e10cSrcweir 		if ( nVisY != pTextView->GetStartDocPos().Y() )
342cdf0e10cSrcweir 			Invalidate();
343cdf0e10cSrcweir 	}
344cdf0e10cSrcweir 
345cdf0e10cSrcweir }
346cdf0e10cSrcweir 
347cdf0e10cSrcweir /*--------------------------------------------------------------------
348cdf0e10cSrcweir 	Beschreibung:
349cdf0e10cSrcweir  --------------------------------------------------------------------*/
350cdf0e10cSrcweir 
DataChanged(const DataChangedEvent & rDCEvt)351cdf0e10cSrcweir void TextViewOutWin::DataChanged( const DataChangedEvent& rDCEvt )
352cdf0e10cSrcweir {
353cdf0e10cSrcweir 	Window::DataChanged( rDCEvt );
354cdf0e10cSrcweir 
355cdf0e10cSrcweir 	switch( rDCEvt.GetType() )
356cdf0e10cSrcweir 	{
357cdf0e10cSrcweir 	case DATACHANGED_SETTINGS:
358cdf0e10cSrcweir 		// den Settings abgefragt werden.
359cdf0e10cSrcweir 		if( rDCEvt.GetFlags() & SETTINGS_STYLE )
360cdf0e10cSrcweir 		{
361cdf0e10cSrcweir 			const Color &rCol = GetSettings().GetStyleSettings().GetWindowColor();
362cdf0e10cSrcweir 			SetBackground( rCol );
363cdf0e10cSrcweir 			Font aFont( pTextView->GetTextEngine()->GetFont() );
364cdf0e10cSrcweir 			aFont.SetFillColor( rCol );
365cdf0e10cSrcweir 			pTextView->GetTextEngine()->SetFont( aFont );
366cdf0e10cSrcweir 		}
367cdf0e10cSrcweir 		break;
368cdf0e10cSrcweir 	}
369cdf0e10cSrcweir }
370cdf0e10cSrcweir 
MouseMove(const MouseEvent & rEvt)371cdf0e10cSrcweir void  TextViewOutWin::MouseMove( const MouseEvent &rEvt )
372cdf0e10cSrcweir {
373cdf0e10cSrcweir 	if ( pTextView )
374cdf0e10cSrcweir 		pTextView->MouseMove( rEvt );
375cdf0e10cSrcweir }
376cdf0e10cSrcweir 
377cdf0e10cSrcweir /*--------------------------------------------------------------------
378cdf0e10cSrcweir 	Beschreibung:
379cdf0e10cSrcweir  --------------------------------------------------------------------*/
380cdf0e10cSrcweir 
381cdf0e10cSrcweir 
MouseButtonUp(const MouseEvent & rEvt)382cdf0e10cSrcweir void  TextViewOutWin::MouseButtonUp( const MouseEvent &rEvt )
383cdf0e10cSrcweir {
384cdf0e10cSrcweir 	if ( pTextView )
385cdf0e10cSrcweir 	{
386cdf0e10cSrcweir 		pTextView->MouseButtonUp( rEvt );
387cdf0e10cSrcweir 		SfxBindings& rBindings = ((SwSrcEditWindow*)GetParent())->GetSrcView()->GetViewFrame()->GetBindings();
388cdf0e10cSrcweir 		rBindings.Invalidate( SID_TABLE_CELL );
389cdf0e10cSrcweir 		rBindings.Invalidate( SID_CUT );
390cdf0e10cSrcweir 		rBindings.Invalidate( SID_COPY );
391cdf0e10cSrcweir 	}
392cdf0e10cSrcweir }
393cdf0e10cSrcweir 
394cdf0e10cSrcweir /*--------------------------------------------------------------------
395cdf0e10cSrcweir 	Beschreibung:
396cdf0e10cSrcweir  --------------------------------------------------------------------*/
397cdf0e10cSrcweir 
398cdf0e10cSrcweir 
MouseButtonDown(const MouseEvent & rEvt)399cdf0e10cSrcweir void  TextViewOutWin::MouseButtonDown( const MouseEvent &rEvt )
400cdf0e10cSrcweir {
401cdf0e10cSrcweir 	GrabFocus();
402cdf0e10cSrcweir 	if ( pTextView )
403cdf0e10cSrcweir 		pTextView->MouseButtonDown( rEvt );
404cdf0e10cSrcweir }
405cdf0e10cSrcweir 
406cdf0e10cSrcweir /*--------------------------------------------------------------------
407cdf0e10cSrcweir 	Beschreibung:
408cdf0e10cSrcweir  --------------------------------------------------------------------*/
409cdf0e10cSrcweir 
410cdf0e10cSrcweir 
Command(const CommandEvent & rCEvt)411cdf0e10cSrcweir void  TextViewOutWin::Command( const CommandEvent& rCEvt )
412cdf0e10cSrcweir {
413cdf0e10cSrcweir 	switch(rCEvt.GetCommand())
414cdf0e10cSrcweir 	{
415cdf0e10cSrcweir 		case COMMAND_CONTEXTMENU:
416cdf0e10cSrcweir 			((SwSrcEditWindow*)GetParent())->GetSrcView()->GetViewFrame()->
417cdf0e10cSrcweir 				GetDispatcher()->ExecutePopup();
418cdf0e10cSrcweir 		break;
419cdf0e10cSrcweir 		case COMMAND_WHEEL:
420cdf0e10cSrcweir 		case COMMAND_STARTAUTOSCROLL:
421cdf0e10cSrcweir 		case COMMAND_AUTOSCROLL:
422cdf0e10cSrcweir 		{
423cdf0e10cSrcweir 			const CommandWheelData* pWData = rCEvt.GetWheelData();
424cdf0e10cSrcweir 			if( !pWData || COMMAND_WHEEL_ZOOM != pWData->GetMode() )
425cdf0e10cSrcweir 			{
426cdf0e10cSrcweir 				((SwSrcEditWindow*)GetParent())->HandleWheelCommand( rCEvt );
427cdf0e10cSrcweir 			}
428cdf0e10cSrcweir 		}
429cdf0e10cSrcweir 		break;
430cdf0e10cSrcweir 
431cdf0e10cSrcweir 		default:
432cdf0e10cSrcweir 			if ( pTextView )
433cdf0e10cSrcweir 			pTextView->Command( rCEvt );
434cdf0e10cSrcweir 		else
435cdf0e10cSrcweir 			Window::Command(rCEvt);
436cdf0e10cSrcweir 	}
437cdf0e10cSrcweir }
438cdf0e10cSrcweir 
439cdf0e10cSrcweir 
440cdf0e10cSrcweir /*--------------------------------------------------------------------
441cdf0e10cSrcweir 	Beschreibung:
442cdf0e10cSrcweir  --------------------------------------------------------------------*/
443cdf0e10cSrcweir 
444cdf0e10cSrcweir 
KeyInput(const KeyEvent & rKEvt)445cdf0e10cSrcweir void  TextViewOutWin::KeyInput( const KeyEvent& rKEvt )
446cdf0e10cSrcweir {
447cdf0e10cSrcweir 	sal_Bool bDone = sal_False;
448cdf0e10cSrcweir 	SwSrcEditWindow* pSrcEditWin = (SwSrcEditWindow*)GetParent();
449cdf0e10cSrcweir 	sal_Bool bChange = !pSrcEditWin->IsReadonly() || !TextEngine::DoesKeyChangeText( rKEvt );
450cdf0e10cSrcweir 	if(bChange)
451cdf0e10cSrcweir 		bDone = pTextView->KeyInput( rKEvt );
452cdf0e10cSrcweir 
453cdf0e10cSrcweir 	SfxBindings& rBindings = ((SwSrcEditWindow*)GetParent())->GetSrcView()->GetViewFrame()->GetBindings();
454cdf0e10cSrcweir 	if ( !bDone )
455cdf0e10cSrcweir 	{
456cdf0e10cSrcweir 		if ( !SfxViewShell::Current()->KeyInput( rKEvt ) )
457cdf0e10cSrcweir 			Window::KeyInput( rKEvt );
458cdf0e10cSrcweir 	}
459cdf0e10cSrcweir 	else
460cdf0e10cSrcweir 	{
461cdf0e10cSrcweir 		rBindings.Invalidate( SID_TABLE_CELL );
462cdf0e10cSrcweir 		if ( rKEvt.GetKeyCode().GetGroup() == KEYGROUP_CURSOR )
463cdf0e10cSrcweir 			rBindings.Update( SID_BASICIDE_STAT_POS );
464cdf0e10cSrcweir 		if (pSrcEditWin->GetTextEngine()->IsModified() )
465cdf0e10cSrcweir 		{
466cdf0e10cSrcweir 			rBindings.Invalidate( SID_SAVEDOC );
467cdf0e10cSrcweir 			rBindings.Invalidate( SID_DOC_MODIFIED );
468cdf0e10cSrcweir 		}
469cdf0e10cSrcweir 		if( rKEvt.GetKeyCode().GetCode() == KEY_INSERT )
470cdf0e10cSrcweir 			rBindings.Invalidate( SID_ATTR_INSERT );
471cdf0e10cSrcweir 	}
472cdf0e10cSrcweir 
473cdf0e10cSrcweir 	rBindings.Invalidate( SID_CUT );
474cdf0e10cSrcweir 	rBindings.Invalidate( SID_COPY );
475cdf0e10cSrcweir 
476cdf0e10cSrcweir 	SwDocShell* pDocShell = pSrcEditWin->GetSrcView()->GetDocShell();
477cdf0e10cSrcweir 	if(pSrcEditWin->GetTextEngine()->IsModified())
478cdf0e10cSrcweir 	{
479cdf0e10cSrcweir 		pDocShell->SetModified();
480cdf0e10cSrcweir 	}
481cdf0e10cSrcweir }
482cdf0e10cSrcweir 
483cdf0e10cSrcweir /*--------------------------------------------------------------------
484cdf0e10cSrcweir 	Beschreibung:
485cdf0e10cSrcweir  --------------------------------------------------------------------*/
486cdf0e10cSrcweir 
487cdf0e10cSrcweir 
Paint(const Rectangle & rRect)488cdf0e10cSrcweir void  TextViewOutWin::Paint( const Rectangle& rRect )
489cdf0e10cSrcweir {
490cdf0e10cSrcweir 	pTextView->Paint( rRect );
491cdf0e10cSrcweir }
492cdf0e10cSrcweir 
493cdf0e10cSrcweir /*--------------------------------------------------------------------
494cdf0e10cSrcweir 	Beschreibung:
495cdf0e10cSrcweir  --------------------------------------------------------------------*/
496cdf0e10cSrcweir 
497cdf0e10cSrcweir 
CreateTextEngine()498cdf0e10cSrcweir void SwSrcEditWindow::CreateTextEngine()
499cdf0e10cSrcweir {
500cdf0e10cSrcweir 	const Color &rCol = GetSettings().GetStyleSettings().GetWindowColor();
501cdf0e10cSrcweir 	pOutWin = new TextViewOutWin(this, 0);
502cdf0e10cSrcweir 	pOutWin->SetBackground(Wallpaper(rCol));
503cdf0e10cSrcweir 	pOutWin->SetPointer(Pointer(POINTER_TEXT));
504cdf0e10cSrcweir 	pOutWin->Show();
505cdf0e10cSrcweir 
506cdf0e10cSrcweir 	//Scrollbars anlegen
507cdf0e10cSrcweir 	pHScrollbar = new ScrollBar(this, WB_3DLOOK |WB_HSCROLL|WB_DRAG);
508cdf0e10cSrcweir         pHScrollbar->EnableRTL( false ); // #107300# --- RTL --- no mirroring for scrollbars
509cdf0e10cSrcweir 	pHScrollbar->SetScrollHdl(LINK(this, SwSrcEditWindow, ScrollHdl));
510cdf0e10cSrcweir 	pHScrollbar->Show();
511cdf0e10cSrcweir 
512cdf0e10cSrcweir 	pVScrollbar = new ScrollBar(this, WB_3DLOOK |WB_VSCROLL|WB_DRAG);
513cdf0e10cSrcweir         pVScrollbar->EnableRTL( false ); // #107300# --- RTL --- no mirroring for scrollbars
514cdf0e10cSrcweir 	pVScrollbar->SetScrollHdl(LINK(this, SwSrcEditWindow, ScrollHdl));
515cdf0e10cSrcweir 	pHScrollbar->EnableDrag();
516cdf0e10cSrcweir 	pVScrollbar->Show();
517cdf0e10cSrcweir 
518cdf0e10cSrcweir 	pTextEngine = new ExtTextEngine;
519cdf0e10cSrcweir 	pTextView = new ExtTextView( pTextEngine, pOutWin );
520cdf0e10cSrcweir 	pTextView->SetAutoIndentMode(sal_True);
521cdf0e10cSrcweir 	pOutWin->SetTextView(pTextView);
522cdf0e10cSrcweir 
523cdf0e10cSrcweir 	pTextEngine->SetUpdateMode( sal_False );
524cdf0e10cSrcweir 	pTextEngine->InsertView( pTextView );
525cdf0e10cSrcweir 
526cdf0e10cSrcweir 	Font aFont;
527cdf0e10cSrcweir 	aFont.SetTransparent( sal_False );
528cdf0e10cSrcweir 	aFont.SetFillColor( rCol );
529cdf0e10cSrcweir 	SetPointFont( aFont );
530cdf0e10cSrcweir 	aFont = GetFont();
531cdf0e10cSrcweir 	aFont.SetFillColor( rCol );
532cdf0e10cSrcweir 	pOutWin->SetFont( aFont );
533cdf0e10cSrcweir 	pTextEngine->SetFont( aFont );
534cdf0e10cSrcweir 
535cdf0e10cSrcweir     aSyntaxIdleTimer.SetTimeout( SYNTAX_HIGHLIGHT_TIMEOUT );
536cdf0e10cSrcweir 	aSyntaxIdleTimer.SetTimeoutHdl( LINK( this, SwSrcEditWindow, SyntaxTimerHdl ) );
537cdf0e10cSrcweir 
538cdf0e10cSrcweir 	pTextEngine->EnableUndo( sal_True );
539cdf0e10cSrcweir 	pTextEngine->SetUpdateMode( sal_True );
540cdf0e10cSrcweir 
541cdf0e10cSrcweir 	pTextView->ShowCursor( sal_True, sal_True );
542cdf0e10cSrcweir 	InitScrollBars();
543cdf0e10cSrcweir 	StartListening( *pTextEngine );
544cdf0e10cSrcweir 
545cdf0e10cSrcweir 	SfxBindings& rBind = GetSrcView()->GetViewFrame()->GetBindings();
546cdf0e10cSrcweir 	rBind.Invalidate( SID_TABLE_CELL );
547cdf0e10cSrcweir //	rBind.Invalidate( SID_ATTR_CHAR_FONTHEIGHT );
548cdf0e10cSrcweir }
549cdf0e10cSrcweir 
550cdf0e10cSrcweir /*--------------------------------------------------------------------
551cdf0e10cSrcweir 	Beschreibung:
552cdf0e10cSrcweir  --------------------------------------------------------------------*/
553cdf0e10cSrcweir 
554cdf0e10cSrcweir /*--------------------------------------------------------------------
555cdf0e10cSrcweir 	Beschreibung:
556cdf0e10cSrcweir  --------------------------------------------------------------------*/
557cdf0e10cSrcweir 
558cdf0e10cSrcweir 
SetScrollBarRanges()559cdf0e10cSrcweir void SwSrcEditWindow::SetScrollBarRanges()
560cdf0e10cSrcweir {
561cdf0e10cSrcweir 	// Extra-Methode, nicht InitScrollBars, da auch fuer TextEngine-Events.
562cdf0e10cSrcweir 
563cdf0e10cSrcweir 	pHScrollbar->SetRange( Range( 0, nCurTextWidth-1 ) );
564cdf0e10cSrcweir 	pVScrollbar->SetRange( Range(0, pTextEngine->GetTextHeight()-1) );
565cdf0e10cSrcweir }
566cdf0e10cSrcweir 
567cdf0e10cSrcweir /*--------------------------------------------------------------------
568cdf0e10cSrcweir 	Beschreibung:
569cdf0e10cSrcweir  --------------------------------------------------------------------*/
570cdf0e10cSrcweir 
571cdf0e10cSrcweir 
InitScrollBars()572cdf0e10cSrcweir void SwSrcEditWindow::InitScrollBars()
573cdf0e10cSrcweir {
574cdf0e10cSrcweir 	SetScrollBarRanges();
575cdf0e10cSrcweir 
576cdf0e10cSrcweir     Size aOutSz( pOutWin->GetOutputSizePixel() );
577cdf0e10cSrcweir     pVScrollbar->SetVisibleSize( aOutSz.Height() );
578cdf0e10cSrcweir 	pVScrollbar->SetPageSize(  aOutSz.Height() * 8 / 10 );
579cdf0e10cSrcweir 	pVScrollbar->SetLineSize( pOutWin->GetTextHeight() );
580cdf0e10cSrcweir 	pVScrollbar->SetThumbPos( pTextView->GetStartDocPos().Y() );
581cdf0e10cSrcweir 	pHScrollbar->SetVisibleSize( aOutSz.Width() );
582cdf0e10cSrcweir 	pHScrollbar->SetPageSize( aOutSz.Width() * 8 / 10 );
583cdf0e10cSrcweir 	pHScrollbar->SetLineSize( pOutWin->GetTextWidth( 'x' ) );
584cdf0e10cSrcweir 	pHScrollbar->SetThumbPos( pTextView->GetStartDocPos().X() );
585cdf0e10cSrcweir 
586cdf0e10cSrcweir }
587cdf0e10cSrcweir 
588cdf0e10cSrcweir /*--------------------------------------------------------------------
589cdf0e10cSrcweir 	Beschreibung:
590cdf0e10cSrcweir  --------------------------------------------------------------------*/
591cdf0e10cSrcweir 
592cdf0e10cSrcweir 
IMPL_LINK(SwSrcEditWindow,ScrollHdl,ScrollBar *,pScroll)593cdf0e10cSrcweir IMPL_LINK(SwSrcEditWindow, ScrollHdl, ScrollBar*, pScroll)
594cdf0e10cSrcweir {
595cdf0e10cSrcweir 	if(pScroll == pVScrollbar)
596cdf0e10cSrcweir 	{
597cdf0e10cSrcweir 		long nDiff = pTextView->GetStartDocPos().Y() - pScroll->GetThumbPos();
598cdf0e10cSrcweir 		GetTextView()->Scroll( 0, nDiff );
599cdf0e10cSrcweir 		pTextView->ShowCursor( sal_False, sal_True );
600cdf0e10cSrcweir 		pScroll->SetThumbPos( pTextView->GetStartDocPos().Y() );
601cdf0e10cSrcweir 	}
602cdf0e10cSrcweir 	else
603cdf0e10cSrcweir 	{
604cdf0e10cSrcweir 		long nDiff = pTextView->GetStartDocPos().X() - pScroll->GetThumbPos();
605cdf0e10cSrcweir 		GetTextView()->Scroll( nDiff, 0 );
606cdf0e10cSrcweir 		pTextView->ShowCursor( sal_False, sal_True );
607cdf0e10cSrcweir 		pScroll->SetThumbPos( pTextView->GetStartDocPos().X() );
608cdf0e10cSrcweir 	}
609cdf0e10cSrcweir 	GetSrcView()->GetViewFrame()->GetBindings().Invalidate( SID_TABLE_CELL );
610cdf0e10cSrcweir 	return 0;
611cdf0e10cSrcweir }
612cdf0e10cSrcweir 
613cdf0e10cSrcweir /*-----------------15.01.97 09.22-------------------
614cdf0e10cSrcweir 
615cdf0e10cSrcweir --------------------------------------------------*/
616cdf0e10cSrcweir 
IMPL_LINK(SwSrcEditWindow,SyntaxTimerHdl,Timer *,pTimer)617cdf0e10cSrcweir IMPL_LINK( SwSrcEditWindow, SyntaxTimerHdl, Timer *, pTimer )
618cdf0e10cSrcweir {
619cdf0e10cSrcweir     Time aSyntaxCheckStart;
620cdf0e10cSrcweir     DBG_ASSERT( pTextView, "Noch keine View, aber Syntax-Highlight ?!" );
621cdf0e10cSrcweir 	// pTextEngine->SetUpdateMode( sal_False );
622cdf0e10cSrcweir 
623cdf0e10cSrcweir 	bHighlighting = sal_True;
624*7a980842SDamjanJovanovic 	sal_uInt32 nLine;
625cdf0e10cSrcweir 	sal_uInt16 nCount  = 0;
626cdf0e10cSrcweir 	// zuerst wird der Bereich um dem Cursor bearbeitet
627cdf0e10cSrcweir 	TextSelection aSel = pTextView->GetSelection();
628*7a980842SDamjanJovanovic     sal_uInt32 nCur = aSel.GetStart().GetPara();
629cdf0e10cSrcweir 	if(nCur > 40)
630cdf0e10cSrcweir 		nCur -= 40;
631cdf0e10cSrcweir 	else
632cdf0e10cSrcweir 		nCur = 0;
633cdf0e10cSrcweir 	if(aSyntaxLineTable.Count())
634cdf0e10cSrcweir 		for(sal_uInt16 i = 0; i < 80 && nCount < 40; i++, nCur++)
635cdf0e10cSrcweir 		{
636cdf0e10cSrcweir 			void * p = aSyntaxLineTable.Get(nCur);
637cdf0e10cSrcweir 			if(p)
638cdf0e10cSrcweir 			{
639cdf0e10cSrcweir 				DoSyntaxHighlight( nCur );
640cdf0e10cSrcweir 				aSyntaxLineTable.Remove( nCur );
641cdf0e10cSrcweir 				nCount++;
642cdf0e10cSrcweir                 if(!aSyntaxLineTable.Count())
643cdf0e10cSrcweir                     break;
644cdf0e10cSrcweir                 if((Time().GetTime() - aSyntaxCheckStart.GetTime()) > MAX_HIGHLIGHTTIME )
645cdf0e10cSrcweir                 {
646cdf0e10cSrcweir                     pTimer->SetTimeout( 2 * SYNTAX_HIGHLIGHT_TIMEOUT );
647cdf0e10cSrcweir                     break;
648cdf0e10cSrcweir                 }
649cdf0e10cSrcweir             }
650cdf0e10cSrcweir 		}
651cdf0e10cSrcweir 
652cdf0e10cSrcweir 	// wenn dann noch etwas frei ist, wird von Beginn an weitergearbeitet
653cdf0e10cSrcweir 	void* p = aSyntaxLineTable.First();
654cdf0e10cSrcweir 	while ( p && nCount < MAX_SYNTAX_HIGHLIGHT)
655cdf0e10cSrcweir 	{
656*7a980842SDamjanJovanovic 		nLine = (sal_uInt32)aSyntaxLineTable.GetCurKey();
657cdf0e10cSrcweir 		DoSyntaxHighlight( nLine );
658cdf0e10cSrcweir 		p = aSyntaxLineTable.Next();
659*7a980842SDamjanJovanovic         aSyntaxLineTable.Remove(nLine);
660cdf0e10cSrcweir 		nCount ++;
661cdf0e10cSrcweir         if(Time().GetTime() - aSyntaxCheckStart.GetTime() > MAX_HIGHLIGHTTIME)
662cdf0e10cSrcweir         {
663cdf0e10cSrcweir             pTimer->SetTimeout( 2 * SYNTAX_HIGHLIGHT_TIMEOUT );
664cdf0e10cSrcweir             break;
665cdf0e10cSrcweir         }
666cdf0e10cSrcweir 	}
667cdf0e10cSrcweir 	// os: #43050# hier wird ein TextView-Problem umpopelt:
668cdf0e10cSrcweir 	// waehrend des Highlightings funktionierte das Scrolling nicht
669cdf0e10cSrcweir 	/* MT: Shouldn't be a oproblem any more, using IdeFormatter in Insert/RemoveAttrib now.
670cdf0e10cSrcweir 
671cdf0e10cSrcweir     	TextView* pTmp = pTextEngine->GetActiveView();
672cdf0e10cSrcweir     	pTextEngine->SetActiveView(0);
673cdf0e10cSrcweir     	// pTextEngine->SetUpdateMode( sal_True );
674cdf0e10cSrcweir     	pTextEngine->SetActiveView(pTmp);
675cdf0e10cSrcweir     	pTextView->ShowCursor(sal_False, sal_False);
676cdf0e10cSrcweir     */
677cdf0e10cSrcweir 
678cdf0e10cSrcweir 	if(aSyntaxLineTable.Count() && !pTimer->IsActive())
679cdf0e10cSrcweir 		pTimer->Start();
680cdf0e10cSrcweir 	// SyntaxTimerHdl wird gerufen, wenn Text-Aenderung
681cdf0e10cSrcweir 	// => gute Gelegenheit, Textbreite zu ermitteln!
682cdf0e10cSrcweir 	long nPrevTextWidth = nCurTextWidth;
683cdf0e10cSrcweir 	nCurTextWidth = pTextEngine->CalcTextWidth() + 25;	// kleine Toleranz
684cdf0e10cSrcweir 	if ( nCurTextWidth != nPrevTextWidth )
685cdf0e10cSrcweir 		SetScrollBarRanges();
686cdf0e10cSrcweir 	bHighlighting = sal_False;
687cdf0e10cSrcweir 
688cdf0e10cSrcweir     return 0;
689cdf0e10cSrcweir }
690cdf0e10cSrcweir /*-----------------15.01.97 10.01-------------------
691cdf0e10cSrcweir 
692cdf0e10cSrcweir --------------------------------------------------*/
693cdf0e10cSrcweir 
DoSyntaxHighlight(sal_uInt32 nPara)694*7a980842SDamjanJovanovic void SwSrcEditWindow::DoSyntaxHighlight( sal_uInt32 nPara )
695cdf0e10cSrcweir {
696cdf0e10cSrcweir 	// Durch das DelayedSyntaxHighlight kann es passieren,
697cdf0e10cSrcweir 	// dass die Zeile nicht mehr existiert!
698cdf0e10cSrcweir 	if ( nPara < pTextEngine->GetParagraphCount() )
699cdf0e10cSrcweir 	{
700cdf0e10cSrcweir 		sal_Bool bTempModified = IsModified();
701cdf0e10cSrcweir 		pTextEngine->RemoveAttribs( nPara, (sal_Bool)sal_True );
702cdf0e10cSrcweir 		String aSource( pTextEngine->GetText( nPara ) );
703cdf0e10cSrcweir 		pTextEngine->SetUpdateMode( sal_False );
704cdf0e10cSrcweir 		ImpDoHighlight( aSource, nPara );
705cdf0e10cSrcweir 		// os: #43050# hier wird ein TextView-Problem umpopelt:
706cdf0e10cSrcweir 		// waehrend des Highlightings funktionierte das Scrolling nicht
707cdf0e10cSrcweir 		TextView* pTmp = pTextEngine->GetActiveView();
708cdf0e10cSrcweir 		pTmp->SetAutoScroll(sal_False);
709cdf0e10cSrcweir 		pTextEngine->SetActiveView(0);
710cdf0e10cSrcweir 		pTextEngine->SetUpdateMode( sal_True );
711cdf0e10cSrcweir 		pTextEngine->SetActiveView(pTmp);
712cdf0e10cSrcweir 		// Bug 72887 show the cursor
713cdf0e10cSrcweir 		pTmp->SetAutoScroll(sal_True);
714cdf0e10cSrcweir 		pTmp->ShowCursor( sal_False/*pTmp->IsAutoScroll()*/ );
715cdf0e10cSrcweir 
716cdf0e10cSrcweir 		if(!bTempModified)
717cdf0e10cSrcweir 			ClearModifyFlag();
718cdf0e10cSrcweir 	}
719cdf0e10cSrcweir }
720cdf0e10cSrcweir 
721cdf0e10cSrcweir /*-----------------15.01.97 09.49-------------------
722cdf0e10cSrcweir 
723cdf0e10cSrcweir --------------------------------------------------*/
724cdf0e10cSrcweir 
DoDelayedSyntaxHighlight(sal_uInt32 nPara)725*7a980842SDamjanJovanovic void SwSrcEditWindow::DoDelayedSyntaxHighlight( sal_uInt32 nPara )
726cdf0e10cSrcweir {
727cdf0e10cSrcweir 	if ( !bHighlighting && bDoSyntaxHighlight )
728cdf0e10cSrcweir 	{
729cdf0e10cSrcweir 		aSyntaxLineTable.Insert( nPara, (void*)(sal_uInt16)1 );
730cdf0e10cSrcweir 		aSyntaxIdleTimer.Start();
731cdf0e10cSrcweir 	}
732cdf0e10cSrcweir }
733cdf0e10cSrcweir 
734cdf0e10cSrcweir /*-----------------15.01.97 11.32-------------------
735cdf0e10cSrcweir 
736cdf0e10cSrcweir --------------------------------------------------*/
737cdf0e10cSrcweir 
ImpDoHighlight(const String & rSource,sal_uInt32 nLineOff)738*7a980842SDamjanJovanovic void SwSrcEditWindow::ImpDoHighlight( const String& rSource, sal_uInt32 nLineOff )
739cdf0e10cSrcweir {
740cdf0e10cSrcweir 	SwTextPortions aPortionList;
741cdf0e10cSrcweir 	lcl_Highlight(rSource, aPortionList);
742cdf0e10cSrcweir 
743cdf0e10cSrcweir 	size_t nCount = aPortionList.size();
744cdf0e10cSrcweir 	if ( !nCount )
745cdf0e10cSrcweir 		return;
746cdf0e10cSrcweir 
747cdf0e10cSrcweir 	SwTextPortion& rLast = aPortionList[nCount-1];
748cdf0e10cSrcweir 	if ( rLast.nStart > rLast.nEnd ) 	// Nur bis Bug von MD behoeben
749cdf0e10cSrcweir 	{
750cdf0e10cSrcweir 		nCount--;
751cdf0e10cSrcweir 		aPortionList.pop_back();
752cdf0e10cSrcweir 		if ( !nCount )
753cdf0e10cSrcweir 			return;
754cdf0e10cSrcweir 	}
755cdf0e10cSrcweir 
756cdf0e10cSrcweir 	// Evtl. Optimieren:
757cdf0e10cSrcweir 	// Wenn haufig gleiche Farbe, dazwischen Blank ohne Farbe,
758cdf0e10cSrcweir 	// ggf. zusammenfassen, oder zumindest das Blank,
759cdf0e10cSrcweir 	// damit weniger Attribute
760cdf0e10cSrcweir 	sal_Bool bOptimizeHighlight = sal_True; // war in der BasicIDE static
761cdf0e10cSrcweir 	if ( bOptimizeHighlight )
762cdf0e10cSrcweir 	{
763cdf0e10cSrcweir 		// Es muessen nur die Blanks und Tabs mit attributiert werden.
764cdf0e10cSrcweir 		// Wenn zwei gleiche Attribute hintereinander eingestellt werden,
765cdf0e10cSrcweir 		// optimiert das die TextEngine.
766cdf0e10cSrcweir 		sal_uInt16 nLastEnd = 0;
767cdf0e10cSrcweir 
768cdf0e10cSrcweir #ifdef DBG_UTIL
769*7a980842SDamjanJovanovic         sal_uInt32 nLine = aPortionList[0].nLine;
770cdf0e10cSrcweir #endif
771cdf0e10cSrcweir 		for ( size_t i = 0; i < nCount; i++ )
772cdf0e10cSrcweir 		{
773cdf0e10cSrcweir 			SwTextPortion& r = aPortionList[i];
774cdf0e10cSrcweir 			DBG_ASSERT( r.nLine == nLine, "doch mehrere Zeilen ?" );
775cdf0e10cSrcweir 			if ( r.nStart > r.nEnd ) 	// Nur bis Bug von MD behoeben
776cdf0e10cSrcweir 				continue;
777cdf0e10cSrcweir 
778cdf0e10cSrcweir 			if ( r.nStart > nLastEnd )
779cdf0e10cSrcweir 			{
780cdf0e10cSrcweir 				// Kann ich mich drauf verlassen, dass alle ausser
781cdf0e10cSrcweir 				// Blank und Tab gehighlightet wird ?!
782cdf0e10cSrcweir 				r.nStart = nLastEnd;
783cdf0e10cSrcweir 			}
784cdf0e10cSrcweir 			nLastEnd = r.nEnd+1;
785cdf0e10cSrcweir 			if ( ( i == (nCount-1) ) && ( r.nEnd < rSource.Len() ) )
786cdf0e10cSrcweir 				r.nEnd = rSource.Len();
787cdf0e10cSrcweir 		}
788cdf0e10cSrcweir 	}
789cdf0e10cSrcweir 
790cdf0e10cSrcweir 	for ( size_t i = 0; i < aPortionList.size(); i++ )
791cdf0e10cSrcweir 	{
792cdf0e10cSrcweir 		SwTextPortion& r = aPortionList[i];
793cdf0e10cSrcweir 		if ( r.nStart > r.nEnd ) 	// Nur bis Bug von MD behoeben
794cdf0e10cSrcweir 			continue;
795cdf0e10cSrcweir         if(r.eType !=  svtools::HTMLSGML    &&
796cdf0e10cSrcweir             r.eType != svtools::HTMLCOMMENT &&
797cdf0e10cSrcweir             r.eType != svtools::HTMLKEYWORD &&
798cdf0e10cSrcweir             r.eType != svtools::HTMLUNKNOWN)
799cdf0e10cSrcweir                 r.eType = svtools::HTMLUNKNOWN;
800cdf0e10cSrcweir         Color aColor((ColorData)SW_MOD()->GetColorConfig().GetColorValue((svtools::ColorConfigEntry)r.eType).nColor);
801*7a980842SDamjanJovanovic         sal_uInt32 nLine = nLineOff+r.nLine; //
802cdf0e10cSrcweir         pTextEngine->SetAttrib( TextAttribFontColor( aColor ), nLine, r.nStart, r.nEnd+1, sal_True );
803cdf0e10cSrcweir 	}
804cdf0e10cSrcweir }
805cdf0e10cSrcweir 
806cdf0e10cSrcweir /*-----------------30.06.97 09:12-------------------
807cdf0e10cSrcweir 
808cdf0e10cSrcweir --------------------------------------------------*/
809cdf0e10cSrcweir 
Notify(SfxBroadcaster &,const SfxHint & rHint)810cdf0e10cSrcweir void SwSrcEditWindow::Notify( SfxBroadcaster& /*rBC*/, const SfxHint& rHint )
811cdf0e10cSrcweir {
812cdf0e10cSrcweir 	if ( rHint.ISA( TextHint ) )
813cdf0e10cSrcweir 	{
814cdf0e10cSrcweir 		const TextHint& rTextHint = (const TextHint&)rHint;
815cdf0e10cSrcweir 		if( rTextHint.GetId() == TEXT_HINT_VIEWSCROLLED )
816cdf0e10cSrcweir 		{
817cdf0e10cSrcweir 			pHScrollbar->SetThumbPos( pTextView->GetStartDocPos().X() );
818cdf0e10cSrcweir 			pVScrollbar->SetThumbPos( pTextView->GetStartDocPos().Y() );
819cdf0e10cSrcweir 		}
820cdf0e10cSrcweir 		else if( rTextHint.GetId() == TEXT_HINT_TEXTHEIGHTCHANGED )
821cdf0e10cSrcweir 		{
822cdf0e10cSrcweir 			if ( (long)pTextEngine->GetTextHeight() < pOutWin->GetOutputSizePixel().Height() )
823cdf0e10cSrcweir 				pTextView->Scroll( 0, pTextView->GetStartDocPos().Y() );
824cdf0e10cSrcweir 			pVScrollbar->SetThumbPos( pTextView->GetStartDocPos().Y() );
825cdf0e10cSrcweir 			SetScrollBarRanges();
826cdf0e10cSrcweir 		}
827cdf0e10cSrcweir 		else if( ( rTextHint.GetId() == TEXT_HINT_PARAINSERTED ) ||
828cdf0e10cSrcweir 		         ( rTextHint.GetId() == TEXT_HINT_PARACONTENTCHANGED ) )
829cdf0e10cSrcweir 		{
830*7a980842SDamjanJovanovic             DoDelayedSyntaxHighlight( rTextHint.GetValue() );
831cdf0e10cSrcweir 		}
832cdf0e10cSrcweir 	}
833cdf0e10cSrcweir }
834cdf0e10cSrcweir 
ConfigurationChanged(utl::ConfigurationBroadcaster * pBrdCst,sal_uInt32)835cdf0e10cSrcweir void SwSrcEditWindow::ConfigurationChanged( utl::ConfigurationBroadcaster* pBrdCst, sal_uInt32 )
836cdf0e10cSrcweir {
837cdf0e10cSrcweir     if( pBrdCst == pSourceViewConfig)
838cdf0e10cSrcweir         SetFont();
839cdf0e10cSrcweir }
840cdf0e10cSrcweir 
841cdf0e10cSrcweir /*-----------------30.06.97 13:22-------------------
842cdf0e10cSrcweir 
843cdf0e10cSrcweir --------------------------------------------------*/
844cdf0e10cSrcweir 
Invalidate(sal_uInt16)845cdf0e10cSrcweir void    SwSrcEditWindow::Invalidate(sal_uInt16 )
846cdf0e10cSrcweir {
847cdf0e10cSrcweir 	pOutWin->Invalidate();
848cdf0e10cSrcweir 	Window::Invalidate();
849cdf0e10cSrcweir 
850cdf0e10cSrcweir }
851cdf0e10cSrcweir 
Command(const CommandEvent & rCEvt)852cdf0e10cSrcweir void SwSrcEditWindow::Command( const CommandEvent& rCEvt )
853cdf0e10cSrcweir {
854cdf0e10cSrcweir 	switch(rCEvt.GetCommand())
855cdf0e10cSrcweir 	{
856cdf0e10cSrcweir 		case COMMAND_WHEEL:
857cdf0e10cSrcweir 		case COMMAND_STARTAUTOSCROLL:
858cdf0e10cSrcweir 		case COMMAND_AUTOSCROLL:
859cdf0e10cSrcweir 		{
860cdf0e10cSrcweir 			const CommandWheelData* pWData = rCEvt.GetWheelData();
861cdf0e10cSrcweir 			if( !pWData || COMMAND_WHEEL_ZOOM != pWData->GetMode() )
862cdf0e10cSrcweir 				HandleScrollCommand( rCEvt, pHScrollbar, pVScrollbar );
863cdf0e10cSrcweir 		}
864cdf0e10cSrcweir 		break;
865cdf0e10cSrcweir 		default:
866cdf0e10cSrcweir 			Window::Command(rCEvt);
867cdf0e10cSrcweir 	}
868cdf0e10cSrcweir }
869cdf0e10cSrcweir 
HandleWheelCommand(const CommandEvent & rCEvt)870cdf0e10cSrcweir void SwSrcEditWindow::HandleWheelCommand( const CommandEvent& rCEvt )
871cdf0e10cSrcweir {
872cdf0e10cSrcweir 	pTextView->Command(rCEvt);
873cdf0e10cSrcweir 	HandleScrollCommand( rCEvt, pHScrollbar, pVScrollbar );
874cdf0e10cSrcweir }
875cdf0e10cSrcweir 
GetFocus()876cdf0e10cSrcweir void SwSrcEditWindow::GetFocus()
877cdf0e10cSrcweir {
878cdf0e10cSrcweir 	pOutWin->GrabFocus();
879cdf0e10cSrcweir }
880cdf0e10cSrcweir 
881cdf0e10cSrcweir /*void SwSrcEditWindow::LoseFocus()
882cdf0e10cSrcweir {
883cdf0e10cSrcweir 	Window::LoseFocus();
884cdf0e10cSrcweir //	pOutWin->LoseFocus();
885cdf0e10cSrcweir //	rView.LostFocus();
886cdf0e10cSrcweir } */
887cdf0e10cSrcweir /* -----------------------------29.08.2002 13:21------------------------------
888cdf0e10cSrcweir 
889cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
lcl_GetLanguagesForEncoding(rtl_TextEncoding eEnc,LanguageType aLanguages[])890cdf0e10cSrcweir sal_Bool  lcl_GetLanguagesForEncoding(rtl_TextEncoding eEnc, LanguageType aLanguages[])
891cdf0e10cSrcweir {
892cdf0e10cSrcweir     switch(eEnc)
893cdf0e10cSrcweir     {
894cdf0e10cSrcweir         case RTL_TEXTENCODING_UTF7             :
895cdf0e10cSrcweir         case RTL_TEXTENCODING_UTF8             :
896cdf0e10cSrcweir             // don#t fill - all LANGUAGE_SYSTEM means unicode font has to be used
897cdf0e10cSrcweir         break;
898cdf0e10cSrcweir 
899cdf0e10cSrcweir 
900cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_3:
901cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_1  :
902cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1252     :
903cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_ROMAN :
904cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_850     :
905cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_14 :
906cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_15 :
907cdf0e10cSrcweir             //fill with western languages
908cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_GERMAN;
909cdf0e10cSrcweir             aLanguages[1] = LANGUAGE_FRENCH;
910cdf0e10cSrcweir             aLanguages[2] = LANGUAGE_ITALIAN;
911cdf0e10cSrcweir             aLanguages[3] = LANGUAGE_SPANISH;
912cdf0e10cSrcweir         break;
913cdf0e10cSrcweir 
914cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_865     :
915cdf0e10cSrcweir             //scandinavian
916cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_FINNISH;
917cdf0e10cSrcweir             aLanguages[1] = LANGUAGE_NORWEGIAN;
918cdf0e10cSrcweir             aLanguages[2] = LANGUAGE_SWEDISH;
919cdf0e10cSrcweir             aLanguages[3] = LANGUAGE_DANISH;
920cdf0e10cSrcweir         break;
921cdf0e10cSrcweir 
922cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_10      :
923cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_13      :
924cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_2  :
925cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_852     :
926cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1250     :
927cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_CENTEURO   :
928cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_POLISH;
929cdf0e10cSrcweir             aLanguages[1] = LANGUAGE_CZECH;
930cdf0e10cSrcweir             aLanguages[2] = LANGUAGE_HUNGARIAN;
931cdf0e10cSrcweir             aLanguages[3] = LANGUAGE_SLOVAK;
932cdf0e10cSrcweir         break;
933cdf0e10cSrcweir 
934cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_4  :
935cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_775     :
936cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1257          :
937cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_LATVIAN   ;
938cdf0e10cSrcweir             aLanguages[1] = LANGUAGE_LITHUANIAN;
939cdf0e10cSrcweir             aLanguages[2] = LANGUAGE_ESTONIAN  ;
940cdf0e10cSrcweir         break;
941cdf0e10cSrcweir 
942cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_863       : aLanguages[0] = LANGUAGE_FRENCH_CANADIAN; break;
943cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_FARSI   : aLanguages[0] = LANGUAGE_FARSI; break;
944cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_ROMANIAN:aLanguages[0] = LANGUAGE_ROMANIAN; break;
945cdf0e10cSrcweir 
946cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_861     :
947cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_ICELAND    :
948cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_ICELANDIC;
949cdf0e10cSrcweir         break;
950cdf0e10cSrcweir 
951cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_CROATIAN:aLanguages[0] = LANGUAGE_CROATIAN; break;
952cdf0e10cSrcweir 
953cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_437     :
954cdf0e10cSrcweir         case RTL_TEXTENCODING_ASCII_US    : aLanguages[0] = LANGUAGE_ENGLISH; break;
955cdf0e10cSrcweir 
956cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_862     :
957cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1255     :
958cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_HEBREW     :
959cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_8  :
960cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_HEBREW;
961cdf0e10cSrcweir         break;
962cdf0e10cSrcweir 
963cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_857     :
964cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1254     :
965cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_TURKISH:
966cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_9  :
967cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_TURKISH;
968cdf0e10cSrcweir         break;
969cdf0e10cSrcweir 
970cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_860     :
971cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_PORTUGUESE;
972cdf0e10cSrcweir         break;
973cdf0e10cSrcweir 
974cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_869     :
975cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1253     :
976cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_GREEK :
977cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_7  :
978cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_737     :
979cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_GREEK;
980cdf0e10cSrcweir         break;
981cdf0e10cSrcweir 
982cdf0e10cSrcweir         case RTL_TEXTENCODING_KOI8_R      :
983cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_5  :
984cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_855     :
985cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1251     :
986cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_866     :
987cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_CYRILLIC   :
988cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_RUSSIAN;
989cdf0e10cSrcweir         break;
990cdf0e10cSrcweir 
991cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_UKRAINIAN:
992cdf0e10cSrcweir         case RTL_TEXTENCODING_KOI8_U:
993cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_UKRAINIAN;
994cdf0e10cSrcweir             break;
995cdf0e10cSrcweir 
996cdf0e10cSrcweir         case RTL_TEXTENCODING_IBM_864     :
997cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1256          :
998cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_8859_6  :
999cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_ARABIC :
1000cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_ARABIC_SAUDI_ARABIA;
1001cdf0e10cSrcweir          break;
1002cdf0e10cSrcweir 
1003cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_CHINTRAD   :
1004cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_950           :
1005cdf0e10cSrcweir         case RTL_TEXTENCODING_GBT_12345        :
1006cdf0e10cSrcweir         case RTL_TEXTENCODING_BIG5             :
1007cdf0e10cSrcweir         case RTL_TEXTENCODING_EUC_TW           :
1008cdf0e10cSrcweir         case RTL_TEXTENCODING_BIG5_HKSCS       :
1009cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_CHINESE_TRADITIONAL;
1010cdf0e10cSrcweir         break;
1011cdf0e10cSrcweir 
1012cdf0e10cSrcweir         case RTL_TEXTENCODING_EUC_JP           :
1013cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_2022_JP      :
1014cdf0e10cSrcweir         case RTL_TEXTENCODING_JIS_X_0201       :
1015cdf0e10cSrcweir         case RTL_TEXTENCODING_JIS_X_0208       :
1016cdf0e10cSrcweir         case RTL_TEXTENCODING_JIS_X_0212       :
1017cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_JAPANESE   :
1018cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_932           :
1019cdf0e10cSrcweir         case RTL_TEXTENCODING_SHIFT_JIS        :
1020cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_JAPANESE;
1021cdf0e10cSrcweir         break;
1022cdf0e10cSrcweir 
1023cdf0e10cSrcweir         case RTL_TEXTENCODING_GB_2312          :
1024cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_936           :
1025cdf0e10cSrcweir         case RTL_TEXTENCODING_GBK              :
1026cdf0e10cSrcweir         case RTL_TEXTENCODING_GB_18030         :
1027cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_CHINSIMP   :
1028cdf0e10cSrcweir         case RTL_TEXTENCODING_EUC_CN           :
1029cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_2022_CN      :
1030cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_CHINESE_SIMPLIFIED;
1031cdf0e10cSrcweir         break;
1032cdf0e10cSrcweir 
1033cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_KOREAN     :
1034cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_949           :
1035cdf0e10cSrcweir         case RTL_TEXTENCODING_EUC_KR           :
1036cdf0e10cSrcweir         case RTL_TEXTENCODING_ISO_2022_KR      :
1037cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_1361          :
1038cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_KOREAN;
1039cdf0e10cSrcweir         break;
1040cdf0e10cSrcweir 
1041cdf0e10cSrcweir         case RTL_TEXTENCODING_APPLE_THAI       :
1042cdf0e10cSrcweir         case RTL_TEXTENCODING_MS_874      :
1043cdf0e10cSrcweir         case RTL_TEXTENCODING_TIS_620          :
1044cdf0e10cSrcweir             aLanguages[0] = LANGUAGE_THAI;
1045cdf0e10cSrcweir         break;
1046cdf0e10cSrcweir //        case RTL_TEXTENCODING_SYMBOL      :
1047cdf0e10cSrcweir //        case RTL_TEXTENCODING_DONTKNOW:        :
1048cdf0e10cSrcweir         default: aLanguages[0] = Application::GetSettings().GetUILanguage();
1049cdf0e10cSrcweir     }
1050cdf0e10cSrcweir     return aLanguages[0] != LANGUAGE_SYSTEM;
1051cdf0e10cSrcweir }
SetFont()1052cdf0e10cSrcweir void SwSrcEditWindow::SetFont()
1053cdf0e10cSrcweir {
1054cdf0e10cSrcweir     String sFontName = pSourceViewConfig->GetFontName();
1055cdf0e10cSrcweir     if(!sFontName.Len())
1056cdf0e10cSrcweir     {
1057cdf0e10cSrcweir         LanguageType aLanguages[5] =
1058cdf0e10cSrcweir         {
1059cdf0e10cSrcweir             LANGUAGE_SYSTEM, LANGUAGE_SYSTEM, LANGUAGE_SYSTEM, LANGUAGE_SYSTEM, LANGUAGE_SYSTEM
1060cdf0e10cSrcweir         };
1061cdf0e10cSrcweir         Font aFont;
1062cdf0e10cSrcweir         if(lcl_GetLanguagesForEncoding(eSourceEncoding, aLanguages))
1063cdf0e10cSrcweir         {
1064cdf0e10cSrcweir             //TODO: check for multiple languages
1065cdf0e10cSrcweir             aFont = OutputDevice::GetDefaultFont(DEFAULTFONT_FIXED, aLanguages[0], 0, this);
1066cdf0e10cSrcweir         }
1067cdf0e10cSrcweir         else
1068cdf0e10cSrcweir             aFont = OutputDevice::GetDefaultFont(DEFAULTFONT_SANS_UNICODE,
1069cdf0e10cSrcweir                         Application::GetSettings().GetLanguage(), 0, this);
1070cdf0e10cSrcweir         sFontName = aFont.GetName();
1071cdf0e10cSrcweir     }
1072cdf0e10cSrcweir     const SvxFontListItem* pFontListItem =
1073cdf0e10cSrcweir         (const SvxFontListItem* )pSrcView->GetDocShell()->GetItem( SID_ATTR_CHAR_FONTLIST );
1074cdf0e10cSrcweir 	const FontList*	 pList = pFontListItem->GetFontList();
1075cdf0e10cSrcweir     FontInfo aInfo = pList->Get(sFontName,WEIGHT_NORMAL, ITALIC_NONE);
1076cdf0e10cSrcweir 
1077cdf0e10cSrcweir     const Font& rFont = GetTextEngine()->GetFont();
1078cdf0e10cSrcweir 	Font aFont(aInfo);
1079cdf0e10cSrcweir     Size aSize(rFont.GetSize());
1080cdf0e10cSrcweir     //font height is stored in point and set in twip
1081cdf0e10cSrcweir     aSize.Height() = pSourceViewConfig->GetFontHeight() * 20;
1082cdf0e10cSrcweir     aFont.SetSize(pOutWin->LogicToPixel(aSize, MAP_TWIP));
1083cdf0e10cSrcweir     GetTextEngine()->SetFont( aFont );
1084cdf0e10cSrcweir     pOutWin->SetFont(aFont);
1085cdf0e10cSrcweir }
1086cdf0e10cSrcweir /* -----------------------------29.08.2002 13:47------------------------------
1087cdf0e10cSrcweir 
1088cdf0e10cSrcweir  ---------------------------------------------------------------------------*/
SetTextEncoding(rtl_TextEncoding eEncoding)1089cdf0e10cSrcweir void SwSrcEditWindow::SetTextEncoding(rtl_TextEncoding eEncoding)
1090cdf0e10cSrcweir {
1091cdf0e10cSrcweir     eSourceEncoding = eEncoding;
1092cdf0e10cSrcweir     SetFont();
1093cdf0e10cSrcweir }
1094cdf0e10cSrcweir 
1095