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