1*38d50f7bSAndrew Rist /************************************************************** 2cdf0e10cSrcweir * 3*38d50f7bSAndrew Rist * Licensed to the Apache Software Foundation (ASF) under one 4*38d50f7bSAndrew Rist * or more contributor license agreements. See the NOTICE file 5*38d50f7bSAndrew Rist * distributed with this work for additional information 6*38d50f7bSAndrew Rist * regarding copyright ownership. The ASF licenses this file 7*38d50f7bSAndrew Rist * to you under the Apache License, Version 2.0 (the 8*38d50f7bSAndrew Rist * "License"); you may not use this file except in compliance 9*38d50f7bSAndrew Rist * with the License. You may obtain a copy of the License at 10cdf0e10cSrcweir * 11*38d50f7bSAndrew Rist * http://www.apache.org/licenses/LICENSE-2.0 12cdf0e10cSrcweir * 13*38d50f7bSAndrew Rist * Unless required by applicable law or agreed to in writing, 14*38d50f7bSAndrew Rist * software distributed under the License is distributed on an 15*38d50f7bSAndrew Rist * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 16*38d50f7bSAndrew Rist * KIND, either express or implied. See the License for the 17*38d50f7bSAndrew Rist * specific language governing permissions and limitations 18*38d50f7bSAndrew Rist * under the License. 19cdf0e10cSrcweir * 20*38d50f7bSAndrew Rist *************************************************************/ 21*38d50f7bSAndrew Rist 22*38d50f7bSAndrew Rist 23cdf0e10cSrcweir #ifndef SC_VIEWDATA_HXX 24cdf0e10cSrcweir #define SC_VIEWDATA_HXX 25cdf0e10cSrcweir 26cdf0e10cSrcweir #include <svx/zoomitem.hxx> 27cdf0e10cSrcweir #include "scdllapi.h" 28cdf0e10cSrcweir #include "viewopti.hxx" 29cdf0e10cSrcweir #include "markdata.hxx" 30cdf0e10cSrcweir 31cdf0e10cSrcweir 32cdf0e10cSrcweir // --------------------------------------------------------------------------- 33cdf0e10cSrcweir 34cdf0e10cSrcweir #define SC_SLIDER_SIZE 2 35cdf0e10cSrcweir #define SC_SMALL3DSHADOW COL_BLACK 36cdf0e10cSrcweir #define SC_SIZE_NONE 65535 37cdf0e10cSrcweir const SCCOL SC_TABSTART_NONE = SCCOL_MAX; 38cdf0e10cSrcweir 39cdf0e10cSrcweir #define SC_FILL_NONE 0 40cdf0e10cSrcweir #define SC_FILL_FILL 1 41cdf0e10cSrcweir #define SC_FILL_EMBED_LT 2 42cdf0e10cSrcweir #define SC_FILL_EMBED_RB 3 43cdf0e10cSrcweir #define SC_FILL_MATRIX 4 44cdf0e10cSrcweir 45cdf0e10cSrcweir enum ScSplitMode { SC_SPLIT_NONE = 0, SC_SPLIT_NORMAL, SC_SPLIT_FIX }; 46cdf0e10cSrcweir 47cdf0e10cSrcweir enum ScSplitPos { SC_SPLIT_TOPLEFT, SC_SPLIT_TOPRIGHT, SC_SPLIT_BOTTOMLEFT, SC_SPLIT_BOTTOMRIGHT }; 48cdf0e10cSrcweir enum ScHSplitPos { SC_SPLIT_LEFT, SC_SPLIT_RIGHT }; 49cdf0e10cSrcweir enum ScVSplitPos { SC_SPLIT_TOP, SC_SPLIT_BOTTOM }; 50cdf0e10cSrcweir 51cdf0e10cSrcweir inline ScHSplitPos WhichH( ScSplitPos ePos ); 52cdf0e10cSrcweir inline ScVSplitPos WhichV( ScSplitPos ePos ); 53cdf0e10cSrcweir inline ScSplitPos Which( ScHSplitPos eHPos ); 54cdf0e10cSrcweir inline ScSplitPos Which( ScVSplitPos eVPos ); 55cdf0e10cSrcweir 56cdf0e10cSrcweir // Bildschirmverhalten bei Cursorbewegungen: 57cdf0e10cSrcweir enum ScFollowMode { SC_FOLLOW_NONE, SC_FOLLOW_LINE, SC_FOLLOW_FIX, SC_FOLLOW_JUMP }; 58cdf0e10cSrcweir 59cdf0e10cSrcweir // Mausmodi um Bereiche zu selektieren 60cdf0e10cSrcweir enum ScRefType { SC_REFTYPE_NONE, SC_REFTYPE_REF, SC_REFTYPE_FILL, 61cdf0e10cSrcweir SC_REFTYPE_EMBED_LT, SC_REFTYPE_EMBED_RB }; 62cdf0e10cSrcweir 63cdf0e10cSrcweir /** States GetSimpleArea() returns for the underlying selection marks, so the 64cdf0e10cSrcweir caller can react if the result is not of type SC_MARK_SIMPLE. */ 65cdf0e10cSrcweir enum ScMarkType 66cdf0e10cSrcweir { 67cdf0e10cSrcweir SC_MARK_NONE = 0, // Not returned by GetSimpleArea(), used internally. 68cdf0e10cSrcweir // Nothing marked always results in the 69cdf0e10cSrcweir // current cursor position being selected and a simple mark. 70cdf0e10cSrcweir SC_MARK_SIMPLE = 1, // Simple rectangular area marked, no filtered rows. 71cdf0e10cSrcweir SC_MARK_FILTERED = 2, // At least one mark contains filtered rows. 72cdf0e10cSrcweir SC_MARK_SIMPLE_FILTERED = // Simple rectangular area marked containing filtered rows. 73cdf0e10cSrcweir SC_MARK_SIMPLE | 74cdf0e10cSrcweir SC_MARK_FILTERED, // 3 75cdf0e10cSrcweir SC_MARK_MULTI = 4 // Multiple selection marks. 76cdf0e10cSrcweir /* TODO: if filtered multi-selection was implemented, this would be the value to use. */ 77cdf0e10cSrcweir #if 0 78cdf0e10cSrcweir , 79cdf0e10cSrcweir SC_MARK_MULTI_FILTERED = // Multiple selection marks containing filtered rows. 80cdf0e10cSrcweir SC_MARK_MULTI | 81cdf0e10cSrcweir SC_MARK_FILTERED // 6 82cdf0e10cSrcweir #endif 83cdf0e10cSrcweir }; 84cdf0e10cSrcweir 85cdf0e10cSrcweir class ScDocShell; 86cdf0e10cSrcweir class ScDocument; 87cdf0e10cSrcweir class ScDBFunc; 88cdf0e10cSrcweir class ScTabViewShell; 89cdf0e10cSrcweir class ScDrawView; 90cdf0e10cSrcweir class ScEditEngineDefaulter; 91cdf0e10cSrcweir class EditView; 92cdf0e10cSrcweir class EditStatus; 93cdf0e10cSrcweir class Outliner; 94cdf0e10cSrcweir class Window; 95cdf0e10cSrcweir class SfxObjectShell; 96cdf0e10cSrcweir class SfxBindings; 97cdf0e10cSrcweir class SfxDispatcher; 98cdf0e10cSrcweir class ScPatternAttr; 99cdf0e10cSrcweir class ScRangeListRef; 100cdf0e10cSrcweir class ScExtDocOptions; 101cdf0e10cSrcweir class ScViewData; 102cdf0e10cSrcweir 103cdf0e10cSrcweir //-------------------------------------------------------------------------- 104cdf0e10cSrcweir 105cdf0e10cSrcweir class ScViewDataTable // Daten pro Tabelle 106cdf0e10cSrcweir { 107cdf0e10cSrcweir friend class ScViewData; 108cdf0e10cSrcweir private: 109cdf0e10cSrcweir SvxZoomType eZoomType; // selected zoom type (normal view) 110cdf0e10cSrcweir Fraction aZoomX; // selected zoom X 111cdf0e10cSrcweir Fraction aZoomY; // selected zoom Y (displayed) 112cdf0e10cSrcweir Fraction aPageZoomX; // zoom in page break preview mode 113cdf0e10cSrcweir Fraction aPageZoomY; 114cdf0e10cSrcweir 115cdf0e10cSrcweir long nTPosX[2]; // MapMode - Offset (Twips) 116cdf0e10cSrcweir long nTPosY[2]; 117cdf0e10cSrcweir long nMPosX[2]; // MapMode - Offset (1/100 mm) 118cdf0e10cSrcweir long nMPosY[2]; 119cdf0e10cSrcweir long nPixPosX[2]; // Offset in Pixeln 120cdf0e10cSrcweir long nPixPosY[2]; 121cdf0e10cSrcweir long nHSplitPos; 122cdf0e10cSrcweir long nVSplitPos; 123cdf0e10cSrcweir 124cdf0e10cSrcweir ScSplitMode eHSplitMode; 125cdf0e10cSrcweir ScSplitMode eVSplitMode; 126cdf0e10cSrcweir ScSplitPos eWhichActive; 127cdf0e10cSrcweir 128cdf0e10cSrcweir SCCOL nFixPosX; // Zellposition des Splitters beim Fixieren 129cdf0e10cSrcweir SCROW nFixPosY; 130cdf0e10cSrcweir 131cdf0e10cSrcweir SCCOL nCurX; 132cdf0e10cSrcweir SCROW nCurY; 133cdf0e10cSrcweir SCCOL nOldCurX; 134cdf0e10cSrcweir SCROW nOldCurY; 135cdf0e10cSrcweir SCCOL nPosX[2]; 136cdf0e10cSrcweir SCROW nPosY[2]; 137cdf0e10cSrcweir 138cdf0e10cSrcweir sal_Bool bOldCurValid; // "virtuelle" Cursorpos. bei zusammengefassten 139cdf0e10cSrcweir 140cdf0e10cSrcweir ScViewDataTable(); 141cdf0e10cSrcweir ~ScViewDataTable(); 142cdf0e10cSrcweir 143cdf0e10cSrcweir void WriteUserDataSequence( 144cdf0e10cSrcweir com::sun::star::uno::Sequence <com::sun::star::beans::PropertyValue>& rSettings, 145cdf0e10cSrcweir const ScViewData& rViewData, SCTAB nTab ); 146cdf0e10cSrcweir 147cdf0e10cSrcweir void ReadUserDataSequence( 148cdf0e10cSrcweir const com::sun::star::uno::Sequence <com::sun::star::beans::PropertyValue>& rSettings, 149cdf0e10cSrcweir ScViewData& rViewData, SCTAB nTab, bool& rHasZoom); 150cdf0e10cSrcweir }; 151cdf0e10cSrcweir 152cdf0e10cSrcweir // --------------------------------------------------------------------------- 153cdf0e10cSrcweir 154cdf0e10cSrcweir class SC_DLLPUBLIC ScViewData 155cdf0e10cSrcweir { 156cdf0e10cSrcweir private: 157cdf0e10cSrcweir double nPPTX, nPPTY; // Scaling-Faktoren 158cdf0e10cSrcweir 159cdf0e10cSrcweir ScViewDataTable* pTabData[MAXTABCOUNT]; 160cdf0e10cSrcweir ScViewDataTable* pThisTab; // Daten der angezeigten Tabelle 161cdf0e10cSrcweir ScDocShell* pDocShell; 162cdf0e10cSrcweir ScDocument* pDoc; 163cdf0e10cSrcweir ScDBFunc* pView; 164cdf0e10cSrcweir ScTabViewShell* pViewShell; 165cdf0e10cSrcweir EditView* pEditView[4]; // gehoert dem Fenster 166cdf0e10cSrcweir ScViewOptions* pOptions; 167cdf0e10cSrcweir EditView* pSpellingView; 168cdf0e10cSrcweir 169cdf0e10cSrcweir ScMarkData aMarkData; 170cdf0e10cSrcweir 171cdf0e10cSrcweir long nEditMargin; 172cdf0e10cSrcweir 173cdf0e10cSrcweir Size aScenButSize; // Groesse eines Szenario-Buttons 174cdf0e10cSrcweir 175cdf0e10cSrcweir Size aScrSize; 176cdf0e10cSrcweir MapMode aLogicMode; // skalierter 1/100mm-MapMode 177cdf0e10cSrcweir 178cdf0e10cSrcweir SvxZoomType eDefZoomType; // default zoom and type for missing TabData 179cdf0e10cSrcweir Fraction aDefZoomX; 180cdf0e10cSrcweir Fraction aDefZoomY; 181cdf0e10cSrcweir Fraction aDefPageZoomX; // zoom in page break preview mode 182cdf0e10cSrcweir Fraction aDefPageZoomY; 183cdf0e10cSrcweir 184cdf0e10cSrcweir ScRefType eRefType; 185cdf0e10cSrcweir 186cdf0e10cSrcweir SCTAB nTabNo; // angezeigte Tabelle 187cdf0e10cSrcweir SCTAB nRefTabNo; // Tabelle auf die sich RefInput bezieht 188cdf0e10cSrcweir SCCOL nRefStartX; 189cdf0e10cSrcweir SCROW nRefStartY; 190cdf0e10cSrcweir SCTAB nRefStartZ; 191cdf0e10cSrcweir SCCOL nRefEndX; 192cdf0e10cSrcweir SCROW nRefEndY; 193cdf0e10cSrcweir SCTAB nRefEndZ; 194cdf0e10cSrcweir SCCOL nFillStartX; // Fill-Cursor 195cdf0e10cSrcweir SCROW nFillStartY; 196cdf0e10cSrcweir SCCOL nFillEndX; 197cdf0e10cSrcweir SCROW nFillEndY; 198cdf0e10cSrcweir SCCOL nEditCol; // Position dazu 199cdf0e10cSrcweir SCROW nEditRow; 200cdf0e10cSrcweir SCCOL nEditStartCol; 201cdf0e10cSrcweir SCCOL nEditEndCol; // Ende der Edit-View 202cdf0e10cSrcweir SCROW nEditEndRow; 203cdf0e10cSrcweir SCCOL nTabStartCol; // fuer Enter nach Tab 204cdf0e10cSrcweir ScRange aDelRange; // fuer AutoFill-Loeschen 205cdf0e10cSrcweir 206cdf0e10cSrcweir ScSplitPos eEditActivePart; // the part that was active when edit mode was started 207cdf0e10cSrcweir sal_Bool bEditActive[4]; // aktiv? 208cdf0e10cSrcweir sal_Bool bActive; // aktives Fenster ? 209cdf0e10cSrcweir sal_Bool bIsRefMode; // Referenzeingabe 210cdf0e10cSrcweir sal_Bool bDelMarkValid; // nur gueltig bei SC_REFTYPE_FILL 211cdf0e10cSrcweir sal_uInt8 nFillMode; // Modus 212cdf0e10cSrcweir sal_Bool bPagebreak; // Seitenumbruch-Vorschaumodus 213cdf0e10cSrcweir 214cdf0e10cSrcweir sal_Bool bSelCtrlMouseClick; // special selection handling for ctrl-mouse-click 215cdf0e10cSrcweir 216cdf0e10cSrcweir SC_DLLPRIVATE DECL_LINK (EmptyEditHdl, EditStatus*); 217cdf0e10cSrcweir SC_DLLPRIVATE DECL_LINK (EditEngineHdl, EditStatus*); 218cdf0e10cSrcweir 219cdf0e10cSrcweir SC_DLLPRIVATE void CalcPPT(); 220cdf0e10cSrcweir SC_DLLPRIVATE void CreateTabData( SCTAB nNewTab ); 221cdf0e10cSrcweir SC_DLLPRIVATE void CreateTabData( std::vector< SCTAB >& rvTabs ); 222cdf0e10cSrcweir SC_DLLPRIVATE void CreateSelectedTabData(); 223cdf0e10cSrcweir 224cdf0e10cSrcweir public: 225cdf0e10cSrcweir ScViewData( ScDocShell* pDocSh, ScTabViewShell* pViewSh ); 226cdf0e10cSrcweir ScViewData( const ScViewData& rViewData ); 227cdf0e10cSrcweir ~ScViewData(); 228cdf0e10cSrcweir 229cdf0e10cSrcweir void InitData( ScDocument* pDocument ); 230cdf0e10cSrcweir //UNUSED2008-05 void InitFrom( const ScViewData* pRef ); 231cdf0e10cSrcweir //UNUSED2008-05 void SetDocShell( ScDocShell* pShell ); 232cdf0e10cSrcweir 233cdf0e10cSrcweir 234cdf0e10cSrcweir ScDocShell* GetDocShell() const { return pDocShell; } 235cdf0e10cSrcweir ScDBFunc* GetView() const { return pView; } 236cdf0e10cSrcweir ScTabViewShell* GetViewShell() const { return pViewShell; } 237cdf0e10cSrcweir 238cdf0e10cSrcweir SfxObjectShell* GetSfxDocShell() const; 239cdf0e10cSrcweir SfxBindings& GetBindings(); // from ViewShell's ViewFrame 240cdf0e10cSrcweir SfxDispatcher& GetDispatcher(); // from ViewShell's ViewFrame 241cdf0e10cSrcweir 242cdf0e10cSrcweir ScMarkData& GetMarkData() { return aMarkData; } 243cdf0e10cSrcweir const ScMarkData& GetMarkData() const { return aMarkData; } 244cdf0e10cSrcweir 245cdf0e10cSrcweir Window* GetDialogParent(); // von tabvwsh weitergeleitet 246cdf0e10cSrcweir Window* GetActiveWin(); // von View 247cdf0e10cSrcweir ScDrawView* GetScDrawView(); // von View 248cdf0e10cSrcweir sal_Bool IsMinimized(); // von View 249cdf0e10cSrcweir 250cdf0e10cSrcweir void UpdateInputHandler( sal_Bool bForce = sal_False, sal_Bool bStopEditing = sal_True ); 251cdf0e10cSrcweir 252cdf0e10cSrcweir void WriteUserData(String& rData); 253cdf0e10cSrcweir void ReadUserData(const String& rData); 254cdf0e10cSrcweir void WriteExtOptions( ScExtDocOptions& rOpt ) const; 255cdf0e10cSrcweir void ReadExtOptions( const ScExtDocOptions& rOpt ); 256cdf0e10cSrcweir void WriteUserDataSequence(com::sun::star::uno::Sequence <com::sun::star::beans::PropertyValue>& rSettings); 257cdf0e10cSrcweir void ReadUserDataSequence(const com::sun::star::uno::Sequence <com::sun::star::beans::PropertyValue>& rSettings); 258cdf0e10cSrcweir 259cdf0e10cSrcweir ScDocument* GetDocument() const; 260cdf0e10cSrcweir 261cdf0e10cSrcweir void SetViewShell( ScTabViewShell* pViewSh ); 262cdf0e10cSrcweir 263cdf0e10cSrcweir sal_Bool IsActive() const { return bActive; } 264cdf0e10cSrcweir void Activate(sal_Bool bActivate) { bActive = bActivate; } 265cdf0e10cSrcweir 266cdf0e10cSrcweir void UpdateThis(); 267cdf0e10cSrcweir 268cdf0e10cSrcweir void InsertTab( SCTAB nTab ); 269cdf0e10cSrcweir void DeleteTab( SCTAB nTab ); 270cdf0e10cSrcweir void CopyTab( SCTAB nSrcTab, SCTAB nDestTab ); 271cdf0e10cSrcweir void MoveTab( SCTAB nSrcTab, SCTAB nDestTab ); 272cdf0e10cSrcweir 273cdf0e10cSrcweir SCTAB GetRefTabNo() const { return nRefTabNo; } 274cdf0e10cSrcweir void SetRefTabNo( SCTAB nNewTab ) { nRefTabNo = nNewTab; } 275cdf0e10cSrcweir 276cdf0e10cSrcweir SCTAB GetTabNo() const { return nTabNo; } 277cdf0e10cSrcweir ScSplitPos GetActivePart() const { return pThisTab->eWhichActive; } 278cdf0e10cSrcweir SCCOL GetPosX( ScHSplitPos eWhich ) const { return pThisTab->nPosX[eWhich]; } 279cdf0e10cSrcweir SCROW GetPosY( ScVSplitPos eWhich ) const { return pThisTab->nPosY[eWhich]; } 280cdf0e10cSrcweir SCCOL GetCurX() const { return pThisTab->nCurX; } 281cdf0e10cSrcweir SCROW GetCurY() const { return pThisTab->nCurY; } 282cdf0e10cSrcweir sal_Bool HasOldCursor() const { return pThisTab->bOldCurValid; } 283cdf0e10cSrcweir SCCOL GetOldCurX() const; 284cdf0e10cSrcweir SCROW GetOldCurY() const; 285cdf0e10cSrcweir ScSplitMode GetHSplitMode() const { return pThisTab->eHSplitMode; } 286cdf0e10cSrcweir ScSplitMode GetVSplitMode() const { return pThisTab->eVSplitMode; } 287cdf0e10cSrcweir long GetHSplitPos() const { return pThisTab->nHSplitPos; } 288cdf0e10cSrcweir long GetVSplitPos() const { return pThisTab->nVSplitPos; } 289cdf0e10cSrcweir SCCOL GetFixPosX() const { return pThisTab->nFixPosX; } 290cdf0e10cSrcweir SCROW GetFixPosY() const { return pThisTab->nFixPosY; } 291cdf0e10cSrcweir sal_Bool IsPagebreakMode() const { return bPagebreak; } 292cdf0e10cSrcweir 293cdf0e10cSrcweir void SetPosX( ScHSplitPos eWhich, SCCOL nNewPosX ); 294cdf0e10cSrcweir void SetPosY( ScVSplitPos eWhich, SCROW nNewPosY ); 295cdf0e10cSrcweir void SetCurX( SCCOL nNewCurX ) { pThisTab->nCurX = nNewCurX; } 296cdf0e10cSrcweir void SetCurY( SCROW nNewCurY ) { pThisTab->nCurY = nNewCurY; } 297cdf0e10cSrcweir void SetOldCursor( SCCOL nNewX, SCROW nNewY ); 298cdf0e10cSrcweir void ResetOldCursor(); 299cdf0e10cSrcweir void SetHSplitMode( ScSplitMode eMode ) { pThisTab->eHSplitMode = eMode; } 300cdf0e10cSrcweir void SetVSplitMode( ScSplitMode eMode ) { pThisTab->eVSplitMode = eMode; } 301cdf0e10cSrcweir void SetHSplitPos( long nPos ) { pThisTab->nHSplitPos = nPos; } 302cdf0e10cSrcweir void SetVSplitPos( long nPos ) { pThisTab->nVSplitPos = nPos; } 303cdf0e10cSrcweir void SetFixPosX( SCCOL nPos ) { pThisTab->nFixPosX = nPos; } 304cdf0e10cSrcweir void SetFixPosY( SCROW nPos ) { pThisTab->nFixPosY = nPos; } 305cdf0e10cSrcweir void SetPagebreakMode( sal_Bool bSet ); 306cdf0e10cSrcweir 307cdf0e10cSrcweir void SetZoomType( SvxZoomType eNew, sal_Bool bAll ); 308cdf0e10cSrcweir void SetZoomType( SvxZoomType eNew, std::vector< SCTAB >& tabs ); 309cdf0e10cSrcweir void SetZoom( const Fraction& rNewX, const Fraction& rNewY, std::vector< SCTAB >& tabs ); 310cdf0e10cSrcweir void SetZoom( const Fraction& rNewX, const Fraction& rNewY, sal_Bool bAll ); 311cdf0e10cSrcweir void RefreshZoom(); 312cdf0e10cSrcweir 313cdf0e10cSrcweir void SetSelCtrlMouseClick( sal_Bool bTmp ) { bSelCtrlMouseClick = bTmp; } 314cdf0e10cSrcweir 315cdf0e10cSrcweir SvxZoomType GetZoomType() const { return pThisTab->eZoomType; } 316cdf0e10cSrcweir const Fraction& GetZoomX() const { return bPagebreak ? pThisTab->aPageZoomX : pThisTab->aZoomX; } 317cdf0e10cSrcweir const Fraction& GetZoomY() const { return bPagebreak ? pThisTab->aPageZoomY : pThisTab->aZoomY; } 318cdf0e10cSrcweir 319cdf0e10cSrcweir const MapMode& GetLogicMode( ScSplitPos eWhich ); 320cdf0e10cSrcweir const MapMode& GetLogicMode(); // Offset 0 321cdf0e10cSrcweir 322cdf0e10cSrcweir long GetTPosX( ScHSplitPos eWhich ) const { return pThisTab->nTPosX[eWhich]; } 323cdf0e10cSrcweir long GetTPosY( ScVSplitPos eWhich ) const { return pThisTab->nTPosY[eWhich]; } 324cdf0e10cSrcweir 325cdf0e10cSrcweir double GetPPTX() const { return nPPTX; } 326cdf0e10cSrcweir double GetPPTY() const { return nPPTY; } 327cdf0e10cSrcweir 328cdf0e10cSrcweir ScMarkType GetSimpleArea( SCCOL& rStartCol, SCROW& rStartRow, SCTAB& rStartTab, 329cdf0e10cSrcweir SCCOL& rEndCol, SCROW& rEndRow, SCTAB& rEndTab ) const; 330cdf0e10cSrcweir ScMarkType GetSimpleArea( ScRange& rRange ) const; 331cdf0e10cSrcweir /// May modify rNewMark using MarkToSimple(). 332cdf0e10cSrcweir ScMarkType GetSimpleArea( ScRange & rRange, ScMarkData & rNewMark ) const; 333cdf0e10cSrcweir void GetMultiArea( ScRangeListRef& rRange ) const; 334cdf0e10cSrcweir 335cdf0e10cSrcweir sal_Bool SimpleColMarked(); 336cdf0e10cSrcweir sal_Bool SimpleRowMarked(); 337cdf0e10cSrcweir 338cdf0e10cSrcweir sal_Bool IsMultiMarked(); 339cdf0e10cSrcweir 340cdf0e10cSrcweir void SetFillMode( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow ); 341cdf0e10cSrcweir void SetDragMode( SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, 342cdf0e10cSrcweir sal_uInt8 nMode ); 343cdf0e10cSrcweir void GetFillData( SCCOL& rStartCol, SCROW& rStartRow, 344cdf0e10cSrcweir SCCOL& rEndCol, SCROW& rEndRow ); 345cdf0e10cSrcweir void ResetFillMode(); 346cdf0e10cSrcweir sal_Bool IsAnyFillMode() { return nFillMode != SC_FILL_NONE; } 347cdf0e10cSrcweir sal_Bool IsFillMode() { return nFillMode == SC_FILL_FILL; } 348cdf0e10cSrcweir sal_uInt8 GetFillMode() { return nFillMode; } 349cdf0e10cSrcweir 350cdf0e10cSrcweir // TRUE: Zelle ist zusammengefasst 351cdf0e10cSrcweir sal_Bool GetMergeSizePixel( SCCOL nX, SCROW nY, long& rSizeXPix, long& rSizeYPix ); 352cdf0e10cSrcweir sal_Bool GetPosFromPixel( long nClickX, long nClickY, ScSplitPos eWhich, 353cdf0e10cSrcweir SCsCOL& rPosX, SCsROW& rPosY, 354cdf0e10cSrcweir sal_Bool bTestMerge = sal_True, sal_Bool bRepair = sal_False, 355cdf0e10cSrcweir sal_Bool bNextIfLarge = sal_True ); 356cdf0e10cSrcweir void GetMouseQuadrant( const Point& rClickPos, ScSplitPos eWhich, 357cdf0e10cSrcweir SCsCOL nPosX, SCsROW nPosY, sal_Bool& rLeft, sal_Bool& rTop ); 358cdf0e10cSrcweir 359cdf0e10cSrcweir sal_Bool IsRefMode() const { return bIsRefMode; } 360cdf0e10cSrcweir ScRefType GetRefType() const { return eRefType; } 361cdf0e10cSrcweir SCCOL GetRefStartX() const { return nRefStartX; } 362cdf0e10cSrcweir SCROW GetRefStartY() const { return nRefStartY; } 363cdf0e10cSrcweir SCTAB GetRefStartZ() const { return nRefStartZ; } 364cdf0e10cSrcweir SCCOL GetRefEndX() const { return nRefEndX; } 365cdf0e10cSrcweir SCROW GetRefEndY() const { return nRefEndY; } 366cdf0e10cSrcweir SCTAB GetRefEndZ() const { return nRefEndZ; } 367cdf0e10cSrcweir 368cdf0e10cSrcweir void SetRefMode( sal_Bool bNewMode, ScRefType eNewType ) 369cdf0e10cSrcweir { bIsRefMode = bNewMode; eRefType = eNewType; } 370cdf0e10cSrcweir 371cdf0e10cSrcweir void SetRefStart( SCCOL nNewX, SCROW nNewY, SCTAB nNewZ ) 372cdf0e10cSrcweir { nRefStartX = nNewX; nRefStartY = nNewY; nRefStartZ = nNewZ; } 373cdf0e10cSrcweir void SetRefEnd( SCCOL nNewX, SCROW nNewY, SCTAB nNewZ ) 374cdf0e10cSrcweir { nRefEndX = nNewX; nRefEndY = nNewY; nRefEndZ = nNewZ; } 375cdf0e10cSrcweir 376cdf0e10cSrcweir void ResetDelMark() { bDelMarkValid = sal_False; } 377cdf0e10cSrcweir void SetDelMark( const ScRange& rRange ) 378cdf0e10cSrcweir { aDelRange = rRange; bDelMarkValid = sal_True; } 379cdf0e10cSrcweir 380cdf0e10cSrcweir sal_Bool GetDelMark( ScRange& rRange ) const 381cdf0e10cSrcweir { rRange = aDelRange; return bDelMarkValid; } 382cdf0e10cSrcweir 383cdf0e10cSrcweir inline void GetMoveCursor( SCCOL& rCurX, SCROW& rCurY ); 384cdf0e10cSrcweir 385cdf0e10cSrcweir const ScViewOptions& GetOptions() const { return *pOptions; } 386cdf0e10cSrcweir void SetOptions( const ScViewOptions& rOpt ); 387cdf0e10cSrcweir 388cdf0e10cSrcweir sal_Bool IsGridMode () const { return pOptions->GetOption( VOPT_GRID ); } 389cdf0e10cSrcweir void SetGridMode ( sal_Bool bNewMode ) { pOptions->SetOption( VOPT_GRID, bNewMode ); } 390cdf0e10cSrcweir sal_Bool IsSyntaxMode () const { return pOptions->GetOption( VOPT_SYNTAX ); } 391cdf0e10cSrcweir void SetSyntaxMode ( sal_Bool bNewMode ) { pOptions->SetOption( VOPT_SYNTAX, bNewMode ); } 392cdf0e10cSrcweir sal_Bool IsHeaderMode () const { return pOptions->GetOption( VOPT_HEADER ); } 393cdf0e10cSrcweir void SetHeaderMode ( sal_Bool bNewMode ) { pOptions->SetOption( VOPT_HEADER, bNewMode ); } 394cdf0e10cSrcweir sal_Bool IsTabMode () const { return pOptions->GetOption( VOPT_TABCONTROLS ); } 395cdf0e10cSrcweir void SetTabMode ( sal_Bool bNewMode ) { pOptions->SetOption( VOPT_TABCONTROLS, bNewMode ); } 396cdf0e10cSrcweir sal_Bool IsVScrollMode () const { return pOptions->GetOption( VOPT_VSCROLL ); } 397cdf0e10cSrcweir void SetVScrollMode ( sal_Bool bNewMode ) { pOptions->SetOption( VOPT_VSCROLL, bNewMode ); } 398cdf0e10cSrcweir sal_Bool IsHScrollMode () const { return pOptions->GetOption( VOPT_HSCROLL ); } 399cdf0e10cSrcweir void SetHScrollMode ( sal_Bool bNewMode ) { pOptions->SetOption( VOPT_HSCROLL, bNewMode ); } 400cdf0e10cSrcweir sal_Bool IsOutlineMode () const { return pOptions->GetOption( VOPT_OUTLINER ); } 401cdf0e10cSrcweir void SetOutlineMode ( sal_Bool bNewMode ) { pOptions->SetOption( VOPT_OUTLINER, bNewMode ); } 402cdf0e10cSrcweir 403cdf0e10cSrcweir void KillEditView(); 404cdf0e10cSrcweir void ResetEditView(); 405cdf0e10cSrcweir void SetEditEngine( ScSplitPos eWhich, 406cdf0e10cSrcweir ScEditEngineDefaulter* pNewEngine, 407cdf0e10cSrcweir Window* pWin, SCCOL nNewX, SCROW nNewY ); 408cdf0e10cSrcweir void GetEditView( ScSplitPos eWhich, EditView*& rViewPtr, SCCOL& rCol, SCROW& rRow ); 409cdf0e10cSrcweir sal_Bool HasEditView( ScSplitPos eWhich ) const 410cdf0e10cSrcweir { return pEditView[eWhich] && bEditActive[eWhich]; } 411cdf0e10cSrcweir EditView* GetEditView( ScSplitPos eWhich ) const 412cdf0e10cSrcweir { return pEditView[eWhich]; } 413cdf0e10cSrcweir 414cdf0e10cSrcweir void EditGrowX(); 415cdf0e10cSrcweir void EditGrowY( sal_Bool bInitial = sal_False ); 416cdf0e10cSrcweir 417cdf0e10cSrcweir ScSplitPos GetEditActivePart() const { return eEditActivePart; } 418cdf0e10cSrcweir SCCOL GetEditViewCol() const { return nEditCol; } 419cdf0e10cSrcweir SCROW GetEditViewRow() const { return nEditRow; } 420cdf0e10cSrcweir SCCOL GetEditStartCol() const { return nEditStartCol; } 421cdf0e10cSrcweir SCROW GetEditStartRow() const { return nEditRow; } // never editing above the cell 422cdf0e10cSrcweir SCCOL GetEditEndCol() const { return nEditEndCol; } 423cdf0e10cSrcweir SCROW GetEditEndRow() const { return nEditEndRow; } 424cdf0e10cSrcweir 425cdf0e10cSrcweir Rectangle GetEditArea( ScSplitPos eWhich, SCCOL nPosX, SCROW nPosY, Window* pWin, 426cdf0e10cSrcweir const ScPatternAttr* pPattern, sal_Bool bForceToTop ); 427cdf0e10cSrcweir 428cdf0e10cSrcweir void SetTabNo( SCTAB nNewTab ); 429cdf0e10cSrcweir void SetActivePart( ScSplitPos eNewActive ); 430cdf0e10cSrcweir 431cdf0e10cSrcweir Point GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, 432cdf0e10cSrcweir sal_Bool bAllowNeg = sal_False ) const; 433cdf0e10cSrcweir Point GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScHSplitPos eWhich ) const; 434cdf0e10cSrcweir Point GetScrPos( SCCOL nWhereX, SCROW nWhereY, ScVSplitPos eWhich ) const; 435cdf0e10cSrcweir 436cdf0e10cSrcweir SCCOL CellsAtX( SCsCOL nPosX, SCsCOL nDir, ScHSplitPos eWhichX, sal_uInt16 nScrSizeY = SC_SIZE_NONE ) const; 437cdf0e10cSrcweir SCROW CellsAtY( SCsROW nPosY, SCsROW nDir, ScVSplitPos eWhichY, sal_uInt16 nScrSizeX = SC_SIZE_NONE ) const; 438cdf0e10cSrcweir 439cdf0e10cSrcweir SCCOL VisibleCellsX( ScHSplitPos eWhichX ) const; // angezeigte komplette Zellen 440cdf0e10cSrcweir SCROW VisibleCellsY( ScVSplitPos eWhichY ) const; 441cdf0e10cSrcweir SCCOL PrevCellsX( ScHSplitPos eWhichX ) const; // Zellen auf der vorgehenden Seite 442cdf0e10cSrcweir SCROW PrevCellsY( ScVSplitPos eWhichY ) const; 443cdf0e10cSrcweir //UNUSED2008-05 SCCOL LastCellsX( ScHSplitPos eWhichX ) const; // Zellen auf der letzten Seite 444cdf0e10cSrcweir //UNUSED2008-05 SCROW LastCellsY( ScVSplitPos eWhichY ) const; 445cdf0e10cSrcweir 446cdf0e10cSrcweir sal_Bool IsOle(); 447cdf0e10cSrcweir //UNUSED2008-05 void UpdateOle( ScSplitPos eWhich ); 448cdf0e10cSrcweir void SetScreen( SCCOL nCol1, SCROW nRow1, SCCOL nCol2, SCROW nRow2 ); 449cdf0e10cSrcweir void SetScreen( const Rectangle& rVisArea ); 450cdf0e10cSrcweir void SetScreenPos( const Point& rVisAreaStart ); 451cdf0e10cSrcweir 452cdf0e10cSrcweir void UpdateScreenZoom( const Fraction& rNewX, const Fraction& rNewY ); 453cdf0e10cSrcweir 454cdf0e10cSrcweir Size GetScrSize() const { return aScrSize; } 455cdf0e10cSrcweir 456cdf0e10cSrcweir void RecalcPixPos(); 457cdf0e10cSrcweir Point GetPixPos( ScSplitPos eWhich ) const 458cdf0e10cSrcweir { return Point( pThisTab->nPixPosX[WhichH(eWhich)], 459cdf0e10cSrcweir pThisTab->nPixPosY[WhichV(eWhich)] ); } 460cdf0e10cSrcweir void SetSpellingView( EditView* pSpView) { pSpellingView = pSpView; } 461cdf0e10cSrcweir EditView* GetSpellingView() const { return pSpellingView; } 462cdf0e10cSrcweir 463cdf0e10cSrcweir void UpdateOutlinerFlags( Outliner& rOutl ) const; 464cdf0e10cSrcweir 465cdf0e10cSrcweir Point GetMousePosPixel(); 466cdf0e10cSrcweir 467cdf0e10cSrcweir sal_Bool UpdateFixX(SCTAB nTab = MAXTAB+1); 468cdf0e10cSrcweir sal_Bool UpdateFixY(SCTAB nTab = MAXTAB+1); 469cdf0e10cSrcweir 470cdf0e10cSrcweir SCCOL GetTabStartCol() const { return nTabStartCol; } 471cdf0e10cSrcweir void SetTabStartCol(SCCOL nNew) { nTabStartCol = nNew; } 472cdf0e10cSrcweir 473cdf0e10cSrcweir ScAddress GetCurPos() const; 474cdf0e10cSrcweir 475cdf0e10cSrcweir const Size& GetScenButSize() const { return aScenButSize; } 476cdf0e10cSrcweir void SetScenButSize(const Size& rNew) { aScenButSize = rNew; } 477cdf0e10cSrcweir 478cdf0e10cSrcweir sal_Bool IsSelCtrlMouseClick() { return bSelCtrlMouseClick; } 479cdf0e10cSrcweir 480cdf0e10cSrcweir static inline long ToPixel( sal_uInt16 nTwips, double nFactor ); 481cdf0e10cSrcweir 482cdf0e10cSrcweir /** while (rScrY <= nEndPixels && rPosY <= nEndRow) add pixels of row 483cdf0e10cSrcweir heights converted with nPPTY to rScrY, optimized for row height 484cdf0e10cSrcweir segments. Upon return rPosY is the last row evaluated <= nEndRow, rScrY 485cdf0e10cSrcweir may be > nEndPixels! 486cdf0e10cSrcweir */ 487cdf0e10cSrcweir static void AddPixelsWhile( long & rScrY, long nEndPixels, 488cdf0e10cSrcweir SCROW & rPosY, SCROW nEndRow, double nPPTY, 489cdf0e10cSrcweir const ScDocument * pDoc, SCTAB nTabNo ); 490cdf0e10cSrcweir 491cdf0e10cSrcweir /** while (rScrY <= nEndPixels && rPosY >= nStartRow) add pixels of row 492cdf0e10cSrcweir heights converted with nPPTY to rScrY, optimized for row height 493cdf0e10cSrcweir segments. Upon return rPosY is the last row evaluated >= nStartRow, 494cdf0e10cSrcweir rScrY may be > nEndPixels! 495cdf0e10cSrcweir */ 496cdf0e10cSrcweir static void AddPixelsWhileBackward( long & rScrY, long nEndPixels, 497cdf0e10cSrcweir SCROW & rPosY, SCROW nStartRow, double nPPTY, 498cdf0e10cSrcweir const ScDocument * pDoc, SCTAB nTabNo ); 499cdf0e10cSrcweir }; 500cdf0e10cSrcweir 501cdf0e10cSrcweir 502cdf0e10cSrcweir // --------------------------------------------------------------------------- 503cdf0e10cSrcweir 504cdf0e10cSrcweir inline long ScViewData::ToPixel( sal_uInt16 nTwips, double nFactor ) 505cdf0e10cSrcweir { 506cdf0e10cSrcweir long nRet = (long)( nTwips * nFactor ); 507cdf0e10cSrcweir if ( !nRet && nTwips ) 508cdf0e10cSrcweir nRet = 1; 509cdf0e10cSrcweir return nRet; 510cdf0e10cSrcweir } 511cdf0e10cSrcweir 512cdf0e10cSrcweir inline void ScViewData::GetMoveCursor( SCCOL& rCurX, SCROW& rCurY ) 513cdf0e10cSrcweir { 514cdf0e10cSrcweir if ( bIsRefMode ) 515cdf0e10cSrcweir { 516cdf0e10cSrcweir rCurX = nRefEndX; 517cdf0e10cSrcweir rCurY = nRefEndY; 518cdf0e10cSrcweir } 519cdf0e10cSrcweir else 520cdf0e10cSrcweir { 521cdf0e10cSrcweir rCurX = GetCurX(); 522cdf0e10cSrcweir rCurY = GetCurY(); 523cdf0e10cSrcweir } 524cdf0e10cSrcweir } 525cdf0e10cSrcweir 526cdf0e10cSrcweir inline ScHSplitPos WhichH( ScSplitPos ePos ) 527cdf0e10cSrcweir { 528cdf0e10cSrcweir return (ePos==SC_SPLIT_TOPLEFT || ePos==SC_SPLIT_BOTTOMLEFT) ? 529cdf0e10cSrcweir SC_SPLIT_LEFT : SC_SPLIT_RIGHT; 530cdf0e10cSrcweir } 531cdf0e10cSrcweir 532cdf0e10cSrcweir inline ScVSplitPos WhichV( ScSplitPos ePos ) 533cdf0e10cSrcweir { 534cdf0e10cSrcweir return (ePos==SC_SPLIT_TOPLEFT || ePos==SC_SPLIT_TOPRIGHT) ? 535cdf0e10cSrcweir SC_SPLIT_TOP : SC_SPLIT_BOTTOM; 536cdf0e10cSrcweir } 537cdf0e10cSrcweir 538cdf0e10cSrcweir inline ScSplitPos Which( ScHSplitPos eHPos ) 539cdf0e10cSrcweir { 540cdf0e10cSrcweir return (eHPos==SC_SPLIT_LEFT) ? 541cdf0e10cSrcweir SC_SPLIT_BOTTOMLEFT : SC_SPLIT_BOTTOMRIGHT; 542cdf0e10cSrcweir } 543cdf0e10cSrcweir 544cdf0e10cSrcweir inline ScSplitPos Which( ScVSplitPos eVPos ) 545cdf0e10cSrcweir { 546cdf0e10cSrcweir return (eVPos==SC_SPLIT_TOP) ? 547cdf0e10cSrcweir SC_SPLIT_TOPLEFT : SC_SPLIT_BOTTOMLEFT; 548cdf0e10cSrcweir } 549cdf0e10cSrcweir 550cdf0e10cSrcweir 551cdf0e10cSrcweir 552cdf0e10cSrcweir #endif 553cdf0e10cSrcweir 554