1*b1cdbd2cSJim Jagielski /************************************************************** 2*b1cdbd2cSJim Jagielski * 3*b1cdbd2cSJim Jagielski * Licensed to the Apache Software Foundation (ASF) under one 4*b1cdbd2cSJim Jagielski * or more contributor license agreements. See the NOTICE file 5*b1cdbd2cSJim Jagielski * distributed with this work for additional information 6*b1cdbd2cSJim Jagielski * regarding copyright ownership. The ASF licenses this file 7*b1cdbd2cSJim Jagielski * to you under the Apache License, Version 2.0 (the 8*b1cdbd2cSJim Jagielski * "License"); you may not use this file except in compliance 9*b1cdbd2cSJim Jagielski * with the License. You may obtain a copy of the License at 10*b1cdbd2cSJim Jagielski * 11*b1cdbd2cSJim Jagielski * http://www.apache.org/licenses/LICENSE-2.0 12*b1cdbd2cSJim Jagielski * 13*b1cdbd2cSJim Jagielski * Unless required by applicable law or agreed to in writing, 14*b1cdbd2cSJim Jagielski * software distributed under the License is distributed on an 15*b1cdbd2cSJim Jagielski * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*b1cdbd2cSJim Jagielski * KIND, either express or implied. See the License for the 17*b1cdbd2cSJim Jagielski * specific language governing permissions and limitations 18*b1cdbd2cSJim Jagielski * under the License. 19*b1cdbd2cSJim Jagielski * 20*b1cdbd2cSJim Jagielski *************************************************************/ 21*b1cdbd2cSJim Jagielski 22*b1cdbd2cSJim Jagielski 23*b1cdbd2cSJim Jagielski 24*b1cdbd2cSJim Jagielski #ifndef SC_DRWLAYER_HXX 25*b1cdbd2cSJim Jagielski #define SC_DRWLAYER_HXX 26*b1cdbd2cSJim Jagielski 27*b1cdbd2cSJim Jagielski #include <vcl/graph.hxx> 28*b1cdbd2cSJim Jagielski #include <svx/fmmodel.hxx> 29*b1cdbd2cSJim Jagielski #include <svx/svdundo.hxx> 30*b1cdbd2cSJim Jagielski #include "global.hxx" 31*b1cdbd2cSJim Jagielski 32*b1cdbd2cSJim Jagielski class ScDocument; 33*b1cdbd2cSJim Jagielski class SfxViewShell; 34*b1cdbd2cSJim Jagielski class SfxObjectShell; 35*b1cdbd2cSJim Jagielski class ScDrawObjData; 36*b1cdbd2cSJim Jagielski class ScIMapInfo; 37*b1cdbd2cSJim Jagielski class ScMacroInfo; 38*b1cdbd2cSJim Jagielski class IMapObject; 39*b1cdbd2cSJim Jagielski class ScMarkData; 40*b1cdbd2cSJim Jagielski class SdrOle2Obj; 41*b1cdbd2cSJim Jagielski class ScRange; 42*b1cdbd2cSJim Jagielski class ScAddress; 43*b1cdbd2cSJim Jagielski 44*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------- 45*b1cdbd2cSJim Jagielski 46*b1cdbd2cSJim Jagielski class ScTabDeletedHint : public SfxHint 47*b1cdbd2cSJim Jagielski { 48*b1cdbd2cSJim Jagielski private: 49*b1cdbd2cSJim Jagielski SCTAB nTab; 50*b1cdbd2cSJim Jagielski public: 51*b1cdbd2cSJim Jagielski TYPEINFO(); 52*b1cdbd2cSJim Jagielski ScTabDeletedHint( SCTAB nTabNo = SCTAB_MAX ); 53*b1cdbd2cSJim Jagielski virtual ~ScTabDeletedHint(); 54*b1cdbd2cSJim Jagielski GetTab()55*b1cdbd2cSJim Jagielski SCTAB GetTab() { return nTab; } 56*b1cdbd2cSJim Jagielski }; 57*b1cdbd2cSJim Jagielski 58*b1cdbd2cSJim Jagielski class ScTabSizeChangedHint : public SfxHint 59*b1cdbd2cSJim Jagielski { 60*b1cdbd2cSJim Jagielski private: 61*b1cdbd2cSJim Jagielski SCTAB nTab; 62*b1cdbd2cSJim Jagielski public: 63*b1cdbd2cSJim Jagielski TYPEINFO(); 64*b1cdbd2cSJim Jagielski ScTabSizeChangedHint( SCTAB nTabNo = SCTAB_MAX ); 65*b1cdbd2cSJim Jagielski virtual ~ScTabSizeChangedHint(); 66*b1cdbd2cSJim Jagielski GetTab()67*b1cdbd2cSJim Jagielski SCTAB GetTab() { return nTab; } 68*b1cdbd2cSJim Jagielski }; 69*b1cdbd2cSJim Jagielski 70*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------- 71*b1cdbd2cSJim Jagielski // 72*b1cdbd2cSJim Jagielski // Das Anpassen der Detektiv-UserData muss zusammen mit den Draw-Undo's 73*b1cdbd2cSJim Jagielski // in der SdrUndoGroup liegen, darum von SdrUndoAction abgeleitet: 74*b1cdbd2cSJim Jagielski 75*b1cdbd2cSJim Jagielski class ScUndoObjData : public SdrUndoObj 76*b1cdbd2cSJim Jagielski { 77*b1cdbd2cSJim Jagielski private: 78*b1cdbd2cSJim Jagielski ScAddress aOldStt; 79*b1cdbd2cSJim Jagielski ScAddress aOldEnd; 80*b1cdbd2cSJim Jagielski ScAddress aNewStt; 81*b1cdbd2cSJim Jagielski ScAddress aNewEnd; 82*b1cdbd2cSJim Jagielski sal_Bool bHasNew; 83*b1cdbd2cSJim Jagielski public: 84*b1cdbd2cSJim Jagielski ScUndoObjData( SdrObject* pObj, const ScAddress& rOS, const ScAddress& rOE, 85*b1cdbd2cSJim Jagielski const ScAddress& rNS, const ScAddress& rNE ); 86*b1cdbd2cSJim Jagielski ~ScUndoObjData(); 87*b1cdbd2cSJim Jagielski 88*b1cdbd2cSJim Jagielski virtual void Undo(); 89*b1cdbd2cSJim Jagielski virtual void Redo(); 90*b1cdbd2cSJim Jagielski }; 91*b1cdbd2cSJim Jagielski 92*b1cdbd2cSJim Jagielski // ----------------------------------------------------------------------- 93*b1cdbd2cSJim Jagielski 94*b1cdbd2cSJim Jagielski class SC_DLLPUBLIC ScDrawLayer : public FmFormModel 95*b1cdbd2cSJim Jagielski { 96*b1cdbd2cSJim Jagielski private: 97*b1cdbd2cSJim Jagielski //REMOVE SotStorageRef xPictureStorage; 98*b1cdbd2cSJim Jagielski String aName; 99*b1cdbd2cSJim Jagielski ScDocument* pDoc; 100*b1cdbd2cSJim Jagielski SdrUndoGroup* pUndoGroup; 101*b1cdbd2cSJim Jagielski sal_Bool bRecording; 102*b1cdbd2cSJim Jagielski sal_Bool bAdjustEnabled; 103*b1cdbd2cSJim Jagielski sal_Bool bHyphenatorSet; 104*b1cdbd2cSJim Jagielski bool mbUndoAllowed; 105*b1cdbd2cSJim Jagielski 106*b1cdbd2cSJim Jagielski private: 107*b1cdbd2cSJim Jagielski void MoveAreaTwips( SCTAB nTab, const Rectangle& rArea, const Point& rMove, 108*b1cdbd2cSJim Jagielski const Point& rTopLeft ); 109*b1cdbd2cSJim Jagielski void MoveCells( SCTAB nTab, SCCOL nCol1,SCROW nRow1, SCCOL nCol2,SCROW nRow2, 110*b1cdbd2cSJim Jagielski SCsCOL nDx,SCsROW nDy, bool bUpdateNoteCaptionPos ); 111*b1cdbd2cSJim Jagielski 112*b1cdbd2cSJim Jagielski void RecalcPos( SdrObject* pObj, const ScDrawObjData& rData, bool bNegativePage, bool bUpdateNoteCaptionPos ); 113*b1cdbd2cSJim Jagielski 114*b1cdbd2cSJim Jagielski public: 115*b1cdbd2cSJim Jagielski ScDrawLayer( ScDocument* pDocument, const String& rName ); 116*b1cdbd2cSJim Jagielski virtual ~ScDrawLayer(); 117*b1cdbd2cSJim Jagielski 118*b1cdbd2cSJim Jagielski virtual SdrPage* AllocPage(FASTBOOL bMasterPage); 119*b1cdbd2cSJim Jagielski virtual SdrModel* AllocModel() const; 120*b1cdbd2cSJim Jagielski virtual void SetChanged( sal_Bool bFlg = sal_True ); 121*b1cdbd2cSJim Jagielski 122*b1cdbd2cSJim Jagielski virtual Window* GetCurDocViewWin(); 123*b1cdbd2cSJim Jagielski virtual SvStream* GetDocumentStream(SdrDocumentStreamInfo& rStreamInfo) const; 124*b1cdbd2cSJim Jagielski 125*b1cdbd2cSJim Jagielski virtual SdrLayerID GetControlExportLayerId( const SdrObject & ) const; 126*b1cdbd2cSJim Jagielski 127*b1cdbd2cSJim Jagielski //REMOVE void ReleasePictureStorage(); 128*b1cdbd2cSJim Jagielski 129*b1cdbd2cSJim Jagielski sal_Bool HasObjects() const; 130*b1cdbd2cSJim Jagielski 131*b1cdbd2cSJim Jagielski sal_Bool ScAddPage( SCTAB nTab ); 132*b1cdbd2cSJim Jagielski void ScRemovePage( SCTAB nTab ); 133*b1cdbd2cSJim Jagielski void ScRenamePage( SCTAB nTab, const String& rNewName ); 134*b1cdbd2cSJim Jagielski void ScMovePage( sal_uInt16 nOldPos, sal_uInt16 nNewPos ); 135*b1cdbd2cSJim Jagielski // inkl. Inhalt, bAlloc=sal_False -> nur Inhalt 136*b1cdbd2cSJim Jagielski void ScCopyPage( sal_uInt16 nOldPos, sal_uInt16 nNewPos, sal_Bool bAlloc ); 137*b1cdbd2cSJim Jagielski GetDocument() const138*b1cdbd2cSJim Jagielski ScDocument* GetDocument() const { return pDoc; } 139*b1cdbd2cSJim Jagielski 140*b1cdbd2cSJim Jagielski void UpdateBasic(); // DocShell-Basic in DrawPages setzen 141*b1cdbd2cSJim Jagielski void UseHyphenator(); 142*b1cdbd2cSJim Jagielski 143*b1cdbd2cSJim Jagielski sal_Bool GetPrintArea( ScRange& rRange, sal_Bool bSetHor, sal_Bool bSetVer ) const; 144*b1cdbd2cSJim Jagielski 145*b1cdbd2cSJim Jagielski // automatische Anpassungen 146*b1cdbd2cSJim Jagielski EnableAdjust(sal_Bool bSet=sal_True)147*b1cdbd2cSJim Jagielski void EnableAdjust( sal_Bool bSet = sal_True ) { bAdjustEnabled = bSet; } 148*b1cdbd2cSJim Jagielski 149*b1cdbd2cSJim Jagielski void BeginCalcUndo(bool bDisableTextEditUsesCommonUndoManager); 150*b1cdbd2cSJim Jagielski SdrUndoGroup* GetCalcUndo(); IsRecording() const151*b1cdbd2cSJim Jagielski sal_Bool IsRecording() const { return bRecording; } 152*b1cdbd2cSJim Jagielski void AddCalcUndo( SdrUndoAction* pUndo ); 153*b1cdbd2cSJim Jagielski 154*b1cdbd2cSJim Jagielski template< typename TUndoAction, typename TArg > AddCalcUndo(const TArg & rArg)155*b1cdbd2cSJim Jagielski inline void AddCalcUndo( const TArg & rArg ) { if( this->IsUndoAllowed() ) this->AddCalcUndo( new TUndoAction( rArg ) ); } 156*b1cdbd2cSJim Jagielski 157*b1cdbd2cSJim Jagielski template< typename TUndoAction, typename TArg > AddCalcUndo(TArg & rArg)158*b1cdbd2cSJim Jagielski inline void AddCalcUndo( TArg & rArg ) { if( this->IsUndoAllowed() ) this->AddCalcUndo( new TUndoAction( rArg ) ); } 159*b1cdbd2cSJim Jagielski 160*b1cdbd2cSJim Jagielski template< typename TUndoAction, typename TArg1, typename TArg2 > AddCalcUndo(TArg1 & rArg1,TArg2 & rArg2)161*b1cdbd2cSJim Jagielski inline void AddCalcUndo( TArg1 & rArg1, TArg2 & rArg2 ) { if( this->IsUndoAllowed() ) this->AddCalcUndo( new TUndoAction( rArg1, rArg2 ) ); } 162*b1cdbd2cSJim Jagielski 163*b1cdbd2cSJim Jagielski template< typename TUndoAction, typename TArg1, typename TArg2 > AddCalcUndo(const TArg1 & rArg1,const TArg2 & rArg2)164*b1cdbd2cSJim Jagielski inline void AddCalcUndo( const TArg1 & rArg1, const TArg2 & rArg2 ) { if( this->IsUndoAllowed() ) this->AddCalcUndo( new TUndoAction( rArg1, rArg2 ) ); } 165*b1cdbd2cSJim Jagielski 166*b1cdbd2cSJim Jagielski template< typename TUndoAction, typename TArg1, typename TArg2, typename TArg3, typename TArg4, typename TArg5 > AddCalcUndo(const TArg1 & rArg1,const TArg2 & rArg2,const TArg3 & rArg3,const TArg4 & rArg4,const TArg5 & rArg5)167*b1cdbd2cSJim Jagielski inline void AddCalcUndo( const TArg1 & rArg1, const TArg2 & rArg2, const TArg3 & rArg3, const TArg4 & rArg4, const TArg5 & rArg5 ) { if( this->IsUndoAllowed() ) this->AddCalcUndo( new TUndoAction( rArg1, rArg2, rArg3, rArg4, rArg5 ) ); } 168*b1cdbd2cSJim Jagielski 169*b1cdbd2cSJim Jagielski void MoveArea( SCTAB nTab, SCCOL nCol1,SCROW nRow1, SCCOL nCol2,SCROW nRow2, 170*b1cdbd2cSJim Jagielski SCsCOL nDx,SCsROW nDy, sal_Bool bInsDel, bool bUpdateNoteCaptionPos = true ); 171*b1cdbd2cSJim Jagielski void WidthChanged( SCTAB nTab, SCCOL nCol, long nDifTwips ); 172*b1cdbd2cSJim Jagielski void HeightChanged( SCTAB nTab, SCROW nRow, long nDifTwips ); 173*b1cdbd2cSJim Jagielski 174*b1cdbd2cSJim Jagielski sal_Bool HasObjectsInRows( SCTAB nTab, SCROW nStartRow, SCROW nEndRow, bool bIncludeNotes = true ); 175*b1cdbd2cSJim Jagielski 176*b1cdbd2cSJim Jagielski void DeleteObjectsInArea( SCTAB nTab, SCCOL nCol1,SCROW nRow1, 177*b1cdbd2cSJim Jagielski SCCOL nCol2,SCROW nRow2 ); 178*b1cdbd2cSJim Jagielski void DeleteObjectsInSelection( const ScMarkData& rMark ); 179*b1cdbd2cSJim Jagielski #if 0 180*b1cdbd2cSJim Jagielski void DeleteObjects( SCTAB nTab ); 181*b1cdbd2cSJim Jagielski #endif 182*b1cdbd2cSJim Jagielski 183*b1cdbd2cSJim Jagielski void CopyToClip( ScDocument* pClipDoc, SCTAB nTab, const Rectangle& rRange ); 184*b1cdbd2cSJim Jagielski void CopyFromClip( ScDrawLayer* pClipModel, 185*b1cdbd2cSJim Jagielski SCTAB nSourceTab, const Rectangle& rSourceRange, 186*b1cdbd2cSJim Jagielski const ScAddress& rDestPos, const Rectangle& rDestRange ); 187*b1cdbd2cSJim Jagielski 188*b1cdbd2cSJim Jagielski void SetPageSize( sal_uInt16 nPageNo, const Size& rSize, bool bUpdateNoteCaptionPos = true ); 189*b1cdbd2cSJim Jagielski 190*b1cdbd2cSJim Jagielski // mirror or move between positive and negative positions for RTL 191*b1cdbd2cSJim Jagielski void MirrorRTL( SdrObject* pObj ); 192*b1cdbd2cSJim Jagielski static void MirrorRectRTL( Rectangle& rRect ); // for bounding rectangles etc. 193*b1cdbd2cSJim Jagielski 194*b1cdbd2cSJim Jagielski /** Returns the rectangle for the passed cell address in 1/100 mm. 195*b1cdbd2cSJim Jagielski @param bMergedCell True = regards merged cells. False = use single column/row size. */ 196*b1cdbd2cSJim Jagielski static Rectangle GetCellRect( ScDocument& rDoc, const ScAddress& rPos, bool bMergedCell ); 197*b1cdbd2cSJim Jagielski 198*b1cdbd2cSJim Jagielski // GetVisibleName: name for navigator etc: GetPersistName or GetName 199*b1cdbd2cSJim Jagielski // (ChartListenerCollection etc. must use GetPersistName directly) 200*b1cdbd2cSJim Jagielski static String GetVisibleName( SdrObject* pObj ); 201*b1cdbd2cSJim Jagielski 202*b1cdbd2cSJim Jagielski SdrObject* GetNamedObject( const String& rName, sal_uInt16 nId, SCTAB& rFoundTab ) const; 203*b1cdbd2cSJim Jagielski // if pnCounter != NULL, the search for a name starts with this index + 1, 204*b1cdbd2cSJim Jagielski // and the index really used is returned. 205*b1cdbd2cSJim Jagielski String GetNewGraphicName( long* pnCounter = NULL ) const; 206*b1cdbd2cSJim Jagielski void EnsureGraphicNames(); 207*b1cdbd2cSJim Jagielski 208*b1cdbd2cSJim Jagielski // Verankerung setzen und ermitteln 209*b1cdbd2cSJim Jagielski static void SetAnchor( SdrObject*, ScAnchorType ); 210*b1cdbd2cSJim Jagielski static ScAnchorType GetAnchor( const SdrObject* ); 211*b1cdbd2cSJim Jagielski 212*b1cdbd2cSJim Jagielski // Positionen fuer Detektivlinien 213*b1cdbd2cSJim Jagielski static ScDrawObjData* GetObjData( SdrObject* pObj, sal_Bool bCreate=sal_False ); 214*b1cdbd2cSJim Jagielski 215*b1cdbd2cSJim Jagielski // The sheet information in ScDrawObjData isn't updated when sheets are inserted/deleted. 216*b1cdbd2cSJim Jagielski // Use this method to get an object with positions on the specified sheet (should be the 217*b1cdbd2cSJim Jagielski // sheet on which the object is inserted). 218*b1cdbd2cSJim Jagielski static ScDrawObjData* GetObjDataTab( SdrObject* pObj, SCTAB nTab ); 219*b1cdbd2cSJim Jagielski 220*b1cdbd2cSJim Jagielski /** Returns true, if the passed object is the caption of a cell note. */ 221*b1cdbd2cSJim Jagielski static bool IsNoteCaption( SdrObject* pObj ); 222*b1cdbd2cSJim Jagielski 223*b1cdbd2cSJim Jagielski /** Returns the object data, if the passed object is a cell note caption. */ 224*b1cdbd2cSJim Jagielski static ScDrawObjData* GetNoteCaptionData( SdrObject* pObj, SCTAB nTab ); 225*b1cdbd2cSJim Jagielski 226*b1cdbd2cSJim Jagielski // Image-Map 227*b1cdbd2cSJim Jagielski static ScIMapInfo* GetIMapInfo( SdrObject* pObj ); 228*b1cdbd2cSJim Jagielski 229*b1cdbd2cSJim Jagielski static IMapObject* GetHitIMapObject( SdrObject* pObject, 230*b1cdbd2cSJim Jagielski const Point& rWinPoint, const Window& rCmpWnd ); 231*b1cdbd2cSJim Jagielski 232*b1cdbd2cSJim Jagielski static ScMacroInfo* GetMacroInfo( SdrObject* pObj, sal_Bool bCreate = sal_False ); 233*b1cdbd2cSJim Jagielski virtual ImageMap* GetImageMapForObject(SdrObject* pObj); 234*b1cdbd2cSJim Jagielski virtual sal_Int32 GetHyperlinkCount(SdrObject* pObj); 235*b1cdbd2cSJim Jagielski 236*b1cdbd2cSJim Jagielski private: 237*b1cdbd2cSJim Jagielski static SfxObjectShell* pGlobalDrawPersist; // fuer AllocModel 238*b1cdbd2cSJim Jagielski public: 239*b1cdbd2cSJim Jagielski static void SetGlobalDrawPersist(SfxObjectShell* pPersist); 240*b1cdbd2cSJim Jagielski protected: 241*b1cdbd2cSJim Jagielski virtual ::com::sun::star::uno::Reference< ::com::sun::star::uno::XInterface > createUnoModel(); 242*b1cdbd2cSJim Jagielski public: SetUndoAllowed(bool bUndoAllowed)243*b1cdbd2cSJim Jagielski inline void SetUndoAllowed( bool bUndoAllowed ){ mbUndoAllowed = bUndoAllowed; } IsUndoAllowed() const244*b1cdbd2cSJim Jagielski inline bool IsUndoAllowed() const{ return mbUndoAllowed; } 245*b1cdbd2cSJim Jagielski }; 246*b1cdbd2cSJim Jagielski 247*b1cdbd2cSJim Jagielski 248*b1cdbd2cSJim Jagielski #endif 249*b1cdbd2cSJim Jagielski 250*b1cdbd2cSJim Jagielski 251