From 3bf9df6b2785fa6d951086978a3e66f49427166a Mon Sep 17 00:00:00 2001 From: FluorescentCIAAfricanAmerican <0934gj3049fk@protonmail.com> Date: Wed, 22 Apr 2020 12:56:21 -0400 Subject: 1 --- tracker/AdminServer/MapCycleEditDialog.cpp | 263 +++++++++++++++++++++++++++++ 1 file changed, 263 insertions(+) create mode 100644 tracker/AdminServer/MapCycleEditDialog.cpp (limited to 'tracker/AdminServer/MapCycleEditDialog.cpp') diff --git a/tracker/AdminServer/MapCycleEditDialog.cpp b/tracker/AdminServer/MapCycleEditDialog.cpp new file mode 100644 index 0000000..39e3ecf --- /dev/null +++ b/tracker/AdminServer/MapCycleEditDialog.cpp @@ -0,0 +1,263 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//============================================================================= + +#include "MapCycleEditDialog.h" + +#include +#include + +#include +#include + +#include "RemoteServer.h" +#include "tier1/utlbuffer.h" + +using namespace vgui; + +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CMapCycleEditDialog::CMapCycleEditDialog(vgui::Panel *parent, const char *name) : BaseClass(parent, name) +{ + SetSize(480, 320); + SetSizeable(false); + + m_pAvailableMapList = new ListPanel(this, "AvailableMapList"); + m_pAvailableMapList->AddColumnHeader(0, "Map", "#Available_Maps", 128); + m_pAvailableMapList->SetColumnSortable(0, false); + + m_pMapCycleList = new ListPanel(this, "MapCycleList"); + m_pMapCycleList->AddColumnHeader(0, "Map", "#Map_Cycle", 128); + m_pMapCycleList->SetColumnSortable(0, false); + + m_RightArrow = new Button(this, "RightButton", ""); + m_LeftArrow = new Button(this, "LeftButton", ""); + m_UpArrow = new Button(this, "UpButton", ""); + m_DownArrow = new Button(this, "DownButton", ""); + + LoadControlSettings("Admin/MapCycleEditDialog.res", "PLATFORM"); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +CMapCycleEditDialog::~CMapCycleEditDialog() +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Shows the dialog, building the lists from the params +//----------------------------------------------------------------------------- +void CMapCycleEditDialog::Activate(vgui::Panel *updateTarget, CUtlVector &availableMaps, CUtlVector &mapCycle) +{ + // set the action signal target + AddActionSignalTarget(updateTarget); + + // clear lists + m_pAvailableMapList->DeleteAllItems(); + m_pMapCycleList->DeleteAllItems(); + + // build lists + for (int i = 0; i < availableMaps.Count(); i++) + { + // only add to the available maps list if it's not in mapCycle + bool inMapCycle = false; + for (int j = 0; j < mapCycle.Count(); j++) + { + if (!stricmp(mapCycle[j].String(), availableMaps[i].String())) + { + inMapCycle = true; + break; + } + } + + if (!inMapCycle) + { + m_pAvailableMapList->AddItem(new KeyValues("MapItem", "Map", availableMaps[i].String()), 0, false, false); + } + } + for (int i = 0; i < mapCycle.Count(); i++) + { + m_pMapCycleList->AddItem(new KeyValues("MapItem", "Map", mapCycle[i].String()), 0, false, false); + } + + // show window + SetTitle("Change Map Cycle", false); + MoveToCenterOfScreen(); + BaseClass::Activate(); +} + +//----------------------------------------------------------------------------- +// Purpose: Sets up button state +//----------------------------------------------------------------------------- +void CMapCycleEditDialog::PerformLayout() +{ + m_LeftArrow->SetEnabled(false); + m_RightArrow->SetEnabled(false); + m_UpArrow->SetEnabled(false); + m_DownArrow->SetEnabled(false); + + if (m_pMapCycleList->GetSelectedItemsCount() > 0) + { + m_LeftArrow->SetEnabled(true); + m_LeftArrow->SetAsDefaultButton(true); + + if (m_pMapCycleList->GetSelectedItemsCount() == 1) + { + int row = m_pMapCycleList->GetSelectedItem(0); + if (row > 0) + { + m_UpArrow->SetEnabled(true); + } + if (row + 1 < m_pMapCycleList->GetItemCount()) + { + m_DownArrow->SetEnabled(true); + } + } + } + else if (m_pAvailableMapList->GetSelectedItemsCount() > 0) + { + m_RightArrow->SetEnabled(true); + m_RightArrow->SetAsDefaultButton(true); + } + + BaseClass::PerformLayout(); +} + +//----------------------------------------------------------------------------- +// Purpose: Updates UI based on which listpanel got selection +//----------------------------------------------------------------------------- +void CMapCycleEditDialog::OnItemSelected(vgui::Panel *panel) +{ + if (panel == m_pAvailableMapList && m_pAvailableMapList->GetSelectedItemsCount() > 0) + { + m_pMapCycleList->ClearSelectedItems(); + } + else if (panel == m_pMapCycleList && m_pMapCycleList->GetSelectedItemsCount() > 0) + { + m_pAvailableMapList->ClearSelectedItems(); + } + InvalidateLayout(); +} + +//----------------------------------------------------------------------------- +// Purpose: Button command handler +//----------------------------------------------------------------------------- +void CMapCycleEditDialog::OnCommand(const char *command) +{ + if (!stricmp(command, "ArrowLeft")) + { + // move map from mapcycle to available list + while (m_pMapCycleList->GetSelectedItemsCount() > 0) + { + int itemID = m_pMapCycleList->GetSelectedItem(0); + KeyValues *data = m_pMapCycleList->GetItem(itemID); + if (!data) + return; + + const char *map = data->GetString("Map"); + m_pAvailableMapList->AddItem(new KeyValues("MapItem", "Map", map), 0, true, false); + m_pMapCycleList->RemoveItem(itemID); + } + } + else if (!stricmp(command, "ArrowRight")) + { + // move map from available list to mapcycle + while (m_pAvailableMapList->GetSelectedItemsCount() > 0) + { + int itemID = m_pAvailableMapList->GetSelectedItem(0); + KeyValues *data = m_pAvailableMapList->GetItem(itemID); + if (!data) + return; + + const char *map = data->GetString("Map"); + m_pMapCycleList->AddItem(new KeyValues("MapItem", "Map", map), 0, true, false); + m_pAvailableMapList->RemoveItem(itemID); + } + } + else if (!stricmp(command, "ArrowUp")) + { + int itemID = m_pMapCycleList->GetSelectedItem(0); + int row = m_pMapCycleList->GetItemCurrentRow(itemID); + int prevRow = row - 1; + if (prevRow < 0) + return; + + int prevItemID = m_pMapCycleList->GetItemIDFromRow(prevRow); + + // get the data + KeyValues *d1 = m_pMapCycleList->GetItem(itemID); + KeyValues *d2 = m_pMapCycleList->GetItem(prevItemID); + + // swap the strings + CUtlSymbol tempString = d1->GetString("Map"); + d1->SetString("Map", d2->GetString("Map")); + d2->SetString("Map", tempString.String()); + + // update the list + m_pMapCycleList->ApplyItemChanges(itemID); + m_pMapCycleList->ApplyItemChanges(prevItemID); + PostMessage(m_pMapCycleList, new KeyValues("KeyCodePressed", "code", KEY_UP)); + } + else if (!stricmp(command, "ArrowDown")) + { + int itemID = m_pMapCycleList->GetSelectedItem(0); + int row = m_pMapCycleList->GetItemCurrentRow(itemID); + int nextRow = row + 1; + if (nextRow + 1 > m_pMapCycleList->GetItemCount()) + return; + + int nextItemID = m_pMapCycleList->GetItemIDFromRow(nextRow); + + // get the data + KeyValues *d1 = m_pMapCycleList->GetItem(itemID); + KeyValues *d2 = m_pMapCycleList->GetItem(nextItemID); + + // swap the strings + CUtlSymbol tempString = d1->GetString("Map"); + d1->SetString("Map", d2->GetString("Map")); + d2->SetString("Map", tempString.String()); + + // update the list + m_pMapCycleList->ApplyItemChanges(itemID); + m_pMapCycleList->ApplyItemChanges(nextItemID); + PostMessage(m_pMapCycleList, new KeyValues("KeyCodePressed", "code", KEY_DOWN)); + } + else if (!stricmp(command, "Cancel")) + { + Close(); + } + else if (!stricmp(command, "OK")) + { + // write out the data + CUtlBuffer msg(0, 1024, CUtlBuffer::TEXT_BUFFER); + + for (int i = 0; i < m_pMapCycleList->GetItemCount(); i++) + { + int itemID = m_pMapCycleList->GetItemIDFromRow(i); + KeyValues *kv = m_pMapCycleList->GetItem(itemID); + if ( kv ) + { + msg.PutString(kv->GetString("Map")); + msg.PutChar('\n'); + } + } + + msg.PutChar(0); + RemoteServer().SetValue("mapcycle", (const char *)msg.Base()); + + // post message to tell varlist update + PostActionSignal(new KeyValues("VarChanged", "var", "mapcycle")); + + // close + Close(); + } + else + { + BaseClass::OnCommand(command); + } +} -- cgit v1.2.3