forked from valve/halflife-sdk
206 lines
5.2 KiB
C++
206 lines
5.2 KiB
C++
|
|
#include<stdio.h>
|
|
#include"vgui_ControlConfigPanel.h"
|
|
#include<VGUI_HeaderPanel.h>
|
|
#include<VGUI_TablePanel.h>
|
|
#include<VGUI_Label.h>
|
|
#include<VGUI_ScrollPanel.h>
|
|
#include<VGUI_Scheme.h>
|
|
#include<VGUI_DataInputStream.h>
|
|
#include<VGUI.h>
|
|
#include<VGUI_TextEntry.h>
|
|
|
|
using namespace vgui;
|
|
|
|
namespace
|
|
{
|
|
class FooTablePanel : public TablePanel
|
|
{
|
|
private:
|
|
Label* _label;
|
|
TextEntry* _textEntry;
|
|
ControlConfigPanel* _controlConfigPanel;
|
|
public:
|
|
FooTablePanel(ControlConfigPanel* controlConfigPanel,int x,int y,int wide,int tall,int columnCount) : TablePanel(x,y,wide,tall,columnCount)
|
|
{
|
|
_controlConfigPanel=controlConfigPanel;
|
|
_label=new Label("You are a dumb monkey",0,0,100,20);
|
|
_label->setBgColor(Scheme::sc_primary3);
|
|
_label->setFgColor(Scheme::sc_primary1);
|
|
_label->setFont(Scheme::sf_primary3);
|
|
|
|
_textEntry=new TextEntry("",0,0,100,20);
|
|
//_textEntry->setFont(Scheme::sf_primary3);
|
|
}
|
|
public:
|
|
virtual int getRowCount()
|
|
{
|
|
return _controlConfigPanel->GetCVarCount();
|
|
}
|
|
virtual int getCellTall(int row)
|
|
{
|
|
return 12;
|
|
}
|
|
virtual Panel* getCellRenderer(int column,int row,bool columnSelected,bool rowSelected,bool cellSelected)
|
|
{
|
|
char cvar[128],desc[128],bind[128],bindAlt[128];
|
|
_controlConfigPanel->GetCVar(row,cvar,128,desc,128);
|
|
|
|
if(cellSelected)
|
|
{
|
|
_label->setBgColor(Scheme::sc_primary1);
|
|
_label->setFgColor(Scheme::sc_primary3);
|
|
}
|
|
else
|
|
if(rowSelected)
|
|
{
|
|
_label->setBgColor(Scheme::sc_primary2);
|
|
_label->setFgColor(Scheme::sc_primary1);
|
|
}
|
|
else
|
|
{
|
|
_label->setBgColor(Scheme::sc_primary3);
|
|
_label->setFgColor(Scheme::sc_primary1);
|
|
}
|
|
|
|
switch(column)
|
|
{
|
|
case 0:
|
|
{
|
|
_label->setText(desc);
|
|
_label->setContentAlignment(Label::a_west);
|
|
break;
|
|
}
|
|
case 1:
|
|
{
|
|
_controlConfigPanel->GetCVarBind(cvar,bind,128,bindAlt,128);
|
|
_label->setText(bind);
|
|
_label->setContentAlignment(Label::a_center);
|
|
break;
|
|
}
|
|
case 2:
|
|
{
|
|
_controlConfigPanel->GetCVarBind(cvar,bind,128,bindAlt,128);
|
|
_label->setText(bindAlt);
|
|
_label->setContentAlignment(Label::a_center);
|
|
break;
|
|
}
|
|
default:
|
|
{
|
|
_label->setText("");
|
|
break;
|
|
}
|
|
}
|
|
|
|
return _label;
|
|
}
|
|
virtual Panel* startCellEditing(int column,int row)
|
|
{
|
|
_textEntry->setText("Goat",strlen("Goat"));
|
|
_textEntry->requestFocus();
|
|
return _textEntry;
|
|
}
|
|
};
|
|
}
|
|
|
|
ControlConfigPanel::ControlConfigPanel(int x,int y,int wide,int tall) : Panel(x,y,wide,tall)
|
|
{
|
|
setPaintBorderEnabled(false);
|
|
setPaintBackgroundEnabled(false);
|
|
setPaintEnabled(false);
|
|
|
|
_actionLabel=new Label("Action");
|
|
_actionLabel->setBgColor(Scheme::sc_primary3);
|
|
_actionLabel->setFgColor(Scheme::sc_primary3);
|
|
|
|
_keyButtonLabel=new Label("Key / Button");
|
|
_keyButtonLabel->setBgColor(Scheme::sc_primary3);
|
|
_keyButtonLabel->setFgColor(Scheme::sc_primary3);
|
|
|
|
_alternateLabel=new Label("Alternate");
|
|
_alternateLabel->setBgColor(Scheme::sc_primary3);
|
|
_alternateLabel->setFgColor(Scheme::sc_primary3);
|
|
|
|
_headerPanel=new HeaderPanel(0,0,wide,20);
|
|
_headerPanel->setParent(this);
|
|
|
|
_headerPanel->addSectionPanel(_actionLabel);
|
|
_headerPanel->addSectionPanel(_keyButtonLabel);
|
|
_headerPanel->addSectionPanel(_alternateLabel);
|
|
|
|
_headerPanel->setSliderPos( 0, wide/2 );
|
|
_headerPanel->setSliderPos( 1, (wide/2) + (wide/4) );
|
|
_headerPanel->setSliderPos( 2, wide );
|
|
|
|
_scrollPanel=new ScrollPanel(0,20,wide,tall-20);
|
|
_scrollPanel->setParent(this);
|
|
_scrollPanel->setPaintBorderEnabled(false);
|
|
_scrollPanel->setPaintBackgroundEnabled(false);
|
|
_scrollPanel->setPaintEnabled(false);
|
|
_scrollPanel->getClient()->setPaintBorderEnabled(false);
|
|
_scrollPanel->getClient()->setPaintBackgroundEnabled(false);
|
|
_scrollPanel->getClient()->setPaintEnabled(false);
|
|
_scrollPanel->setScrollBarVisible(false,true);
|
|
|
|
_tablePanel=new FooTablePanel(this,0,0,_scrollPanel->getClient()->getWide(),800, 3);
|
|
_tablePanel->setParent(_scrollPanel->getClient());
|
|
_tablePanel->setHeaderPanel(_headerPanel);
|
|
_tablePanel->setBgColor(Color(200,0,0,255));
|
|
_tablePanel->setFgColor(Color(Scheme::sc_primary2));
|
|
_tablePanel->setGridVisible(true,true);
|
|
_tablePanel->setGridSize(1,1);
|
|
}
|
|
|
|
void ControlConfigPanel::AddCVar(const char* cvar,const char* desc)
|
|
{
|
|
_cvarDar.addElement(vgui_strdup(cvar));
|
|
_descDar.addElement(vgui_strdup(desc));
|
|
}
|
|
|
|
int ControlConfigPanel::GetCVarCount()
|
|
{
|
|
return _cvarDar.getCount();
|
|
}
|
|
|
|
void ControlConfigPanel::GetCVar(int index,char* cvar,int cvarLen,char* desc,int descLen)
|
|
{
|
|
vgui_strcpy(cvar,cvarLen,_cvarDar[index]);
|
|
vgui_strcpy(desc,descLen,_descDar[index]);
|
|
}
|
|
|
|
void ControlConfigPanel::AddCVarFromInputStream(InputStream* is)
|
|
{
|
|
if(is==null)
|
|
{
|
|
return;
|
|
}
|
|
|
|
DataInputStream dis(is);
|
|
|
|
bool success;
|
|
|
|
while(1)
|
|
{
|
|
char buf[256],cvar[128],desc[128];
|
|
dis.readLine(buf,256,success);
|
|
if(!success)
|
|
{
|
|
break;
|
|
}
|
|
if(sscanf(buf,"\"%[^\"]\" \"%[^\"]\"",cvar,desc)==2)
|
|
{
|
|
AddCVar(cvar,desc);
|
|
}
|
|
}
|
|
}
|
|
|
|
void ControlConfigPanel::GetCVarBind(const char* cvar,char* bind,int bindLen,char* bindAlt,int bindAltLen)
|
|
{
|
|
sprintf(bind,"%s : Bind",cvar);
|
|
sprintf(bindAlt,"%s : BindAlt",cvar);
|
|
}
|
|
|
|
void ControlConfigPanel::SetCVarBind(const char* cvar,const char* bind,const char* bindAlt)
|
|
{
|
|
}
|
|
|