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