User talk:DaFox
Jump to navigation
Jump to search
Custom VGUI Panel
OPEN \game\client\vgui_int.cpp
FIND
void MP3Player_Destroy();
AFTER, ADD
void Blog_Destroy();
FIND
#ifndef _X360
MP3Player_Destroy();
#endif
AFTER, ADD
Blog_Destroy();
CREATE AND OPEN \game\client\sdk\blog.h
(Add it to your Client Project in VS as well!)
ADD
#include "vgui_helpers.h"
using namespace vgui;
class CBlog : public Frame {
DECLARE_CLASS_SIMPLE(CBlog, Frame);
public:
CBlog(VPANEL parent);
~CBlog();
protected:
void OnCommand(char const *cmd);
};
CREATE AND OPEN \game\client\sdk\blog.cpp
ADD
#include "cbase.h"
#include "ienginevgui.h"
#include "sdk_blog.h"
//#include <curl/include/curl.h>
// memdbgon must be the last include file in a .cpp file!!!
#include "tier0/memdbgon.h"
using namespace vgui;
static CBlog *g_pBlog = NULL;
static void blog_f() {
if(!g_pBlog) {
g_pBlog = new CBlog(enginevgui->GetPanel(PANEL_GAMEUIDLL));
}
else {
g_pBlog->Activate();
}
}
static ConCommand blog("blog", blog_f, "Show/hide the blog."); // Is this the appropriate method to have a command to open something?
CBlog::CBlog(VPANEL parent) : BaseClass(NULL, "Blog") {
SetParent(parent);
SetScheme(scheme()->LoadSchemeFromFile("resource/SourceScheme.res", "SourceScheme"));
LoadControlSettings("resource/ui/blog.res");
SetMoveable(true); //todo: which of these default to their current values?
SetSizeable(false);
SetProportional(false);
SetMenuButtonVisible(false);
SetMinimizeButtonVisible(false);
SetMaximizeButtonVisible(false);
SetCloseButtonVisible(true);
SetVisible(true);
MoveToCenterOfScreen();
Activate();
Label *bloglabel = dynamic_cast<Label *>(FindChildByName("BlogLabel"));
if(bloglabel) {
bloglabel->SetText("This \nIs \na \nwhole \nlot \nof \ntext.\n\nLorem ipsum");
}
}
CBlog::~CBlog() {
g_pBlog = NULL;
}
void CBlog::OnCommand(char const *cmd) {
if (!Q_stricmp(cmd, "Close")) {
if (g_pBlog) { //todo: Can we safely assume that this will always be true in this function?
g_pBlog->SetParent((Panel *)NULL); //What is the point of this?
//delete g_pBlog; // Some vgui examples use delete rather than MarkForDeletion(), what is preferable?
g_pBlog->MarkForDeletion();
}
}
else {
BaseClass::OnCommand(cmd);
}
}
void Blog_Destroy() { //This is pretty nasty, It is called in vgui_int in VGui_Shutdown(), Is there a way to Destroy the panel on shutdown without editing vgui_int.cpp?
if (g_pBlog) {
g_pBlog->SetParent((Panel *)NULL);
g_pBlog->MarkForDeletion();
}
}