xref: /aoo41x/main/svx/workben/edittest.cxx (revision f6e50924)
1 /**************************************************************
2  *
3  * Licensed to the Apache Software Foundation (ASF) under one
4  * or more contributor license agreements.  See the NOTICE file
5  * distributed with this work for additional information
6  * regarding copyright ownership.  The ASF licenses this file
7  * to you under the Apache License, Version 2.0 (the
8  * "License"); you may not use this file except in compliance
9  * with the License.  You may obtain a copy of the License at
10  *
11  *   http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing,
14  * software distributed under the License is distributed on an
15  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
16  * KIND, either express or implied.  See the License for the
17  * specific language governing permissions and limitations
18  * under the License.
19  *
20  *************************************************************/
21 
22 
23 
24 // MARKER(update_precomp.py): autogen include statement, do not remove
25 #include "precompiled_svx.hxx"
26 
27 #include <editeng/editeng.hxx>
28 #include <editeng/eeitem.hxx>
29 #include <editeng/editview.hxx>
30 #include <editeng/editobj.hxx>
31 #include <editeng/editstat.hxx>
32 #include <eerdll.hxx>
33 #include <editeng/flditem.hxx>
34 #include <tools/urlobj.hxx>
35 #include <svx/svxacorr.hxx>
36 #include <tools/fsys.hxx>
37 #include <svx/xpoly.hxx>
38 #include <svtools/filedlg.hxx>
39 
40 #include <vcl/window.hxx>
41 #include <vcl/svapp.hxx>
42 #include <vcl/font.hxx>
43 #include <vcl/sound.hxx>
44 #include <vcl/print.hxx>
45 #include <vcl/toolbox.hxx>
46 #include <vcl/help.hxx>
47 #include <vcl/scrbar.hxx>
48 #include <vcl/wrkwin.hxx>
49 #include <vcl/msgbox.hxx>
50 
51 #include <dialdll.hxx>
52 
53 
54 #define SERVICE_SIMPLEREGISTRY             "com.sun.star.registry.SimpleRegistry"
55 #include <comphelper/processfactory.hxx>
56 #include <comphelper/regpathhelper.hxx>
57 #include <cppuhelper/servicefactory.hxx>
58 #include <cppuhelper/bootstrap.hxx>
59 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
60 #include <com/sun/star/lang/XInitialization.hpp>
61 #include <com/sun/star/registry/XSimpleRegistry.hpp>
62 #include <sfx2/sfxuno.hxx>
63 
64 // SVX
65 #include <editeng/lrspitem.hxx>
66 #include <editeng/shdditem.hxx>
67 #include <editeng/cntritem.hxx>
68 #include <editeng/crsditem.hxx>
69 #include <editeng/udlnitem.hxx>
70 #include <editeng/lspcitem.hxx>
71 #include <editeng/escpitem.hxx>
72 #include <editeng/kernitem.hxx>
73 #include <editeng/akrnitem.hxx>
74 #include <editeng/wrlmitem.hxx>
75 #include <editeng/colritem.hxx>
76 #include <editeng/ulspitem.hxx>
77 #include <editeng/postitem.hxx>
78 #include <editeng/adjitem.hxx>
79 #include <editeng/wghtitem.hxx>
80 #include <editeng/fhgtitem.hxx>
81 #include <editeng/fontitem.hxx>
82 #include <fwdtitem.hxx>
83 
84 // SVTOOLS
85 #include <svl/undo.hxx>
86 #include <svl/itemset.hxx>
87 #include <svl/itempool.hxx>
88 #include <svl/poolitem.hxx>
89 #include <svtools/printdlg.hxx>
90 
91 #include <osl/file.hxx>
92 #include <osl/process.h>
93 #include <rtl/bootstrap.hxx>
94 
95 #define TB_LEFT			 1
96 #define TB_RIGHT		 2
97 #define TB_CENTER		 3
98 #define TB_UNDO			 4
99 #define TB_REDO			 5
100 #define TB_FONT1		 6
101 #define TB_FONT2		 7
102 #define TB_ITALIC		 8
103 #define TB_BOLD			 9
104 #define TB_UNDERLINE	10
105 #define TB_BLACK		11
106 #define TB_GREEN		12
107 #define TB_OPEN			13
108 #define TB_SAVE			14
109 #define TB_SBL			15
110 #define TB_SBSA			16
111 #define TB_LR			17
112 #define TB_DRAW			18
113 #define TB_DEFTAB		19
114 #define TB_OPEN2		20
115 #define TB_SAVE2		21
116 #define TB_STDSEL		33
117 #define TB_MOVE			34
118 #define TB_PARATTR1		35
119 #define TB_ROTATE		38
120 #define TB_RED			43
121 #define TB_FLAT			46
122 #define TB_BINOBJ1		47
123 #define TB_BINOBJ3		49
124 #define TB_BINOBJ4		50
125 #define TB_BINOBJ1b		51
126 #define TB_BINOBJ2b		52
127 #define TB_ATTRIBS		54
128 #define TB_IDLE			55
129 #define TB_BLOCK		56
130 #define TB_CLONEBIN		57
131 #define TB_INSERT		58
132 #define TB_PKERN		59
133 #define TB_KERN			60
134 #define TB_SUPER		61
135 #define TB_SUB			62
136 #define TB_PRINT		63
137 #define TB_FONT			64
138 #define TB_COLORS		65
139 #define TB_WLM			66
140 #define TB_OUTL			67
141 #define TB_INSFLD		68
142 #define TB_UPDFLD		69
143 #define TB_ONLINESPELL  70
144 #define TB_REDLINES		71
145 #define TB_AUTOCORRECT	72
146 #define TB_POLY			73
147 #define TB_HYPH			74
148 
149 // VARS...
150 short nRotation = 0;
151 USHORT nZoom = 100;
152 sal_Bool bURLClicked = sal_False;
153 
154 using namespace ::com::sun::star::connection;
155 using namespace ::vos;
156 using namespace ::rtl;
157 using namespace ::com::sun::star::uno;
158 using namespace ::com::sun::star::registry;
159 using namespace ::com::sun::star::lang;
160 
161 
162 
createApplicationServiceManager()163 Reference< XMultiServiceFactory > createApplicationServiceManager()
164 {
165     Reference< XMultiServiceFactory > xMS;
166 	try
167 	{
168 		Reference< XComponentContext >    xComponentContext = ::cppu::defaultBootstrap_InitialComponentContext();
169         if ( xComponentContext.is() )
170 		    xMS = xMS.query( xComponentContext->getServiceManager() );
171 	}
172 	catch( ::com::sun::star::uno::Exception& )
173 	{
174 	}
175 
176 	return xMS;
177 }
178 
179 // --- class EditApp -------------------------------------------------
180 
181 SV_DECL_PTRARR_DEL( StringList, String*, 0, 4 );
182 SV_IMPL_PTRARR( StringList, String* );
183 StringList aSimpleHistory;
184 
185 class EditApp : public Application
186 {
187 public:
188 	virtual void Main();
189 };
190 
191 class MyEditEngine : public EditEngine
192 {
193 public:
MyEditEngine(SfxItemPool * pPool)194 	MyEditEngine( SfxItemPool* pPool ) : EditEngine( pPool ) { ; }
195 	virtual String	CalcFieldValue( const SvxFieldItem& rField, USHORT nPara, USHORT nPos, Color*& rTxtColor, Color*& rFldColor );
196 	virtual void	FieldClicked( const SvxFieldItem& rField, USHORT nPara, USHORT nPos );
197 	virtual void	FieldSelected( const SvxFieldItem& rField, USHORT nPara, USHORT nPos );
198 };
199 
CalcFieldValue(const SvxFieldItem & rField,USHORT nPara,USHORT nPos,Color * & rpTxtColor,Color * & rpFldColor)200 XubString __EXPORT MyEditEngine::CalcFieldValue( const SvxFieldItem& rField, USHORT nPara, USHORT nPos, Color*& rpTxtColor, Color*& rpFldColor )
201 {
202 	const SvxFieldData* pField = rField.GetField();
203 	if ( !pField )
204 		return String( RTL_CONSTASCII_USTRINGPARAM( "<Empty>" ) );
205 
206 	if ( pField->ISA( SvxDateField ) )
207 		return ((const SvxDateField*)pField)->GetFormatted( LANGUAGE_SYSTEM, LANGUAGE_SYSTEM );
208 	else if ( pField->ISA( SvxURLField ) )
209 	{
210 		const SvxURLField* pURL = (const SvxURLField*)pField;
211 		if ( !bURLClicked )
212 		{
213 			delete rpTxtColor;
214 			rpTxtColor = new Color( COL_BLUE );
215 		}
216 		else
217 		{
218 			delete rpTxtColor;
219 			rpTxtColor = new Color( COL_RED );
220 			delete rpFldColor;
221 			rpFldColor = new Color( COL_YELLOW );
222 		}
223 		if ( pURL->GetFormat() == SVXURLFORMAT_URL )
224 			return pURL->GetURL();
225 		return pURL->GetRepresentation();
226 	}
227 	return String( RTL_CONSTASCII_USTRINGPARAM( "???" ) );
228 }
229 
FieldClicked(const SvxFieldItem & rField,USHORT nPara,USHORT nPos)230 void __EXPORT MyEditEngine::FieldClicked( const SvxFieldItem& rField, USHORT nPara, USHORT nPos )
231 {
232 	EditEngine::FieldClicked( rField, nPara, nPos );	// Falls URL
233 	const SvxFieldData* pField = rField.GetField();
234 	if ( !pField )
235 		return;
236 
237 	if ( pField->ISA( SvxURLField ) )
238 	{
239 		bURLClicked = TRUE;
240 		UpdateFields();
241 	}
242 	else
243 		Sound::Beep();
244 }
245 
FieldSelected(const SvxFieldItem & rField,USHORT nPara,USHORT nPos)246 void __EXPORT MyEditEngine::FieldSelected( const SvxFieldItem& rField, USHORT nPara, USHORT nPos )
247 {
248 	const SvxFieldData* pField = rField.GetField();
249 	if ( !pField )
250 		return;
251 
252 	InfoBox( 0, String( RTL_CONSTASCII_USTRINGPARAM( "Feld selektiert!" ) ) ).Execute();
253 }
254 
255 
256 class MyView : public WorkWindow
257 {
258 private:
259 	EditEngine*		pEditEngine;
260 	EditView*		pEditView;
261 
262 public:
263 					MyView( Window* pParent, EditEngine* pEditEngine );
264 					~MyView();
265 
266 	virtual void	Paint( const Rectangle& );
267 	virtual void	Resize();
268 	virtual void	KeyInput( const KeyEvent& rKeyEvt );
269 	virtual void	MouseMove( const MouseEvent& rMEvt );
270 	virtual void	MouseButtonDown( const MouseEvent& rMEvt );
271 	virtual void	MouseButtonUp( const MouseEvent& rMEvt );
272 	virtual void	Command( const CommandEvent& rCEvt );
273 	BOOL    		Drop( const DropEvent& rEvt );
274 	BOOL    		QueryDrop( DropEvent& rEvt );
275 };
276 
MyView(Window * pParent,EditEngine * pEE)277 MyView::MyView( Window* pParent, EditEngine* pEE ) : WorkWindow( pParent, WinBits( WB_STDWORK ) )
278 {
279 	pEditEngine = pEE;
280 	pEditView = new EditView( pEditEngine, this );
281 	pEditEngine->InsertView( pEditView );
282 	SetText( String( RTL_CONSTASCII_USTRINGPARAM( "Another View..." ) ) );
283 //	EnableDrop();
284 	SetBackgroundBrush( Brush( Color( COL_LIGHTBLUE ) ) );
285 	Show();
286 }
287 
~MyView()288 MyView::~MyView()
289 {
290 	pEditEngine->RemoveView( pEditView );
291 	delete pEditView;
292 }
293 
Paint(const Rectangle & rRec)294 void __EXPORT MyView::Paint( const Rectangle& rRec )
295 {
296 	pEditView->Paint( rRec );
297 }
298 
Resize()299 void __EXPORT MyView::Resize()
300 {
301 	Size aPaperSz( GetOutputSize() );
302 //	aPaperSz.Width() /= 2;
303 //	aPaperSz.Height() /= 2;
304 	pEditView->SetOutputArea( Rectangle( Point( 0,0 ), aPaperSz ) );
305 	pEditView->SetVisArea( Rectangle( Point( 0,0 ), aPaperSz ) );
306 	Invalidate();
307 	pEditView->ShowCursor();
308 }
309 
310 // --- MyView::KeyInput() --------------------------------------
KeyInput(const KeyEvent & rKEvt)311 void __EXPORT MyView::KeyInput( const KeyEvent& rKEvt )
312 {
313 	pEditView->PostKeyEvent( rKEvt );
314 }
315 
MouseMove(const MouseEvent & rMEvt)316 void __EXPORT MyView::MouseMove( const MouseEvent& rMEvt )
317 {
318 	Point aPos = PixelToLogic( rMEvt.GetPosPixel() );
319 	if ( pEditView->GetOutputArea().IsInside( aPos ) )
320 		SetPointer( pEditView->GetPointer() );
321 	else
322 		SetPointer( Pointer() );
323 
324 
325 	pEditView->MouseMove( rMEvt );
326 }
327 
MouseButtonDown(const MouseEvent & rMEvt)328 void __EXPORT MyView::MouseButtonDown( const MouseEvent& rMEvt )
329 {
330 	pEditView->MouseButtonDown( rMEvt );
331 }
332 
MouseButtonUp(const MouseEvent & rMEvt)333 void __EXPORT MyView::MouseButtonUp( const MouseEvent& rMEvt )
334 {
335 	pEditView->MouseButtonUp( rMEvt );
336 }
337 
Command(const CommandEvent & rCEvt)338 void __EXPORT MyView::Command( const CommandEvent& rCEvt )
339 {
340 	if ( rCEvt.GetCommand() == COMMAND_STARTDRAG )
341 		pEditView->Command(rCEvt);
342 }
343 
Drop(const DropEvent & rEvt)344 BOOL __EXPORT MyView::Drop( const DropEvent& rEvt )
345 {
346 	return pEditView->Drop( rEvt );
347 }
348 
QueryDrop(DropEvent & rEvt)349 BOOL __EXPORT MyView::QueryDrop( DropEvent& rEvt )
350 {
351 	return pEditView->QueryDrop( rEvt );
352 }
353 
354 // --- class EditMainWindow --------------------------------------------
355 DECLARE_LIST( ViewList, MyView* );
356 
357 class EditViewWindow : public Window
358 {
359 private:
360 	MyEditEngine*			pEditEngine;
361 	EditView*				pEditView;
362 	Pointer 				aStdPtr;
363 	Pointer 				aURLPtr;
364 	WorkWindow* 			pTmpWindow;
365 	ViewList 				aViewList;
366 
367 	XubString 				aTestStr;
368 
369 
370 public:
371 					EditViewWindow( Window* pParent );
372 					~EditViewWindow();
373 
374 	virtual void	Paint( const Rectangle& );
375 	virtual void	Resize();
376 	virtual void	KeyInput( const KeyEvent& rKeyEvt );
377 	virtual void	MouseMove( const MouseEvent& rMEvt );
378 	virtual void	MouseButtonDown( const MouseEvent& rMEvt );
379 	virtual void	MouseButtonUp( const MouseEvent& rMEvt );
380 	virtual void	Command( const CommandEvent& rCEvt );
381 	void			MarkOutputArea();
382 	BOOL    		Drop( const DropEvent& rEvt );
383 	BOOL    		QueryDrop( DropEvent& rEvt );
384 
GetEditView()385 	EditView*		GetEditView() 		{ return pEditView; }
386 };
387 
388 class EditMainWindow : public WorkWindow
389 {
390 private:
391 	ToolBox 				aToolBox;
392 	ScrollBar				aHScrollBar;
393 	ScrollBar				aVScrollBar;
394 	EditViewWindow			aViewWin;
395 	Printer*				pPrinter;
396 
397 	WorkWindow* 			pTmpWindow;
398 
399 	EditTextObject*			pRTFObj;
400 	EditTextObject*			pBinObj;
401 
402 	FileDialog*				pFileDialogBox;
403 	FileDialog*				pFileDialogBox2;
404 
405 
406 protected:
407 	void			SetScrollBars();
408 	void			SetScrollBarRanges();
409 	void			CreatePolygon();
410 
411 	virtual void	GetFocus();
412 
413 public:
414 					EditMainWindow();
415 					~EditMainWindow();
416 
417 	virtual void	Resize();
418 
419 	DECL_LINK( TBSelect, ToolBox * );
420 	void			UpdateToolBox();
421 
422 	DECL_LINK( HScrollHdl, ScrollBar * );
423 	DECL_LINK( VScrollHdl, ScrollBar * );
424 	DECL_LINK( ShowStatus, EditStatus * );
425 	void			SetTitle();
426 };
427 
428 
~EditMainWindow()429 EditMainWindow::~EditMainWindow()
430 {
431 	delete pRTFObj;
432 	delete pBinObj;
433 	delete pFileDialogBox;
434 	delete pFileDialogBox2;
435 	delete pTmpWindow;
436 	delete pPrinter;
437 }
438 
EditMainWindow()439 EditMainWindow::EditMainWindow() :
440 				WorkWindow( NULL, WB_APP | WB_STDWORK | WB_SVLOOK | WB_CLIPCHILDREN ) ,
441 				aViewWin( this ),
442 				aToolBox( this, WinBits( WB_BORDER | WB_SVLOOK | WB_SCROLL | WB_LINESPACING ) ),
443 				aHScrollBar( this, WinBits( WB_HSCROLL | WB_DRAG ) ),
444 				aVScrollBar( this, WinBits( WB_VSCROLL | WB_DRAG ) )
445 {
446 	pRTFObj = 0;
447 	pBinObj = 0;
448 
449 	pFileDialogBox = new FileDialog( this, WinBits( WB_OPEN | WB_SVLOOK ) );
450 	pFileDialogBox->SetText( String( RTL_CONSTASCII_USTRINGPARAM( "Open" ) ) );
451 	pFileDialogBox->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Text" )), String( RTL_CONSTASCII_USTRINGPARAM( "*.txt" ) ) );
452 	pFileDialogBox->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Rich Text Format" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.rtf" ) ) );
453 	pFileDialogBox->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "HTML" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.htm;*.html" ) ) );
454 	pFileDialogBox->SetCurFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Rich Text Format" ) ) );
455 
456 	pFileDialogBox2 = new FileDialog( this, WinBits( WB_SAVEAS| WB_SVLOOK ) );
457 	pFileDialogBox2->SetText( String( RTL_CONSTASCII_USTRINGPARAM( "Save" ) ) );
458 	pFileDialogBox2->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Text" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.txt" ) ) );
459 	pFileDialogBox2->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Rich Text Format" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.rtf" ) ) );
460 	pFileDialogBox2->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "HTML" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.htm" ) ) );
461 	pFileDialogBox2->SetCurFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Rich Text Format" ) ) );
462 
463 	pPrinter = new Printer;
464 	pPrinter->SetMapMode( MAP_100TH_MM );
465 	aViewWin.SetMapMode( pPrinter->GetMapMode() );
466 	aViewWin.GetEditView()->GetEditEngine()->SetRefDevice( pPrinter );
467 
468 
469 
470 	pTmpWindow = new WorkWindow( this, WB_STDWORK );
471 
472 	aToolBox.SetButtonType( BUTTON_TEXT );
473 	aToolBox.SetLineCount( 4 );
474 
475 	{
476 	aToolBox.InsertItem( TB_OPEN, String( RTL_CONSTASCII_USTRINGPARAM( "Open" ) ) );
477 	aToolBox.InsertItem( TB_SAVE, String( RTL_CONSTASCII_USTRINGPARAM( "Save" ) ) );
478 	aToolBox.InsertItem( TB_PRINT, String( RTL_CONSTASCII_USTRINGPARAM( "Print" ) ) );
479 	aToolBox.InsertSeparator();
480 	aToolBox.InsertItem( TB_LEFT, String( RTL_CONSTASCII_USTRINGPARAM( "L" ) ) );
481 	aToolBox.InsertItem( TB_CENTER, String( RTL_CONSTASCII_USTRINGPARAM( "C" ) ) );
482 	aToolBox.InsertItem( TB_RIGHT, String( RTL_CONSTASCII_USTRINGPARAM( "R" ) ) );
483 	aToolBox.InsertItem( TB_BLOCK, String( RTL_CONSTASCII_USTRINGPARAM( "B" ) ) );
484 	aToolBox.InsertSeparator();
485 	aToolBox.InsertItem( TB_UNDO, String( RTL_CONSTASCII_USTRINGPARAM( "Undo" ) ) );
486 	aToolBox.InsertItem( TB_REDO, String( RTL_CONSTASCII_USTRINGPARAM( "Redo" ) ) );
487 	aToolBox.InsertSeparator();
488 	aToolBox.InsertItem( TB_FONT1, String( RTL_CONSTASCII_USTRINGPARAM( "Font1" ) ) );
489 	aToolBox.InsertItem( TB_FONT2, String( RTL_CONSTASCII_USTRINGPARAM( "Font2" ) ) );
490 	aToolBox.InsertItem( TB_DEFTAB, String( RTL_CONSTASCII_USTRINGPARAM( "DefTab" ) ) );
491 	aToolBox.InsertBreak();
492 	aToolBox.InsertItem( TB_OPEN2, String( RTL_CONSTASCII_USTRINGPARAM( "Read" ) ) );
493 	aToolBox.InsertItem( TB_SAVE2, String( RTL_CONSTASCII_USTRINGPARAM( "Write" ) ) );
494 	aToolBox.InsertSeparator();
495 	aToolBox.InsertItem( TB_FONT, String( RTL_CONSTASCII_USTRINGPARAM( "XXX" ) ) );
496 	aToolBox.InsertItem( TB_ITALIC, String( RTL_CONSTASCII_USTRINGPARAM( "K" ) ) );
497 	aToolBox.InsertItem( TB_BOLD, String( RTL_CONSTASCII_USTRINGPARAM( "F" ) ) );
498 	aToolBox.InsertItem( TB_UNDERLINE, String( RTL_CONSTASCII_USTRINGPARAM( "U" ) ) );
499 	aToolBox.InsertItem( TB_SUPER, String( RTL_CONSTASCII_USTRINGPARAM( "SP" ) ) );
500 	aToolBox.InsertItem( TB_SUB, String( RTL_CONSTASCII_USTRINGPARAM( "SB" ) ) );
501 	aToolBox.InsertItem( TB_PKERN, String( RTL_CONSTASCII_USTRINGPARAM( "PK" ) ) );
502 	aToolBox.InsertItem( TB_KERN, String( RTL_CONSTASCII_USTRINGPARAM( "TK" ) ) );
503 	aToolBox.InsertItem( TB_WLM, String( RTL_CONSTASCII_USTRINGPARAM( "W!" ) ) );
504 	aToolBox.InsertSeparator();
505 	aToolBox.InsertItem( TB_BLACK, String( RTL_CONSTASCII_USTRINGPARAM( "Black" ) ) );
506 	aToolBox.InsertItem( TB_GREEN, String( RTL_CONSTASCII_USTRINGPARAM( "Green" ) ) );
507 	aToolBox.InsertItem( TB_RED, String( RTL_CONSTASCII_USTRINGPARAM( "Red" ) ) );
508 	aToolBox.InsertSeparator();
509 	aToolBox.InsertItem( TB_SBL, String( RTL_CONSTASCII_USTRINGPARAM( "SBL" ) ) );
510 	aToolBox.InsertItem( TB_SBSA, String( RTL_CONSTASCII_USTRINGPARAM( "SBSA" ) ) );
511 	aToolBox.InsertItem( TB_LR, String( RTL_CONSTASCII_USTRINGPARAM( "LR" ) ) );
512 	aToolBox.InsertSeparator();
513 	aToolBox.InsertItem( TB_DRAW, String( RTL_CONSTASCII_USTRINGPARAM( "Draw!" ) ) );
514 	aToolBox.InsertItem( TB_ROTATE, String( RTL_CONSTASCII_USTRINGPARAM( "Rotate!" ) ) );
515 	aToolBox.InsertItem( TB_MOVE, String( RTL_CONSTASCII_USTRINGPARAM( "Move->2" ) ) );
516 	aToolBox.InsertItem( TB_PARATTR1, String( RTL_CONSTASCII_USTRINGPARAM( "ParaAttr0" ) ) );
517 	aToolBox.InsertItem( TB_ATTRIBS, String( RTL_CONSTASCII_USTRINGPARAM( "GetAttribs" ) ) );
518 	aToolBox.InsertSeparator();
519 	aToolBox.InsertItem( TB_INSFLD, String( RTL_CONSTASCII_USTRINGPARAM( "InsFld" ) ) );
520 	aToolBox.InsertItem( TB_UPDFLD, String( RTL_CONSTASCII_USTRINGPARAM( "UpdFld" ) ) );
521 	}
522 	aToolBox.InsertBreak();
523 	{
524 	aToolBox.InsertItem( TB_ONLINESPELL, String( RTL_CONSTASCII_USTRINGPARAM( "Spell" ) ) );
525 	aToolBox.InsertItem( TB_REDLINES, String( RTL_CONSTASCII_USTRINGPARAM( "RedLine" ) ) );
526 	aToolBox.InsertItem( TB_AUTOCORRECT, String( RTL_CONSTASCII_USTRINGPARAM( "Auto*" ) ) );
527 	aToolBox.InsertItem( TB_HYPH, String( RTL_CONSTASCII_USTRINGPARAM( "Hyph" ) ) );
528 	aToolBox.InsertItem( TB_STDSEL, String( RTL_CONSTASCII_USTRINGPARAM( "StdSel" ) ) );
529 	aToolBox.InsertItem( TB_FLAT, String( RTL_CONSTASCII_USTRINGPARAM( "FlatMode" ) ) );
530 	aToolBox.InsertItem( TB_OUTL, String( RTL_CONSTASCII_USTRINGPARAM( "Ocomphelper" ) ) );
531 	aToolBox.InsertItem( TB_POLY, String( RTL_CONSTASCII_USTRINGPARAM( "Poly" ) ) );
532 	aToolBox.InsertItem( TB_COLORS, String( RTL_CONSTASCII_USTRINGPARAM( "Colors" ) ));
533 	aToolBox.InsertItem( TB_IDLE, String( RTL_CONSTASCII_USTRINGPARAM( "Idle!" ) ) );
534 	aToolBox.InsertItem( TB_INSERT, String( RTL_CONSTASCII_USTRINGPARAM( "Insert" ) ) );
535 	aToolBox.InsertSeparator();
536 	aToolBox.InsertItem( TB_BINOBJ1, String( RTL_CONSTASCII_USTRINGPARAM( ">BINObj" ) ) );
537 	aToolBox.InsertItem( TB_BINOBJ1b, String( RTL_CONSTASCII_USTRINGPARAM( ">>BINObj" ) ) );
538 	aToolBox.InsertItem( TB_BINOBJ2b, String( RTL_CONSTASCII_USTRINGPARAM( "<<BINObj" ) ) );
539 	aToolBox.InsertItem( TB_CLONEBIN, String( RTL_CONSTASCII_USTRINGPARAM( "Clone" ) ) );
540 	aToolBox.InsertSeparator();
541 	aToolBox.InsertItem( TB_BINOBJ3, String( RTL_CONSTASCII_USTRINGPARAM( "StoreBin" ) ) );
542 	aToolBox.InsertItem( TB_BINOBJ4, String( RTL_CONSTASCII_USTRINGPARAM( "CreatBin" ) ) );
543 	}
544 
545 	aToolBox.SetPosPixel( Point( 0, 0 ) );
546 	aToolBox.SetSelectHdl( LINK( this, EditMainWindow, TBSelect ) );
547 
548 	SetBackgroundBrush( Brush( Color( COL_LIGHTGRAY ) ) );
549 
550 	SetPen( PEN_NULL );
551 	Show();
552 
553 	aVScrollBar.SetScrollHdl ( LINK( this, EditMainWindow, VScrollHdl ) );
554 	aVScrollBar.SetLineSize( 300 );
555 	aVScrollBar.SetPageSize( 2000 );
556 	aHScrollBar.SetScrollHdl ( LINK( this, EditMainWindow, HScrollHdl ) );
557 	aHScrollBar.SetLineSize( 300 );
558 	aHScrollBar.SetPageSize( 2000 );
559 	aHScrollBar.Enable();
560 	aVScrollBar.Enable();
561 
562 	aViewWin.GetEditView()->GetEditEngine()->SetStatusEventHdl( LINK( this, EditMainWindow, ShowStatus ) );
563 
564 	SetTitle();
565 
566 	UpdateToolBox();
567 	aToolBox.Show();
568 	aViewWin.Show();
569 }
570 
SetTitle()571 void EditMainWindow::SetTitle()
572 {
573 	String aHeading( String( RTL_CONSTASCII_USTRINGPARAM( "SvEdit!  -  Zoom " ) ) );
574 	aHeading += String::CreateFromInt32(nZoom);
575 	aHeading += '%';
576 	EditEngine* pEditEngine = aViewWin.GetEditView()->GetEditEngine();
577 	if ( pEditEngine->GetControlWord() & EE_CNTRL_STRETCHING )
578 	{
579 		USHORT nX, nY;
580 		pEditEngine->GetGlobalCharStretching( nX, nY );
581 		aHeading += String( RTL_CONSTASCII_USTRINGPARAM( ", Stretch=(" ) );
582 		aHeading += String::CreateFromInt32(nX);
583 		aHeading += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
584 		aHeading += String::CreateFromInt32(nY);
585 		aHeading += ')';
586 	}
587 	SetText( aHeading );
588 }
589 
UpdateToolBox()590 void EditMainWindow::UpdateToolBox()
591 {
592 	EditView* pEditView = aViewWin.GetEditView();
593 	EditEngine* pEditEngine = pEditView->GetEditEngine();
594 	SfxItemSet aCurSet( pEditView->GetAttribs() );
595 
596 	ULONG nControl = pEditEngine->GetControlWord();
597 	aToolBox.EnableItem( TB_UNDO, (BOOL)pEditEngine->GetUndoManager().GetUndoActionCount() );
598 	aToolBox.EnableItem( TB_REDO, (BOOL)pEditEngine->GetUndoManager().GetRedoActionCount() );
599 	aToolBox.EnableItem( TB_BINOBJ2b, (BOOL)(long)pBinObj );
600 	aToolBox.EnableItem( TB_MOVE, pEditEngine->GetParagraphCount() > 3 );
601 	aToolBox.CheckItem( TB_ONLINESPELL, nControl & EE_CNTRL_ONLINESPELLING ? TRUE : FALSE );
602 	aToolBox.CheckItem( TB_AUTOCORRECT, nControl & EE_CNTRL_AUTOCORRECT ? TRUE : FALSE );
603 //	aToolBox.CheckItem( TB_HYPH, nControl & EE_CNTRL_HYPHENATE ? TRUE : FALSE );
604 	aToolBox.CheckItem( TB_REDLINES, nControl & EE_CNTRL_NOREDLINES ? FALSE : TRUE );
605 	aToolBox.CheckItem( TB_STDSEL, pEditView->GetSelectionMode() == EE_SELMODE_STD );
606 	aToolBox.CheckItem( TB_FLAT, pEditEngine->IsFlatMode() );
607 	aToolBox.CheckItem( TB_OUTL, ( nControl & EE_CNTRL_OUTLINER ) ? TRUE : FALSE );
608 	aToolBox.CheckItem( TB_POLY, pEditEngine->GetPolygon() ? TRUE : FALSE );
609 	aToolBox.CheckItem( TB_COLORS, ( nControl & EE_CNTRL_NOCOLORS ) ? FALSE : TRUE );
610 	aToolBox.CheckItem( TB_IDLE, pEditEngine->IsIdleFormatterEnabled() );
611 	aToolBox.CheckItem( TB_INSERT, pEditView->IsInsertMode() );
612 
613 	for ( USHORT nWhich = EE_ITEMS_START; nWhich <= EE_ITEMS_END; nWhich++)
614 	{
615 //		if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_OFF )
616 //			;
617 //		else if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE )
618 //			;
619 //		else if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_ON )
620 		{
621 			const SfxPoolItem& rItem = aCurSet.Get( nWhich );
622 			switch ( nWhich )
623 			{
624 				case EE_PARA_HYPHENATE:
625 					aToolBox.CheckItem( TB_HYPH, ((SfxBoolItem&)rItem).GetValue() != 0 );
626 				break;
627 				case EE_PARA_LRSPACE:
628 					aToolBox.CheckItem( TB_LR, ((SvxLRSpaceItem&)rItem).GetTxtLeft() != 0 );
629 				break;
630 				case EE_PARA_ULSPACE:
631 					aToolBox.CheckItem( TB_SBSA, ((SvxULSpaceItem&)rItem).GetUpper() != 0 );
632 				break;
633 				case EE_PARA_SBL:
634 					aToolBox.CheckItem( TB_SBL, ((SvxLineSpacingItem&)rItem).GetPropLineSpace() != 100 );
635 				break;
636 				case EE_PARA_JUST:
637 				{
638 					SvxAdjust e = ((SvxAdjustItem&)rItem).GetAdjust();
639 					aToolBox.CheckItem( TB_LEFT, e == SVX_ADJUST_LEFT );
640 					aToolBox.CheckItem( TB_RIGHT, e == SVX_ADJUST_RIGHT);
641 					aToolBox.CheckItem( TB_CENTER, e == SVX_ADJUST_CENTER);
642 					aToolBox.CheckItem( TB_BLOCK, e == SVX_ADJUST_BLOCK );
643 				}
644 				break;
645 				case EE_PARA_TABS:
646 				break;
647 				case EE_CHAR_COLOR:
648 				{
649 					Color aColor( ((SvxColorItem&)rItem).GetValue() );
650 					aToolBox.CheckItem( TB_BLACK, aColor == COL_BLACK );
651 					aToolBox.CheckItem( TB_GREEN, aColor == COL_GREEN );
652 					aToolBox.CheckItem( TB_RED, aColor == COL_RED );
653 				}
654 				break;
655 				case EE_CHAR_FONTINFO:
656 				{
657 					FontFamily e = ((SvxFontItem&)rItem).GetFamily();
658 					aToolBox.CheckItem( TB_FONT1, e == FAMILY_ROMAN );
659 					aToolBox.CheckItem( TB_FONT2, e == FAMILY_SWISS );
660 				}
661 				break;
662 				case EE_CHAR_FONTHEIGHT:
663 				break;
664 				case EE_CHAR_WEIGHT:
665 				{
666 					FontWeight e = ((SvxWeightItem&)rItem).GetWeight();
667 					aToolBox.CheckItem( TB_BOLD, e == WEIGHT_BOLD );
668 				}
669 				break;
670 				case EE_CHAR_UNDERLINE:
671 				{
672 					aToolBox.CheckItem( TB_UNDERLINE, ((SvxUnderlineItem&)rItem).GetLineStyle() );
673 				}
674 				break;
675 				case EE_CHAR_WLM:
676 				{
677 					aToolBox.CheckItem( TB_WLM, ((SvxWordLineModeItem&)rItem).GetValue() );
678 				}
679 				break;
680 				case EE_CHAR_PAIRKERNING:
681 				{
682 					aToolBox.CheckItem( TB_PKERN, ((SvxAutoKernItem&)rItem).GetValue() );
683 				}
684 				break;
685 				case EE_CHAR_KERNING:
686 				{
687 					aToolBox.CheckItem( TB_KERN, (BOOL)((SvxKerningItem&)rItem).GetValue() );
688 				}
689 				break;
690 				case EE_CHAR_ESCAPEMENT:
691 				{
692 					aToolBox.CheckItem( TB_SUPER, ((SvxEscapementItem&)rItem).GetEsc() > 0 );
693 					aToolBox.CheckItem( TB_SUB, ((SvxEscapementItem&)rItem).GetEsc() < 0 );
694 				}
695 				break;
696 				case EE_CHAR_STRIKEOUT:
697 				break;
698 				case EE_CHAR_ITALIC:
699 				{
700 					FontItalic e = ((SvxPostureItem&)rItem).GetPosture();
701 					aToolBox.CheckItem( TB_ITALIC, e == ITALIC_NORMAL );
702 				}
703 				break;
704 				case EE_CHAR_OUTLINE:
705 				break;
706 				case EE_CHAR_SHADOW:
707 				break;
708 			}
709 		}
710 	}
711 }
712 
IMPL_LINK(EditMainWindow,TBSelect,ToolBox *,p)713 IMPL_LINK( EditMainWindow, TBSelect, ToolBox *, p )
714 {
715 	EditView* pEditView = aViewWin.GetEditView();
716 	EditEngine* pEditEngine = pEditView->GetEditEngine();
717 	USHORT nId = aToolBox.GetCurItemId();
718 	BOOL bChecked = aToolBox.IsItemChecked( nId );
719 	SfxPoolItem* pNewItem = 0;
720 	switch ( nId )
721 	{
722 		case TB_LEFT:	pNewItem = new SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST );
723 						break;
724 		case TB_RIGHT:	pNewItem = new SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST );
725 						break;
726 		case TB_CENTER:	pNewItem = new SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST );
727 						break;
728 		case TB_BLOCK:	pNewItem = new SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST );
729 						break;
730 		case TB_HYPH: 	pNewItem = new SfxBoolItem( EE_PARA_HYPHENATE, !bChecked );
731 						break;
732 		case TB_UNDO:	pEditView->Undo();
733 						pEditView->ShowCursor();
734 						break;
735 		case TB_REDO:	pEditView->Redo();
736 						pEditView->ShowCursor();
737 						break;
738 		case TB_ONLINESPELL: {
739 							ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
740 							if ( bChecked )
741 								nControl = nControl & ~EE_CNTRL_ONLINESPELLING;
742 							else
743 								nControl = nControl | EE_CNTRL_ONLINESPELLING;
744 							pEditView->GetEditEngine()->SetControlWord( nControl );
745 							}
746 							break;
747 		case TB_REDLINES: {
748 							ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
749 							if ( !bChecked )
750 								nControl = nControl & ~EE_CNTRL_NOREDLINES;
751 							else
752 								nControl = nControl | EE_CNTRL_NOREDLINES;
753 							pEditView->GetEditEngine()->SetControlWord( nControl );
754 							}
755 							break;
756 		case TB_AUTOCORRECT: {
757 							ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
758 							if ( bChecked )
759 								nControl = nControl & ~EE_CNTRL_AUTOCORRECT;
760 							else
761 								nControl = nControl | EE_CNTRL_AUTOCORRECT;
762 							pEditView->GetEditEngine()->SetControlWord( nControl );
763 							}
764 							break;
765 		case TB_STDSEL:	if ( bChecked )
766 							pEditView->SetSelectionMode( EE_SELMODE_TXTONLY );
767 						else
768 							pEditView->SetSelectionMode( EE_SELMODE_STD );
769 						break;
770 		case TB_FLAT:	pEditEngine->SetFlatMode( !pEditEngine->IsFlatMode() );
771 						break;
772 		case TB_COLORS:	{
773 							ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
774 							if ( bChecked )
775 								nControl = nControl | EE_CNTRL_NOCOLORS;
776 							else
777 								nControl = nControl & ~EE_CNTRL_NOCOLORS;
778 							pEditView->GetEditEngine()->SetControlWord( nControl );
779 						}
780 //						aViewWin.Invalidate();
781 						pEditView->GetEditEngine()->Draw( pEditView->GetWindow(), pEditView->GetOutputArea(), pEditView->GetVisArea().TopLeft() );
782 						break;
783 		case TB_OUTL:	{
784 							ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
785 							if ( !bChecked )
786 								nControl = nControl | EE_CNTRL_OUTLINER;
787 							else
788 								nControl = nControl & ~EE_CNTRL_OUTLINER;
789 							pEditView->GetEditEngine()->SetControlWord( nControl );
790 						}
791 						break;
792 		case TB_POLY:	{
793 							if ( !bChecked )
794 								CreatePolygon();
795 							else
796 								pEditView->GetEditEngine()->ClearPolygon();
797 						}
798 						break;
799 		case TB_IDLE:	pEditEngine->EnableIdleFormatter( !pEditEngine->IsIdleFormatterEnabled() );
800 						break;
801 		case TB_INSFLD:	{
802 						static BYTE nFld = 0;
803 						if ( nFld > 2 )
804 							nFld = 0;
805 						if ( nFld == 0 )
806 						{
807 							SvxFieldItem aFld( SvxURLField( String( RTL_CONSTASCII_USTRINGPARAM( "www.mopo.de" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "Bla" ) ), SVXURLFORMAT_REPR ), EE_FEATURE_FIELD  );
808 							pEditView->InsertField( aFld );
809 						}
810 						else if ( nFld == 1 )
811 							pEditView->InsertField( SvxFieldItem( SvxURLField( String( RTL_CONSTASCII_USTRINGPARAM( "www.mopo.de" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "Morgenpost" ) ), SVXURLFORMAT_URL ), EE_FEATURE_FIELD  ) );
812 						else if ( nFld == 2 )
813 							pEditView->InsertField( SvxFieldItem( SvxDateField( Date( 1,1,1995 ), SVXDATETYPE_FIX, SVXDATEFORMAT_D ), EE_FEATURE_FIELD ) );
814 
815 						nFld++;
816 		}
817 						break;
818 		case TB_UPDFLD:	pEditEngine->UpdateFields();
819 						break;
820 		case TB_INSERT:	pEditView->SetInsertMode( !pEditView->IsInsertMode() );
821 						break;
822 		case TB_FONT1:	pNewItem = new SvxFontItem( FAMILY_ROMAN, String( RTL_CONSTASCII_USTRINGPARAM( "Times New Roman" ) ), String(), PITCH_DONTKNOW, RTL_TEXTENCODING_MS_1252, EE_CHAR_FONTINFO );
823 						break;
824 		case TB_FONT2:	pNewItem = new SvxFontItem( FAMILY_SWISS, String( RTL_CONSTASCII_USTRINGPARAM( "Helv" ) ), String(), PITCH_DONTKNOW, RTL_TEXTENCODING_MS_1252, EE_CHAR_FONTINFO );
825 						break;
826 /*
827 		case TB_FONT:
828 		{
829 			FontDialog* pDlg = new FontDialog( this, WB_SVLOOK );
830 			pDlg->SetPrinter( pPrinter );
831 			Font aFont = pEditEngine->CreateFontFromItemSet( pEditView->GetAttribs() );
832 			MapMode aPntMode( MAP_POINT );
833 			MapMode aCurrent( aViewWin.GetMapMode() );
834 			Size aSz(  aViewWin.LogicToLogic( aFont.GetSize(), &aCurrent, &aPntMode ) );
835 			aSz.Width() *= 10;
836 			aSz.Height() *= 10;
837 			aFont.SetSize(  aSz );
838 			pDlg->SetSelectFont( aFont );
839 			if ( pDlg->Execute() )
840 			{
841 				Font aNewFont( pDlg->GetSelectFont() );
842 				aSz = aViewWin.LogicToLogic( aNewFont.GetSize(), &aPntMode, &aCurrent );
843 				aSz.Width() /= 10;
844 				aSz.Height() /= 10;
845 				aNewFont.SetSize( aSz );
846 
847 				SfxItemSet aSet( pEditEngine->GetEmptyItemSet() );
848 
849 				pEditEngine->SetFontInfoInItemSet( aSet, aNewFont );
850 				pEditView->SetAttribs( aSet );
851 			}
852 			delete pDlg;
853 		}
854 		break;
855 */
856 		case TB_BOLD:	if ( bChecked )
857 							pNewItem = new SvxWeightItem( WEIGHT_NORMAL, EE_CHAR_WEIGHT);
858 						else
859 							pNewItem = new SvxWeightItem( WEIGHT_BOLD, EE_CHAR_WEIGHT);
860 						break;
861 		case TB_ITALIC:	if ( bChecked )
862 							pNewItem = new SvxPostureItem( ITALIC_NONE, EE_CHAR_ITALIC );
863 						else
864 							pNewItem = new SvxPostureItem( ITALIC_NORMAL, EE_CHAR_ITALIC );
865 						break;
866 		case TB_UNDERLINE:	if ( bChecked )
867 								pNewItem = new SvxUnderlineItem( UNDERLINE_NONE, EE_CHAR_UNDERLINE );
868 							else
869 								pNewItem = new SvxUnderlineItem( UNDERLINE_SINGLE, EE_CHAR_UNDERLINE );
870 						break;
871 		case TB_WLM:	pNewItem = new SvxWordLineModeItem( !bChecked, EE_CHAR_WLM );
872 						break;
873 		case TB_PKERN:	pNewItem = new SvxAutoKernItem( !bChecked, EE_CHAR_PAIRKERNING );
874 						break;
875 		case TB_KERN:	if ( bChecked )
876 								pNewItem = new SvxKerningItem( 0, EE_CHAR_KERNING );
877 							else
878 								pNewItem = new SvxKerningItem( 100, EE_CHAR_KERNING);
879 						break;
880 		case TB_SUPER:	if ( bChecked )
881 								pNewItem = new SvxEscapementItem( SVX_ESCAPEMENT_OFF, EE_CHAR_ESCAPEMENT);
882 							else
883 //								pNewItem = new SvxEscapementItem( SVX_ESCAPEMENT_SUPERSCRIPT, EE_CHAR_ESCAPEMENT);
884 								pNewItem = new SvxEscapementItem( 50, 100, EE_CHAR_ESCAPEMENT );
885 						break;
886 		case TB_SUB:	if ( bChecked )
887 								pNewItem = new SvxEscapementItem( SVX_ESCAPEMENT_OFF, EE_CHAR_ESCAPEMENT);
888 							else
889 //								pNewItem = new SvxEscapementItem( SVX_ESCAPEMENT_SUBSCRIPT, EE_CHAR_ESCAPEMENT);
890 								pNewItem = new SvxEscapementItem( -50, 100, EE_CHAR_ESCAPEMENT );
891 						break;
892 		case TB_GREEN:	pNewItem = new SvxColorItem( Color(COL_GREEN), EE_CHAR_COLOR);
893 						break;
894 		case TB_RED:	pNewItem = new SvxColorItem( Color(COL_RED), EE_CHAR_COLOR);
895 						break;
896 		case TB_BLACK:	pNewItem = new SvxColorItem( Color(COL_BLACK), EE_CHAR_COLOR);
897 						break;
898 		case TB_SBL:	pNewItem = new SvxLineSpacingItem( 0, EE_PARA_SBL );
899 						if ( bChecked )
900 						{
901 							((SvxLineSpacingItem*)pNewItem)->SetInterLineSpace( 0 );
902 						}
903 						else
904 						{
905 							((SvxLineSpacingItem*)pNewItem)->SetPropLineSpace( 150 );
906 						}
907 						break;
908 		case TB_SBSA:	pNewItem = new SvxULSpaceItem( EE_PARA_ULSPACE );
909 						if ( !bChecked )
910 						{
911 							((SvxULSpaceItem*)pNewItem)->SetUpper( 400 );
912 							((SvxULSpaceItem*)pNewItem)->SetLower( 400 );
913 						}
914 						break;
915 		case TB_LR:		pNewItem = new SvxLRSpaceItem( EE_PARA_LRSPACE );
916 						if ( !bChecked )
917 						{
918 							((SvxLRSpaceItem*)pNewItem)->SetTxtLeft( 1000 );
919 							((SvxLRSpaceItem*)pNewItem)->SetTxtFirstLineOfst( -500 );
920 							((SvxLRSpaceItem*)pNewItem)->SetRight( 500 );
921 						}
922 						break;
923 		case TB_DEFTAB:	if ( bChecked )
924 							pEditEngine->SetDefTab( 2000 );
925 						else
926 							pEditEngine->SetDefTab( 600 );
927 						pEditView->ShowCursor();
928 						aToolBox.CheckItem( nId, !bChecked );
929 						break;
930 		case TB_DRAW:   {
931 							pTmpWindow->SetMapMode( aViewWin.GetMapMode() );
932 							pTmpWindow->SetBackgroundBrush( Brush( Color( COL_GRAY ) ) );
933 							pTmpWindow->SetFillInBrush( Brush( Color( COL_LIGHTGRAY ) ) );
934 							pTmpWindow->Show();
935 							pTmpWindow->Invalidate();
936 							pTmpWindow->Update();
937 							pTmpWindow->DrawText( Point( 20, 20 ), String( RTL_CONSTASCII_USTRINGPARAM( "It's a Test..." ) ) );
938 							Rectangle aRect( Point( 500, 500 ), Size( 10000, 4000 ) );
939 							pTmpWindow->DrawRect( aRect );
940 							pEditEngine->Draw( pTmpWindow, aRect, Point( 0, 0 ) );
941 							nRotation = 0;
942 						}
943 						break;
944 		case TB_ROTATE:   {
945 							nRotation += 100;
946 							if ( nRotation == 3600 )
947 								nRotation = 0;
948 							pTmpWindow->SetMapMode( aViewWin.GetMapMode() );
949 							pTmpWindow->SetBackgroundBrush( Brush( Color( COL_LIGHTGRAY ) ) );
950 							pTmpWindow->SetFillInBrush( Brush( Color( COL_LIGHTGRAY ) ) );
951 							pTmpWindow->Show();
952 							pTmpWindow->Invalidate();
953 							pTmpWindow->Update();
954 							pTmpWindow->DrawText( Point( 20, 20 ), String( RTL_CONSTASCII_USTRINGPARAM( "It's a Test..." ) ) );
955 							Rectangle aRect( Point( 500, 500 ), Size( 10000, 4000 ) );
956 							pEditEngine->Draw( pTmpWindow, Point( 2000, 4000 ), nRotation );
957 						}
958 						break;
959 
960 		case TB_MOVE:
961 		{
962 			ESelection aESel = pEditView->GetSelection();
963 			USHORT nStartPara = Min( aESel.nStartPara, aESel.nEndPara );
964 			USHORT nEndPara = Max( aESel.nStartPara, aESel.nEndPara );
965 			pEditView->MoveParagraphs( Range(nStartPara,nEndPara), 2 );
966 		}
967 		break;
968 		case TB_PARATTR1:
969 		{
970 			pEditEngine->SetUpdateMode( FALSE );
971 			USHORT nPara = 0;
972 			SfxItemSet aSet( pEditEngine->GetEmptyItemSet() );
973 			aSet.Put( SvxFontItem( FAMILY_DECORATIVE, String( RTL_CONSTASCII_USTRINGPARAM( "StarBats" ) ), String(),PITCH_DONTKNOW, RTL_TEXTENCODING_MS_1252, EE_CHAR_FONTINFO ) );
974 			aSet.Put( SvxColorItem( Color(COL_MAGENTA), EE_CHAR_COLOR ) );
975 			aSet.Put( SvxFontHeightItem(600, 100, EE_CHAR_FONTHEIGHT) );
976 			aSet.Put( SvxPostureItem( ITALIC_NORMAL, EE_CHAR_ITALIC ) );
977 			aSet.Put( SvxLRSpaceItem( 0, 0, 1000, 0, EE_PARA_LRSPACE ) );
978 			pEditView->SetParaAttribs( aSet, nPara );
979 			pEditEngine->SetUpdateMode( TRUE );
980 			pEditView->ShowCursor();
981 		}
982 		break;
983 		case TB_BINOBJ1:
984 		{
985 			delete pBinObj;
986 			pBinObj = pEditEngine->CreateTextObject();
987 		}
988 		break;
989 		case TB_BINOBJ1b:
990 		{
991 			delete pBinObj;
992 			pBinObj = pEditView->CreateTextObject();
993 		}
994 		break;
995 		case TB_CLONEBIN:
996 		{
997 			if ( pBinObj )
998 			{
999 				EditTextObject* p = pBinObj->Clone();
1000 				delete pBinObj;
1001 				pBinObj = p;
1002 			}
1003 		}
1004 		break;
1005 		case TB_BINOBJ2b:
1006 		{
1007 			if ( pBinObj )
1008 			{
1009 				pEditView->InsertText( *pBinObj );
1010 			}
1011 		}
1012 		break;
1013 		case TB_BINOBJ3:
1014 		{
1015 			if ( !pFileDialogBox2->Execute() )
1016 				return FALSE;
1017 			DirEntry aDirEntry( pFileDialogBox2->GetPath() );
1018 			SvFileStream aStrm( aDirEntry.GetFull(), STREAM_WRITE | STREAM_TRUNC );
1019 			EditTextObject* pTmpObj = pEditEngine->CreateTextObject();
1020 			pTmpObj->Store( aStrm );
1021 			DBG_ASSERT( !aStrm.GetError(), "Store: Error!" );
1022 			delete pTmpObj;
1023 		}
1024 		break;
1025 		case TB_BINOBJ4:
1026 		{
1027 			if ( !pFileDialogBox->Execute() )
1028 				return FALSE;
1029 			DirEntry aDirEntry( pFileDialogBox->GetPath() );
1030 			SvFileStream aStrm( aDirEntry.GetFull(), STREAM_READ );
1031 			delete pBinObj;
1032 			pBinObj = EditTextObject::Create( aStrm );
1033 //			EditTextObject* pTmpObj = pEditEngine->CreateTextObject( aStrm );
1034 //			pEditEngine->SetText( *pTmpObj );
1035 //			pEditView->ShowCursor();
1036 //			delete pTmpObj;
1037 		}
1038 		break;
1039 		case TB_OPEN:
1040 		case TB_OPEN2:
1041 		{
1042 			if ( !pFileDialogBox->Execute() )
1043 				return FALSE;
1044 			DirEntry aDirEntry( pFileDialogBox->GetPath() );
1045 			aDirEntry.ToAbs();
1046 			String aFileName( aDirEntry.GetFull() );
1047 			SvFileStream aStrm( aFileName, STREAM_READ );
1048 			if ( aStrm.GetError() )
1049 				InfoBox( 0, String( RTL_CONSTASCII_USTRINGPARAM( "StreamError!" ) ) ).Execute();
1050 			Application::EnterWait();
1051 			if ( nId == TB_OPEN )
1052 			{
1053 				if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "rtf" ) )
1054 					pEditEngine->Read( aStrm, EE_FORMAT_RTF );
1055 				if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "htm" ) )
1056 					pEditEngine->Read( aStrm, EE_FORMAT_HTML );
1057 				if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "html" ) )
1058 					pEditEngine->Read( aStrm, EE_FORMAT_HTML );
1059 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "bin" ) )
1060 					pEditEngine->Read( aStrm, EE_FORMAT_BIN );
1061 				else
1062 					pEditEngine->Read( aStrm, EE_FORMAT_TEXT );
1063 
1064 				pEditView->ShowCursor();
1065 			}
1066 			else
1067 			{
1068 				if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "rtf" ) )
1069 					pEditView->Read( aStrm, EE_FORMAT_RTF );
1070 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "bin" ) )
1071 					pEditView->Read( aStrm, EE_FORMAT_BIN );
1072 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "html" ) )
1073 					pEditView->Read( aStrm, EE_FORMAT_HTML );
1074 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "htm" ) )
1075 					pEditView->Read( aStrm, EE_FORMAT_HTML );
1076 				else
1077 					pEditView->Read( aStrm, EE_FORMAT_TEXT );
1078 			}
1079 
1080 			Application::LeaveWait();
1081 
1082 		}
1083 		break;
1084 		case TB_PRINT:
1085 		{
1086 			pPrinter->SetPageQueueSize( 1 );
1087 			PrintDialog aPrnDlg( this );
1088 			aPrnDlg.SetPrinter( pPrinter );
1089 			if ( aPrnDlg.Execute() )
1090 			{
1091 				pPrinter->StartJob( String( RTL_CONSTASCII_USTRINGPARAM( "SvEdit - PrinterTest" ) ) );
1092 				pPrinter->StartPage();
1093 				Size aSz( pEditEngine->CalcTextWidth(), pEditEngine->GetTextHeight() );
1094 				Pen aPen( PEN_SOLID );
1095 				aPen.SetColor( Color( COL_BLACK ) );
1096 				pPrinter->SetPen( aPen );
1097 				Rectangle aR( Point( 2000, 4000 ), aSz );
1098 				pPrinter->DrawRect( aR );
1099 				// So folgt auf IIISi, 75DPI kein Ausdruck!
1100 //				pPrinter->SetClipRegion( Region( aR ) );
1101 				pEditEngine->Draw( pPrinter, Point( 2000, 4000 ), nRotation );
1102 //				pPrinter->SetClipRegion();
1103 				pPrinter->EndPage();
1104 				pPrinter->EndJob();
1105 			}
1106 		}
1107 		break;
1108 		case TB_SAVE:
1109 		case TB_SAVE2:
1110 		{
1111 			if ( !pFileDialogBox2->Execute() )
1112 				return FALSE;
1113 			DirEntry aDirEntry( pFileDialogBox2->GetPath() );
1114 //			DirEntry aDirEntry( String( RTL_CONSTASCII_USTRINGPARAM( "d:\\xxx.rtf" ) ) );
1115 			SvFileStream aStrm( aDirEntry.GetFull(), STREAM_WRITE | STREAM_TRUNC );
1116 			Application::EnterWait();
1117 			if ( nId == TB_SAVE )
1118 			{
1119 				if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "rtf") )
1120 					pEditEngine->Write( aStrm, EE_FORMAT_RTF );
1121 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "bin" ) )
1122 					pEditEngine->Write( aStrm, EE_FORMAT_BIN );
1123 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "html" ) )
1124 					pEditEngine->Write( aStrm, EE_FORMAT_HTML );
1125 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "htm" ) )
1126 					pEditEngine->Write( aStrm, EE_FORMAT_HTML );
1127 				else
1128 					pEditEngine->Write( aStrm, EE_FORMAT_TEXT );
1129 			}
1130 			else
1131 			{
1132 				if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "rtf" ) )
1133 					pEditView->Write( aStrm, EE_FORMAT_RTF );
1134 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "bin" ) )
1135 					pEditView->Write( aStrm, EE_FORMAT_BIN );
1136 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "html" ) )
1137 					pEditView->Write( aStrm, EE_FORMAT_HTML );
1138 				else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "htm" ) )
1139 					pEditView->Write( aStrm, EE_FORMAT_HTML );
1140 				else
1141 					pEditView->Write( aStrm, EE_FORMAT_TEXT );
1142 			}
1143 			Application::LeaveWait();
1144 		}
1145 		break;
1146 		case TB_ATTRIBS:
1147 		{
1148 			SfxItemSet aCurSet = pEditView->GetAttribs();
1149 			XubString aDebStr( String( RTL_CONSTASCII_USTRINGPARAM( "Attribute in Selektion:" ) ) );
1150 			aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "\nVorlage:" ) );
1151 			XubString aStyle;
1152 //			pEditView->GetStyleSheet( aStyle, eFam );
1153 			aDebStr += aStyle;
1154 			for ( USHORT nWhich = EE_ITEMS_START; nWhich <= EE_ITEMS_END; nWhich++)
1155 			{
1156 				aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "\n" ) );
1157 				aDebStr += String::CreateFromInt32( nWhich );
1158 				aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "\t" ) );
1159 				if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_OFF )
1160 					aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "---" ) );
1161 				else if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE )
1162 					aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "XXX" ) );
1163 				else if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_ON )
1164 				{
1165 					const SfxPoolItem& rItem = aCurSet.Get( nWhich );
1166 					switch ( nWhich )
1167 					{
1168 						case EE_PARA_LRSPACE:
1169 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FI=" ) );
1170                             aDebStr += String::CreateFromInt32( ((SvxLRSpaceItem&)rItem).GetTxtFirstLineOfst() );
1171 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", LI=" ) );
1172                             aDebStr += String::CreateFromInt32( ((SvxLRSpaceItem&)rItem).GetTxtLeft() );
1173 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", RI=" ) );
1174 							aDebStr += String::CreateFromInt32( ((SvxLRSpaceItem&)rItem).GetRight() );
1175 						break;
1176 						case EE_PARA_ULSPACE:
1177 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "SB=" ) );
1178 							aDebStr += String::CreateFromInt32( ((SvxULSpaceItem&)rItem).GetUpper() );
1179 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", SA=" ) );
1180 							aDebStr += String::CreateFromInt32( ((SvxULSpaceItem&)rItem).GetLower() );
1181 						break;
1182 						case EE_PARA_SBL:
1183 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "SBL=" ) );
1184 							aDebStr += String::CreateFromInt32( ((SvxLineSpacingItem&)rItem).GetInterLineSpace() );
1185 						break;
1186 						case EE_PARA_JUST:
1187 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "SvxAdust=" ) );
1188 							aDebStr += String::CreateFromInt32( (USHORT)((SvxAdjustItem&)rItem).GetAdjust() );
1189 						break;
1190 						case EE_PARA_TABS:
1191 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "Tabs = ?" ) );
1192 						break;
1193 						case EE_CHAR_COLOR:
1194 						{
1195 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "Color= " ) );
1196 							Color aColor( ((SvxColorItem&)rItem).GetValue() );
1197 							aDebStr += String::CreateFromInt32( aColor.GetRed() );
1198 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
1199 							aDebStr += String::CreateFromInt32( aColor.GetGreen() );
1200 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
1201 							aDebStr += String::CreateFromInt32( aColor.GetBlue() );
1202 						}
1203 						break;
1204 						case EE_CHAR_FONTINFO:
1205 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "Font=" ) );
1206 							aDebStr += ((SvxFontItem&)rItem).GetFamilyName();
1207 						break;
1208 						case EE_CHAR_FONTHEIGHT:
1209 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "Groesse=" ) );
1210 							aDebStr += String::CreateFromInt32( ((SvxFontHeightItem&)rItem).GetHeight() );
1211 						break;
1212 						case EE_CHAR_WEIGHT:
1213 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontWeight=" ) );
1214 							aDebStr += String::CreateFromInt32( ((SvxWeightItem&)rItem).GetWeight() );
1215 						break;
1216 						case EE_CHAR_UNDERLINE:
1217 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontUnderline=" ) );
1218 							aDebStr += String::CreateFromInt32( ((SvxUnderlineItem&)rItem).GetLineStyle() );
1219 						break;
1220 						case EE_CHAR_WLM:
1221 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "WordLineMode=" ) );
1222 							aDebStr += String::CreateFromInt32( ((SvxWordLineModeItem&)rItem).GetValue() );
1223 						break;
1224 						case EE_CHAR_STRIKEOUT:
1225 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontStrikeout=" ) );
1226 							aDebStr += String::CreateFromInt32( ((SvxCrossedOutItem&)rItem).GetStrikeout() );
1227 						break;
1228 						case EE_CHAR_ITALIC:
1229 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontPosture=" ) );
1230 							aDebStr += String::CreateFromInt32( ((SvxPostureItem&)rItem).GetPosture() );
1231 						break;
1232 						case EE_CHAR_OUTLINE:
1233 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontOutline=" ) );
1234 							aDebStr += String::CreateFromInt32( ((SvxContourItem&)rItem).GetValue() );
1235 						break;
1236 						case EE_CHAR_SHADOW:
1237 							aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontShadowed=" ) );
1238 							aDebStr += String::CreateFromInt32( ((SvxShadowedItem&)rItem).GetValue() );
1239 						break;
1240 					}
1241 				}
1242 				else
1243 					aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "?" ) );
1244 			}
1245 			InfoBox( 0, aDebStr ).Execute();
1246 		}
1247 		break;
1248 	}
1249 
1250 	if ( pNewItem )
1251 	{
1252 		SfxItemSet aSet = pEditView->GetEmptyItemSet();
1253 		aSet.Put( *pNewItem );
1254 		pEditView->SetAttribs( aSet );
1255 		delete pNewItem;
1256 	}
1257 	UpdateToolBox();
1258 	return 0;
1259 }
1260 
CreatePolygon()1261 void EditMainWindow::CreatePolygon()
1262 {
1263 	EditView* pEditView = aViewWin.GetEditView();
1264 	Size aSz = pEditView->GetWindow()->GetOutputSize();
1265 	Point aOffset( aSz.Width()/8, aSz.Height()/8 );
1266 	aSz.Width() *= 3;
1267 	aSz.Width() /= 4;
1268 	aSz.Height() *= 3;
1269 	aSz.Height() /= 4;
1270 	Polygon aPoly( 5 );
1271 	aPoly.SetPoint( Point( aSz.Width()/2, 0 ), 0 );
1272 	aPoly.SetPoint( Point( aSz.Width(), aSz.Height()/3 ), 1 );
1273 	aPoly.SetPoint( Point( aSz.Width()/2, aSz.Height() ), 2 );
1274 	aPoly.SetPoint( Point( 0, aSz.Height()/2 ), 3 );
1275 	aPoly.SetPoint( Point( aSz.Width()/2, 0 ), 4 );
1276 	PolyPolygon aPPoly( aPoly );
1277 	pEditView->GetEditEngine()->SetPolygon( aPPoly );
1278 	pEditView->SetOutputArea( Rectangle( aOffset, aSz ) );
1279 	ULONG nWord = pEditView->GetControlWord();
1280 	nWord &= ~(EV_CNTRL_AUTOSCROLL);
1281 	pEditView->SetControlWord( nWord );
1282 	aViewWin.Invalidate();
1283 }
1284 
GetFocus()1285 void __EXPORT EditMainWindow::GetFocus()
1286 {
1287 	aViewWin.GrabFocus();
1288 }
1289 
IMPL_LINK_INLINE_START(EditMainWindow,HScrollHdl,ScrollBar *,pScrl)1290 IMPL_LINK_INLINE_START( EditMainWindow, HScrollHdl, ScrollBar *, pScrl )
1291 {
1292 	EditView* pEditView = aViewWin.GetEditView();
1293 	pEditView->Scroll( -pScrl->GetDelta(), 0, RGCHK_PAPERSZ1 );
1294 	return 0;
1295 }
IMPL_LINK_INLINE_END(EditMainWindow,HScrollHdl,ScrollBar *,pScrl)1296 IMPL_LINK_INLINE_END( EditMainWindow, HScrollHdl, ScrollBar *, pScrl )
1297 
1298 IMPL_LINK_INLINE_START( EditMainWindow, VScrollHdl, ScrollBar *, pScrl )
1299 {
1300 	EditView* pEditView = aViewWin.GetEditView();
1301 	pEditView->Scroll( 0, -pScrl->GetDelta(), RGCHK_PAPERSZ1 );
1302 	return 0;
1303 }
IMPL_LINK_INLINE_END(EditMainWindow,VScrollHdl,ScrollBar *,pScrl)1304 IMPL_LINK_INLINE_END( EditMainWindow, VScrollHdl, ScrollBar *, pScrl )
1305 
1306 void EditMainWindow::SetScrollBarRanges()
1307 {
1308 	EditView* pEditView = aViewWin.GetEditView();
1309 	long y = pEditView->GetEditEngine()->GetTextHeight();
1310 	long x = pEditView->GetEditEngine()->GetPaperSize().Width();
1311 
1312 	aHScrollBar.SetRange( Range( 0, x ) );
1313 	aVScrollBar.SetRange( Range( 0, y ) );
1314 }
1315 
SetScrollBars()1316 void EditMainWindow::SetScrollBars()
1317 {
1318 	EditView* pEditView = aViewWin.GetEditView();
1319 	Size aSz = GetOutputSizePixel();
1320 	Size aRealSz( aSz );
1321 	long nScrollbarWidthPixel = aVScrollBar.GetSizePixel().Width();
1322 	long nTBHeight = aToolBox.GetSizePixel().Height();
1323 	aSz.Height() -= nTBHeight;
1324 	Size aOrgSz( aSz );
1325 
1326 	// VScroll...
1327 	aSz.Height() += 2;
1328 	Point aPoint( ( aSz.Width()- nScrollbarWidthPixel+1 ), -1+nTBHeight);
1329 	aSz.Width() = nScrollbarWidthPixel;
1330 	aVScrollBar.SetPosSizePixel( aPoint, aSz );
1331 
1332 	// HScroll...
1333 	aSz = aOrgSz;
1334 	Point aPoint2( 0, aRealSz.Height()-aHScrollBar.GetSizePixel().Height()+1 ); // TB-Height schon drin!
1335 	aSz.Width() -= aVScrollBar.GetSizePixel().Width();
1336 	aSz.Width() += 2;
1337 
1338 	aSz.Height() = nScrollbarWidthPixel;
1339 	aHScrollBar.SetPosSizePixel( aPoint2, aSz );
1340 
1341 	aHScrollBar.SetVisibleSize( pEditView->GetOutputArea().GetWidth() );
1342 	aVScrollBar.SetVisibleSize( pEditView->GetOutputArea().GetHeight() );
1343 
1344 	SetScrollBarRanges();
1345 
1346 	aVScrollBar.Show();
1347 	aHScrollBar.Show();
1348 }
1349 
Resize()1350 void __EXPORT EditMainWindow::Resize()
1351 {
1352 	long nBorder = aVScrollBar.GetSizePixel().Width();
1353 	long nExtra = 10;
1354 	Size aTBSz = aToolBox.CalcWindowSizePixel();
1355 	Size aOutSzPixel( GetOutputSizePixel() );
1356 	aToolBox.SetSizePixel( Size( aOutSzPixel.Width(), aTBSz.Height()) );
1357 
1358 	aViewWin.SetSizePixel( Size( aOutSzPixel.Width()-nBorder-2*nExtra, aOutSzPixel.Height()-aTBSz.Height()-2*nExtra-nBorder) );
1359 
1360 	aViewWin.SetPosPixel( Point( nExtra, aTBSz.Height()+nExtra ) );
1361 
1362 	SetScrollBars();
1363 
1364 	EditView* pEditView = aViewWin.GetEditView();
1365 	if ( pEditView && pEditView->GetEditEngine()->GetPolygon() )
1366 		CreatePolygon();
1367 }
1368 
IMPL_LINK(EditMainWindow,ShowStatus,EditStatus *,pStat)1369 IMPL_LINK( EditMainWindow, ShowStatus, EditStatus *, pStat )
1370 {
1371 	EditView* pEditView = aViewWin.GetEditView();
1372 	EditEngine* pEditEngine = pEditView->GetEditEngine();
1373 	if ( ( pStat->GetStatusWord() & EE_STAT_TEXTWIDTHCHANGED ) || ( pStat->GetStatusWord() & EE_STAT_TEXTHEIGHTCHANGED ) )
1374 	{
1375 		aViewWin.MarkOutputArea();
1376 		if ( pEditEngine->GetTextHeight() < (ULONG)pEditView->GetOutputArea().GetHeight() )
1377 		{
1378 			// Wird durch RGCHK_PAPERSZ1 'geklippt'
1379 			if ( !( pEditEngine->GetControlWord() & EE_CNTRL_AUTOPAGESIZE) )
1380 				pEditView->Scroll( -(long)pEditEngine->CalcTextWidth(), -(long)pEditEngine->GetTextHeight(), RGCHK_PAPERSZ1 );
1381 		}
1382 		SetScrollBarRanges();
1383 	}
1384 	if ( pStat->GetStatusWord() & EE_STAT_HSCROLL )
1385 		aHScrollBar.SetThumbPos( pEditView->GetVisArea().Left() );
1386 	if ( pStat->GetStatusWord() & EE_STAT_VSCROLL )
1387 		aVScrollBar.SetThumbPos( pEditView->GetVisArea().Top() );
1388 
1389 	return 0;
1390 }
1391 
1392 
~EditViewWindow()1393 EditViewWindow::~EditViewWindow()
1394 {
1395 	// erst die angemeldeten Views zerstoeren
1396 	// (melden sich selbst ab)
1397 	MyView* pView = aViewList.First();
1398 	while ( pView )
1399 	{
1400 		delete pView;
1401 		pView = aViewList.Next();
1402 	}
1403 
1404 	pEditEngine->RemoveView( pEditView );
1405 	delete pEditView;
1406 	// Beim Zerstoeren der Styles am Ende, EditEngine noch nicht kaputt,
1407 	// wird der Handler gerufen, ich zerstore hier aber schon die View!
1408 	pEditEngine->SetStatusEventHdl( Link() );
1409 //	SvxAutoCorrect* pAutoCorrekt = pEditEngine->GetAutoCorrect();
1410 //	pEditEngine->SetAutoCorrect( 0 );
1411 //	delete pAutoCorrekt;
1412 	delete pEditEngine;
1413 }
1414 
EditViewWindow(Window * pParent)1415 EditViewWindow::EditViewWindow( Window* pParent ) :
1416 				Window( pParent ), aURLPtr( POINTER_HAND )
1417 {
1418 	SetBackgroundBrush( Brush( Color( COL_WHITE ) ) );
1419 	SetMapMode( MAP_100TH_MM );
1420 //	EnableDrop();
1421 
1422 	SfxItemPool* pPool = EditEngine::CreatePool();
1423 	Font aFont = GetSettings().GetStyleSettings().GetAppFont();
1424 	MapMode aPntMode( MAP_POINT );
1425 	MapMode aCurrent( GetMapMode() );
1426 	Size aSz( LogicToLogic( Size( 12, 0 ), &aPntMode, &aCurrent ) );
1427 	aFont.SetName( String( RTL_CONSTASCII_USTRINGPARAM( "Times New Roman" ) ) );
1428 	pPool->SetPoolDefaultItem( SvxFontItem( aFont.GetFamily(), aFont.GetName(), String(),aFont.GetPitch(), aFont.GetCharSet(), EE_CHAR_FONTINFO ) );
1429 	pPool->SetPoolDefaultItem( SvxFontHeightItem( aSz.Width(), 100, EE_CHAR_FONTHEIGHT ) );
1430 	pEditEngine = new MyEditEngine( pPool );
1431 
1432 	Size aPaperSz( 10000,8000 );
1433 	pEditEngine->SetPaperSize( aPaperSz );
1434 
1435 	pEditView = new EditView( pEditEngine, this );
1436 	pEditView->SetBackgroundColor( Color( COL_WHITE ) );
1437 	pEditView->SetOutputArea( Rectangle( Point( 100, 100 ), aPaperSz ) );
1438 	pEditEngine->SetDefaultLanguage( LANGUAGE_ENGLISH );
1439 	pEditEngine->InsertView( pEditView );
1440 
1441 	SetPosSizePixel( Point( 10, 10 ), Size( 600, 400 ) );
1442 	SetPen( PEN_NULL );
1443 	Show();
1444 
1445 	// Feldbefehle grau hinterlegen
1446 	ULONG n = pEditEngine->GetControlWord();
1447 	n = n | (EE_CNTRL_MARKFIELDS|EE_CNTRL_AUTOCOMPLETE);
1448 	pEditEngine->SetControlWord( n );
1449 
1450 	// Test: Autozentrierung
1451 //	ULONG n = pEditEngine->GetControlWord();
1452 //	n = n | EE_CNTRL_AUTOPAGESIZE;
1453 //	pEditEngine->SetControlWord( n );
1454 
1455 	// OneLineSpeling
1456 #ifdef WNT
1457 //	pEditEngine->CreateSpeller( DirEntry( String( RTL_CONSTASCII_USTRINGPARAM( "n:\\offenv\\wnti" ) ) ),
1458 //								DirEntry( String( RTL_CONSTASCII_USTRINGPARAM( "n:\\offenv\\wnti" ) ) ) );
1459 //	pEditEngine->GetSpeller()->SetActualLanguage( LANGUAGE_GERMAN );
1460 //	pEditEngine->GetSpeller()->SetDefaultLanguage( LANGUAGE_GERMAN );
1461 //	pEditEngine->GetSpeller()->SetMinTrail( 2 );
1462 
1463 	// AutoCorrect wird nie zerstoert
1464 //	pEditEngine->SetAutoCorrect( new SvxAutoCorrect( String( RTL_CONSTASCII_USTRINGPARAM( "d:\\prj\\office\\autotext\\autocorr.dat" ) ) ) );
1465 #endif
1466 }
1467 
Paint(const Rectangle & rRec)1468 void __EXPORT EditViewWindow::Paint( const Rectangle& rRec )
1469 {
1470 	if ( pEditView->GetEditEngine()->GetPolygon() )
1471 	{
1472 		// Die Punkte des Polygons beziehen sich auf die View...
1473 		MapMode aMapMode( GetMapMode() );
1474 		aMapMode.SetOrigin( pEditView->GetOutputArea().TopLeft() );
1475 		SetMapMode( aMapMode );
1476 		DrawPolyPolygon( *pEditView->GetEditEngine()->GetPolygon() );
1477 		aMapMode.SetOrigin( Point() );
1478 		SetMapMode( aMapMode );
1479 	}
1480 	pEditView->Paint( rRec );
1481 	MarkOutputArea();
1482 }
1483 
MarkOutputArea()1484 void EditViewWindow::MarkOutputArea()
1485 {
1486 	static Rectangle aCurFrame;
1487 	Rectangle aOutArea( pEditView->GetOutputArea() );
1488 	aOutArea = LogicToPixel( aOutArea );
1489 	aOutArea.Left()--;
1490 	aOutArea.Right()++;
1491 	aOutArea.Top()--;
1492 	aOutArea.Bottom()++;
1493 	aOutArea = PixelToLogic( aOutArea );
1494 	SetPen( Pen( Color( COL_RED ) ) );
1495 	SetFillInBrush( Brush( BRUSH_NULL ) );
1496 	DrawRect( aOutArea );
1497 	if ( !aCurFrame.IsEmpty() )
1498 	{
1499 		if ( aCurFrame.Left() < aOutArea.Left() )
1500 			Invalidate( Rectangle( aCurFrame.TopLeft(), Size( aOutArea.Left()-aCurFrame.Left(), aCurFrame.GetHeight() ) ) );
1501 		if ( aCurFrame.Right() > aOutArea.Right() )
1502 		{
1503 			long nW = aCurFrame.Right() - aOutArea.Right();
1504 			Point aPos( aCurFrame.TopRight() );
1505 			aPos.X() -= nW;
1506 			Invalidate( Rectangle( aPos, Size( nW, aCurFrame.GetHeight() ) ) );
1507 		}
1508 		if ( aCurFrame.Top() < aOutArea.Top() )
1509 			Invalidate( Rectangle( aCurFrame.TopLeft(), Size( aCurFrame.GetWidth(), aOutArea.Top() - aCurFrame.Top() ) ) );
1510 		if ( aCurFrame.Bottom() > aOutArea.Bottom() )
1511 		{
1512 			long nH = aCurFrame.Bottom() - aOutArea.Bottom();
1513 			Point aPos( aCurFrame.BottomLeft() );
1514 			aPos.Y() -= nH;
1515 			Invalidate( Rectangle( aPos, Size( aCurFrame.GetWidth(), nH ) ) );
1516 		}
1517 	}
1518 	aCurFrame = aOutArea;
1519 }
1520 
Resize()1521 void __EXPORT EditViewWindow::Resize()
1522 {
1523 	Size aPaperSz( GetOutputSize() );
1524 	pEditView->SetOutputArea( Rectangle( Point(0,0), aPaperSz ) );
1525 	pEditEngine->SetPaperSize( Size( aPaperSz.Width()*1, aPaperSz.Height()*1 ) );
1526 	pEditView->ShowCursor();
1527 	Invalidate();
1528 }
1529 
KeyInput(const KeyEvent & rKEvt)1530 void __EXPORT EditViewWindow::KeyInput( const KeyEvent& rKEvt )
1531 {
1532 	sal_Unicode nCharCode = rKEvt.GetCharCode();
1533 
1534 	USHORT nCode = rKEvt.GetKeyCode().GetCode();
1535 	// Auswertung fuer besondere Einstellungen....
1536 	if ( ( nCode == KEY_A) && rKEvt.GetKeyCode().IsMod1() )
1537 		pEditView->SetSelection( ESelection( 0, 0, 0xFFFF, 0xFFFF ) );
1538 	else if ( ( nCode == KEY_R ) && rKEvt.GetKeyCode().IsMod2() )
1539 		Invalidate();
1540 	else if ( ( nCode == KEY_L ) && rKEvt.GetKeyCode().IsMod2() )
1541 	{
1542 		ULONG n = pEditEngine->GetControlWord();
1543 		n = n | EE_CNTRL_ONECHARPERLINE;
1544 		pEditEngine->SetControlWord( n );
1545 		pEditEngine->QuickFormatDoc();
1546 	}
1547 	else if ( ( nCode == KEY_Z ) && rKEvt.GetKeyCode().IsMod2() )
1548 	{
1549 		pEditView->RemoveAttribs();
1550 	}
1551 	else if ( ( nCode == KEY_V ) && rKEvt.GetKeyCode().IsMod2() )
1552 	{
1553 		pEditEngine->SetVertical( TRUE );
1554 		Invalidate();
1555 	}
1556 	else if ( ( ( nCode == KEY_ADD ) || ( nCode == KEY_SUBTRACT ) )&& rKEvt.GetKeyCode().IsMod2() )
1557 	{
1558 		short nDiff = ( nCode == KEY_ADD ) ? (+5) : (-5);
1559 		if ( nZoom > 1000 )
1560 			nDiff *= 20;
1561 		if ( nZoom <= 25 )
1562 			nDiff /= 5;
1563 		if ( ( nZoom + nDiff ) > 0 )
1564 			nZoom += nDiff;
1565 		MapMode aMapMode( MAP_100TH_MM, Point(0,0), Fraction(nZoom,100), Fraction(nZoom,100) );
1566 		SetMapMode( aMapMode );
1567 		((EditMainWindow*)GetParent())->SetTitle();
1568 
1569 		if ( rKEvt.GetKeyCode().IsMod1() )
1570 		{
1571 			InfoBox( 0, String( RTL_CONSTASCII_USTRINGPARAM( "ChangingRefMapMode..." ) ) ).Execute();
1572 			pEditEngine->SetRefMapMode( aMapMode );
1573 		}
1574 		Invalidate();
1575 	}
1576 	else if ( rKEvt.GetKeyCode().IsMod2() &&
1577 			( ( nCode == KEY_UP) || ( nCode == KEY_DOWN ) ||
1578 			  ( nCode == KEY_LEFT ) || ( nCode == KEY_RIGHT ) ) )
1579 	{
1580 		if( rKEvt.GetKeyCode().IsMod1() )
1581 		{
1582 			ULONG nCtrl = pEditEngine->GetControlWord();
1583 			if ( ! ( nCtrl & EE_CNTRL_STRETCHING ) )
1584 			{
1585 				nCtrl |= EE_CNTRL_STRETCHING;
1586 				pEditEngine->SetControlWord( nCtrl );
1587 			}
1588 			USHORT nX, nY;
1589 			pEditEngine->GetGlobalCharStretching( nX, nY );
1590 			if ( ( nCode == KEY_DOWN ) && ( nY > 5 ) )
1591 				nY += 5;
1592 			else if ( nCode == KEY_UP )
1593 				nY -= 5;
1594 			else if ( nCode == KEY_RIGHT )
1595 				nX += 5;
1596 			else if ( ( nCode == KEY_LEFT ) && ( nX > 5 ) )
1597 				nX -= 5;
1598 			pEditEngine->SetGlobalCharStretching( nX, nY );
1599 			((EditMainWindow*)GetParent())->SetTitle();
1600 		}
1601 		else	// ZeichenAttr
1602 		{
1603 			SfxItemSet aAttrs( pEditView->GetAttribs() );
1604 			SfxItemSet aNewAttrs( pEditEngine->GetEmptyItemSet() );
1605 			const SvxFontWidthItem& rItem = (const SvxFontWidthItem&)aAttrs.Get( EE_CHAR_FONTWIDTH );
1606 			USHORT nProp = rItem.GetProp();
1607 			if ( nCode == KEY_RIGHT )
1608 				nProp += 5;
1609 			else if ( ( nCode == KEY_LEFT ) && ( nProp > 5 ) )
1610 				nProp -= 5;
1611 			aNewAttrs.Put( SvxFontWidthItem( 0, nProp, EE_CHAR_FONTWIDTH ) );
1612 			pEditView->SetAttribs( aNewAttrs );
1613 		}
1614 	}
1615 	else if ( ( nCode == KEY_O ) && rKEvt.GetKeyCode().IsMod2() )
1616 	{
1617 		MapMode aMapMode( GetMapMode() );
1618 		aMapMode.SetOrigin( Point( 41, 41 ) );
1619 		SetMapMode( aMapMode );
1620 		Invalidate();
1621 	}
1622 	else if ( ( nCode == KEY_B ) && rKEvt.GetKeyCode().IsMod2() )
1623 	{
1624 		SfxItemSet aSet = pEditView->GetEmptyItemSet();
1625 		aSet.Put( SvxFontHeightItem(800, 100, EE_CHAR_FONTHEIGHT) );
1626 		pEditView->SetAttribs( aSet );
1627 	}
1628 	else if ( ( nCode == KEY_P ) && rKEvt.GetKeyCode().IsMod2() )
1629 	{
1630 //				ESelection aSel = pEditView->GetSelection();
1631 //				for ( ULONG n = aSel.nStartPara; n <= aSel.nEndPara; n++ )
1632 //				{
1633 //					InfoBox( 0, pEditEngine->GetText( n ) ).Execute();
1634 //				}
1635 		InfoBox( 0, pEditView->GetSelected() ).Execute();
1636 
1637 	}
1638 	else if ( rKEvt.GetKeyCode().IsMod2() &&
1639 				( nCode >= KEY_1 ) && ( nCode <= KEY_9 ) )
1640 	{
1641 		ULONG nEECtrl = pEditEngine->GetControlWord();
1642 		nEECtrl = nEECtrl | EE_CNTRL_AUTOPAGESIZE;
1643 		pEditEngine->SetControlWord( nEECtrl );
1644 
1645 		ULONG nEVCtrl = pEditView->GetControlWord();
1646 		nEVCtrl |= EV_CNTRL_AUTOSIZE;
1647 		pEditView->SetControlWord( nEVCtrl );
1648 
1649 		pEditView->SetAnchorMode( (EVAnchorMode)(nCode-KEY_1) );
1650 		pEditView->SetOutputArea( Rectangle( Point(0,0), GetOutputSize() ) );
1651 		pEditEngine->SetMaxAutoPaperSize( GetOutputSize() );
1652 		pEditEngine->SetPaperSize( Size( 0, 0 ) );
1653 	}
1654 	else if ( rKEvt.GetKeyCode().IsMod2() && ( nCode == KEY_0 ) )
1655 	{
1656 		ULONG nEVCtrl = pEditView->GetControlWord();
1657 		nEVCtrl = nEVCtrl | EV_CNTRL_AUTOSIZE;
1658 		pEditView->SetControlWord( nEVCtrl );
1659 
1660 		Size aOutSz( GetOutputSize() );
1661 		Size aPaperSz( aOutSz.Width() / 2, 0 );
1662 		pEditView->SetOutputArea( Rectangle( Point(), aPaperSz ) );
1663 		pEditEngine->SetPaperSize( aPaperSz );
1664 		// Max-Height wird bei View verwendet,
1665 		// MinSize/MaxSize nur, wenn AUTOPAGESIZE ( KEY_1 - KEY_9 )
1666 		pEditEngine->SetMaxAutoPaperSize( Size( aOutSz.Width() / 2, aOutSz.Height() / 2 ) );
1667 		pEditEngine->SetMinAutoPaperSize( Size( aOutSz.Width() / 8, aOutSz.Height() / 8 ) );
1668 	}
1669 	else if ( ( nCode == KEY_J ) && rKEvt.GetKeyCode().IsMod2() )
1670 	{
1671 		Size aTextSz( pEditEngine->CalcTextWidth(), pEditEngine->GetTextHeight() );
1672 		Rectangle aRect( pEditView->GetOutputArea().TopLeft(), aTextSz );
1673 		Brush aTmpBrush( Color( COL_LIGHTBLUE ), BRUSH_25 );
1674 		Brush aOldBrush( GetFillInBrush() );
1675 		SetFillInBrush( aTmpBrush );
1676 		DrawRect( aRect );
1677 		SetFillInBrush( aOldBrush );
1678 		pEditView->Paint( aRect );
1679 	}
1680 	else if ( ( nCode == KEY_H ) && rKEvt.GetKeyCode().IsMod2() )
1681 	{
1682 		Push();
1683 		Size aSz( pEditEngine->CalcTextWidth(), pEditEngine->GetTextHeight() );
1684 		Pen aPen( PEN_SOLID );
1685 		Brush aBrush( Color( COL_GRAY ), BRUSH_SOLID );
1686 		aPen.SetColor( Color( COL_BLACK ) );
1687 		SetPen( aPen );
1688 		SetFillInBrush( aBrush );
1689 		Rectangle aR( pEditView->GetOutputArea().TopLeft(), aSz );
1690 		DrawRect( aR );
1691 		Pop();
1692 		pEditEngine->Draw( this, pEditView->GetOutputArea() );
1693 		pEditView->ShowCursor( TRUE, TRUE );
1694 	}
1695 
1696 	// Eingabe an EditEngine...
1697 	else
1698 	{
1699 		BOOL bDone = pEditView->PostKeyEvent( rKEvt );
1700 		if ( !bDone )
1701 			Window::KeyInput( rKEvt );
1702 	}
1703 
1704 	((EditMainWindow*)GetParent())->UpdateToolBox();
1705 }
1706 
MouseMove(const MouseEvent & rMEvt)1707 void __EXPORT EditViewWindow::MouseMove( const MouseEvent& rMEvt )
1708 {
1709 	Point aPos = PixelToLogic( rMEvt.GetPosPixel() );
1710 	if ( pEditView->GetOutputArea().IsInside( aPos ) )
1711 	{
1712 		const SvxFieldItem* pField = pEditView->GetFieldUnderMousePointer();
1713 		if ( pField )
1714 			SetPointer( aURLPtr );
1715 		else
1716 			SetPointer( pEditView->GetPointer() );
1717 
1718 //		aPos -= pEditView->GetOutputArea().TopLeft();
1719 //		aPos += pEditView->GetVisArea().TopLeft();
1720 //		if ( pEditView->GetEditEngine()->IsTextPos( aPos, PixelToLogic( Size( 5, 0 ) ).Width() ) )
1721 //			SetPointer( pEditView->GetPointer() );
1722 //		else
1723 //			SetPointer( Pointer( POINTER_REFHAND ) );
1724 
1725 	}
1726 	else
1727 		SetPointer( aStdPtr );
1728 
1729 //	static long x = 0;
1730 //	x++;
1731 //	DBG_ASSERT( x < 1000, String( RTL_CONSTASCII_USTRINGPARAM( "?" ) ) );
1732 	pEditView->MouseMove( rMEvt );
1733 }
1734 
MouseButtonDown(const MouseEvent & rMEvt)1735 void __EXPORT EditViewWindow::MouseButtonDown( const MouseEvent& rMEvt )
1736 {
1737 	GrabFocus();
1738 	pEditView->MouseButtonDown( rMEvt );
1739 }
1740 
MouseButtonUp(const MouseEvent & rMEvt)1741 void __EXPORT EditViewWindow::MouseButtonUp( const MouseEvent& rMEvt )
1742 {
1743 	pEditView->MouseButtonUp( rMEvt );
1744 	((EditMainWindow*)GetParent())->UpdateToolBox();
1745 }
1746 
Command(const CommandEvent & rCEvt)1747 void __EXPORT EditViewWindow::Command( const CommandEvent& rCEvt )
1748 {
1749 	if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
1750 	{
1751 		if( pEditView->IsWrongSpelledWordAtPos( rCEvt.GetMousePosPixel() ) )
1752 			pEditView->ExecuteSpellPopup( rCEvt.GetMousePosPixel() );
1753 	}
1754 	else
1755 		pEditView->Command(rCEvt);
1756 
1757 }
1758 
Drop(const DropEvent & rEvt)1759 BOOL __EXPORT EditViewWindow::Drop( const DropEvent& rEvt )
1760 {
1761 	return pEditView->Drop( rEvt );
1762 }
1763 
QueryDrop(DropEvent & rEvt)1764 BOOL __EXPORT EditViewWindow::QueryDrop( DropEvent& rEvt )
1765 {
1766 	return pEditView->QueryDrop( rEvt );
1767 }
1768 
1769 // --- aEditApp ------------------------------------------------------
1770 
Main()1771 void __EXPORT EditApp::Main()
1772 {
1773 #ifdef WNT
1774 	SvFactory::Init();
1775 #endif
1776 
1777     ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory >  xSMgr = createApplicationServiceManager();
1778 	::comphelper::setProcessServiceFactory( xSMgr );
1779 
1780 	EditDLL aEditDll;
1781 	SvxGlobalItemData aItemData;
1782 	SvxFieldItem::GetClassManager().SV_CLASS_REGISTER( SvxDateField );
1783 	SvxFieldItem::GetClassManager().SV_CLASS_REGISTER( SvxURLField );
1784 
1785 	Help::EnableQuickHelp();
1786 
1787 	EditMainWindow aWindow;
1788 	Execute();
1789 }
1790 
1791 EditApp aEditApp;
1792