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 $
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 ************************************************************************/
37 #include <orntenum.hxx>
40 #include <flyenum.hxx>
43 // OD 25.06.2003 #108784#
45 #include <bf_svx/svdtypes.hxx>
52 class SvEmbeddedObject
;
53 class SvEmbeddedObjectRef
;
54 class SvInPlaceObject
;
64 class SvStorageStream
;
69 class SdrViewUserMarker
;
84 FRMTYPE_FLY_FREE
= 64,
85 FRMTYPE_FLY_ATCNT
= 128,
86 FRMTYPE_FLY_INCNT
= 256,
87 FRMTYPE_FOOTNOTE
= 512,
88 FRMTYPE_FTNPAGE
= 1024,
89 FRMTYPE_FLY_ANY
= 2048,
90 FRMTYPE_DRAWOBJ
= 4096,
91 FRMTYPE_COLSECT
= 8192,
92 FRMTYPE_COLSECTOUTTAB
= 16384
95 #define FRMTYPE_ANYCOLSECT ( FRMTYPE_COLSECT | FRMTYPE_COLSECTOUTTAB )
111 FLYPROTECT_CONTENT
= 1, // kann verodert werden!
114 FLYPROTECT_PARENT
= 8, // nur Parents untersuchen
115 FLYPROTECT_FIXED
= 16 // nur nicht aufhebbarer Schutz
116 // z.B. durch OLE-Server, gilt auch
120 enum ObjCntType
//Fuer das Ermitteln des Cntnts per Positon (D&D)
131 OBJCNT_DONTCARE
// nicht bestimmbar - unterschiedliche Objecte selektiert
136 RECT_PAGE
, //Rect der aktuellen Seite.
137 RECT_PAGE_CALC
, //... Seite wird ggf. Formatiert
138 RECT_PAGE_PRT
, //Rect der aktuellen PrtArea der Seite
139 RECT_FRM
, //Rect des aktuellen Rahmen
140 RECT_FLY_EMBEDDED
, //Rect des aktuellen FlyFrm
141 RECT_FLY_PRT_EMBEDDED
, //Rect der PrtArea des FlyFrm
142 RECT_SECTION
, //Rect des aktuellen Bereichs
143 RECT_OUTTABSECTION
, //Rect des aktuellen Bereichs,
144 // aber ausserhalb der Tabelle
145 RECT_SECTION_PRT
, //Rect der aktuellen PrtArea des Bereichs
146 RECT_OUTTABSECTION_PRT
, //Rect der aktuellen PrtArea des Bereichs,
147 // aber ausserhalb der Tabelle
148 RECT_HEADERFOOTER
, //Rect des aktuellen Headers/Footer
149 RECT_HEADERFOOTER_PRT
//Rect der PrtArea des aktuellen Headers/Footers
152 struct SwGetCurColNumPara
154 const SwFrmFmt
* pFrmFmt
;
155 const SwRect
* pPrtRect
, *pFrmRect
;
156 SwGetCurColNumPara() : pFrmFmt( 0 ), pPrtRect( 0 ), pFrmRect( 0 ) {}
159 #define SW_PASTESDR_INSERT 1
160 #define SW_PASTESDR_REPLACE 2
161 #define SW_PASTESDR_SETATTR 3
163 #define SW_ADD_SELECT 1
164 #define SW_ENTER_GROUP 2
165 #define SW_LEAVE_FRAME 4
168 #define SW_MOVE_DOWN 1
169 #define SW_MOVE_LEFT 2
170 #define SW_MOVE_RIGHT 3
172 #define SW_TABCOL_NONE 0
173 #define SW_TABCOL_HORI 1
174 #define SW_TABCOL_VERT 2
176 class SwFEShell
: public SwEditShell
178 SdrViewUserMarker
*pChainFrom
,
180 BOOL bCheckForOLEInCaption
;
182 SwFlyFrm
*FindFlyFrm() const;
186 SwFEShell( SwDoc
& rDoc
, Window
*pWin
,
187 SwRootFrm
*pMaster
= 0, const SwViewOption
*pOpt
= 0 );
188 virtual ~SwFEShell();
191 // Test if there is a draw object at that position and if it should be selected.
192 // The 'should' is aimed at Writer text fly frames which may be in front of
194 sal_Bool
ShouldObjectBeSelected(const Point
& rPt
);
196 // zeige die aktuelle Selektion an ( ggfs. den Rahmen/DrawObject)
197 virtual void MakeSelVisible();
199 //Liefert neben der Grafik in rName bei gelinkten Grafiken den Namen mit
200 //Pfad und sonst den Grafiknamen. rbLink ist TRU bei gelinkten Grafiken.
202 //SS fuer Rahmen --------------------------------------------
204 BOOL
IsFrmSelected() const;
206 #ifdef ACCESSIBLE_LAYOUT
207 const SwFlyFrm
*GetCurrFlyFrm() const { return FindFlyFrm(); }
210 //Der Client fuer das OleObject muss bezueglich der Scalierung auf dem
211 //neuesten Stand gehalten werden. Impl in der WrtShell.
212 //Wird ein Pointer auf eine Size uebergeben, so ist diese die aktuelle
213 //Core-Groesse des Objectes. Anderfalls wird die Groesse per GetCurFlyRect()
215 virtual void CalcAndSetScale( SvEmbeddedObjectRef xIPObj
,
216 const SwRect
*pFlyPrtRect
= 0,
217 const SwRect
*pFlyFrmRect
= 0 ) = 0;
219 //Objekte mit ActivateWhenVisible werden beim Paint Connected.
220 //gerufen von notxtfrm::Paint, impl in wrtsh
221 virtual void ConnectObj( SvInPlaceObjectRef xIPObj
, const SwRect
&rPrt
,
222 const SwRect
&rFrm
) = 0;
224 //Sichbaren Bereich auf das Object setzen, wenn es noch nicht sichtbar ist.
226 // check resize of OLE-Object
227 BOOL
IsCheckForOLEInCaption() const { return bCheckForOLEInCaption
; }
228 void SetCheckForOLEInCaption( BOOL bFlag
) { bCheckForOLEInCaption
= bFlag
; }
230 //Fuer das Chain wird immer der durch das Format spezifizierte Fly
231 //mit dem durch den Point getroffenen verbunden.
232 //In rRect wird das Rect des Flys geliefert (fuer Highlight desselben)
233 void HideChainMarker();
234 void SetChainMarker();
237 //SS fuer DrawObjekte ---------------------
239 //Temporaer um Bug zu umgehen.
241 //Achtung: Uneindeutikeiten bei Mehrfachselektionen.
245 //Setzen vom DragMode (z.B. Rotate), tut nix bei Rahmenselektion.
247 #ifdef ACCESSIBLE_LAYOUT
251 //Ankertyp des selektierten Objektes, -1 bei Uneindeutigkeit oder
252 //Rahmenselektion; FLY_PAGE bzw. FLY_AT_CNTNT aus frmatr.hxx sonst.
254 //Erzeugen von DrawObjekten, beim Begin wird der Objekttyp mitgegeben.
255 //Beim End kann ein Cmd mitgegeben werden, hier ist ggf.
256 //SDRCREATE_RESTRAINTEND fuer Ende oder SDRCREATE_NEXTPOINT fuer ein
257 //Polygon relevant. Nach dem RESTRAINTEND ist das Objekt erzeugt und
259 //Mit BreakCreate wird der Vorgang abgebrochen, dann ist kein Objekt
262 // Funktionen f�r Rubberbox, um Draw-Objekte zu selektieren
264 //Gruppe erzeugen, aufloesen, nix bei Rahmenselektion.
265 //Es koennen noch immer Gruppen dabei sein.
267 // OD 27.06.2003 #108784# - change return type.
270 //Umankern. erlaubt sind: FLY_PAGE und FLY_AT_CNTNT des enum RndStdIds aus
271 //frmatr.hxx. Hier kein enum wg. Abhaengigkeiten
272 //Der BOOL ist nur fuer internen Gebrauch! Anker wird nur - anhand der
273 //aktuellen Dokumentposition - neu gesetzt aber nicht umgesetzt.
275 // hole die selectierten DrawObj als Grafik (MetaFile/Bitmap)
276 // Return-Wert besagt ob konvertiert wurde!!
280 //Einfuegen eines DrawObjectes. Das Object muss bereits im DrawModel
284 //------------------------------------------
286 //Auskunft ueber naechstliegenden Inhalt zum uebergebenen Point
288 //convert document position into position relative to the current page
289 Point
GetRelativePagePosition(const Point
& rDocPos
);
291 //Ausgleich der Zellenbreiten, mit bTstOnly feststellen, ob mehr als
292 //eine Zelle markiert ist.
293 BOOL
BalanceCellWidth( BOOL bTstOnly
);
295 BOOL
IsLastCellInRow() const;
296 // Die Breite des aktuellen Bereichs fuer Spaltendialog
298 /** Is default horizontal text direction for selected drawing object right-to-left
300 OD 09.12.2002 #103045#
301 Because drawing objects only painted for each page only, the default
302 horizontal text direction of a drawing object is given by the corresponding
307 @returns boolean, indicating, if the horizontal text direction of the
308 page, the selected drawing object is on, is right-to-left.
310 const bool IsShapeDefaultHoriTextDirR2L() const;
312 void ParkCursorInTab();
315 } //namespace binfilter