diff options
Diffstat (limited to 'tracker/AdminServer/MOTDPanel.cpp')
| -rw-r--r-- | tracker/AdminServer/MOTDPanel.cpp | 171 |
1 files changed, 171 insertions, 0 deletions
diff --git a/tracker/AdminServer/MOTDPanel.cpp b/tracker/AdminServer/MOTDPanel.cpp new file mode 100644 index 0000000..1a65209 --- /dev/null +++ b/tracker/AdminServer/MOTDPanel.cpp @@ -0,0 +1,171 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +//============================================================================= + +#include <stdio.h> + +#include "MOTDPanel.h" + + +#include <VGUI_Controls.h> +#include <VGUI_ISystem.h> +#include <VGUI_ISurface.h> +#include <VGUI_IVGui.h> +#include <VGUI_KeyValues.h> +#include <VGUI_Label.h> +#include <VGUI_TextEntry.h> +#include <VGUI_Button.h> +#include <VGUI_ToggleButton.h> +#include <VGUI_RadioButton.h> +#include <VGUI_ListPanel.h> +#include <VGUI_ComboBox.h> +#include <VGUI_PHandle.h> +#include <VGUI_PropertySheet.h> + +using namespace vgui; +//----------------------------------------------------------------------------- +// Purpose: Constructor +//----------------------------------------------------------------------------- +CMOTDPanel::CMOTDPanel(vgui::Panel *parent, const char *name) : PropertyPage(parent, name) +{ + m_pRcon=NULL; + + m_pMOTDPanel = new TextEntry(this, "ServerMOTDText"); + + m_pMOTDPanel->SetMultiline(true); + m_pMOTDPanel->SetEnabled(true); + m_pMOTDPanel->SetEditable(true); + m_pMOTDPanel->SetVerticalScrollbar(true); + m_pMOTDPanel->SetRichEdit(false); + m_pMOTDPanel->SetCatchEnterKey(true); + m_pMOTDPanel->setMaximumCharCount(1024); + + m_pSendMOTDButton = new Button(this, "SendMOTD", "&Send"); + m_pSendMOTDButton->SetCommand(new KeyValues("SendMOTD")); +} + +//----------------------------------------------------------------------------- +// Purpose: Destructor +//----------------------------------------------------------------------------- +CMOTDPanel::~CMOTDPanel() +{ + +} + +//----------------------------------------------------------------------------- +// Purpose: Activates the page +//----------------------------------------------------------------------------- +void CMOTDPanel::OnPageShow() +{ + m_pMOTDPanel->RequestFocus(); +} + +//----------------------------------------------------------------------------- +// Purpose: Hides the page +//----------------------------------------------------------------------------- +void CMOTDPanel::OnPageHide() +{ +} + +//----------------------------------------------------------------------------- +// Purpose: Relayouts the data +//----------------------------------------------------------------------------- +void CMOTDPanel::PerformLayout() +{ + BaseClass::PerformLayout(); + + // setup the layout of the panels + m_pMOTDPanel->SetBounds(5,5,GetWide()-10,GetTall()-35); + + m_pSendMOTDButton->SetBounds(GetWide()-70,GetTall()-25,60,20); +} + +//----------------------------------------------------------------------------- +// Purpose: inserts a new string into the main chat panel +//----------------------------------------------------------------------------- +void CMOTDPanel::DoInsertString(const char *str) +{ + m_pMOTDPanel->SetText(""); + if(strlen(str)>1024) + { + char *fix = const_cast<char *>(str); + fix[1024]='\0'; + } + m_pMOTDPanel->DoInsertString(str); +} + +//----------------------------------------------------------------------------- +// Purpose: passes the rcon class to use +//----------------------------------------------------------------------------- +void CMOTDPanel::SetRcon(CRcon *rcon) +{ + m_pRcon=rcon; +} + + +//----------------------------------------------------------------------------- +// Purpose: run when the send button is pressed, send a rcon "say" to the server +//----------------------------------------------------------------------------- +void CMOTDPanel::OnSendMOTD() +{ + if(m_pRcon) + { + char chat_text[2048]; + + _snprintf(chat_text,512,"motd_write "); + m_pMOTDPanel->GetText(0,chat_text+11,2048-11); + if(strlen("motd_write ")!=strlen(chat_text)) // check there is something in the text panel + { + unsigned int i=0; + while(i<strlen(chat_text) && i<2048) + { + if(chat_text[i]=='\n') + { + // shift everything up one + for(unsigned int k=strlen(chat_text)+1;k>i;k--) + { + chat_text[k+1]=chat_text[k]; + } + + // replace the newline with the string "\n" + chat_text[i]='\\'; + chat_text[i+1]='n'; + + i++; // skip this insert + } + i++; + } + + m_pRcon->SendRcon(chat_text); + } + } +} + + +//----------------------------------------------------------------------------- +// Purpose: Called when the game dir combo box is changed +//----------------------------------------------------------------------------- +void CMOTDPanel::OnTextChanged(Panel *panel, const char *text) +{ +// BUG - TextEntry NEVER lets the enter key through... This doesn't work + + if( text[strlen(text)-1]=='\n') // the enter key was just pressed :) + { + OnSendMOTD(); + } +} + +//----------------------------------------------------------------------------- +// Purpose: Message map +//----------------------------------------------------------------------------- +MessageMapItem_t CMOTDPanel::m_MessageMap[] = +{ + MAP_MESSAGE( CMOTDPanel, "SendMOTD", OnSendMOTD ), + MAP_MESSAGE( CMOTDPanel, "PageShow", OnPageShow ), +// MAP_MESSAGE_PTR_CONSTCHARPTR( CMOTDPanel, "TextChanged", OnTextChanged, "panel", "text" ), +}; + +IMPLEMENT_PANELMAP( CMOTDPanel, Frame );
\ No newline at end of file |