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 #ifndef _WRTSH_HXX 24 #define _WRTSH_HXX 25 26 #include <com/sun/star/embed/XEmbeddedObject.hpp> 27 #include "swdllapi.h" 28 #include <fesh.hxx> 29 #include <sortopt.hxx> 30 #include <swurl.hxx> 31 #include <IMark.hxx> 32 33 class Window; 34 class OutputDevice; 35 class SbxArray; 36 class SwDoc; 37 class SpellCheck; 38 class SwViewOption; 39 class SwFlyFrmAttrMgr; 40 class SwField; 41 class SwTOXBase; 42 class SdrView; 43 class SwView; 44 class SvGlobalName; 45 class SwInputFieldList; 46 class SwSectionData; 47 class Timer; 48 class SvxMacro; 49 class SwFmtINetFmt; 50 class SvxINetBookmark; 51 class SvxAutoCorrect; 52 class NaviContentBookmark; 53 struct SwCallMouseEvent; 54 class DropEvent; 55 struct ChartSelectionInfo; 56 class SfxStringListItem; 57 class SfxRequest; 58 59 namespace com { namespace sun { namespace star { namespace util { 60 struct SearchOptions; 61 } } } } 62 63 64 typedef sal_Int32 SelectionType; 65 namespace nsSelectionType 66 { 67 const SelectionType SEL_TXT = CNT_TXT; // Text, niemals auch Rahmen 0x0001 68 const SelectionType SEL_GRF = CNT_GRF; // Grafik 0x0002 69 const SelectionType SEL_OLE = CNT_OLE; // OLE 0x0010 70 const SelectionType SEL_FRM = 0x000020; // Rahmen, keine Inhaltsform 71 const SelectionType SEL_NUM = 0x000040; // NumListe 72 const SelectionType SEL_TBL = 0x000080; // Cursor steht in Tabelle 73 const SelectionType SEL_TBL_CELLS = 0x000100; // Tabellenzellen sind selektiert 74 const SelectionType SEL_DRW = 0x000200; // Zeichenobjekte (Rechteck, Kreis...) 75 const SelectionType SEL_DRW_TXT = 0x000400; // Draw-Textobjekte im Editmode 76 const SelectionType SEL_BEZ = 0x000800; // Bezierobjekte editieren 77 const SelectionType SEL_DRW_FORM = 0x001000; // Zeichenobjekte: DB-Forms 78 const SelectionType SEL_FOC_FRM_CTRL = 0x002000; // a form control is focused. Neither set nor evaluated by the SwWrtShell itself, only by it's clients. 79 const SelectionType SEL_MEDIA = 0x004000; // Media object 80 const SelectionType SEL_EXTRUDED_CUSTOMSHAPE = 0x008000; // extruded custom shape 81 const SelectionType SEL_FONTWORK = 0x010000; // fontwork 82 const SelectionType SEL_POSTIT = 0x020000; //annotation 83 } 84 85 86 class SW_DLLPUBLIC SwWrtShell: public SwFEShell 87 { 88 private: 89 using SwCrsrShell::Left; 90 using SwCrsrShell::Right; 91 using SwCrsrShell::Up; 92 using SwCrsrShell::Down; 93 using SwCrsrShell::LeftMargin; 94 using SwCrsrShell::RightMargin; 95 using SwCrsrShell::SelectTxtAttr; 96 using SwCrsrShell::GotoPage; 97 using SwFEShell::InsertObject; 98 using SwEditShell::AutoCorrect; 99 using SwCrsrShell::GotoMark; 100 101 public: 102 103 using SwEditShell::Insert; 104 105 typedef long (SwWrtShell::*SELECTFUNC)(const Point *, sal_Bool bProp ); 106 107 SELECTFUNC fnDrag; 108 SELECTFUNC fnSetCrsr; 109 SELECTFUNC fnEndDrag; 110 SELECTFUNC fnKillSel; 111 112 // Alle Selektionen aufheben 113 long ResetSelect( const Point *, sal_Bool ); 114 115 //setzt den Cursorstack nach dem Bewegen mit PageUp/-Down 116 //zurueck, falls ein Stack aufgebaut ist 117 inline void ResetCursorStack(); 118 SelectionType GetSelectionType() const; 119 120 sal_Bool IsModePushed() const { return 0 != pModeStack; } 121 void PushMode(); 122 void PopMode(); 123 124 void SttSelect(); 125 void EndSelect(); 126 sal_Bool IsInSelect() const { return bInSelect; } 127 void SetInSelect(sal_Bool bSel = sal_True) { bInSelect = bSel; } 128 // Liegt eine Text- oder Rahmenselektion vor? 129 sal_Bool HasSelection() const { return SwCrsrShell::HasSelection() || 130 IsMultiSelection() || IsSelFrmMode() || IsObjSelected(); } 131 sal_Bool Pop( sal_Bool bOldCrsr = sal_True ); 132 133 void EnterStdMode(); 134 sal_Bool IsStdMode() const { return !bExtMode && !bAddMode && !bBlockMode; } 135 136 void EnterExtMode(); 137 void LeaveExtMode(); 138 long ToggleExtMode(); 139 sal_Bool IsExtMode() const { return bExtMode; } 140 141 void EnterAddMode(); 142 void LeaveAddMode(); 143 long ToggleAddMode(); 144 sal_Bool IsAddMode() const { return bAddMode; } 145 146 void EnterBlockMode(); 147 void LeaveBlockMode(); 148 long ToggleBlockMode(); 149 sal_Bool IsBlockMode() const { return bBlockMode; } 150 151 void SetInsMode( sal_Bool bOn = sal_True ); 152 void ToggleInsMode() { SetInsMode( !bIns ); } 153 sal_Bool IsInsMode() const { return bIns; } 154 void SetRedlineModeAndCheckInsMode( sal_uInt16 eMode ); 155 156 void EnterSelFrmMode(const Point *pStartDrag = 0); 157 void LeaveSelFrmMode(); 158 sal_Bool IsSelFrmMode() const { return bLayoutMode; } 159 // Selektion von Rahmen aufheben 160 void UnSelectFrm(); 161 162 void Invalidate(); 163 164 // Tabellenzellen selektieren fuer Bearbeiten von Formeln in der Ribbonbar 165 inline void SelTblCells( const Link &rLink, sal_Bool bMark = sal_True ); 166 inline void EndSelTblCells(); 167 168 //Wortweisen oder zeilenweisen Selektionsmodus verlassen. Wird 169 //in der Regel in MB-Up gerufen. 170 sal_Bool IsExtSel() const { return bSelWrd || bSelLn; } 171 172 // erfrage, ob der akt. fnDrag - Pointer auf BeginDrag gesetzt ist 173 // Wird fuer MouseMove gebraucht, um die Bugs 55592/55931 zu umgehen. 174 inline sal_Bool Is_FnDragEQBeginDrag() const; 175 176 //Basisabfragen 177 sal_Bool IsInWrd() { return IsInWord(); } 178 sal_Bool IsSttWrd() { return IsStartWord(); } 179 sal_Bool IsEndWrd(); 180 sal_Bool IsSttOfPara() const { return IsSttPara(); } 181 sal_Bool IsEndOfPara() const { return IsEndPara(); } 182 183 //Word bzw. Satz selektieren. 184 sal_Bool SelNearestWrd(); 185 sal_Bool SelWrd (const Point * = 0, sal_Bool bProp=sal_False ); 186 // --> FME 2004-07-30 #i32329# Enhanced selection 187 void SelSentence (const Point * = 0, sal_Bool bProp=sal_False ); 188 void SelPara (const Point * = 0, sal_Bool bProp=sal_False ); 189 // <-- 190 long SelAll(); 191 192 //Basiscursortravelling 193 typedef sal_Bool (SwWrtShell:: *FNSimpleMove)(); 194 sal_Bool SimpleMove( FNSimpleMove, sal_Bool bSelect ); 195 196 sal_Bool Left ( sal_uInt16 nMode, sal_Bool bSelect, 197 sal_uInt16 nCount, sal_Bool bBasicCall, sal_Bool bVisual = sal_False ); 198 sal_Bool Right ( sal_uInt16 nMode, sal_Bool bSelect, 199 sal_uInt16 nCount, sal_Bool bBasicCall, sal_Bool bVisual = sal_False ); 200 sal_Bool Up ( sal_Bool bSelect = sal_False, sal_uInt16 nCount = 1, 201 sal_Bool bBasicCall = sal_False ); 202 sal_Bool Down ( sal_Bool bSelect = sal_False, sal_uInt16 nCount = 1, 203 sal_Bool bBasicCall = sal_False ); 204 sal_Bool NxtWrd ( sal_Bool bSelect = sal_False ) { return SimpleMove( &SwWrtShell::_NxtWrd, bSelect ); } 205 sal_Bool PrvWrd ( sal_Bool bSelect = sal_False ) { return SimpleMove( &SwWrtShell::_PrvWrd, bSelect ); } 206 207 sal_Bool LeftMargin ( sal_Bool bSelect, sal_Bool bBasicCall ); 208 sal_Bool RightMargin( sal_Bool bSelect, sal_Bool bBasicCall ); 209 210 sal_Bool SttDoc ( sal_Bool bSelect = sal_False ); 211 sal_Bool EndDoc ( sal_Bool bSelect = sal_False ); 212 213 sal_Bool SttNxtPg ( sal_Bool bSelect = sal_False ); 214 sal_Bool SttPrvPg ( sal_Bool bSelect = sal_False ); 215 sal_Bool EndNxtPg ( sal_Bool bSelect = sal_False ); 216 sal_Bool EndPrvPg ( sal_Bool bSelect = sal_False ); 217 sal_Bool SttPg ( sal_Bool bSelect = sal_False ); 218 sal_Bool EndPg ( sal_Bool bSelect = sal_False ); 219 sal_Bool SttPara ( sal_Bool bSelect = sal_False ); 220 sal_Bool EndPara ( sal_Bool bSelect = sal_False ); 221 sal_Bool FwdPara ( sal_Bool bSelect = sal_False ) 222 { return SimpleMove( &SwWrtShell::_FwdPara, bSelect ); } 223 sal_Bool BwdPara ( sal_Bool bSelect = sal_False ) 224 { return SimpleMove( &SwWrtShell::_BwdPara, bSelect ); } 225 sal_Bool FwdSentence( sal_Bool bSelect = sal_False ) 226 { return SimpleMove( &SwWrtShell::_FwdSentence, bSelect ); } 227 sal_Bool BwdSentence( sal_Bool bSelect = sal_False ) 228 { return SimpleMove( &SwWrtShell::_BwdSentence, bSelect ); } 229 230 // --> FME 2004-07-30 #i20126# Enhanced table selection 231 sal_Bool SelectTableRowCol( const Point& rPt, const Point* pEnd = 0, bool bRowDrag = false ); 232 // <-- 233 sal_Bool SelectTableRow(); 234 sal_Bool SelectTableCol(); 235 sal_Bool SelectTableCell(); 236 237 sal_Bool SelectTxtAttr( sal_uInt16 nWhich, const SwTxtAttr* pAttr = 0 ); 238 239 // Spaltenweise Spruenge 240 sal_Bool StartOfColumn ( sal_Bool bSelect = sal_False ); 241 sal_Bool EndOfColumn ( sal_Bool bSelect = sal_False ); 242 sal_Bool StartOfNextColumn ( sal_Bool bSelect = sal_False ); 243 sal_Bool EndOfNextColumn ( sal_Bool bSelect = sal_False ); 244 sal_Bool StartOfPrevColumn ( sal_Bool bSelect = sal_False ); 245 sal_Bool EndOfPrevColumn ( sal_Bool bSelect = sal_False ); 246 247 // setze den Cursor auf die Seite "nPage" an den Anfang 248 // zusaetzlich zu der gleichnamigen Implementierung in crsrsh.hxx 249 // werden hier alle bestehenden Selektionen vor dem Setzen des 250 // Cursors aufgehoben 251 sal_Bool GotoPage( sal_uInt16 nPage, sal_Bool bRecord ); 252 253 //setzen des Cursors; merken der alten Position fuer Zurueckblaettern. 254 DECL_LINK( ExecFlyMac, void * ); 255 256 sal_Bool PageCrsr(SwTwips lOffset, sal_Bool bSelect); 257 258 // Felder Update 259 void UpdateInputFlds( SwInputFieldList* pLst = 0, sal_Bool bOnlyInSel = sal_False ); 260 261 void NoEdit(sal_Bool bHideCrsr = sal_True); 262 void Edit(); 263 sal_Bool IsNoEdit() const { return bNoEdit; } 264 265 sal_Bool IsRetainSelection() const { return mbRetainSelection; } 266 void SetRetainSelection( sal_Bool bRet ) { mbRetainSelection = bRet; } 267 268 // change current data base and notify 269 void ChgDBData(const SwDBData& SwDBData); 270 271 // Loeschen 272 long DelToEndOfLine(); 273 long DelToStartOfLine(); 274 long DelLine(); 275 long DelLeft(); 276 277 // loescht auch Rahmen bzw. setzt den Cursor in den Rahmen, 278 // wenn bDelFrm == sal_False ist 279 long DelRight(); 280 long DelToEndOfPara(); 281 long DelToStartOfPara(); 282 long DelToEndOfSentence(); 283 long DelToStartOfSentence(); 284 long DelNxtWord(); 285 long DelPrvWord(); 286 287 // Prueft, ob eine Wortselektion vorliegt. 288 // Gemaess den Regeln fuer intelligentes Cut / Paste 289 // werden umgebende Spaces rausgeschnitten. 290 // Liefert Art der Wortselektion zurueck (siehe enum) 291 enum word { 292 NO_WORD = 0, 293 WORD_SPACE_BEFORE = 1, 294 WORD_SPACE_AFTER = 2, 295 WORD_NO_SPACE = 3 296 }; 297 int IntelligentCut(int nSelectionType, sal_Bool bCut = sal_True); 298 299 // Editieren 300 void Insert(SwField &); 301 void Insert(const String &); 302 // Graphic 303 void Insert( const String &rPath, const String &rFilter, 304 const Graphic &, SwFlyFrmAttrMgr * = 0, 305 sal_Bool bRule = sal_False ); 306 307 void InsertByWord( const String & ); 308 void InsertPageBreak(const String *pPageDesc = 0, sal_uInt16 nPgNum = 0 ); 309 void InsertLineBreak(); 310 void InsertColumnBreak(); 311 void InsertFootnote(const String &, sal_Bool bEndNote = sal_False, sal_Bool bEdit = sal_True ); 312 void SplitNode( sal_Bool bAutoFormat = sal_False, sal_Bool bCheckTableStart = sal_True ); 313 sal_Bool CanInsert(); 314 315 // Verzeichnisse 316 void InsertTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet = 0); 317 sal_Bool UpdateTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet = 0); 318 319 // Numerierung und Bullets 320 /** 321 Turns on numbering or bullets. 322 323 @param bNum sal_True: turn on numbering 324 sal_False: turn on bullets 325 */ 326 void NumOrBulletOn(sal_Bool bNum); // #i29560# 327 void NumOrBulletOff(); // #i29560# 328 void NumOn(); 329 void BulletOn(); 330 331 //OLE 332 void InsertObject( /*SvInPlaceObjectRef *pObj, */ // != 0 fuer Clipboard 333 const svt::EmbeddedObjectRef&, 334 SvGlobalName *pName = 0, // != 0 entspr. Object erzeugen. 335 sal_Bool bActivate = sal_True, 336 sal_uInt16 nSlotId = 0); // SlotId fuer Dialog 337 338 sal_Bool InsertOleObject( const svt::EmbeddedObjectRef& xObj, SwFlyFrmFmt **pFlyFrmFmt = 0 ); 339 void LaunchOLEObj( long nVerb = 0 ); // Server starten 340 sal_Bool IsOLEObj() const { return GetCntType() == CNT_OLE;} 341 virtual void MoveObjectIfActive( svt::EmbeddedObjectRef& xObj, const Point& rOffset ); 342 virtual void CalcAndSetScale( svt::EmbeddedObjectRef& xObj, 343 const SwRect *pFlyPrtRect = 0, 344 const SwRect *pFlyFrmRect = 0, 345 const bool bNoTxtFrmPrtAreaChanged = false ); 346 virtual void ConnectObj( svt::EmbeddedObjectRef& xIPObj, const SwRect &rPrt, 347 const SwRect &rFrm ); 348 349 // Vorlagen und Formate 350 351 // enum gibt an, was geschehen soll, wenn das Style nicht gefunden wurde 352 enum GetStyle { GETSTYLE_NOCREATE, // keins anlegen 353 GETSTYLE_CREATESOME, // falls auf PoolId mapt anlegen 354 GETSTYLE_CREATEANY }; // ggfs Standard returnen 355 356 SwTxtFmtColl* GetParaStyle(const String &rCollName, 357 GetStyle eCreate = GETSTYLE_NOCREATE); 358 SwCharFmt* GetCharStyle(const String &rFmtName, 359 GetStyle eCreate = GETSTYLE_NOCREATE); 360 SwFrmFmt* GetTblStyle(const String &rFmtName); 361 362 void SetPageStyle(const String &rCollName); 363 364 String GetCurPageStyle( const sal_Bool bCalcFrm = sal_True ) const; 365 366 // Aktuelle Vorlage anhand der geltenden Attribute aendern 367 void QuickUpdateStyle(); 368 369 enum DoType { UNDO, REDO, REPEAT }; 370 371 void Do( DoType eDoType, sal_uInt16 nCnt = 1 ); 372 String GetDoString( DoType eDoType ) const; 373 String GetRepeatString() const; 374 sal_uInt16 GetDoStrings( DoType eDoType, SfxStringListItem& rStrLstItem ) const; 375 376 //Suchen oder Ersetzen 377 sal_uLong SearchPattern(const com::sun::star::util::SearchOptions& rSearchOpt, 378 sal_Bool bSearchInNotes, 379 SwDocPositions eStart, SwDocPositions eEnde, 380 FindRanges eFlags = FND_IN_BODY, 381 int bReplace = sal_False ); 382 383 sal_uLong SearchTempl (const String &rTempl, 384 SwDocPositions eStart, SwDocPositions eEnde, 385 FindRanges eFlags = FND_IN_BODY, 386 const String* pReplTempl = 0 ); 387 388 sal_uLong SearchAttr (const SfxItemSet& rFindSet, 389 sal_Bool bNoColls, 390 SwDocPositions eStart,SwDocPositions eEnde, 391 FindRanges eFlags = FND_IN_BODY, 392 const com::sun::star::util::SearchOptions* pSearchOpt = 0, 393 const SfxItemSet* pReplaceSet = 0); 394 395 void AutoCorrect( SvxAutoCorrect& rACorr, sal_Unicode cChar = ' ' ); 396 397 // Aktion vor Cursorbewegung 398 // Hebt gfs. Selektionen auf, triggert Timer und GCAttr() 399 void MoveCrsr( sal_Bool bWithSelect = sal_False ); 400 401 // Eingabefelder updaten 402 sal_Bool StartInputFldDlg(SwField*, sal_Bool bNextButton, Window* pParentWin = 0, ByteString* pWindowState = 0); 403 // update DropDown fields 404 sal_Bool StartDropDownFldDlg(SwField*, sal_Bool bNextButton, ByteString* pWindowState = 0); 405 406 //"Handler" fuer Anederungen an der DrawView - fuer Controls. 407 virtual void DrawSelChanged( ); 408 409 // springe zum Bookmark und setze die "Selections-Flags" wieder richtig 410 sal_Bool GotoMark( const ::sw::mark::IMark* const pMark ); 411 sal_Bool GotoMark( const ::sw::mark::IMark* const pMark, sal_Bool bSelect, sal_Bool bStart ); 412 sal_Bool GotoMark( const ::rtl::OUString& rName ); 413 sal_Bool GoNextBookmark(); // sal_True, wenn's noch eine gab 414 sal_Bool GoPrevBookmark(); 415 416 bool GotoFieldmark(::sw::mark::IFieldmark const * const pMark); 417 418 sal_Bool GotoField( const SwFmtFld& rFld ); 419 420 // jump to the next / previous hyperlink - inside text and also 421 // on graphics 422 sal_Bool SelectNextPrevHyperlink( sal_Bool bNext = sal_True ); 423 424 // Zugehoerige SwView ermitteln 425 const SwView& GetView() const { return rView; } 426 SwView& GetView() { return rView; } 427 428 //Weil es sonst keiner macht, gibt es hier eine ExecMacro() 429 void ExecMacro( const SvxMacro& rMacro, String* pRet = 0, SbxArray* pArgs = 0 ); 430 // rufe ins dunkle Basic/JavaScript 431 sal_uInt16 CallEvent( sal_uInt16 nEvent, const SwCallMouseEvent& rCallEvent, 432 sal_Bool bCheckPtr = sal_False, SbxArray* pArgs = 0, 433 const Link* pCallBack = 0 ); 434 435 // ein Klick aus das angegebene Feld. Der Cursor steht auf diesem. 436 // Fuehre die vor definierten Aktionen aus. 437 void ClickToField( const SwField& rFld ); 438 void ClickToINetAttr( const SwFmtINetFmt& rItem, sal_uInt16 nFilter = URLLOAD_NOFILTER ); 439 sal_Bool ClickToINetGrf( const Point& rDocPt, sal_uInt16 nFilter = URLLOAD_NOFILTER ); 440 inline sal_Bool IsInClickToEdit() const ; 441 442 // fall ein URL-Button selektiert ist, dessen URL returnen, ansonsten 443 // einen LeerString 444 sal_Bool GetURLFromButton( String& rURL, String& rDescr ) const; 445 446 void NavigatorPaste( const NaviContentBookmark& rBkmk, 447 const sal_uInt16 nAction ); 448 449 // die Core erzeugt eine Selektion, das SttSelect muss gerufen werden 450 virtual void NewCoreSelection(); 451 452 virtual void ApplyViewOptions( const SwViewOption &rOpt ); 453 454 // autom. Update von Vorlagen 455 void AutoUpdateFrame(SwFrmFmt* pFmt, const SfxItemSet& rStyleSet); 456 void AutoUpdatePara(SwTxtFmtColl* pColl, const SfxItemSet& rStyleSet); 457 458 // Link fuers einfuegen von Bereichen uebers Drag&Drop/Clipboard 459 DECL_STATIC_LINK( SwWrtShell, InsertRegionDialog, SwSectionData* ); 460 461 462 //ctoren, der erstere ist eine Art kontrollierter copy ctor fuer weitere 463 //Sichten auf ein Dokument 464 SwWrtShell( SwWrtShell&, Window *pWin, SwView &rShell); 465 SwWrtShell( SwDoc& rDoc, Window *pWin, SwView &rShell, 466 const SwViewOption *pViewOpt = 0); 467 virtual ~SwWrtShell(); 468 469 sal_Bool TryRemoveIndent(); // #i23725# 470 471 String GetSelDescr() const; 472 473 private: 474 475 SW_DLLPRIVATE void OpenMark(); 476 SW_DLLPRIVATE void CloseMark( sal_Bool bOkFlag ); 477 478 SW_DLLPRIVATE String GetWrdDelim(); 479 SW_DLLPRIVATE String GetSDelim(); 480 SW_DLLPRIVATE String GetBothDelim(); 481 482 struct ModeStack 483 { 484 ModeStack *pNext; 485 sal_Bool bAdd, 486 bBlock, 487 bExt, 488 bIns; 489 ModeStack(ModeStack *pNextMode, sal_Bool _bIns, sal_Bool _bExt, sal_Bool _bAdd, sal_Bool _bBlock): 490 pNext(pNextMode), 491 bAdd(_bAdd), 492 bBlock(_bBlock), 493 bExt(_bExt), 494 bIns(_bIns) 495 {} 496 } *pModeStack; 497 498 // Cursor bei PageUp / -Down mitnehmen 499 enum PageMove 500 { 501 MV_NO, 502 MV_PAGE_UP, 503 MV_PAGE_DOWN 504 } ePageMove; 505 506 struct CrsrStack 507 { 508 Point aDocPos; 509 CrsrStack *pNext; 510 sal_Bool bValidCurPos : 1; 511 sal_Bool bIsFrmSel : 1; 512 SwTwips lOffset; 513 514 CrsrStack( sal_Bool bValid, sal_Bool bFrmSel, const Point &rDocPos, 515 SwTwips lOff, CrsrStack *pN ) 516 : aDocPos(rDocPos), 517 pNext(pN), 518 bValidCurPos( bValid ), 519 bIsFrmSel( bFrmSel ), 520 lOffset(lOff) 521 { 522 523 524 } 525 526 } *pCrsrStack; 527 528 SwView &rView; 529 530 Point aDest; 531 sal_Bool bDestOnStack; 532 sal_Bool HasCrsrStack() const { return 0 != pCrsrStack; } 533 SW_DLLPRIVATE sal_Bool PushCrsr(SwTwips lOffset, sal_Bool bSelect); 534 SW_DLLPRIVATE sal_Bool PopCrsr(sal_Bool bUpdate, sal_Bool bSelect = sal_False); 535 536 // ENDE Cursor bei PageUp / -Down mitnehmen 537 SW_DLLPRIVATE sal_Bool _SttWrd(); 538 SW_DLLPRIVATE sal_Bool _EndWrd(); 539 SW_DLLPRIVATE sal_Bool _NxtWrd(); 540 SW_DLLPRIVATE sal_Bool _PrvWrd(); 541 // --> OD 2008-08-06 #i92468# 542 SW_DLLPRIVATE sal_Bool _NxtWrdForDelete(); 543 SW_DLLPRIVATE sal_Bool _PrvWrdForDelete(); 544 // <-- 545 SW_DLLPRIVATE sal_Bool _FwdSentence(); 546 SW_DLLPRIVATE sal_Bool _BwdSentence(); 547 sal_Bool _FwdPara(); 548 SW_DLLPRIVATE sal_Bool _BwdPara(); 549 550 // Selektionen 551 sal_Bool bIns :1; 552 sal_Bool bInSelect :1; 553 sal_Bool bExtMode :1; 554 sal_Bool bAddMode :1; 555 sal_Bool bBlockMode :1; 556 sal_Bool bLayoutMode :1; 557 sal_Bool bNoEdit :1; 558 sal_Bool bCopy :1; 559 sal_Bool bSelWrd :1; 560 sal_Bool bSelLn :1; 561 sal_Bool bIsInClickToEdit:1; 562 sal_Bool bClearMark :1; // Selektion fuer ChartAutoPilot nicht loeschen 563 sal_Bool mbRetainSelection :1; // Do not remove selections 564 565 Point aStart; 566 Link aSelTblLink; 567 568 SELECTFUNC fnLeaveSelect; 569 570 //setzt den Cursorstack nach dem Bewegen mit PageUp/-Down zurueck. 571 SW_DLLPRIVATE void _ResetCursorStack(); 572 573 SW_DLLPRIVATE void SttDragDrop(Timer *); 574 575 using SwCrsrShell::SetCrsr; 576 SW_DLLPRIVATE long SetCrsr(const Point *, sal_Bool bProp=sal_False ); 577 578 SW_DLLPRIVATE long SetCrsrKillSel(const Point *, sal_Bool bProp=sal_False ); 579 580 SW_DLLPRIVATE long StdSelect(const Point *, sal_Bool bProp=sal_False ); 581 SW_DLLPRIVATE long BeginDrag(const Point *, sal_Bool bProp=sal_False ); 582 SW_DLLPRIVATE long Drag(const Point *, sal_Bool bProp=sal_False ); 583 SW_DLLPRIVATE long EndDrag(const Point *, sal_Bool bProp=sal_False ); 584 585 SW_DLLPRIVATE long ExtSelWrd(const Point *, sal_Bool bProp=sal_False ); 586 SW_DLLPRIVATE long ExtSelLn(const Point *, sal_Bool bProp=sal_False ); 587 588 //Verschieben von Text aus Drag and Drop; Point ist 589 //Destination fuer alle Selektionen. 590 SW_DLLPRIVATE long MoveText(const Point *, sal_Bool bProp=sal_False ); 591 592 SW_DLLPRIVATE long BeginFrmDrag(const Point *, sal_Bool bProp=sal_False ); 593 594 //nach SSize/Move eines Frames Update; Point ist Destination. 595 SW_DLLPRIVATE long UpdateLayoutFrm(const Point *, sal_Bool bProp=sal_False ); 596 597 SW_DLLPRIVATE long SttLeaveSelect(const Point *, sal_Bool bProp=sal_False ); 598 SW_DLLPRIVATE long AddLeaveSelect(const Point *, sal_Bool bProp=sal_False ); 599 SW_DLLPRIVATE long Ignore(const Point *, sal_Bool bProp=sal_False ); 600 601 SW_DLLPRIVATE void LeaveExtSel() { bSelWrd = bSelLn = sal_False;} 602 SW_DLLPRIVATE sal_Bool _CanInsert(); 603 604 SW_DLLPRIVATE sal_Bool GoStart(sal_Bool KeepArea = sal_False, sal_Bool * = 0, 605 sal_Bool bSelect = sal_False, sal_Bool bDontMoveRegion = sal_False); 606 SW_DLLPRIVATE sal_Bool GoEnd(sal_Bool KeepArea = sal_False, sal_Bool * = 0); 607 608 enum BookMarkMove 609 { 610 BOOKMARK_INDEX, 611 BOOKMARK_NEXT, 612 BOOKMARK_PREV, 613 BOOKMARK_LAST_LAST_ENTRY 614 }; 615 616 SW_DLLPRIVATE sal_Bool MoveBookMark(BookMarkMove eFuncId, const ::sw::mark::IMark* const pMark=NULL); 617 }; 618 619 inline void SwWrtShell::ResetCursorStack() 620 { 621 if ( HasCrsrStack() ) 622 _ResetCursorStack(); 623 } 624 625 inline void SwWrtShell::SelTblCells(const Link &rLink, sal_Bool bMark ) 626 { 627 SetSelTblCells( sal_True ); 628 bClearMark = bMark; 629 aSelTblLink = rLink; 630 } 631 inline void SwWrtShell::EndSelTblCells() 632 { 633 SetSelTblCells( sal_False ); 634 bClearMark = sal_True; 635 } 636 637 inline sal_Bool SwWrtShell::IsInClickToEdit() const { return bIsInClickToEdit; } 638 639 inline sal_Bool SwWrtShell::Is_FnDragEQBeginDrag() const 640 { 641 #ifdef GCC 642 SELECTFUNC fnTmp = &SwWrtShell::BeginDrag; 643 return fnDrag == fnTmp; 644 #else 645 return sal::static_int_cast< sal_Bool >(fnDrag == &SwWrtShell::BeginDrag); 646 #endif 647 } 648 649 #endif 650