diff options
Diffstat (limited to 'public/panorama/controls/listsegmentview.h')
| -rw-r--r-- | public/panorama/controls/listsegmentview.h | 84 |
1 files changed, 84 insertions, 0 deletions
diff --git a/public/panorama/controls/listsegmentview.h b/public/panorama/controls/listsegmentview.h new file mode 100644 index 0000000..e4ffc02 --- /dev/null +++ b/public/panorama/controls/listsegmentview.h @@ -0,0 +1,84 @@ +//=========== Copyright Valve Corporation, All rights reserved. ===============// +// +// Purpose: +//=============================================================================// + +#ifndef LIST_SEGMENT_VIEW_H +#define LIST_SEGMENT_VIEW_H + +#ifdef _WIN32 +#pragma once +#endif + +#include "panel2d.h" + +DECLARE_PANEL_EVENT0( ListSegmentViewRetreat ); +DECLARE_PANEL_EVENT0( ListSegmentViewAdvance ); + +DECLARE_PANORAMA_EVENT0( ListSegmentViewChanged ); + + +namespace panorama +{ + /* + + A class that handles displaying X sequential elements from its children. Similar to a carousel, but more + minimal -- you handle advancing/retreating yourself. Supports up to 10 visible elements. + + Things you need to do: + - Specify "items-displayed:" in the xml, which is how many elements are shown at once. + - Specify "step-size:" in the xml, which is how many steps it'll move when advancing or retreating. Cannot be bigger than items-displayed. + - Define these classes, which will be added to the child elements (X is always 1 through 10): + .ListSegmentDisplayedX, one for each of the elements you intend to display. + .ListSegmentHiddenBeforeX, one for each hidden element that's off the "top/left" of the display. These guys are prior to the displayed window. + .ListSegmentHiddenAfterX, one for each hidden element that's off the "bottom/right" of the display. These guys are after the displayed window. + .ListSegmentSnap, which eliminates any transitions you're using in your element class, so that elements just go directly to their displayed/hidden states immediately. + + Then you just need to add children (in order) to it, and call AdvancePosition and RetreatPosition to move through them. + + */ + +//----------------------------------------------------------------------------- +// Purpose: List Segment View +//----------------------------------------------------------------------------- +class CListSegmentView : public CPanel2D +{ + DECLARE_PANEL2D( CListSegmentView, CPanel2D ); + +public: + CListSegmentView( CPanel2D *parent, const char * pchPanelID ); + virtual ~CListSegmentView(); + + virtual bool BSetProperty( CPanoramaSymbol symName, const char *pchValue ) OVERRIDE; + virtual void GetDebugPropertyInfo( CUtlVector< DebugPropertyOutput_t *> *pvecProperties ) OVERRIDE; + + virtual void OnStylesChanged() OVERRIDE { UpdateChildrenStyles( false ); BaseClass::OnStylesChanged(); } + virtual void OnAfterChildrenChanged() OVERRIDE { UpdateChildrenStyles( false ); BaseClass::OnAfterChildrenChanged(); } + + virtual bool BRequiresContentClipLayer() OVERRIDE { return true; } + + bool RetreatPosition( const CPanelPtr< IUIPanel > &panelPtr ); + bool AdvancePosition( const CPanelPtr< IUIPanel > &panelPtr ); + + int GetCurrentPage( void ); + int GetNumPages( void ); + + bool IsAtStart( void ); + bool IsAtEnd( void ); + + void ResetPosition( void ); + +private: + + void UpdateChildrenStyles( bool bSnap ); + + int m_nItemsDisplayed; + int m_nStepSize; + + int m_nCurrentChildIndex; +}; + + +} // namespace panorama + +#endif // LIST_SEGMENT_VIEW_H |