mirror of
https://github.com/nillerusr/source-engine.git
synced 2024-12-29 09:33:00 +00:00
86 lines
3.1 KiB
C++
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
|