source-engine/public/panorama/controls/listsegmentview.h

85 lines
2.9 KiB
C
Raw Normal View History

2020-04-22 16:56:21 +00:00
//=========== 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