source-engine/game/client/cstrike/VGUI/buypreset_listbox.h
2022-06-05 01:13:13 +03:00

86 lines
3.1 KiB
C++

//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
//=============================================================================
#ifndef BUYPRESET_LISTBOX_H
#define BUYPRESET_LISTBOX_H
#ifdef _WIN32
#pragma once
#endif
#include <vgui/VGUI.h>
#include <vgui_controls/Panel.h>
#include <utlvector.h>
//--------------------------------------------------------------------------------------------------------------
/**
* ListBox-style control with behavior needed by weapon lists for BuyPreset editing
*/
class BuyPresetListBox : public vgui::Panel
{
DECLARE_CLASS_SIMPLE( BuyPresetListBox, vgui::Panel );
public:
BuyPresetListBox( vgui::Panel *parent, char const *panelName );
~BuyPresetListBox();
class IBuyPresetListBoxUserData
{
protected:
friend BuyPresetListBox;
virtual ~IBuyPresetListBoxUserData() {};
};
virtual int AddItem( vgui::Panel *panel, IBuyPresetListBoxUserData *userData ); ///< Adds an item to the end of the listbox. UserData is assumed to be a pointer that will be deleted by the listbox if non-NULL.
virtual int GetItemCount( void ) const; ///< Returns the number of items in the listbox
void SwapItems( int index1, int index2 ); ///< Exchanges two items in the listbox
void MakeItemVisible( int index ); ///< Try to ensure that the given index is visible
vgui::Panel * GetItemPanel( int index ) const; ///< Returns the panel in the given index, or NULL
IBuyPresetListBoxUserData * GetItemUserData( int index ); ///< Returns the userData in the given index, or NULL
void SetItemUserData( int index, IBuyPresetListBoxUserData * userData ); ///< Sets the userData in the given index
virtual void RemoveItem( int index ); ///< Removes an item from the table (changing the indices of all following items), deleting the panel and userData
virtual void DeleteAllItems(); ///< clears the listbox, deleting all panels and userData
// overrides
virtual void OnSizeChanged(int wide, int tall); ////< Handles size changes
MESSAGE_FUNC_INT( OnSliderMoved, "ScrollBarSliderMoved", position ); ///< Handles slider being dragged
virtual void OnMouseWheeled(int delta); ///< Scrolls the list according to the mouse wheel movement
virtual void MoveScrollBarToTop(); ///< Moves slider to the top
protected:
virtual int computeVPixelsNeeded( void ); ///< Computes vertical pixels needed by listbox contents
virtual void PerformLayout(); ///< Positions listbox items, etc after internal changes
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); ///< Loads colors, fonts, etc
virtual void OnCommand( const char *command ); ///< Passes commands up to the parent
private:
enum { SCROLLBAR_SIZE = 18, DEFAULT_HEIGHT = 24, PANELBUFFER = 5 };
typedef struct dataitem_s
{
vgui::Panel *panel;
IBuyPresetListBoxUserData * userData;
} DataItem;
CUtlVector< DataItem > m_items;
vgui::ScrollBar *m_vbar;
vgui::Panel *m_pPanelEmbedded;
int m_iScrollbarSize;
int m_iDefaultHeight;
int m_iPanelBuffer;
int m_visibleIndex;
int m_lastSize;
};
#endif // BUYPRESET_LISTBOX_H