text: // Copyright © 1996-2001, Valve LLC, All rights reserved.
  
  #include "DialogCvarChange.h"
  
  #include <cstdio>
  #include "tier1/KeyValues.h"
  #include "vgui/IInput.h"
  #include "vgui/ISurface.h"
  #include "vgui_controls/Button.h"
  #include "vgui_controls/Label.h"
  #include "vgui_controls/Panel.h"
  #include "vgui_controls/TextEntry.h"
  
  using namespace vgui;
  
  CDialogCvarChange::CDialogCvarChange(vgui::Panel *parent)
      : Frame(parent, "DialogCvarChange") {
    SetSize(320, 200);
  
    m_bAddCvarText = true;
  
    m_pInfoLabel = new Label(this, "InfoLabel", "");
    m_pCvarLabel = new Label(this, "CvarLabel", "");
    m_pCvarEntry = new TextEntry(this, "CvarEntry");
    m_pOkayButton = new Button(this, "OkayButton", "#Okay_Button");
  
    LoadControlSettings("Admin/DialogCvarChange.res", "PLATFORM");
  
    SetTitle("#Cvar_Title", true);
  
    SetSizeable(false);
    // set our initial position in the middle of the workspace
    MoveToCenterOfScreen();
  }
  
  CDialogCvarChange::~CDialogCvarChange() {}
  
  // Purpose: Hides value text
  void CDialogCvarChange::MakePassword() {
    m_pCvarEntry->SetTextHidden(true);
    m_bAddCvarText = false;  // this isn't asking about a cvar
  }
  
  // Purpose: initializes the dialog and brings it to the foreground
  void CDialogCvarChange::Activate(const char *cvarName, const char *curValue,
                                   const char *type, const char *question) {
    m_pCvarLabel->SetText(cvarName);
    if (!m_bAddCvarText) {
      m_pCvarLabel->SetVisible(false);  // hide this
    }
  
    m_pInfoLabel->SetText(question);
  
    m_cType = type;
  
    m_pOkayButton->SetAsDefaultButton(true);
    MakePopup();
    MoveToFront();
  
    m_pCvarEntry->SetText(curValue);
    m_pCvarEntry->RequestFocus();
    RequestFocus();
  
    // make it modal
    input()->SetAppModalSurface(GetVPanel());
    SetVisible(true);
  
    BaseClass::Activate();
  }
  
  // Purpose: Sets the text of a labell by name
  void CDialogCvarChange::SetLabelText(const char *textEntryName,
                                       const char *text) {
    Label *entry = dynamic_cast<Label *>(FindChildByName(textEntryName));
    if (entry) entry->SetText(text);
  }
  
  // Purpose: Handles button presses
  void CDialogCvarChange::OnCommand(const char *command) {
    bool bClose = false;
  
    if (!_stricmp(command, "Okay")) {
      KeyValues *msg = new KeyValues("CvarChangeValue");
      char buf[64];
      m_pCvarLabel->GetText(buf, 64);
  
      msg->SetString("player", buf);
      m_pCvarEntry->GetText(buf, sizeof(buf) - 1);
      msg->SetString("value", buf);
      msg->SetString("type", m_cType);
  
      PostActionSignal(msg);
  
      bClose = true;
    } else if (!_stricmp(command, "Close")) {
      bClose = true;
    } else {
      BaseClass::OnCommand(command);
    }
  
    if (bClose) Close();
  }
  
  // Purpose: deletes the dialog on close
  void CDialogCvarChange::OnClose() {
    BaseClass::OnClose();
    MarkForDeletion();
  }
  