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) +
1127 aRect.
SetLeft( aMousePos.X() );
1128 aRect.
SetTop( aPos.Y() - 4 );
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;
1173 case ScrollType::Drag:
1183 nDelta = nScrollPos - nViewPos;
1186 if (nDelta<0) nDelta=0;
1190 if (nDelta>0) nDelta=0;
1212 bool bUpdate = (
eType != ScrollType::Drag );
1224 SCCOL nNewX = nOldX +
static_cast<SCCOL>(nDeltaX);
1230 if ( nNewX > rDoc.
MaxCol() )
1232 nDeltaX -= nNewX - rDoc.
MaxCol();
1236 SCCOL nDir = ( nDeltaX > 0 ) ? 1 : -1;
1239 nNewX+nDir >= 0 && nNewX+nDir <= rDoc.
MaxCol() )
1240 nNewX = sal::static_int_cast<SCCOL>( nNewX + nDir );
1260 if ( nNewX >= 0 && nNewX <= rDoc.
MaxCol() && nDeltaX )
1262 SCCOL nTrackX = std::max( nOldX, nNewX );
1269 pColBar[eWhich]->PaintImmediately();
1293 if (nDeltaX==1 || nDeltaX==-1)
1307 SCROW nNewY = nOldY +
static_cast<SCROW>(nDeltaY);
1313 if ( nNewY > rDoc.
MaxRow() )
1315 nDeltaY -= nNewY - rDoc.
MaxRow();
1319 SCROW nDir = ( nDeltaY > 0 ) ? 1 : -1;
1322 nNewY+nDir >= 0 && nNewY+nDir <= rDoc.
MaxRow() )
1343 if ( nNewY >= 0 && nNewY <= rDoc.
MaxRow() && nDeltaY )
1345 SCROW nTrackY = std::max( nOldY, nNewY );
1349 SCROW nUNew = nNewY;
1353 pRowBar[eWhich]->PaintImmediately();
1377 if (nDeltaY==1 || nDeltaY==-1)
1408 while ( nVis > 0 && rDoc.
GetRowHeight( nVis, nTab, &startRow,
nullptr ) == 0 )
1409 nVis = std::max<SCROW>( startRow - 1, 0 );
1431 if (nEndPos > rDoc.
MaxRow())
1442 if (nTopEnd > rDoc.
MaxRow())
1445 if ( nTopEnd > nEndPos )
1458 tools::Long nWidth = nBig - ( 10000 - nEndPos ) * nDiff / 10000;
1479 OSL_ENSURE(pWin || !bShow,
"window is not present");
1490 bool bHOutline = bOutlMode && lcl_HasColOutline(
aViewData);
1491 bool bVOutline = bOutlMode && lcl_HasRowOutline(
aViewData);
1498 bHScrollMode = bVScrollMode = bTabMode = bHeader = bHOutline = bVOutline =
false;
1566 bool bChanged =
false;
1569 if (!pWin || !pWin->IsVisible())
1572 if (pWin->UpdateVisibleRange())
1583 if ( pSplitter == pHSplitter )
1584 DoHSplit( pHSplitter->GetSplitPosPixel() );
1586 DoVSplit( pVSplitter->GetSplitPosPixel() );
1589 FreezeSplitters(
true );
1591 DoResize( aBorderPos, aFrameSize );
1601 nSplitPos =
pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
1615 if ( nSplitPos < nMinPos || nSplitPos > nMaxPos )
1620 if ( aNewMode == aOldMode )
1636 if ( nLeftWidth < 0 ) nLeftWidth = 0;
1638 static_cast<sal_uInt16
>(nLeftWidth) );
1640 if ( nNewDelta > rDoc.
MaxCol() )
1641 nNewDelta = rDoc.
MaxCol();
1655 pWin->SetMapMode( pWin->GetDrawMapMode() );
1679 if ( nSplitPos < nMinPos || nSplitPos > nMaxPos )
1684 if ( aNewMode == aOldMode )
1708 if ( nTopHeight < 0 ) nTopHeight = 0;
1710 static_cast<sal_uInt16
>(nTopHeight) );
1712 if ( nNewDelta > rDoc.
MaxRow() )
1713 nNewDelta = rDoc.
MaxRow();
1727 pWin->SetMapMode( pWin->GetDrawMapMode() );
1750 return Point(nPosX,nPosY);
1768 OSL_ENSURE( pWin,
"Window not found" );
1789 if ( aVisible.
Left() * nLayoutSign > nDocX * nLayoutSign )
1791 if ( aVisible.
Right() * nLayoutSign > nDocX * nLayoutSign )
1793 if ( aVisible.
Top() > nDocY )
1794 aVisible.
SetTop( nDocY );
1795 if ( aVisible.
Bottom() > nDocY )
1803 if (bLOKActive && bLayoutRTL)
1816 bool bFitLeft = ( nLeftSpace >= nNeededWidth );
1817 bool bFitRight = ( nRightSpace >= nNeededWidth );
1819 if ( bFitLeft || bFitRight )
1824 bool bPutLeft = bFitLeft && ( bLayoutRTL || !bFitRight );
1827 aInsertPos.setX( aSelection.
Left() - nNeededWidth );
1829 aInsertPos.setX( aSelection.
Right() + 1 );
1832 aInsertPos.setY( std::max( aSelection.
Top(), aVisible.
Top() ) );
1834 else if ( nTopSpace >= nNeededHeight || nBottomSpace >= nNeededHeight )
1837 if ( nBottomSpace > nNeededHeight )
1838 aInsertPos.setY( aSelection.
Bottom() + 1 );
1840 aInsertPos.setY( aSelection.
Top() - nNeededHeight );
1844 aInsertPos.setX( std::min( aSelection.
Right(), aVisible.
Right() ) - nNeededWidth + 1 );
1846 aInsertPos.setX( std::max( aSelection.
Left(), aVisible.
Left() ) );
1853 aInsertPos.setX( aSelection.
Left() - nNeededWidth );
1855 aInsertPos.setX( aSelection.
Right() + 1 );
1856 aInsertPos.setY( std::max( aSelection.
Top(), aVisible.
Top() ) );
1862 if ( aCompareRect.
Right() > aVisible.
Right() )
1863 aInsertPos.AdjustX( -(aCompareRect.
Right() - aVisible.
Right()) );
1865 aInsertPos.AdjustY( -(aCompareRect.
Bottom() - aVisible.
Bottom()) );
1867 if ( aInsertPos.X() < aVisible.
Left() )
1868 aInsertPos.setX( aVisible.
Left() );
1869 if ( aInsertPos.Y() < aVisible.
Top() )
1870 aInsertPos.setY( aVisible.
Top() );
1895 OSL_ENSURE( pWin,
"Window not found" );
1910 bool bCenterHor =
false;
1928 bool bFitLeft = ( aObjAbs.
Left() - aDesktop.
Left() >= rDialogSize.
Width() + aSpace.
Width() );
1929 bool bFitRight = ( aDesktop.
Right() - aObjAbs.
Right() >= rDialogSize.
Width() + aSpace.
Width() );
1931 if ( bFitLeft || bFitRight )
1934 bool bPutRight = bFitRight && ( bLayoutRTL || !bFitLeft );
1936 aRet.setX( aObjAbs.
Right() + aSpace.
Width() );
1938 aRet.setX( aObjAbs.
Left() - rDialogSize.
Width() - aSpace.
Width() );
1954 if ( aRet.X() + rDialogSize.
Width() - 1 > aDesktop.
Right() )
1955 aRet.setX( aDesktop.
Right() - rDialogSize.
Width() + 1 );
1956 if ( aRet.X() < aDesktop.
Left() )
1957 aRet.setX( aDesktop.
Left() );
1958 if ( aRet.Y() + rDialogSize.
Height() - 1 > aDesktop.
Bottom() )
1959 aRet.setY( aDesktop.
Bottom() - rDialogSize.
Height() + 1 );
1960 if ( aRet.Y() < aDesktop.
Top() )
1961 aRet.setY( aDesktop.
Top() );
2003 bool bUpdateFix =
false;
2022 nSplitPos =
pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
2023 aSplit.setX( nSplitPos - aWinStart.X() );
2031 nPosX =
static_cast<SCCOL>(nFreezeIndex);
2035 nPosY =
static_cast<SCROW>(nFreezeIndex);
2041 switch(eSplitMethod)
2046 nPosY =
static_cast<SCROW>(nFreezeIndex);
2051 nPosX =
static_cast<SCCOL>(nFreezeIndex);
2065 SCROW nBottomPos = nPosY;
2067 SCCOL nRightPos = nPosX;
2110 tools::Long nSplitPos = aSplit.X() + aWinStart.X();
2112 nSplitPos =
pFrameWin->GetOutputSizePixel().Width() - nSplitPos - 1;
2147 p->SetMapMode(
p->GetDrawMapMode() );
2185 DoHSplit( aSplit.X() + aWinStart.X() );
2189 DoVSplit( aSplit.Y() + aWinStart.Y() );
2199 if ( rPixel.X() > 0 )
2203 if ( rPixel.Y() > 0 )
2233 aDrawMode[
i] =
pGridWin[
i]->GetDrawMapMode();
2234 if (aDrawMode[
i] != aOldMode[
i])
2288 case sheet::DataPilotFieldOrientation_PAGE:
2294 case sheet::DataPilotFieldOrientation_COLUMN:
2295 case sheet::DataPilotFieldOrientation_ROW:
2327 p->EnableInput(bFlag,
false);
2330 p->EnableInput(bFlag,
false);
2333 p->EnableInput(bFlag,
false);
2361 pWin->ResetAutoSpell();
2372 pWin->ResetAutoSpellForContentChange();
2383 pWin->SetAutoSpellData(nPosX, nPosY, pRanges);
2404 rGroupIndexes.clear();
2405 const size_t nGroupDepth = rArray.
GetDepth();
2406 rGroupIndexes.resize(nGroupDepth);
2409 for (
size_t nLevel = 0; nLevel < nGroupDepth; ++nLevel)
2423 if (pPrevEntry && nStart < pPrevEntry->GetEnd())
2444 while (nIndex < rArray.
GetCount(nLevel))
2452 if (pEntry && pEntry->
GetStart() > nEnd)
2460 rGroupIndexes[nLevel] = bFound ?
nIndex : -1;
2465void lcl_createGroupsData(
2467 const ScOutlineArray& rArray, std::vector<size_t>& rGroupIndexes,
2468 std::vector<tools::Long>& rGroupStartPositions, OStringBuffer& rGroupsBuffer)
2470 const size_t nGroupDepth = rArray.
GetDepth();
2472 for (
size_t nLevel = nGroupDepth - 1; nLevel != size_t(-1); --nLevel)
2474 size_t nIndex = rGroupIndexes[nLevel];
2475 if (nIndex ==
size_t(-1))
2480 if (nHeaderIndex < pEntry->GetStart())
2484 else if (nHeaderIndex == pEntry->
GetStart())
2486 rGroupStartPositions[nLevel] = nTotalPx - nSizePx;
2488 else if (nHeaderIndex > pEntry->
GetStart() && (nHeaderIndex < nEnd && nHeaderIndex < pEntry->
GetEnd()))
2491 if (rGroupStartPositions[nLevel] < 0)
2492 rGroupStartPositions[nLevel] *= -1;
2495 if (nHeaderIndex == pEntry->
GetEnd() || (nHeaderIndex == nEnd && rGroupStartPositions[nLevel] != -1))
2500 auto len = rGroupsBuffer.getLength();
2501 if (len && rGroupsBuffer[len-1] ==
'}')
2503 rGroupsBuffer.append(
", ");
2506 bool bGroupHidden = pEntry->
IsHidden();
2508 rGroupsBuffer.append(
2509 "{ \"level\": " + OString::number(nLevel + 1) +
", "
2510 "\"index\": " + OString::number(nIndex) +
", "
2511 "\"startPos\": " + OString::number(rGroupStartPositions[nLevel]) +
", "
2512 "\"endPos\": " + OString::number(nTotalPx) +
", "
2513 "\"hidden\": " + OString::number(bGroupHidden ? 1 : 0) +
" }");
2516 bool bFound =
false;
2518 while (nIndex < rArray.
GetCount(nLevel))
2520 pEntry = rArray.
GetEntry(nLevel, nIndex);
2526 if (pEntry && pEntry->
GetStart() > nEnd)
2532 rGroupIndexes[nLevel] = bFound ?
nIndex : -1;
2533 rGroupStartPositions[nLevel] = -1;
2539class ScRangeProvider
2544 mrViewData(rViewData)
2548 rArea.
Top() * mrViewData.GetPPTY(),
2549 rArea.
Right() * mrViewData.GetPPTX(),
2550 rArea.
Bottom() * mrViewData.GetPPTY());
2551 calculateBounds(aAreaPx);
2554 const ScRange& getCellRange()
const
2561 rStartColPos = maBoundPositions.Left();
2562 rEndColPos = maBoundPositions.Right();
2567 rStartRowPos = maBoundPositions.Top();
2568 rEndRowPos = maBoundPositions.Bottom();
2575 SCCOLROW nStartCol = -1, nEndCol = -1;
2576 calculateDimensionBounds(rAreaPx.
Left(), rAreaPx.
Right(),
true,
2577 nStartCol, nEndCol, nLeftPx, nRightPx,
2578 mnEnlargeX, mrViewData);
2580 SCCOLROW nStartRow = -1, nEndRow = -1;
2581 calculateDimensionBounds(rAreaPx.
Top(), rAreaPx.
Bottom(),
false,
2582 nStartRow, nEndRow, nTopPx, nBottomPx,
2583 mnEnlargeY, mrViewData);
2585 maRange.aStart.Set(nStartCol, nStartRow, mrViewData.GetTabNo());
2586 maRange.aEnd.Set(nEndCol, nEndRow, mrViewData.GetTabNo());
2588 maBoundPositions.SetLeft(nLeftPx);
2589 maBoundPositions.SetRight(nRightPx);
2590 maBoundPositions.SetTop(nTopPx);
2591 maBoundPositions.SetBottom(nBottomPx);
2596 bool bColumns,
SCCOLROW& rStartIndex,
2607 aBoundsProvider.Compute(rStartNearest, rEndNearest, nStartPos, nEndPos);
2608 aBoundsProvider.EnlargeBy(nEnlarge);
2611 SCCOL nStartCol = -1, nEndCol = -1;
2612 aBoundsProvider.GetStartIndexAndPosition(nStartCol, rBoundStart);
2613 aBoundsProvider.GetEndIndexAndPosition(nEndCol, rBoundEnd);
2614 rStartIndex = nStartCol;
2615 rEndIndex = nEndCol;
2619 SCROW nStartRow = -1, nEndRow = -1;
2620 aBoundsProvider.GetStartIndexAndPosition(nStartRow, rBoundStart);
2621 aBoundsProvider.GetEndIndexAndPosition(nEndRow, rBoundEnd);
2622 rStartIndex = nStartRow;
2623 rEndIndex = nEndRow;
2632 static const SCCOLROW mnEnlargeX = 2;
2633 static const SCCOLROW mnEnlargeY = 2;
2636void lcl_ExtendTiledDimension(
bool bColumn,
const SCCOLROW nEnd,
const SCCOLROW nExtra,
2645 if (nMaxTiledIndex >= nHardLimit)
2648 if (nEnd <= nMaxTiledIndex - nExtra)
2653 Size aOldSize(0, 0);
2657 SCCOLROW nNewMaxTiledIndex = std::min(std::max(nEnd, nMaxTiledIndex) + nExtra, nHardLimit);
2664 Size aNewSize(0, 0);
2668 if (aOldSize == aNewSize)
2677 tools::Rectangle(aOldSize.getWidth(), 0, aNewSize.getWidth(), aNewSize.getHeight()):
2678 tools::
Rectangle(0, aOldSize.getHeight(), aNewSize.getWidth(), aNewSize.getHeight());
2689 ss << aNewSize.Width() <<
", " << aNewSize.Height();
2690 OString sSize = ss.str().c_str();
2691 ScModelObj* pModel = comphelper::getFromUnoTunnel<ScModelObj>(
2707 rJsonWriter.
put(
"commandName",
".uno:ViewRowColumnHeaders");
2710 SCROW nStartRow = -1;
2713 SCCOL nStartCol = -1;
2721 ScRangeProvider aRangeProvider(rRectangle,
false,
aViewData);
2722 const ScRange& rCellRange = aRangeProvider.getCellRange();
2728 if (rRectangle.
Top() < rRectangle.
Bottom())
2730 SAL_INFO(
"sc.lok.header",
"Row Header: compute start/end rows.");
2733 nEndRow = rCellRange.
aEnd.
Row();
2734 aRangeProvider.getRowPositions(nStartHeightPx, nEndHeightPx);
2745 sal_Int32 nVisibleRows = nEndRow - nStartRow;
2746 if (nVisibleRows < 25)
2749 SAL_INFO(
"sc.lok.header",
"Row Header: visible rows: " << nVisibleRows);
2758 size_t nRowGroupDepth = 0;
2759 std::vector<size_t> aRowGroupIndexes;
2760 if (bRangeHeaderSupport && pTable)
2762 nRowGroupDepth = pRowArray->
GetDepth();
2763 lcl_getGroupIndexes(*pRowArray, nStartRow, nEndRow, aRowGroupIndexes);
2768 lcl_ExtendTiledDimension(
false, nEndRow, nVisibleRows, *
this,
aViewData);
2774 OStringBuffer aRowGroupsBuffer =
"\"rowGroups\": [\n";
2776 auto rowsNode = rJsonWriter.
startArray(
"rows");
2778 SAL_INFO(
"sc.lok.header",
"Row Header: [create string data for rows]: start row: "
2779 << nStartRow <<
" start height: " << nTotalPixels);
2781 if (nStartRow != nEndRow)
2784 rJsonWriter.
put(
"text", nStartRow + 1);
2785 rJsonWriter.
put(
"size", nTotalPixels);
2786 rJsonWriter.
put(
"groupLevels",
static_cast<sal_Int64
>(nRowGroupDepth));
2789 std::vector<tools::Long> aRowGroupStartPositions(nRowGroupDepth, -nTotalPixels);
2790 for (
SCROW nRow = nStartRow + 1; nRow <= nEndRow; ++nRow)
2794 nTotalPixels += nSizePx;
2796 if (bRangeHeaderSupport && nRowGroupDepth > 0)
2798 lcl_createGroupsData(nRow, nEndRow, nSizePx, nTotalPixels,
2799 *pRowArray, aRowGroupIndexes, aRowGroupStartPositions,
2803 if (bRangeHeaderSupport && nRow < nEndRow && nSizePx == nPrevSizePx)
2805 nPrevSizePx = nSizePx;
2809 rJsonWriter.
put(
"size", nTotalPixels);
2812 aRowGroupsBuffer.append(
"]");
2814 if (nRowGroupDepth > 0)
2816 aRowGroupsBuffer.append(
",\n");
2817 rJsonWriter.
putRaw(aRowGroupsBuffer);
2826 if (rRectangle.
Left() < rRectangle.
Right())
2828 SAL_INFO(
"sc.lok.header",
"Column Header: compute start/end columns.");
2831 nEndCol = rCellRange.
aEnd.
Col();
2832 aRangeProvider.getColPositions(nStartWidthPx, nEndWidthPx);
2843 sal_Int32 nVisibleCols = nEndCol - nStartCol;
2844 if (nVisibleCols < 10)
2853 size_t nColGroupDepth = 0;
2854 std::vector<size_t> aColGroupIndexes;
2855 if (bRangeHeaderSupport && pTable)
2857 nColGroupDepth = pColArray->
GetDepth();
2858 lcl_getGroupIndexes(*pColArray, nStartCol, nEndCol, aColGroupIndexes);
2863 lcl_ExtendTiledDimension(
true, nEndCol, nVisibleCols, *
this,
aViewData);
2866 OStringBuffer aColGroupsBuffer =
"\"columnGroups\": [\n";
2868 auto columnsNode = rJsonWriter.
startArray(
"columns");
2870 nTotalPixels = nStartWidthPx;
2871 SAL_INFO(
"sc.lok.header",
"Col Header: [create string data for cols]: start col: "
2872 << nStartRow <<
" start width: " << nTotalPixels);
2874 if (nStartCol != nEndCol)
2877 rJsonWriter.
put(
"text",
static_cast<sal_Int64
>(nStartCol + 1));
2878 rJsonWriter.
put(
"size", nTotalPixels);
2879 rJsonWriter.
put(
"groupLevels",
static_cast<sal_Int64
>(nColGroupDepth));
2882 std::vector<tools::Long> aColGroupStartPositions(nColGroupDepth, -nTotalPixels);
2884 for (
SCCOL nCol = nStartCol + 1; nCol <= nEndCol; ++nCol)
2888 nTotalPixels += nSizePx;
2890 if (bRangeHeaderSupport && nColGroupDepth > 0)
2891 lcl_createGroupsData(nCol, nEndCol, nSizePx, nTotalPixels,
2892 *pColArray, aColGroupIndexes,
2893 aColGroupStartPositions, aColGroupsBuffer);
2895 if (bRangeHeaderSupport && nCol < nEndCol && nSizePx == nPrevSizePx)
2897 nPrevSizePx = nSizePx;
2899 OUString aText = bRangeHeaderSupport ?
2903 rJsonWriter.
put(
"text", aText);
2904 rJsonWriter.
put(
"size", nTotalPixels);
2907 aColGroupsBuffer.append(
"]");
2909 if (nColGroupDepth > 0)
2911 aColGroupsBuffer.append(
",\n");
2912 rJsonWriter.
putRaw(aColGroupsBuffer);
2919 aNewVisArea.
Exclude(aOldVisArea);
2929 bool bFiltered,
bool bGroups)
2933 boost::property_tree::ptree aTree;
2934 aTree.put(
"commandName",
".uno:SheetGeometryData");
2935 aTree.put(
"maxtiledcolumn", rDoc.
MaxCol());
2938 auto getJSONString = [](
const boost::property_tree::ptree& rTree) {
2940 boost::property_tree::write_json(aStream, rTree);
2941 return aStream.str();
2944 if ((!bSizes && !bHidden && !bFiltered && !bGroups) ||
2945 (!bColumns && !bRows))
2947 return getJSONString(aTree).c_str();
2957 const GeomEntry aGeomEntries[] = {
2964 struct DimensionEntry
2971 const DimensionEntry aDimEntries[] = {
2972 {
"columns",
true, bColumns },
2973 {
"rows",
false, bRows }
2978 for (
const auto& rDimEntry : aDimEntries)
2980 if (!rDimEntry.bEnabled)
2983 bool bDimIsCol = rDimEntry.bDimIsCol;
2985 boost::property_tree::ptree aDimTree;
2986 for (
const auto& rGeomEntry : aGeomEntries)
2988 if (!rGeomEntry.bEnabled)
2991 OString aGeomDataEncoding = rDoc.
dumpSheetGeomData(nTab, bDimIsCol, rGeomEntry.eType);
2993 aDimTree.put(rGeomEntry.pKey, aGeomDataEncoding.getStr());
2996 aTree.add_child(rDimEntry.pKey, aDimTree);
2999 return getJSONString(aTree).c_str();
3005 "extendTiledAreaIfNeeded: START: ClientView: ColRange["
3012 if (rVisArea.
Top() >= rVisArea.
Bottom() ||
3020 ScRangeProvider aRangeProvider(rVisArea,
false,
aViewData);
3022 const ScRange& rCellRange = aRangeProvider.getCellRange();
3029 tools::Long nStartColPos, nEndColPos, nStartRowPos, nEndRowPos;
3030 aRangeProvider.getColPositions(nStartColPos, nEndColPos);
3031 aRangeProvider.getRowPositions(nStartRowPos, nEndRowPos);
3041 rWidthHelper.
insert(nStartCol, nStartColPos);
3048 rWidthHelper.
insert(nEndCol, nEndColPos);
3057 rHeightHelper.
insert(nStartRow, nStartRowPos);
3064 rHeightHelper.
insert(nEndRow, nEndRowPos);
3068 constexpr SCCOL nMinExtraCols = 10;
3069 SCCOL nExtraCols = std::max<SCCOL>(nMinExtraCols, nEndCol - nStartCol);
3072 lcl_ExtendTiledDimension(
true, nEndCol, nExtraCols, *
this,
aViewData);
3074 constexpr SCROW nMinExtraRows = 25;
3075 SCROW nExtraRows = std::max(nMinExtraRows, nEndRow - nStartRow);
3078 lcl_ExtendTiledDimension(
false, nEndRow, nExtraRows, *
this,
aViewData);
3083 aNewVisCellRange.
Exclude(aOldVisCellRange);
3085 if (!aChangedCellRange.
IsEmpty())
3089 aChangedCellRange.
Right(), aChangedCellRange.
Bottom());
3093 "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
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() 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
virtual 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)