Team Fortress 2 Source Code as on 22/4/2020
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
//=========== Copyright Valve Corporation, All rights reserved. ===============//
//
// Purpose:
//=============================================================================//
#ifndef GRID_H
#define GRID_H
#ifdef _WIN32
#pragma once
#endif
#include "panel2d.h"
#include "panorama/controls/label.h"
#include "panorama/controls/mousescroll.h"
namespace panorama {
DECLARE_PANEL_EVENT0( ReadyPanelForDisplay ) DECLARE_PANEL_EVENT0( PanelDoneWithDisplay ) DECLARE_PANEL_EVENT0( GridMotionTimeout ); DECLARE_PANEL_EVENT0( GridInFastMotion ); DECLARE_PANEL_EVENT0( GridStoppingFastMotion ); DECLARE_PANEL_EVENT0( GridPageLeft ); DECLARE_PANEL_EVENT0( GridPageRight ); DECLARE_PANEL_EVENT0( GridDirectionalMove ); DECLARE_PANEL_EVENT1( ChildIndexSelected, int );
//-----------------------------------------------------------------------------
// Purpose: Button
//-----------------------------------------------------------------------------
class CGrid : public CPanel2D { DECLARE_PANEL2D( CGrid, CPanel2D );
public: CGrid( CPanel2D *parent, const char * pchPanelID ); virtual ~CGrid();
CPanel2D * AccessSelectedPanel() { return m_pFocusedChild.Get(); }
virtual void SetupJavascriptObjectTemplate() OVERRIDE;
// Scroll the grid so the focused panel is in the top left corner
void MoveFocusToTopLeft();
// Scroll the grid all the way to the left regardless of what's
// focused.
void ScrollPanelToLeftEdge();
// Trigger fast motion style temporarily, do this if you are directly setting focus ahead a bunch
void TriggerFastMotion(); void BumpFastMotionTimeout();
void SetHorizontalCount( int nCount ) { SetHorizontalAndVerticalCount( nCount, m_nVerticalCount ); } void SetVerticalCount( int nCount ) { SetHorizontalAndVerticalCount( m_nHorizontalCount, nCount ); } int GetHorizontalCount() const { return m_nHorizontalCount; } int GetVerticalCount() const { return m_nVerticalCount; }
void SetHorizontalFocusLimit( int nCount ) { m_nHorizontalFocusLimit = nCount; InvalidateSizeAndPosition(); } int GetHorizontalFocusLimit() const { return m_nHorizontalFocusLimit; }
float GetScrollProgress() const { return m_flScrollProgress; }
virtual bool OnMoveUp( int nRepeats ); virtual bool OnMoveDown( int nRepeats ); virtual bool OnMoveRight( int nRepeats ); virtual bool OnMoveLeft( int nRepeats ); virtual bool OnTabForward( int nRepeats ); virtual bool OnTabBackward( int nRepeats ); virtual bool OnMouseWheel( const panorama::MouseData_t &code ); virtual bool OnGamePadDown( const panorama::GamePadData_t &code ); virtual bool OnKeyDown( const KeyData_t &code );
virtual bool BRequiresContentClipLayer() OVERRIDE { return true; }
virtual void Paint(); virtual bool OnSetFocusToNextPanel( int nRepeats, EFocusMoveDirection moveType, bool bAllowWrap, float flTabIndexCurrent, float flXPosCurrent, float flYPosCurrent, float flXStart, float fYStart ) OVERRIDE { switch( moveType ) { case k_ENextInTabOrder: if ( OnTabForward( nRepeats ) ) return true; break; case k_ENextByXPosition: if ( OnMoveRight( nRepeats ) ) return true; break; case k_EPrevInTabOrder: if ( OnTabBackward( nRepeats ) ) return true; break; case k_EPrevByXPosition: if ( OnMoveLeft( nRepeats ) ) return true; break; case k_ENextByYPosition: if ( OnMoveDown( nRepeats ) ) return true; break; case k_EPrevByYPosition: if ( OnMoveUp( nRepeats ) ) return true; break; default: break; }
return false; }
void SetHorizontalAndVerticalCount( int nHorizontalCount, int nVerticalCount );
void SetIgnoreFastMotion( bool bValue ) { m_bIgnoreFastMotion = bValue; }
#ifdef DBGFLAG_VALIDATE
virtual void ValidateClientPanel( CValidator &validator, const tchar *pchName ) OVERRIDE; #endif
protected: virtual bool BSetProperty( CPanoramaSymbol symName, const char *pchValue ) OVERRIDE; virtual void OnLayoutTraverse( float flFinalWidth, float flFinalHeight ); virtual void OnBeforeChildrenChanged() { m_bForceRelayout = true; }
virtual void OnChildStylesChanged() OVERRIDE { m_bVecVisibleDirty = true; } virtual void OnAfterChildrenChanged() OVERRIDE { m_bVecVisibleDirty = true; } private:
void UpdateVecVisible(); int GetVisibleChildCount(); CPanel2D *GetVisibleChild( int iVisibleIndex );
// event handlers
bool EventInputFocusSet( const CPanelPtr< IUIPanel > &ptrPanel ); bool EventInputFocusLost( const CPanelPtr< IUIPanel > &ptrPanel ); bool MotionTimeout( const CPanelPtr< IUIPanel > &ptrPanel ); bool OnMouseScroll( const CPanelPtr< IUIPanel > &ptrPanel, int cRepeat ); void LayoutMouseScrollRegions( float flFinalWidth, float flFinalHeight ); bool EventWindowCursorShown( IUIWindow *pWindow ); bool EventWindowCursorHidden( IUIWindow *pWindow );
void RegisterForCursorChanges(); void UnregisterForCursorChanges();
int GetFocusedChildVisibleIndex(); void UpdateChildPositions( bool bForceTopLeft = false );
bool m_bHadFocus;
CPanelPtr< CPanel2D > m_pFocusedChild; CUtlVector< CPanelPtr<CPanel2D> > m_vecPanelsReadyForDisplay;
int m_nScrollOffset;
float m_flChildWidth; float m_flChildHeight; float m_flScaleOffset;
float m_flScrollProgress;
int m_nHorizontalCount; int m_nVerticalCount; // Override how far right you can move before all items must shift, should be smaller than m_nHorizontalCount
int m_nHorizontalFocusLimit;
double m_flLastMouseWheel; bool m_bForceRelayout;
bool m_bIgnoreFastMotion; double m_flStartedMotion; double m_flLastMotion; uint64 m_ulMotionSinceStart; bool m_bFastMotionStarted; bool m_bVecVisibleDirty;
CUtlVector< CPanel2D * > m_vecVisibleChildren; panorama::CMouseScrollRegion *m_pLeftMouseScrollRegion; panorama::CMouseScrollRegion *m_pRightMouseScrollRegion;
};
} // namespace panorama
#endif // GRID_H
|