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.
107 lines
3.1 KiB
107 lines
3.1 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//=============================================================================// |
|
|
|
#ifndef SELECT_PLAYER_DIALOG_H |
|
#define SELECT_PLAYER_DIALOG_H |
|
#ifdef _WIN32 |
|
#pragma once |
|
#endif |
|
|
|
#include "vgui_controls/EditablePanel.h" |
|
#include "vgui_controls/ScrollableEditablePanel.h" |
|
#include "tf_controls.h" |
|
#include "vgui_avatarimage.h" |
|
|
|
// Select Player Dialog states |
|
enum |
|
{ |
|
SPDS_SELECTING_PLAYER, |
|
SPDS_SELECTING_FROM_FRIENDS, |
|
SPDS_SELECTING_FROM_SERVER, |
|
|
|
SPDS_NUM_STATES, |
|
}; |
|
|
|
// Button that displays the name & avatar image of a potential target |
|
class CSelectPlayerTargetPanel : public vgui::EditablePanel |
|
{ |
|
DECLARE_CLASS_SIMPLE( CSelectPlayerTargetPanel, vgui::EditablePanel ); |
|
public: |
|
CSelectPlayerTargetPanel( vgui::Panel *parent, const char *name ) : vgui::EditablePanel( parent, name ) |
|
{ |
|
m_pAvatar = new CAvatarImagePanel( this, "avatar" ); |
|
m_pButton = new CExButton( this, "button", "", parent ); |
|
} |
|
~CSelectPlayerTargetPanel( void ) |
|
{ |
|
m_pAvatar->MarkForDeletion(); |
|
m_pButton->MarkForDeletion(); |
|
} |
|
|
|
void SetInfo( const CSteamID &steamID, const char *pszName ); |
|
|
|
CAvatarImagePanel *GetAvatar( void ) { return m_pAvatar; } |
|
CExButton *GetButton( void ) { return m_pButton; } |
|
|
|
private: |
|
// Embedded panels |
|
CAvatarImagePanel *m_pAvatar; |
|
CExButton *m_pButton; |
|
}; |
|
|
|
//----------------------------------------------------------------------------- |
|
// A dialog that allows users to select who they want to do something with |
|
//----------------------------------------------------------------------------- |
|
class CSelectPlayerDialog : public vgui::EditablePanel |
|
{ |
|
DECLARE_CLASS_SIMPLE( CSelectPlayerDialog, vgui::EditablePanel ); |
|
public: |
|
CSelectPlayerDialog( vgui::Panel *parent ); |
|
~CSelectPlayerDialog( void ); |
|
|
|
virtual void ApplySettings( KeyValues *inResourceData ); |
|
virtual void ApplySchemeSettings( vgui::IScheme *pScheme ); |
|
virtual void PerformLayout( void ); |
|
virtual void OnCommand( const char *command ); |
|
|
|
void UpdateState( void ); |
|
virtual void UpdatePlayerList( void ); |
|
virtual void Reset( void ); |
|
virtual void SetupSelectFriends( void ); |
|
virtual void SetupSelectServer( bool bFriendsOnly ); |
|
|
|
virtual bool AllowOutOfGameFriends() { return false; } |
|
|
|
virtual void OnSelectPlayer( const CSteamID &steamID ) = 0; |
|
|
|
protected: |
|
virtual const char *GetResFile() { return "resource/ui/SelectPlayerDialog.res"; } |
|
|
|
struct partner_info_t |
|
{ |
|
CSteamID m_steamID; |
|
CUtlString m_name; |
|
}; |
|
|
|
static int SortPartnerInfoFunc( const partner_info_t *pA, const partner_info_t *pB ); |
|
|
|
vgui::EditablePanel *m_pStatePanels[SPDS_NUM_STATES]; |
|
int m_iCurrentState; |
|
CExButton *m_pSelectFromServerButton; |
|
CExButton *m_pCancelButton; |
|
|
|
vgui::EditablePanel *m_pPlayerList; |
|
vgui::ScrollableEditablePanel *m_pPlayerListScroller; |
|
CUtlVector<partner_info_t> m_PlayerInfoList; |
|
CUtlVector<CSelectPlayerTargetPanel*> m_pPlayerPanels; |
|
KeyValues *m_pButtonKV; |
|
bool m_bReapplyButtonKVs; |
|
bool m_bAllowSameTeam; |
|
bool m_bAllowOutsideServer; |
|
}; |
|
|
|
#endif // SELECT_PLAYER_DIALOG_H
|
|
|