34 #include <bitmaps.hlst>
39 #include <osl/diagnose.h>
54 #define SMALLBUTTON_HSIZE 7
55 #define SMALLBUTTON_VSIZE 7
57 #define SMALLBUTTON_OFF_NORMAL_X 3
58 #define SMALLBUTTON_OFF_NORMAL_Y 3
60 #define TB_TEXTOFFSET 2
61 #define TB_IMAGETEXTOFFSET 3
62 #define TB_LINESPACING 3
63 #define TB_SPIN_SIZE 14
64 #define TB_SPIN_OFFSET 2
65 #define TB_BORDER_OFFSET1 4
66 #define TB_BORDER_OFFSET2 2
68 #define TB_MAXNOSCROLL 32765
70 #define TB_DRAGWIDTH 8 // the default width of the drag grip
72 #define TB_CALCMODE_HORZ 1
73 #define TB_CALCMODE_VERT 2
74 #define TB_CALCMODE_FLOAT 3
76 #define TB_WBLINESIZING (WB_SIZEABLE | WB_DOCKABLE | WB_SCROLL)
78 #define DOCK_LINEHSIZE (sal_uInt16(0x0001))
79 #define DOCK_LINEVSIZE (sal_uInt16(0x0002))
80 #define DOCK_LINERIGHT (sal_uInt16(0x1000))
81 #define DOCK_LINEBOTTOM (sal_uInt16(0x2000))
82 #define DOCK_LINELEFT (sal_uInt16(0x4000))
83 #define DOCK_LINETOP (sal_uInt16(0x8000))
84 #define DOCK_LINEOFFSET 3
106 DECL_LINK( SelectHdl, Accelerator&,
void );
159 return tmpButtonType;
171 if(
meAlign == WindowAlign::Top ||
meAlign == WindowAlign::Bottom )
185 rLeft = rTop = rRight = rBottom = 0;
197 if ( eAlign == WindowAlign::Top )
199 rLeft = borderwidth+dragwidth;
201 rRight = borderwidth;
204 else if ( eAlign == WindowAlign::Left )
207 rTop = borderwidth+dragwidth;
209 rBottom = borderwidth;
211 else if ( eAlign == WindowAlign::Bottom )
213 rLeft = borderwidth+dragwidth;
215 rRight = borderwidth;
216 rBottom = borderwidth;
221 rTop = borderwidth+dragwidth;
222 rRight = borderwidth;
223 rBottom = borderwidth;
242 bool bNativeOk =
false;
265 if (eAlign == WindowAlign::Top || eAlign == WindowAlign::Bottom)
267 int height =
static_cast<int>(0.6 * aSz.Height() + 0.5);
268 int i = (aSz.Height() - height) / 2;
272 int x = nDragWidth / 2;
274 i += 4 * fScaleFactor;
279 int width =
static_cast<int>(0.6 * aSz.Width() + 0.5);
280 int i = (aSz.Width() - width) / 2;
284 int y = nDragWidth / 2;
286 i += 4 * fScaleFactor;
307 Color startCol, endCol;
328 Size aLineSz(aFullSz);
353 Size aTopLineSz(aLineSz);
354 Size aBottomLineSz(aLineSz);
412 x += aTopLineSz.
Width();
414 while (x < (
mnDX - aBottomLineSz.
Width()))
417 x += aLineSz.
Width();
440 const bool bOldPaintLock =
mpData->mbIsPaintLocked;
441 mpData->mbIsPaintLocked =
true;
446 mpData->mbIsPaintLocked = bOldPaintLock;
496 bool bNativeOk =
false;
515 rRenderContext.
Pop();
523 if (!
mpData->mbNativeButtons &&
537 rRenderContext.
Pop();
560 if (
meAlign == WindowAlign::Bottom)
576 if (
meAlign == WindowAlign::Left ||
meAlign == WindowAlign::Right)
578 if (
meAlign == WindowAlign::Left)
601 if (
meAlign == WindowAlign::Bottom ||
meAlign == WindowAlign::Top )
622 for (
auto & item :
mpData->m_aItems)
624 if( item.IsClipped() )
640 bool bOldAssumeDocked =
mpData->mbAssumeDocked;
641 bool bOldAssumeFloating =
mpData->mbAssumeFloating;
647 mpData->mbAssumeDocked =
false;
648 mpData->mbAssumeFloating =
false;
652 mpData->mbAssumeDocked =
true;
660 mpData->mbAssumeDocked =
true;
661 ImplCalcBorder( WindowAlign::Left, nLeft, nTop, nRight, nBottom );
668 mpData->mbAssumeFloating =
true;
669 nLeft = nTop = nRight = nBottom = 0;
733 mpData->mbAssumeDocked = bOldAssumeDocked;
734 mpData->mbAssumeFloating = bOldAssumeFloating;
754 for (
auto const& item :
mpData->m_aItems)
756 if ( item.mbVisible )
760 tools::Long nTempSize = item.mpWindow->GetSizePixel().Width();
761 if ( nTempSize > nCalcSize )
762 nCalcSize = nTempSize;
766 if( item.maItemSize.Width() > nCalcSize )
767 nCalcSize = item.maItemSize.Width();
775 ImplToolItems::size_type nLines;
776 ImplToolItems::size_type nCalcLines;
777 ImplToolItems::size_type nTempLines;
783 nTempLines = nLines = nCalcLines;
801 while ((nCalcSize < upperBoundWidth) && (nLines < nTempLines));
802 if ( nTempLines < nLines )
855 Size aMinSize, aMaxSize;
909 if ( eAlign == WindowAlign::Left )
914 else if ( eAlign == WindowAlign::Top )
919 else if ( eAlign == WindowAlign::Right )
924 else if ( eAlign == WindowAlign::Bottom )
945 nCurSize = rPos.X() - rRect.
Left();
950 nCurSize = rPos.Y() - rRect.
Top();
955 nCurSize = rRect.
Right() - rPos.X();
960 nCurSize = rRect.
Bottom() - rPos.Y();
964 OSL_FAIL(
"ImplLineSizing: Trailing else" );
977 if ( nMaxSize < aWinSize.
Height() )
978 nMaxSize = aWinSize.
Height();
984 if ( nMaxSize < aWinSize.
Width() )
985 nMaxSize = aWinSize.
Width();
988 ImplToolItems::size_type
i = 1;
989 if ( nCurSize <= nOneLineSize )
990 nSize = nOneLineSize;
994 while ( (nSize < nCurSize) && (i < nMaxLines) )
1001 nSize = aSize.
Width();
1002 if ( nSize > nMaxSize )
1009 nSize = aSize.
Width();
1015 if ( nLineMode & DOCK_LINERIGHT )
1017 else if ( nLineMode & DOCK_LINEBOTTOM )
1019 else if ( nLineMode & DOCK_LINELEFT )
1028 : mpDragBox(nullptr)
1039 sal_uInt16 nDragLineMode )
1090 EndDragging(
false );
1154 mpIdle.reset(
new Idle(
"vcl::ToolBox maIdle update"));
1159 mpData->maDropdownTimer.SetTimeout( 250 );
1160 mpData->maDropdownTimer.SetInvokeHandler(
LINK(
this,
ToolBox, ImplDropdownLongClickHdl ) );
1161 mpData->maDropdownTimer.SetDebugName(
"vcl::ToolBox mpData->maDropdownTimer" );
1184 else if (Window::GetStyle() &
WB_3DLOOK)
1245 if (bForeground || bFont)
1264 Window::queue_resize(eReason);
1275 const OUString& rUIXMLDescription,
const css::uno::Reference<css::frame::XFrame> &rFrame)
1280 loadUI(pParent, rID, rUIXMLDescription, rFrame);
1332 for (
auto & item :
mpData->m_aItems)
1334 if ( item.mnId == nItemId )
1346 if( bNativeButtons )
1371 nDropDownArrowWidth *= 3;
1391 aNativeBounds, aNativeContent ) )
1393 aRect = aNativeBounds;
1398 if( nDropDownArrowWidth < nMinWidth )
1399 nDropDownArrowWidth = nMinWidth;
1400 if( nMinWidth >
mpData->mnMenuButtonWidth )
1401 mpData->mnMenuButtonWidth = nMinWidth;
1416 aNativeBounds, aNativeContent ) )
1418 aRect = aNativeBounds;
1428 aNativeBounds, aNativeContent ) )
1430 aRect = aNativeBounds;
1440 aNativeBounds, aNativeContent ) )
1442 aRect = aNativeBounds;
1448 if ( !
mpData->m_aItems.empty() )
1450 for (
auto & item :
mpData->m_aItems)
1452 item.mbVisibleText =
false;
1460 bImage = !!item.maImage;
1461 bText = !item.maText.isEmpty();
1463 if ( bImage || bText )
1466 item.mbEmptyBtn =
false;
1471 if ( bImage || !bText )
1473 item.maItemSize = item.maImage.GetSizePixel();
1479 item.mbVisibleText =
true;
1485 if ( bText || !bImage )
1489 item.mbVisibleText =
true;
1493 item.maItemSize = item.maImage.GetSizePixel();
1509 item.maItemSize.AdjustWidth(item.maImage.GetSizePixel().Width() );
1510 if ( item.maImage.GetSizePixel().Height() > item.maItemSize.Height() )
1511 item.maItemSize.setHeight( item.maImage.GetSizePixel().Height() );
1520 item.maItemSize.AdjustHeight(item.maImage.GetSizePixel().Height() );
1521 if ( item.maImage.GetSizePixel().Width() > item.maItemSize.Width() )
1522 item.maItemSize.setWidth( item.maImage.GetSizePixel().Width() );
1525 item.mbVisibleText = bText;
1530 item.maItemSize =
Size( nDefWidth, nDefHeight );
1531 item.mbEmptyBtn =
true;
1535 item.maContentSize = item.maItemSize;
1538 if ( item.mpWindow )
1540 tools::Long nHeight = item.mpWindow->GetSizePixel().Height();
1548 item.maItemSize.AdjustWidth(nDropDownArrowWidth );
1549 item.mnDropDownArrowWidth = nDropDownArrowWidth;
1554 if( item.mbVisibleText && !
mbHorz )
1557 item.maItemSize.setWidth( item.maItemSize.Height() );
1558 item.maItemSize.setHeight( tmp );
1560 tmp = item.maContentSize.Width();
1561 item.maContentSize.setWidth( item.maContentSize.Height() );
1562 item.maContentSize.setHeight( tmp );
1567 item.maItemSize =
Size( nDefWidth, nDefHeight );
1568 item.maContentSize = item.maItemSize;
1577 item.maItemSize.setWidth(w);
1578 item.maItemSize.setHeight(h);
1582 tools::Long nMinW = std::max(nMinWidth, item.maMinimalItemSize.Width());
1583 tools::Long nMinH = std::max(nMinHeight, item.maMinimalItemSize.Height());
1588 if( item.maItemSize.Width() < nMinW )
1590 nGrowContentWidth = nMinW - item.maItemSize.Width();
1591 item.maItemSize.setWidth( nMinW );
1593 if( item.maItemSize.Height() < nMinH )
1595 nGrowContentHeight = nMinH - item.maItemSize.Height();
1596 item.maItemSize.setHeight( nMinH );
1600 item.maContentSize.AdjustWidth(nGrowContentWidth );
1601 item.maContentSize.AdjustHeight(nGrowContentHeight );
1605 if ( item.maItemSize.Width() > nMaxWidth )
1606 nMaxWidth = item.maItemSize.Width();
1607 if ( item.maItemSize.Height() > nMaxHeight )
1608 nMaxHeight = item.maItemSize.Height();
1614 nMaxWidth = nDefWidth;
1615 nMaxHeight = nDefHeight;
1628 tools::Long nFixedWidth = nDefWidth+nDropDownArrowWidth;
1633 nMaxHeight = nFixedHeight;
1635 nMaxWidth = nFixedWidth;
1661 ImplToolItems::size_type nLines = 1;
1663 bool bBreak =
false;
1669 nMenuWidth =
mpData->maMenubuttonItem.maItemSize.Width();
1673 ImplToolItems::iterator it, lastVisible;
1674 for ( it =
mpData->m_aItems.begin(); it !=
mpData->m_aItems.end(); ++it )
1676 if ( it->mbVisible )
1680 it =
mpData->m_aItems.begin();
1681 while ( it !=
mpData->m_aItems.end() )
1683 it->mbBreak = bBreak;
1686 if ( it->mbVisible )
1695 nCurWidth = it->maItemSize.Width();
1697 nCurWidth = it->maItemSize.Height();
1699 if ( it->mpWindow && bCalcHorz )
1701 tools::Long nWinItemWidth = it->mpWindow->GetSizePixel().Width();
1702 if ( !
mbScroll || (nWinItemWidth <= nWidthTotal) )
1704 nCurWidth = nWinItemWidth;
1709 if ( it->mbEmptyBtn )
1718 if ( ( ( it == lastVisible ) && (nLineWidth+nCurWidth > nWidthTotal) &&
mbScroll ) ||
1719 ( ( it != lastVisible ) && (nLineWidth+nCurWidth+nMenuWidth > nWidthTotal) &&
mbScroll ) )
1724 nCurWidth = it->mnSepSize;
1725 if ( !
ImplIsFloatingMode() && ( it != lastVisible ) && (nLineWidth+nCurWidth+nMenuWidth > nWidthTotal) )
1738 (nLineStart == nGroupStart) )
1740 if ( nLineWidth > nMaxLineWidth )
1741 nMaxLineWidth = nLineWidth;
1744 nLineStart = it -
mpData->m_aItems.begin();
1745 nGroupStart = nLineStart;
1751 if ( nLastGroupLineWidth > nMaxLineWidth )
1752 nMaxLineWidth = nLastGroupLineWidth;
1757 nLineStart = nGroupStart;
1758 it =
mpData->m_aItems.begin() + nGroupStart;
1769 nLastGroupLineWidth = nLineWidth;
1770 nGroupStart = it -
mpData->m_aItems.begin();
1777 nLineWidth += nCurWidth;
1783 if ( pMaxLineWidth )
1785 if ( nLineWidth > nMaxLineWidth )
1786 nMaxLineWidth = nLineWidth;
1792 if( nMaxLineWidth < aMinWidth )
1793 nMaxLineWidth = aMinWidth;
1795 *pMaxLineWidth = nMaxLineWidth;
1807 Size aSize1( aCurrentSize );
1808 Size aSize2( aCurrentSize );
1817 if( aCurrentSize == aSize1 )
1825 Size aSz( aCurrentSize );
1829 ImplToolItems::size_type manyLines = 1000;
1832 aSz.
setHeight( nBorderY + nLineHeight * nLines );
1840 if( aSz.
Width() < aMinimalFloatSize.
Width() )
1845 if( aCurrentSize == aSize2 )
1855 if( dx1*dy1 < dx2*dy2 )
1856 aCurrentSize = aSize1;
1858 aCurrentSize = aSize2;
1860 return aCurrentSize;
1867 bool bLastSep(
true );
1868 ToolBox::ImplToolItems::iterator it;
1869 for ( it = rItems.begin(); it != rItems.end(); ++it )
1873 it->mbVisible =
false;
1877 if (std::any_of(it + 1, rItems.end(), [](
const ImplToolItem& rItem) {
1879 it->mbVisible =
true;
1883 else if ( it->mbVisible )
1895 mpData->ImplClearLayoutData();
1903 ImplToolItems::size_type nFormatLine;
1904 bool bMustFullPaint;
1974 if( nWinHeight > nLineSize )
1975 nLineSize = nWinHeight;
2013 if( nWinWidth > nLineSize )
2014 nLineSize = nWinWidth;
2026 for (
auto & item :
mpData->m_aItems)
2028 item.maRect = aEmptyRect;
2047 mpData->maMenubuttonItem.maRect = aEmptyRect;
2052 lcl_hideDoubleSeparators(
mpData->m_aItems );
2078 mpData->maMenubuttonItem.maRect.SetRight(
mnDX - 2 );
2079 mpData->maMenubuttonItem.maRect.SetTop( nTop );
2085 mpData->maMenubuttonItem.maRect.SetTop( nTop );
2088 mpData->maMenubuttonItem.maRect.SetLeft(
mpData->maMenubuttonItem.maRect.Right() -
mpData->mnMenuButtonWidth );
2109 mpData->maMenubuttonItem.maRect.SetBottom(
mnDY - 2 );
2110 mpData->maMenubuttonItem.maRect.SetLeft( nLeft );
2116 mpData->maMenubuttonItem.maRect.SetLeft( nLeft );
2119 mpData->maMenubuttonItem.maRect.SetTop(
mpData->maMenubuttonItem.maRect.Bottom() -
mpData->mnMenuButtonWidth );
2148 for (
auto & item :
mpData->m_aItems)
2150 item.mbShowWindow =
false;
2179 if ( !item.mbVisible || (nFormatLine <
mnCurLine) ||
2182 item.maCalcRect = aEmptyRect;
2199 nX = item.maRect.Left();
2200 item.maCalcRect.SetLeft( nX );
2207 if ( firstItemCenter > 0 )
2208 if ( firstItemCenter-aCurrentItemSize.Height()/2 > nY )
2209 item.maCalcRect.SetTop( firstItemCenter-aCurrentItemSize.Height()/2 );
2211 item.maCalcRect.SetTop( item.maRect.Top() );
2214 item.maCalcRect.SetTop( item.maRect.Top() );
2215 firstItemCenter = item.maRect.Top()+aCurrentItemSize.
Height()/2;
2218 item.maCalcRect.SetTop( nY+(nLineSize-aCurrentItemSize.Height())/2 );
2219 item.maCalcRect.SetRight( nX+aCurrentItemSize.Width()-1 );
2220 item.maCalcRect.SetBottom( item.maCalcRect.Top()+aCurrentItemSize.Height()-1 );
2221 nX += aCurrentItemSize.Width();
2225 item.maCalcRect.SetLeft( nX+(nLineSize-aCurrentItemSize.Width())/2 );
2226 item.maCalcRect.SetTop( nY );
2227 item.maCalcRect.SetRight( item.maCalcRect.Left()+aCurrentItemSize.Width()-1 );
2228 item.maCalcRect.SetBottom( nY+aCurrentItemSize.Height()-1 );
2229 nY += aCurrentItemSize.Height();
2234 if ( item.mpWindow )
2236 if ( item.mbShowWindow )
2238 Point aPos( item.maCalcRect.Left(), item.maCalcRect.Top() );
2240 assert( item.maCalcRect.Top() >= 0 );
2242 item.mpWindow->SetPosPixel( aPos );
2243 item.mpWindow->Show();
2246 item.mpWindow->Hide();
2281 if ( bMustFullPaint )
2298 if ( aOldMenubuttonRect !=
mpData->maMenubuttonItem.maRect )
2303 if ( pWrapper && aOldDragRect != pWrapper->
GetDragArea() )
2309 for (
auto const& item :
mpData->m_aItems)
2311 if ( item.maRect != item.maCalcRect )
2324 for (
auto & item :
mpData->m_aItems)
2325 item.maRect = item.maCalcRect;
2334 if (mnCurPos == ITEM_NOTFOUND ||
2338 mpData->mbDropDownByKeyboard =
false;
2339 mpData->maDropdownClickHdl.Call(
this );
2347 InvalidateItem(mnCurPos);
2349 mnCurPos = ITEM_NOTFOUND;
2352 mnMouseModifier = 0;
2360 if( mbFormat && mpData )
2398 const tools::Long y = rDropDownRect.
Top() + nMargin + (rDropDownRect.
getHeight() - (bRotate ? nSize : nHalfSize)) / 2;
2430 if (
mpData->maMenubuttonItem.maRect.IsEmpty())
2443 ImplErase(rRenderContext,
mpData->maMenubuttonItem.maRect, bHighlight);
2452 mpData->mbMenubuttonSelected = bHighlight;
2455 rRenderContext.
Pop();
2477 false,
false, bTmpUpper, bTmpLower, !
mbHorz);
2482 if ( nPos >=
mpData->m_aItems.size() - 1 )
2494 bool bNativeOk =
false;
2526 bool bChecked,
bool bEnabled,
bool bIsWindow )
2531 bool bNativeOk =
false;
2544 rRect, nState, aControlValue, OUString() );
2549 bChecked,
true, bIsWindow,
nullptr, 2);
2554 if (nPos >=
mpData->m_aItems.size())
2576 bool bHighContrastWhite =
false;
2580 bHighContrastWhite =
true;
2612 if ( nHighlight == 1 )
2617 ImplErase(rRenderContext, pItem->
maRect, nHighlight != 0, bHasOpenPopup );
2662 nImageOffY += (nBtnHeight-aImageSize.
Height())/2;
2668 nImageOffY += (nBtnHeight-aImageSize.
Height())/2;
2678 if( nHighlight != 0 )
2680 if( bHighContrastWhite )
2684 rRenderContext.
DrawImage(
Point( nImageOffX, nImageOffY ), *pImage, nImageStyle);
2688 bool bRotate =
false;
2698 ((
meAlign == WindowAlign::Left) || (
meAlign == WindowAlign::Right)) )
2706 nTextOffX += aTxtSize.
Height();
2707 nTextOffX += (nBtnWidth-aTxtSize.
Height())/2;
2713 rRenderContext.
SetFont(aRotateFont);
2720 nTextOffY += (nBtnHeight-aTxtSize.
Height())/2;
2731 nTextOffY += nBtnHeight - aTxtSize.
Height();
2749 0, pItem->
maText.getLength(), nTextStyle );
2758 bool bSetColor =
true;
2768 ImplErase(rRenderContext, aDropDownRect, nHighlight != 0, bHasOpenPopup);
2837 bool bWasKeyboardActivate =
mpData->mbDropDownByKeyboard;
2843 if( !bWasKeyboardActivate )
2907 if ( bNewIn !=
mbIn )
2918 if ( bNewIn !=
mbIn )
2935 if( mnCurPos < mpData->m_aItems.size() &&
2938 mpData->maDropdownTimer.Stop();
2954 if( mnCurPos < mpData->m_aItems.size() )
3044 bool bDrawHotSpot =
true;
3047 bool bFocusWindowIsAToolBoxChild =
false;
3055 bFocusWindowIsAToolBoxChild =
true;
3063 bDrawHotSpot =
false;
3086 if (
meAlign == WindowAlign::Left )
3093 if (
meAlign == WindowAlign::Top )
3103 bool bClearHigh =
true;
3106 ImplToolItems::size_type nTempPos = 0;
3107 for (
auto const& item :
mpData->m_aItems)
3109 if ( item.maRect.IsInside( aMousePos ) )
3123 if (
mpData->mbMenubuttonSelected )
3142 if ( !
HasFocus() && (bClearHigh || bMenuButtonHit) )
3144 if ( !bMenuButtonHit &&
mpData->mbMenubuttonSelected )
3163 if( bMenuButtonHit )
3197 ImplToolItems::size_type
i = 0;
3201 for (
auto const& item :
mpData->m_aItems)
3204 if ( item.maRect.IsInside( aMousePos ) )
3209 !item.mbShowWindow )
3221 if ( !
mpData->m_aItems[nNewPos].mbEnabled )
3255 ||
mpData->m_aItems[nNewPos].GetDropDownRect(
mbHorz ).IsInside( aMousePos ))
3260 mpData->mbDropDownByKeyboard =
false;
3261 mpData->maDropdownClickHdl.Call(
this );
3280 mpData->maDropdownTimer.Start();
3402 if (
mpData && nPosition < mpData->m_aItems.size())
3411 if (!
mpData->maMenubuttonItem.maRect.IsEmpty())
3426 if(
mpData->mbIsPaintLocked )
3452 ImplToolItems::size_type nHighPos;
3458 ImplToolItems::size_type
nCount =
mpData->m_aItems.size();
3459 for( ImplToolItems::size_type
i = 0;
i < nCount;
i++ )
3466 sal_uInt16 nHighlight = 0;
3469 else if (
i == nHighPos )
3498 std::vector<size_t> aExpandables;
3499 for (
size_t i = 0;
i <
mpData->m_aItems.size(); ++
i)
3501 if (
mpData->m_aItems[
i].mbExpand)
3504 SAL_INFO_IF(!pWindow,
"vcl.layout",
"only tabitems with window supported at the moment");
3509 aWinSize.
setWidth( aPrefSize.Width() );
3511 aExpandables.push_back(
i);
3516 if (
mbScroll || !aExpandables.empty() )
3518 if ( !
mbFormat || !aExpandables.empty() )
3525 if (!aExpandables.empty())
3534 auto nOptimalWidth = aBounds.
GetWidth();
3535 auto nDiff = aSize.
Width() - nOptimalWidth;
3536 decltype(nDiff) nExpandablesSize = aExpandables.size();
3537 nDiff /= nExpandablesSize;
3541 for (
size_t nIndex : aExpandables)
3546 aWinSize.
setWidth( aPrefSize.Width() + nDiff );
3569 if ( nOldDX >
mnDX )
3577 if ( nOldDY >
mnDY )
3587 bool DispatchableCommand(
const OUString& rName)
3589 return rName.startsWith(
".uno") ||
3590 rName.startsWith(
"slot:") ||
3591 rName.startsWith(
"macro:") ||
3592 rName.startsWith(
"vnd.sun.star.script");
3648 aTempRect.
SetTop( aPt.Y() );
3659 const OUString& rHelpStr =
GetHelpText( nItemId );
3660 if (!rHelpStr.isEmpty())
3679 sal_uInt16 nKeyCode = aKeyCode.
GetCode();
3687 bool bOldSchoolContainer =
3711 if(
mpData->mbMenubuttonWasLastSelected )
3714 mpData->mbMenubuttonSelected =
true;
3737 for (
auto const& item :
mpData->m_aItems)
3739 if ( item.mbVisible )
3741 if ( item.mpWindow && item.mpWindow->ImplIsWindowOrChild( rNEvt.
GetWindow() ) )
3755 mpData->mbMenubuttonWasLastSelected =
false;
3847 if ( Event.FeatureURL.Complete !=
".uno:ImageOrientation" )
3858 for (
auto const& item :
mpData->m_aItems)
3906 if ( (
meAlign == WindowAlign::Top) || (
meAlign == WindowAlign::Bottom) )
3941 bool bFloatMode =
false;
3953 ImplToolItems::size_type nTemp = 0;
3965 ImplToolItems::size_type nTemp = 0;
3969 rRect = aDockingRect;
3990 ImplToolItems::size_type nCalcLines;
3991 ImplToolItems::size_type nTemp;
4003 if ( nCalcLines < 1 )
4012 while ( (aTempSize.
Width() > rSize.
Width()) &&
4029 std::map<vcl::Window*, Size> aExpandables;
4035 SAL_INFO_IF(!pWindow,
"vcl.layout",
"only tabitems with window supported at the moment");
4039 aExpandables[pWindow] = aWinSize;
4041 aWinSize.
setWidth( aPrefSize.Width() );
4048 for (
auto const& expandable : aExpandables)
4051 Size aWinSize = expandable.second;
4071 ImplToolItems::size_type nLines = 0;
4073 for (
auto const& item :
mpData->m_aItems)
4091 nLines =
static_cast<ImplToolItems::size_type
>(ceil( sqrt( static_cast<double>(
GetItemCount()) ) ));
4095 mpData->mbAssumePopupMode =
true;
4099 mpData->mbAssumePopupMode = bPopup;
4112 bool bFloat =
mpData->mbAssumeFloating;
4113 bool bDocking =
mpData->mbAssumeDocked;
4116 mpData->mbAssumeFloating =
true;
4117 mpData->mbAssumeDocked =
false;
4122 mpData->mbAssumeFloating = bFloat;
4123 mpData->mbAssumeDocked = bDocking;
4138 for (
auto const& item :
mpData->m_aItems)
4140 pToolBox->
CopyItem( *
this, item.mnId );
4197 if( pToolItem && !pToolItem->
mbEnabled )
4255 if( pLastLevelFloat && pLastLevelFloat != pParent )
4276 if(
mpData->mbMenubuttonSelected )
4285 mpData->mbMenubuttonWasLastSelected =
true;
4298 mpData->mbDropDownByKeyboard =
true;
4299 mpData->maDropdownClickHdl.Call(
this );
4319 bool bForwardKey =
false;
4320 bool bGrabFocusToDocument =
false;
4435 bGrabFocusToDocument =
true;
4438 if( !bGrabFocusToDocument )
4449 sal_uInt16 aKeyGroup = aKeyCode.
GetGroup();
4479 if (
HasFocus() &&
mpData->mbKeyInputDisabled && bParentIsContainer)
4482 if ( pFocusControl && pFocusControl !=
this )
4487 if( bGrabFocusToDocument )
4500 ImplToolItems::size_type nLine = 1;
4501 for (
auto const& item :
mpData->m_aItems)
4505 if( &item == pCurrentItem)
4519 ImplToolItems::iterator it =
mpData->m_aItems.begin();
4520 while( it !=
mpData->m_aItems.end() )
4532 if( it ==
mpData->m_aItems.end() || it->mbBreak )
4540 return (it ==
mpData->m_aItems.end()) ?
nullptr : &(*it);
4547 for( ImplToolItems::size_type
nPos = 0;
nPos < rList.size(); ++
nPos )
4548 if( &rList[
nPos ] == pItem )
4585 if( !bNoGrabFocus && pItem != pOldItem && pOldItem && pOldItem->
mpWindow )
4622 if( pItem != pOldItem )
4641 if( bValid && bNotClipped && pItem->
IsClipped() )
4653 if(
mpData->mbMenubuttonSelected )
4655 mpData->mbMenubuttonSelected =
false;
4660 auto it = std::find_if(
mpData->m_aItems.rbegin(),
mpData->m_aItems.rend(),
4662 if( it !=
mpData->m_aItems.rend() )
4671 ImplToolItems::iterator it = std::find_if(
mpData->m_aItems.begin(),
mpData->m_aItems.end(),
4673 if( it !=
mpData->m_aItems.end() )
4685 ImplToolItems::iterator it = std::find_if(
mpData->m_aItems.begin(),
mpData->m_aItems.end(),
4692 mpData->mbMenubuttonSelected =
true;
4707 mpData->mbMenubuttonSelected =
true;
4713 auto it = std::find_if(
mpData->m_aItems.rbegin(),
mpData->m_aItems.rend(),
4715 if( it !=
mpData->m_aItems.rend() )
4727 ImplToolItems::size_type
nCount =
mpData->m_aItems.size();
4729 ImplToolItems::size_type
i=0;
4743 mpData->mbMenubuttonSelected =
true;
4753 if( ++pos >= nCount )
4762 mpData->mbMenubuttonSelected =
true;
4771 pToolItem = &
mpData->m_aItems[pos];
4776 }
while( ++i < nCount);
4782 mpData->mbMenubuttonSelected =
true;
4785 else if( i != nCount )
4811 mpData->mbMenubuttonWasLastSelected =
false;
4823 mpData->mbMenubuttonWasLastSelected =
true;
4825 mpData->mbMenubuttonSelected =
false;
void SetEndColor(const Color &rColor)
constexpr sal_uInt16 KEYGROUP_MISC
#define LINK(Instance, Class, Member)
void SetOutputSizePixel(const Size &rNewSize) override
Size GetSizePixel() const
const Color & GetShadowColor() const
bool IsControlBackground() const
const Color & GetToolTextColor() const
void Dragging(const Point &rPos)
WinBits const WB_NOSHADOW
GetFocusFlags GetGetFocusFlags() const
Point GetPointerPosPixel()
virtual bool PutValue(const css::uno::Any &rVal, sal_uInt8 nMemberId) override
void SetAntialiasing(AntialiasingFlags nMode)
void DrawImage(const Point &rPos, const Image &rImage, DrawImageFlags nStyle=DrawImageFlags::NONE)
This is an overloaded member function, provided for convenience. It differs from the above function o...
virtual void Tracking(const TrackingEvent &rTEvt) override
void setWidth(tools::Long nWidth)
bool GetNativeControlRegion(ControlType nType, ControlPart nPart, const tools::Rectangle &rControlRegion, ControlState nState, const ImplControlValue &aValue, tools::Rectangle &rNativeBoundingRegion, tools::Rectangle &rNativeContentRegion) const
Query the native control's actual drawing region (including adornment)
virtual void MouseButtonDown(const MouseEvent &rMEvt)
std::unique_ptr< ContentProperties > pData
VclPtr< ToolBox > mpDragBox
WinBits const WB_NODIALOGCONTROL
static Help * GetHelp()
Gets the application's help.
void DrawCtrlText(const Point &rPos, const OUString &rStr, sal_Int32 nIndex=0, sal_Int32 nLen=-1, DrawTextFlags nStyle=DrawTextFlags::Mnemonic, MetricVector *pVector=nullptr, OUString *pDisplayText=nullptr, const SalLayoutGlyphs *pGlyphs=nullptr)
void ImplDrawUpDownButtons(vcl::RenderContext &rRenderContext, const tools::Rectangle &rUpperRect, const tools::Rectangle &rLowerRect, bool bUpperIn, bool bLowerIn, bool bUpperEnabled, bool bLowerEnabled, bool bHorz, bool bMirrorHorz)
bool IsBackground() const
bool IsMirrored(const OUString &rsCommandName, const OUString &rsModuleName)
Resize runs before repaint, so we won't paint twice.
Point AbsoluteScreenToOutputPixel(const Point &rPos) const
#define SAL_INFO_IF(condition, area, stream)
MouseEventModifiers GetMode() const
const StyleSettings & GetStyleSettings() const
static const AllSettings & GetSettings()
Gets the application's settings.
const Color & GetFaceColor() const
BitmapEx const & GetPersonaHeader() const
const OUString & GetHelpText() const
SAL_DLLPRIVATE void ImplGrabFocus(GetFocusFlags nFlags)
const OUString & GetQuickHelpText() const
void DrawPolygon(const tools::Polygon &rPoly)
Render the given polygon.
DECL_LINK(SelectHdl, Accelerator &, void)
virtual Size GetSizePixel() const
SAL_DLLPRIVATE vcl::Window * ImplGetFrameWindow() const
virtual void SetSizePixel(const Size &rNewSize)
SAL_DLLPRIVATE WindowImpl * ImplGetWindowImpl() const