예제 #1
0
        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;
        }
예제 #2
0
 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;
     }
 }
예제 #3
0
        // ===================================================================================
        // 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;
            }
        }