update dev300-m58
[ooovba.git] / sw / inc / fesh.hxx
blob9673b4185573cbdbbfcff565a8d7b53067667451
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: fesh.hxx,v $
10 * $Revision: 1.63.212.1 $
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 _FESH_HXX
31 #define _FESH_HXX
33 #include <com/sun/star/text/RelOrientation.hpp>
34 #include <com/sun/star/embed/XClassifiedObject.hpp>
36 #include <svx/svdobj.hxx>
37 #include "swdllapi.h"
38 #include <editsh.hxx>
39 #include <flyenum.hxx>
41 // OD 25.06.2003 #108784#
42 #include <svx/svdtypes.hxx>
44 #include <svtools/embedhlp.hxx>
46 #ifndef INCLUDED_VECTOR
47 #include <vector>
48 #define INCLUDED_VECTOR
49 #endif
52 class SwFlyFrm;
53 class SwTabCols;
54 class SvxBrushItem;
55 class SvxFrameDirectionItem;
56 class SwTableAutoFmt;
57 class SwFrm;
58 class SwFmtFrmSize;
59 class SwFmtRowSplit;
60 class SvxBorderLine;
61 class SdrObject;
62 class Color;
63 class Outliner;
64 class SotDataObject;
65 class SwFrmFmt;
66 struct SwSortOptions;
67 class SdrMarkList;
70 // return values for GetFrmType() und GetSelFrmType().
71 //! values can be combined via logival or
72 #define FRMTYPE_NONE (USHORT) 0
73 #define FRMTYPE_PAGE (USHORT) 1
74 #define FRMTYPE_HEADER (USHORT) 2
75 #define FRMTYPE_FOOTER (USHORT) 4
76 #define FRMTYPE_BODY (USHORT) 8
77 #define FRMTYPE_COLUMN (USHORT) 16
78 #define FRMTYPE_TABLE (USHORT) 32
79 #define FRMTYPE_FLY_FREE (USHORT) 64
80 #define FRMTYPE_FLY_ATCNT (USHORT) 128
81 #define FRMTYPE_FLY_INCNT (USHORT) 256
82 #define FRMTYPE_FOOTNOTE (USHORT) 512
83 #define FRMTYPE_FTNPAGE (USHORT) 1024
84 #define FRMTYPE_FLY_ANY (USHORT) 2048
85 #define FRMTYPE_DRAWOBJ (USHORT) 4096
86 #define FRMTYPE_COLSECT (USHORT) 8192
87 #define FRMTYPE_COLSECTOUTTAB (USHORT) 16384
89 #define FRMTYPE_ANYCOLSECT ( FRMTYPE_COLSECT | FRMTYPE_COLSECTOUTTAB )
91 //! values can be combined via logival or
92 #define GOTOOBJ_DRAW_CONTROL (USHORT) 1
93 #define GOTOOBJ_DRAW_SIMPLE (USHORT) 2
94 #define GOTOOBJ_DRAW_ANY (USHORT) 3
95 #define GOTOOBJ_FLY_FRM (USHORT) 4
96 #define GOTOOBJ_FLY_GRF (USHORT) 8
97 #define GOTOOBJ_FLY_OLE (USHORT) 16
98 #define GOTOOBJ_FLY_ANY (USHORT) 28
99 #define GOTOOBJ_GOTO_ANY (USHORT) 31
101 //! values can be combined via logival or
102 #define FLYPROTECT_CONTENT (USHORT) 1 // kann verodert werden!
103 #define FLYPROTECT_SIZE (USHORT) 2
104 #define FLYPROTECT_POS (USHORT) 4
105 #define FLYPROTECT_PARENT (USHORT) 8 // nur Parents untersuchen
106 #define FLYPROTECT_FIXED (USHORT) 16 // nur nicht aufhebbarer Schutz
107 // z.B. durch OLE-Server, gilt auch
108 // fuer Dialog
111 enum ObjCntType //Fuer das Ermitteln des Cntnts per Positon (D&D)
113 OBJCNT_NONE,
114 OBJCNT_FLY,
115 OBJCNT_GRF,
116 OBJCNT_OLE,
117 OBJCNT_SIMPLE,
118 OBJCNT_CONTROL,
119 OBJCNT_URLBUTTON,
121 OBJCNT_GROUPOBJ,
122 OBJCNT_DONTCARE // nicht bestimmbar - unterschiedliche Objecte selektiert
125 //fuer GetAnyCurRect
126 enum CurRectType
128 RECT_PAGE, //Rect der aktuellen Seite.
129 RECT_PAGE_CALC, //... Seite wird ggf. Formatiert
130 RECT_PAGE_PRT, //Rect der aktuellen PrtArea der Seite
131 RECT_FRM, //Rect des aktuellen Rahmen
132 RECT_FLY_EMBEDDED, //Rect des aktuellen FlyFrm
133 RECT_FLY_PRT_EMBEDDED, //Rect der PrtArea des FlyFrm
134 RECT_SECTION, //Rect des aktuellen Bereichs
135 RECT_OUTTABSECTION, //Rect des aktuellen Bereichs,
136 // aber ausserhalb der Tabelle
137 RECT_SECTION_PRT, //Rect der aktuellen PrtArea des Bereichs
138 RECT_OUTTABSECTION_PRT, //Rect der aktuellen PrtArea des Bereichs,
139 // aber ausserhalb der Tabelle
140 RECT_HEADERFOOTER, //Rect des aktuellen Headers/Footer
141 RECT_HEADERFOOTER_PRT, //Rect der PrtArea des aktuellen Headers/Footers
143 RECT_PAGES_AREA //Rect covering the pages area
146 struct SwGetCurColNumPara
148 const SwFrmFmt* pFrmFmt;
149 const SwRect* pPrtRect, *pFrmRect;
150 SwGetCurColNumPara() : pFrmFmt( 0 ), pPrtRect( 0 ), pFrmRect( 0 ) {}
153 #define SW_PASTESDR_INSERT 1
154 #define SW_PASTESDR_REPLACE 2
155 #define SW_PASTESDR_SETATTR 3
157 #define SW_ADD_SELECT 1
158 #define SW_ENTER_GROUP 2
159 #define SW_LEAVE_FRAME 4
161 #define SW_MOVE_UP 0
162 #define SW_MOVE_DOWN 1
163 #define SW_MOVE_LEFT 2
164 #define SW_MOVE_RIGHT 3
166 #define SW_TABCOL_NONE 0
167 #define SW_TABCOL_HORI 1
168 #define SW_TABCOL_VERT 2
169 #define SW_TABROW_HORI 3
170 #define SW_TABROW_VERT 4
171 // --> FME 2004-07-30 #i32329# Enhanced table selection
172 #define SW_TABSEL_HORI 5
173 #define SW_TABSEL_HORI_RTL 6
174 #define SW_TABROWSEL_HORI 7
175 #define SW_TABROWSEL_HORI_RTL 8
176 #define SW_TABCOLSEL_HORI 9
177 #define SW_TABSEL_VERT 10
178 #define SW_TABROWSEL_VERT 11
179 #define SW_TABCOLSEL_VERT 12
180 // <--
182 class SdrDropMarkerOverlay;
184 class SW_DLLPUBLIC SwFEShell : public SwEditShell
186 SdrDropMarkerOverlay *pChainFrom, *pChainTo;
187 BOOL bCheckForOLEInCaption;
189 SW_DLLPRIVATE SwFlyFrm *FindFlyFrm() const;
190 SW_DLLPRIVATE SwFlyFrm *FindFlyFrm( const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >& ) const;
192 //Actions fuer alle Shells beenden und ChangeLink rufen.
193 SW_DLLPRIVATE void EndAllActionAndCall();
195 SW_DLLPRIVATE void ScrollTo( const Point &rPt );
197 // OD 25.06.2003 #108784# - correct type of 1st parameter
198 SW_DLLPRIVATE void ChangeOpaque( SdrLayerID nLayerId );
200 // Used for mouse operations on a table:
201 // Returns a cell frame that is 'close' to rPt.
202 SW_DLLPRIVATE const SwFrm *GetBox( const Point &rPt, bool* pbRow = 0, bool* pbCol = 0 ) const;
204 //0 == in keiner Spalte
205 SW_DLLPRIVATE USHORT _GetCurColNum( const SwFrm *pFrm,
206 SwGetCurColNumPara* pPara ) const;
208 SW_DLLPRIVATE void _GetTabCols( SwTabCols &rToFill, const SwFrm *pBox ) const;
209 SW_DLLPRIVATE void _GetTabRows( SwTabCols &rToFill, const SwFrm *pBox ) const;
211 SW_DLLPRIVATE BOOL ImpEndCreate();
213 SW_DLLPRIVATE ObjCntType GetObjCntType( const SdrObject& rObj ) const;
215 // Methoden fuers kopieren von DrawObjecten
216 SW_DLLPRIVATE BOOL CopyDrawSel( SwFEShell* pDestShell, const Point& rSttPt,
217 const Point& rInsPt, BOOL bIsMove,
218 BOOL bSelectInsert );
220 // get list of marked SdrObjects;
221 // helper method for GetSelFrmType, IsSelContainsControl
222 SW_DLLPRIVATE const SdrMarkList* _GetMarkList() const;
224 SW_DLLPRIVATE BOOL CheckHeadline( bool bRepeat ) const;
226 using SwEditShell::Copy;
228 public:
230 using SwEditShell::Insert;
232 TYPEINFO();
233 SwFEShell( SwDoc& rDoc, Window *pWin, const SwViewOption *pOpt = 0 );
234 SwFEShell( SwEditShell& rShell, Window *pWin );
235 virtual ~SwFEShell();
237 // Copy und Paste Methoden fuer das interne Clipboard
238 BOOL Copy( SwDoc* pClpDoc, const String* pNewClpTxt = 0 );
239 BOOL Paste( SwDoc* pClpDoc, BOOL bIncludingPageFrames = sal_False);
240 //paste some pages into another doc - used in mailmerge
241 BOOL PastePages( SwFEShell& rToFill, USHORT nStartPage, USHORT nEndPage);
242 // Copy-Methode fuer Drag&Drop
243 BOOL Copy( SwFEShell*, const Point& rSttPt, const Point& rInsPt,
244 BOOL bIsMove = FALSE, BOOL bSelectInsert = TRUE );
246 void SelectFlyFrm( SwFlyFrm& rFrm, BOOL bNew = FALSE );
248 // befindet sich der selektierte Rahmen innerhalb eines anderen?
249 const SwFrmFmt* IsFlyInFly();
251 //SS fuer DrawObjekte und Rahmen-----------------------------
253 //Wenn ein Objekt angegeben wurde, so wird genau diese Markiert (anstatt
254 //ueber die Position zu suchen.
255 BOOL SelectObj( const Point& rSelPt, BYTE nFlag = 0, SdrObject *pObj = 0 );
256 void DelSelectedObj();
258 //Selektion nach oben unten bewegen (Z-Order).
259 //TRUE == ganz nach oben/unten
260 //FALSE == einen ueberholen
261 void SelectionToTop ( BOOL bTop = TRUE );
262 void SelectionToBottom( BOOL bBottom = TRUE );
264 short GetLayerId() const; //1 Heaven, 0 Hell, -1 Uneindeutig
265 void SelectionToHeaven(); //Ueber dem Dokument
266 void SelectionToHell(); //Unter dem Dokument
268 // folgende zwei Methoden returnen den enum SdrHdlKind, um sich ein
269 // includen von SVDRAW.HXX zu ersparen als int deklariert.
270 bool IsObjSelectable( const Point& rPt );
271 int IsInsideSelectedObj( const Point& rPt ); //!! returns enum values
273 // #107513#
274 // Test if there is a draw object at that position and if it should be selected.
275 // The 'should' is aimed at Writer text fly frames which may be in front of
276 // the draw object.
277 sal_Bool ShouldObjectBeSelected(const Point& rPt);
279 sal_Bool MoveAnchor( USHORT nDir );
281 // Returns if Upper of frame at current position is section frame
282 // Currently only used by the rules. To be replaced by something more
283 // sophisticated one day.
284 bool IsDirectlyInSection() const;
286 //Returnwerte siehe oben FrmType.
287 //pPt: Crsr bzw. DocPos; bStopAtFly: Bei Flys anhalten oder ueber den Anchor weitergehen
288 // Obgleich (0,TRUE) eine Art Standard ist, sind die Parameter nicht defaultet, damit
289 // bei jeder Benutzung insbesondere das bStopAtFly bewusst genutzt wird.
290 USHORT GetFrmType( const Point *pPt, BOOL bStopAtFly ) const;
291 USHORT GetSelFrmType() const; //Selektion (Drawing)
293 /** #108784# check whether selected frame contains a control;
294 * companion method to GetSelFrmType, used for preventing
295 * drag&drop of controls into header */
296 bool IsSelContainsControl() const;
298 ObjCntType GetObjCntType( const Point &rPt, SdrObject *&rpObj ) const;
299 ObjCntType GetObjCntTypeOfSelection( SdrObject** ppObj = 0 ) const;
301 //Zum Anpassen der PosAttr bei Ankerwechseln.
302 SwRect GetObjRect() const;
303 //Zum Verschieben von Flys mit der Tastatur
304 SwRect GetFlyRect() const;
305 // OD 18.09.2003 #i17567#, #108749#, #110354# - adjustments to allow
306 // negative vertical positions for fly frames anchored
307 // to paragraph or to character.
308 // OD 02.10.2003 #i18732# - adjustments for new option 'FollowTextFlow'
309 // OD 12.11.2003 #i22341# - adjustments for new vertical alignment at top of line
310 void CalcBoundRect( SwRect& _orRect,
311 const RndStdIds _nAnchorId,
312 const sal_Int16 _eHoriRelOrient = com::sun::star::text::RelOrientation::FRAME,
313 const sal_Int16 _eVertRelOrient = com::sun::star::text::RelOrientation::FRAME,
314 const SwPosition* _pToCharCntntPos = NULL,
315 const bool _bFollowTextFlow = false,
316 bool _bMirror = false,
317 Point* _opRef = NULL,
318 Size* _opPercent = NULL ) const;
320 // Groesse von Drawobjekten setzen
321 void SetObjRect( const SwRect& rRect );
323 long BeginDrag( const Point *pPt, BOOL bProp );
324 long Drag ( const Point *pPt, BOOL bProp );
325 long EndDrag ( const Point *pPt, BOOL bProp );
326 void BreakDrag();
328 //Methoden fuer die Statuszeile.
329 Point GetAnchorObjDiff() const; //Abstand zum Anker
330 Point GetObjAbsPos() const; //Absolute Position
331 Size GetObjSize() const; //Groesse, ggf. die umschliessende
333 //SS fuer die BriefUmschlaege: hole alle Seitengebundenen Objekte
334 //und setze diese auf eine neue Seite.
335 void GetPageObjs( SvPtrarr& rFillArr );
336 void SetPageObjsNewPage( SvPtrarr& rFillArr, int nOffset = 1 );
338 // zeige die aktuelle Selektion an ( ggfs. den Rahmen/DrawObject)
339 virtual void MakeSelVisible();
341 // returne das FrmFmt von dem evt. unter dem Point stehenden Object.
342 // Das Object wird nicht selektiert!
343 const SwFrmFmt* GetFmtFromObj( const Point& rPt, SwRect** pRectToFill = 0 ) const;
344 // returns a format too, if the point is over the text of any fly
345 const SwFrmFmt* GetFmtFromAnyObj( const Point& rPt ) const;
347 //Welcher Schutz ist am selektierten Objekt gesetzt?
348 //!! returns several flags in BYTE
349 BYTE IsSelObjProtected( USHORT /*FLYPROTECT_...*/ eType ) const;
351 //Liefert neben der Grafik in rName bei gelinkten Grafiken den Namen mit
352 //Pfad und sonst den Grafiknamen. rbLink ist TRU bei gelinkten Grafiken.
353 const Graphic *GetGrfAtPos( const Point &rDocPos,
354 String &rName, BOOL &rbLink ) const;
356 // --> OD 2009-07-13 #i73249#
357 const String GetObjTitle() const;
358 void SetObjTitle( const String& rTitle );
359 const String GetObjDescription() const;
360 void SetObjDescription( const String& rDescription );
361 // <--
363 //SS fuer Rahmen --------------------------------------------
365 BOOL IsFrmSelected() const;
366 BOOL GetFlyFrmAttr( SfxItemSet &rSet ) const;
367 BOOL SetFlyFrmAttr( SfxItemSet &rSet );
368 BOOL ResetFlyFrmAttr( USHORT nWhich, const SfxItemSet* pSet = 0 );
369 const SwFrmFmt *NewFlyFrm( const SfxItemSet &rSet, BOOL bAnchValid = FALSE,
370 SwFrmFmt *pParent = 0 );
371 void SetFlyPos( const Point &rAbsPos);
372 Point FindAnchorPos( const Point &rAbsPos, BOOL bMoveIt = FALSE );
373 // determines whether a frame or its environment is vertically formatted and right-to-left
374 BOOL IsFrmVertical(BOOL bEnvironment, BOOL& bRightToLeft) const;
376 SwFrmFmt* GetCurFrmFmt() const; //Wenn Rahmen, dann Rahmenvorlage, sonst 0
377 void SetFrmFmt( SwFrmFmt *pFmt, BOOL bKeepOrient = FALSE, Point* pDocPos = 0 ); //Wenn Rahmen, dann Rahmenvorlage setzen
378 const SwFlyFrm *GetCurrFlyFrm() const { return FindFlyFrm(); }
380 // finde/loeschen den Fly, in dem der Cursor steht
381 SwFrmFmt* WizzardGetFly();
383 //Selebstaendiges selektieren von Flys
384 BOOL GotoNextFly( USHORT /*GOTOOBJ_...*/ eType = GOTOOBJ_FLY_ANY )
385 { return GotoObj( TRUE, eType ); }
386 BOOL GotoPrevFly( USHORT /*GOTOOBJ_...*/ eType = GOTOOBJ_FLY_ANY)
387 { return GotoObj( FALSE, eType); }
389 //iterieren ueber Flys - fuer Basic-Collections
390 USHORT GetFlyCount( FlyCntType eType = FLYCNTTYPE_ALL ) const;
391 const SwFrmFmt* GetFlyNum(USHORT nIdx, FlyCntType eType = FLYCNTTYPE_ALL) const;
393 //Wenn ein fly selectiert ist, zieht er den Crsr in den ersten CntntFrm
394 const SwFrmFmt* SelFlyGrabCrsr();
396 //Get FlyFrameFormat; fuer UI Macro Anbindung an Flys
397 const SwFrmFmt* GetFlyFrmFmt() const;
398 SwFrmFmt* GetFlyFrmFmt();
400 //OLE, Server fordert neue Groesse an, die gewuenschten Werte werden
401 //als Rahmenattribute eingestellt. Wenn die Werte nicht erlaubt sind,
402 //so wird von der Formatierung geclippt und eine Scalierung eingestellt.
403 //siehe CalcAndSetScale().
404 // The return value is the applied size.
405 Size RequestObjectResize( const SwRect &rRect, const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >& );
407 //The layout has been changed, so the active object has to be moved after that
408 virtual void MoveObjectIfActive( svt::EmbeddedObjectRef& xObj, const Point& rOffset );
410 //Der Client fuer das OleObject muss bezueglich der Scalierung auf dem
411 //neuesten Stand gehalten werden. Impl in der WrtShell.
412 //Wird ein Pointer auf eine Size uebergeben, so ist diese die aktuelle
413 //Core-Groesse des Objectes. Anderfalls wird die Groesse per GetCurFlyRect()
414 //besorgt.
415 virtual void CalcAndSetScale( svt::EmbeddedObjectRef& xObj,
416 const SwRect *pFlyPrtRect = 0,
417 const SwRect *pFlyFrmRect = 0 ) = 0;
419 //Objekte mit ActivateWhenVisible werden beim Paint Connected.
420 //gerufen von notxtfrm::Paint, impl in wrtsh
421 virtual void ConnectObj( svt::EmbeddedObjectRef&,
422 const SwRect &rPrt,
423 const SwRect &rFrm ) = 0;
425 //Sichbaren Bereich auf das Object setzen, wenn es noch nicht sichtbar ist.
426 void MakeObjVisible( const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >& ) const;
428 // check resize of OLE-Object
429 BOOL IsCheckForOLEInCaption() const { return bCheckForOLEInCaption; }
430 void SetCheckForOLEInCaption( BOOL bFlag ) { bCheckForOLEInCaption = bFlag; }
432 // setze am selektierten FlyFrame einen Namen
433 void SetFlyName( const String& rName );
434 const String& GetFlyName() const;
436 // erezeuge eindeutige Namen fuer Rahmen
437 String GetUniqueGrfName() const;
438 String GetUniqueOLEName() const;
439 String GetUniqueFrameName() const;
441 // springe zum benannten Rahmen (Grafik/OLE)
442 BOOL GotoFly( const String& rName, FlyCntType eType = FLYCNTTYPE_ALL,
443 BOOL bSelFrame = TRUE );
444 // steht an der Position eine Grafik mit einer URL ?
445 const SwFrmFmt* IsURLGrfAtPos( const Point& rPt, String* pURL = 0,
446 String *pTargetFrameName = 0,
447 String *pURLDescription = 0 ) const;
449 //Fuer das Chain wird immer der durch das Format spezifizierte Fly
450 //mit dem durch den Point getroffenen verbunden.
451 //In rRect wird das Rect des Flys geliefert (fuer Highlight desselben)
452 int Chainable( SwRect &rRect, const SwFrmFmt &rSource, const Point &rPt ) const;
453 int Chain( SwFrmFmt &rSource, const Point &rPt );
454 int Chain( SwFrmFmt &rSource, const SwFrmFmt &rDest );
455 void Unchain( SwFrmFmt &rFmt );
456 void HideChainMarker();
457 void SetChainMarker();
459 Size GetGraphicDefaultSize() const;
461 //SS fuer DrawObjekte ---------------------
463 //Temporaer um Bug zu umgehen.
464 void CheckUnboundObjects();
466 //Achtung: Uneindeutikeiten bei Mehrfachselektionen.
467 BOOL GetObjAttr( SfxItemSet &rSet ) const;
468 BOOL SetObjAttr( const SfxItemSet &rSet );
470 BOOL GotoObj( BOOL bNext, USHORT /*GOTOOBJ_...*/ eType = GOTOOBJ_DRAW_ANY);
472 //Setzen vom DragMode (z.B. Rotate), tut nix bei Rahmenselektion.
473 void SetDragMode( UINT16 eSdrDragMode );
475 USHORT IsObjSelected() const; //Liefert gleich die Anzahl der Objekte,
476 //zaehlt aber nicht die Objekte in Gruppen.
477 sal_Bool IsObjSelected( const SdrObject& rObj ) const;
479 void EndTextEdit(); //Loescht ggf. das Objekt.
481 //Ankertyp des selektierten Objektes, -1 bei Uneindeutigkeit oder
482 //Rahmenselektion; FLY_PAGE bzw. FLY_AT_CNTNT aus frmatr.hxx sonst.
483 short GetAnchorId() const;
485 //Erzeugen von DrawObjekten, beim Begin wird der Objekttyp mitgegeben.
486 //Beim End kann ein Cmd mitgegeben werden, hier ist ggf.
487 //SDRCREATE_RESTRAINTEND fuer Ende oder SDRCREATE_NEXTPOINT fuer ein
488 //Polygon relevant. Nach dem RESTRAINTEND ist das Objekt erzeugt und
489 //selektiert.
490 //Mit BreakCreate wird der Vorgang abgebrochen, dann ist kein Objekt
491 //mehr selektiert.
492 BOOL BeginCreate( UINT16 /*SdrObjKind ?*/ eSdrObjectKind, const Point &rPos );
493 BOOL BeginCreate( UINT16 /*SdrObjKind ?*/ eSdrObjectKind, UINT32 eObjInventor, const Point &);
494 void MoveCreate ( const Point &rPos );
495 BOOL EndCreate ( UINT16 eSdrCreateCmd );
496 void BreakCreate();
497 BOOL IsDrawCreate() const;
498 void CreateDefaultShape( UINT16 /*SdrObjKind ?*/ eSdrObjectKind, const Rectangle& rRect, USHORT nSlotId);
500 // Funktionen f�r Rubberbox, um Draw-Objekte zu selektieren
501 BOOL BeginMark( const Point &rPos );
502 void MoveMark ( const Point &rPos );
503 BOOL EndMark ();
504 void BreakMark();
506 //Gruppe erzeugen, aufloesen, nix bei Rahmenselektion.
507 BOOL IsGroupSelected(); //Kann auch eine Mischselektion sein!
508 void GroupSelection(); //Hinterher ist die Gruppe selektiert.
509 void UnGroupSelection(); //Die Einzelobjekte sind Selektiert
510 //Es koennen noch immer Gruppen dabei sein.
512 // OD 27.06.2003 #108784# - change return type.
513 bool IsGroupAllowed() const;
515 void MirrorSelection( BOOL bHorizontal ); //Bei FALSE Vertikal
517 //frmatr.hxx. Hier kein enum wg. Abhaengigkeiten
518 //Der BOOL ist nur fuer internen Gebrauch! Anker wird nur - anhand der
519 //aktuellen Dokumentposition - neu gesetzt aber nicht umgesetzt.
520 void ChgAnchor( int eAnchorId, BOOL bSameOnly = FALSE,
521 BOOL bPosCorr = TRUE );
523 BOOL SetDrawingAttr( SfxItemSet &rSet );
525 // hole die selectierten DrawObj als Grafik (MetaFile/Bitmap)
526 // Return-Wert besagt ob konvertiert wurde!!
527 BOOL GetDrawObjGraphic( ULONG nFmt, Graphic& rGrf ) const;
529 void Paste( SvStream& rStm, USHORT nAction, const Point* pPt = 0 );
530 BOOL Paste( const Graphic &rGrf );
531 BOOL Paste( SotDataObject& rObj, const Point& rPt );
533 BOOL IsAlignPossible() const;
534 void SetCalcFieldValueHdl(Outliner* pOutliner);
536 void Insert(const String& rGrfName,
537 const String& rFltName,
538 const Graphic* pGraphic = 0,
539 const SfxItemSet* pFlyAttrSet = 0,
540 const SfxItemSet* pGrfAttrSet = 0,
541 SwFrmFmt* = 0 );
542 //Einfuegen eines DrawObjectes. Das Object muss bereits im DrawModel
543 // angemeldet sein.
544 void Insert( SdrObject& rDrawObj, const SfxItemSet* pFlyAttrSet = 0,
545 SwFrmFmt* = 0, const Point* = 0 );
547 BOOL ReplaceSdrObj( const String& rGrfName, const String& rFltName,
548 const Graphic* pGrf = 0 );
550 //------------------------------------------
552 //Auskunft ueber naechstliegenden Inhalt zum uebergebenen Point
553 Point GetCntntPos( const Point& rPoint, BOOL bNext ) const;
555 //convert document position into position relative to the current page
556 Point GetRelativePagePosition(const Point& rDocPos);
558 //Layout-Selektion Hiden/Zeigen und aufruf an die CrsrSh weiterreichen.
559 void ShLooseFcs();
560 void ShGetFcs( BOOL bUpdate = TRUE );
562 //PageDescriptor-Schnittstelle
563 void ChgCurPageDesc( const SwPageDesc& );
564 USHORT GetCurPageDesc( const BOOL bCalcFrm = TRUE ) const;
565 USHORT GetMousePageDesc( const Point &rPt ) const;
566 USHORT GetPageDescCnt() const;
567 SwPageDesc* FindPageDescByName( const String& rName,
568 BOOL bGetFromPool = FALSE,
569 USHORT* pPos = 0 );
571 const SwPageDesc& GetPageDesc( USHORT i ) const;
572 void ChgPageDesc( USHORT i, const SwPageDesc& );
573 // if inside all selection only one PageDesc, return this.
574 // Otherwise return 0 pointer
575 const SwPageDesc* GetSelectedPageDescs() const;
577 const SwRect& GetAnyCurRect( CurRectType eType,
578 const Point* pPt = 0,
579 const ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >& =
580 ::com::sun::star::uno::Reference < ::com::sun::star::embed::XEmbeddedObject >() ) const;
582 //Seitennummer der Seite in der der Point liegt, 0 wenn keine
583 //getroffen ist.
584 USHORT GetPageNumber( const Point &rPoint ) const;
585 BOOL GetPageNumber( long nYPos, BOOL bAtCrsrPos, USHORT& rPhyNum, USHORT& rVirtNum, String &rDisplay ) const;
587 SwFlyFrmFmt* InsertObject( const svt::EmbeddedObjectRef&,
588 const SfxItemSet* pFlyAttrSet = 0,
589 const SfxItemSet* pGrfAttrSet = 0,
590 SwFrmFmt* = 0 );
591 BOOL FinishOLEObj(); // Server wird beendet
593 //Attribute der Tabelle besorgen/setzen.
594 void GetTblAttr( SfxItemSet & ) const;
595 void SetTblAttr( const SfxItemSet & );
597 //Tabelle vollstaendig selektiert?
598 BOOL HasWholeTabSelection() const;
599 //Ist der Inhalt einer Tabellenzelle oder mindestens eine Tabellenzelle
600 //vollstaendig selektiert ist
601 BOOL HasBoxSelection() const;
603 BOOL InsertRow( USHORT nCnt, BOOL bBehind );
604 BOOL InsertCol( USHORT nCnt, BOOL bBehind ); // 0 == am Ende
605 BOOL DeleteCol();
606 BOOL DeleteRow();
608 BOOL DeleteTblSel(); //Aktuelle Selektion, ggf. die ganze Tabelle.
610 USHORT MergeTab(); //Merged selektierte Tabellenteile zusammen
611 //Fehler ueber enum zurueck
612 // Zelle Vertikal oder Horizontal splitten.
613 BOOL SplitTab( BOOL nVert = TRUE, USHORT nCnt = 1, BOOL bSameHeight = FALSE );
614 BOOL Sort(const SwSortOptions&); //Sortieren.
616 void SetRowHeight( const SwFmtFrmSize &rSz );
617 //Der Pointer muss vom Aufrufer zerstoert werden wenn != 0
618 void GetRowHeight( SwFmtFrmSize *&rpSz ) const;
620 void SetRowSplit( const SwFmtRowSplit &rSz );
621 void GetRowSplit( SwFmtRowSplit *&rpSz ) const;
623 void SetBoxAlign( USHORT nOrient );
624 USHORT GetBoxAlign() const; //USHRT_MAX fuer uneindeutig!
626 //Ausgleichen der Zeilenhoehen. Mit bTstOnly festellen ob mehr als eine
627 //Zeile markiert ist.
628 BOOL BalanceRowHeight( BOOL bTstOnly );
630 void SetTabBorders( const SfxItemSet& rSet );
631 void GetTabBorders( SfxItemSet& rSet) const;
632 void SetTabLineStyle(const Color* pColor, BOOL bSetLine = FALSE, const SvxBorderLine* pBorderLine = NULL);
634 void SetTabBackground( const SvxBrushItem &rNew );
635 void GetTabBackground( SvxBrushItem &rToFill ) const;
637 void SetBoxBackground( const SvxBrushItem &rNew );
638 BOOL GetBoxBackground( SvxBrushItem &rToFill ) const; //FALSE uneindeutig
640 void SetBoxDirection( const SvxFrameDirectionItem& rNew );
641 BOOL GetBoxDirection( SvxFrameDirectionItem& rToFill ) const; //FALSE uneindeutig
643 void SetRowBackground( const SvxBrushItem &rNew );
644 BOOL GetRowBackground( SvxBrushItem &rToFill ) const; //FALSE uneindeutig
646 BYTE WhichMouseTabCol( const Point &rPt ) const;
647 void GetTabCols( SwTabCols &rToFill ) const; //Spalten- und Randinfo.
648 void SetTabCols( const SwTabCols &rNew, BOOL bCurRowOnly = TRUE );
649 void GetMouseTabCols( SwTabCols &rToFill, const Point &rPt ) const;
650 void SetMouseTabCols( const SwTabCols &rNew, BOOL bCurRowOnly,
651 const Point &rPt );
653 // --> FME 2004-07-30 #i20126# Enhanced table selection
654 // pEnd will be used during MouseMove
655 bool SelTblRowCol( const Point& rPt, const Point* pEnd = 0, bool bRowDrag = false );
656 // <--
658 // #i24134# adjustment of table rows via Ruler
659 void GetTabRows( SwTabCols &rToFill ) const;
660 void SetTabRows( const SwTabCols &rNew, BOOL bCurColOnly );
661 void GetMouseTabRows( SwTabCols &rToFill, const Point &rPt ) const;
662 void SetMouseTabRows( const SwTabCols &rNew, BOOL bCurColOnly, const Point &rPt );
664 void ProtectCells(); //Falls eine Tabselektion besteht, wird sie ver-
665 // nichtet, wenn der Cursor nicht in Readonly darf
666 void UnProtectCells(); // auf die Tabellenselektin
667 void UnProtectTbls(); //bei allen Tabellen in der Selektion den Schutz aufheben
668 BOOL HasTblAnyProtection( const String* pTblName = 0,
669 BOOL* pFullTblProtection = 0 );
670 BOOL CanUnProtectCells() const;
672 USHORT GetRowsToRepeat() const;
673 void SetRowsToRepeat( USHORT nNumOfRows );
674 USHORT GetVirtPageNum( const BOOL bCalcFrm = TRUE );
675 //returns the number of table rows currently selected
676 //if the selection start at the top of the table
677 USHORT GetRowSelectionFromTop() const;
679 BOOL IsInRepeatedHeadline() const { return CheckHeadline( true ); }
680 BOOL IsInHeadline() const { return CheckHeadline( false ); }
682 //Stellt die Breiten der Zellen so ein, dass der Inhalt moeglichst
683 //nicht umgebrochen werden muss.
684 //bBalance sorgt fuer einen Ausgleich der markierten Spalten.
685 void AdjustCellWidth( BOOL bBalance = FALSE );
686 //Nicht erlaubt, wenn nur leere Zellen selektiert sind.
687 BOOL IsAdjustCellWidthAllowed( BOOL bBalance = FALSE ) const;
689 //Ausgleich der Zellenbreiten, mit bTstOnly feststellen, ob mehr als
690 //eine Zelle markiert ist.
691 BOOL BalanceCellWidth( BOOL bTstOnly );
693 // AutoFormat fuer die Tabelle/TabellenSelection
694 BOOL SetTableAutoFmt( const SwTableAutoFmt& rNew );
695 // Erfrage wie attributiert ist
696 BOOL GetTableAutoFmt( SwTableAutoFmt& rGet );
697 // aender eine Zellenbreite/-Hoehe/Spaltenbreite/Zeilenhoehe
698 BOOL SetColRowWidthHeight( USHORT eType, USHORT nDiff = 283 );
699 // Autosumme
700 BOOL GetAutoSum( String& rFml ) const;
702 //Phy: Tatsaechliche Seitenanzahl.
703 //Virt: Vom User evtl. gesetzten Offset mit einbeziehen.
704 USHORT GetPhyPageNum();
706 // Setzt an der aktuellen Postion einen neuen Page Offset
707 void SetNewPageOffset( USHORT nOffset );
708 void SetPageOffset( USHORT nOffset ); //Aendert den letzten Page Offset
709 USHORT GetPageOffset() const; //Liefert den letzten Page Offset
711 //SS fuer Beschriftungen
712 void InsertLabel( const SwLabelType eType, const String &rTxt, const String& rSeparator,
713 const String& rNumberSeparator,
714 const BOOL bBefore, const USHORT nId,
715 const String& rCharacterStyle,
716 const BOOL bCpyBrd = TRUE );
718 //Das Lineal will auch noch etwas von uns wissen.
719 USHORT GetCurColNum( SwGetCurColNumPara* pPara = 0 ) const; //0 == in keiner Spalte
720 USHORT GetCurMouseColNum( const Point &rPt,
721 SwGetCurColNumPara* pPara = 0 ) const;
722 USHORT GetCurTabColNum() const; //0 == in keiner Tabelle
723 USHORT GetCurMouseTabColNum( const Point &rPt ) const;
724 USHORT GetCurOutColNum( SwGetCurColNumPara* pPara = 0 ) const; // aktuelle aeussere Spalte
726 BOOL IsTableRightToLeft() const;
727 BOOL IsMouseTableRightToLeft( const Point &rPt ) const;
728 BOOL IsTableVertical() const;
730 BOOL IsLastCellInRow() const;
731 // Die Breite des aktuellen Bereichs fuer Spaltendialog
732 long GetSectionWidth( SwFmt& rFmt ) const;
734 void GetConnectableFrmFmts
735 (SwFrmFmt & rFmt, const String & rReference, BOOL bSuccessors,
736 ::std::vector< String > & aPrevPageVec,
737 ::std::vector< String > & aThisPageVec,
738 ::std::vector< String > & aNextPageVec,
739 ::std::vector< String > & aRestVec);
741 /** SwFEShell::GetShapeBackgrd
743 OD 02.09.2002 for #102450#:
744 method determines background color of the page the selected drawing
745 object is on and returns this color.
746 If no color is found, because no drawing object is selected or ...,
747 color COL_BLACK (default color on constructing object of class Color)
748 is returned.
750 @author OD
752 @returns an object of class Color
754 const Color GetShapeBackgrd() const;
756 /** Is default horizontal text direction for selected drawing object right-to-left
758 OD 09.12.2002 #103045#
759 Because drawing objects only painted for each page only, the default
760 horizontal text direction of a drawing object is given by the corresponding
761 page property.
763 @author OD
765 @returns boolean, indicating, if the horizontal text direction of the
766 page, the selected drawing object is on, is right-to-left.
768 bool IsShapeDefaultHoriTextDirR2L() const;
770 void ParkCursorInTab();
772 // -> #i23726#
773 SwTxtNode * GetNumRuleNodeAtPos(const Point &rPot);
774 BOOL IsNumLabel( const Point &rPt, int nMaxOffset = -1 );
775 // <- #i23726#
776 // --> OD 2005-02-21 #i42921#
777 bool IsVerticalModeAtNdAndPos( const SwTxtNode& _rTxtNode,
778 const Point& _rDocPos ) const;
779 // <--
783 #endif