// =================================================================================== // METHODS --------------------------------------------------------------------------- static void DeselectAll(GUISelectData.ItemData excludeItemData = null) { int len = _selectData.selectableItemsDatas.Count; for (int i = 0; i < len; i++) { GUISelectData.ItemData itemData = _selectData.selectableItemsDatas[i]; if (itemData == excludeItemData) { continue; } itemData.selected = false; } }
static void SelectRange(GUISelectData.ItemData rangeStart, GUISelectData.ItemData rangeEnd) { if (rangeStart.index == rangeEnd.index) { return; } if (rangeStart.index > rangeEnd.index) { GUISelectData.ItemData rangeTmp = rangeStart; rangeStart = rangeEnd; rangeEnd = rangeTmp; } int len = _selectData.selectableItemsDatas.Count; for (int i = 0; i < len; i++) { GUISelectData.ItemData itemData = _selectData.selectableItemsDatas[i]; itemData.selected = itemData.index >= rangeStart.index && itemData.index <= rangeEnd.index; } }
static bool SetState(Editor editor, EditorWindow editorWindow, IList selectableList, int selectionItemIndex, Color selectionColor) { if (editor != null) { _editor = editor; } else { _editorWindow = editorWindow; } _selectionColor = selectionColor; _selectionColor.a = 0.35f; _unfocusedSelectionColor = new Color(selectionColor.r, selectionColor.g, selectionColor.b, 0.15f); if (_selectData == null || !_selectData.IsStoredList(selectableList)) { _selectData = new GUISelectData(selectableList); } // Check if something was deleted from the list before continuing if (selectionItemIndex == -1 || selectionItemIndex > _selectData.selectableItemsDatas.Count - 1) { return(false); } GUISelectData.ItemData itemData = _selectData.selectableItemsDatas[selectionItemIndex]; if (Event.current.type == EventType.Repaint) { itemData.rect = GUILayoutUtility.GetLastRect(); } bool wasPressed = itemData.isPressed; bool selectionStatusChanged = false; if (Event.current.type == EventType.MouseDown) { itemData.isPressed = itemData.rect.Contains(Event.current.mousePosition); if (wasPressed != itemData.isPressed && !itemData.selected) { selectionStatusChanged = true; if (!itemData.selected) { itemData.canBeDeselected = false; } } } else if (Event.current.type == EventType.MouseUp || Event.current.type == EventType.Used || Event.current.type == EventType.DragExited) { if (!itemData.canBeDeselected) { itemData.canBeDeselected = true; } else if (itemData.isPressed && itemData.selected && itemData.rect.Contains(Event.current.mousePosition)) { selectionStatusChanged = true; } else if (HOGUIUtils.PanelContainsMouse() && itemData.selected && !Event.current.shift && !Event.current.control && !itemData.rect.Contains(Event.current.mousePosition)) { itemData.selected = false; Repaint(); } itemData.isPressed = false; } if (selectionStatusChanged) { itemData.selected = !itemData.selected; if (Event.current.shift) { _selectData.CheckFirstSelectedItem(itemData); SelectRange(_selectData.firstSelectedItemData, itemData); } else if (!Event.current.control) { DeselectAll(itemData.selected ? itemData : null); _selectData.CheckFirstSelectedItem(itemData); } Repaint(); } if (itemData.selected) { HOGUI.FlatDivider(itemData.rect, IsFocusedPanel() ? _selectionColor : _unfocusedSelectionColor); return(true); } return(false); }