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.
133 lines
3.6 KiB
133 lines
3.6 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: An arbitrary picker |
|
// |
|
//============================================================================= |
|
|
|
#ifndef PICKER_H |
|
#define PICKER_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "vgui_controls/EditablePanel.h" |
|
#include "vgui_controls/Frame.h" |
|
#include "tier1/utlstring.h" |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Forward declarations |
|
//----------------------------------------------------------------------------- |
|
namespace vgui |
|
{ |
|
class Panel; |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// List of strings to appear in the picker |
|
//----------------------------------------------------------------------------- |
|
enum PickerChoiceType_t |
|
{ |
|
PICKER_CHOICE_STRING = 0, |
|
PICKER_CHOICE_PTR, |
|
}; |
|
|
|
struct PickerInfo_t |
|
{ |
|
const char *m_pChoiceString; // This is what displays in the dialog |
|
union |
|
{ |
|
const char *m_pChoiceValue; |
|
void *m_pChoiceValuePtr; |
|
}; |
|
}; |
|
|
|
struct PickerList_t |
|
{ |
|
PickerList_t() : m_Type( PICKER_CHOICE_STRING ) {} |
|
PickerList_t( int nGrowSize, int nInitSize ) : m_Choices( nGrowSize, nInitSize ), m_Type( PICKER_CHOICE_STRING ) {} |
|
|
|
int Count() const { return m_Choices.Count(); } |
|
PickerInfo_t& operator[]( int i ) { return m_Choices[i]; } |
|
const PickerInfo_t& operator[]( int i ) const { return m_Choices[i]; } |
|
int AddToTail() { return m_Choices.AddToTail(); } |
|
void RemoveAll() { return m_Choices.RemoveAll(); } |
|
|
|
PickerChoiceType_t m_Type; |
|
CUtlVector< PickerInfo_t > m_Choices; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Base class for choosing raw assets |
|
//----------------------------------------------------------------------------- |
|
class CPicker : public vgui::EditablePanel |
|
{ |
|
DECLARE_CLASS_SIMPLE( CPicker, vgui::EditablePanel ); |
|
|
|
public: |
|
CPicker( vgui::Panel *pParent, const char *pColumnHeader, const char *pTextType ); |
|
~CPicker(); |
|
|
|
// Sets the list of strings to display |
|
void SetStringList( const PickerList_t &list ); |
|
|
|
// Purpose: |
|
virtual void OnKeyCodePressed( vgui::KeyCode code ); |
|
|
|
// Returns the selected string |
|
PickerChoiceType_t GetSelectionType() const; |
|
const char *GetSelectedString( ) const; |
|
void *GetSelectedPtr( ) const; |
|
|
|
// Returns the index of the selected string |
|
int GetSelectedIndex(); |
|
|
|
private: |
|
void RefreshChoiceList( ); |
|
MESSAGE_FUNC( OnTextChanged, "TextChanged" ); |
|
|
|
vgui::TextEntry *m_pFilterList; |
|
vgui::ListPanel *m_pPickerBrowser; |
|
CUtlString m_Filter; |
|
const char *m_pPickerType; |
|
const char *m_pPickerTextType; |
|
const char *m_pPickerExt; |
|
const char *m_pPickerSubDir; |
|
PickerChoiceType_t m_Type; |
|
|
|
friend class CPickerFrame; |
|
}; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Modal dialog for picker |
|
//----------------------------------------------------------------------------- |
|
class CPickerFrame : public vgui::Frame |
|
{ |
|
DECLARE_CLASS_SIMPLE( CPickerFrame, vgui::Frame ); |
|
|
|
public: |
|
CPickerFrame( vgui::Panel *pParent, const char *pTitle, const char *pColumnHeader, const char *pTextType ); |
|
~CPickerFrame(); |
|
|
|
// Inherited from Frame |
|
virtual void OnCommand( const char *pCommand ); |
|
|
|
// Purpose: Activate the dialog |
|
// The message "Picked" will be sent if something is picked. |
|
// You can pass in keyvalues to get added to the message also. |
|
void DoModal( const PickerList_t &list, KeyValues *pContextKeyValues = NULL ); |
|
|
|
private: |
|
void CleanUpMessage(); |
|
|
|
CPicker *m_pPicker; |
|
vgui::Button *m_pOpenButton; |
|
vgui::Button *m_pCancelButton; |
|
KeyValues *m_pContextKeyValues; |
|
}; |
|
|
|
|
|
#endif // PICKER_H
|
|
|