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.
317 lines
8.4 KiB
317 lines
8.4 KiB
//========= Copyright Valve Corporation, All rights reserved. ============// |
|
// |
|
// Purpose: |
|
// |
|
// $NoKeywords: $ |
|
//============================================================================= |
|
#include "pch_serverbrowser.h" |
|
|
|
using namespace vgui; |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: Invisible panel that forwards up mouse movement |
|
//----------------------------------------------------------------------------- |
|
class CMouseMessageForwardingPanel : public vgui::Panel |
|
{ |
|
DECLARE_CLASS_SIMPLE( CMouseMessageForwardingPanel, vgui::Panel ); |
|
public: |
|
CMouseMessageForwardingPanel( Panel *parent, const char *name ); |
|
|
|
virtual void PerformLayout( void ); |
|
virtual void OnMousePressed( vgui::MouseCode code ); |
|
virtual void OnMouseDoublePressed( vgui::MouseCode code ); |
|
virtual void OnMouseWheeled(int delta); |
|
}; |
|
|
|
CMouseMessageForwardingPanel::CMouseMessageForwardingPanel( Panel *parent, const char *name ) : BaseClass( parent, name ) |
|
{ |
|
// don't draw an |
|
SetPaintEnabled(false); |
|
SetPaintBackgroundEnabled(false); |
|
SetPaintBorderEnabled(false); |
|
} |
|
|
|
void CMouseMessageForwardingPanel::PerformLayout() |
|
{ |
|
// fill out the whole area |
|
int w, t; |
|
GetParent()->GetSize(w, t); |
|
SetBounds(0, 0, w, t); |
|
} |
|
|
|
void CMouseMessageForwardingPanel::OnMousePressed( vgui::MouseCode code ) |
|
{ |
|
if ( GetParent() ) |
|
{ |
|
GetParent()->OnMousePressed( code ); |
|
} |
|
} |
|
|
|
void CMouseMessageForwardingPanel::OnMouseDoublePressed( vgui::MouseCode code ) |
|
{ |
|
if ( GetParent() ) |
|
{ |
|
GetParent()->OnMouseDoublePressed( code ); |
|
} |
|
} |
|
|
|
void CMouseMessageForwardingPanel::OnMouseWheeled(int delta) |
|
{ |
|
if ( GetParent() ) |
|
{ |
|
GetParent()->OnMouseWheeled( delta ); |
|
} |
|
} |
|
|
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
CQuickListPanel::CQuickListPanel( vgui::Panel* pParent, const char *pElementName ) : BaseClass( pParent, pElementName ) |
|
{ |
|
SetParent( pParent ); |
|
|
|
m_pListPanelParent = pParent; |
|
|
|
CMouseMessageForwardingPanel *panel = new CMouseMessageForwardingPanel(this, NULL); |
|
panel->SetZPos(3); |
|
|
|
m_pLatencyImage = new ImagePanel( this, "latencyimage" ); |
|
m_pPlayerCountLabel = new Label( this, "playercount", "" ); |
|
m_pOtherServersLabel = new Label( this, "otherservercount", "" ); |
|
m_pServerNameLabel = new Label( this, "servername", "" ); |
|
m_pBGroundPanel = new Panel( this, "background" ); |
|
m_pMapImage = new ImagePanel( this, "mapimage" ); |
|
m_pGameTypeLabel = new Label( this, "gametype", "" ); |
|
m_pMapNameLabel = new Label( this, "mapname", "" ); |
|
m_pLatencyLabel = new Label( this, "latencytext", "" ); |
|
m_pReplayImage = new ImagePanel( this, "replayimage" ); |
|
|
|
const char *pPathID = "PLATFORM"; |
|
|
|
if ( g_pFullFileSystem->FileExists( "servers/QuickListPanel.res", "MOD" ) ) |
|
{ |
|
pPathID = "MOD"; |
|
} |
|
|
|
LoadControlSettings( "servers/QuickListPanel.res", pPathID ); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CQuickListPanel::ApplySchemeSettings(IScheme *pScheme) |
|
{ |
|
BaseClass::ApplySchemeSettings(pScheme); |
|
|
|
if ( pScheme && m_pBGroundPanel ) |
|
{ |
|
m_pBGroundPanel->SetBgColor( pScheme->GetColor("QuickListBGDeselected", Color(255, 255, 255, 0 ) ) ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CQuickListPanel::SetRefreshing( void ) |
|
{ |
|
if ( m_pServerNameLabel ) |
|
{ |
|
m_pServerNameLabel->SetText( g_pVGuiLocalize->Find("#ServerBrowser_QuickListRefreshing") ); |
|
} |
|
|
|
if ( m_pPlayerCountLabel ) |
|
{ |
|
m_pPlayerCountLabel->SetVisible( false ); |
|
} |
|
if ( m_pOtherServersLabel ) |
|
{ |
|
m_pOtherServersLabel->SetVisible( false ); |
|
} |
|
|
|
if ( m_pLatencyImage ) |
|
{ |
|
m_pLatencyImage->SetVisible( false ); |
|
} |
|
|
|
if ( m_pReplayImage ) |
|
{ |
|
m_pReplayImage->SetVisible( false ); |
|
} |
|
|
|
if ( m_pLatencyLabel ) |
|
{ |
|
m_pLatencyLabel->SetVisible( false ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CQuickListPanel::SetMapName( const char *pMapName ) |
|
{ |
|
Q_strncpy( m_szMapName, pMapName, sizeof( m_szMapName ) ); |
|
|
|
if ( m_pMapNameLabel ) |
|
{ |
|
m_pMapNameLabel->SetText( pMapName ); |
|
m_pMapNameLabel->SizeToContents(); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CQuickListPanel::SetGameType( const char *pGameType ) |
|
{ |
|
m_pGameTypeLabel->SetVisible( false ); |
|
|
|
if ( strlen ( pGameType ) == 0 || !m_pMapNameLabel ) |
|
return; |
|
|
|
char gametype[ 512 ]; |
|
Q_snprintf( gametype, sizeof( gametype ), "%s (%s)", m_szMapName, pGameType ); |
|
|
|
m_pMapNameLabel->SetText( gametype ); |
|
m_pMapNameLabel->SizeToContents(); |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CQuickListPanel::SetServerInfo ( KeyValues *pKV, int iListID, int iTotalServers ) |
|
{ |
|
if ( pKV == NULL ) |
|
return; |
|
|
|
m_iListID = iListID; |
|
|
|
m_pServerNameLabel->SetText( pKV->GetString( "name", " " ) ); |
|
|
|
int iPing = pKV->GetInt( "ping", 0 ); |
|
|
|
if ( iPing <= 100 ) |
|
{ |
|
m_pLatencyImage->SetImage( "../vgui/icon_con_high.vmt" ); |
|
} |
|
else if ( iPing <= 150 ) |
|
{ |
|
m_pLatencyImage->SetImage( "../vgui/icon_con_medium.vmt" ); |
|
} |
|
else |
|
{ |
|
m_pLatencyImage->SetImage( "../vgui/icon_con_low.vmt" ); |
|
} |
|
|
|
m_pLatencyImage->SetVisible( false ); |
|
|
|
if ( GameSupportsReplay() ) |
|
{ |
|
if ( pKV->GetInt( "Replay", 0 ) > 0 ) |
|
{ |
|
m_pReplayImage->SetVisible( true ); |
|
} |
|
} |
|
|
|
char ping[ 512 ]; |
|
Q_snprintf( ping, sizeof( ping ), "%d ms", iPing ); |
|
|
|
m_pLatencyLabel->SetText( ping ); |
|
m_pLatencyLabel->SetVisible( true ); |
|
|
|
wchar_t players[ 512 ]; |
|
wchar_t playercount[16]; |
|
wchar_t *pwszPlayers = g_pVGuiLocalize->Find("#ServerBrowser_Players"); |
|
|
|
g_pVGuiLocalize->ConvertANSIToUnicode( pKV->GetString( "players", " " ), playercount, sizeof( playercount ) ); |
|
|
|
_snwprintf( players, ARRAYSIZE( players ), L"%ls %ls", playercount, pwszPlayers ); |
|
|
|
m_pPlayerCountLabel->SetText( players ); |
|
m_pPlayerCountLabel->SetVisible( true ); |
|
|
|
|
|
// Now setup the other server count |
|
if ( iTotalServers == 2 ) |
|
{ |
|
m_pOtherServersLabel->SetText( g_pVGuiLocalize->Find("#ServerBrowser_QuickListOtherServer") ); |
|
m_pOtherServersLabel->SetVisible( true ); |
|
} |
|
else if ( iTotalServers > 2 ) |
|
{ |
|
wchar_t *pwszServers = g_pVGuiLocalize->Find("#ServerBrowser_QuickListOtherServers"); |
|
_snwprintf( playercount, Q_ARRAYSIZE(playercount), L"%d", (iTotalServers-1) ); |
|
g_pVGuiLocalize->ConstructString( players, sizeof( players ), pwszServers, 1, playercount ); |
|
m_pOtherServersLabel->SetText( players ); |
|
m_pOtherServersLabel->SetVisible( true ); |
|
} |
|
else |
|
{ |
|
m_pOtherServersLabel->SetVisible( false ); |
|
} |
|
} |
|
|
|
//----------------------------------------------------------------------------- |
|
// Purpose: |
|
//----------------------------------------------------------------------------- |
|
void CQuickListPanel::SetImage( const char *pMapName ) |
|
{ |
|
char path[ 512 ]; |
|
Q_snprintf( path, sizeof( path ), "materials/vgui/maps/menu_thumb_%s.vmt", pMapName ); |
|
|
|
char map[ 512 ]; |
|
Q_snprintf( map, sizeof( map ), "maps/%s.bsp", pMapName ); |
|
|
|
if ( g_pFullFileSystem->FileExists( map, "MOD" ) == false ) |
|
{ |
|
pMapName = "default_download"; |
|
} |
|
else |
|
{ |
|
if ( g_pFullFileSystem->FileExists( path, "MOD" ) == false ) |
|
{ |
|
pMapName = "default"; |
|
} |
|
} |
|
|
|
if ( m_pMapImage ) |
|
{ |
|
char imagename[ 512 ]; |
|
Q_snprintf( imagename, sizeof( imagename ), "..\\vgui\\maps\\menu_thumb_%s", pMapName ); |
|
|
|
m_pMapImage->SetImage ( imagename ); |
|
m_pMapImage->SetMouseInputEnabled( false ); |
|
} |
|
} |
|
|
|
void CQuickListPanel::OnMousePressed( vgui::MouseCode code ) |
|
{ |
|
if ( m_pListPanelParent ) |
|
{ |
|
vgui::PanelListPanel *pParent = dynamic_cast < vgui::PanelListPanel *> ( m_pListPanelParent ); |
|
|
|
if ( pParent ) |
|
{ |
|
pParent->SetSelectedPanel( this ); |
|
m_pListPanelParent->CallParentFunction( new KeyValues("ItemSelected", "itemID", -1 ) ); |
|
} |
|
|
|
if ( code == MOUSE_RIGHT ) |
|
{ |
|
m_pListPanelParent->CallParentFunction( new KeyValues("OpenContextMenu", "itemID", -1 ) ); |
|
} |
|
|
|
} |
|
} |
|
|
|
void CQuickListPanel::OnMouseDoublePressed( vgui::MouseCode code ) |
|
{ |
|
if ( code == MOUSE_RIGHT ) |
|
return; |
|
|
|
// call the panel |
|
OnMousePressed( code ); |
|
|
|
m_pListPanelParent->CallParentFunction( new KeyValues("ConnectToServer", "code", code) ); |
|
}
|
|
|