summaryrefslogtreecommitdiff
path: root/public/panorama/controls/listsegmentview.h
diff options
context:
space:
mode:
Diffstat (limited to 'public/panorama/controls/listsegmentview.h')
-rw-r--r--public/panorama/controls/listsegmentview.h84
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