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.
85 lines
2.9 KiB
85 lines
2.9 KiB
5 years ago
|
//=========== 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
|