xref: /AOO41X/main/sw/source/ui/inc/wrtsh.hxx (revision 52f1c2ee1b77392125ca30aec3c767684308e131)
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 
IsModePushed() const120     sal_Bool    IsModePushed() const { return 0 != pModeStack; }
121     void    PushMode();
122     void    PopMode();
123 
124     void    SttSelect();
125     void    EndSelect();
IsInSelect() const126     sal_Bool    IsInSelect() const { return bInSelect; }
SetInSelect(sal_Bool bSel=sal_True)127     void    SetInSelect(sal_Bool bSel = sal_True) { bInSelect = bSel; }
128         // Liegt eine Text- oder Rahmenselektion vor?
HasSelection() const129     sal_Bool    HasSelection() const { return SwCrsrShell::HasSelection() ||
130                                         IsMultiSelection() || IsSelFrmMode() || IsObjSelected(); }
131     sal_Bool Pop( sal_Bool bOldCrsr = sal_True );
132 
133     void    EnterStdMode();
IsStdMode() const134     sal_Bool    IsStdMode() const { return !bExtMode && !bAddMode && !bBlockMode; }
135 
136     void    EnterExtMode();
137     void    LeaveExtMode();
138     long    ToggleExtMode();
IsExtMode() const139     sal_Bool    IsExtMode() const { return bExtMode; }
140 
141     void    EnterAddMode();
142     void    LeaveAddMode();
143     long    ToggleAddMode();
IsAddMode() const144     sal_Bool    IsAddMode() const { return bAddMode; }
145 
146     void    EnterBlockMode();
147     void    LeaveBlockMode();
148     long    ToggleBlockMode();
IsBlockMode() const149     sal_Bool    IsBlockMode() const { return bBlockMode; }
150 
151     void    SetInsMode( sal_Bool bOn = sal_True );
ToggleInsMode()152     void    ToggleInsMode() { SetInsMode( !bIns ); }
IsInsMode() const153     sal_Bool    IsInsMode() const { return bIns; }
154     void    SetRedlineModeAndCheckInsMode( sal_uInt16 eMode );
155 
156     void    EnterSelFrmMode(const Point *pStartDrag = 0);
157     void    LeaveSelFrmMode();
IsSelFrmMode() const158     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.
IsExtSel() const170     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
IsInWrd()177     sal_Bool    IsInWrd()           { return IsInWord(); }
IsSttWrd()178     sal_Bool    IsSttWrd()          { return IsStartWord(); }
179     sal_Bool    IsEndWrd();
IsSttOfPara() const180     sal_Bool    IsSttOfPara() const { return IsSttPara(); }
IsEndOfPara() const181     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 );
NxtWrd(sal_Bool bSelect=sal_False)204     sal_Bool NxtWrd     ( sal_Bool bSelect = sal_False ) { return SimpleMove( &SwWrtShell::_NxtWrd, bSelect ); }
PrvWrd(sal_Bool bSelect=sal_False)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 );
FwdPara(sal_Bool bSelect=sal_False)221     sal_Bool FwdPara    ( sal_Bool bSelect = sal_False )
222                 { return SimpleMove( &SwWrtShell::_FwdPara, bSelect ); }
BwdPara(sal_Bool bSelect=sal_False)223     sal_Bool BwdPara    ( sal_Bool bSelect = sal_False )
224                 { return SimpleMove( &SwWrtShell::_BwdPara, bSelect ); }
FwdSentence(sal_Bool bSelect=sal_False)225     sal_Bool FwdSentence( sal_Bool bSelect = sal_False )
226                 { return SimpleMove( &SwWrtShell::_FwdSentence, bSelect ); }
BwdSentence(sal_Bool bSelect=sal_False)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 );
260 
261     void    NoEdit(sal_Bool bHideCrsr = sal_True);
262     void    Edit();
IsNoEdit() const263     sal_Bool    IsNoEdit() const { return bNoEdit; }
264 
IsRetainSelection() const265     sal_Bool IsRetainSelection() const { return mbRetainSelection; }
SetRetainSelection(sal_Bool bRet)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& rFld );
301 
302     void    Insert(const String &);
303 
304     // Graphic
305     void    Insert( const String &rPath, const String &rFilter,
306                     const Graphic &, SwFlyFrmAttrMgr * = 0,
307                     sal_Bool bRule = sal_False );
308 
309     void    InsertByWord( const String & );
310     void    InsertPageBreak(const String *pPageDesc = 0, sal_uInt16 nPgNum = 0 );
311     void    InsertLineBreak();
312     void    InsertColumnBreak();
313     void    InsertFootnote(const String &, sal_Bool bEndNote = sal_False, sal_Bool bEdit = sal_True );
314     void    SplitNode( sal_Bool bAutoFormat = sal_False, sal_Bool bCheckTableStart = sal_True );
315     bool    CanInsert();
316 
317     // Verzeichnisse
318     void    InsertTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet = 0);
319     sal_Bool    UpdateTableOf(const SwTOXBase& rTOX, const SfxItemSet* pSet = 0);
320 
321     // Numerierung und Bullets
322     /**
323        Turns on numbering or bullets.
324 
325        @param bNum    sal_True: turn on numbering
326                       sal_False: turn on bullets
327     */
328     void    NumOrBulletOn(sal_Bool bNum); // #i29560#
329     void    NumOrBulletOff(); // #i29560#
330     void    NumOn();
331     void    BulletOn();
332 
333     //OLE
334     void    InsertObject(     /*SvInPlaceObjectRef *pObj, */       // != 0 fuer Clipboard
335                           const svt::EmbeddedObjectRef&,
336                           SvGlobalName *pName = 0,      // != 0 entspr. Object erzeugen.
337                           sal_Bool bActivate = sal_True,
338                           sal_uInt16 nSlotId = 0);       // SlotId fuer Dialog
339 
340     sal_Bool    InsertOleObject( const svt::EmbeddedObjectRef& xObj, SwFlyFrmFmt **pFlyFrmFmt = 0 );
341     void    LaunchOLEObj( long nVerb = 0 );             // Server starten
IsOLEObj() const342     sal_Bool    IsOLEObj() const { return GetCntType() == CNT_OLE;}
343     virtual void MoveObjectIfActive( svt::EmbeddedObjectRef& xObj, const Point& rOffset );
344     virtual void CalcAndSetScale( svt::EmbeddedObjectRef& xObj,
345                                   const SwRect *pFlyPrtRect = 0,
346                                   const SwRect *pFlyFrmRect = 0,
347                                   const bool bNoTxtFrmPrtAreaChanged = false );
348     virtual void ConnectObj( svt::EmbeddedObjectRef&  xIPObj, const SwRect &rPrt,
349                              const SwRect &rFrm );
350 
351     // Vorlagen und Formate
352 
353     // enum gibt an, was geschehen soll, wenn das Style nicht gefunden wurde
354     enum GetStyle { GETSTYLE_NOCREATE,          // keins anlegen
355                     GETSTYLE_CREATESOME,        // falls auf PoolId mapt anlegen
356                     GETSTYLE_CREATEANY };       // ggfs Standard returnen
357 
358     SwTxtFmtColl*   GetParaStyle(const String &rCollName,
359                                     GetStyle eCreate = GETSTYLE_NOCREATE);
360     SwCharFmt*      GetCharStyle(const String &rFmtName,
361                                     GetStyle eCreate = GETSTYLE_NOCREATE);
362     SwFrmFmt*       GetTblStyle(const String &rFmtName);
363 
364     void    SetPageStyle(const String &rCollName);
365 
366     String  GetCurPageStyle( const sal_Bool bCalcFrm = sal_True ) const;
367 
368     // Aktuelle Vorlage anhand der geltenden Attribute aendern
369     void    QuickUpdateStyle();
370 
371     enum DoType { UNDO, REDO, REPEAT };
372 
373     void    Do( DoType eDoType, sal_uInt16 nCnt = 1 );
374     String  GetDoString( DoType eDoType ) const;
375     String  GetRepeatString() const;
376     sal_uInt16  GetDoStrings( DoType eDoType, SfxStringListItem& rStrLstItem ) const;
377 
378     //Suchen oder Ersetzen
379     sal_uLong SearchPattern(const com::sun::star::util::SearchOptions& rSearchOpt,
380                          sal_Bool bSearchInNotes,
381                          SwDocPositions eStart, SwDocPositions eEnde,
382                          FindRanges eFlags = FND_IN_BODY,
383                          int bReplace = sal_False );
384 
385     sal_uLong SearchTempl  (const String &rTempl,
386                          SwDocPositions eStart, SwDocPositions eEnde,
387                          FindRanges eFlags = FND_IN_BODY,
388                          const String* pReplTempl = 0 );
389 
390     sal_uLong SearchAttr   (const SfxItemSet& rFindSet,
391                          sal_Bool bNoColls,
392                          SwDocPositions eStart,SwDocPositions eEnde,
393                          FindRanges eFlags = FND_IN_BODY,
394                          const com::sun::star::util::SearchOptions* pSearchOpt = 0,
395                          const SfxItemSet* pReplaceSet = 0);
396 
397     void AutoCorrect( SvxAutoCorrect& rACorr, sal_Unicode cChar = ' ' );
398 
399     // Aktion vor Cursorbewegung
400     // Hebt gfs. Selektionen auf, triggert Timer und GCAttr()
401     void    MoveCrsr( sal_Bool bWithSelect = sal_False );
402 
403     // Eingabefelder updaten
404     sal_Bool    StartInputFldDlg(SwField*, sal_Bool bNextButton, Window* pParentWin = 0, ByteString* pWindowState = 0);
405     // update DropDown fields
406     sal_Bool    StartDropDownFldDlg(SwField*, sal_Bool bNextButton, ByteString* pWindowState = 0);
407 
408     //"Handler" fuer Anederungen an der DrawView - fuer Controls.
409     virtual void DrawSelChanged( );
410 
411     // springe zum Bookmark und setze die "Selections-Flags" wieder richtig
412     sal_Bool GotoMark( const ::sw::mark::IMark* const pMark );
413     sal_Bool GotoMark( const ::sw::mark::IMark* const pMark, sal_Bool bSelect, sal_Bool bStart );
414     sal_Bool GotoMark( const ::rtl::OUString& rName );
415     sal_Bool GoNextBookmark(); // sal_True, wenn's noch eine gab
416     sal_Bool GoPrevBookmark();
417 
418     bool GotoFieldmark(::sw::mark::IFieldmark const * const pMark);
419 
420     sal_Bool GotoField( const SwFmtFld& rFld );
421 
422     // jump to the next / previous hyperlink - inside text and also
423     // on graphics
424     sal_Bool SelectNextPrevHyperlink( sal_Bool bNext = sal_True );
425 
426     // Zugehoerige SwView ermitteln
GetView() const427     const SwView&       GetView() const { return rView; }
GetView()428     SwView&             GetView() { return rView; }
429 
430     //Weil es sonst keiner macht, gibt es hier eine ExecMacro()
431     void ExecMacro( const SvxMacro& rMacro, String* pRet = 0, SbxArray* pArgs = 0 );
432     // rufe ins dunkle Basic/JavaScript
433     sal_uInt16 CallEvent( sal_uInt16 nEvent, const SwCallMouseEvent& rCallEvent,
434                         sal_Bool bCheckPtr = sal_False, SbxArray* pArgs = 0,
435                         const Link* pCallBack = 0 );
436 
437     // ein Klick aus das angegebene Feld. Der Cursor steht auf diesem.
438     // Fuehre die vor definierten Aktionen aus.
439     void ClickToField( const SwField& rFld );
440     void ClickToINetAttr( const SwFmtINetFmt& rItem, sal_uInt16 nFilter = URLLOAD_NOFILTER );
441     sal_Bool ClickToINetGrf( const Point& rDocPt, sal_uInt16 nFilter = URLLOAD_NOFILTER );
442     inline sal_Bool IsInClickToEdit() const ;
443 
444     // fall ein URL-Button selektiert ist, dessen URL returnen, ansonsten
445     // einen LeerString
446     sal_Bool GetURLFromButton( String& rURL, String& rDescr ) const;
447 
448     void NavigatorPaste( const NaviContentBookmark& rBkmk,
449                          const sal_uInt16 nAction );
450 
451     virtual void ApplyViewOptions( const SwViewOption &rOpt );
452 
453     // autom. Update von Vorlagen
454     void AutoUpdateFrame(SwFrmFmt* pFmt, const SfxItemSet& rStyleSet);
455     void AutoUpdatePara(SwTxtFmtColl* pColl, const SfxItemSet& rStyleSet);
456 
457     // Link fuers einfuegen von Bereichen uebers Drag&Drop/Clipboard
458     DECL_STATIC_LINK( SwWrtShell, InsertRegionDialog, SwSectionData* );
459 
460 
461     //ctoren, der erstere ist eine Art kontrollierter copy ctor fuer weitere
462     //Sichten auf ein Dokument
463     SwWrtShell( SwWrtShell&, Window *pWin, SwView &rShell);
464     SwWrtShell( SwDoc& rDoc, Window *pWin, SwView &rShell,
465                 const SwViewOption *pViewOpt = 0);
466     virtual ~SwWrtShell();
467 
468     sal_Bool TryRemoveIndent(); // #i23725#
469 
470     String GetSelDescr() const;
471 
472 private:
473 
474     SW_DLLPRIVATE void  OpenMark();
475     SW_DLLPRIVATE void  CloseMark( sal_Bool bOkFlag );
476 
477     SW_DLLPRIVATE String    GetWrdDelim();
478     SW_DLLPRIVATE String    GetSDelim();
479     SW_DLLPRIVATE String    GetBothDelim();
480 
481     struct ModeStack
482     {
483         ModeStack   *pNext;
484         sal_Bool        bAdd,
485                     bBlock,
486                     bExt,
487                     bIns;
ModeStackSwWrtShell::ModeStack488         ModeStack(ModeStack *pNextMode, sal_Bool _bIns, sal_Bool _bExt, sal_Bool _bAdd, sal_Bool _bBlock):
489             pNext(pNextMode),
490             bAdd(_bAdd),
491             bBlock(_bBlock),
492             bExt(_bExt),
493             bIns(_bIns)
494              {}
495     } *pModeStack;
496 
497     // Cursor bei PageUp / -Down mitnehmen
498     enum PageMove
499     {
500         MV_NO,
501         MV_PAGE_UP,
502         MV_PAGE_DOWN
503     }  ePageMove;
504 
505     struct CrsrStack
506     {
507         Point aDocPos;
508         CrsrStack *pNext;
509         sal_Bool bValidCurPos : 1;
510         sal_Bool bIsFrmSel : 1;
511         SwTwips lOffset;
512 
CrsrStackSwWrtShell::CrsrStack513         CrsrStack( sal_Bool bValid, sal_Bool bFrmSel, const Point &rDocPos,
514                     SwTwips lOff, CrsrStack *pN )
515             : aDocPos(rDocPos),
516             pNext(pN),
517             bValidCurPos( bValid ),
518             bIsFrmSel( bFrmSel ),
519             lOffset(lOff)
520         {
521 
522 
523         }
524 
525     } *pCrsrStack;
526 
527     SwView  &rView;
528 
529     Point   aDest;
530     sal_Bool    bDestOnStack;
HasCrsrStack() const531     sal_Bool    HasCrsrStack() const { return 0 != pCrsrStack; }
532     SW_DLLPRIVATE sal_Bool  PushCrsr(SwTwips lOffset, sal_Bool bSelect);
533     SW_DLLPRIVATE sal_Bool  PopCrsr(sal_Bool bUpdate, sal_Bool bSelect = sal_False);
534 
535     // ENDE Cursor bei PageUp / -Down mitnehmen
536     SW_DLLPRIVATE sal_Bool _SttWrd();
537     SW_DLLPRIVATE sal_Bool _EndWrd();
538     SW_DLLPRIVATE sal_Bool _NxtWrd();
539     SW_DLLPRIVATE sal_Bool _PrvWrd();
540     // --> OD 2008-08-06 #i92468#
541     SW_DLLPRIVATE sal_Bool _NxtWrdForDelete();
542     SW_DLLPRIVATE sal_Bool _PrvWrdForDelete();
543     // <--
544     SW_DLLPRIVATE sal_Bool _FwdSentence();
545     SW_DLLPRIVATE sal_Bool _BwdSentence();
546     sal_Bool _FwdPara();
547     SW_DLLPRIVATE sal_Bool _BwdPara();
548 
549         //  Selektionen
550     sal_Bool    bIns            :1;
551     sal_Bool    bInSelect       :1;
552     sal_Bool    bExtMode        :1;
553     sal_Bool    bAddMode        :1;
554     sal_Bool    bBlockMode      :1;
555     sal_Bool    bLayoutMode     :1;
556     sal_Bool    bNoEdit         :1;
557     sal_Bool    bCopy           :1;
558     sal_Bool    bSelWrd         :1;
559     sal_Bool    bSelLn          :1;
560     sal_Bool    bIsInClickToEdit:1;
561     sal_Bool    bClearMark      :1;     // Selektion fuer ChartAutoPilot nicht loeschen
562     sal_Bool    mbRetainSelection :1; // Do not remove selections
563 
564     Point   aStart;
565     Link    aSelTblLink;
566 
567     SELECTFUNC  fnLeaveSelect;
568 
569     //setzt den Cursorstack nach dem Bewegen mit PageUp/-Down zurueck.
570     SW_DLLPRIVATE void  _ResetCursorStack();
571 
572     SW_DLLPRIVATE void  SttDragDrop(Timer *);
573 
574     using SwCrsrShell::SetCrsr;
575     SW_DLLPRIVATE long  SetCrsr(const Point *, sal_Bool bProp=sal_False );
576 
577     SW_DLLPRIVATE long  SetCrsrKillSel(const Point *, sal_Bool bProp=sal_False );
578 
579     SW_DLLPRIVATE long  StdSelect(const Point *, sal_Bool bProp=sal_False );
580     SW_DLLPRIVATE long  BeginDrag(const Point *, sal_Bool bProp=sal_False );
581     SW_DLLPRIVATE long  Drag(const Point *, sal_Bool bProp=sal_False );
582     SW_DLLPRIVATE long  EndDrag(const Point *, sal_Bool bProp=sal_False );
583 
584     SW_DLLPRIVATE long  ExtSelWrd(const Point *, sal_Bool bProp=sal_False );
585     SW_DLLPRIVATE long  ExtSelLn(const Point *, sal_Bool bProp=sal_False );
586 
587     //Verschieben von Text aus Drag and Drop; Point ist
588     //Destination fuer alle Selektionen.
589     SW_DLLPRIVATE long  MoveText(const Point *, sal_Bool bProp=sal_False );
590 
591     SW_DLLPRIVATE long  BeginFrmDrag(const Point *, sal_Bool bProp=sal_False );
592 
593     //nach SSize/Move eines Frames Update; Point ist Destination.
594     SW_DLLPRIVATE long  UpdateLayoutFrm(const Point *, sal_Bool bProp=sal_False );
595 
596     SW_DLLPRIVATE long  SttLeaveSelect(const Point *, sal_Bool bProp=sal_False );
597     SW_DLLPRIVATE long  AddLeaveSelect(const Point *, sal_Bool bProp=sal_False );
598     SW_DLLPRIVATE long  Ignore(const Point *, sal_Bool bProp=sal_False );
599 
LeaveExtSel()600     SW_DLLPRIVATE void  LeaveExtSel() { bSelWrd = bSelLn = sal_False;}
601     SW_DLLPRIVATE bool _CanInsert();
602 
603     SW_DLLPRIVATE sal_Bool  GoStart(sal_Bool KeepArea = sal_False, sal_Bool * = 0,
604             sal_Bool bSelect = sal_False, sal_Bool bDontMoveRegion = sal_False);
605     SW_DLLPRIVATE sal_Bool  GoEnd(sal_Bool KeepArea = sal_False, sal_Bool * = 0);
606 
607     enum BookMarkMove
608     {
609         BOOKMARK_INDEX,
610         BOOKMARK_NEXT,
611         BOOKMARK_PREV,
612         BOOKMARK_LAST_LAST_ENTRY
613     };
614 
615     SW_DLLPRIVATE sal_Bool MoveBookMark(BookMarkMove eFuncId, const ::sw::mark::IMark* const pMark=NULL);
616 };
617 
ResetCursorStack()618 inline void SwWrtShell::ResetCursorStack()
619 {
620     if ( HasCrsrStack() )
621         _ResetCursorStack();
622 }
623 
SelTblCells(const Link & rLink,sal_Bool bMark)624 inline void SwWrtShell::SelTblCells(const Link &rLink, sal_Bool bMark )
625 {
626     SetSelTblCells( sal_True );
627     bClearMark = bMark;
628     aSelTblLink = rLink;
629 }
EndSelTblCells()630 inline void SwWrtShell::EndSelTblCells()
631 {
632     SetSelTblCells( sal_False );
633     bClearMark = sal_True;
634 }
635 
IsInClickToEdit() const636 inline sal_Bool SwWrtShell::IsInClickToEdit() const { return bIsInClickToEdit; }
637 
Is_FnDragEQBeginDrag() const638 inline sal_Bool SwWrtShell::Is_FnDragEQBeginDrag() const
639 {
640 #ifdef GCC
641     SELECTFUNC  fnTmp = &SwWrtShell::BeginDrag;
642     return fnDrag == fnTmp;
643 #else
644     return sal::static_int_cast< sal_Bool >(fnDrag == &SwWrtShell::BeginDrag);
645 #endif
646 }
647 
648 #endif
649