ImprovedSelectionList

From Unify Community Wiki
Revision as of 01:27, 6 April 2011 by Danielbrauer (Talk | contribs)

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to: navigation, search

By Daniel Brauer.

Description

Visualises an array of strings or GUIContents and returns the index selected by the user.

Optionally, a delegate can be provided to capture double-clicking list items.

Component code

<csharp>using UnityEngine;

public class GUILayoutx {

public delegate void DoubleClickCallback(int index);

public static int SelectionList(int selected, GUIContent[] list) { return SelectionList(selected, list, "List Item", null); }

public static int SelectionList(int selected, GUIContent[] list, GUIStyle elementStyle) { return SelectionList(selected, list, elementStyle, null); }

public static int SelectionList(int selected, GUIContent[] list, DoubleClickCallback callback) { return SelectionList(selected, list, "List Item", callback); }

public static int SelectionList(int selected, GUIContent[] list, GUIStyle elementStyle, DoubleClickCallback callback) { for (int i = 0; i < list.Length; ++i) { Rect elementRect = GUILayoutUtility.GetRect(list[i], elementStyle); bool hover = elementRect.Contains(Event.current.mousePosition); if (hover && Event.current.type == EventType.MouseDown) { selected = i; Event.current.Use(); } else if (hover && callback != null && Event.current.type == EventType.MouseUp && Event.current.clickCount == 2) { callback(i); Event.current.Use(); } else if (Event.current.type == EventType.repaint) { elementStyle.Draw(elementRect, list[i], hover, false, i == selected, false); } } return selected; }

public static int SelectionList(int selected, string[] list) { return SelectionList(selected, list, "List Item", null); }

public static int SelectionList(int selected, string[] list, GUIStyle elementStyle) { return SelectionList(selected, list, elementStyle, null); }

public static int SelectionList(int selected, string[] list, DoubleClickCallback callback) { return SelectionList(selected, list, "List Item", callback); }

public static int SelectionList(int selected, string[] list, GUIStyle elementStyle, DoubleClickCallback callback) { for (int i = 0; i < list.Length; ++i) { Rect elementRect = GUILayoutUtility.GetRect(new GUIContent(list[i]), elementStyle); bool hover = elementRect.Contains(Event.current.mousePosition); if (hover && Event.current.type == EventType.MouseDown) { selected = i; Event.current.Use(); } else if (hover && callback != null && Event.current.type == EventType.MouseUp && Event.current.clickCount == 2) { callback(i); Event.current.Use(); } else if (Event.current.type == EventType.repaint) { elementStyle.Draw(elementRect, list[i], hover, false, i == selected, false); } } return selected; }

}</csharp>

Usage

Providing a double-click delegate:

<csharp> int currentSelection; string[] myList = new string[] {"First", "Second", "Third"};

protected void OnGUI() { currentSelection = SelectionList(myList, currentSelection, DoubleClickItem); }

protected void DoubleClickItem(int index) { Debug.Log("Clicked " + myList[index]; } </csharp>

Personal tools
Namespaces

Variants
Actions
Navigation
Extras
Toolbox