summaryrefslogtreecommitdiff
path: root/game/client/tf/vgui/tf_lobbypanel.h
diff options
context:
space:
mode:
authorFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
committerFluorescentCIAAfricanAmerican <[email protected]>2020-04-22 12:56:21 -0400
commit3bf9df6b2785fa6d951086978a3e66f49427166a (patch)
tree2c0f1f0c63c4832882bc93814ebd2c2b1c6224e5 /game/client/tf/vgui/tf_lobbypanel.h
downloadarchived-source-engine-2018-hl2-src-master.tar.xz
archived-source-engine-2018-hl2-src-master.zip
Diffstat (limited to 'game/client/tf/vgui/tf_lobbypanel.h')
-rw-r--r--game/client/tf/vgui/tf_lobbypanel.h238
1 files changed, 238 insertions, 0 deletions
diff --git a/game/client/tf/vgui/tf_lobbypanel.h b/game/client/tf/vgui/tf_lobbypanel.h
new file mode 100644
index 0000000..f7a998f
--- /dev/null
+++ b/game/client/tf/vgui/tf_lobbypanel.h
@@ -0,0 +1,238 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+//=============================================================================//
+
+#ifndef TF_LOBBYPANEL_H
+#define TF_LOBBYPANEL_H
+
+
+#include "cbase.h"
+//#include "tf_pvelobbypanel.h"
+#include "game/client/iviewport.h"
+#include "vgui_controls/TextEntry.h"
+#include "tf_matchmaking_shared.h"
+#include "vgui_controls/RichText.h"
+#include "vgui_controls/CheckButton.h"
+#include "tf_gc_client.h"
+
+// memdbgon must be the last include file in a .cpp file!!!
+#include <tier0/memdbgon.h>
+class CBaseLobbyContainerFrame;
+class CAvatarImage;
+class CTFBadgePanel;
+class CMainMenuToolTip;
+
+class CBaseLobbyPanel : public vgui::PropertySheet, public CGameEventListener
+{
+ DECLARE_CLASS_SIMPLE( CBaseLobbyPanel, PropertySheet );
+
+ friend class CBaseLobbyContainerFrame;
+public:
+ CBaseLobbyPanel( vgui::Panel *pParent, CBaseLobbyContainerFrame* pLobbyContainer );
+
+ virtual ~CBaseLobbyPanel();
+
+ //
+ // Panel overrides
+ //
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme ) OVERRIDE;
+ virtual void PerformLayout() OVERRIDE;
+
+ //
+ // CGameEventListener overrides
+ //
+ virtual void FireGameEvent( IGameEvent *event ) OVERRIDE;
+
+ virtual void OnCommand( const char *command ) OVERRIDE;
+
+ int NumPlayersInParty( void ) { return m_vecPlayers.Count(); }
+
+ void ToggleJoinLateCheckButton( void ) { m_pJoinLateCheckButton->SetSelected( !m_pJoinLateCheckButton->IsSelected() );}
+
+ bool IsPartyActiveGroupBoxVisible() { return m_pPartyActiveGroupBox != NULL && m_pPartyActiveGroupBox->IsVisible(); }
+ bool IsAnyoneBanned( RTime32 &rtimeExpire ) const;
+ bool IsAnyoneLowPriority( RTime32 &rtimeExpire ) const;
+
+ void UpdateControls();
+
+ virtual EMatchGroup GetMatchGroup( void ) const = 0;
+
+protected:
+
+ virtual void WriteGameSettingsControls();
+
+ MESSAGE_FUNC_PTR( OnItemLeftClick, "ItemLeftClick", panel );
+ MESSAGE_FUNC_PTR( OnItemContextMenu, "ItemContextMenu", panel );
+ MESSAGE_FUNC_PTR( OnCheckButtonChecked, "CheckButtonChecked", panel );
+ MESSAGE_FUNC_PARAMS( OnTradeWithUser, "TradeWithUser", params );
+
+ CPanelAnimationVarAliasType( int, m_iNewWidth, "challenge_new_width", "19", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iChallengeCheckBoxWidth, "challenge_check_box_width", "8", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iAvatarWidth, "avatar_width", "16", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iPlayerNameWidth, "player_name_width", "110", "proportional_int" );
+ CPanelAnimationVarAliasType( int, m_iBannedWidth, "squad_surplus_width", "12", "proportional_int" );
+
+ // Sectioned list panels are the worst
+ struct ChatModelPanel_t
+ {
+ CTFBadgePanel* m_pBadgeModel;
+ CSteamID m_steamIDOwner;
+ uint32 m_nShownLevel;
+ };
+
+ CUtlVector< ChatModelPanel_t > m_vecChatBadges;
+ vgui::SectionedListPanel *m_pChatPlayerList;
+ vgui::ImageList *m_pImageList;
+ CBaseLobbyContainerFrame *m_pContainer;
+
+ int m_iWritingPanel;
+
+ int m_iImageIsBanned;
+ int m_iImageNew;
+ int m_iImageNo;
+ int m_iImageRadioButtonYes;
+ int m_iImageRadioButtonNo;
+ int m_iImageCheckBoxDisabled;
+ int m_iImageCheckBoxYes;
+ int m_iImageCheckBoxNo;
+ int m_iImageCheckBoxMixed;
+
+ struct LobbyPlayerInfo
+ {
+ CSteamID m_steamID;
+ CUtlString m_sName;
+ bool m_bHasTicket;
+ bool m_bSquadSurplus;
+ uint32 m_nBadgeLevel;
+ CAvatarImage *m_pAvatarImage;
+ uint32 m_nCompletedChallenges; // bitmask of badge slots (not related to the challenge index in the schema!)
+ bool m_bIsBanned;
+ RTime32 m_rtimeBanExpire;
+ RTime32 m_rtimeLowPriorityExpire;
+ bool m_bHasCompetitiveAccess;
+ uint32 m_unLadderRank;
+ bool m_bIsLowPriority;
+ uint32 m_unExperienceLevel;
+ };
+
+ const LobbyPlayerInfo* GetLobbyPlayerInfo( CSteamID &steamID ) const;
+
+ virtual void OnThink() OVERRIDE
+ {
+ BaseClass::OnThink();
+ WriteStatusControls();
+
+ if ( gpGlobals->curtime > m_flRefreshPlayerListTime )
+ {
+ UpdatePlayerList();
+ m_flRefreshPlayerListTime = gpGlobals->curtime + 1.f;
+ }
+ }
+
+
+private:
+
+ void SetMatchmakingModeBackground();
+ virtual const char* GetResFile() const = 0;
+ virtual void ApplyChatUserSettings( const LobbyPlayerInfo& player, KeyValues* pSettings ) const = 0;
+ void OnClickedOnPlayer();
+
+ class ChatTextEntry : public vgui::TextEntry
+ {
+ public:
+ ChatTextEntry( vgui::Panel *parent, const char *name ) : vgui::TextEntry( parent, name )
+ {
+ SetCatchEnterKey( true );
+ SetAllowNonAsciiCharacters( true );
+ SetDrawLanguageIDAtLeft( true );
+ }
+
+ virtual void OnKeyCodeTyped(vgui::KeyCode code)
+ {
+ if ( code == KEY_ENTER || code == KEY_PAD_ENTER )
+ {
+ if ( GetTextLength() > 0 )
+ {
+ int nBufSizeBytes = ( GetTextLength() + 4 ) * sizeof( wchar_t );
+ wchar_t *wText = (wchar_t *)stackalloc( nBufSizeBytes );
+ GetText( wText, nBufSizeBytes );
+ TextEntry::SetText("");
+
+ // Convert to UTF8, which is really what we should
+ // use for everything
+ int nUtf8BufferSizeBytes = nBufSizeBytes * 2;
+ char *szText = (char *)stackalloc( nUtf8BufferSizeBytes );
+ V_UnicodeToUTF8( wText, szText, nUtf8BufferSizeBytes );
+ GTFGCClientSystem()->SendSteamLobbyChat( CTFGCClientSystem::k_eLobbyMsg_UserChat, szText );
+ }
+ }
+ else if ( code == KEY_TAB )
+ {
+ // Ignore tab, otherwise vgui will screw up the focus.
+ return;
+ }
+ else
+ {
+ vgui::TextEntry::OnKeyCodeTyped( code );
+ }
+ }
+ };
+
+ class ChatLog : public vgui::RichText
+ {
+ public:
+ ChatLog( vgui::Panel *parent, const char *name ) : vgui::RichText( parent, name )
+ {
+ }
+
+ virtual void ApplySchemeSettings( vgui::IScheme *pScheme )
+ {
+ vgui::RichText::ApplySchemeSettings(pScheme);
+
+ vgui::HFont hFont = pScheme->GetFont( "ChatMiniFont" );
+ SetFont( hFont );
+ }
+ };
+
+ CUtlVector<vgui::Label *> m_vecSearchCriteriaLabels;
+
+ vgui::EditablePanel *m_pSearchActiveGroupBox;
+ vgui::Label *m_pSearchActiveTitleLabel;
+ vgui::Label *m_pSearchActivePenaltyLabel;
+ vgui::EditablePanel *m_pPartyHasLowPriority;
+
+ vgui::CheckButton *m_pJoinLateCheckButton;
+ vgui::Label *m_pJoinLateValueLabel;
+
+ vgui::EditablePanel *m_pPartyActiveGroupBox;
+ vgui::Button *m_pInviteButton;
+ ChatLog *m_pChatLog;
+ ChatTextEntry *m_pChatTextEntry;
+
+ int m_iImageAvatars[MAX_PLAYERS+1];
+ CUtlMap<int,int> m_mapAvatarsToImageList;
+
+ vgui::HFont m_fontPlayerListItem;
+
+ CSOTFParty_State m_eCurrentPartyState;
+ float m_flRefreshPlayerListTime;
+
+ CMainMenuToolTip* m_pToolTip;
+
+ void UpdatePlayerList();
+ void WriteStatusControls(); // MM status
+ virtual bool ShouldShowLateJoin() const = 0;
+
+ CUtlVector<LobbyPlayerInfo> m_vecPlayers;
+
+ CCallback<CBaseLobbyPanel, PersonaStateChange_t, false> m_sPersonaStateChangedCallback;
+
+ void OnPersonaStateChanged( PersonaStateChange_t *info )
+ {
+ UpdatePlayerList();
+ }
+};
+
+#endif //TF_LOBBYPANEL_H \ No newline at end of file