From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- mp/src/vgui2/vgui_controls/CheckButtonList.cpp | 212 +++++++++++++++++++++++++ 1 file changed, 212 insertions(+) create mode 100644 mp/src/vgui2/vgui_controls/CheckButtonList.cpp (limited to 'mp/src/vgui2/vgui_controls/CheckButtonList.cpp') diff --git a/mp/src/vgui2/vgui_controls/CheckButtonList.cpp b/mp/src/vgui2/vgui_controls/CheckButtonList.cpp new file mode 100644 index 00000000..de47fd21 --- /dev/null +++ b/mp/src/vgui2/vgui_controls/CheckButtonList.cpp @@ -0,0 +1,212 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +//=============================================================================// + +#include +#include +#include +#include + +// memdbgon must be the last include file in a .cpp file!!! +#include + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CheckButtonList::CheckButtonList(Panel *parent, const char *name) : BaseClass(parent, name) +{ + m_pScrollBar = new ScrollBar(this, NULL, true); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +CheckButtonList::~CheckButtonList() +{ + RemoveAll(); +} + +//----------------------------------------------------------------------------- +// Purpose: adds a check button to the list +//----------------------------------------------------------------------------- +int CheckButtonList::AddItem(const char *itemText, bool startsSelected, KeyValues *userData) +{ + CheckItem_t newItem; + newItem.checkButton = new vgui::CheckButton(this, NULL, itemText); + newItem.checkButton->SetSilentMode( true ); + newItem.checkButton->SetSelected(startsSelected); + newItem.checkButton->SetSilentMode( false ); + newItem.checkButton->AddActionSignalTarget(this); + newItem.userData = userData; + InvalidateLayout(); + return m_CheckItems.AddToTail(newItem); +} + +//----------------------------------------------------------------------------- +// Purpose: clears the list +//----------------------------------------------------------------------------- +void CheckButtonList::RemoveAll() +{ + for (int i = 0; i < m_CheckItems.Count(); i++) + { + m_CheckItems[i].checkButton->MarkForDeletion(); + if (m_CheckItems[i].userData) + { + m_CheckItems[i].userData->deleteThis(); + } + } + + m_CheckItems.RemoveAll(); +} + +//----------------------------------------------------------------------------- +// Purpose: returns the number of items in list that are checked +//----------------------------------------------------------------------------- +int CheckButtonList::GetCheckedItemCount() +{ + int count = 0; + for (int i = 0; i < m_CheckItems.Count(); i++) + { + if (m_CheckItems[i].checkButton->IsSelected()) + { + count++; + } + } + + return count; +} + +//----------------------------------------------------------------------------- +// Purpose: lays out buttons +//----------------------------------------------------------------------------- +void CheckButtonList::PerformLayout() +{ + BaseClass::PerformLayout(); + + // get sizes + int x = 4, y = 4, wide = GetWide() - ((x * 2) + m_pScrollBar->GetWide()), tall = 22; + + // set scrollbar + int totalHeight = y + (m_CheckItems.Count() * tall); + if (totalHeight > GetTall()) + { + m_pScrollBar->SetRange(0, totalHeight + 1); + m_pScrollBar->SetRangeWindow(GetTall()); + m_pScrollBar->SetVisible(true); + m_pScrollBar->SetBounds(GetWide() - 21, 0, 19, GetTall() - 2); + SetPaintBorderEnabled(true); + y -= m_pScrollBar->GetValue(); + } + else + { + m_pScrollBar->SetVisible(false); + SetPaintBorderEnabled(false); + } + + // position the items + for (int i = 0; i < m_CheckItems.Count(); i++) + { + CheckButton *btn = m_CheckItems[i].checkButton; + btn->SetBounds(x, y, wide, tall); + y += tall; + } +} + +//----------------------------------------------------------------------------- +// Purpose: Sets the border on the window +//----------------------------------------------------------------------------- +void CheckButtonList::ApplySchemeSettings(IScheme *pScheme) +{ + BaseClass::ApplySchemeSettings(pScheme); + SetBorder(pScheme->GetBorder("ButtonDepressedBorder")); +} + +//----------------------------------------------------------------------------- +// Purpose: iteration +//----------------------------------------------------------------------------- +bool CheckButtonList::IsItemIDValid(int itemID) +{ + return m_CheckItems.IsValidIndex(itemID); +} + +//----------------------------------------------------------------------------- +// Purpose: iteration +//----------------------------------------------------------------------------- +int CheckButtonList::GetHighestItemID() +{ + return m_CheckItems.Count() - 1; +} + +//----------------------------------------------------------------------------- +// Purpose: iteration +//----------------------------------------------------------------------------- +KeyValues *CheckButtonList::GetItemData(int itemID) +{ + return m_CheckItems[itemID].userData; +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +int CheckButtonList::GetItemCount() +{ + return m_CheckItems.Count(); +} + +//----------------------------------------------------------------------------- +// Purpose: data accessor +//----------------------------------------------------------------------------- +bool CheckButtonList::IsItemChecked(int itemID) +{ + return m_CheckItems[itemID].checkButton->IsSelected(); +} + +//----------------------------------------------------------------------------- +// Purpose: Sets the state of the check button +//----------------------------------------------------------------------------- +void CheckButtonList::SetItemCheckable(int itemID, bool state) +{ + m_CheckItems[itemID].checkButton->SetCheckButtonCheckable(state); +} + +//----------------------------------------------------------------------------- +// Purpose: Forwards up check button selected message +//----------------------------------------------------------------------------- +void CheckButtonList::OnCheckButtonChecked( KeyValues *pParams ) +{ + vgui::Panel *pPanel = (vgui::Panel *)pParams->GetPtr( "panel" ); + int c = m_CheckItems.Count(); + for ( int i = 0; i < c; ++i ) + { + if ( pPanel == m_CheckItems[i].checkButton ) + { + KeyValues *kv = new KeyValues( "CheckButtonChecked", "itemid", i ); + kv->SetInt( "state", pParams->GetInt( "state" ) ); + PostActionSignal( kv ); + break; + } + } +} + +//----------------------------------------------------------------------------- +// Purpose: updates from scrollbar movement +//----------------------------------------------------------------------------- +void CheckButtonList::OnScrollBarSliderMoved() +{ + InvalidateLayout(); + Repaint(); +} + +//----------------------------------------------------------------------------- +// Purpose: Mouse wheeled +//----------------------------------------------------------------------------- +void CheckButtonList::OnMouseWheeled(int delta) +{ + int val = m_pScrollBar->GetValue(); + val -= (delta * 15); + m_pScrollBar->SetValue(val); +} -- cgit v1.2.3