merge the formfield patch from ooo-build
[ooovba.git] / sw / inc / editsh.hxx
blob4ff021b6ee6b82b8377292d325585ca87acf39da
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 $
10 * $Revision: 1.70 $
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 ************************************************************************/
30 #ifndef _EDITSH_HXX
31 #define _EDITSH_HXX
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>
39 #include "swdllapi.h"
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>
47 #include <IMark.hxx>
49 #include <vector>
50 #include <swundo.hxx>
51 #include <svtools/embedhlp.hxx>
53 class PolyPolygon;
54 class SwDoc;
55 class DateTime;
56 class CommandExtTextInputData;
58 class SvUShortsSort;
59 class SvNumberFormatter;
60 class SfxPoolItem;
61 class SfxItemSet;
62 class SvxLinkManager;
63 class SvxAutoCorrect;
65 class SwField; // fuer Felder
66 class SwFieldType;
67 class SwDDEFieldType;
68 class SwNewDBMgr;
70 struct SwDocStat;
71 class SvStringsDtor;
72 class SvStringsSort;
73 class SwAutoCompleteWord;
75 class SwFmtRefMark;
77 class SwNumRule; // Numerierung
78 //class SwNodeNum; // Numerierung
80 class SwUndoIds; // fuer Undo
81 class SwTxtFmtColl;
82 class SwGrfNode;
83 class SwFlyFrmFmt;
85 class SwFrmFmt; // fuer GetTxtNodeFmts()
86 class SwCharFmt;
87 class SwExtTextInput;
88 class SwRootFrm; // fuer CTOR
89 class Graphic; // fuer GetGraphic
90 class GraphicObject; // fuer GetGraphicObj
91 class SwFmtINetFmt; // InsertURL
92 class SwTable;
93 class SwTextBlocks; // fuer GlossaryRW
94 class SwFmtFtn;
95 class SwSection;
96 class SwSectionFmt;
97 class SwTOXMarks;
98 class SwTOXBase;
99 class SwTOXType;
100 class SwTableAutoFmt;
101 class SwPageDesc;
102 class SwTxtINetFmt;
103 class SwSeqFldList;
104 class SwGlblDocContent;
105 class SwGlblDocContents;
106 class SwRedline;
107 class SwRedlineData;
108 class SwFtnInfo;
109 class SwEndNoteInfo;
110 class SwLineNumberInfo;
111 class SwAuthEntry;
112 class SwRewriter;
113 struct SwConversionArgs;
116 namespace com { namespace sun { namespace star { namespace uno {
117 template < class > class Sequence;
118 }}}}
120 namespace svx{
121 struct SpellPortion;
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 ****************************************************************/
134 struct SwGetINetAttr
136 String sText;
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
165 friend class SwUndo;
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;
182 public:
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
191 // ein ( nicht \& )
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
198 long Delete();
200 // remove a complete paragraph
201 BOOL DelFullPara();
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;
260 // <--
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 );
271 void GCAttr();
273 // returns the scripttpye of the selection
274 USHORT GetScriptType() const;
276 // returns the language at current cursor position
277 USHORT GetCurLang() const;
279 // TABLE
280 USHORT GetTblFrmFmtCount( BOOL bUsed = FALSE ) const;
281 SwFrmFmt& GetTblFrmFmt(USHORT nFmt, BOOL bUsed = FALSE ) const;
282 String GetUniqueTblName() const;
284 // CHAR
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
303 // TXT
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 );
312 // <--
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 ); }
335 // Felder
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);
352 // Datenbankinfo
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 );
367 void LockExpFlds();
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;
380 void SetModified();
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);
419 // new field stuff
420 BOOL UpdateField(sw::mark::IFieldmark &fieldBM);
422 //AutoMark file
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
453 // given list style.
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 );
460 // <--
461 // Absaetze ohne Numerierung, aber mit Einzuegen
462 BOOL NoNum();
463 // Loeschen, Splitten der Aufzaehlungsliste
464 void DelNumRules();
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);
472 // -> #i23726#
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);
479 // <--
480 BOOL IsFirstOfNumRule() const;
481 BOOL IsFirstOfNumRule(const SwPaM & rPaM) const;
482 // <- #i23726#
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;
491 // <--
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
499 // -> i29560
500 BOOL HasNumber() const;
501 BOOL HasBullet() const;
502 // <- i29560
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;
513 // <--
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,
520 const bool bNum,
521 const bool bOutline,
522 int nNonEmptyAllowed,
523 String& sListId );
524 // <--
526 // Undo
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 );
549 // Redo
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;
555 // Repeat
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 );
565 // wiederholt
566 USHORT Repeat( USHORT nCount );
567 // wiederholt
568 USHORT Redo( USHORT nCnt = 1 );
569 // fuer alle Sichten auf dieses Dokument
570 void StartAllAction();
571 void EndAllAction();
573 //Damit Start-/EndActions aufgesetzt werden koennen.
574 void CalcLayout();
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;
598 // <--
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!
638 // <--
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
644 //Finger.
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
650 //befindet.
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
657 String GetCurWord();
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 );
673 // Linguistik
674 // Selektionen sichern
675 void HyphStart( SwDocPositions eStart, SwDocPositions eEnde );
676 // Selektionen wiederherstellen
677 void HyphEnd();
678 com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface>
679 HyphContinue( USHORT* pPageCnt, USHORT* pPageSt );
680 // zu trennendes Wort ignorieren
681 void HyphIgnore();
683 // zum Einfuegen des SoftHyphens, Position ist der Offset
684 // innerhalb des getrennten Wortes.
685 void InsertSoftHyph( const xub_StrLen nHyphPos );
687 //Tabelle
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 );
698 void UpdateTable();
699 void SetTableName( SwFrmFmt& rTblFmt, const String &rNewName );
701 SwFrmFmt *GetTableFmt();
702 BOOL TextToTable( const SwInsertTableOptions& rInsTblOpts, //ALL_TBL_INS_ATTR
703 sal_Unicode cCh,
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
774 // gesetzt ist
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
789 String Calculate();
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 );
814 // SS fuer Bereiche
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;
837 //Attribute setzen
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;
853 // Optimierung UI
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,
881 USHORT nPos );
882 BOOL MoveGlobalDocContent( const SwGlblDocContents& rArr ,
883 USHORT nFromPos, USHORT nToPos,
884 USHORT nNewPos );
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;
939 // ctor/dtor
940 SwEditShell( SwDoc&, Window*, const SwViewOption *pOpt = 0 );
941 // verkleideter Copy-Constructor
942 SwEditShell( SwEditShell&, Window* );
943 virtual ~SwEditShell();
945 private:
946 // fuer METWARE:
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
964 * EndAction();
966 class SwActKontext {
967 SwEditShell *pSh;
968 public:
969 SwActKontext(SwEditShell *pShell);
970 ~SwActKontext();
973 #define ACT_KONTEXT(x) SwActKontext _aActKontext_(x)
976 * Klasse fuer den automatisierten Aufruf von Start- und
977 * EndCrsrMove();
979 class SwMvKontext {
980 SwEditShell *pSh;
981 public:
982 SwMvKontext(SwEditShell *pShell );
983 ~SwMvKontext();
986 #define MV_KONTEXT(x) SwMvKontext _aMvKontext_(x)
990 #endif