From 39ed87570bdb2f86969d4be821c94b722dc71179 Mon Sep 17 00:00:00 2001 From: Joe Ludwig Date: Wed, 26 Jun 2013 15:22:04 -0700 Subject: First version of the SOurce SDK 2013 --- .../game/client/vgui_slideshow_display_screen.cpp | 174 +++++++++++++++++++++ 1 file changed, 174 insertions(+) create mode 100644 mp/src/game/client/vgui_slideshow_display_screen.cpp (limited to 'mp/src/game/client/vgui_slideshow_display_screen.cpp') diff --git a/mp/src/game/client/vgui_slideshow_display_screen.cpp b/mp/src/game/client/vgui_slideshow_display_screen.cpp new file mode 100644 index 00000000..63820526 --- /dev/null +++ b/mp/src/game/client/vgui_slideshow_display_screen.cpp @@ -0,0 +1,174 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +#include "cbase.h" +#include "c_vguiscreen.h" +#include "vgui_controls/Label.h" +#include "vgui_bitmappanel.h" +#include +#include "c_slideshow_display.h" +#include "ienginevgui.h" +#include "fmtstr.h" +#include "vgui_controls/ImagePanel.h" + +using namespace vgui; + + +//----------------------------------------------------------------------------- +// Control screen +//----------------------------------------------------------------------------- +class CSlideshowDisplayScreen : public CVGuiScreenPanel +{ + DECLARE_CLASS( CSlideshowDisplayScreen, CVGuiScreenPanel ); + +public: + CSlideshowDisplayScreen( vgui::Panel *parent, const char *panelName ); + + virtual void ApplySchemeSettings( IScheme *pScheme ); + + virtual bool Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData ); + virtual void OnTick(); + +private: + void Update( C_SlideshowDisplay *pSlideshowDisplay ); + +private: + vgui::Label *m_pDisplayTextLabel; + CUtlVector m_pSlideshowImages; + + int iLastSlideIndex; + + Color m_cDefault; + Color m_cInvisible; + + bool bIsAlreadyVisible; +}; + + +DECLARE_VGUI_SCREEN_FACTORY( CSlideshowDisplayScreen, "slideshow_display_screen" ); + +//----------------------------------------------------------------------------- +// Constructor: +//----------------------------------------------------------------------------- +CSlideshowDisplayScreen::CSlideshowDisplayScreen( vgui::Panel *parent, const char *panelName ) + : BaseClass( parent, "CSlideshowDisplayScreen", vgui::scheme()->LoadSchemeFromFileEx( enginevgui->GetPanel( PANEL_CLIENTDLL ), "resource/SlideshowDisplayScreen.res", "SlideshowDisplayScreen" ) ) +{ + m_pDisplayTextLabel = new vgui::Label( this, "NumberDisplay", "x" ); + iLastSlideIndex = 0; +} + +void CSlideshowDisplayScreen::ApplySchemeSettings( IScheme *pScheme ) +{ + assert( pScheme ); + + m_cDefault = pScheme->GetColor( "CSlideshowDisplayScreen_Default", GetFgColor() ); + m_cInvisible = Color( 0, 0, 0, 0 ); + + m_pDisplayTextLabel->SetFgColor( m_cDefault ); +} + +//----------------------------------------------------------------------------- +// Initialization +//----------------------------------------------------------------------------- +bool CSlideshowDisplayScreen::Init( KeyValues* pKeyValues, VGuiScreenInitData_t* pInitData ) +{ + // Make sure we get ticked... + vgui::ivgui()->AddTickSignal( GetVPanel() ); + + if (!BaseClass::Init(pKeyValues, pInitData)) + return false; + + return true; +} + +//----------------------------------------------------------------------------- +// Update the display string +//----------------------------------------------------------------------------- +void CSlideshowDisplayScreen::OnTick() +{ + BaseClass::OnTick(); + + if ( g_SlideshowDisplays.Count() <= 0 ) + return; + + C_SlideshowDisplay *pSlideshowDisplay = NULL; + + for ( int iDisplayScreens = 0; iDisplayScreens < g_SlideshowDisplays.Count(); ++iDisplayScreens ) + { + C_SlideshowDisplay *pSlideshowDisplayTemp = g_SlideshowDisplays[ iDisplayScreens ]; + if ( pSlideshowDisplayTemp && pSlideshowDisplayTemp->IsEnabled() ) + { + pSlideshowDisplay = pSlideshowDisplayTemp; + break; + } + } + + if( !pSlideshowDisplay ) + { + // All display screens are disabled + if ( bIsAlreadyVisible ) + { + SetVisible( false ); + bIsAlreadyVisible = false; + } + return; + } + + if ( !bIsAlreadyVisible ) + { + SetVisible( true ); + bIsAlreadyVisible = true; + } + + Update( pSlideshowDisplay ); +} + +void CSlideshowDisplayScreen::Update( C_SlideshowDisplay *pSlideshowDisplay ) +{ + char szBuff[ 256 ]; + pSlideshowDisplay->GetDisplayText( szBuff ); + m_pDisplayTextLabel->SetText( szBuff ); + + if ( m_pSlideshowImages.Count() == 0 ) + { + // Build the list of image panels! + for ( int iSlide = 0; iSlide < pSlideshowDisplay->NumMaterials(); ++iSlide ) + { + m_pSlideshowImages.AddToTail( SETUP_PANEL( new ImagePanel( this, "SlideshowImage" ) ) ); + + int iMatIndex = pSlideshowDisplay->GetMaterialIndex( iSlide ); + + if ( iMatIndex > 0 ) + { + const char *pMaterialName = GetMaterialNameFromIndex( iMatIndex ); + if ( pMaterialName ) + { + pMaterialName = Q_strnchr( pMaterialName, '/', Q_strlen( pMaterialName ) ); + + if ( pMaterialName ) + { + pMaterialName = pMaterialName + 1; + m_pSlideshowImages[ iSlide ]->SetImage( pMaterialName ); + m_pSlideshowImages[ iSlide ]->SetVisible( false ); + m_pSlideshowImages[ iSlide ]->SetZPos( -3 ); + m_pSlideshowImages[ iSlide ]->SetWide( GetWide() ); + m_pSlideshowImages[ iSlide ]->SetTall( GetTall() ); + } + } + } + } + } + + int iCurrentSlideIndex = pSlideshowDisplay->CurrentSlideIndex(); + + if ( iCurrentSlideIndex != iLastSlideIndex ) + { + m_pSlideshowImages[ iLastSlideIndex ]->SetVisible( false ); + m_pSlideshowImages[ iCurrentSlideIndex ]->SetVisible( true ); + iLastSlideIndex = iCurrentSlideIndex; + } +} -- cgit v1.2.3