diff options
Diffstat (limited to 'tracker/AdminServer/BaseGamesPage.cpp')
| -rw-r--r-- | tracker/AdminServer/BaseGamesPage.cpp | 247 |
1 files changed, 247 insertions, 0 deletions
diff --git a/tracker/AdminServer/BaseGamesPage.cpp b/tracker/AdminServer/BaseGamesPage.cpp new file mode 100644 index 0000000..659ca15 --- /dev/null +++ b/tracker/AdminServer/BaseGamesPage.cpp @@ -0,0 +1,247 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//============================================================================= + +#include "BaseGamesPage.h" +#include "ServerListCompare.h" +#include "util.h" +#include "serverpage.h" + +#include <VGUI_Controls.h> +#include <VGUI_CheckButton.h> +#include <VGUI_ComboBox.h> +#include <VGUI_ImagePanel.h> +#include <VGUI_IScheme.h> +#include <VGUI_IVGui.h> +#include <VGUI_ListPanel.h> +#include <VGUI_MenuButton.h> +#include <VGUI_Menu.h> +#include <VGUI_KeyValues.h> +#include <VGUI_MouseCode.h> + +#include <stdio.h> + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CBaseGamesPage::CBaseGamesPage(vgui::Panel *parent, const char *name) : Frame(parent, name), m_Servers(this) +{ + ivgui()->AddTickSignal(GetVPanel()); + + //SetSize(500, 500); + + //SetParent(parent); // doesn't have any effect.... + m_pParent=parent; + + // load the password icon + m_pPasswordIcon = new ImagePanel(NULL, NULL); + m_pPasswordIcon->SetImage(scheme()->GetImage(scheme()->GetDefaultScheme(), "server/icon_password")); + + // Init UI +// m_pConnect = new Button(this, "ConnectButton", "Connect"); + m_pRefresh = new Button(this, "RefreshButton", "Refresh"); + m_pRefresh->SetCommand("refresh"); + //m_pRefresh->AddActionSignalTarget(this); + + m_pAddIP = new Button(this, "AddIPButton", "Add IP"); + + m_pManage = new Button(this, "ManageButton", "Manage"); + m_pManage->SetCommand(new KeyValues("Manage")); + m_pManage->AddActionSignalTarget(this); + + +// m_pRefreshMenu = new Menu(this, "RefreshMenu"); +// m_pRefreshMenu->MakePopup(); + //m_pRefresh->SetMenu(m_pRefreshMenu); + //m_pRefresh->SetOpenDirection(MenuButton::UP); + //m_pRefreshMenu->AddMenuItem("Refresh", "Get new info for servers in current list ", "refresh", this); + //m_pRefreshMenu->AddMenuItem("GetNewList", "Get new server list ", "getnewlist", this); + //m_pRefreshMenu->AddMenuItem("StopRefresh", "Stop refreshing server list ", "stoprefresh", this); + m_pGameList = new OurListPanel(this, "gamelist"); + + // Add the column headers + m_pGameList->AddColumnHeader(0, "Password", util->GetString(""), 20, false, NOT_RESIZABLE, NOT_RESIZABLE ); + m_pGameList->AddColumnHeader(1, "Name", util->GetString(" Servers"), 50, true, RESIZABLE, RESIZABLE); + m_pGameList->AddColumnHeader(2, "GameDesc", util->GetString(" Game"), 80, true, RESIZABLE, NOT_RESIZABLE); + m_pGameList->AddColumnHeader(3, "Players", util->GetString(" Players"), 55, true, RESIZABLE, NOT_RESIZABLE); + m_pGameList->AddColumnHeader(4, "Map", util->GetString(" Map" ), 90, true, RESIZABLE, NOT_RESIZABLE); + m_pGameList->AddColumnHeader(5, "Ping", util->GetString(" Latency" ), 55, true, RESIZABLE, NOT_RESIZABLE); + + // setup fast sort functions + m_pGameList->SetSortFunc(0, PasswordCompare); + m_pGameList->SetSortFunc(1, ServerNameCompare); + m_pGameList->SetSortFunc(2, GameCompare); + m_pGameList->SetSortFunc(3, PlayersCompare); + m_pGameList->SetSortFunc(4, MapCompare); + m_pGameList->SetSortFunc(5, PingCompare); + + // Sort by ping time by default + m_pGameList->SetSortColumn(5); + + m_pGameList->AddActionSignalTarget(this); + +// LoadControlSettings("Admin\\DialogAdminServerPage.res"); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +CBaseGamesPage::~CBaseGamesPage() +{ +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CBaseGamesPage::PerformLayout() +{ + BaseClass::PerformLayout(); + +/* // game list in middle + int x = 0, y = 0, wide, tall; + GetSize(wide, tall); + m_pGameList->SetBounds(10, 30, wide - 20, tall - 200); + + Repaint(); + */ +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CBaseGamesPage::OnTick() +{ + m_Servers.RunFrame(); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CBaseGamesPage::ApplySchemeSettings(vgui::IScheme *pScheme) +{ + BaseClass::ApplySchemeSettings(pScheme); + m_pGameList->SetFont(scheme()->GetFont(scheme()->GetDefaultScheme(), "DefaultSmall")); +} + +//----------------------------------------------------------------------------- +// Purpose: gets information about specified server +//----------------------------------------------------------------------------- +serveritem_t &CBaseGamesPage::GetServer(unsigned int serverID) +{ + return m_Servers.GetServer(serverID); +} + + +//----------------------------------------------------------------------------- +// Purpose: call to let the UI now whether the game list is currently refreshing +//----------------------------------------------------------------------------- +void CBaseGamesPage::SetRefreshing(bool state) +{ + if(!CServerPage::GetInstance()) + { + return; + } + + if (state) + { + CServerPage::GetInstance()->UpdateStatusText("Refreshing server list..."); + } + else + { + CServerPage::GetInstance()->UpdateStatusText(""); + } + +// m_pRefreshMenu->FindChildByName("Refresh")->SetVisible(!state); + //m_pRefreshMenu->FindChildByName("GetNewList")->SetVisible(!state); +// m_pRefreshMenu->FindChildByName("StopRefresh")->SetVisible(state); +} + +//----------------------------------------------------------------------------- +// Purpose: +//----------------------------------------------------------------------------- +void CBaseGamesPage::OnCommand(const char *command) +{ + if (!stricmp(command, "Connect")) + { + OnBeginConnect(); + } + else if (!stricmp(command, "stoprefresh")) + { + // cancel the existing refresh + StopRefresh(); + } + else if (!stricmp(command, "refresh")) + { + // start a new refresh + StartRefresh(); + } + else if (!stricmp(command, "GetNewList")) + { + GetNewServerList(); + } + else if (!stricmp(command, "addip")) + { + PostMessage(this,new KeyValues("AddServerByName")); // CFavorites handles this message + } + else if (!stricmp(command, "config")) + { + CServerPage::GetInstance()->ConfigPanel(); + } + else + { + BaseClass::OnCommand(command); + } +} + + +//----------------------------------------------------------------------------- +// Purpose: Called when the game dir combo box is changed +//----------------------------------------------------------------------------- +void CBaseGamesPage::OnTextChanged(Panel *panel, const char *text) +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Handles filter dropdown being toggled +//----------------------------------------------------------------------------- +void CBaseGamesPage::OnButtonToggled(Panel *panel, int state) +{ + + // treat changing these buttons like any other filter has changed + OnTextChanged(panel, ""); + +} + +void CBaseGamesPage::OnManage() +{ + if (m_pGameList->GetNumSelectedRows()) + { + // get the server + unsigned int serverID = m_pGameList->GetDataItem(m_pGameList->GetSelectedRow(0))->userData; + + + PostMessage(m_pParent->GetVPanel(), new KeyValues("Manage", "serverID", serverID)); + } +} + + +void CBaseGamesPage::OurListPanel::OnMouseDoublePressed( vgui::MouseCode code ) +{ + PostMessage(m_pParent->GetVPanel(), new KeyValues("Manage")); +} + +//----------------------------------------------------------------------------- +// Purpose: Message map +//----------------------------------------------------------------------------- +MessageMapItem_t CBaseGamesPage::m_MessageMap[] = +{ + MAP_MESSAGE_PTR_INT( CBaseGamesPage, "ButtonToggled", OnButtonToggled, "panel", "state" ), + MAP_MESSAGE_PTR_CONSTCHARPTR( CBaseGamesPage, "TextChanged", OnTextChanged, "panel", "text" ), + MAP_MESSAGE( CBaseGamesPage , "Manage",OnManage ), +}; +IMPLEMENT_PANELMAP(CBaseGamesPage, BaseClass); |