Firstly, don't keep calling LoadSchemeFromFile(), just call it once per
scheme you will ever use (so in a constructor somewhere). Then in your
reset code just do a SetScheme( scheme id ) on the panels you want to
change for the player. You then need to call InvalidateLayout( false,
true ) the panel to cause it to reload its scheme settings (don't ever
manually call ApplySchemeSettings() ).
- Alfred
Original Message
From: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] On Behalf Of Imperio59
Sent: Friday, February 04, 2005 12:28 PM To:
hlcoders@list.valvesoftware.com Subject: [hlcoders] Custom Schemes
(again)
Hi,
I've been recently working on getting multiple schemes to work into
my MOD. Basically every time you switch teams, i reload the scheme
you have with the one corresponding to your team, so your VGUI's
skin changes to fit your team.
I've ran into quite a few problems, but right now the one i'm working
on has me boggled and if anyone has any ideas on how to fix it I'd
appreciate the help:
I'm trying to get my scoreboard title to show up in red. The Scheme
res file says that all the Label.something elements have my custom
colors, namely the text is supposed to show up in red and not in
orange. When i first join my game i start in a game room type of
place where you have no weapons and must walk into a certain area to
join a team. In that area i am using the default scheme. When you
join a team it reloads the scheme based on your team. I've been using
ApplySchemeSettings and basically the Scoreboard class reloads it's
scheme every time it is Reset(). I've made up a function in the
C_BasePlayer class that returns the right name for the scheme called
GetSchemeName(bool withExtension). Here's the code in Reset():
char szSchemeName[128];
C_BasePlayer *pPlayer = C_BasePlayer::GetLocalPlayer();
vgui::HScheme scheme;
if (pPlayer) {
strcpy(szSchemeName,resource/);
strcat(szSchemeName,pPlayer-GetSchemeName(true));
scheme = vgui::scheme()-LoadSchemeFromFile(
szSchemeName,pPlayer-GetSchemeName(false) );
}
else {
strcpy(szSchemeName,resource/ClientScheme.res);
scheme = vgui::scheme()-LoadSchemeFromFile( szSchemeName,
ClientScheme ); }
// set the scheme before any child control is created
SetScheme(scheme);
ApplySchemeSettings(vgui::scheme()-GetIScheme( scheme ));
m_pPlayerList-SetScheme(scheme);
m_pPlayerList-SetVerticalScrollbar(true);
//Warning(CClientScoreBoardDialog::Reset()\n);
Here i realise i am not telling the Title Label to update it's
scheme, but i thought VGUI would do that automatically... This is
what disturbs me, why isn't it propagating on it's own the Scheme
settings...
Anyways, i added this code:
vgui::Label* pTitle = (vgui::Label*)(FindChildByName(ServerName));
if (pTitle)
pTitle-SetScheme(scheme);
else
Warning(Couldn't Find Child Named \ServerName\ in
CClientScoreBoardDialog::Reset()\n);
The code produces no warning, yet the text color doesn't change for
the title Label. I am at a loss as to why this is happening, the
Label function ApplySchemeSettings() is protected... So i decided
to un-protect it and see what would happen when i called it along
with SetScheme.. Turns out the linker gives me an error (wich was
predictable) about unresolved external...
So Valve, anyone else, how do i get this title to change it's scheme?
___
To unsubscribe, edit your list preferences, or view the list archives, please
visit:
http://list.valvesoftware.com/mailman/listinfo/hlcoders