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