145 lines
3.6 KiB
C
145 lines
3.6 KiB
C
|
//========= Copyright Valve Corporation, All rights reserved. ============//
|
||
|
//
|
||
|
//=============================================================================
|
||
|
|
||
|
#ifndef DUAL_PANEL_LIST_H
|
||
|
#define DUAL_PANEL_LIST_H
|
||
|
|
||
|
#if defined( _WIN32 )
|
||
|
#pragma once
|
||
|
#endif
|
||
|
|
||
|
#include <utllinkedlist.h>
|
||
|
#include <utlvector.h>
|
||
|
#include <vgui/VGUI.h>
|
||
|
#include <vgui_controls/Panel.h>
|
||
|
|
||
|
class KeyValues;
|
||
|
|
||
|
//-----------------------------------------------------------------------------
|
||
|
// Purpose: A list of variable height child panels
|
||
|
// each list item consists of a label-panel pair. Height of the item is
|
||
|
// determined from the lable.
|
||
|
//-----------------------------------------------------------------------------
|
||
|
class CDualPanelList : public vgui::Panel
|
||
|
{
|
||
|
DECLARE_CLASS_SIMPLE( CDualPanelList, vgui::Panel );
|
||
|
|
||
|
public:
|
||
|
CDualPanelList( vgui::Panel *parent, char const *panelName );
|
||
|
~CDualPanelList();
|
||
|
|
||
|
// DATA & ROW HANDLING
|
||
|
// The list now owns the panel
|
||
|
virtual int AddItem( vgui::Panel *labelPanel, vgui::Panel *panel );
|
||
|
int GetItemCount() const;
|
||
|
int GetItemIDFromRow( int nRow ) const;
|
||
|
|
||
|
// Iteration. Use these until they return InvalidItemID to iterate all the items.
|
||
|
int FirstItem() const;
|
||
|
int NextItem( int nItemID ) const;
|
||
|
int InvalidItemID() const;
|
||
|
|
||
|
virtual Panel *GetItemLabel( int itemID );
|
||
|
virtual Panel *GetItemPanel( int itemID );
|
||
|
virtual bool IsItemVisible( int nItemID ) const;
|
||
|
virtual void SetItemVisible( int nItemID, bool bVisible );
|
||
|
|
||
|
// vgui::ScrollBar *GetScrollbar() { return m_pScrollBar; }
|
||
|
|
||
|
virtual void RemoveItem( int itemID ); // removes an item from the table (changing the indices of all following items)
|
||
|
virtual void DeleteAllItems(); // clears and deletes all the memory used by the data items
|
||
|
void RemoveAll();
|
||
|
|
||
|
// painting
|
||
|
virtual vgui::Panel *GetCellRenderer( int row );
|
||
|
|
||
|
// layout
|
||
|
void SetFirstColumnWidth( int width );
|
||
|
int GetFirstColumnWidth();
|
||
|
void SetNumColumns( int iNumColumns );
|
||
|
int GetNumColumns( void );
|
||
|
// void MoveScrollBarToTop();
|
||
|
|
||
|
// selection
|
||
|
void SetSelectedPanel( vgui::Panel *panel );
|
||
|
Panel *GetSelectedPanel();
|
||
|
/*
|
||
|
On a panel being selected, a message gets sent to it
|
||
|
"PanelSelected" int "state"
|
||
|
where state is 1 on selection, 0 on deselection
|
||
|
*/
|
||
|
|
||
|
void SetVerticalBufferPixels( int buffer );
|
||
|
|
||
|
void ScrollToItem( int itemNumber );
|
||
|
|
||
|
CUtlVector< int > *GetSortedVector( void )
|
||
|
{
|
||
|
return &m_SortedItems;
|
||
|
}
|
||
|
|
||
|
protected:
|
||
|
// overrides
|
||
|
virtual void OnSizeChanged(int wide, int tall);
|
||
|
MESSAGE_FUNC_INT( OnSliderMoved, "ScrollBarSliderMoved", position );
|
||
|
virtual void PerformLayout();
|
||
|
virtual void ApplySchemeSettings(vgui::IScheme *pScheme);
|
||
|
virtual void OnMouseWheeled(int delta);
|
||
|
|
||
|
private:
|
||
|
int ComputeVPixelsNeeded();
|
||
|
|
||
|
enum { DEFAULT_HEIGHT = 24, PANELBUFFER = 5 };
|
||
|
|
||
|
class CDataItem
|
||
|
{
|
||
|
public:
|
||
|
CDataItem()
|
||
|
: m_bVisible( true )
|
||
|
{
|
||
|
}
|
||
|
|
||
|
void SetVisible( int bVisible )
|
||
|
{
|
||
|
m_bVisible = bVisible;
|
||
|
|
||
|
if ( panel )
|
||
|
{
|
||
|
panel->SetVisible( m_bVisible );
|
||
|
}
|
||
|
|
||
|
if ( labelPanel )
|
||
|
{
|
||
|
labelPanel->SetVisible( m_bVisible );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
bool IsVisible() const { return m_bVisible; }
|
||
|
|
||
|
// Always store a panel pointer
|
||
|
vgui::Panel *panel;
|
||
|
vgui::Panel *labelPanel;
|
||
|
bool m_bVisible;
|
||
|
};
|
||
|
|
||
|
// list of the column headers
|
||
|
|
||
|
CUtlLinkedList< CDataItem, int> m_DataItems;
|
||
|
CUtlVector<int> m_SortedItems;
|
||
|
|
||
|
vgui::ScrollBar *m_pScrollBar;
|
||
|
vgui::Panel *m_pPanelEmbedded;
|
||
|
|
||
|
vgui::PHandle m_hSelectedItem;
|
||
|
int m_iFirstColumnWidth;
|
||
|
int m_nNumColumns;
|
||
|
int m_iDefaultHeight;
|
||
|
int m_iPanelBuffer;
|
||
|
|
||
|
// CPanelAnimationVar( bool, m_bAutoHideScrollbar, "autohide_scrollbar", "0" );
|
||
|
};
|
||
|
|
||
|
|
||
|
#endif // DUAL_PANEL_LIST_H
|