summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/vcl/tabctrl.hxx2
-rw-r--r--vcl/source/control/tabctrl.cxx83
2 files changed, 46 insertions, 39 deletions
diff --git a/include/vcl/tabctrl.hxx b/include/vcl/tabctrl.hxx
index 956c5ece7a6b..bbbc3842463b 100644
--- a/include/vcl/tabctrl.hxx
+++ b/include/vcl/tabctrl.hxx
@@ -27,7 +27,7 @@
#include <vcl/EnumContext.hxx>
#include <vcl/NotebookbarContextControl.hxx>
-struct ImplTabItem;
+class ImplTabItem;
struct ImplTabCtrlData;
class TabPage;
class ListBox;
diff --git a/vcl/source/control/tabctrl.cxx b/vcl/source/control/tabctrl.cxx
index 9b269e8ef66c..190cb218b6be 100644
--- a/vcl/source/control/tabctrl.cxx
+++ b/vcl/source/control/tabctrl.cxx
@@ -44,9 +44,11 @@
#include <unordered_map>
#include <vector>
-struct ImplTabItem
+class ImplTabItem final
{
- sal_uInt16 mnId;
+ sal_uInt16 m_nId;
+
+public:
VclPtr<TabPage> mpTabPage;
OUString maText;
OUString maFormatText;
@@ -60,14 +62,20 @@ struct ImplTabItem
bool m_bVisible; ///< the tab / page can be visible
Image maTabImage;
- ImplTabItem()
- : mnId( 0 ), mpTabPage( nullptr ),
- mnLine( 0 ), mbFullVisible( false )
- , m_bEnabled(true)
- , m_bVisible(true)
- {}
+ ImplTabItem(sal_uInt16 nId);
+
+ sal_uInt16 id() const { return m_nId; }
};
+ImplTabItem::ImplTabItem(sal_uInt16 nId)
+ : m_nId(nId)
+ , mnLine(0)
+ , mbFullVisible(false)
+ , m_bEnabled(true)
+ , m_bVisible(true)
+{
+}
+
struct ImplTabCtrlData
{
std::unordered_map< int, int > maLayoutPageIdToLine;
@@ -209,7 +217,7 @@ ImplTabItem* TabControl::ImplGetItem( sal_uInt16 nId ) const
{
for (auto & item : mpTabCtrlData->maItemList)
{
- if( item.mnId == nId )
+ if (item.id() == nId)
return &item;
}
@@ -437,7 +445,7 @@ bool TabControl::ImplPlaceTabs( long nWidth )
nLineWidthAry[nLines] += aSize.Width();
nX += aSize.Width();
- if ( item.mnId == mnCurPageId )
+ if (item.id() == mnCurPageId)
nCurLine = nLines;
++nPos;
@@ -797,7 +805,7 @@ void TabControl::ImplDrawItem(vcl::RenderContext& rRenderContext, ImplTabItem co
nOff = 0;
// if this is the active Page, we have to draw a little more
- if (pItem->mnId == mnCurPageId)
+ if (pItem->id() == mnCurPageId)
{
nOff2 = 2;
if (!ImplGetSVData()->maNWFData.mbNoActiveTabTextRaise)
@@ -827,7 +835,7 @@ void TabControl::ImplDrawItem(vcl::RenderContext& rRenderContext, ImplTabItem co
ControlState nState = ControlState::NONE;
- if (pItem->mnId == mnCurPageId)
+ if (pItem->id() == mnCurPageId)
{
nState |= ControlState::SELECTED;
// only the selected item can be focused
@@ -1023,7 +1031,7 @@ void TabControl::MouseButtonDown( const MouseEvent& rMEvt )
ImplTabItem *pItem = ImplGetItem(rMEvt.GetPosPixel());
if (pItem && pItem->m_bEnabled)
- SelectTabPage(pItem->mnId);
+ SelectTabPage(pItem->id());
}
void TabControl::KeyInput( const KeyEvent& rKEvt )
@@ -1069,7 +1077,7 @@ void TabControl::Paint( vcl::RenderContext& rRenderContext, const tools::Rectang
ImplTabItem* pCurItem = nullptr;
for (auto & item : mpTabCtrlData->maItemList)
{
- if (item.mnId == mnCurPageId)
+ if (item.id() == mnCurPageId)
{
pCurItem = &item;
break;
@@ -1434,10 +1442,10 @@ void TabControl::Command( const CommandEvent& rCEvt )
ScopedVclPtrInstance<PopupMenu> aMenu;
for (auto const& item : mpTabCtrlData->maItemList)
{
- aMenu->InsertItem( item.mnId, item.maText, MenuItemBits::CHECKABLE | MenuItemBits::RADIOCHECK );
- if ( item.mnId == mnCurPageId )
- aMenu->CheckItem( item.mnId );
- aMenu->SetHelpId( item.mnId, item.maHelpId );
+ aMenu->InsertItem(item.id(), item.maText, MenuItemBits::CHECKABLE | MenuItemBits::RADIOCHECK);
+ if (item.id() == mnCurPageId)
+ aMenu->CheckItem(item.id());
+ aMenu->SetHelpId(item.id(), item.maHelpId);
}
sal_uInt16 nId = aMenu->Execute( this, aMenuPos );
@@ -1614,7 +1622,7 @@ void TabControl::InsertPage( sal_uInt16 nPageId, const OUString& rText,
ImplTabItem* pItem = nullptr;
if( nPos == TAB_APPEND || size_t(nPos) >= mpTabCtrlData->maItemList.size() )
{
- mpTabCtrlData->maItemList.emplace_back( );
+ mpTabCtrlData->maItemList.emplace_back(nPageId);
pItem = &mpTabCtrlData->maItemList.back();
if( mpTabCtrlData->mpListBox )
mpTabCtrlData->mpListBox->InsertEntry( rText );
@@ -1622,7 +1630,7 @@ void TabControl::InsertPage( sal_uInt16 nPageId, const OUString& rText,
else
{
std::vector< ImplTabItem >::iterator new_it =
- mpTabCtrlData->maItemList.insert( mpTabCtrlData->maItemList.begin() + nPos, ImplTabItem() );
+ mpTabCtrlData->maItemList.emplace(mpTabCtrlData->maItemList.begin() + nPos, nPageId);
pItem = &(*new_it);
if( mpTabCtrlData->mpListBox )
mpTabCtrlData->mpListBox->InsertEntry( rText, nPos);
@@ -1639,8 +1647,6 @@ void TabControl::InsertPage( sal_uInt16 nPageId, const OUString& rText,
mnCurPageId = nPageId;
// init new page item
- pItem->mnId = nPageId;
- pItem->mpTabPage = nullptr;
pItem->maText = rText;
pItem->mbFullVisible = false;
@@ -1664,7 +1670,7 @@ void TabControl::RemovePage( sal_uInt16 nPageId )
{
//remove page item
std::vector< ImplTabItem >::iterator it = mpTabCtrlData->maItemList.begin() + nPos;
- bool bIsCurrentPage = (it->mnId == mnCurPageId);
+ bool bIsCurrentPage = (it->id() == mnCurPageId);
mpTabCtrlData->maItemList.erase( it );
if( mpTabCtrlData->mpListBox )
{
@@ -1679,7 +1685,7 @@ void TabControl::RemovePage( sal_uInt16 nPageId )
if( ! mpTabCtrlData->maItemList.empty() )
{
- // don't do this by simply setting mnCurPageId to pFirstItem->mnId
+ // don't do this by simply setting mnCurPageId to pFirstItem->id()
// this leaves a lot of stuff (such trivia as _showing_ the new current page) undone
// instead, call SetCurPageId
// without this, the next (outside) call to SetCurPageId with the id of the first page
@@ -1687,7 +1693,7 @@ void TabControl::RemovePage( sal_uInt16 nPageId )
// will never be shown.
// 86875 - 05/11/2001 - frank.schoenheit@germany.sun.com
- SetCurPageId( mpTabCtrlData->maItemList[0].mnId );
+ SetCurPageId(mpTabCtrlData->maItemList[0].id());
}
}
@@ -1734,7 +1740,7 @@ void TabControl::SetPageEnabled( sal_uInt16 i_nPageId, bool i_bEnable )
i_bEnable ? ListBoxEntryFlags::NONE : (ListBoxEntryFlags::DisableSelection | ListBoxEntryFlags::DrawDisabled) );
// SetCurPageId will change to a valid page
- if (pItem->mnId == mnCurPageId)
+ if (pItem->id() == mnCurPageId)
SetCurPageId( mnCurPageId );
else if ( IsUpdateMode() )
Invalidate();
@@ -1752,7 +1758,7 @@ void TabControl::SetPageVisible( sal_uInt16 nPageId, bool bVisible )
mbFormat = true;
// SetCurPageId will change to a valid page
- if (pItem->mnId == mnCurPageId)
+ if (pItem->id() == mnCurPageId)
SetCurPageId(mnCurPageId);
else if (IsUpdateMode())
Invalidate();
@@ -1766,7 +1772,7 @@ sal_uInt16 TabControl::GetPageCount() const
sal_uInt16 TabControl::GetPageId( sal_uInt16 nPos ) const
{
if( size_t(nPos) < mpTabCtrlData->maItemList.size() )
- return mpTabCtrlData->maItemList[ nPos ].mnId;
+ return mpTabCtrlData->maItemList[nPos].id();
return 0;
}
@@ -1775,7 +1781,7 @@ sal_uInt16 TabControl::GetPagePos( sal_uInt16 nPageId ) const
sal_uInt16 nPos = 0;
for (auto const& item : mpTabCtrlData->maItemList)
{
- if ( item.mnId == nPageId )
+ if (item.id() == nPageId)
return nPos;
++nPos;
}
@@ -1788,7 +1794,7 @@ sal_uInt16 TabControl::GetPageId( const Point& rPos ) const
const auto &rList = mpTabCtrlData->maItemList;
const auto it = std::find_if(rList.begin(), rList.end(), [&rPos, this](const auto &item) {
return const_cast<TabControl*>(this)->ImplGetTabRect(&item).IsInside(rPos); });
- return (it != rList.end()) ? it->mnId : 0;
+ return (it != rList.end()) ? it->id() : 0;
}
sal_uInt16 TabControl::GetPageId( const TabPage& rPage ) const
@@ -1796,7 +1802,7 @@ sal_uInt16 TabControl::GetPageId( const TabPage& rPage ) const
const auto &rList = mpTabCtrlData->maItemList;
const auto it = std::find_if(rList.begin(), rList.end(), [&rPage](const auto &item) {
return item.mpTabPage == &rPage; });
- return (it != rList.end()) ? it->mnId : 0;
+ return (it != rList.end()) ? it->id() : 0;
}
sal_uInt16 TabControl::GetPageId( const OString& rName ) const
@@ -1804,7 +1810,7 @@ sal_uInt16 TabControl::GetPageId( const OString& rName ) const
const auto &rList = mpTabCtrlData->maItemList;
const auto it = std::find_if(rList.begin(), rList.end(), [&rName](const auto &item) {
return item.maTabName == rName; });
- return (it != rList.end()) ? it->mnId : 0;
+ return (it != rList.end()) ? it->id() : 0;
}
void TabControl::SetCurPageId( sal_uInt16 nPageId )
@@ -1815,13 +1821,13 @@ void TabControl::SetCurPageId( sal_uInt16 nPageId )
nPos++;
if( size_t(nPos) >= mpTabCtrlData->maItemList.size() )
nPos = 0;
- if( mpTabCtrlData->maItemList[nPos].mnId == nPageId )
+ if (mpTabCtrlData->maItemList[nPos].id() == nPageId)
break;
}
if( nPos != TAB_PAGE_NOTFOUND )
{
- nPageId = mpTabCtrlData->maItemList[nPos].mnId;
+ nPageId = mpTabCtrlData->maItemList[nPos].id();
if ( nPageId == mnCurPageId )
{
if ( mnActPageId )
@@ -1885,8 +1891,9 @@ void TabControl::SetTabPage( sal_uInt16 nPageId, TabPage* pTabPage )
// only set here, so that Resize does not reposition TabPage
pItem->mpTabPage = pTabPage;
queue_resize();
- if ( pItem->mnId == mnCurPageId )
- ImplChangeTabPage( pItem->mnId, 0 );
+
+ if (pItem->id() == mnCurPageId)
+ ImplChangeTabPage(pItem->id(), 0);
}
else
{
@@ -2096,7 +2103,7 @@ Size TabControl::ImplCalculateRequisition(sal_uInt16& nHeaderHeight) const
if (!pPage)
{
TabControl *pThis = const_cast<TabControl*>(this);
- pThis->SetCurPageId(item.mnId);
+ pThis->SetCurPageId(item.id());
pThis->ActivatePage();
pPage = item.mpTabPage;
}
@@ -2170,7 +2177,7 @@ std::vector<sal_uInt16> TabControl::GetPageIDs() const
std::vector<sal_uInt16> aIDs;
for (auto const& item : mpTabCtrlData->maItemList)
{
- aIDs.push_back(item.mnId);
+ aIDs.push_back(item.id());
}
return aIDs;