Version 3.6.0.4, tag libreoffice-3.6.0.4
[LibreOffice.git] / svx / workben / edittest.cxx
blobf204a9470976ad16739bd2e306ecdc73763fd28d
1 /* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2 /*************************************************************************
4 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
6 * Copyright 2000, 2010 Oracle and/or its affiliates.
8 * OpenOffice.org - a multi-platform office productivity suite
10 * This file is part of OpenOffice.org.
12 * OpenOffice.org is free software: you can redistribute it and/or modify
13 * it under the terms of the GNU Lesser General Public License version 3
14 * only, as published by the Free Software Foundation.
16 * OpenOffice.org is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
19 * GNU Lesser General Public License version 3 for more details
20 * (a copy is included in the LICENSE file that accompanied this code).
22 * You should have received a copy of the GNU Lesser General Public License
23 * version 3 along with OpenOffice.org. If not, see
24 * <http://www.openoffice.org/license.html>
25 * for a copy of the LGPLv3 License.
27 ************************************************************************/
30 #include <editeng/editeng.hxx>
31 #include <editeng/eeitem.hxx>
32 #include <editeng/editview.hxx>
33 #include <editeng/editobj.hxx>
34 #include <editeng/editstat.hxx>
35 #include <eerdll.hxx>
36 #include <editeng/flditem.hxx>
37 #include <svx/svxacorr.hxx>
38 #include <tools/fsys.hxx>
39 #include <svx/xpoly.hxx>
41 #include <vcl/window.hxx>
42 #include <vcl/svapp.hxx>
43 #include <vcl/font.hxx>
44 #include <vcl/sound.hxx>
45 #include <vcl/print.hxx>
46 #include <vcl/toolbox.hxx>
47 #include <vcl/help.hxx>
48 #include <vcl/scrbar.hxx>
49 #include <vcl/wrkwin.hxx>
50 #include <vcl/msgbox.hxx>
52 #include <dialdll.hxx>
54 #define SERVICE_SIMPLEREGISTRY "com.sun.star.registry.SimpleRegistry"
55 #include <comphelper/processfactory.hxx>
56 #include <cppuhelper/servicefactory.hxx>
57 #include <cppuhelper/bootstrap.hxx>
58 #include <com/sun/star/lang/XMultiServiceFactory.hpp>
59 #include <com/sun/star/lang/XInitialization.hpp>
60 #include <com/sun/star/registry/XSimpleRegistry.hpp>
61 #include <sfx2/sfxuno.hxx>
63 // SVX
64 #include <editeng/lrspitem.hxx>
65 #include <editeng/shdditem.hxx>
66 #include <editeng/cntritem.hxx>
67 #include <editeng/crsditem.hxx>
68 #include <editeng/udlnitem.hxx>
69 #include <editeng/lspcitem.hxx>
70 #include <editeng/escpitem.hxx>
71 #include <editeng/kernitem.hxx>
72 #include <editeng/akrnitem.hxx>
73 #include <editeng/wrlmitem.hxx>
74 #include <editeng/colritem.hxx>
75 #include <editeng/ulspitem.hxx>
76 #include <editeng/postitem.hxx>
77 #include <editeng/adjitem.hxx>
78 #include <editeng/wghtitem.hxx>
79 #include <editeng/fhgtitem.hxx>
80 #include <editeng/fontitem.hxx>
81 #include <fwdtitem.hxx>
83 // SVTOOLS
84 #include <svl/undo.hxx>
85 #include <svl/itemset.hxx>
86 #include <svl/itempool.hxx>
87 #include <svl/poolitem.hxx>
88 #include <svtools/printdlg.hxx>
90 #include <osl/file.hxx>
91 #include <osl/process.h>
92 #include <rtl/bootstrap.hxx>
94 #define TB_LEFT 1
95 #define TB_RIGHT 2
96 #define TB_CENTER 3
97 #define TB_UNDO 4
98 #define TB_REDO 5
99 #define TB_FONT1 6
100 #define TB_FONT2 7
101 #define TB_ITALIC 8
102 #define TB_BOLD 9
103 #define TB_UNDERLINE 10
104 #define TB_BLACK 11
105 #define TB_GREEN 12
106 #define TB_OPEN 13
107 #define TB_SAVE 14
108 #define TB_SBL 15
109 #define TB_SBSA 16
110 #define TB_LR 17
111 #define TB_DRAW 18
112 #define TB_DEFTAB 19
113 #define TB_OPEN2 20
114 #define TB_SAVE2 21
115 #define TB_STDSEL 33
116 #define TB_MOVE 34
117 #define TB_PARATTR1 35
118 #define TB_ROTATE 38
119 #define TB_RED 43
120 #define TB_FLAT 46
121 #define TB_BINOBJ1 47
122 #define TB_BINOBJ3 49
123 #define TB_BINOBJ4 50
124 #define TB_BINOBJ1b 51
125 #define TB_BINOBJ2b 52
126 #define TB_ATTRIBS 54
127 #define TB_IDLE 55
128 #define TB_BLOCK 56
129 #define TB_CLONEBIN 57
130 #define TB_INSERT 58
131 #define TB_PKERN 59
132 #define TB_KERN 60
133 #define TB_SUPER 61
134 #define TB_SUB 62
135 #define TB_PRINT 63
136 #define TB_FONT 64
137 #define TB_COLORS 65
138 #define TB_WLM 66
139 #define TB_OUTL 67
140 #define TB_INSFLD 68
141 #define TB_UPDFLD 69
142 #define TB_ONLINESPELL 70
143 #define TB_REDLINES 71
144 #define TB_AUTOCORRECT 72
145 #define TB_POLY 73
146 #define TB_HYPH 74
148 // VARS...
149 short nRotation = 0;
150 USHORT nZoom = 100;
151 sal_Bool bURLClicked = sal_False;
153 using namespace ::com::sun::star::connection;
154 using namespace ::vos;
155 using namespace ::rtl;
156 using namespace ::com::sun::star::uno;
157 using namespace ::com::sun::star::registry;
158 using namespace ::com::sun::star::lang;
162 Reference< XMultiServiceFactory > createApplicationServiceManager()
164 Reference< XMultiServiceFactory > xMS;
167 Reference< XComponentContext > xComponentContext = ::cppu::defaultBootstrap_InitialComponentContext();
168 if ( xComponentContext.is() )
169 xMS = xMS.query( xComponentContext->getServiceManager() );
171 catch( ::com::sun::star::uno::Exception& )
175 return xMS;
178 // --- class EditApp -------------------------------------------------
180 SV_DECL_PTRARR_DEL( StringList, String*, 0 );
181 SV_IMPL_PTRARR( StringList, String* );
182 StringList aSimpleHistory;
184 class EditApp : public Application
186 public:
187 virtual void Main();
190 class MyEditEngine : public EditEngine
192 public:
193 MyEditEngine( SfxItemPool* pPool ) : EditEngine( pPool ) { ; }
194 virtual String CalcFieldValue( const SvxFieldItem& rField, USHORT nPara, USHORT nPos, Color*& rTxtColor, Color*& rFldColor );
195 virtual void FieldClicked( const SvxFieldItem& rField, USHORT nPara, USHORT nPos );
196 virtual void FieldSelected( const SvxFieldItem& rField, USHORT nPara, USHORT nPos );
199 XubString __EXPORT MyEditEngine::CalcFieldValue( const SvxFieldItem& rField, USHORT nPara, USHORT nPos, Color*& rpTxtColor, Color*& rpFldColor )
201 const SvxFieldData* pField = rField.GetField();
202 if ( !pField )
203 return String( RTL_CONSTASCII_USTRINGPARAM( "<Empty>" ) );
205 if ( pField->ISA( SvxDateField ) )
206 return ((const SvxDateField*)pField)->GetFormatted( LANGUAGE_SYSTEM, LANGUAGE_SYSTEM );
207 else if ( pField->ISA( SvxURLField ) )
209 const SvxURLField* pURL = (const SvxURLField*)pField;
210 if ( !bURLClicked )
212 delete rpTxtColor;
213 rpTxtColor = new Color( COL_BLUE );
215 else
217 delete rpTxtColor;
218 rpTxtColor = new Color( COL_RED );
219 delete rpFldColor;
220 rpFldColor = new Color( COL_YELLOW );
222 if ( pURL->GetFormat() == SVXURLFORMAT_URL )
223 return pURL->GetURL();
224 return pURL->GetRepresentation();
226 return String( RTL_CONSTASCII_USTRINGPARAM( "???" ) );
229 void __EXPORT MyEditEngine::FieldClicked( const SvxFieldItem& rField, USHORT nPara, USHORT nPos )
231 EditEngine::FieldClicked( rField, nPara, nPos ); // Falls URL
232 const SvxFieldData* pField = rField.GetField();
233 if ( !pField )
234 return;
236 if ( pField->ISA( SvxURLField ) )
238 bURLClicked = TRUE;
239 UpdateFields();
241 else
242 Sound::Beep();
245 void __EXPORT MyEditEngine::FieldSelected( const SvxFieldItem& rField, USHORT nPara, USHORT nPos )
247 const SvxFieldData* pField = rField.GetField();
248 if ( !pField )
249 return;
251 InfoBox( 0, String( RTL_CONSTASCII_USTRINGPARAM( "Feld selektiert!" ) ) ).Execute();
255 class MyView : public WorkWindow
257 private:
258 EditEngine* pEditEngine;
259 EditView* pEditView;
261 public:
262 MyView( Window* pParent, EditEngine* pEditEngine );
263 ~MyView();
265 virtual void Paint( const Rectangle& );
266 virtual void Resize();
267 virtual void KeyInput( const KeyEvent& rKeyEvt );
268 virtual void MouseMove( const MouseEvent& rMEvt );
269 virtual void MouseButtonDown( const MouseEvent& rMEvt );
270 virtual void MouseButtonUp( const MouseEvent& rMEvt );
271 virtual void Command( const CommandEvent& rCEvt );
272 BOOL Drop( const DropEvent& rEvt );
273 BOOL QueryDrop( DropEvent& rEvt );
276 MyView::MyView( Window* pParent, EditEngine* pEE ) : WorkWindow( pParent, WinBits( WB_STDWORK ) )
278 pEditEngine = pEE;
279 pEditView = new EditView( pEditEngine, this );
280 pEditEngine->InsertView( pEditView );
281 SetText( String( RTL_CONSTASCII_USTRINGPARAM( "Another View..." ) ) );
282 // EnableDrop();
283 SetBackgroundBrush( Brush( Color( COL_LIGHTBLUE ) ) );
284 Show();
287 MyView::~MyView()
289 pEditEngine->RemoveView( pEditView );
290 delete pEditView;
293 void __EXPORT MyView::Paint( const Rectangle& rRec )
295 pEditView->Paint( rRec );
298 void __EXPORT MyView::Resize()
300 Size aPaperSz( GetOutputSize() );
301 // aPaperSz.Width() /= 2;
302 // aPaperSz.Height() /= 2;
303 pEditView->SetOutputArea( Rectangle( Point( 0,0 ), aPaperSz ) );
304 pEditView->SetVisArea( Rectangle( Point( 0,0 ), aPaperSz ) );
305 Invalidate();
306 pEditView->ShowCursor();
309 // --- MyView::KeyInput() --------------------------------------
310 void __EXPORT MyView::KeyInput( const KeyEvent& rKEvt )
312 pEditView->PostKeyEvent( rKEvt );
315 void __EXPORT MyView::MouseMove( const MouseEvent& rMEvt )
317 Point aPos = PixelToLogic( rMEvt.GetPosPixel() );
318 if ( pEditView->GetOutputArea().IsInside( aPos ) )
319 SetPointer( pEditView->GetPointer() );
320 else
321 SetPointer( Pointer() );
324 pEditView->MouseMove( rMEvt );
327 void __EXPORT MyView::MouseButtonDown( const MouseEvent& rMEvt )
329 pEditView->MouseButtonDown( rMEvt );
332 void __EXPORT MyView::MouseButtonUp( const MouseEvent& rMEvt )
334 pEditView->MouseButtonUp( rMEvt );
337 void __EXPORT MyView::Command( const CommandEvent& rCEvt )
339 if ( rCEvt.GetCommand() == COMMAND_STARTDRAG )
340 pEditView->Command(rCEvt);
343 BOOL __EXPORT MyView::Drop( const DropEvent& rEvt )
345 return pEditView->Drop( rEvt );
348 BOOL __EXPORT MyView::QueryDrop( DropEvent& rEvt )
350 return pEditView->QueryDrop( rEvt );
353 // --- class EditMainWindow --------------------------------------------
355 class EditViewWindow : public Window
357 private:
358 MyEditEngine* pEditEngine;
359 EditView* pEditView;
360 Pointer aStdPtr;
361 Pointer aURLPtr;
362 WorkWindow* pTmpWindow;
364 XubString aTestStr;
367 public:
368 EditViewWindow( Window* pParent );
369 ~EditViewWindow();
371 virtual void Paint( const Rectangle& );
372 virtual void Resize();
373 virtual void KeyInput( const KeyEvent& rKeyEvt );
374 virtual void MouseMove( const MouseEvent& rMEvt );
375 virtual void MouseButtonDown( const MouseEvent& rMEvt );
376 virtual void MouseButtonUp( const MouseEvent& rMEvt );
377 virtual void Command( const CommandEvent& rCEvt );
378 void MarkOutputArea();
379 BOOL Drop( const DropEvent& rEvt );
380 BOOL QueryDrop( DropEvent& rEvt );
382 EditView* GetEditView() { return pEditView; }
385 class EditMainWindow : public WorkWindow
387 private:
388 ToolBox aToolBox;
389 ScrollBar aHScrollBar;
390 ScrollBar aVScrollBar;
391 EditViewWindow aViewWin;
392 Printer* pPrinter;
394 WorkWindow* pTmpWindow;
396 EditTextObject* pRTFObj;
397 EditTextObject* pBinObj;
399 FileDialog* pFileDialogBox;
400 FileDialog* pFileDialogBox2;
403 protected:
404 void SetScrollBars();
405 void SetScrollBarRanges();
406 void CreatePolygon();
408 virtual void GetFocus();
410 public:
411 EditMainWindow();
412 ~EditMainWindow();
414 virtual void Resize();
416 DECL_LINK( TBSelect, ToolBox * );
417 void UpdateToolBox();
419 DECL_LINK( HScrollHdl, ScrollBar * );
420 DECL_LINK( VScrollHdl, ScrollBar * );
421 DECL_LINK( ShowStatus, EditStatus * );
422 void SetTitle();
426 EditMainWindow::~EditMainWindow()
428 delete pRTFObj;
429 delete pBinObj;
430 delete pFileDialogBox;
431 delete pFileDialogBox2;
432 delete pTmpWindow;
433 delete pPrinter;
436 EditMainWindow::EditMainWindow() :
437 WorkWindow( NULL, WB_APP | WB_STDWORK | WB_SVLOOK | WB_CLIPCHILDREN ) ,
438 aViewWin( this ),
439 aToolBox( this, WinBits( WB_BORDER | WB_SVLOOK | WB_SCROLL | WB_LINESPACING ) ),
440 aHScrollBar( this, WinBits( WB_HSCROLL | WB_DRAG ) ),
441 aVScrollBar( this, WinBits( WB_VSCROLL | WB_DRAG ) )
443 pRTFObj = 0;
444 pBinObj = 0;
446 pFileDialogBox = new FileDialog( this, WinBits( WB_OPEN | WB_SVLOOK ) );
447 pFileDialogBox->SetText( String( RTL_CONSTASCII_USTRINGPARAM( "Open" ) ) );
448 pFileDialogBox->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Text" )), String( RTL_CONSTASCII_USTRINGPARAM( "*.txt" ) ) );
449 pFileDialogBox->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Rich Text Format" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.rtf" ) ) );
450 pFileDialogBox->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "HTML" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.htm;*.html" ) ) );
451 pFileDialogBox->SetCurFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Rich Text Format" ) ) );
453 pFileDialogBox2 = new FileDialog( this, WinBits( WB_SAVEAS| WB_SVLOOK ) );
454 pFileDialogBox2->SetText( String( RTL_CONSTASCII_USTRINGPARAM( "Save" ) ) );
455 pFileDialogBox2->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Text" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.txt" ) ) );
456 pFileDialogBox2->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Rich Text Format" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.rtf" ) ) );
457 pFileDialogBox2->AddFilter( String( RTL_CONSTASCII_USTRINGPARAM( "HTML" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "*.htm" ) ) );
458 pFileDialogBox2->SetCurFilter( String( RTL_CONSTASCII_USTRINGPARAM( "Rich Text Format" ) ) );
460 pPrinter = new Printer;
461 pPrinter->SetMapMode( MAP_100TH_MM );
462 aViewWin.SetMapMode( pPrinter->GetMapMode() );
463 aViewWin.GetEditView()->GetEditEngine()->SetRefDevice( pPrinter );
467 pTmpWindow = new WorkWindow( this, WB_STDWORK );
469 aToolBox.SetButtonType( BUTTON_TEXT );
470 aToolBox.SetLineCount( 4 );
473 aToolBox.InsertItem( TB_OPEN, String( RTL_CONSTASCII_USTRINGPARAM( "Open" ) ) );
474 aToolBox.InsertItem( TB_SAVE, String( RTL_CONSTASCII_USTRINGPARAM( "Save" ) ) );
475 aToolBox.InsertItem( TB_PRINT, String( RTL_CONSTASCII_USTRINGPARAM( "Print" ) ) );
476 aToolBox.InsertSeparator();
477 aToolBox.InsertItem( TB_LEFT, String( RTL_CONSTASCII_USTRINGPARAM( "L" ) ) );
478 aToolBox.InsertItem( TB_CENTER, String( RTL_CONSTASCII_USTRINGPARAM( "C" ) ) );
479 aToolBox.InsertItem( TB_RIGHT, String( RTL_CONSTASCII_USTRINGPARAM( "R" ) ) );
480 aToolBox.InsertItem( TB_BLOCK, String( RTL_CONSTASCII_USTRINGPARAM( "B" ) ) );
481 aToolBox.InsertSeparator();
482 aToolBox.InsertItem( TB_UNDO, String( RTL_CONSTASCII_USTRINGPARAM( "Undo" ) ) );
483 aToolBox.InsertItem( TB_REDO, String( RTL_CONSTASCII_USTRINGPARAM( "Redo" ) ) );
484 aToolBox.InsertSeparator();
485 aToolBox.InsertItem( TB_FONT1, String( RTL_CONSTASCII_USTRINGPARAM( "Font1" ) ) );
486 aToolBox.InsertItem( TB_FONT2, String( RTL_CONSTASCII_USTRINGPARAM( "Font2" ) ) );
487 aToolBox.InsertItem( TB_DEFTAB, String( RTL_CONSTASCII_USTRINGPARAM( "DefTab" ) ) );
488 aToolBox.InsertBreak();
489 aToolBox.InsertItem( TB_OPEN2, String( RTL_CONSTASCII_USTRINGPARAM( "Read" ) ) );
490 aToolBox.InsertItem( TB_SAVE2, String( RTL_CONSTASCII_USTRINGPARAM( "Write" ) ) );
491 aToolBox.InsertSeparator();
492 aToolBox.InsertItem( TB_FONT, String( RTL_CONSTASCII_USTRINGPARAM( "XXX" ) ) );
493 aToolBox.InsertItem( TB_ITALIC, String( RTL_CONSTASCII_USTRINGPARAM( "K" ) ) );
494 aToolBox.InsertItem( TB_BOLD, String( RTL_CONSTASCII_USTRINGPARAM( "F" ) ) );
495 aToolBox.InsertItem( TB_UNDERLINE, String( RTL_CONSTASCII_USTRINGPARAM( "U" ) ) );
496 aToolBox.InsertItem( TB_SUPER, String( RTL_CONSTASCII_USTRINGPARAM( "SP" ) ) );
497 aToolBox.InsertItem( TB_SUB, String( RTL_CONSTASCII_USTRINGPARAM( "SB" ) ) );
498 aToolBox.InsertItem( TB_PKERN, String( RTL_CONSTASCII_USTRINGPARAM( "PK" ) ) );
499 aToolBox.InsertItem( TB_KERN, String( RTL_CONSTASCII_USTRINGPARAM( "TK" ) ) );
500 aToolBox.InsertItem( TB_WLM, String( RTL_CONSTASCII_USTRINGPARAM( "W!" ) ) );
501 aToolBox.InsertSeparator();
502 aToolBox.InsertItem( TB_BLACK, String( RTL_CONSTASCII_USTRINGPARAM( "Black" ) ) );
503 aToolBox.InsertItem( TB_GREEN, String( RTL_CONSTASCII_USTRINGPARAM( "Green" ) ) );
504 aToolBox.InsertItem( TB_RED, String( RTL_CONSTASCII_USTRINGPARAM( "Red" ) ) );
505 aToolBox.InsertSeparator();
506 aToolBox.InsertItem( TB_SBL, String( RTL_CONSTASCII_USTRINGPARAM( "SBL" ) ) );
507 aToolBox.InsertItem( TB_SBSA, String( RTL_CONSTASCII_USTRINGPARAM( "SBSA" ) ) );
508 aToolBox.InsertItem( TB_LR, String( RTL_CONSTASCII_USTRINGPARAM( "LR" ) ) );
509 aToolBox.InsertSeparator();
510 aToolBox.InsertItem( TB_DRAW, String( RTL_CONSTASCII_USTRINGPARAM( "Draw!" ) ) );
511 aToolBox.InsertItem( TB_ROTATE, String( RTL_CONSTASCII_USTRINGPARAM( "Rotate!" ) ) );
512 aToolBox.InsertItem( TB_MOVE, String( RTL_CONSTASCII_USTRINGPARAM( "Move->2" ) ) );
513 aToolBox.InsertItem( TB_PARATTR1, String( RTL_CONSTASCII_USTRINGPARAM( "ParaAttr0" ) ) );
514 aToolBox.InsertItem( TB_ATTRIBS, String( RTL_CONSTASCII_USTRINGPARAM( "GetAttribs" ) ) );
515 aToolBox.InsertSeparator();
516 aToolBox.InsertItem( TB_INSFLD, String( RTL_CONSTASCII_USTRINGPARAM( "InsFld" ) ) );
517 aToolBox.InsertItem( TB_UPDFLD, String( RTL_CONSTASCII_USTRINGPARAM( "UpdFld" ) ) );
519 aToolBox.InsertBreak();
521 aToolBox.InsertItem( TB_ONLINESPELL, String( RTL_CONSTASCII_USTRINGPARAM( "Spell" ) ) );
522 aToolBox.InsertItem( TB_REDLINES, String( RTL_CONSTASCII_USTRINGPARAM( "RedLine" ) ) );
523 aToolBox.InsertItem( TB_AUTOCORRECT, String( RTL_CONSTASCII_USTRINGPARAM( "Auto*" ) ) );
524 aToolBox.InsertItem( TB_HYPH, String( RTL_CONSTASCII_USTRINGPARAM( "Hyph" ) ) );
525 aToolBox.InsertItem( TB_STDSEL, String( RTL_CONSTASCII_USTRINGPARAM( "StdSel" ) ) );
526 aToolBox.InsertItem( TB_FLAT, String( RTL_CONSTASCII_USTRINGPARAM( "FlatMode" ) ) );
527 aToolBox.InsertItem( TB_OUTL, String( RTL_CONSTASCII_USTRINGPARAM( "Ocomphelper" ) ) );
528 aToolBox.InsertItem( TB_POLY, String( RTL_CONSTASCII_USTRINGPARAM( "Poly" ) ) );
529 aToolBox.InsertItem( TB_COLORS, String( RTL_CONSTASCII_USTRINGPARAM( "Colors" ) ));
530 aToolBox.InsertItem( TB_IDLE, String( RTL_CONSTASCII_USTRINGPARAM( "Idle!" ) ) );
531 aToolBox.InsertItem( TB_INSERT, String( RTL_CONSTASCII_USTRINGPARAM( "Insert" ) ) );
532 aToolBox.InsertSeparator();
533 aToolBox.InsertItem( TB_BINOBJ1, String( RTL_CONSTASCII_USTRINGPARAM( ">BINObj" ) ) );
534 aToolBox.InsertItem( TB_BINOBJ1b, String( RTL_CONSTASCII_USTRINGPARAM( ">>BINObj" ) ) );
535 aToolBox.InsertItem( TB_BINOBJ2b, String( RTL_CONSTASCII_USTRINGPARAM( "<<BINObj" ) ) );
536 aToolBox.InsertItem( TB_CLONEBIN, String( RTL_CONSTASCII_USTRINGPARAM( "Clone" ) ) );
537 aToolBox.InsertSeparator();
538 aToolBox.InsertItem( TB_BINOBJ3, String( RTL_CONSTASCII_USTRINGPARAM( "StoreBin" ) ) );
539 aToolBox.InsertItem( TB_BINOBJ4, String( RTL_CONSTASCII_USTRINGPARAM( "CreatBin" ) ) );
542 aToolBox.SetPosPixel( Point( 0, 0 ) );
543 aToolBox.SetSelectHdl( LINK( this, EditMainWindow, TBSelect ) );
545 SetBackgroundBrush( Brush( Color( COL_LIGHTGRAY ) ) );
547 SetPen( PEN_NULL );
548 Show();
550 aVScrollBar.SetScrollHdl ( LINK( this, EditMainWindow, VScrollHdl ) );
551 aVScrollBar.SetLineSize( 300 );
552 aVScrollBar.SetPageSize( 2000 );
553 aHScrollBar.SetScrollHdl ( LINK( this, EditMainWindow, HScrollHdl ) );
554 aHScrollBar.SetLineSize( 300 );
555 aHScrollBar.SetPageSize( 2000 );
556 aHScrollBar.Enable();
557 aVScrollBar.Enable();
559 aViewWin.GetEditView()->GetEditEngine()->SetStatusEventHdl( LINK( this, EditMainWindow, ShowStatus ) );
561 SetTitle();
563 UpdateToolBox();
564 aToolBox.Show();
565 aViewWin.Show();
568 void EditMainWindow::SetTitle()
570 String aHeading( String( RTL_CONSTASCII_USTRINGPARAM( "SvEdit! - Zoom " ) ) );
571 aHeading += String::CreateFromInt32(nZoom);
572 aHeading += '%';
573 EditEngine* pEditEngine = aViewWin.GetEditView()->GetEditEngine();
574 if ( pEditEngine->GetControlWord() & EE_CNTRL_STRETCHING )
576 USHORT nX, nY;
577 pEditEngine->GetGlobalCharStretching( nX, nY );
578 aHeading += String( RTL_CONSTASCII_USTRINGPARAM( ", Stretch=(" ) );
579 aHeading += String::CreateFromInt32(nX);
580 aHeading += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
581 aHeading += String::CreateFromInt32(nY);
582 aHeading += ')';
584 SetText( aHeading );
587 void EditMainWindow::UpdateToolBox()
589 EditView* pEditView = aViewWin.GetEditView();
590 EditEngine* pEditEngine = pEditView->GetEditEngine();
591 SfxItemSet aCurSet( pEditView->GetAttribs() );
593 ULONG nControl = pEditEngine->GetControlWord();
594 aToolBox.EnableItem( TB_UNDO, (BOOL)pEditEngine->GetUndoManager().GetUndoActionCount() );
595 aToolBox.EnableItem( TB_REDO, (BOOL)pEditEngine->GetUndoManager().GetRedoActionCount() );
596 aToolBox.EnableItem( TB_BINOBJ2b, (BOOL)(long)pBinObj );
597 aToolBox.EnableItem( TB_MOVE, pEditEngine->GetParagraphCount() > 3 );
598 aToolBox.CheckItem( TB_ONLINESPELL, nControl & EE_CNTRL_ONLINESPELLING ? TRUE : FALSE );
599 aToolBox.CheckItem( TB_AUTOCORRECT, nControl & EE_CNTRL_AUTOCORRECT ? TRUE : FALSE );
600 // aToolBox.CheckItem( TB_HYPH, nControl & EE_CNTRL_HYPHENATE ? TRUE : FALSE );
601 aToolBox.CheckItem( TB_REDLINES, nControl & EE_CNTRL_NOREDLINES ? FALSE : TRUE );
602 aToolBox.CheckItem( TB_STDSEL, pEditView->GetSelectionMode() == EE_SELMODE_STD );
603 aToolBox.CheckItem( TB_FLAT, pEditEngine->IsFlatMode() );
604 aToolBox.CheckItem( TB_OUTL, ( nControl & EE_CNTRL_OUTLINER ) ? TRUE : FALSE );
605 aToolBox.CheckItem( TB_POLY, pEditEngine->GetPolygon() ? TRUE : FALSE );
606 aToolBox.CheckItem( TB_COLORS, ( nControl & EE_CNTRL_NOCOLORS ) ? FALSE : TRUE );
607 aToolBox.CheckItem( TB_IDLE, pEditEngine->IsIdleFormatterEnabled() );
608 aToolBox.CheckItem( TB_INSERT, pEditView->IsInsertMode() );
610 for ( USHORT nWhich = EE_ITEMS_START; nWhich <= EE_ITEMS_END; nWhich++)
612 // if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_OFF )
613 // ;
614 // else if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE )
615 // ;
616 // else if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_ON )
618 const SfxPoolItem& rItem = aCurSet.Get( nWhich );
619 switch ( nWhich )
621 case EE_PARA_HYPHENATE:
622 aToolBox.CheckItem( TB_HYPH, ((SfxBoolItem&)rItem).GetValue() != 0 );
623 break;
624 case EE_PARA_LRSPACE:
625 aToolBox.CheckItem( TB_LR, ((SvxLRSpaceItem&)rItem).GetTxtLeft() != 0 );
626 break;
627 case EE_PARA_ULSPACE:
628 aToolBox.CheckItem( TB_SBSA, ((SvxULSpaceItem&)rItem).GetUpper() != 0 );
629 break;
630 case EE_PARA_SBL:
631 aToolBox.CheckItem( TB_SBL, ((SvxLineSpacingItem&)rItem).GetPropLineSpace() != 100 );
632 break;
633 case EE_PARA_JUST:
635 SvxAdjust e = ((SvxAdjustItem&)rItem).GetAdjust();
636 aToolBox.CheckItem( TB_LEFT, e == SVX_ADJUST_LEFT );
637 aToolBox.CheckItem( TB_RIGHT, e == SVX_ADJUST_RIGHT);
638 aToolBox.CheckItem( TB_CENTER, e == SVX_ADJUST_CENTER);
639 aToolBox.CheckItem( TB_BLOCK, e == SVX_ADJUST_BLOCK );
641 break;
642 case EE_PARA_TABS:
643 break;
644 case EE_CHAR_COLOR:
646 Color aColor( ((SvxColorItem&)rItem).GetValue() );
647 aToolBox.CheckItem( TB_BLACK, aColor == COL_BLACK );
648 aToolBox.CheckItem( TB_GREEN, aColor == COL_GREEN );
649 aToolBox.CheckItem( TB_RED, aColor == COL_RED );
651 break;
652 case EE_CHAR_FONTINFO:
654 FontFamily e = ((SvxFontItem&)rItem).GetFamily();
655 aToolBox.CheckItem( TB_FONT1, e == FAMILY_ROMAN );
656 aToolBox.CheckItem( TB_FONT2, e == FAMILY_SWISS );
658 break;
659 case EE_CHAR_FONTHEIGHT:
660 break;
661 case EE_CHAR_WEIGHT:
663 FontWeight e = ((SvxWeightItem&)rItem).GetWeight();
664 aToolBox.CheckItem( TB_BOLD, e == WEIGHT_BOLD );
666 break;
667 case EE_CHAR_UNDERLINE:
669 aToolBox.CheckItem( TB_UNDERLINE, ((SvxUnderlineItem&)rItem).GetLineStyle() );
671 break;
672 case EE_CHAR_WLM:
674 aToolBox.CheckItem( TB_WLM, ((SvxWordLineModeItem&)rItem).GetValue() );
676 break;
677 case EE_CHAR_PAIRKERNING:
679 aToolBox.CheckItem( TB_PKERN, ((SvxAutoKernItem&)rItem).GetValue() );
681 break;
682 case EE_CHAR_KERNING:
684 aToolBox.CheckItem( TB_KERN, (BOOL)((SvxKerningItem&)rItem).GetValue() );
686 break;
687 case EE_CHAR_ESCAPEMENT:
689 aToolBox.CheckItem( TB_SUPER, ((SvxEscapementItem&)rItem).GetEsc() > 0 );
690 aToolBox.CheckItem( TB_SUB, ((SvxEscapementItem&)rItem).GetEsc() < 0 );
692 break;
693 case EE_CHAR_STRIKEOUT:
694 break;
695 case EE_CHAR_ITALIC:
697 FontItalic e = ((SvxPostureItem&)rItem).GetPosture();
698 aToolBox.CheckItem( TB_ITALIC, e == ITALIC_NORMAL );
700 break;
701 case EE_CHAR_OUTLINE:
702 break;
703 case EE_CHAR_SHADOW:
704 break;
710 IMPL_LINK( EditMainWindow, TBSelect, ToolBox *, p )
712 EditView* pEditView = aViewWin.GetEditView();
713 EditEngine* pEditEngine = pEditView->GetEditEngine();
714 USHORT nId = aToolBox.GetCurItemId();
715 BOOL bChecked = aToolBox.IsItemChecked( nId );
716 SfxPoolItem* pNewItem = 0;
717 switch ( nId )
719 case TB_LEFT: pNewItem = new SvxAdjustItem( SVX_ADJUST_LEFT, EE_PARA_JUST );
720 break;
721 case TB_RIGHT: pNewItem = new SvxAdjustItem( SVX_ADJUST_RIGHT, EE_PARA_JUST );
722 break;
723 case TB_CENTER: pNewItem = new SvxAdjustItem( SVX_ADJUST_CENTER, EE_PARA_JUST );
724 break;
725 case TB_BLOCK: pNewItem = new SvxAdjustItem( SVX_ADJUST_BLOCK, EE_PARA_JUST );
726 break;
727 case TB_HYPH: pNewItem = new SfxBoolItem( EE_PARA_HYPHENATE, !bChecked );
728 break;
729 case TB_UNDO: pEditView->Undo();
730 pEditView->ShowCursor();
731 break;
732 case TB_REDO: pEditView->Redo();
733 pEditView->ShowCursor();
734 break;
735 case TB_ONLINESPELL: {
736 ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
737 if ( bChecked )
738 nControl = nControl & ~EE_CNTRL_ONLINESPELLING;
739 else
740 nControl = nControl | EE_CNTRL_ONLINESPELLING;
741 pEditView->GetEditEngine()->SetControlWord( nControl );
743 break;
744 case TB_REDLINES: {
745 ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
746 if ( !bChecked )
747 nControl = nControl & ~EE_CNTRL_NOREDLINES;
748 else
749 nControl = nControl | EE_CNTRL_NOREDLINES;
750 pEditView->GetEditEngine()->SetControlWord( nControl );
752 break;
753 case TB_AUTOCORRECT: {
754 ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
755 if ( bChecked )
756 nControl = nControl & ~EE_CNTRL_AUTOCORRECT;
757 else
758 nControl = nControl | EE_CNTRL_AUTOCORRECT;
759 pEditView->GetEditEngine()->SetControlWord( nControl );
761 break;
762 case TB_STDSEL: if ( bChecked )
763 pEditView->SetSelectionMode( EE_SELMODE_TXTONLY );
764 else
765 pEditView->SetSelectionMode( EE_SELMODE_STD );
766 break;
767 case TB_FLAT: pEditEngine->SetFlatMode( !pEditEngine->IsFlatMode() );
768 break;
769 case TB_COLORS: {
770 ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
771 if ( bChecked )
772 nControl = nControl | EE_CNTRL_NOCOLORS;
773 else
774 nControl = nControl & ~EE_CNTRL_NOCOLORS;
775 pEditView->GetEditEngine()->SetControlWord( nControl );
777 // aViewWin.Invalidate();
778 pEditView->GetEditEngine()->Draw( pEditView->GetWindow(), pEditView->GetOutputArea(), pEditView->GetVisArea().TopLeft() );
779 break;
780 case TB_OUTL: {
781 ULONG nControl = pEditView->GetEditEngine()->GetControlWord();
782 if ( !bChecked )
783 nControl = nControl | EE_CNTRL_OUTLINER;
784 else
785 nControl = nControl & ~EE_CNTRL_OUTLINER;
786 pEditView->GetEditEngine()->SetControlWord( nControl );
788 break;
789 case TB_POLY: {
790 if ( !bChecked )
791 CreatePolygon();
792 else
793 pEditView->GetEditEngine()->ClearPolygon();
795 break;
796 case TB_IDLE: pEditEngine->EnableIdleFormatter( !pEditEngine->IsIdleFormatterEnabled() );
797 break;
798 case TB_INSFLD: {
799 static BYTE nFld = 0;
800 if ( nFld > 2 )
801 nFld = 0;
802 if ( nFld == 0 )
804 SvxFieldItem aFld( SvxURLField( String( RTL_CONSTASCII_USTRINGPARAM( "www.mopo.de" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "Bla" ) ), SVXURLFORMAT_REPR ), EE_FEATURE_FIELD );
805 pEditView->InsertField( aFld );
807 else if ( nFld == 1 )
808 pEditView->InsertField( SvxFieldItem( SvxURLField( String( RTL_CONSTASCII_USTRINGPARAM( "www.mopo.de" ) ), String( RTL_CONSTASCII_USTRINGPARAM( "Morgenpost" ) ), SVXURLFORMAT_URL ), EE_FEATURE_FIELD ) );
809 else if ( nFld == 2 )
810 pEditView->InsertField( SvxFieldItem( SvxDateField( Date( 1,1,1995 ), SVXDATETYPE_FIX, SVXDATEFORMAT_D ), EE_FEATURE_FIELD ) );
812 nFld++;
814 break;
815 case TB_UPDFLD: pEditEngine->UpdateFields();
816 break;
817 case TB_INSERT: pEditView->SetInsertMode( !pEditView->IsInsertMode() );
818 break;
819 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 );
820 break;
821 case TB_FONT2: pNewItem = new SvxFontItem( FAMILY_SWISS, String( RTL_CONSTASCII_USTRINGPARAM( "Helv" ) ), String(), PITCH_DONTKNOW, RTL_TEXTENCODING_MS_1252, EE_CHAR_FONTINFO );
822 break;
823 case TB_BOLD: if ( bChecked )
824 pNewItem = new SvxWeightItem( WEIGHT_NORMAL, EE_CHAR_WEIGHT);
825 else
826 pNewItem = new SvxWeightItem( WEIGHT_BOLD, EE_CHAR_WEIGHT);
827 break;
828 case TB_ITALIC: if ( bChecked )
829 pNewItem = new SvxPostureItem( ITALIC_NONE, EE_CHAR_ITALIC );
830 else
831 pNewItem = new SvxPostureItem( ITALIC_NORMAL, EE_CHAR_ITALIC );
832 break;
833 case TB_UNDERLINE: if ( bChecked )
834 pNewItem = new SvxUnderlineItem( UNDERLINE_NONE, EE_CHAR_UNDERLINE );
835 else
836 pNewItem = new SvxUnderlineItem( UNDERLINE_SINGLE, EE_CHAR_UNDERLINE );
837 break;
838 case TB_WLM: pNewItem = new SvxWordLineModeItem( !bChecked, EE_CHAR_WLM );
839 break;
840 case TB_PKERN: pNewItem = new SvxAutoKernItem( !bChecked, EE_CHAR_PAIRKERNING );
841 break;
842 case TB_KERN: if ( bChecked )
843 pNewItem = new SvxKerningItem( 0, EE_CHAR_KERNING );
844 else
845 pNewItem = new SvxKerningItem( 100, EE_CHAR_KERNING);
846 break;
847 case TB_SUPER: if ( bChecked )
848 pNewItem = new SvxEscapementItem( SVX_ESCAPEMENT_OFF, EE_CHAR_ESCAPEMENT);
849 else
850 // pNewItem = new SvxEscapementItem( SVX_ESCAPEMENT_SUPERSCRIPT, EE_CHAR_ESCAPEMENT);
851 pNewItem = new SvxEscapementItem( 50, 100, EE_CHAR_ESCAPEMENT );
852 break;
853 case TB_SUB: if ( bChecked )
854 pNewItem = new SvxEscapementItem( SVX_ESCAPEMENT_OFF, EE_CHAR_ESCAPEMENT);
855 else
856 // pNewItem = new SvxEscapementItem( SVX_ESCAPEMENT_SUBSCRIPT, EE_CHAR_ESCAPEMENT);
857 pNewItem = new SvxEscapementItem( -50, 100, EE_CHAR_ESCAPEMENT );
858 break;
859 case TB_GREEN: pNewItem = new SvxColorItem( Color(COL_GREEN), EE_CHAR_COLOR);
860 break;
861 case TB_RED: pNewItem = new SvxColorItem( Color(COL_RED), EE_CHAR_COLOR);
862 break;
863 case TB_BLACK: pNewItem = new SvxColorItem( Color(COL_BLACK), EE_CHAR_COLOR);
864 break;
865 case TB_SBL: pNewItem = new SvxLineSpacingItem( 0, EE_PARA_SBL );
866 if ( bChecked )
868 ((SvxLineSpacingItem*)pNewItem)->SetInterLineSpace( 0 );
870 else
872 ((SvxLineSpacingItem*)pNewItem)->SetPropLineSpace( 150 );
874 break;
875 case TB_SBSA: pNewItem = new SvxULSpaceItem( EE_PARA_ULSPACE );
876 if ( !bChecked )
878 ((SvxULSpaceItem*)pNewItem)->SetUpper( 400 );
879 ((SvxULSpaceItem*)pNewItem)->SetLower( 400 );
881 break;
882 case TB_LR: pNewItem = new SvxLRSpaceItem( EE_PARA_LRSPACE );
883 if ( !bChecked )
885 ((SvxLRSpaceItem*)pNewItem)->SetTxtLeft( 1000 );
886 ((SvxLRSpaceItem*)pNewItem)->SetTxtFirstLineOfst( -500 );
887 ((SvxLRSpaceItem*)pNewItem)->SetRight( 500 );
889 break;
890 case TB_DEFTAB: if ( bChecked )
891 pEditEngine->SetDefTab( 2000 );
892 else
893 pEditEngine->SetDefTab( 600 );
894 pEditView->ShowCursor();
895 aToolBox.CheckItem( nId, !bChecked );
896 break;
897 case TB_DRAW: {
898 pTmpWindow->SetMapMode( aViewWin.GetMapMode() );
899 pTmpWindow->SetBackgroundBrush( Brush( Color( COL_GRAY ) ) );
900 pTmpWindow->SetFillInBrush( Brush( Color( COL_LIGHTGRAY ) ) );
901 pTmpWindow->Show();
902 pTmpWindow->Invalidate();
903 pTmpWindow->Update();
904 pTmpWindow->DrawText( Point( 20, 20 ), String( RTL_CONSTASCII_USTRINGPARAM( "It's a Test..." ) ) );
905 Rectangle aRect( Point( 500, 500 ), Size( 10000, 4000 ) );
906 pTmpWindow->DrawRect( aRect );
907 pEditEngine->Draw( pTmpWindow, aRect, Point( 0, 0 ) );
908 nRotation = 0;
910 break;
911 case TB_ROTATE: {
912 nRotation += 100;
913 if ( nRotation == 3600 )
914 nRotation = 0;
915 pTmpWindow->SetMapMode( aViewWin.GetMapMode() );
916 pTmpWindow->SetBackgroundBrush( Brush( Color( COL_LIGHTGRAY ) ) );
917 pTmpWindow->SetFillInBrush( Brush( Color( COL_LIGHTGRAY ) ) );
918 pTmpWindow->Show();
919 pTmpWindow->Invalidate();
920 pTmpWindow->Update();
921 pTmpWindow->DrawText( Point( 20, 20 ), String( RTL_CONSTASCII_USTRINGPARAM( "It's a Test..." ) ) );
922 Rectangle aRect( Point( 500, 500 ), Size( 10000, 4000 ) );
923 pEditEngine->Draw( pTmpWindow, Point( 2000, 4000 ), nRotation );
925 break;
927 case TB_MOVE:
929 ESelection aESel = pEditView->GetSelection();
930 USHORT nStartPara = Min( aESel.nStartPara, aESel.nEndPara );
931 USHORT nEndPara = Max( aESel.nStartPara, aESel.nEndPara );
932 pEditView->MoveParagraphs( Range(nStartPara,nEndPara), 2 );
934 break;
935 case TB_PARATTR1:
937 pEditEngine->SetUpdateMode( FALSE );
938 USHORT nPara = 0;
939 SfxItemSet aSet( pEditEngine->GetEmptyItemSet() );
940 aSet.Put( SvxFontItem( FAMILY_DECORATIVE, String( RTL_CONSTASCII_USTRINGPARAM( "StarBats" ) ), String(),PITCH_DONTKNOW, RTL_TEXTENCODING_MS_1252, EE_CHAR_FONTINFO ) );
941 aSet.Put( SvxColorItem( Color(COL_MAGENTA), EE_CHAR_COLOR ) );
942 aSet.Put( SvxFontHeightItem(600, 100, EE_CHAR_FONTHEIGHT) );
943 aSet.Put( SvxPostureItem( ITALIC_NORMAL, EE_CHAR_ITALIC ) );
944 aSet.Put( SvxLRSpaceItem( 0, 0, 1000, 0, EE_PARA_LRSPACE ) );
945 pEditView->SetParaAttribs( aSet, nPara );
946 pEditEngine->SetUpdateMode( TRUE );
947 pEditView->ShowCursor();
949 break;
950 case TB_BINOBJ1:
952 delete pBinObj;
953 pBinObj = pEditEngine->CreateTextObject();
955 break;
956 case TB_BINOBJ1b:
958 delete pBinObj;
959 pBinObj = pEditView->CreateTextObject();
961 break;
962 case TB_CLONEBIN:
964 if ( pBinObj )
966 EditTextObject* p = pBinObj->Clone();
967 delete pBinObj;
968 pBinObj = p;
971 break;
972 case TB_BINOBJ2b:
974 if ( pBinObj )
976 pEditView->InsertText( *pBinObj );
979 break;
980 case TB_BINOBJ3:
982 if ( !pFileDialogBox2->Execute() )
983 return FALSE;
984 DirEntry aDirEntry( pFileDialogBox2->GetPath() );
985 SvFileStream aStrm( aDirEntry.GetFull(), STREAM_WRITE | STREAM_TRUNC );
986 EditTextObject* pTmpObj = pEditEngine->CreateTextObject();
987 pTmpObj->Store( aStrm );
988 DBG_ASSERT( !aStrm.GetError(), "Store: Error!" );
989 delete pTmpObj;
991 break;
992 case TB_BINOBJ4:
994 if ( !pFileDialogBox->Execute() )
995 return FALSE;
996 DirEntry aDirEntry( pFileDialogBox->GetPath() );
997 SvFileStream aStrm( aDirEntry.GetFull(), STREAM_READ );
998 delete pBinObj;
999 pBinObj = EditTextObject::Create( aStrm );
1000 // EditTextObject* pTmpObj = pEditEngine->CreateTextObject( aStrm );
1001 // pEditEngine->SetText( *pTmpObj );
1002 // pEditView->ShowCursor();
1003 // delete pTmpObj;
1005 break;
1006 case TB_OPEN:
1007 case TB_OPEN2:
1009 if ( !pFileDialogBox->Execute() )
1010 return FALSE;
1011 DirEntry aDirEntry( pFileDialogBox->GetPath() );
1012 aDirEntry.ToAbs();
1013 String aFileName( aDirEntry.GetFull() );
1014 SvFileStream aStrm( aFileName, STREAM_READ );
1015 if ( aStrm.GetError() )
1016 InfoBox( 0, String( RTL_CONSTASCII_USTRINGPARAM( "StreamError!" ) ) ).Execute();
1017 Application::EnterWait();
1018 if ( nId == TB_OPEN )
1020 if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "rtf" ) )
1021 pEditEngine->Read( aStrm, EE_FORMAT_RTF );
1022 if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "htm" ) )
1023 pEditEngine->Read( aStrm, EE_FORMAT_HTML );
1024 if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "html" ) )
1025 pEditEngine->Read( aStrm, EE_FORMAT_HTML );
1026 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "bin" ) )
1027 pEditEngine->Read( aStrm, EE_FORMAT_BIN );
1028 else
1029 pEditEngine->Read( aStrm, EE_FORMAT_TEXT );
1031 pEditView->ShowCursor();
1033 else
1035 if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "rtf" ) )
1036 pEditView->Read( aStrm, EE_FORMAT_RTF );
1037 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "bin" ) )
1038 pEditView->Read( aStrm, EE_FORMAT_BIN );
1039 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "html" ) )
1040 pEditView->Read( aStrm, EE_FORMAT_HTML );
1041 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "htm" ) )
1042 pEditView->Read( aStrm, EE_FORMAT_HTML );
1043 else
1044 pEditView->Read( aStrm, EE_FORMAT_TEXT );
1047 Application::LeaveWait();
1050 break;
1051 case TB_PRINT:
1053 pPrinter->SetPageQueueSize( 1 );
1054 PrintDialog aPrnDlg( this );
1055 aPrnDlg.SetPrinter( pPrinter );
1056 if ( aPrnDlg.Execute() )
1058 pPrinter->StartJob( String( RTL_CONSTASCII_USTRINGPARAM( "SvEdit - PrinterTest" ) ) );
1059 pPrinter->StartPage();
1060 Size aSz( pEditEngine->CalcTextWidth(), pEditEngine->GetTextHeight() );
1061 Pen aPen( PEN_SOLID );
1062 aPen.SetColor( Color( COL_BLACK ) );
1063 pPrinter->SetPen( aPen );
1064 Rectangle aR( Point( 2000, 4000 ), aSz );
1065 pPrinter->DrawRect( aR );
1066 // So folgt auf IIISi, 75DPI kein Ausdruck!
1067 // pPrinter->SetClipRegion( Region( aR ) );
1068 pEditEngine->Draw( pPrinter, Point( 2000, 4000 ), nRotation );
1069 // pPrinter->SetClipRegion();
1070 pPrinter->EndPage();
1071 pPrinter->EndJob();
1074 break;
1075 case TB_SAVE:
1076 case TB_SAVE2:
1078 if ( !pFileDialogBox2->Execute() )
1079 return FALSE;
1080 DirEntry aDirEntry( pFileDialogBox2->GetPath() );
1081 // DirEntry aDirEntry( String( RTL_CONSTASCII_USTRINGPARAM( "d:\\xxx.rtf" ) ) );
1082 SvFileStream aStrm( aDirEntry.GetFull(), STREAM_WRITE | STREAM_TRUNC );
1083 Application::EnterWait();
1084 if ( nId == TB_SAVE )
1086 if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "rtf") )
1087 pEditEngine->Write( aStrm, EE_FORMAT_RTF );
1088 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "bin" ) )
1089 pEditEngine->Write( aStrm, EE_FORMAT_BIN );
1090 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "html" ) )
1091 pEditEngine->Write( aStrm, EE_FORMAT_HTML );
1092 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "htm" ) )
1093 pEditEngine->Write( aStrm, EE_FORMAT_HTML );
1094 else
1095 pEditEngine->Write( aStrm, EE_FORMAT_TEXT );
1097 else
1099 if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "rtf" ) )
1100 pEditView->Write( aStrm, EE_FORMAT_RTF );
1101 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "bin" ) )
1102 pEditView->Write( aStrm, EE_FORMAT_BIN );
1103 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "html" ) )
1104 pEditView->Write( aStrm, EE_FORMAT_HTML );
1105 else if ( aDirEntry.GetExtension().EqualsIgnoreCaseAscii( "htm" ) )
1106 pEditView->Write( aStrm, EE_FORMAT_HTML );
1107 else
1108 pEditView->Write( aStrm, EE_FORMAT_TEXT );
1110 Application::LeaveWait();
1112 break;
1113 case TB_ATTRIBS:
1115 SfxItemSet aCurSet = pEditView->GetAttribs();
1116 XubString aDebStr( String( RTL_CONSTASCII_USTRINGPARAM( "Attribute in Selektion:" ) ) );
1117 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "\nVorlage:" ) );
1118 XubString aStyle;
1119 // pEditView->GetStyleSheet( aStyle, eFam );
1120 aDebStr += aStyle;
1121 for ( USHORT nWhich = EE_ITEMS_START; nWhich <= EE_ITEMS_END; nWhich++)
1123 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "\n" ) );
1124 aDebStr += String::CreateFromInt32( nWhich );
1125 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "\t" ) );
1126 if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_OFF )
1127 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "---" ) );
1128 else if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_DONTCARE )
1129 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "XXX" ) );
1130 else if ( aCurSet.GetItemState( nWhich ) == SFX_ITEM_ON )
1132 const SfxPoolItem& rItem = aCurSet.Get( nWhich );
1133 switch ( nWhich )
1135 case EE_PARA_LRSPACE:
1136 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FI=" ) );
1137 aDebStr += String::CreateFromInt32( ((SvxLRSpaceItem&)rItem).GetTxtFirstLineOfst() );
1138 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", LI=" ) );
1139 aDebStr += String::CreateFromInt32( ((SvxLRSpaceItem&)rItem).GetTxtLeft() );
1140 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", RI=" ) );
1141 aDebStr += String::CreateFromInt32( ((SvxLRSpaceItem&)rItem).GetRight() );
1142 break;
1143 case EE_PARA_ULSPACE:
1144 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "SB=" ) );
1145 aDebStr += String::CreateFromInt32( ((SvxULSpaceItem&)rItem).GetUpper() );
1146 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", SA=" ) );
1147 aDebStr += String::CreateFromInt32( ((SvxULSpaceItem&)rItem).GetLower() );
1148 break;
1149 case EE_PARA_SBL:
1150 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "SBL=" ) );
1151 aDebStr += String::CreateFromInt32( ((SvxLineSpacingItem&)rItem).GetInterLineSpace() );
1152 break;
1153 case EE_PARA_JUST:
1154 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "SvxAdust=" ) );
1155 aDebStr += String::CreateFromInt32( (USHORT)((SvxAdjustItem&)rItem).GetAdjust() );
1156 break;
1157 case EE_PARA_TABS:
1158 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "Tabs = ?" ) );
1159 break;
1160 case EE_CHAR_COLOR:
1162 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "Color= " ) );
1163 Color aColor( ((SvxColorItem&)rItem).GetValue() );
1164 aDebStr += String::CreateFromInt32( aColor.GetRed() );
1165 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
1166 aDebStr += String::CreateFromInt32( aColor.GetGreen() );
1167 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( ", " ) );
1168 aDebStr += String::CreateFromInt32( aColor.GetBlue() );
1170 break;
1171 case EE_CHAR_FONTINFO:
1172 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "Font=" ) );
1173 aDebStr += ((SvxFontItem&)rItem).GetFamilyName();
1174 break;
1175 case EE_CHAR_FONTHEIGHT:
1176 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "Groesse=" ) );
1177 aDebStr += String::CreateFromInt32( ((SvxFontHeightItem&)rItem).GetHeight() );
1178 break;
1179 case EE_CHAR_WEIGHT:
1180 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontWeight=" ) );
1181 aDebStr += String::CreateFromInt32( ((SvxWeightItem&)rItem).GetWeight() );
1182 break;
1183 case EE_CHAR_UNDERLINE:
1184 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontUnderline=" ) );
1185 aDebStr += String::CreateFromInt32( ((SvxUnderlineItem&)rItem).GetLineStyle() );
1186 break;
1187 case EE_CHAR_WLM:
1188 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "WordLineMode=" ) );
1189 aDebStr += String::CreateFromInt32( ((SvxWordLineModeItem&)rItem).GetValue() );
1190 break;
1191 case EE_CHAR_STRIKEOUT:
1192 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontStrikeout=" ) );
1193 aDebStr += String::CreateFromInt32( ((SvxCrossedOutItem&)rItem).GetStrikeout() );
1194 break;
1195 case EE_CHAR_ITALIC:
1196 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontPosture=" ) );
1197 aDebStr += String::CreateFromInt32( ((SvxPostureItem&)rItem).GetPosture() );
1198 break;
1199 case EE_CHAR_OUTLINE:
1200 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontOutline=" ) );
1201 aDebStr += String::CreateFromInt32( ((SvxContourItem&)rItem).GetValue() );
1202 break;
1203 case EE_CHAR_SHADOW:
1204 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "FontShadowed=" ) );
1205 aDebStr += String::CreateFromInt32( ((SvxShadowedItem&)rItem).GetValue() );
1206 break;
1209 else
1210 aDebStr += String( RTL_CONSTASCII_USTRINGPARAM( "?" ) );
1212 InfoBox( 0, aDebStr ).Execute();
1214 break;
1217 if ( pNewItem )
1219 SfxItemSet aSet = pEditView->GetEmptyItemSet();
1220 aSet.Put( *pNewItem );
1221 pEditView->SetAttribs( aSet );
1222 delete pNewItem;
1224 UpdateToolBox();
1225 return 0;
1228 void EditMainWindow::CreatePolygon()
1230 EditView* pEditView = aViewWin.GetEditView();
1231 Size aSz = pEditView->GetWindow()->GetOutputSize();
1232 Point aOffset( aSz.Width()/8, aSz.Height()/8 );
1233 aSz.Width() *= 3;
1234 aSz.Width() /= 4;
1235 aSz.Height() *= 3;
1236 aSz.Height() /= 4;
1237 Polygon aPoly( 5 );
1238 aPoly.SetPoint( Point( aSz.Width()/2, 0 ), 0 );
1239 aPoly.SetPoint( Point( aSz.Width(), aSz.Height()/3 ), 1 );
1240 aPoly.SetPoint( Point( aSz.Width()/2, aSz.Height() ), 2 );
1241 aPoly.SetPoint( Point( 0, aSz.Height()/2 ), 3 );
1242 aPoly.SetPoint( Point( aSz.Width()/2, 0 ), 4 );
1243 PolyPolygon aPPoly( aPoly );
1244 pEditView->GetEditEngine()->SetPolygon( aPPoly );
1245 pEditView->SetOutputArea( Rectangle( aOffset, aSz ) );
1246 ULONG nWord = pEditView->GetControlWord();
1247 nWord &= ~(EV_CNTRL_AUTOSCROLL);
1248 pEditView->SetControlWord( nWord );
1249 aViewWin.Invalidate();
1252 void __EXPORT EditMainWindow::GetFocus()
1254 aViewWin.GrabFocus();
1257 IMPL_LINK_INLINE_START( EditMainWindow, HScrollHdl, ScrollBar *, pScrl )
1259 EditView* pEditView = aViewWin.GetEditView();
1260 pEditView->Scroll( -pScrl->GetDelta(), 0, RGCHK_PAPERSZ1 );
1261 return 0;
1263 IMPL_LINK_INLINE_END( EditMainWindow, HScrollHdl, ScrollBar *, pScrl )
1265 IMPL_LINK_INLINE_START( EditMainWindow, VScrollHdl, ScrollBar *, pScrl )
1267 EditView* pEditView = aViewWin.GetEditView();
1268 pEditView->Scroll( 0, -pScrl->GetDelta(), RGCHK_PAPERSZ1 );
1269 return 0;
1271 IMPL_LINK_INLINE_END( EditMainWindow, VScrollHdl, ScrollBar *, pScrl )
1273 void EditMainWindow::SetScrollBarRanges()
1275 EditView* pEditView = aViewWin.GetEditView();
1276 long y = pEditView->GetEditEngine()->GetTextHeight();
1277 long x = pEditView->GetEditEngine()->GetPaperSize().Width();
1279 aHScrollBar.SetRange( Range( 0, x ) );
1280 aVScrollBar.SetRange( Range( 0, y ) );
1283 void EditMainWindow::SetScrollBars()
1285 EditView* pEditView = aViewWin.GetEditView();
1286 Size aSz = GetOutputSizePixel();
1287 Size aRealSz( aSz );
1288 long nScrollbarWidthPixel = aVScrollBar.GetSizePixel().Width();
1289 long nTBHeight = aToolBox.GetSizePixel().Height();
1290 aSz.Height() -= nTBHeight;
1291 Size aOrgSz( aSz );
1293 // VScroll...
1294 aSz.Height() += 2;
1295 Point aPoint( ( aSz.Width()- nScrollbarWidthPixel+1 ), -1+nTBHeight);
1296 aSz.Width() = nScrollbarWidthPixel;
1297 aVScrollBar.SetPosSizePixel( aPoint, aSz );
1299 // HScroll...
1300 aSz = aOrgSz;
1301 Point aPoint2( 0, aRealSz.Height()-aHScrollBar.GetSizePixel().Height()+1 ); // TB-Height schon drin!
1302 aSz.Width() -= aVScrollBar.GetSizePixel().Width();
1303 aSz.Width() += 2;
1305 aSz.Height() = nScrollbarWidthPixel;
1306 aHScrollBar.SetPosSizePixel( aPoint2, aSz );
1308 aHScrollBar.SetVisibleSize( pEditView->GetOutputArea().GetWidth() );
1309 aVScrollBar.SetVisibleSize( pEditView->GetOutputArea().GetHeight() );
1311 SetScrollBarRanges();
1313 aVScrollBar.Show();
1314 aHScrollBar.Show();
1317 void __EXPORT EditMainWindow::Resize()
1319 long nBorder = aVScrollBar.GetSizePixel().Width();
1320 long nExtra = 10;
1321 Size aTBSz = aToolBox.CalcWindowSizePixel();
1322 Size aOutSzPixel( GetOutputSizePixel() );
1323 aToolBox.SetSizePixel( Size( aOutSzPixel.Width(), aTBSz.Height()) );
1325 aViewWin.SetSizePixel( Size( aOutSzPixel.Width()-nBorder-2*nExtra, aOutSzPixel.Height()-aTBSz.Height()-2*nExtra-nBorder) );
1327 aViewWin.SetPosPixel( Point( nExtra, aTBSz.Height()+nExtra ) );
1329 SetScrollBars();
1331 EditView* pEditView = aViewWin.GetEditView();
1332 if ( pEditView && pEditView->GetEditEngine()->GetPolygon() )
1333 CreatePolygon();
1336 IMPL_LINK( EditMainWindow, ShowStatus, EditStatus *, pStat )
1338 EditView* pEditView = aViewWin.GetEditView();
1339 EditEngine* pEditEngine = pEditView->GetEditEngine();
1340 if ( ( pStat->GetStatusWord() & EE_STAT_TEXTWIDTHCHANGED ) || ( pStat->GetStatusWord() & EE_STAT_TEXTHEIGHTCHANGED ) )
1342 aViewWin.MarkOutputArea();
1343 if ( pEditEngine->GetTextHeight() < (ULONG)pEditView->GetOutputArea().GetHeight() )
1345 // Wird durch RGCHK_PAPERSZ1 'geklippt'
1346 if ( !( pEditEngine->GetControlWord() & EE_CNTRL_AUTOPAGESIZE) )
1347 pEditView->Scroll( -(long)pEditEngine->CalcTextWidth(), -(long)pEditEngine->GetTextHeight(), RGCHK_PAPERSZ1 );
1349 SetScrollBarRanges();
1351 if ( pStat->GetStatusWord() & EE_STAT_HSCROLL )
1352 aHScrollBar.SetThumbPos( pEditView->GetVisArea().Left() );
1353 if ( pStat->GetStatusWord() & EE_STAT_VSCROLL )
1354 aVScrollBar.SetThumbPos( pEditView->GetVisArea().Top() );
1356 return 0;
1360 EditViewWindow::~EditViewWindow()
1362 pEditEngine->RemoveView( pEditView );
1363 delete pEditView;
1364 // Beim Zerstoeren der Styles am Ende, EditEngine noch nicht kaputt,
1365 // wird der Handler gerufen, ich zerstore hier aber schon die View!
1366 pEditEngine->SetStatusEventHdl( Link() );
1367 // SvxAutoCorrect* pAutoCorrekt = pEditEngine->GetAutoCorrect();
1368 // pEditEngine->SetAutoCorrect( 0 );
1369 // delete pAutoCorrekt;
1370 delete pEditEngine;
1373 EditViewWindow::EditViewWindow( Window* pParent ) :
1374 Window( pParent ), aURLPtr( POINTER_HAND )
1376 SetBackgroundBrush( Brush( Color( COL_WHITE ) ) );
1377 SetMapMode( MAP_100TH_MM );
1378 // EnableDrop();
1380 SfxItemPool* pPool = EditEngine::CreatePool();
1381 Font aFont = GetSettings().GetStyleSettings().GetAppFont();
1382 MapMode aPntMode( MAP_POINT );
1383 MapMode aCurrent( GetMapMode() );
1384 Size aSz( LogicToLogic( Size( 12, 0 ), &aPntMode, &aCurrent ) );
1385 aFont.SetName( String( RTL_CONSTASCII_USTRINGPARAM( "Times New Roman" ) ) );
1386 pPool->SetPoolDefaultItem( SvxFontItem( aFont.GetFamily(), aFont.GetName(), String(),aFont.GetPitch(), aFont.GetCharSet(), EE_CHAR_FONTINFO ) );
1387 pPool->SetPoolDefaultItem( SvxFontHeightItem( aSz.Width(), 100, EE_CHAR_FONTHEIGHT ) );
1388 pEditEngine = new MyEditEngine( pPool );
1390 Size aPaperSz( 10000,8000 );
1391 pEditEngine->SetPaperSize( aPaperSz );
1393 pEditView = new EditView( pEditEngine, this );
1394 pEditView->SetBackgroundColor( Color( COL_WHITE ) );
1395 pEditView->SetOutputArea( Rectangle( Point( 100, 100 ), aPaperSz ) );
1396 pEditEngine->SetDefaultLanguage( LANGUAGE_ENGLISH );
1397 pEditEngine->InsertView( pEditView );
1399 SetPosSizePixel( Point( 10, 10 ), Size( 600, 400 ) );
1400 SetPen( PEN_NULL );
1401 Show();
1403 // Feldbefehle grau hinterlegen
1404 ULONG n = pEditEngine->GetControlWord();
1405 n = n | (EE_CNTRL_MARKFIELDS|EE_CNTRL_AUTOCOMPLETE);
1406 pEditEngine->SetControlWord( n );
1408 // Test: Autozentrierung
1409 // ULONG n = pEditEngine->GetControlWord();
1410 // n = n | EE_CNTRL_AUTOPAGESIZE;
1411 // pEditEngine->SetControlWord( n );
1413 // OneLineSpeling
1414 #ifdef WNT
1415 // pEditEngine->CreateSpeller( DirEntry( String( RTL_CONSTASCII_USTRINGPARAM( "n:\\offenv\\wnti" ) ) ),
1416 // DirEntry( String( RTL_CONSTASCII_USTRINGPARAM( "n:\\offenv\\wnti" ) ) ) );
1417 // pEditEngine->GetSpeller()->SetActualLanguage( LANGUAGE_GERMAN );
1418 // pEditEngine->GetSpeller()->SetDefaultLanguage( LANGUAGE_GERMAN );
1419 // pEditEngine->GetSpeller()->SetMinTrail( 2 );
1421 // AutoCorrect wird nie zerstoert
1422 // pEditEngine->SetAutoCorrect( new SvxAutoCorrect( String( RTL_CONSTASCII_USTRINGPARAM( "d:\\prj\\office\\autotext\\autocorr.dat" ) ) ) );
1423 #endif
1426 void __EXPORT EditViewWindow::Paint( const Rectangle& rRec )
1428 if ( pEditView->GetEditEngine()->GetPolygon() )
1430 // Die Punkte des Polygons beziehen sich auf die View...
1431 MapMode aMapMode( GetMapMode() );
1432 aMapMode.SetOrigin( pEditView->GetOutputArea().TopLeft() );
1433 SetMapMode( aMapMode );
1434 DrawPolyPolygon( *pEditView->GetEditEngine()->GetPolygon() );
1435 aMapMode.SetOrigin( Point() );
1436 SetMapMode( aMapMode );
1438 pEditView->Paint( rRec );
1439 MarkOutputArea();
1442 void EditViewWindow::MarkOutputArea()
1444 static Rectangle aCurFrame;
1445 Rectangle aOutArea( pEditView->GetOutputArea() );
1446 aOutArea = LogicToPixel( aOutArea );
1447 aOutArea.Left()--;
1448 aOutArea.Right()++;
1449 aOutArea.Top()--;
1450 aOutArea.Bottom()++;
1451 aOutArea = PixelToLogic( aOutArea );
1452 SetPen( Pen( Color( COL_RED ) ) );
1453 SetFillInBrush( Brush( BRUSH_NULL ) );
1454 DrawRect( aOutArea );
1455 if ( !aCurFrame.IsEmpty() )
1457 if ( aCurFrame.Left() < aOutArea.Left() )
1458 Invalidate( Rectangle( aCurFrame.TopLeft(), Size( aOutArea.Left()-aCurFrame.Left(), aCurFrame.GetHeight() ) ) );
1459 if ( aCurFrame.Right() > aOutArea.Right() )
1461 long nW = aCurFrame.Right() - aOutArea.Right();
1462 Point aPos( aCurFrame.TopRight() );
1463 aPos.X() -= nW;
1464 Invalidate( Rectangle( aPos, Size( nW, aCurFrame.GetHeight() ) ) );
1466 if ( aCurFrame.Top() < aOutArea.Top() )
1467 Invalidate( Rectangle( aCurFrame.TopLeft(), Size( aCurFrame.GetWidth(), aOutArea.Top() - aCurFrame.Top() ) ) );
1468 if ( aCurFrame.Bottom() > aOutArea.Bottom() )
1470 long nH = aCurFrame.Bottom() - aOutArea.Bottom();
1471 Point aPos( aCurFrame.BottomLeft() );
1472 aPos.Y() -= nH;
1473 Invalidate( Rectangle( aPos, Size( aCurFrame.GetWidth(), nH ) ) );
1476 aCurFrame = aOutArea;
1479 void __EXPORT EditViewWindow::Resize()
1481 Size aPaperSz( GetOutputSize() );
1482 pEditView->SetOutputArea( Rectangle( Point(0,0), aPaperSz ) );
1483 pEditEngine->SetPaperSize( Size( aPaperSz.Width()*1, aPaperSz.Height()*1 ) );
1484 pEditView->ShowCursor();
1485 Invalidate();
1488 void __EXPORT EditViewWindow::KeyInput( const KeyEvent& rKEvt )
1490 sal_Unicode nCharCode = rKEvt.GetCharCode();
1492 USHORT nCode = rKEvt.GetKeyCode().GetCode();
1493 // Auswertung fuer besondere Einstellungen....
1494 if ( ( nCode == KEY_A) && rKEvt.GetKeyCode().IsMod1() )
1495 pEditView->SetSelection( ESelection( 0, 0, 0xFFFF, 0xFFFF ) );
1496 else if ( ( nCode == KEY_R ) && rKEvt.GetKeyCode().IsMod2() )
1497 Invalidate();
1498 else if ( ( nCode == KEY_L ) && rKEvt.GetKeyCode().IsMod2() )
1500 ULONG n = pEditEngine->GetControlWord();
1501 n = n | EE_CNTRL_ONECHARPERLINE;
1502 pEditEngine->SetControlWord( n );
1503 pEditEngine->QuickFormatDoc();
1505 else if ( ( nCode == KEY_Z ) && rKEvt.GetKeyCode().IsMod2() )
1507 pEditView->RemoveAttribs();
1509 else if ( ( nCode == KEY_V ) && rKEvt.GetKeyCode().IsMod2() )
1511 pEditEngine->SetVertical( TRUE );
1512 Invalidate();
1514 else if ( ( ( nCode == KEY_ADD ) || ( nCode == KEY_SUBTRACT ) )&& rKEvt.GetKeyCode().IsMod2() )
1516 short nDiff = ( nCode == KEY_ADD ) ? (+5) : (-5);
1517 if ( nZoom > 1000 )
1518 nDiff *= 20;
1519 if ( nZoom <= 25 )
1520 nDiff /= 5;
1521 if ( ( nZoom + nDiff ) > 0 )
1522 nZoom += nDiff;
1523 MapMode aMapMode( MAP_100TH_MM, Point(0,0), Fraction(nZoom,100), Fraction(nZoom,100) );
1524 SetMapMode( aMapMode );
1525 ((EditMainWindow*)GetParent())->SetTitle();
1527 if ( rKEvt.GetKeyCode().IsMod1() )
1529 InfoBox( 0, String( RTL_CONSTASCII_USTRINGPARAM( "ChangingRefMapMode..." ) ) ).Execute();
1530 pEditEngine->SetRefMapMode( aMapMode );
1532 Invalidate();
1534 else if ( rKEvt.GetKeyCode().IsMod2() &&
1535 ( ( nCode == KEY_UP) || ( nCode == KEY_DOWN ) ||
1536 ( nCode == KEY_LEFT ) || ( nCode == KEY_RIGHT ) ) )
1538 if( rKEvt.GetKeyCode().IsMod1() )
1540 ULONG nCtrl = pEditEngine->GetControlWord();
1541 if ( ! ( nCtrl & EE_CNTRL_STRETCHING ) )
1543 nCtrl |= EE_CNTRL_STRETCHING;
1544 pEditEngine->SetControlWord( nCtrl );
1546 USHORT nX, nY;
1547 pEditEngine->GetGlobalCharStretching( nX, nY );
1548 if ( ( nCode == KEY_DOWN ) && ( nY > 5 ) )
1549 nY += 5;
1550 else if ( nCode == KEY_UP )
1551 nY -= 5;
1552 else if ( nCode == KEY_RIGHT )
1553 nX += 5;
1554 else if ( ( nCode == KEY_LEFT ) && ( nX > 5 ) )
1555 nX -= 5;
1556 pEditEngine->SetGlobalCharStretching( nX, nY );
1557 ((EditMainWindow*)GetParent())->SetTitle();
1559 else // ZeichenAttr
1561 SfxItemSet aAttrs( pEditView->GetAttribs() );
1562 SfxItemSet aNewAttrs( pEditEngine->GetEmptyItemSet() );
1563 const SvxFontWidthItem& rItem = (const SvxFontWidthItem&)aAttrs.Get( EE_CHAR_FONTWIDTH );
1564 USHORT nProp = rItem.GetProp();
1565 if ( nCode == KEY_RIGHT )
1566 nProp += 5;
1567 else if ( ( nCode == KEY_LEFT ) && ( nProp > 5 ) )
1568 nProp -= 5;
1569 aNewAttrs.Put( SvxFontWidthItem( 0, nProp, EE_CHAR_FONTWIDTH ) );
1570 pEditView->SetAttribs( aNewAttrs );
1573 else if ( ( nCode == KEY_O ) && rKEvt.GetKeyCode().IsMod2() )
1575 MapMode aMapMode( GetMapMode() );
1576 aMapMode.SetOrigin( Point( 41, 41 ) );
1577 SetMapMode( aMapMode );
1578 Invalidate();
1580 else if ( ( nCode == KEY_B ) && rKEvt.GetKeyCode().IsMod2() )
1582 SfxItemSet aSet = pEditView->GetEmptyItemSet();
1583 aSet.Put( SvxFontHeightItem(800, 100, EE_CHAR_FONTHEIGHT) );
1584 pEditView->SetAttribs( aSet );
1586 else if ( ( nCode == KEY_P ) && rKEvt.GetKeyCode().IsMod2() )
1588 // ESelection aSel = pEditView->GetSelection();
1589 // for ( ULONG n = aSel.nStartPara; n <= aSel.nEndPara; n++ )
1590 // {
1591 // InfoBox( 0, pEditEngine->GetText( n ) ).Execute();
1592 // }
1593 InfoBox( 0, pEditView->GetSelected() ).Execute();
1596 else if ( rKEvt.GetKeyCode().IsMod2() &&
1597 ( nCode >= KEY_1 ) && ( nCode <= KEY_9 ) )
1599 ULONG nEECtrl = pEditEngine->GetControlWord();
1600 nEECtrl = nEECtrl | EE_CNTRL_AUTOPAGESIZE;
1601 pEditEngine->SetControlWord( nEECtrl );
1603 ULONG nEVCtrl = pEditView->GetControlWord();
1604 nEVCtrl |= EV_CNTRL_AUTOSIZE;
1605 pEditView->SetControlWord( nEVCtrl );
1607 pEditView->SetAnchorMode( (EVAnchorMode)(nCode-KEY_1) );
1608 pEditView->SetOutputArea( Rectangle( Point(0,0), GetOutputSize() ) );
1609 pEditEngine->SetMaxAutoPaperSize( GetOutputSize() );
1610 pEditEngine->SetPaperSize( Size( 0, 0 ) );
1612 else if ( rKEvt.GetKeyCode().IsMod2() && ( nCode == KEY_0 ) )
1614 ULONG nEVCtrl = pEditView->GetControlWord();
1615 nEVCtrl = nEVCtrl | EV_CNTRL_AUTOSIZE;
1616 pEditView->SetControlWord( nEVCtrl );
1618 Size aOutSz( GetOutputSize() );
1619 Size aPaperSz( aOutSz.Width() / 2, 0 );
1620 pEditView->SetOutputArea( Rectangle( Point(), aPaperSz ) );
1621 pEditEngine->SetPaperSize( aPaperSz );
1622 // Max-Height wird bei View verwendet,
1623 // MinSize/MaxSize nur, wenn AUTOPAGESIZE ( KEY_1 - KEY_9 )
1624 pEditEngine->SetMaxAutoPaperSize( Size( aOutSz.Width() / 2, aOutSz.Height() / 2 ) );
1625 pEditEngine->SetMinAutoPaperSize( Size( aOutSz.Width() / 8, aOutSz.Height() / 8 ) );
1627 else if ( ( nCode == KEY_J ) && rKEvt.GetKeyCode().IsMod2() )
1629 Size aTextSz( pEditEngine->CalcTextWidth(), pEditEngine->GetTextHeight() );
1630 Rectangle aRect( pEditView->GetOutputArea().TopLeft(), aTextSz );
1631 Brush aTmpBrush( Color( COL_LIGHTBLUE ), BRUSH_25 );
1632 Brush aOldBrush( GetFillInBrush() );
1633 SetFillInBrush( aTmpBrush );
1634 DrawRect( aRect );
1635 SetFillInBrush( aOldBrush );
1636 pEditView->Paint( aRect );
1638 else if ( ( nCode == KEY_H ) && rKEvt.GetKeyCode().IsMod2() )
1640 Push();
1641 Size aSz( pEditEngine->CalcTextWidth(), pEditEngine->GetTextHeight() );
1642 Pen aPen( PEN_SOLID );
1643 Brush aBrush( Color( COL_GRAY ), BRUSH_SOLID );
1644 aPen.SetColor( Color( COL_BLACK ) );
1645 SetPen( aPen );
1646 SetFillInBrush( aBrush );
1647 Rectangle aR( pEditView->GetOutputArea().TopLeft(), aSz );
1648 DrawRect( aR );
1649 Pop();
1650 pEditEngine->Draw( this, pEditView->GetOutputArea() );
1651 pEditView->ShowCursor( TRUE, TRUE );
1654 // Eingabe an EditEngine...
1655 else
1657 BOOL bDone = pEditView->PostKeyEvent( rKEvt );
1658 if ( !bDone )
1659 Window::KeyInput( rKEvt );
1662 ((EditMainWindow*)GetParent())->UpdateToolBox();
1665 void __EXPORT EditViewWindow::MouseMove( const MouseEvent& rMEvt )
1667 Point aPos = PixelToLogic( rMEvt.GetPosPixel() );
1668 if ( pEditView->GetOutputArea().IsInside( aPos ) )
1670 const SvxFieldItem* pField = pEditView->GetFieldUnderMousePointer();
1671 if ( pField )
1672 SetPointer( aURLPtr );
1673 else
1674 SetPointer( pEditView->GetPointer() );
1676 // aPos -= pEditView->GetOutputArea().TopLeft();
1677 // aPos += pEditView->GetVisArea().TopLeft();
1678 // if ( pEditView->GetEditEngine()->IsTextPos( aPos, PixelToLogic( Size( 5, 0 ) ).Width() ) )
1679 // SetPointer( pEditView->GetPointer() );
1680 // else
1681 // SetPointer( Pointer( POINTER_REFHAND ) );
1684 else
1685 SetPointer( aStdPtr );
1687 // static long x = 0;
1688 // x++;
1689 // DBG_ASSERT( x < 1000, String( RTL_CONSTASCII_USTRINGPARAM( "?" ) ) );
1690 pEditView->MouseMove( rMEvt );
1693 void __EXPORT EditViewWindow::MouseButtonDown( const MouseEvent& rMEvt )
1695 GrabFocus();
1696 pEditView->MouseButtonDown( rMEvt );
1699 void __EXPORT EditViewWindow::MouseButtonUp( const MouseEvent& rMEvt )
1701 pEditView->MouseButtonUp( rMEvt );
1702 ((EditMainWindow*)GetParent())->UpdateToolBox();
1705 void __EXPORT EditViewWindow::Command( const CommandEvent& rCEvt )
1707 if ( rCEvt.GetCommand() == COMMAND_CONTEXTMENU )
1709 if( pEditView->IsWrongSpelledWordAtPos( rCEvt.GetMousePosPixel() ) )
1710 pEditView->ExecuteSpellPopup( rCEvt.GetMousePosPixel() );
1712 else
1713 pEditView->Command(rCEvt);
1717 BOOL __EXPORT EditViewWindow::Drop( const DropEvent& rEvt )
1719 return pEditView->Drop( rEvt );
1722 BOOL __EXPORT EditViewWindow::QueryDrop( DropEvent& rEvt )
1724 return pEditView->QueryDrop( rEvt );
1727 // --- aEditApp ------------------------------------------------------
1729 void __EXPORT EditApp::Main()
1731 #ifdef WNT
1732 SvFactory::Init();
1733 #endif
1735 ::com::sun::star::uno::Reference< ::com::sun::star::lang::XMultiServiceFactory > xSMgr = createApplicationServiceManager();
1736 ::comphelper::setProcessServiceFactory( xSMgr );
1738 EditDLL aEditDll;
1739 SvxGlobalItemData aItemData;
1740 SvxFieldItem::GetClassManager().SV_CLASS_REGISTER( SvxDateField );
1741 SvxFieldItem::GetClassManager().SV_CLASS_REGISTER( SvxURLField );
1743 Help::EnableQuickHelp();
1745 EditMainWindow aWindow;
1746 Execute();
1749 EditApp aEditApp;
1751 /* vim:set shiftwidth=4 softtabstop=4 expandtab: */