Kaydet (Commit) 5c8de864 authored tarafından Caolán McNamara's avatar Caolán McNamara

calc item width on request

Change-Id: Ifa56a903b3c3a3962fd2ecf76ff101976e17fc05
Reviewed-on: https://gerrit.libreoffice.org/72600
Tested-by: Jenkins
Reviewed-by: 's avatarCaolán McNamara <caolanm@redhat.com>
Tested-by: 's avatarCaolán McNamara <caolanm@redhat.com>
üst d6d82d3f
......@@ -119,6 +119,8 @@ public:
SvTreeListEntry* pEntry,
SvViewDataItem* pViewData = nullptr) override;
virtual int CalcWidth(const SvTreeListBox* pView) const override;
void Emphasize(bool bEmphasize) { mbEmphasized = bEmphasize; }
bool IsEmphasized() const { return mbEmphasized; }
......
......@@ -140,9 +140,10 @@ public:
SvLBoxItem();
virtual ~SvLBoxItem();
virtual SvLBoxItemType GetType() const = 0;
virtual int CalcWidth(const SvTreeListBox* pView) const;
int GetWidth(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const;
int GetWidth(const SvTreeListBox* pView, const SvViewDataEntry* pData, sal_uInt16 nItemPos);
int GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const;
static int GetWidth(const SvViewDataEntry* pData, sal_uInt16 nItemPos);
static int GetHeight(const SvViewDataEntry* pData, sal_uInt16 nItemPos);
void Enable(bool bEnabled) { mbDisabled = !bEnabled; }
......
......@@ -26,6 +26,8 @@
#include <vector>
class SvTreeListBox;
struct SvViewDataItem
{
int mnWidth = 0;
......
......@@ -206,7 +206,8 @@ void IconView::PaintEntry(SvTreeListEntry& rEntry, long nX, long nY,
// draw icon
if(nIconItem != nItemCount && nIconItem < nItemCount)
{
auto nItemWidth = SvLBoxItem::GetWidth(pViewDataEntry, nIconItem);
SvLBoxItem* pItem = &rEntry.GetItem(nIconItem);
auto nItemWidth = pItem->GetWidth(this, pViewDataEntry, nIconItem);
auto nItemHeight = SvLBoxItem::GetHeight(pViewDataEntry, nIconItem);
aEntryPos.setX( nX );
......@@ -219,8 +220,6 @@ void IconView::PaintEntry(SvTreeListEntry& rEntry, long nX, long nY,
aEntryPos.AdjustY( -10 );
SvLBoxItem* pItem = &rEntry.GetItem(nIconItem);
pItem->Paint(aEntryPos, *this, rRenderContext, pViewDataEntry, rEntry);
}
......
......@@ -244,13 +244,18 @@ void SvLBoxString::InitViewData(
pView->Control::SetFont( aFont );
}
pViewData->mnWidth = pView->GetTextWidth(maText);
pViewData->mnWidth = -1; // calc on demand
pViewData->mnHeight = pView->GetTextHeight();
if (mbEmphasized)
pView->Pop();
}
int SvLBoxString::CalcWidth(const SvTreeListBox* pView) const
{
return pView->GetTextWidth(maText);
}
// ***************************************************************
// class SvLBoxButton
// ***************************************************************
......
......@@ -306,7 +306,13 @@ SvLBoxItem::~SvLBoxItem()
int SvLBoxItem::GetWidth(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const
{
const SvViewDataItem* pViewData = pView->GetViewDataItem( pEntry, this );
return pViewData->mnWidth;
int nWidth = pViewData->mnWidth;
if (nWidth == -1)
{
nWidth = CalcWidth(pView);
const_cast<SvViewDataItem*>(pViewData)->mnWidth = nWidth;
}
return nWidth;
}
int SvLBoxItem::GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const
......@@ -315,10 +321,16 @@ int SvLBoxItem::GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEn
return pViewData->mnHeight;
}
int SvLBoxItem::GetWidth(const SvViewDataEntry* pData, sal_uInt16 nItemPos)
int SvLBoxItem::GetWidth(const SvTreeListBox* pView, const SvViewDataEntry* pData, sal_uInt16 nItemPos)
{
const SvViewDataItem& rIData = pData->GetItem(nItemPos);
return rIData.mnWidth;
int nWidth = rIData.mnWidth;
if (nWidth == -1)
{
nWidth = CalcWidth(pView);
const_cast<SvViewDataItem&>(rIData).mnWidth = nWidth;
}
return nWidth;
}
int SvLBoxItem::GetHeight(const SvViewDataEntry* pData, sal_uInt16 nItemPos)
......@@ -327,6 +339,11 @@ int SvLBoxItem::GetHeight(const SvViewDataEntry* pData, sal_uInt16 nItemPos)
return rIData.mnHeight;
}
int SvLBoxItem::CalcWidth(const SvTreeListBox* /*pView*/) const
{
return 0;
}
struct SvTreeListBoxImpl
{
bool m_bIsEmptyTextAllowed:1;
......@@ -2645,7 +2662,7 @@ void SvTreeListBox::PaintEntry1(SvTreeListEntry& rEntry, long nLine, vcl::Render
SvLBoxItem& rItem = rEntry.GetItem(nCurItem);
SvLBoxTabFlags nFlags = pTab->nFlags;
Size aSize(SvLBoxItem::GetWidth(pViewDataEntry, nCurItem),
Size aSize(rItem.GetWidth(this, pViewDataEntry, nCurItem),
SvLBoxItem::GetHeight(pViewDataEntry, nCurItem));
long nTabPos = GetTabPos(&rEntry, pTab);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment