34#include <document.hxx>
45#include <drawview.hxx>
53#include <osl/diagnose.h>
55#include <boost/property_tree/ptree.hpp>
56#include <boost/property_tree/json_parser.hpp>
58#include <com/sun/star/sheet/DataPilotFieldOrientation.hpp>
64#define SPLIT_MARGIN 30
65#define SPLIT_HANDLE_SIZE 5
70#define SC_SCROLLBAR_MIN 30
71#define SC_TABBAR_MIN 6
97 Window::Paint(rRenderContext, rRect);
110 Window::StateChanged(
nType );
119 Window::DataChanged( rDCEvt );
141 bool bControl = rMEvt.
IsMod1();
148bool lcl_HasColOutline(
const ScViewData& rViewData )
160bool lcl_HasRowOutline(
const ScViewData& rViewData )
175 pFrameWin( pParent ),
176 aViewData( rDocSh, pViewShell ),
177 aFunctionSet( &aViewData ),
178 aHdrFunc( &aViewData ),
185 aScrollTimer(
"ScTabView aScrollTimer"),
186 pTimerWindow( nullptr ),
187 aExtraEditViewManager( pViewShell, pGridWin ),
188 nTipVisible( nullptr ),
193 nBlockStartXOrig( 0 ),
196 nBlockStartYOrig( 0 ),
202 mfPendingTabBarWidth( -1.0 ),
203 mnLOKStartHeaderRow( -2 ),
204 mnLOKEndHeaderRow( -1 ),
205 mnLOKStartHeaderCol( -2 ),
206 mnLOKEndHeaderCol( -1 ),
208 bInUpdateHeader( false ),
209 bInActivatePart( false ),
210 bInZoomUpdate( false ),
211 bMoveIsShift( false ),
212 bDrawSelMode( false ),
213 bLockPaintBrush( false ),
218 mbInlineWithScrollbar( false )
253 pTimerWindow->MouseMove( aTimerMEvt );
261 Point aNewPos = rPos;
264 aNewPos.
setX( nTotalWidth - rPos.
X() - rSize.
Width() );
286 nTotalWidth += 2*rOffset.
X();
293 bool bHOutline = bOutlMode && lcl_HasColOutline(
aViewData);
294 bool bVOutline = bOutlMode && lcl_HasRowOutline(
aViewData);
297 bHScroll = bVScroll = bTabControl = bHeaders = bHOutline = bVOutline =
false;
315 float fScaleFactor =
pFrameWin->GetDPIScaleFactor();
331 MapMode aPtMapMode(MapUnit::MapPoint);
332 aFontSize =
pFrameWin->LogicToPixel(aFontSize, aPtMapMode);
358 if (bHScroll || bVScroll)
363 nBarX = nScrollBarSize;
371 nBarY += nScrollBarSize;
385 nSizeSp = nSplitSizeX;
386 nSizeLt = nSizeX - nSizeSp;
389 nSizeSp = nSplitSizeX;
397 nSizeRt = nSizeX - nSizeLt - nSizeSp;
435 Point aTabPoint(nPosX, nPosY + nSizeY);
441 Size aHScrollLeftSize(nSizeLt, nBarY);
444 Point aHSplitterPoint(nPosX +
nTabSize + nSizeLt, nPosY + nSizeY);
445 Size aHSplitterSize(nSizeSp, nBarY);
448 Point aHScrollRightPoint(nPosX +
nTabSize + nSizeLt + nSizeSp, nPosY + nSizeY);
449 Size aHScrollRightSize(nSizeRt, nBarY);
454 Point aTabPoint(nPosX, nPosY + nSizeY + nScrollBarSize);
455 Size aTabSize(nSizeX, nTabHeight);
459 Point aHScrollLeftPoint(nPosX, nPosY + nSizeY);
460 Size aHScrollLeftSize(nSizeLt, nScrollBarSize);
463 Point aHSplitterPoint(nPosX + nSizeLt, nPosY + nSizeY);
464 Size aHSplitterSize(nSizeSp, nScrollBarSize);
467 Point aHScrollRightPoint(nPosX + nSizeLt + nSizeSp, nPosY + nSizeY);
468 Size aHScrollRightSize(nSizeRt, nScrollBarSize);
484 nSizeSp = nSplitSizeY;
488 nSizeSp = nSplitSizeY;
495 nSizeDn = nSizeY - nSizeUp - nSizeSp;
498 Size(nBarX, nSizeUp), nTotalWidth, bLayoutRTL );
500 Size( nBarX, nSizeSp ), nTotalWidth, bLayoutRTL );
502 nPosY + nSizeUp + nSizeSp),
503 Size(nBarX, nSizeDn), nTotalWidth, bLayoutRTL );
517 if (bTabControl && ! bHScroll )
585 nSplitHeight -=
pTabControl->GetSizePixel().Height();
589 Point(nSplitPosX, nOutPosY),
590 Size(nSplitSizeX, nSplitHeight - nTabHeight), nTotalWidth, bLayoutRTL);
591 nLeftSize = nSplitPosX - nPosX;
592 nSplitPosX += nSplitSizeX;
593 nRightSize = nSizeX - nLeftSize - nSplitSizeX;
602 Point( nOutPosX, nSplitPosY ),
Size( nSplitWidth, nSplitSizeY ), nTotalWidth, bLayoutRTL );
603 nTopSize = nSplitPosY - nPosY;
604 nSplitPosY += nSplitSizeY;
605 nBottomSize = nSizeY - nTopSize - nSplitSizeY;
616 Point(nPosX-nBarX,nOutPosY),
Size(nLeftSize+nBarX,nOutlineY), nTotalWidth, bLayoutRTL );
622 Point(nSplitPosX,nOutPosY),
Size(nRightSize,nOutlineY), nTotalWidth, bLayoutRTL );
633 Point(nOutPosX,nPosY-nBarY),
Size(nOutlineX,nTopSize+nBarY), nTotalWidth, bLayoutRTL );
636 Point(nOutPosX,nSplitPosY),
Size(nOutlineX,nBottomSize), nTotalWidth, bLayoutRTL );
643 Point(nOutPosX,nSplitPosY-nBarY),
Size(nOutlineX,nBottomSize+nBarY), nTotalWidth, bLayoutRTL );
646 if (bHOutline && bVOutline)
657 Point(nPosX,nPosY-nBarY),
Size(nLeftSize,nBarY), nTotalWidth, bLayoutRTL );
660 Point(nSplitPosX,nPosY-nBarY),
Size(nRightSize,nBarY), nTotalWidth, bLayoutRTL );
664 Point(nPosX-nBarX,nPosY),
Size(nBarX,nTopSize), nTotalWidth, bLayoutRTL );
666 Point(nPosX-nBarX,nSplitPosY),
Size(nBarX,nBottomSize), nTotalWidth, bLayoutRTL );
684 tools::Long nInnerPosX = bLayoutRTL ? ( nTotalWidth - nPosX - nLeftSize ) : nPosX;
690 Point(nPosX,nSplitPosY),
Size(nLeftSize,nBottomSize), nTotalWidth, bLayoutRTL );
693 Point(nSplitPosX,nSplitPosY),
Size(nRightSize,nBottomSize), nTotalWidth, bLayoutRTL );
696 Point(nPosX,nPosY),
Size(nLeftSize,nTopSize), nTotalWidth, bLayoutRTL );
699 Point(nSplitPosX,nPosY),
Size(nRightSize,nTopSize), nTotalWidth, bLayoutRTL );
733 sal_uInt16 nNewZoom =
CalcZoom( eZoomType,
static_cast<sal_uInt16
>(nOldPercent) );
736 if ( aNew != rOldX || aNew != rOldY )
752 bool bResize =
false;
792 bool bHOutline = bOutlMode && lcl_HasColOutline(
aViewData);
793 bool bVOutline = bOutlMode && lcl_HasRowOutline(
aViewData);
817 ::std::swap( rBorder.
Left(), rBorder.
Right() );
822 if (!aViewData.IsHScrollMode())
830 if( pTabControl->IsEffectiveRTL() )
831 nMax = pFrameWin->GetSizePixel().Width() - nMax;
833 if (nSize>nMax) nSize = nMax;
836 if ( nSize != pTabControl->GetSizePixel().Width() )
838 pTabControl->SetSizePixel(
Size( nSize,
839 pTabControl->GetSizePixel().Height() ) );
848 if ( aSize.
Width() != nNewWidth )
857 if( (0.0 <= fRelTabBarWidth) && (fRelTabBarWidth <= 1.0) )
889 pWin->SetPointer( nPointer );
902 for (sal_uInt16
i=0;
i<4;
i++)
917 bool bHOutline = bOutlMode && lcl_HasColOutline(
aViewData);
918 bool bVOutline = bOutlMode && lcl_HasRowOutline(
aViewData);
943 bool bSyncZoom =
SC_MOD()->GetAppOptions().GetSynchronizeZoom();
946 SetZoom(aFract, aFract, bSyncZoom);
962 if (
pData &&
pData->GetMode() == CommandWheelMode::ZOOM)
970 sal_uInt16 nOld =
static_cast<tools::Long>( rOldY * 100 );
972 if (
pData->GetDelta() < 0 )
991 bDone =
pGridWin[
ePos]->HandleScrollCommand( rCEvt, pHScroll, pVScroll );
1007 if (
pData->meEventType == GestureEventZoomType::Begin)
1013 if (
pData->meEventType == GestureEventZoomType::Update)
1024 sal_uInt16 nOld =
static_cast<tools::Long>(rOldY * 100);
1025 sal_uInt16 nNew = nOld + nZoomChangePercent;
1040 ScrollHdl(aHScrollLeft.get());
1045 ScrollHdl(aHScrollRight.get());
1050 ScrollHdl(aVScrollTop.get());
1055 ScrollHdl(aVScrollBottom.get());
1082 if (
eType == ScrollType::Drag )
1095 Size aSize = pScroll->GetSizePixel();
1103 Point aMousePos = pScroll->GetPointerPosPixel();
1104 if( pScroll->IsRTLEnabled() != pScroll->GetParent()->IsRTLEnabled() )
1105 aMousePos.
setX( aSize.
Width() - aMousePos.
X() - 1 );
1106 aMousePos = pScroll->OutputToNormalizedScreenPixel( aMousePos );
1109 Point aPos = pScroll->OutputToNormalizedScreenPixel(
Point() );
1124 aHelpStr =
ScResId(STR_COLUMN) +
1129 nAlign = QuickHelpFlags::Bottom|QuickHelpFlags::Center;
1134 " " + OUString::number(nScrollPos + 1);
1137 aRect.
SetLeft( bLayoutRTL ? (aPos.
X() + aSize.
Width() + 8) : (aPos.
X() - 8) );
1138 aRect.
SetTop( aMousePos.
Y() );
1139 nAlign = (bLayoutRTL ? QuickHelpFlags::Left : QuickHelpFlags::Right) | QuickHelpFlags::VCenter;
1153 case ScrollType::LineUp:
1156 case ScrollType::LineDown:
1159 case ScrollType::PageUp:
1164 if (nDelta==0) nDelta=-1;
1166 case ScrollType::PageDown:
1171 if (nDelta==0) nDelta=1;
1183 nDelta = nScrollPos - nViewPos;
1192 if (
eType == ScrollType::Drag )
1196 if (nDelta<0) nDelta=0;
1200 if (nDelta>0) nDelta=0;
1213 bool bUpdate = (
eType != ScrollType::Drag );
1225 SCCOL nNewX = nOldX +
static_cast<SCCOL>(nDeltaX);
1231 if ( nNewX > rDoc.
MaxCol() )
1233 nDeltaX -= nNewX - rDoc.
MaxCol();
1237 SCCOL nDir = ( nDeltaX > 0 ) ? 1 : -1;
1240 nNewX+nDir >= 0 && nNewX+nDir <= rDoc.
MaxCol() )
1241 nNewX = sal::static_int_cast<SCCOL>( nNewX + nDir );
1261 if ( nNewX >= 0 && nNewX <= rDoc.
MaxCol() && nDeltaX )
1263 SCCOL nTrackX = std::max( nOldX, nNewX );
1270 pColBar[eWhich]->PaintImmediately();
1294 if (nDeltaX==1 || nDeltaX==-1)
1308 SCROW nNewY = nOldY +
static_cast<SCROW>(nDeltaY);
1314 if ( nNewY > rDoc.
MaxRow() )
1316 nDeltaY -= nNewY - rDoc.
MaxRow();
1320 SCROW nDir = ( nDeltaY > 0 ) ? 1 : -1;
1323 nNewY+nDir >= 0 && nNewY+nDir <= rDoc.
MaxRow() )
1344 if ( nNewY >= 0 && nNewY <= rDoc.
MaxRow() && nDeltaY )
1346 SCROW nTrackY = std::max( nOldY, nNewY );
1350 SCROW nUNew = nNewY;
1354 pRowBar[eWhich]->PaintImmediately();
1378 if (nDeltaY==1 || nDeltaY==-1)
1409 while ( nVis > 0 && rDoc.
GetRowHeight( nVis, nTab, &startRow,
nullptr ) == 0 )
1410 nVis = std::max<SCROW>( startRow - 1, 0 );
1432 if (nEndPos > rDoc.
MaxRow())
1443 if (nTopEnd > rDoc.
MaxRow())
1446 if ( nTopEnd > nEndPos )
1459 tools::Long nWidth = nBig - ( 10000 - nEndPos ) * nDiff / 10000;
1480 OSL_ENSURE(pWin || !bShow,
"window is not present");
1491 bool bHOutline = bOutlMode && lcl_HasColOutline(
aViewData);
1492 bool bVOutline = bOutlMode && lcl_HasRowOutline(
aViewData);
1499 bHScrollMode = bVScrollMode = bTabMode = bHeader = bHOutline = bVOutline =
false;
1567 bool bChanged =
false;
1570 if (!pWin || !pWin->IsVisible())
1573 if (pWin->UpdateVisibleRange())
1584 if ( pSplitter == pHSplitter )
1585 DoHSplit( pHSplitter->GetSplitPosPixel() );
1587 DoVSplit( pVSplitter->GetSplitPosPixel() );
1590 FreezeSplitters(
true );
1592 DoResize( aBorderPos, aFrameSize );
1602 nSplitPos =
pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
1616 if ( nSplitPos < nMinPos || nSplitPos > nMaxPos )
1621 if ( aNewMode == aOldMode )
1637 if ( nLeftWidth < 0 ) nLeftWidth = 0;
1639 static_cast<sal_uInt16
>(nLeftWidth) );
1641 if ( nNewDelta > rDoc.
MaxCol() )
1642 nNewDelta = rDoc.
MaxCol();
1656 pWin->SetMapMode( pWin->GetDrawMapMode() );
1680 if ( nSplitPos < nMinPos || nSplitPos > nMaxPos )
1685 if ( aNewMode == aOldMode )
1709 if ( nTopHeight < 0 ) nTopHeight = 0;
1711 static_cast<sal_uInt16
>(nTopHeight) );
1713 if ( nNewDelta > rDoc.
MaxRow() )
1714 nNewDelta = rDoc.
MaxRow();
1728 pWin->SetMapMode( pWin->GetDrawMapMode() );
1751 return Point(nPosX,nPosY);
1769 OSL_ENSURE( pWin,
"Window not found" );
1790 if ( aVisible.
Left() * nLayoutSign > nDocX * nLayoutSign )
1792 if ( aVisible.
Right() * nLayoutSign > nDocX * nLayoutSign )
1794 if ( aVisible.
Top() > nDocY )
1795 aVisible.
SetTop( nDocY );
1796 if ( aVisible.
Bottom() > nDocY )
1804 if (bLOKActive && bLayoutRTL)
1817 bool bFitLeft = ( nLeftSpace >= nNeededWidth );
1818 bool bFitRight = ( nRightSpace >= nNeededWidth );
1820 if ( bFitLeft || bFitRight )
1825 bool bPutLeft = bFitLeft && ( bLayoutRTL || !bFitRight );
1828 aInsertPos.
setX( aSelection.
Left() - nNeededWidth );
1830 aInsertPos.
setX( aSelection.
Right() + 1 );
1833 aInsertPos.
setY( std::max( aSelection.
Top(), aVisible.
Top() ) );
1835 else if ( nTopSpace >= nNeededHeight || nBottomSpace >= nNeededHeight )
1838 if ( nBottomSpace > nNeededHeight )
1841 aInsertPos.
setY( aSelection.
Top() - nNeededHeight );
1845 aInsertPos.
setX( std::min( aSelection.
Right(), aVisible.
Right() ) - nNeededWidth + 1 );
1847 aInsertPos.
setX( std::max( aSelection.
Left(), aVisible.
Left() ) );
1854 aInsertPos.
setX( aSelection.
Left() - nNeededWidth );
1856 aInsertPos.
setX( aSelection.
Right() + 1 );
1857 aInsertPos.
setY( std::max( aSelection.
Top(), aVisible.
Top() ) );
1863 if ( aCompareRect.
Right() > aVisible.
Right() )
1868 if ( aInsertPos.
X() < aVisible.
Left() )
1869 aInsertPos.
setX( aVisible.
Left() );
1870 if ( aInsertPos.
Y() < aVisible.
Top() )
1871 aInsertPos.
setY( aVisible.
Top() );
1896 OSL_ENSURE( pWin,
"Window not found" );
1911 bool bCenterHor =
false;
1929 bool bFitLeft = ( aObjAbs.
Left() - aDesktop.
Left() >= rDialogSize.
Width() + aSpace.
Width() );
1930 bool bFitRight = ( aDesktop.
Right() - aObjAbs.
Right() >= rDialogSize.
Width() + aSpace.
Width() );
1932 if ( bFitLeft || bFitRight )
1935 bool bPutRight = bFitRight && ( bLayoutRTL || !bFitLeft );
1955 if ( aRet.
X() + rDialogSize.
Width() - 1 > aDesktop.
Right() )
1957 if ( aRet.
X() < aDesktop.
Left() )
1959 if ( aRet.
Y() + rDialogSize.
Height() - 1 > aDesktop.
Bottom() )
1961 if ( aRet.
Y() < aDesktop.
Top() )
2004 bool bUpdateFix =
false;
2023 nSplitPos =
pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
2024 aSplit.
setX( nSplitPos - aWinStart.
X() );
2032 nPosX =
static_cast<SCCOL>(nFreezeIndex);
2036 nPosY =
static_cast<SCROW>(nFreezeIndex);
2042 switch(eSplitMethod)
2047 nPosY =
static_cast<SCROW>(nFreezeIndex);
2052 nPosX =
static_cast<SCCOL>(nFreezeIndex);
2066 SCROW nBottomPos = nPosY;
2068 SCCOL nRightPos = nPosX;
2113 nSplitPos =
pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
2148 p->SetMapMode(
p->GetDrawMapMode() );
2200 if ( rPixel.
X() > 0 )
2204 if ( rPixel.
Y() > 0 )
2234 aDrawMode[
i] =
pGridWin[
i]->GetDrawMapMode();
2235 if (aDrawMode[
i] != aOldMode[
i])
2289 case sheet::DataPilotFieldOrientation_PAGE:
2295 case sheet::DataPilotFieldOrientation_COLUMN:
2296 case sheet::DataPilotFieldOrientation_ROW:
2328 p->EnableInput(bFlag,
false);
2331 p->EnableInput(bFlag,
false);
2334 p->EnableInput(bFlag,
false);
2362 pWin->ResetAutoSpell();
2373 pWin->ResetAutoSpellForContentChange();
2384 pWin->SetAutoSpellData(nPosX, nPosY, pRanges);
2405 rGroupIndexes.clear();
2406 const size_t nGroupDepth = rArray.
GetDepth();
2407 rGroupIndexes.resize(nGroupDepth);
2410 for (
size_t nLevel = 0; nLevel < nGroupDepth; ++nLevel)
2424 if (pPrevEntry && nStart < pPrevEntry->GetEnd())
2445 while (nIndex < rArray.
GetCount(nLevel))
2453 if (pEntry && pEntry->
GetStart() > nEnd)
2461 rGroupIndexes[nLevel] = bFound ?
nIndex : -1;
2466void lcl_createGroupsData(
2468 const ScOutlineArray& rArray, std::vector<size_t>& rGroupIndexes,
2469 std::vector<tools::Long>& rGroupStartPositions, OStringBuffer& rGroupsBuffer)
2471 const size_t nGroupDepth = rArray.
GetDepth();
2473 for (
size_t nLevel = nGroupDepth - 1; nLevel != size_t(-1); --nLevel)
2475 size_t nIndex = rGroupIndexes[nLevel];
2476 if (nIndex ==
size_t(-1))
2481 if (nHeaderIndex < pEntry->GetStart())
2485 else if (nHeaderIndex == pEntry->
GetStart())
2487 rGroupStartPositions[nLevel] = nTotalPx - nSizePx;
2489 else if (nHeaderIndex > pEntry->
GetStart() && (nHeaderIndex < nEnd && nHeaderIndex < pEntry->
GetEnd()))
2492 if (rGroupStartPositions[nLevel] < 0)
2493 rGroupStartPositions[nLevel] *= -1;
2496 if (nHeaderIndex == pEntry->
GetEnd() || (nHeaderIndex == nEnd && rGroupStartPositions[nLevel] != -1))
2501 auto len = rGroupsBuffer.getLength();
2502 if (len && rGroupsBuffer[len-1] ==
'}')
2504 rGroupsBuffer.append(
", ");
2507 bool bGroupHidden = pEntry->
IsHidden();
2509 rGroupsBuffer.append(
2510 "{ \"level\": " + OString::number(nLevel + 1) +
", "
2511 "\"index\": " + OString::number(nIndex) +
", "
2512 "\"startPos\": " + OString::number(rGroupStartPositions[nLevel]) +
", "
2513 "\"endPos\": " + OString::number(nTotalPx) +
", "
2514 "\"hidden\": " + OString::number(bGroupHidden ? 1 : 0) +
" }");
2517 bool bFound =
false;
2519 while (nIndex < rArray.
GetCount(nLevel))
2521 pEntry = rArray.
GetEntry(nLevel, nIndex);
2527 if (pEntry && pEntry->
GetStart() > nEnd)
2533 rGroupIndexes[nLevel] = bFound ?
nIndex : -1;
2534 rGroupStartPositions[nLevel] = -1;
2540class ScRangeProvider
2545 mrViewData(rViewData)
2549 rArea.
Top() * mrViewData.GetPPTY(),
2550 rArea.
Right() * mrViewData.GetPPTX(),
2551 rArea.
Bottom() * mrViewData.GetPPTY());
2552 calculateBounds(aAreaPx);
2555 const ScRange& getCellRange()
const
2562 rStartColPos = maBoundPositions.Left();
2563 rEndColPos = maBoundPositions.Right();
2568 rStartRowPos = maBoundPositions.Top();
2569 rEndRowPos = maBoundPositions.Bottom();
2576 SCCOLROW nStartCol = -1, nEndCol = -1;
2577 calculateDimensionBounds(rAreaPx.
Left(), rAreaPx.
Right(),
true,
2578 nStartCol, nEndCol, nLeftPx, nRightPx,
2579 mnEnlargeX, mrViewData);
2581 SCCOLROW nStartRow = -1, nEndRow = -1;
2582 calculateDimensionBounds(rAreaPx.
Top(), rAreaPx.
Bottom(),
false,
2583 nStartRow, nEndRow, nTopPx, nBottomPx,
2584 mnEnlargeY, mrViewData);
2586 maRange.aStart.Set(nStartCol, nStartRow, mrViewData.GetTabNo());
2587 maRange.aEnd.Set(nEndCol, nEndRow, mrViewData.GetTabNo());
2589 maBoundPositions.SetLeft(nLeftPx);
2590 maBoundPositions.SetRight(nRightPx);
2591 maBoundPositions.SetTop(nTopPx);
2592 maBoundPositions.SetBottom(nBottomPx);
2597 bool bColumns,
SCCOLROW& rStartIndex,
2608 aBoundsProvider.Compute(rStartNearest, rEndNearest, nStartPos, nEndPos);
2609 aBoundsProvider.EnlargeBy(nEnlarge);
2612 SCCOL nStartCol = -1, nEndCol = -1;
2613 aBoundsProvider.GetStartIndexAndPosition(nStartCol, rBoundStart);
2614 aBoundsProvider.GetEndIndexAndPosition(nEndCol, rBoundEnd);
2615 rStartIndex = nStartCol;
2616 rEndIndex = nEndCol;
2620 SCROW nStartRow = -1, nEndRow = -1;
2621 aBoundsProvider.GetStartIndexAndPosition(nStartRow, rBoundStart);
2622 aBoundsProvider.GetEndIndexAndPosition(nEndRow, rBoundEnd);
2623 rStartIndex = nStartRow;
2624 rEndIndex = nEndRow;
2633 static const SCCOLROW mnEnlargeX = 2;
2634 static const SCCOLROW mnEnlargeY = 2;
2637void lcl_ExtendTiledDimension(
bool bColumn,
const SCCOLROW nEnd,
const SCCOLROW nExtra,
2646 if (nMaxTiledIndex >= nHardLimit)
2649 if (nEnd <= nMaxTiledIndex - nExtra)
2654 Size aOldSize(0, 0);
2658 SCCOLROW nNewMaxTiledIndex = std::min(std::max(nEnd, nMaxTiledIndex) + nExtra, nHardLimit);
2665 Size aNewSize(0, 0);
2669 if (aOldSize == aNewSize)
2678 tools::Rectangle(aOldSize.getWidth(), 0, aNewSize.getWidth(), aNewSize.getHeight()):
2679 tools::
Rectangle(0, aOldSize.getHeight(), aNewSize.getWidth(), aNewSize.getHeight());
2690 ss << aNewSize.Width() <<
", " << aNewSize.Height();
2691 OString sSize( ss.str() );
2692 ScModelObj* pModel = comphelper::getFromUnoTunnel<ScModelObj>(
2708 rJsonWriter.
put(
"commandName",
".uno:ViewRowColumnHeaders");
2711 SCROW nStartRow = -1;
2714 SCCOL nStartCol = -1;
2722 ScRangeProvider aRangeProvider(rRectangle,
false,
aViewData);
2723 const ScRange& rCellRange = aRangeProvider.getCellRange();
2729 if (rRectangle.
Top() < rRectangle.
Bottom())
2731 SAL_INFO(
"sc.lok.header",
"Row Header: compute start/end rows.");
2734 nEndRow = rCellRange.
aEnd.
Row();
2735 aRangeProvider.getRowPositions(nStartHeightPx, nEndHeightPx);
2746 sal_Int32 nVisibleRows = nEndRow - nStartRow;
2747 if (nVisibleRows < 25)
2750 SAL_INFO(
"sc.lok.header",
"Row Header: visible rows: " << nVisibleRows);
2759 size_t nRowGroupDepth = 0;
2760 std::vector<size_t> aRowGroupIndexes;
2761 if (bRangeHeaderSupport && pTable)
2763 nRowGroupDepth = pRowArray->
GetDepth();
2764 lcl_getGroupIndexes(*pRowArray, nStartRow, nEndRow, aRowGroupIndexes);
2769 lcl_ExtendTiledDimension(
false, nEndRow, nVisibleRows, *
this,
aViewData);
2775 OStringBuffer aRowGroupsBuffer =
"\"rowGroups\": [\n";
2777 auto rowsNode = rJsonWriter.
startArray(
"rows");
2779 SAL_INFO(
"sc.lok.header",
"Row Header: [create string data for rows]: start row: "
2780 << nStartRow <<
" start height: " << nTotalPixels);
2782 if (nStartRow != nEndRow)
2785 rJsonWriter.
put(
"text", nStartRow + 1);
2786 rJsonWriter.
put(
"size", nTotalPixels);
2787 rJsonWriter.
put(
"groupLevels",
static_cast<sal_Int64
>(nRowGroupDepth));
2790 std::vector<tools::Long> aRowGroupStartPositions(nRowGroupDepth, -nTotalPixels);
2791 for (
SCROW nRow = nStartRow + 1; nRow <= nEndRow; ++nRow)
2795 nTotalPixels += nSizePx;
2797 if (bRangeHeaderSupport && nRowGroupDepth > 0)
2799 lcl_createGroupsData(nRow, nEndRow, nSizePx, nTotalPixels,
2800 *pRowArray, aRowGroupIndexes, aRowGroupStartPositions,
2804 if (bRangeHeaderSupport && nRow < nEndRow && nSizePx == nPrevSizePx)
2806 nPrevSizePx = nSizePx;
2810 rJsonWriter.
put(
"size", nTotalPixels);
2813 aRowGroupsBuffer.append(
"]");
2815 if (nRowGroupDepth > 0)
2817 aRowGroupsBuffer.append(
",\n");
2818 rJsonWriter.
putRaw(aRowGroupsBuffer);
2827 if (rRectangle.
Left() < rRectangle.
Right())
2829 SAL_INFO(
"sc.lok.header",
"Column Header: compute start/end columns.");
2832 nEndCol = rCellRange.
aEnd.
Col();
2833 aRangeProvider.getColPositions(nStartWidthPx, nEndWidthPx);
2844 sal_Int32 nVisibleCols = nEndCol - nStartCol;
2845 if (nVisibleCols < 10)
2854 size_t nColGroupDepth = 0;
2855 std::vector<size_t> aColGroupIndexes;
2856 if (bRangeHeaderSupport && pTable)
2858 nColGroupDepth = pColArray->
GetDepth();
2859 lcl_getGroupIndexes(*pColArray, nStartCol, nEndCol, aColGroupIndexes);
2864 lcl_ExtendTiledDimension(
true, nEndCol, nVisibleCols, *
this,
aViewData);
2867 OStringBuffer aColGroupsBuffer =
"\"columnGroups\": [\n";
2869 auto columnsNode = rJsonWriter.
startArray(
"columns");
2871 nTotalPixels = nStartWidthPx;
2872 SAL_INFO(
"sc.lok.header",
"Col Header: [create string data for cols]: start col: "
2873 << nStartRow <<
" start width: " << nTotalPixels);
2875 if (nStartCol != nEndCol)
2878 rJsonWriter.
put(
"text",
static_cast<sal_Int64
>(nStartCol + 1));
2879 rJsonWriter.
put(
"size", nTotalPixels);
2880 rJsonWriter.
put(
"groupLevels",
static_cast<sal_Int64
>(nColGroupDepth));
2883 std::vector<tools::Long> aColGroupStartPositions(nColGroupDepth, -nTotalPixels);
2885 for (
SCCOL nCol = nStartCol + 1; nCol <= nEndCol; ++nCol)
2889 nTotalPixels += nSizePx;
2891 if (bRangeHeaderSupport && nColGroupDepth > 0)
2892 lcl_createGroupsData(nCol, nEndCol, nSizePx, nTotalPixels,
2893 *pColArray, aColGroupIndexes,
2894 aColGroupStartPositions, aColGroupsBuffer);
2896 if (bRangeHeaderSupport && nCol < nEndCol && nSizePx == nPrevSizePx)
2898 nPrevSizePx = nSizePx;
2900 OUString aText = bRangeHeaderSupport ?
2904 rJsonWriter.
put(
"text", aText);
2905 rJsonWriter.
put(
"size", nTotalPixels);
2908 aColGroupsBuffer.append(
"]");
2910 if (nColGroupDepth > 0)
2912 aColGroupsBuffer.append(
",\n");
2913 rJsonWriter.
putRaw(aColGroupsBuffer);
2920 aNewVisArea.
Exclude(aOldVisArea);
2930 bool bFiltered,
bool bGroups)
2934 boost::property_tree::ptree aTree;
2935 aTree.put(
"commandName",
".uno:SheetGeometryData");
2936 aTree.put(
"maxtiledcolumn", rDoc.
MaxCol());
2939 auto getJSONString = [](
const boost::property_tree::ptree& rTree) {
2941 boost::property_tree::write_json(aStream, rTree);
2942 return aStream.str();
2945 if ((!bSizes && !bHidden && !bFiltered && !bGroups) ||
2946 (!bColumns && !bRows))
2948 return OString(getJSONString(aTree));
2958 const GeomEntry aGeomEntries[] = {
2965 struct DimensionEntry
2972 const DimensionEntry aDimEntries[] = {
2973 {
"columns",
true, bColumns },
2974 {
"rows",
false, bRows }
2979 for (
const auto& rDimEntry : aDimEntries)
2981 if (!rDimEntry.bEnabled)
2984 bool bDimIsCol = rDimEntry.bDimIsCol;
2986 boost::property_tree::ptree aDimTree;
2987 for (
const auto& rGeomEntry : aGeomEntries)
2989 if (!rGeomEntry.bEnabled)
2992 OString aGeomDataEncoding = rDoc.
dumpSheetGeomData(nTab, bDimIsCol, rGeomEntry.eType);
2994 aDimTree.put(rGeomEntry.pKey, aGeomDataEncoding.getStr());
2997 aTree.add_child(rDimEntry.pKey, aDimTree);
3000 return OString(getJSONString(aTree));
3006 "extendTiledAreaIfNeeded: START: ClientView: ColRange["
3013 if (rVisArea.
Top() >= rVisArea.
Bottom() ||
3021 ScRangeProvider aRangeProvider(rVisArea,
false,
aViewData);
3023 const ScRange& rCellRange = aRangeProvider.getCellRange();
3030 tools::Long nStartColPos, nEndColPos, nStartRowPos, nEndRowPos;
3031 aRangeProvider.getColPositions(nStartColPos, nEndColPos);
3032 aRangeProvider.getRowPositions(nStartRowPos, nEndRowPos);
3042 rWidthHelper.
insert(nStartCol, nStartColPos);
3049 rWidthHelper.
insert(nEndCol, nEndColPos);
3058 rHeightHelper.
insert(nStartRow, nStartRowPos);
3065 rHeightHelper.
insert(nEndRow, nEndRowPos);
3069 constexpr SCCOL nMinExtraCols = 10;
3070 SCCOL nExtraCols = std::max<SCCOL>(nMinExtraCols, nEndCol - nStartCol);
3073 lcl_ExtendTiledDimension(
true, nEndCol, nExtraCols, *
this,
aViewData);
3075 constexpr SCROW nMinExtraRows = 25;
3076 SCROW nExtraRows = std::max(nMinExtraRows, nEndRow - nStartRow);
3079 lcl_ExtendTiledDimension(
false, nEndRow, nExtraRows, *
this,
aViewData);
3084 aNewVisCellRange.
Exclude(aOldVisCellRange);
3086 if (!aChangedCellRange.
IsEmpty())
3090 aChangedCellRange.
Right(), aChangedCellRange.
Bottom());
3094 "extendTiledAreaIfNeeded: END: ClientView: ColRange["
css::chart::ChartAxisLabelPosition ePos
void ScColToAlpha(OUStringBuffer &rBuf, SCCOL nCol)
append alpha representation of column to buffer
const StyleSettings & GetStyleSettings() const
const CommandGestureZoomData * GetGestureZoomData() const
const CommandWheelData * GetWheelData() const
static bool IsQuickHelpEnabled()
static void ShowQuickHelp(vcl::Window *pParent, const tools::Rectangle &rScreenRect, const OUString &rHelpText, QuickHelpFlags nStyle=QuickHelpFlags::NONE)
void DrawLine(const Point &rStartPt, const Point &rEndPt)
SAL_WARN_UNUSED_RESULT Point LogicToLogic(const Point &rPtSource, const MapMode *pMapModeSource, const MapMode *pMapModeDest) const
const AllSettings & GetSettings() const
constexpr tools::Long Y() const
void setX(tools::Long nX)
void setY(tools::Long nY)
tools::Long AdjustY(tools::Long nVertMove)
tools::Long AdjustX(tools::Long nHorzMove)
constexpr tools::Long X() const
void SetDocumentModified()
ScModelObj * GetModel() const
SC_DLLPUBLIC sal_uInt16 GetRowHeight(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
SC_DLLPUBLIC sal_uInt16 GetColWidth(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
SC_DLLPUBLIC tools::Long GetColOffset(SCCOL nCol, SCTAB nTab, bool bHiddenAsZero=true) const
SC_DLLPUBLIC SCCOL MaxCol() const
SC_DLLPUBLIC SCROW MaxRow() const
SC_DLLPUBLIC bool IsNegativePage(SCTAB nTab) const
SC_DLLPUBLIC bool RowHidden(SCROW nRow, SCTAB nTab, SCROW *pFirstRow=nullptr, SCROW *pLastRow=nullptr) const
OString dumpSheetGeomData(SCTAB nTab, bool bColumns, SheetGeomType eGeomType)
Serializes the specified sheet's geometry data.
SC_DLLPUBLIC ScOutlineTable * GetOutlineTable(SCTAB nTab, bool bCreate=false)
SC_DLLPUBLIC bool ColHidden(SCCOL nCol, SCTAB nTab, SCCOL *pFirstCol=nullptr, SCCOL *pLastCol=nullptr) const
SC_DLLPUBLIC bool IsLayoutRTL(SCTAB nTab) const
SC_DLLPUBLIC const SfxPoolItem * GetAttr(SCCOL nCol, SCROW nRow, SCTAB nTab, sal_uInt16 nWhich) const
SC_DLLPUBLIC tools::Rectangle GetMMRect(SCCOL nStartCol, SCROW nStartRow, SCCOL nEndCol, SCROW nEndRow, SCTAB nTab, bool bHiddenAsZero=true) const
SC_DLLPUBLIC tools::Long GetRowOffset(SCROW nRow, SCTAB nTab, bool bHiddenAsZero=true) const
css::sheet::DataPilotFieldOrientation GetDPFieldOrientation(SCCOL nCol, SCROW nRow) const
MapMode GetDrawMapMode(bool bForce=false)
MapMode for the drawinglayer objects.
void LaunchDPFieldMenu(SCCOL nCol, SCROW nRow)
const Point & GetMousePosPixel() const
void LaunchAutoFilterMenu(SCCOL nCol, SCROW nRow)
void LaunchDataSelectMenu(SCCOL nCol, SCROW nRow)
void LaunchPageFieldMenu(SCCOL nCol, SCROW nRow)
bool HasAutoFilter() const
virtual Size getDocumentSize() final override
bool IsModalMode(SfxObjectShell *pDocSh=nullptr)
size_t GetCount(size_t nLevel) const
ScOutlineEntry * GetEntry(size_t nLevel, size_t nIndex)
bool GetEntryIndex(size_t nLevel, SCCOLROW nPos, size_t &rnIndex) const
bool GetEntryIndexInRange(size_t nLevel, SCCOLROW nBlockStart, SCCOLROW nBlockEnd, size_t &rnIndex) const
SC_DLLPUBLIC SCCOLROW GetStart() const
SC_DLLPUBLIC bool IsHidden() const
SC_DLLPUBLIC bool IsVisible() const
SC_DLLPUBLIC SCCOLROW GetEnd() const
const ScOutlineArray & GetColArray() const
const ScOutlineArray & GetRowArray() const
void removeByIndex(index_type nIndex)
const value_type & getNearestByPosition(tools::Long nPos) const
void insert(index_type nIndex, tools::Long nPos)
void BroadcastAccessibility(const SfxHint &rHint)
bool HasAccessibilityObjects() const
SCCOL mnLOKStartHeaderCol
void LockModifiers(sal_uInt16 nModifiers)
sal_uInt16 GetLockedModifiers() const
VclPtr< ScTabSplitter > pHSplitter
std::array< VclPtr< ScColBar >, 2 > pColBar
std::array< VclPtr< ScOutlineWindow >, 2 > pRowOutline
VclPtr< ScCornerButton > aCornerButton
void UpdateAutoFillMark(bool bFromPaste=false)
VclPtr< ScGridWindow > pTimerWindow
std::unique_ptr< ScViewSelectionEngine > pSelEngine
ScHeaderFunctionSet aHdrFunc
std::shared_ptr< sc::SpellCheckContext > mpSpellCheckCxt
void AlignToCursor(SCCOL nCurX, SCROW nCurY, ScFollowMode eMode, const ScSplitPos *pWhich=nullptr)
ScSplitPos FindWindow(const vcl::Window *pWindow) const
bool ScrollCommand(const CommandEvent &rCEvt, ScSplitPos ePos)
SC_DLLPUBLIC void SetRelTabBarWidth(double fRelTabBarWidth)
Sets a relative tab bar width.
sal_uInt16 CalcZoom(SvxZoomType eType, sal_uInt16 nOldZoom)
void extendTiledAreaIfNeeded()
VclPtr< ScrollAdaptor > aHScrollRight
static SC_DLLPUBLIC double GetRelTabBarWidth()
Returns the current tab bar width relative to the frame window width (0.0 ... 1.0).
VclPtr< ScrollAdaptor > aVScrollTop
void getRowColumnHeaders(const tools::Rectangle &rRectangle, tools::JsonWriter &rJsonWriter)
VclPtr< ScrollAdaptor > aVScrollBottom
std::array< VclPtr< ScGridWindow >, 4 > pGridWin
Point GetChartInsertPos(const Size &rSize, const ScRange &rCellRange)
VclPtr< ScTabControl > pTabControl
void SetAutoSpellData(SCCOL nPosX, SCROW nPosY, const std::vector< editeng::MisspellRanges > *pRanges)
void DoAddWin(ScGridWindow *pWin)
void EnableAutoSpell(bool bEnable)
VclPtr< ScTabSplitter > pVSplitter
SC_DLLPUBLIC void ScrollLines(tools::Long nDeltaX, tools::Long nDeltaY)
Point GetGridOffset() const
Point GetChartDialogPos(const Size &rDialogSize, const tools::Rectangle &rLogicChart)
void FreezeSplitters(bool bFreeze, SplitMethod eSplitMethod=SC_SPLIT_METHOD_CURSOR, SCCOLROW nFreezeIndex=-1)
void UpdateHeaderWidth(const ScVSplitPos *pWhich=nullptr, const SCROW *pPosY=nullptr)
OString getSheetGeometryData(bool bColumns, bool bRows, bool bSizes, bool bHidden, bool bFiltered, bool bGroups)
void SetZoomPercentFromCommand(sal_uInt16 nZoomPercent)
Point GetInsertPos() const
void SetTabBarWidth(tools::Long nNewWidth)
Sets an absolute tab bar width (in pixels).
ScViewData & GetViewData()
void SetZoom(const Fraction &rNewX, const Fraction &rNewY, bool bAll)
SvxZoomType GetZoomType() const
bool mbInlineWithScrollbar
ScGridWindow * GetActiveWin()
void DoResize(const Point &rOffset, const Size &rSize, bool bInner=false)
SCROW mnLOKStartHeaderRow
void ScrollX(tools::Long nDeltaX, ScHSplitPos eWhich, bool bUpdBars=true)
void SetTimer(ScGridWindow *pWin, const MouseEvent &rMEvt)
void ResetAutoSpellForContentChange()
void UpdateSelectionOverlay()
void InitScrollBar(ScrollAdaptor &rScrollBar, tools::Long nMaxVal, const Link< weld::Scrollbar &, void > &rLink)
void UpdateFormulas(SCCOL nStartCol=-1, SCROW nStartRow=-1, SCCOL nEndCol=-1, SCROW nEndRow=-1)
void SelectAll(bool bContinue=false)
std::unique_ptr< ScDrawView > pDrawView
void ActivatePart(ScSplitPos eWhich)
std::array< VclPtr< ScRowBar >, 2 > pRowBar
bool HasHintWindow() const
tools::Long GetTabBarWidth() const
Returns the current tab bar width in pixels.
std::unique_ptr< ScHeaderSelectionEngine > pHdrSelEng
void ScrollY(tools::Long nDeltaY, ScVSplitPos eWhich, bool bUpdBars=true)
ScTabView(const ScTabView &)=delete
make noncopyable
void UpdateScrollBars(HeaderType eHeaderType=BOTH_HEADERS)
static tools::Long GetScrollBarPos(const ScrollAdaptor &rScroll)
bool UpdateVisibleRange()
void SetActivePointer(PointerStyle nPointer)
double mfPendingTabBarWidth
void SplitAtPixel(const Point &rPixel)
void EnableRefInput(bool bFlag)
bool GestureZoomCommand(const CommandEvent &rCEvt)
std::array< VclPtr< ScOutlineWindow >, 2 > pColOutline
void DoHSplit(tools::Long nSplitPos)
void RepeatResize(bool bUpdateFix=true)
VclPtr< ScCornerButton > aTopButton
void DoVSplit(tools::Long nSplitPos)
void GetBorderSize(SvBorder &rBorder, const Size &rSize)
VclPtr< vcl::Window > pFrameWin
void SetPendingRelTabBarWidth(double fRelTabBarWidth)
Sets a relative tab bar width.
void ScrollHdl(ScrollAdaptor *rScrollBar)
VclPtr< ScrollAdaptor > aHScrollLeft
bool HasPageFieldDataAtCursor() const
void SetZoomType(SvxZoomType eNew, bool bAll)
void SetHSplitPos(tools::Long nPos)
bool IsHeaderMode() const
SCCOL CellsAtX(SCCOL nPosX, SCCOL nDir, ScHSplitPos eWhichX, sal_uInt16 nScrSizeY=SC_SIZE_NONE) const
bool UpdateFixX(SCTAB nTab=MAXTAB+1)
void GetMouseQuadrant(const Point &rClickPos, ScSplitPos eWhich, SCCOL nPosX, SCROW nPosY, bool &rLeft, bool &rTop)
bool IsOutlineMode() const
void SetFixPosY(SCROW nPos)
const Fraction & GetZoomY() const
void SetFixPosX(SCCOL nPos)
SCROW GetMaxTiledRow() const
ScDocument & GetDocument() const
ScPositionHelper & GetLOKHeightHelper()
SCROW GetPosY(ScVSplitPos eWhich, SCTAB nForTab=-1) const
SCCOL GetMaxTiledCol() const
void SetPosY(ScVSplitPos eWhich, SCROW nNewPosY)
ScSplitMode GetHSplitMode() const
void SetVSplitMode(ScSplitMode eMode)
void SetVSplitPos(tools::Long nPos)
ScDocShell * GetDocShell() const
bool UpdateFixY(SCTAB nTab=MAXTAB+1)
bool IsVScrollMode() const
void GetPosFromPixel(tools::Long nClickX, tools::Long nClickY, ScSplitPos eWhich, SCCOL &rPosX, SCROW &rPosY, bool bTestMerge=true, bool bRepair=false, SCTAB nForTab=-1)
ScTabViewShell * GetViewShell() const
tools::Long GetHSplitPos() const
static tools::Long ToPixel(sal_uInt16 nTwips, double nFactor)
SCROW VisibleCellsY(ScVSplitPos eWhichY) const
ScSplitPos GetActivePart() const
void SetMaxTiledCol(SCCOL nCol)
Point GetScrPos(SCCOL nWhereX, SCROW nWhereY, ScSplitPos eWhich, bool bAllowNeg=false, SCTAB nForTab=-1) const
bool IsHScrollMode() const
ScPositionHelper & GetLOKWidthHelper()
SCROW CellsAtY(SCROW nPosY, SCROW nDir, ScVSplitPos eWhichY, sal_uInt16 nScrSizeX=SC_SIZE_NONE) const
SCCOL PrevCellsX(ScHSplitPos eWhichX) const
SCCOL VisibleCellsX(ScHSplitPos eWhichX) const
void SetMaxTiledRow(SCROW nRow)
ScSplitMode GetVSplitMode() const
const Fraction & GetZoomX() const
SCROW PrevCellsY(ScVSplitPos eWhichY) const
const tools::Rectangle & getLOKVisibleArea() const
The visible area in the client (set by setClientVisibleArea).
void SetPosX(ScHSplitPos eWhich, SCCOL nNewPosX)
tools::Long GetVSplitPos() const
SfxBindings & GetBindings()
void SetHSplitMode(ScSplitMode eMode)
SCCOL GetPosX(ScHSplitPos eWhich, SCTAB nForTab=-1) const
void Invalidate(sal_uInt16 nId)
css::uno::Reference< css::frame::XController > GetController() const
static void notifyInvalidation(SfxViewShell const *pThisView, tools::Rectangle const *)
static void notifyDocumentSizeChanged(SfxViewShell const *pThisView, const OString &rPayload, vcl::ITiledRenderable *pDoc, bool bInvalidateAll=true)
SfxBindings & GetBindings()
SfxFrame & GetFrame() const
SfxViewFrame & GetViewFrame() const
virtual css::uno::Reference< css::frame::XModel > GetCurrentDocument() const
constexpr tools::Long Height() const
tools::Long AdjustHeight(tools::Long n)
void setWidth(tools::Long nWidth)
constexpr tools::Long Width() const
sal_Int32 GetScrollBarSize() const
const Color & GetDarkShadowColor() const
const vcl::Font & GetTabFont() const
const Color & GetFaceColor() const
virtual void Start(bool bStartTimer=true) override
reference_type * get() const
static VclPtr< reference_type > Create(Arg &&... arg)
const Size & GetFontSize() const
tools::Rectangle GetBoundRect() const
void Exclude(const tools::Rectangle &rRegion)
Point LogicToPixel(const Point &rLogicPt) const
tools::Rectangle GetDesktopRectPixel() const
virtual Point GetPosPixel() const
virtual void EnableRTL(bool bEnable=true)
const AllSettings & GetSettings() const
void Show(bool bVisible=true, ShowFlags nFlags=ShowFlags::NONE)
Point PixelToLogic(const Point &rDevicePt) const
virtual Size GetSizePixel() const
Size GetOutputSizePixel() const
void Invalidate(InvalidateFlags nFlags=InvalidateFlags::NONE)
Point OutputToAbsoluteScreenPixel(const Point &rPos) const
virtual void SetPosSizePixel(const Point &rNewPos, const Size &rNewSize)
SheetGeomType
Represents the type of sheet geometry data.
#define LINK(Instance, Class, Member)
#define SAL_INFO(area, stream)
std::unique_ptr< sal_Int32[]> pData
tools::Long const nBorder
constexpr Point convert(const Point &rPoint, o3tl::Length eFrom, o3tl::Length eTo)
OUString ScResId(TranslateId aId)
constexpr TypedWhichId< ScMergeFlagAttr > ATTR_MERGE_FLAG(145)
Reference< XController > xController
static void lcl_SetPosSize(vcl::Window &rWindow, const Point &rPos, const Size &rSize, tools::Long nTotalWidth, bool bLayoutRTL)
static void ShowHide(vcl::Window *pWin, bool bShow)
#define SPLIT_HANDLE_SIZE
IMPL_LINK(ScTabView, SplitHdl, Splitter *, pSplitter, void)
constexpr sal_Int32 TAB_HEIGHT_MARGIN
IMPL_LINK_NOARG(ScTabView, TimerHdl, Timer *, void)
sal_Int32 SCCOLROW
a type capable of holding either SCCOL or SCROW
ScHSplitPos WhichH(ScSplitPos ePos)
ScVSplitPos WhichV(ScSplitPos ePos)