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: ...@@ -119,6 +119,8 @@ public:
SvTreeListEntry* pEntry, SvTreeListEntry* pEntry,
SvViewDataItem* pViewData = nullptr) override; SvViewDataItem* pViewData = nullptr) override;
virtual int CalcWidth(const SvTreeListBox* pView) const override;
void Emphasize(bool bEmphasize) { mbEmphasized = bEmphasize; } void Emphasize(bool bEmphasize) { mbEmphasized = bEmphasize; }
bool IsEmphasized() const { return mbEmphasized; } bool IsEmphasized() const { return mbEmphasized; }
......
...@@ -140,9 +140,10 @@ public: ...@@ -140,9 +140,10 @@ public:
SvLBoxItem(); SvLBoxItem();
virtual ~SvLBoxItem(); virtual ~SvLBoxItem();
virtual SvLBoxItemType GetType() const = 0; 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 SvTreeListEntry* pEntry) const;
int GetWidth(const SvTreeListBox* pView, const SvViewDataEntry* pData, sal_uInt16 nItemPos);
int GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const; 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); static int GetHeight(const SvViewDataEntry* pData, sal_uInt16 nItemPos);
void Enable(bool bEnabled) { mbDisabled = !bEnabled; } void Enable(bool bEnabled) { mbDisabled = !bEnabled; }
......
...@@ -26,6 +26,8 @@ ...@@ -26,6 +26,8 @@
#include <vector> #include <vector>
class SvTreeListBox;
struct SvViewDataItem struct SvViewDataItem
{ {
int mnWidth = 0; int mnWidth = 0;
......
...@@ -206,7 +206,8 @@ void IconView::PaintEntry(SvTreeListEntry& rEntry, long nX, long nY, ...@@ -206,7 +206,8 @@ void IconView::PaintEntry(SvTreeListEntry& rEntry, long nX, long nY,
// draw icon // draw icon
if(nIconItem != nItemCount && nIconItem < nItemCount) 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); auto nItemHeight = SvLBoxItem::GetHeight(pViewDataEntry, nIconItem);
aEntryPos.setX( nX ); aEntryPos.setX( nX );
...@@ -219,8 +220,6 @@ void IconView::PaintEntry(SvTreeListEntry& rEntry, long nX, long nY, ...@@ -219,8 +220,6 @@ void IconView::PaintEntry(SvTreeListEntry& rEntry, long nX, long nY,
aEntryPos.AdjustY( -10 ); aEntryPos.AdjustY( -10 );
SvLBoxItem* pItem = &rEntry.GetItem(nIconItem);
pItem->Paint(aEntryPos, *this, rRenderContext, pViewDataEntry, rEntry); pItem->Paint(aEntryPos, *this, rRenderContext, pViewDataEntry, rEntry);
} }
......
...@@ -244,13 +244,18 @@ void SvLBoxString::InitViewData( ...@@ -244,13 +244,18 @@ void SvLBoxString::InitViewData(
pView->Control::SetFont( aFont ); pView->Control::SetFont( aFont );
} }
pViewData->mnWidth = pView->GetTextWidth(maText); pViewData->mnWidth = -1; // calc on demand
pViewData->mnHeight = pView->GetTextHeight(); pViewData->mnHeight = pView->GetTextHeight();
if (mbEmphasized) if (mbEmphasized)
pView->Pop(); pView->Pop();
} }
int SvLBoxString::CalcWidth(const SvTreeListBox* pView) const
{
return pView->GetTextWidth(maText);
}
// *************************************************************** // ***************************************************************
// class SvLBoxButton // class SvLBoxButton
// *************************************************************** // ***************************************************************
......
...@@ -306,7 +306,13 @@ SvLBoxItem::~SvLBoxItem() ...@@ -306,7 +306,13 @@ SvLBoxItem::~SvLBoxItem()
int SvLBoxItem::GetWidth(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const int SvLBoxItem::GetWidth(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const
{ {
const SvViewDataItem* pViewData = pView->GetViewDataItem( pEntry, this ); 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 int SvLBoxItem::GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEntry) const
...@@ -315,10 +321,16 @@ int SvLBoxItem::GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEn ...@@ -315,10 +321,16 @@ int SvLBoxItem::GetHeight(const SvTreeListBox* pView, const SvTreeListEntry* pEn
return pViewData->mnHeight; 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); 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) int SvLBoxItem::GetHeight(const SvViewDataEntry* pData, sal_uInt16 nItemPos)
...@@ -327,6 +339,11 @@ 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; return rIData.mnHeight;
} }
int SvLBoxItem::CalcWidth(const SvTreeListBox* /*pView*/) const
{
return 0;
}
struct SvTreeListBoxImpl struct SvTreeListBoxImpl
{ {
bool m_bIsEmptyTextAllowed:1; bool m_bIsEmptyTextAllowed:1;
...@@ -2645,7 +2662,7 @@ void SvTreeListBox::PaintEntry1(SvTreeListEntry& rEntry, long nLine, vcl::Render ...@@ -2645,7 +2662,7 @@ void SvTreeListBox::PaintEntry1(SvTreeListEntry& rEntry, long nLine, vcl::Render
SvLBoxItem& rItem = rEntry.GetItem(nCurItem); SvLBoxItem& rItem = rEntry.GetItem(nCurItem);
SvLBoxTabFlags nFlags = pTab->nFlags; SvLBoxTabFlags nFlags = pTab->nFlags;
Size aSize(SvLBoxItem::GetWidth(pViewDataEntry, nCurItem), Size aSize(rItem.GetWidth(this, pViewDataEntry, nCurItem),
SvLBoxItem::GetHeight(pViewDataEntry, nCurItem)); SvLBoxItem::GetHeight(pViewDataEntry, nCurItem));
long nTabPos = GetTabPos(&rEntry, pTab); 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