private static void DoDragAndDrop(ListViewState listView, ListViewElement element, List<ColumnViewElement> columnViewElements, ObjectColumnGetDataFunction getDataForDraggingFunction)
 {
     if (((GUIUtility.hotControl == listView.ID) && (Event.current.type == EventType.MouseDown)) && (element.position.Contains(Event.current.mousePosition) && (Event.current.button == 0)))
     {
         DragAndDropDelay stateObject = (DragAndDropDelay) GUIUtility.GetStateObject(typeof(DragAndDropDelay), listView.ID);
         stateObject.mouseDownPosition = Event.current.mousePosition;
     }
     if (((GUIUtility.hotControl == listView.ID) && (Event.current.type == EventType.MouseDrag)) && GUIClip.visibleRect.Contains(Event.current.mousePosition))
     {
         DragAndDropDelay delay2 = (DragAndDropDelay) GUIUtility.GetStateObject(typeof(DragAndDropDelay), listView.ID);
         if (delay2.CanStartDrag())
         {
             object data = (getDataForDraggingFunction != null) ? getDataForDraggingFunction(columnViewElements[listView.row].value) : null;
             if (data != null)
             {
                 DragAndDrop.PrepareStartDrag();
                 DragAndDrop.objectReferences = new Object[0];
                 DragAndDrop.paths = null;
                 DragAndDrop.SetGenericData("CustomDragData", data);
                 DragAndDrop.StartDrag(columnViewElements[listView.row].name);
                 Event.current.Use();
             }
         }
     }
 }
Beispiel #2
0
        private int DoListColumn(ListViewState listView, List <ColumnViewElement> columnViewElements, int columnIndex, int selectedIndex, ObjectColumnFunction selectedSearchItemFunction, ObjectColumnFunction selectedRegularItemFunction, ObjectColumnGetDataFunction getDataForDraggingFunction)
        {
            if (((Event.current.type == EventType.KeyDown) && (Event.current.keyCode == KeyCode.Return)) && (listView.row > -1))
            {
                if (this.isSearching && (selectedSearchItemFunction != null))
                {
                    this.DoSearchItemSelectedEvent(selectedSearchItemFunction, columnViewElements[selectedIndex].value);
                }
                if ((!this.isSearching && (GUIUtility.keyboardControl == listView.ID)) && (selectedRegularItemFunction != null))
                {
                    DoItemSelectedEvent(selectedRegularItemFunction, columnViewElements[selectedIndex].value);
                }
            }
            if (((GUIUtility.keyboardControl == listView.ID) && (Event.current.type == EventType.KeyDown)) && !this.isSearching)
            {
                switch (Event.current.keyCode)
                {
                case KeyCode.LeftArrow:
                    this.m_ColumnToFocusKeyboard = columnIndex - 1;
                    Event.current.Use();
                    break;

                case KeyCode.RightArrow:
                    this.m_ColumnToFocusKeyboard = columnIndex + 1;
                    Event.current.Use();
                    break;
                }
            }
            GUILayoutOption[] options    = new GUILayoutOption[] { GUILayout.Width(this.columnWidth) };
            IEnumerator       enumerator = ListViewGUILayout.ListView(listView, s_Styles.background, options).GetEnumerator();

            try
            {
                while (enumerator.MoveNext())
                {
                    ListViewElement   current           = (ListViewElement)enumerator.Current;
                    ColumnViewElement columnViewElement = columnViewElements[current.row];
                    if ((current.row == listView.row) && (Event.current.type == EventType.Repaint))
                    {
                        Rect position = current.position;
                        position.x++;
                        position.y++;
                        s_Styles.selected.Draw(position, false, true, true, GUIUtility.keyboardControl == listView.ID);
                    }
                    GUILayout.Label(columnViewElement.name, new GUILayoutOption[0]);
                    if (columnViewElement.value is List <ColumnViewElement> )
                    {
                        Rect rect2 = current.position;
                        rect2.x  = (rect2.xMax - s_Styles.categoryArrowIcon.width) - 5f;
                        rect2.y += 2f;
                        GUI.Label(rect2, s_Styles.categoryArrowIcon);
                    }
                    this.DoDoubleClick(current, columnViewElement, selectedSearchItemFunction, selectedRegularItemFunction);
                    DoDragAndDrop(listView, current, columnViewElements, getDataForDraggingFunction);
                }
            }
            finally
            {
                IDisposable disposable = enumerator as IDisposable;
                if (disposable != null)
                {
                    disposable.Dispose();
                }
            }
            if (Event.current.type == EventType.Layout)
            {
                selectedIndex = listView.row;
            }
            return(selectedIndex);
        }
Beispiel #3
0
 private static void DoDragAndDrop(ListViewState listView, ListViewElement element, List <ColumnViewElement> columnViewElements, ObjectColumnGetDataFunction getDataForDraggingFunction)
 {
     if (((GUIUtility.hotControl == listView.ID) && (Event.current.type == EventType.MouseDown)) && (element.position.Contains(Event.current.mousePosition) && (Event.current.button == 0)))
     {
         DragAndDropDelay stateObject = (DragAndDropDelay)GUIUtility.GetStateObject(typeof(DragAndDropDelay), listView.ID);
         stateObject.mouseDownPosition = Event.current.mousePosition;
     }
     if (((GUIUtility.hotControl == listView.ID) && (Event.current.type == EventType.MouseDrag)) && GUIClip.visibleRect.Contains(Event.current.mousePosition))
     {
         DragAndDropDelay delay2 = (DragAndDropDelay)GUIUtility.GetStateObject(typeof(DragAndDropDelay), listView.ID);
         if (delay2.CanStartDrag())
         {
             object data = getDataForDraggingFunction?.Invoke(columnViewElements[listView.row].value);
             if (data != null)
             {
                 DragAndDrop.PrepareStartDrag();
                 DragAndDrop.objectReferences = new UnityEngine.Object[0];
                 DragAndDrop.paths            = null;
                 DragAndDrop.SetGenericData("CustomDragData", data);
                 DragAndDrop.StartDrag(columnViewElements[listView.row].name);
                 Event.current.Use();
             }
         }
     }
 }
Beispiel #4
0
        public void OnGUI(List <ColumnViewElement> elements, ObjectColumnFunction previewColumnFunction, ObjectColumnFunction selectedSearchItemFunction, ObjectColumnFunction selectedRegularItemFunction, ObjectColumnGetDataFunction getDataForDraggingFunction)
        {
            object obj2;

            InitStyles();
            this.m_ScrollPosition = GUILayout.BeginScrollView(this.m_ScrollPosition, new GUILayoutOption[0]);
            GUILayout.BeginHorizontal(new GUILayoutOption[0]);
            List <ColumnViewElement> columnViewElements = elements;
            int columnIndex = 0;

            do
            {
                if (this.m_ListViewStates.Count == columnIndex)
                {
                    this.m_ListViewStates.Add(new ListViewState());
                }
                if (this.m_CachedSelectedIndices.Count == columnIndex)
                {
                    this.m_CachedSelectedIndices.Add(-1);
                }
                ListViewState listView = this.m_ListViewStates[columnIndex];
                listView.totalRows = columnViewElements.Count;
                if (columnIndex == 0)
                {
                    GUILayoutOption[] options = new GUILayoutOption[] { GUILayout.MaxWidth(this.columnWidth) };
                    GUILayout.BeginVertical(options);
                }
                int selectedIndex = this.m_CachedSelectedIndices[columnIndex];
                selectedIndex = this.DoListColumn(listView, columnViewElements, columnIndex, selectedIndex, (columnIndex != 0) ? null : selectedSearchItemFunction, selectedRegularItemFunction, getDataForDraggingFunction);
                if ((Event.current.type == EventType.Layout) && (this.m_ColumnToFocusKeyboard == columnIndex))
                {
                    this.m_ColumnToFocusKeyboard = -1;
                    GUIUtility.keyboardControl   = listView.ID;
                    if ((listView.row == -1) && (columnViewElements.Count != 0))
                    {
                        selectedIndex = listView.row = 0;
                    }
                }
                if (columnIndex == 0)
                {
                    if (this.isSearching)
                    {
                        KeyCode keyCode = StealImportantListviewKeys();
                        if (keyCode != KeyCode.None)
                        {
                            ListViewShared.SendKey(this.m_ListViewStates[0], keyCode);
                        }
                    }
                    this.m_SearchText = EditorGUILayout.ToolbarSearchField(this.m_SearchText, new GUILayoutOption[0]);
                    GUILayout.EndVertical();
                }
                if (selectedIndex >= columnViewElements.Count)
                {
                    selectedIndex = -1;
                }
                if (((Event.current.type == EventType.Layout) && (this.m_CachedSelectedIndices[columnIndex] != selectedIndex)) && (this.m_ListViewStates.Count > (columnIndex + 1)))
                {
                    int index = columnIndex + 1;
                    int count = this.m_ListViewStates.Count - (columnIndex + 1);
                    this.m_ListViewStates.RemoveRange(index, count);
                    this.m_CachedSelectedIndices.RemoveRange(index, count);
                }
                this.m_CachedSelectedIndices[columnIndex] = selectedIndex;
                obj2 = (selectedIndex <= -1) ? null : columnViewElements[selectedIndex].value;
                columnViewElements = obj2 as List <ColumnViewElement>;
                columnIndex++;
            }while (columnViewElements != null);
            while (columnIndex < this.minimumNumberOfColumns)
            {
                this.DoDummyColumn();
                columnIndex++;
            }
            DoPreviewColumn(obj2, previewColumnFunction);
            GUILayout.EndHorizontal();
            GUILayout.EndScrollView();
        }
Beispiel #5
0
        public void OnGUI(List <ColumnViewElement> elements, ObjectColumnFunction previewColumnFunction, ObjectColumnFunction selectedSearchItemFunction, ObjectColumnFunction selectedRegularItemFunction, ObjectColumnGetDataFunction getDataForDraggingFunction)
        {
            InitStyles();
            m_ScrollPosition = GUILayout.BeginScrollView(m_ScrollPosition);
            GUILayout.BeginHorizontal();

            var    columnElements = elements;
            object selectedObject;
            int    listViewIndex = 0;

            do
            {
                if (m_ListViewStates.Count == listViewIndex)
                {
                    m_ListViewStates.Add(new ListViewState());
                }

                if (m_CachedSelectedIndices.Count == listViewIndex)
                {
                    m_CachedSelectedIndices.Add(-1);
                }

                var listView = m_ListViewStates[listViewIndex];
                listView.totalRows = columnElements.Count;

                if (listViewIndex == 0)
                {
                    GUILayout.BeginVertical(GUILayout.MaxWidth(columnWidth));
                }

                int selectedIndex = m_CachedSelectedIndices[listViewIndex];
                selectedIndex = DoListColumn(listView, columnElements, listViewIndex, selectedIndex,
                                             listViewIndex == 0 ? selectedSearchItemFunction : null, selectedRegularItemFunction,
                                             getDataForDraggingFunction);

                if (Event.current.type == EventType.Layout && m_ColumnToFocusKeyboard == listViewIndex)
                {
                    m_ColumnToFocusKeyboard    = -1;
                    GUIUtility.keyboardControl = listView.ID;
                    if (listView.row == -1 && columnElements.Count != 0)
                    {
                        selectedIndex = listView.row = 0;
                    }
                }

                if (listViewIndex == 0)
                {
                    // pass some of the keys to the list view, even if something else is active
                    if (isSearching)
                    {
                        var keyCode = StealImportantListviewKeys();
                        if (keyCode != KeyCode.None)
                        {
                            ListViewShared.SendKey(m_ListViewStates[0], keyCode);
                        }
                    }

                    m_SearchText = EditorGUILayout.ToolbarSearchField(m_SearchText);
                    GUILayout.EndVertical();
                }

                if (selectedIndex >= columnElements.Count)
                {
                    selectedIndex = -1;
                }

                if (Event.current.type == EventType.Layout && m_CachedSelectedIndices[listViewIndex] != selectedIndex &&
                    m_ListViewStates.Count > listViewIndex + 1)
                {
                    int from  = listViewIndex + 1;
                    int range = m_ListViewStates.Count - (listViewIndex + 1);
                    m_ListViewStates.RemoveRange(from, range);
                    m_CachedSelectedIndices.RemoveRange(from, range);
                }

                m_CachedSelectedIndices[listViewIndex] = selectedIndex;

                selectedObject = selectedIndex > -1 ? columnElements[selectedIndex].value : null;

                columnElements = selectedObject as List <ColumnViewElement>;
                listViewIndex++;
            }while (columnElements != null);

            for (; listViewIndex < minimumNumberOfColumns; listViewIndex++)
            {
                DoDummyColumn();
            }

            DoPreviewColumn(selectedObject, previewColumnFunction);

            GUILayout.EndHorizontal();
            GUILayout.EndScrollView();
        }
Beispiel #6
0
        private static void DoDragAndDrop(ListViewState listView, ListViewElement element, List <ColumnViewElement> columnViewElements, ObjectColumnGetDataFunction getDataForDraggingFunction)
        {
            if (GUIUtility.hotControl == listView.ID && Event.current.type == EventType.MouseDown &&
                element.position.Contains(Event.current.mousePosition) &&
                Event.current.button == 0)
            {
                var delay = (DragAndDropDelay)GUIUtility.GetStateObject(typeof(DragAndDropDelay), listView.ID);
                delay.mouseDownPosition = Event.current.mousePosition;
            }

            if (GUIUtility.hotControl == listView.ID &&
                Event.current.type == EventType.MouseDrag &&
                GUIClip.visibleRect.Contains(Event.current.mousePosition))
            {
                var delay = (DragAndDropDelay)GUIUtility.GetStateObject(typeof(DragAndDropDelay), listView.ID);

                if (delay.CanStartDrag())
                {
                    var data = getDataForDraggingFunction == null ? null :
                               getDataForDraggingFunction(columnViewElements[listView.row].value);

                    if (data == null)
                    {
                        return;
                    }

                    DragAndDrop.PrepareStartDrag();

                    DragAndDrop.paths = null;

                    DragAndDrop.SetGenericData("CustomDragData", data);
                    DragAndDrop.StartDrag(columnViewElements[listView.row].name);

                    Event.current.Use();
                }
            }
        }
Beispiel #7
0
        private int DoListColumn(ListViewState listView, List <ColumnViewElement> columnViewElements, int columnIndex, int selectedIndex, ObjectColumnFunction selectedSearchItemFunction, ObjectColumnFunction selectedRegularItemFunction, ObjectColumnGetDataFunction getDataForDraggingFunction)
        {
            if (Event.current.type == EventType.KeyDown &&
                Event.current.keyCode == KeyCode.Return && listView.row > -1)
            {
                if (isSearching && selectedSearchItemFunction != null)
                {
                    DoSearchItemSelectedEvent(selectedSearchItemFunction, columnViewElements[selectedIndex].value);
                }
                if (!isSearching && GUIUtility.keyboardControl == listView.ID && selectedRegularItemFunction != null)
                {
                    DoItemSelectedEvent(selectedRegularItemFunction, columnViewElements[selectedIndex].value);
                }
            }

            if (GUIUtility.keyboardControl == listView.ID && Event.current.type == EventType.KeyDown && !isSearching)
            {
                switch (Event.current.keyCode)
                {
                case KeyCode.LeftArrow:
                    m_ColumnToFocusKeyboard = columnIndex - 1;
                    Event.current.Use();
                    break;

                case KeyCode.RightArrow:
                    m_ColumnToFocusKeyboard = columnIndex + 1;
                    Event.current.Use();
                    break;
                }
            }

            foreach (ListViewElement element in ListViewGUILayout.ListView(listView, s_Styles.background, GUILayout.Width(columnWidth)))
            {
                var columnViewElement = columnViewElements[element.row];

                if (element.row == listView.row)
                {
                    if (Event.current.type == EventType.Repaint)
                    {
                        // FIXME: One Pixel offset is required when using OL Box style. Use a different style.
                        var rect = element.position;
                        rect.x++;
                        rect.y++;

                        s_Styles.selected.Draw(rect, false, true, true, GUIUtility.keyboardControl == listView.ID);
                    }
                }

                GUILayout.Label(columnViewElement.name);

                if (columnViewElement.value is List <ColumnViewElement> )
                {
                    // TODO: Make a proper style.
                    var arrowRect = element.position;
                    arrowRect.x  = arrowRect.xMax - s_Styles.categoryArrowIcon.width - 5;
                    arrowRect.y += 2;
                    GUI.Label(arrowRect, s_Styles.categoryArrowIcon);
                }

                DoDoubleClick(element, columnViewElement, selectedSearchItemFunction, selectedRegularItemFunction);
                DoDragAndDrop(listView, element, columnViewElements, getDataForDraggingFunction);
            }

            if (Event.current.type == EventType.Layout)
            {
                selectedIndex = listView.row;
            }

            return(selectedIndex);
        }
        private int DoListColumn(ListViewState listView, List<ColumnViewElement> columnViewElements, int columnIndex, int selectedIndex, ObjectColumnFunction selectedSearchItemFunction, ObjectColumnFunction selectedRegularItemFunction, ObjectColumnGetDataFunction getDataForDraggingFunction)
        {
            if (((Event.current.type == EventType.KeyDown) && (Event.current.keyCode == KeyCode.Return)) && (listView.row > -1))
            {
                if (this.isSearching && (selectedSearchItemFunction != null))
                {
                    this.DoSearchItemSelectedEvent(selectedSearchItemFunction, columnViewElements[selectedIndex].value);
                }
                if ((!this.isSearching && (GUIUtility.keyboardControl == listView.ID)) && (selectedRegularItemFunction != null))
                {
                    DoItemSelectedEvent(selectedRegularItemFunction, columnViewElements[selectedIndex].value);
                }
            }
            if (((GUIUtility.keyboardControl == listView.ID) && (Event.current.type == EventType.KeyDown)) && !this.isSearching)
            {
                switch (Event.current.keyCode)
                {
                    case KeyCode.LeftArrow:
                        this.m_ColumnToFocusKeyboard = columnIndex - 1;
                        Event.current.Use();
                        break;

                    case KeyCode.RightArrow:
                        this.m_ColumnToFocusKeyboard = columnIndex + 1;
                        Event.current.Use();
                        break;
                }
            }
            GUILayoutOption[] options = new GUILayoutOption[] { GUILayout.Width(this.columnWidth) };
            IEnumerator enumerator = ListViewGUILayout.ListView(listView, s_Styles.background, options).GetEnumerator();
            try
            {
                while (enumerator.MoveNext())
                {
                    ListViewElement current = (ListViewElement) enumerator.Current;
                    ColumnViewElement columnViewElement = columnViewElements[current.row];
                    if ((current.row == listView.row) && (Event.current.type == EventType.Repaint))
                    {
                        Rect position = current.position;
                        position.x++;
                        position.y++;
                        s_Styles.selected.Draw(position, false, true, true, GUIUtility.keyboardControl == listView.ID);
                    }
                    GUILayout.Label(columnViewElement.name, new GUILayoutOption[0]);
                    if (columnViewElement.value is List<ColumnViewElement>)
                    {
                        Rect rect2 = current.position;
                        rect2.x = (rect2.xMax - s_Styles.categoryArrowIcon.width) - 5f;
                        rect2.y += 2f;
                        GUI.Label(rect2, s_Styles.categoryArrowIcon);
                    }
                    this.DoDoubleClick(current, columnViewElement, selectedSearchItemFunction, selectedRegularItemFunction);
                    DoDragAndDrop(listView, current, columnViewElements, getDataForDraggingFunction);
                }
            }
            finally
            {
                IDisposable disposable = enumerator as IDisposable;
                if (disposable != null)
                {
                    disposable.Dispose();
                }
            }
            if (Event.current.type == EventType.Layout)
            {
                selectedIndex = listView.row;
            }
            return selectedIndex;
        }
 public void OnGUI(List<ColumnViewElement> elements, ObjectColumnFunction previewColumnFunction, ObjectColumnFunction selectedSearchItemFunction, ObjectColumnFunction selectedRegularItemFunction, ObjectColumnGetDataFunction getDataForDraggingFunction)
 {
     object obj2;
     InitStyles();
     this.m_ScrollPosition = GUILayout.BeginScrollView(this.m_ScrollPosition, new GUILayoutOption[0]);
     GUILayout.BeginHorizontal(new GUILayoutOption[0]);
     List<ColumnViewElement> columnViewElements = elements;
     int columnIndex = 0;
     do
     {
         if (this.m_ListViewStates.Count == columnIndex)
         {
             this.m_ListViewStates.Add(new ListViewState());
         }
         if (this.m_CachedSelectedIndices.Count == columnIndex)
         {
             this.m_CachedSelectedIndices.Add(-1);
         }
         ListViewState listView = this.m_ListViewStates[columnIndex];
         listView.totalRows = columnViewElements.Count;
         if (columnIndex == 0)
         {
             GUILayoutOption[] options = new GUILayoutOption[] { GUILayout.MaxWidth(this.columnWidth) };
             GUILayout.BeginVertical(options);
         }
         int selectedIndex = this.m_CachedSelectedIndices[columnIndex];
         selectedIndex = this.DoListColumn(listView, columnViewElements, columnIndex, selectedIndex, (columnIndex != 0) ? null : selectedSearchItemFunction, selectedRegularItemFunction, getDataForDraggingFunction);
         if ((Event.current.type == EventType.Layout) && (this.m_ColumnToFocusKeyboard == columnIndex))
         {
             this.m_ColumnToFocusKeyboard = -1;
             GUIUtility.keyboardControl = listView.ID;
             if ((listView.row == -1) && (columnViewElements.Count != 0))
             {
                 selectedIndex = listView.row = 0;
             }
         }
         if (columnIndex == 0)
         {
             if (this.isSearching)
             {
                 KeyCode keyCode = StealImportantListviewKeys();
                 if (keyCode != KeyCode.None)
                 {
                     ListViewShared.SendKey(this.m_ListViewStates[0], keyCode);
                 }
             }
             this.m_SearchText = EditorGUILayout.ToolbarSearchField(this.m_SearchText, new GUILayoutOption[0]);
             GUILayout.EndVertical();
         }
         if (selectedIndex >= columnViewElements.Count)
         {
             selectedIndex = -1;
         }
         if (((Event.current.type == EventType.Layout) && (this.m_CachedSelectedIndices[columnIndex] != selectedIndex)) && (this.m_ListViewStates.Count > (columnIndex + 1)))
         {
             int index = columnIndex + 1;
             int count = this.m_ListViewStates.Count - (columnIndex + 1);
             this.m_ListViewStates.RemoveRange(index, count);
             this.m_CachedSelectedIndices.RemoveRange(index, count);
         }
         this.m_CachedSelectedIndices[columnIndex] = selectedIndex;
         obj2 = (selectedIndex <= -1) ? null : columnViewElements[selectedIndex].value;
         columnViewElements = obj2 as List<ColumnViewElement>;
         columnIndex++;
     }
     while (columnViewElements != null);
     while (columnIndex < this.minimumNumberOfColumns)
     {
         this.DoDummyColumn();
         columnIndex++;
     }
     DoPreviewColumn(obj2, previewColumnFunction);
     GUILayout.EndHorizontal();
     GUILayout.EndScrollView();
 }