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