1 /*************************************************************************
3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
5 * Copyright 2008 by Sun Microsystems, Inc.
7 * OpenOffice.org - a multi-platform office productivity suite
9 * $RCSfile: editsh.hxx,v $
12 * This file is part of OpenOffice.org.
14 * OpenOffice.org is free software: you can redistribute it and/or modify
15 * it under the terms of the GNU Lesser General Public License version 3
16 * only, as published by the Free Software Foundation.
18 * OpenOffice.org is distributed in the hope that it will be useful,
19 * but WITHOUT ANY WARRANTY; without even the implied warranty of
20 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
21 * GNU Lesser General Public License version 3 for more details
22 * (a copy is included in the LICENSE file that accompanied this code).
24 * You should have received a copy of the GNU Lesser General Public License
25 * version 3 along with OpenOffice.org. If not, see
26 * <http://www.openoffice.org/license.html>
27 * for a copy of the LGPLv3 License.
29 ************************************************************************/
33 #include <com/sun/star/text/HoriOrientation.hpp>
34 #include <com/sun/star/embed/XEmbeddedObject.hpp>
35 #include <tools/string.hxx>
36 #include <svtools/svarray.hxx>
37 #include <vcl/font.hxx>
38 #include <svx/swafopt.hxx>
40 #include <crsrsh.hxx> // fuer Basisklasse
41 #include <itabenum.hxx>
42 #include <swdbdata.hxx>
43 #include <com/sun/star/linguistic2/XSpellAlternatives.hpp>
44 #include <com/sun/star/linguistic2/ProofreadingResult.hpp>
45 #include <fldupde.hxx>
46 #include <tblenum.hxx>
51 #include <svtools/embedhlp.hxx>
56 class CommandExtTextInputData
;
59 class SvNumberFormatter
;
65 class SwField
; // fuer Felder
73 class SwAutoCompleteWord
;
77 class SwNumRule
; // Numerierung
78 //class SwNodeNum; // Numerierung
80 class SwUndoIds
; // fuer Undo
85 class SwFrmFmt
; // fuer GetTxtNodeFmts()
88 class SwRootFrm
; // fuer CTOR
89 class Graphic
; // fuer GetGraphic
90 class GraphicObject
; // fuer GetGraphicObj
91 class SwFmtINetFmt
; // InsertURL
93 class SwTextBlocks
; // fuer GlossaryRW
100 class SwTableAutoFmt
;
104 class SwGlblDocContent
;
105 class SwGlblDocContents
;
110 class SwLineNumberInfo
;
113 struct SwConversionArgs
;
116 namespace com
{ namespace sun
{ namespace star
{ namespace uno
{
117 template < class > class Sequence
;
122 typedef std::vector
<SpellPortion
> SpellPortions
;
127 #define GETSELTXT_PARABRK_TO_BLANK 0
128 #define GETSELTXT_PARABRK_KEEP 1
129 #define GETSELTXT_PARABRK_TO_ONLYCR 2
131 /****************************************************************
132 * zum Abfragen der INet-Attribute fuer den Navigator
133 ****************************************************************/
137 const SwTxtINetFmt
& rINetAttr
;
139 SwGetINetAttr( const String
& rTxt
, const SwTxtINetFmt
& rAttr
)
140 : sText( rTxt
), rINetAttr( rAttr
)
143 SV_DECL_PTRARR_DEL( SwGetINetAttrs
, SwGetINetAttr
*, 0, 5 )
145 /****************************************************************
146 * Typen der Inhaltsformen
147 ****************************************************************/
148 #define CNT_TXT 0x0001
149 #define CNT_GRF 0x0002
150 #define CNT_OLE 0x0010
151 /* Teste einen USHORT auf eine bestimmte Inhaltsform */
152 #define CNT_HasTxt(USH) ((USH)&CNT_TXT)
153 #define CNT_HasGrf(USH) ((USH)&CNT_GRF)
154 #define CNT_HasOLE(USH) ((USH)&CNT_OLE)
156 class SW_DLLPUBLIC SwEditShell
: public SwCrsrShell
158 static SvxSwAutoFmtFlags
* pAutoFmtFlags
;
160 // fuer die privaten Methoden DelRange und die vom AutoCorrect
161 friend class SwAutoFormat
;
162 friend void _InitCore();
163 friend void _FinitCore();
164 // fuer die PamCorrAbs/-Rel Methoden
167 SW_DLLPRIVATE SfxPoolItem
& _GetChrFmt( SfxPoolItem
& ) const;
170 * liefert einen Pointer auf einen SwGrfNode; dieser wird von
171 * GetGraphic() und GetGraphicSize() verwendet.
173 SW_DLLPRIVATE SwGrfNode
*_GetGrfNode() const ;
175 SW_DLLPRIVATE
void DeleteSel( SwPaM
& rPam
, BOOL
* pUndo
= 0 );
177 SW_DLLPRIVATE
void _SetSectionAttr( SwSectionFmt
& rSectFmt
, const SfxItemSet
& rSet
);
179 using ViewShell::UpdateFlds
;
180 using SwModify::GetInfo
;
183 // Editieren (immer auf allen selektierten Bereichen)
184 void Insert( sal_Unicode
, BOOL bOnlyCurrCrsr
= FALSE
);
185 void Insert2( const String
&, const bool bForceExpandHints
= false );
186 void Overwrite( const String
& );
188 // Ersetz einen selektierten Bereich in einem TextNode mit dem
189 // String. Ist fuers Suchen&Ersetzen gedacht.
190 // bRegExpRplc - ersetze Tabs (\\t) und setze den gefundenen String
192 // z.B.: Fnd: "zzz", Repl: "xx\t\\t..&..\&"
193 // --> "xx\t<Tab>..zzz..&"
194 BOOL
Replace( const String
& rNewStr
, BOOL bRegExpRplc
= FALSE
);
196 // loescht den Inhalt aller Bereiche;
197 // werden ganze Nodes selektiert, werden die Nodes geloescht
200 // remove a complete paragraph
203 // change text to Upper/Lower/Hiragana/Katagana/...
204 void TransliterateText( sal_uInt32 nType
);
206 // count words in current selection
207 void CountWords( SwDocStat
& rStat
) const;
209 // loesche den nicht sichtbaren Content aus dem Document, wie z.B.:
210 // versteckte Bereiche, versteckte Absaetze
211 BOOL
RemoveInvisibleContent();
213 // replace fields by text - mailmerge support
214 BOOL
ConvertFieldsToText();
215 // set all numbering start points to a fixed value - mailmerge support
216 void SetNumberingRestart();
218 // embedded alle lokalen Links (Bereiche/Grafiken)
219 USHORT
GetLinkUpdMode(BOOL bDocSettings
= FALSE
) const;
220 void SetLinkUpdMode( USHORT nMode
);
222 // kopiere den Inhalt aller Bereiche an die akt. Cursor-Position
223 // in die angegebene Shell
224 long Copy( SwEditShell
* pDestShell
= 0 );
226 // fuers Kopieren uebers ClipBoard:
227 // wird Tabelle in Tabelle kopiert, verschiebe aus dieser dann
228 // alle Cursor. Copy und Paste muss aufgrund der FlyFrames in
229 // der FEShell stehen!
230 // kopiere alle Selectionen und das Doc
231 //JP 21.10.96: und fuer die SVX-Autokorrektur
232 BOOL
_CopySelToDoc( SwDoc
* pInsDoc
, SwNodeIndex
* pNdInsPos
= 0 );
234 long SplitNode( BOOL bAutoFormat
= FALSE
, BOOL bCheckTableStart
= TRUE
);
235 sal_Bool
AppendTxtNode();
236 void AutoFmtBySplitNode();
238 // ist der Cursor in einem INetAttribut, dann wird das komplett
239 // geloescht; inclusive des Hinweistextes (wird beim Drag&Drop gebraucht)
240 BOOL
DelINetAttrWithText();
242 // ist der Cursor am Ende einer Zeichenvorlage, an der das DontExpand-Flag
243 // noch nicht gesetzt ist, wird dies gesetzt ( => return TRUE; )
244 BOOL
DontExpandFmt();
246 // Anwenden / Entfernen von Attributen
247 // liefert Attribute im angeforderten AttributSet. Wenn nicht eindeutig
248 // steht im Set ein DONT_CARE !!
249 // --> OD 2008-01-16 #newlistlevelattrs#
250 // Renaming method to <GetCurAttr(..)> indicating that the attributes at
251 // the current cursors are retrieved.
252 // Introduce 2nd optional parameter <bMergeIndentValuesOfNumRule>.
253 // If <bMergeIndentValuesOfNumRule> == TRUE, the indent attributes of
254 // the corresponding list level of an applied list style is merged into
255 // the requested item set as a LR-SPACE item, if corresponding node has not
256 // its own indent attributes and the position-and-space mode of the list
257 // level is SvxNumberFormat::LABEL_ALIGNMENT.
258 BOOL
GetCurAttr( SfxItemSet
& ,
259 const bool bMergeIndentValuesOfNumRule
= false ) const;
261 void SetAttr( const SfxPoolItem
&, USHORT nFlags
= 0 );
262 void SetAttr( const SfxItemSet
&, USHORT nFlags
= 0 );
264 // Setze das Attribut als neues default Attribut im Dokument.
265 void SetDefault( const SfxPoolItem
& );
267 // Erfrage das Default Attribut vom Dokument.
268 const SfxPoolItem
& GetDefault( USHORT nFmtHint
) const;
270 void ResetAttr( const SvUShortsSort
* pAttrs
= 0 );
273 // returns the scripttpye of the selection
274 USHORT
GetScriptType() const;
276 // returns the language at current cursor position
277 USHORT
GetCurLang() const;
280 USHORT
GetTblFrmFmtCount( BOOL bUsed
= FALSE
) const;
281 SwFrmFmt
& GetTblFrmFmt(USHORT nFmt
, BOOL bUsed
= FALSE
) const;
282 String
GetUniqueTblName() const;
285 USHORT
GetCharFmtCount() const;
286 SwCharFmt
& GetCharFmt(USHORT nFmt
) const;
287 SwCharFmt
* GetCurCharFmt() const;
288 void FillByEx(SwCharFmt
*, BOOL bReset
= FALSE
);
289 SwCharFmt
* MakeCharFmt( const String
& rName
, SwCharFmt
* pDerivedFrom
= 0 );
290 SwCharFmt
* FindCharFmtByName( const String
& rName
) const;
293 /* Formatcollections, neu */
294 /* GetXXXCount() liefert die Anzahl der im Dokument vorhandenen XXX
295 * GetXXX(i) liefert das i-te XXX (ERR_RAISE bei Ueberindizierung!)
296 * DelXXX(i) loescht das i-te XXX (ERR_RAISE bei Ueberindizierung!)
297 * GetCurXXX() liefert das am Cursor oder in den Bereichen
298 * geltende XXX (0, wenn nicht eindeutig!)
299 * SetXXX() setzt am Cursor oder in den Bereichen das XXX
300 * MakeXXX() macht ein XXX, abgeleitet vom pDerivedFrom
304 SwTxtFmtColl
& GetDfltTxtFmtColl() const;
305 USHORT
GetTxtFmtCollCount() const;
306 SwTxtFmtColl
& GetTxtFmtColl( USHORT nTxtFmtColl
) const;
307 SwTxtFmtColl
* GetCurTxtFmtColl() const;
308 // --> OD 2007-11-06 #i62675#
309 // Add 2nd optional parameter <bResetListAttrs> - see also <SwDoc::SetTxtFmtColl(..)>
310 void SetTxtFmtColl( SwTxtFmtColl
*,
311 bool bResetListAttrs
= false );
313 SwTxtFmtColl
*MakeTxtFmtColl(const String
&rFmtCollName
,
314 SwTxtFmtColl
*pDerivedFrom
= 0);
315 void FillByEx(SwTxtFmtColl
*, BOOL bReset
= FALSE
);
316 SwTxtFmtColl
* FindTxtFmtCollByName( const String
& rName
) const;
318 // Gebe die "Auto-Collection" mit der Id zurueck. Existiert
319 // sie noch nicht, dann erzuege sie
320 SwTxtFmtColl
* GetTxtCollFromPool( USHORT nId
);
321 // return das geforderte automatische Format - Basis-Klasse !
322 SwFmt
* GetFmtFromPool( USHORT nId
);
323 // returne die geforderte automatische Seiten-Vorlage
324 SwPageDesc
* GetPageDescFromPool( USHORT nId
);
326 // erfrage ob die Absatz-/Zeichen-/Rahmen-/Seiten - Vorlage benutzt wird
327 BOOL
IsUsed( const SwModify
& ) const;
329 // returne das geforderte automatische Format
330 SwFrmFmt
* GetFrmFmtFromPool( USHORT nId
)
331 { return (SwFrmFmt
*)SwEditShell::GetFmtFromPool( nId
); }
332 SwCharFmt
* GetCharFmtFromPool( USHORT nId
)
333 { return (SwCharFmt
*)SwEditShell::GetFmtFromPool( nId
); }
336 void Insert2(SwField
&, const bool bForceExpandHints
= false);
337 SwField
* GetCurFld() const;
339 void UpdateFlds( SwField
& ); // ein einzelnes Feld
341 USHORT
GetFldTypeCount(USHORT nResId
= USHRT_MAX
, BOOL bUsed
= FALSE
) const;
342 SwFieldType
* GetFldType(USHORT nId
, USHORT nResId
= USHRT_MAX
, BOOL bUsed
= FALSE
) const;
343 SwFieldType
* GetFldType(USHORT nResId
, const String
& rName
) const;
345 void RemoveFldType(USHORT nId
, USHORT nResId
= USHRT_MAX
);
346 void RemoveFldType(USHORT nResId
, const String
& rName
);
348 void FieldToText( SwFieldType
* pType
);
350 void ChangeAuthorityData(const SwAuthEntry
* pNewData
);
353 SwDBData
GetDBData() const;
354 const SwDBData
& GetDBDesc() const;
355 void ChgDBData(const SwDBData
& SwDBData
);
356 void ChangeDBFields( const SvStringsDtor
& rOldNames
,
357 const String
& rNewName
);
358 void GetAllUsedDB( SvStringsDtor
& rDBNameList
,
359 SvStringsDtor
* pAllDBNames
= 0 );
361 BOOL
IsAnyDatabaseFieldInDoc()const;
362 //check whether DB fields point to an available data source and returns it
363 BOOL
IsFieldDataSourceAvailable(String
& rUsedDataSource
) const;
364 void UpdateExpFlds(BOOL bCloseDB
= FALSE
);// nur alle ExpressionFelder updaten
365 void SetFixFields( BOOL bOnlyTimeDate
= FALSE
,
366 const DateTime
* pNewDateTime
= 0 );
368 void UnlockExpFlds();
370 SwFldUpdateFlags
GetFldUpdateFlags(BOOL bDocSettings
= FALSE
) const;
371 void SetFldUpdateFlags( SwFldUpdateFlags eFlags
);
373 // fuer die Evaluierung der DBFelder (neuer DB-Manager)
374 SwNewDBMgr
* GetNewDBMgr() const;
376 SwFieldType
* InsertFldType(const SwFieldType
&);
378 // Aenderungen am Dokument?
379 BOOL
IsModified() const;
381 void ResetModified();
382 void SetUndoNoResetModified();
384 // Dokument - Statistics
385 void UpdateDocStat( SwDocStat
& rStat
);
387 // Verzeichnismarke einfuegen loeschen
388 void Insert(const SwTOXMark
& rMark
);
389 void DeleteTOXMark(SwTOXMark
* pMark
);
391 // Alle Markierungen am aktuellen SPoint ermitteln
392 USHORT
GetCurTOXMarks(SwTOXMarks
& rMarks
) const ;
394 // Verzeichnis einfuegen, und bei Bedarf erneuern
395 void InsertTableOf(const SwTOXBase
& rTOX
,
396 const SfxItemSet
* pSet
= 0);
397 BOOL
UpdateTableOf(const SwTOXBase
& rTOX
,
398 const SfxItemSet
* pSet
= 0);
399 const SwTOXBase
* GetCurTOX() const;
400 const SwTOXBase
* GetDefaultTOXBase( TOXTypes eTyp
, BOOL bCreate
= FALSE
);
401 void SetDefaultTOXBase(const SwTOXBase
& rBase
);
403 BOOL
IsTOXBaseReadonly(const SwTOXBase
& rTOXBase
) const;
404 void SetTOXBaseReadonly(const SwTOXBase
& rTOXBase
, BOOL bReadonly
);
406 USHORT
GetTOXCount() const;
407 const SwTOXBase
* GetTOX( USHORT nPos
) const;
408 BOOL
DeleteTOX( const SwTOXBase
& rTOXBase
, BOOL bDelNodes
= FALSE
);
410 // nach einlesen einer Datei alle Verzeichnisse updaten
411 void SetUpdateTOX( BOOL bFlag
= TRUE
);
412 BOOL
IsUpdateTOX() const;
414 // Verzeichnis-Typen verwalten
415 USHORT
GetTOXTypeCount(TOXTypes eTyp
) const;
416 const SwTOXType
* GetTOXType(TOXTypes eTyp
, USHORT nId
) const;
417 void InsertTOXType(const SwTOXType
& rTyp
);
420 BOOL
UpdateField(sw::mark::IFieldmark
&fieldBM
);
423 const String
& GetTOIAutoMarkURL() const;
424 void SetTOIAutoMarkURL(const String
& rSet
);
425 void ApplyAutoMark();
427 // Schluessel fuer die Indexverwaltung
428 USHORT
GetTOIKeys( SwTOIKeyType eTyp
, SvStringsSort
& rArr
) const;
430 void SetOutlineNumRule(const SwNumRule
&);
431 const SwNumRule
* GetOutlineNumRule() const;
432 // Gliederung - hoch-/runterstufen
433 BOOL
OutlineUpDown( short nOffset
= 1 );
434 // Gliederung - hoch-/runtermoven
435 BOOL
MoveOutlinePara( short nOffset
= 1);
436 // Outlines and SubOutline are protected ?
437 BOOL
IsProtectedOutlinePara() const;
439 // Numerierung Aufzaehlunglisten
440 // liefert Regelwerk der aktuellen Aufzaehlung (FALSE sonst)
441 const SwNumRule
* GetCurNumRule() const;
443 // setzt, wenn noch keine Numerierung, sonst wird geaendert
444 // arbeitet mit alten und neuen Regeln, nur Differenzen aktualisieren
445 // --> OD 2008-02-08 #newlistlevelattrs#
446 // Add optional parameter <bResetIndentAttrs> (default value FALSE).
447 // If <bResetIndentAttrs> equals true, the indent attributes "before text"
448 // and "first line indent" are additionally reset at the current selection,
449 // if the list style makes use of the new list level attributes.
450 // --> OD 2008-03-17 #refactorlists#
451 // introduce parameters <bCreateNewList> and <sContinuedListId>
452 // <bCreateNewList> indicates, if a new list is created by applying the
454 // If <bCreateNewList> equals FALSE, <sContinuedListId> may contain the
455 // list Id of a list, which has to be continued by applying the given list style
456 void SetCurNumRule( const SwNumRule
&,
457 const bool bCreateNewList
/*= false*/,
458 const String sContinuedListId
= String(),
459 const bool bResetIndentAttrs
= false );
461 // Absaetze ohne Numerierung, aber mit Einzuegen
463 // Loeschen, Splitten der Aufzaehlungsliste
465 // Hoch-/Runterstufen
466 BOOL
NumUpDown( BOOL bDown
= TRUE
);
467 // Hoch-/Runtermoven sowohl innerhalb als auch ausserhalb von Numerierungen
468 BOOL
MoveParagraph( long nOffset
= 1);
469 BOOL
MoveNumParas( BOOL bUpperLower
, BOOL bUpperLeft
);
470 // No-/Numerierung ueber Delete/Backspace ein/abschalten #115901#
471 BOOL
NumOrNoNum( BOOL bDelete
= FALSE
, BOOL bChkStart
= TRUE
);
473 // --> OD 2008-06-09 #i90078#
474 // Remove unused default parameter <nLevel> and <bRelative>.
475 // Adjust method name and parameter name
476 void ChangeIndentOfAllListLevels( short nDiff
);
477 // Adjust method name
478 void SetIndent(short nIndent
, const SwPosition
& rPos
);
480 BOOL
IsFirstOfNumRule() const;
481 BOOL
IsFirstOfNumRule(const SwPaM
& rPaM
) const;
484 BOOL
IsNoNum( BOOL bChkStart
= TRUE
) const;
485 // returne den Num-Level des Nodes, in dem sich der Point vom
486 // Cursor befindet. Return kann sein :
487 // - NO_NUMBERING, 0..MAXLEVEL-1, NO_NUMLEVEL .. NO_NUMLEVEL|MAXLEVEL-1
488 // --> OD 2008-02-29 #refactorlists# - removed <pHasChilds>
489 // BYTE GetNumLevel( BOOL* pHasChilds = 0 ) const;
490 BYTE
GetNumLevel() const;
492 // detect highest and lowest level to check moving of outline levels
493 void GetCurrentOutlineLevels( sal_uInt8
& rUpper
, sal_uInt8
& rLower
);
496 // get Outline level of current paragraph
497 int GetCurrentParaOutlineLevel( ) const;// #outlinelevel add by zhaojianwei
500 BOOL
HasNumber() const;
501 BOOL
HasBullet() const;
504 String
GetUniqueNumRuleName( const String
* pChkStr
= 0, BOOL bAutoNum
= TRUE
) const;
505 void ChgNumRuleFmts( const SwNumRule
& rRule
);
506 // setze und erfrage, ob an aktueller PointPos eine Numerierung mit
507 // dem StartFlag startet
508 void SetNumRuleStart( BOOL bFlag
= TRUE
);
509 BOOL
IsNumRuleStart() const;
510 void SetNodeNumStart( USHORT nStt
);
511 // --> OD 2008-02-29 #refactorlists#
512 USHORT
GetNodeNumStart() const;
514 BOOL
ReplaceNumRule( const String
& rOldRule
, const String
& rNewRule
);
515 // Searches for a text node with a numbering rule.
516 // --> OD 2008-03-18 #refactorlists# - add output parameter <sListId>
517 // in case a list style is found, <sListId> holds the list id, to which the
518 // text node belongs, which applies the found list style.
519 const SwNumRule
* SearchNumRule(const bool bForward
,
522 int nNonEmptyAllowed
,
527 // UndoHistory am Dokument pflegen
528 // bei Save, SaveAs, Create wird UndoHistory zurueckgesetzt ???
529 void DoUndo( BOOL bOn
= TRUE
);
530 BOOL
DoesUndo() const;
531 void DoGroupUndo( BOOL bUn
= TRUE
);
532 BOOL
DoesGroupUndo() const;
533 void DelAllUndoObj();
535 // macht rueckgaengig:
536 // setzt Undoklammerung auf, liefert nUndoId der Klammerung
537 SwUndoId
StartUndo( SwUndoId eUndoId
= UNDO_EMPTY
, const SwRewriter
* pRewriter
= 0 );
538 // schliesst Klammerung der nUndoId, nicht vom UI benutzt
539 SwUndoId
EndUndo( SwUndoId eUndoId
= UNDO_EMPTY
, const SwRewriter
* pRewriter
= 0 );
540 // liefert die Id der letzten undofaehigen Aktion zurueck
541 // fuellt ggf. VARARR mit User-UndoIds
542 SwUndoId
GetUndoIds( String
* pUndoStr
= 0, SwUndoIds
*pUndoIds
= 0) const;
543 String
GetUndoIdsStr( String
* pUndoStr
= 0, SwUndoIds
*pUndoIds
= 0) const;
545 // abfragen/setzen der Anzahl von wiederherstellbaren Undo-Actions
546 static USHORT
GetUndoActionCount();
547 static void SetUndoActionCount( USHORT nNew
);
550 // liefert die Id der letzten Redofaehigen Aktion zurueck
551 // fuellt ggf. VARARR mit RedoIds
552 SwUndoId
GetRedoIds( String
* pRedoStr
= 0, SwUndoIds
*pRedoIds
= 0) const;
553 String
GetRedoIdsStr( String
* pRedoStr
= 0, SwUndoIds
*pRedoIds
= 0) const;
556 // liefert die Id der letzten Repeatfaehigen Aktion zurueck
557 // fuellt ggf. VARARR mit RedoIds
558 SwUndoId
GetRepeatIds( String
* pRepeatStr
= 0, SwUndoIds
*pRedoIds
= 0) const;
559 String
GetRepeatIdsStr( String
* pRepeatStr
= 0,
560 SwUndoIds
*pRedoIds
= 0) const;
562 // 0 letzte Aktion, sonst Aktionen bis zum Start der Klammerung nUndoId
563 // mit KillPaMs, ClearMark
564 BOOL
Undo(SwUndoId nUndoId
= UNDO_EMPTY
, USHORT nCnt
= 1 );
566 USHORT
Repeat( USHORT nCount
);
568 USHORT
Redo( USHORT nCnt
= 1 );
569 // fuer alle Sichten auf dieses Dokument
570 void StartAllAction();
573 //Damit Start-/EndActions aufgesetzt werden koennen.
576 // Inhaltsform bestimmen, holen, liefert Type am CurCrsr->SPoint
577 USHORT
GetCntType() const;
578 BOOL
HasOtherCnt() const; // gibt es Rahmen, Fussnoten, ...
580 /* Anwenden der ViewOptions mit Start-/EndAction */
581 inline void ApplyViewOptions( const SwViewOption
&rOpt
);
583 // Text innerhalb der Selektion erfragen
584 // Returnwert liefert FALSE, wenn der selektierte Bereich
585 // zu gross ist, um in den Stringpuffer kopiert zu werden
586 // oder andere Fehler auftreten
587 BOOL
GetSelectedText( String
&rBuf
,
588 int nHndlParaBreak
= GETSELTXT_PARABRK_TO_BLANK
);
591 * liefert eine Graphic, wenn CurCrsr->Point() auf einen
592 * SwGrfNode zeigt (und Mark nicht gesetzt ist oder auf die
593 * gleiche Graphic zeigt), sonst gibt's was auf die Finger
595 // --> OD 2005-02-09 #119353# - robust
596 const Graphic
* GetGraphic( BOOL bWait
= TRUE
) const;
597 const GraphicObject
* GetGraphicObj() const;
599 BOOL
IsGrfSwapOut( BOOL bOnlyLinked
= FALSE
) const;
600 USHORT
GetGraphicType() const;
602 const PolyPolygon
*GetGraphicPolygon() const;
603 void SetGraphicPolygon( const PolyPolygon
*pPoly
);
605 // If there's an automatic, not manipulated polygon at the selected
606 // notxtnode, it has to be deleted, e.g. cause the object has changed.
607 void ClearAutomaticContour();
610 * liefert die Groesse einer Graphic in Twips, wenn der Cursor
611 * auf einer Graphic steht; BOOL liefert FALSE, wenn s.o.
613 BOOL
GetGrfSize(Size
&) const;
615 * liefert den Namen und den Filter einer Graphic, wenn der Cursor
616 * auf einer Graphic steht, sonst gibt's was auf die Finger!
617 * Ist ein String-Ptr != 0 dann returne den entsp. Namen
619 void GetGrfNms( String
* pGrfName
, String
* pFltName
,
620 const SwFlyFrmFmt
* = 0 ) const;
622 * erneutes Einlesen, falls Graphic nicht Ok ist. Die
623 * aktuelle wird durch die neue ersetzt.
625 void ReRead( const String
& rGrfName
, const String
& rFltName
,
626 const Graphic
* pGraphic
= 0,
627 const GraphicObject
* pGrafObj
= 0 );
629 // // alternativen Text einer Grafik/OLe-Objectes abfragen/setzen
630 // const String& GetAlternateText() const;
631 // void SetAlternateText( const String& rTxt );
633 //eindeutige Identifikation des Objektes (fuer ImageMapDlg)
634 void *GetIMapInventor() const;
635 // --> OD 2007-03-01 #i73788#
636 // remove default parameter, because method always called this default value
637 Graphic
GetIMapGraphic() const; //liefert eine Graphic fuer alle Flys!
639 const SwFlyFrmFmt
* FindFlyByName( const String
& rName
, BYTE nNdTyp
= 0 ) const;
641 //liefert ein ClientObject, wenn CurCrsr->Point() auf einen
642 //SwOLENode zeigt (und Mark nicht gesetzt ist oder auf das
643 //gleiche ClientObject zeigt), sonst gibt's was auf die
645 svt::EmbeddedObjectRef
& GetOLEObject() const;
646 //Gibt es ein OleObject mit diesem Namen (SwFmt)?
647 BOOL
HasOLEObj( const String
&rName
) const;
649 //Liefert den Pointer auf die Daten des Chart, indem sich der Crsr
651 void SetChartName( const String
&rName
);
653 //Updaten der Inhalte aller Charts zu der Tabelle mit dem angegeben Namen
654 void UpdateCharts( const String
&rName
);
656 // aktuelles Wort erfragen
659 // Textbaustein aus dem Textbausteindokument in
660 // das aktuelle Dokument, Vorlagen nur wenn es nicht schon gibt
661 void InsertGlossary( SwTextBlocks
& rGlossary
, const String
& );
662 // aktuelle Selektion zum Textbaustein machen und ins
663 // Textbausteindokument einfuegen, einschliesslich Vorlagen
664 USHORT
MakeGlossary( SwTextBlocks
& rToFill
, const String
& rName
,
665 const String
& rShortName
, BOOL bSaveRelFile
= FALSE
,
666 const String
* pOnlyTxt
=0 );
667 // speicher den gesamten Inhalt des Docs als Textbaustein
668 USHORT
SaveGlossaryDoc( SwTextBlocks
& rGlossary
, const String
& rName
,
669 const String
& rShortName
,
670 BOOL bSaveRelFile
= FALSE
,
671 BOOL bOnlyTxt
= FALSE
);
674 // Selektionen sichern
675 void HyphStart( SwDocPositions eStart
, SwDocPositions eEnde
);
676 // Selektionen wiederherstellen
678 com::sun::star::uno::Reference
< ::com::sun::star::uno::XInterface
>
679 HyphContinue( USHORT
* pPageCnt
, USHORT
* pPageSt
);
680 // zu trennendes Wort ignorieren
683 // zum Einfuegen des SoftHyphens, Position ist der Offset
684 // innerhalb des getrennten Wortes.
685 void InsertSoftHyph( const xub_StrLen nHyphPos
);
688 const SwTable
& InsertTable( const SwInsertTableOptions
& rInsTblOpts
, // ALL_TBL_INS_ATTR
689 USHORT nRows
, USHORT nCols
,
690 sal_Int16 eAdj
= com::sun::star::text::HoriOrientation::FULL
,
691 const SwTableAutoFmt
* pTAFmt
= 0 );
693 void InsertDDETable( const SwInsertTableOptions
& rInsTblOpts
, // HEADLINE_NO_BORDER
694 SwDDEFieldType
* pDDEType
,
695 USHORT nRows
, USHORT nCols
,
696 sal_Int16 eAdj
= com::sun::star::text::HoriOrientation::FULL
);
699 void SetTableName( SwFrmFmt
& rTblFmt
, const String
&rNewName
);
701 SwFrmFmt
*GetTableFmt();
702 BOOL
TextToTable( const SwInsertTableOptions
& rInsTblOpts
, //ALL_TBL_INS_ATTR
704 sal_Int16 eAdj
= com::sun::star::text::HoriOrientation::FULL
,
705 const SwTableAutoFmt
* pTAFmt
= 0 );
706 BOOL
TableToText( sal_Unicode cCh
);
707 BOOL
IsTextToTableAvailable() const;
709 BOOL
GetTblBoxFormulaAttrs( SfxItemSet
& rSet
) const;
710 void SetTblBoxFormulaAttrs( const SfxItemSet
& rSet
);
712 BOOL
IsTableBoxTextFormat() const;
713 String
GetTableBoxText() const;
715 // Change Modus erfragen/setzen
716 TblChgMode
GetTblChgMode() const;
717 void SetTblChgMode( TblChgMode eMode
);
719 // Tabelle an der Cursor Position aufsplitten
720 BOOL
SplitTable( USHORT eMode
);
721 // Tabellen verbinden
722 // CanMerge kann feststellen, ob Prev oder Next moeglich ist. Wird
723 // der Pointer pChkNxtPrv uebergeben, wird festgestellt in welche
724 // Richtung es moeglich ist.
725 BOOL
CanMergeTable( BOOL bWithPrev
= TRUE
, BOOL
* pChkNxtPrv
= 0 ) const;
726 BOOL
MergeTable( BOOL bWithPrev
= TRUE
, USHORT nMode
= 0 );
727 // setze das InsertDB als Tabelle Undo auf:
728 void AppendUndoForInsertFromDB( BOOL bIsTable
);
731 functions used for spell checking and text conversion
734 // Selektionen sichern
735 void SpellStart( SwDocPositions eStart
, SwDocPositions eEnde
,
736 SwDocPositions eCurr
, SwConversionArgs
*pConvArgs
= 0 );
737 // Selektionen wiederherstellen
738 void SpellEnd( SwConversionArgs
*pConvArgs
= 0, bool bRestoreSelection
= true );
739 ::com::sun::star::uno::Any
SpellContinue(
740 USHORT
* pPageCnt
, USHORT
* pPageSt
,
741 SwConversionArgs
*pConvArgs
= 0 );
743 // spells on a sentence basis - the SpellPortions are needed
744 // returns false if no error could be found
745 bool SpellSentence(::svx::SpellPortions
& rToFill
, bool bIsGrammarCheck
);
746 // make SpellIter start with the current sentence when called next time
747 void PutSpellingToSentenceStart();
748 //applies a changed sentence
749 void ApplyChangedSentence(const ::svx::SpellPortions
& rNewPortions
, bool bIsGrammarCheck
);
751 // Is text conversion active somewhere else?
752 BOOL
HasConvIter() const;
753 // Is hyphenation active somewhere else?
754 BOOL
HasHyphIter() const;
756 ::com::sun::star::uno::Reference
<
757 ::com::sun::star::linguistic2::XSpellAlternatives
>
758 GetCorrection( const Point
* pPt
, SwRect
& rSelectRect
);
761 bool GetGrammarCorrection( ::com::sun::star::linguistic2::ProofreadingResult
/*out*/ &rResult
,
762 sal_Int32
/*out*/ &rErrorPosInText
,
763 sal_Int32
/*out*/ &rErrorIndexInResult
,
764 ::com::sun::star::uno::Sequence
< rtl::OUString
> /*out*/ &rSuggestions
,
765 const Point
* pPt
, SwRect
& rSelectRect
);
767 void IgnoreGrammarErrorAt( SwPaM
& rErrorPosition
);
768 void SetLinguRange( SwDocPositions eStart
, SwDocPositions eEnde
);
770 // returne zum Namen die im Doc gesetzte Referenz
771 const SwFmtRefMark
* GetRefMark( const String
& rName
) const;
772 // returne die Namen aller im Doc gesetzten Referenzen
773 // Ist der ArrayPointer 0 dann returne nur, ob im Doc. eine RefMark
775 USHORT
GetRefMarks( SvStringsDtor
* = 0 ) const;
777 // rufe die Autokorrektur auf
778 void AutoCorrect( SvxAutoCorrect
& rACorr
, BOOL bInsertMode
= TRUE
,
779 sal_Unicode cChar
= ' ' );
780 BOOL
GetPrevAutoCorrWord( SvxAutoCorrect
& rACorr
, String
& rWord
);
782 // dann setze nach entsprechenden Regeln unsere Vorlagen
783 void AutoFormat( const SvxSwAutoFmtFlags
* pAFlags
= 0 );
785 static SvxSwAutoFmtFlags
* GetAutoFmtFlags();
786 static void SetAutoFmtFlags(SvxSwAutoFmtFlags
*);
788 // errechnet die Selektion
791 BOOL
InsertURL( const SwFmtINetFmt
& rFmt
, const String
& rStr
,
792 BOOL bKeepSelection
= FALSE
);
793 USHORT
GetINetAttrs( SwGetINetAttrs
& rArr
);
795 //SS Fuer holen/ersetzen DropCap-Inhalt
796 String
GetDropTxt( const USHORT nChars
) const;
797 void ReplaceDropTxt( const String
&rStr
);
799 // may an outline be moved or copied?
800 // Check whether it's in text body, not in table, and not read-only (move)
801 BOOL
IsOutlineMovable( USHORT nIdx
) const;
802 BOOL
IsOutlineCopyable( USHORT nIdx
) const;
804 USHORT
GetLineCount( BOOL bActPos
= TRUE
);
806 // erfrage und setze den Fussnoten-Text/Nummer. Set.. auf akt. SSelection!
807 BOOL
GetCurFtn( SwFmtFtn
* pToFillFtn
= 0 );
808 bool SetCurFtn( const SwFmtFtn
& rFillFtn
);
809 bool HasFtns( bool bEndNotes
= false ) const;
810 //z.Zt nicht benoetigt USHORT GetFtnCnt( BOOL bEndNotes = FALSE ) const;
811 // gebe Liste aller Fussnoten und deren Anfangstexte
812 USHORT
GetSeqFtnList( SwSeqFldList
& rList
, bool bEndNotes
= false );
815 const SwSection
* InsertSection( const SwSection
& rNew
,
816 const SfxItemSet
* = 0 );
817 BOOL
IsInsRegionAvailable() const;
818 const SwSection
* GetCurrSection() const;
819 // liefert wie GetCurrSection() den aktuellen Bereich, allerdings geht diese Funktion
820 // ueber die Frames und erwischt dabei auch den Bereich, wenn der Cursor in einer
821 // Fussnote steht, deren Referenz in einem spaltigen Bereich steckt.
822 // Wenn man bOutOfTab setzt, wird der Bereich gesucht,
823 // der die Tabelle umfasst, nicht etwa ein innerer.
824 const SwSection
* GetAnySection( BOOL bOutOfTab
= FALSE
, const Point
* pPt
= 0 ) const;
826 USHORT
GetSectionFmtCount() const;
827 USHORT
GetSectionFmtPos( const SwSectionFmt
& ) const;
828 const SwSectionFmt
& GetSectionFmt(USHORT nFmt
) const;
829 void DelSectionFmt( USHORT nFmt
);
830 void ChgSection( USHORT nSect
, const SwSection
&, const SfxItemSet
* = 0 );
831 BOOL
IsAnySectionInDoc( BOOL bChkReadOnly
= FALSE
,
832 BOOL bChkHidden
= FALSE
,
833 BOOL BChkTOX
= FALSE
) const;
835 String
GetUniqueSectionName( const String
* pChkStr
= 0 ) const;
838 void SetSectionAttr(const SfxItemSet
& rSet
, SwSectionFmt
* pSectFmt
= 0);
840 // search inside the cursor selection for full selected sections.
841 // if any part of section in the selection return 0.
842 // if more than one in the selection return the count
843 USHORT
GetFullSelectedSectionCount() const;
845 // special insert: Insert a new text node just before or after a section or
846 // table, if the cursor is positioned at the start/end of said
847 // section/table. The purpose of the method is to allow users to inert text
848 // at certain 'impossible' position, e.g. before a table at the document
849 // start or between to sections.
850 bool DoSpecialInsert();
851 bool CanSpecialInsert() const;
854 void SetNewDoc(BOOL bNew
= TRUE
);
856 SvxLinkManager
& GetLinkManager();
857 inline const SvxLinkManager
& GetLinkManager() const;
859 // linken Rand ueber Objectleiste einstellen (aenhlich dem Stufen von
860 // Numerierungen), optional kann man "um" den Offset stufen oder "auf"
861 // die Position gestuft werden (bModulus = TRUE)
862 BOOL
IsMoveLeftMargin( BOOL bRight
= TRUE
, BOOL bModulus
= TRUE
) const;
863 void MoveLeftMargin( BOOL bRight
= TRUE
, BOOL bModulus
= TRUE
);
865 // Numberformatter vom Doc erfragen
866 SvNumberFormatter
* GetNumberFormatter();
867 const SvNumberFormatter
* GetNumberFormatter() const
868 { return ((SwEditShell
*)this)->GetNumberFormatter(); }
870 // Schnitstellen fuers GlobalDokument
871 BOOL
IsGlobalDoc() const;
872 void SetGlblDocSaveLinks( BOOL bFlag
= TRUE
);
873 BOOL
IsGlblDocSaveLinks() const;
874 USHORT
GetGlobalDocContent( SwGlblDocContents
& rArr
) const;
875 BOOL
InsertGlobalDocContent( const SwGlblDocContent
& rPos
,
876 const SwSection
& rNew
);
877 BOOL
InsertGlobalDocContent( const SwGlblDocContent
& rPos
,
878 const SwTOXBase
& rTOX
);
879 BOOL
InsertGlobalDocContent( const SwGlblDocContent
& rPos
);
880 BOOL
DeleteGlobalDocContent( const SwGlblDocContents
& rArr
,
882 BOOL
MoveGlobalDocContent( const SwGlblDocContents
& rArr
,
883 USHORT nFromPos
, USHORT nToPos
,
885 BOOL
GotoGlobalDocContent( const SwGlblDocContent
& rPos
);
887 // alles fuers Redlining
888 USHORT
GetRedlineMode() const;
889 void SetRedlineMode( USHORT eMode
);
890 BOOL
IsRedlineOn() const;
891 USHORT
GetRedlineCount() const;
892 const SwRedline
& GetRedline( USHORT nPos
) const;
893 BOOL
AcceptRedline( USHORT nPos
);
894 BOOL
RejectRedline( USHORT nPos
);
895 // suche das Redline zu diesem Data und returne die Pos im Array
896 // USHRT_MAX wird returnt, falls nicht vorhanden
897 USHORT
FindRedlineOfData( const SwRedlineData
& ) const;
899 // Kommentar am Redline an der Position setzen
900 BOOL
SetRedlineComment( const String
& rS
);
901 const SwRedline
* GetCurrRedline() const;
903 // Redline Anzeigeattribute wurden geaendert, Views updaten
904 void UpdateRedlineAttr();
906 // vergleiche zwei Dokument mit einander
907 long CompareDoc( const SwDoc
& rDoc
);
908 // merge zweier Dokumente
909 long MergeDoc( const SwDoc
& rDoc
);
911 // Dokumentglobale Fussnoteneigenschaften
912 const SwFtnInfo
& GetFtnInfo() const;
913 void SetFtnInfo(const SwFtnInfo
& rInfo
);
914 const SwEndNoteInfo
& GetEndNoteInfo() const;
915 void SetEndNoteInfo(const SwEndNoteInfo
& rInfo
);
917 //Einstellungen fuer Zeilennummierung
918 const SwLineNumberInfo
&GetLineNumberInfo() const;
919 void SetLineNumberInfo( const SwLineNumberInfo
& rInfo
);
921 // Etiketten: Bereiche synchronisieren
922 void SetLabelDoc( BOOL bFlag
= TRUE
);
923 BOOL
IsLabelDoc() const;
925 // Schnittstelle fuer die TextInputDaten - ( fuer die Texteingabe
926 // von japanischen/chinesischen Zeichen)
927 SwExtTextInput
* CreateExtTextInput(LanguageType eInputLanguage
);
928 String
DeleteExtTextInput( SwExtTextInput
* pDel
= 0, BOOL bInsText
= TRUE
);
929 // SwExtTextInput* GetExtTextInput() const;
930 void SetExtTextInputData( const CommandExtTextInputData
& );
932 // Schnistelle fuer den Zugriff auf die AutoComplete-Liste
933 static SwAutoCompleteWord
& GetAutoCompleteWords();
935 // returns a scaling factor of selected text. Used for the rotated
936 // character attribut dialog.
937 USHORT
GetScalingOfSelectedText() const;
940 SwEditShell( SwDoc
&, Window
*, const SwViewOption
*pOpt
= 0 );
941 // verkleideter Copy-Constructor
942 SwEditShell( SwEditShell
&, Window
* );
943 virtual ~SwEditShell();
947 // es wird nicht kopiert und nicht zugewiesen
948 SwEditShell(const SwEditShell
&);
949 const SwEditShell
&operator=(const SwEditShell
&);
952 inline void SwEditShell::ApplyViewOptions( const SwViewOption
&rOpt
)
954 SwCrsrShell::StartAction();
955 ViewShell::ApplyViewOptions( rOpt
);
956 SwEditShell::EndAction();
959 inline const SvxLinkManager
& SwEditShell::GetLinkManager() const
960 { return ((SwEditShell
*)this)->GetLinkManager(); }
963 * Klasse fuer den automatisierten Aufruf von Start- und
969 SwActKontext(SwEditShell
*pShell
);
973 #define ACT_KONTEXT(x) SwActKontext _aActKontext_(x)
976 * Klasse fuer den automatisierten Aufruf von Start- und
982 SwMvKontext(SwEditShell
*pShell
);
986 #define MV_KONTEXT(x) SwMvKontext _aMvKontext_(x)