Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//========= 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
|