aboutsummaryrefslogtreecommitdiff
path: root/sp/src/public/vgui_controls/TreeView.h
diff options
context:
space:
mode:
authorJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
committerJoe Ludwig <[email protected]>2013-06-26 15:22:04 -0700
commit39ed87570bdb2f86969d4be821c94b722dc71179 (patch)
treeabc53757f75f40c80278e87650ea92808274aa59 /sp/src/public/vgui_controls/TreeView.h
downloadsource-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.tar.xz
source-sdk-2013-39ed87570bdb2f86969d4be821c94b722dc71179.zip
First version of the SOurce SDK 2013
Diffstat (limited to 'sp/src/public/vgui_controls/TreeView.h')
-rw-r--r--sp/src/public/vgui_controls/TreeView.h203
1 files changed, 203 insertions, 0 deletions
diff --git a/sp/src/public/vgui_controls/TreeView.h b/sp/src/public/vgui_controls/TreeView.h
new file mode 100644
index 00000000..141469c4
--- /dev/null
+++ b/sp/src/public/vgui_controls/TreeView.h
@@ -0,0 +1,203 @@
+//========= Copyright Valve Corporation, All rights reserved. ============//
+//
+// Purpose:
+//
+// $NoKeywords: $
+//=============================================================================//
+
+#ifndef TREEVIEW_H
+#define TREEVIEW_H
+
+#ifdef _WIN32
+#pragma once
+#endif
+
+#include <utllinkedlist.h>
+#include <utlvector.h>
+#include <vgui/VGUI.h>
+#include <vgui_controls/Panel.h>
+
+class KeyValues;
+
+namespace vgui
+{
+
+class ExpandButton;
+class TreeNode;
+class TreeViewSubPanel;
+
+// sorting function, should return true if node1 should be displayed before node2
+typedef bool (*TreeViewSortFunc_t)(KeyValues *node1, KeyValues *node2);
+
+class TreeView : public Panel
+{
+ DECLARE_CLASS_SIMPLE( TreeView, Panel );
+
+public:
+ TreeView(Panel *parent, const char *panelName);
+ ~TreeView();
+
+ void SetSortFunc(TreeViewSortFunc_t pSortFunc);
+
+ virtual int AddItem(KeyValues *data, int parentItemIndex);
+
+ virtual int GetRootItemIndex();
+ virtual int GetNumChildren( int itemIndex );
+ virtual int GetChild( int iParentItemIndex, int iChild ); // between 0 and GetNumChildren( iParentItemIndex ).
+
+ virtual int GetItemCount(void);
+ virtual KeyValues *GetItemData(int itemIndex);
+ virtual void RemoveItem(int itemIndex, bool bPromoteChildren, bool bRecursivelyRemove = false );
+ virtual void RemoveAll();
+ virtual bool ModifyItem(int itemIndex, KeyValues *data);
+ virtual int GetItemParent(int itemIndex);
+
+ virtual void SetFont(HFont font);
+
+ virtual void SetImageList(ImageList *imageList, bool deleteImageListWhenDone);
+
+ void SetAllowMultipleSelections( bool state );
+ bool IsMultipleSelectionAllowed() const;
+
+ virtual void ClearSelection();
+ virtual void AddSelectedItem( int itemIndex, bool clearCurrentSelection, bool requestFocus = true, bool bMakeItemVisible = true );
+ virtual void RemoveSelectedItem( int itemIndex );
+ virtual void SelectAll();
+
+ virtual bool IsItemSelected( int itemIndex );
+ virtual void RangeSelectItems( int clickedItem );
+ virtual void FindNodesInRange( int startItem, int endItem, CUtlVector< int >& itemIndices );
+
+ // returns the id of the currently selected item, -1 if nothing is selected
+ virtual int GetSelectedItemCount() const;
+ virtual int GetFirstSelectedItem() const;
+ virtual void GetSelectedItems( CUtlVector< int >& list );
+ virtual void GetSelectedItemData( CUtlVector< KeyValues * >& list );
+
+ // set colors for individual elments
+ virtual void SetItemFgColor(int itemIndex, const Color& color);
+ virtual void SetItemBgColor(int itemIndex, const Color& color);
+ virtual void SetItemSelectionTextColor( int itemIndex, const Color& clr );
+ virtual void SetItemSelectionBgColor( int itemIndex, const Color& clr );
+ virtual void SetItemSelectionUnfocusedBgColor( int itemIndex, const Color& clr );
+
+ // returns true if the itemID is valid for use
+ virtual bool IsItemIDValid(int itemIndex);
+
+ // item iterators
+ // iterate from [0..GetHighestItemID()],
+ // and check each with IsItemIDValid() before using
+ virtual int GetHighestItemID();
+
+ virtual void ExpandItem(int itemIndex, bool bExpand);
+ virtual bool IsItemExpanded( int itemIndex );
+
+ virtual void MakeItemVisible(int itemIndex);
+
+ // This tells which of the visible items is the top one.
+ virtual void GetVBarInfo( int &top, int &nItemsVisible, bool& hbarVisible );
+
+ virtual HFont GetFont();
+
+ virtual void GenerateDragDataForItem( int itemIndex, KeyValues *msg );
+ virtual void SetDragEnabledItems( bool state );
+
+ virtual void OnLabelChanged( int itemIndex, char const *oldString, char const *newString );
+ virtual bool IsLabelEditingAllowed() const;
+ virtual bool IsLabelBeingEdited() const;
+ virtual void SetAllowLabelEditing( bool state );
+
+ /* message sent
+
+ "TreeViewItemSelected" int "itemIndex"
+ called when the selected item changes
+ "TreeViewItemDeselected" int "itemIndex"
+ called when item is deselected
+ */
+ int GetRowHeight();
+ int GetVisibleMaxWidth();
+ virtual void OnMousePressed(MouseCode code);
+
+ // By default, the tree view expands nodes on left-click. This enables/disables that feature
+ void EnableExpandTreeOnLeftClick( bool bEnable );
+
+ virtual void SetLabelEditingAllowed( int itemIndex, bool state );
+ virtual void StartEditingLabel( int itemIndex );
+
+ virtual bool IsItemDroppable( int itemIndex, CUtlVector< KeyValues * >& msglist );
+ virtual void OnItemDropped( int itemIndex, CUtlVector< KeyValues * >& msglist );
+ virtual bool GetItemDropContextMenu( int itemIndex, Menu *menu, CUtlVector< KeyValues * >& msglist );
+ virtual HCursor GetItemDropCursor( int itemIndex, CUtlVector< KeyValues * >& msglist );
+
+ virtual int GetPrevChildItemIndex( int itemIndex );
+ virtual int GetNextChildItemIndex( int itemIndex );
+
+ virtual void PerformLayout();
+
+ // Makes the scrollbar parented to some other panel...
+ ScrollBar *SetScrollBarExternal( bool vertical, Panel *newParent );
+ void GetScrollBarSize( bool vertical, int& w, int& h );
+
+ void SetMultipleItemDragEnabled( bool state ); // if this is set, then clicking on one row and dragging will select a run or items, etc.
+ bool IsMultipleItemDragEnabled() const;
+
+ int FindItemUnderMouse( int mx, int my );
+
+protected:
+ // functions to override
+ // called when a node, marked as "Expand", needs to generate it's child nodes when expanded
+ virtual void GenerateChildrenOfNode(int itemIndex) {}
+
+ // override to open a custom context menu on a node being selected and right-clicked
+ virtual void GenerateContextMenu( int itemIndex, int x, int y ) {}
+
+ // overrides
+ virtual void OnMouseWheeled(int delta);
+ virtual void OnSizeChanged(int wide, int tall);
+ virtual void ApplySchemeSettings(IScheme *pScheme);
+ MESSAGE_FUNC_INT( OnSliderMoved, "ScrollBarSliderMoved", position );
+ virtual void SetBgColor( Color color );
+
+private:
+ friend class TreeNode;
+ friend class TreeNodeText;
+
+ TreeNode* GetItem( int itemIndex );
+ virtual void RemoveChildrenOfNode( int itemIndex );
+ void SetLabelBeingEdited( bool state );
+
+ // Clean up the image list
+ void CleanUpImageList( );
+
+ // to be accessed by TreeNodes
+ IImage* GetImage(int index);
+
+ // bools
+ bool m_bAllowLabelEditing : 1;
+ bool m_bDragEnabledItems : 1;
+ bool m_bDeleteImageListWhenDone : 1;
+ bool m_bLeftClickExpandsTree : 1;
+ bool m_bLabelBeingEdited : 1;
+ bool m_bMultipleItemDragging : 1;
+ bool m_bAllowMultipleSelections : 1;
+
+ // cross reference - no hierarchy ordering in this list
+ CUtlLinkedList<TreeNode *, int> m_NodeList;
+ ScrollBar *m_pHorzScrollBar, *m_pVertScrollBar;
+ int m_nRowHeight;
+
+ ImageList *m_pImageList;
+ TreeNode *m_pRootNode;
+ TreeViewSortFunc_t m_pSortFunc;
+ HFont m_Font;
+
+ CUtlVector< TreeNode * > m_SelectedItems;
+ TreeViewSubPanel *m_pSubPanel;
+
+ int m_nMostRecentlySelectedItem;
+ bool m_bScrollbarExternal[ 2 ]; // 0 = vert, 1 = horz
+};
+
+}
+
+#endif // TREEVIEW_H