예제 #1
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;
            }
        }
예제 #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
        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);
        }