mirror of
https://github.com/alliedmodders/hl2sdk.git
synced 2024-12-22 17:47:38 +08:00
134 lines
3.7 KiB
C++
134 lines
3.7 KiB
C++
//========= 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
|