xref: /AOO41X/main/svx/workben/edittest.cxx (revision f6e50924346d0b8c0b07c91832a97665dd718b0c)
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