Exemplo n.º 1
0
        private void StacktraceListView(Event e, GUIContent tempContent)
        {
            float maxWidth = LogEntries.wrapped.StacktraceListView_GetMaxWidth(tempContent, Constants.MessageStyle);

            if (m_StacktraceLineContextClickRow != -1)
            {
                var stacktraceLineInfoIndex = m_StacktraceLineContextClickRow;
                m_StacktraceLineContextClickRow = -1;
                GenericMenu menu = new GenericMenu();
                if (LogEntries.wrapped.StacktraceListView_CanOpen(stacktraceLineInfoIndex))
                {
                    menu.AddItem(new GUIContent("Open"), false, LogEntries.wrapped.StacktraceListView_Open, stacktraceLineInfoIndex);
                    menu.AddSeparator("");
                    if (LogEntries.wrapped.StacktraceListView_CanWrapper(stacktraceLineInfoIndex))
                    {
                        menu.AddItem(new GUIContent("Wrapper"), LogEntries.wrapped.StacktraceListView_IsWrapper(stacktraceLineInfoIndex), LogEntries.wrapped.StacktraceListView_Wrapper, stacktraceLineInfoIndex);
                    }
                }
                menu.AddItem(new GUIContent("Copy"), false, LogEntries.wrapped.StacktraceListView_Copy, stacktraceLineInfoIndex);
                menu.AddItem(new GUIContent("Copy All"), false, LogEntries.wrapped.StacktraceListView_CopyAll);
                menu.ShowAsContext();
            }

            int  id = GUIUtility.GetControlID(0);
            int  rowDoubleClicked = -1;
            int  selectedRow      = -1;
            bool openSelectedItem = false;

            m_ListViewMessage.totalRows = LogEntries.wrapped.StacktraceListView_GetCount();
            GUILayout.BeginHorizontal(Constants.Box);
            m_ListViewMessage.scrollPos          = EditorGUILayout.BeginScrollView(m_ListViewMessage.scrollPos);
            ListViewGUI.ilvState.beganHorizontal = true;
            m_ListViewMessage.draggedFrom        = -1;
            m_ListViewMessage.draggedTo          = -1;
            m_ListViewMessage.fileNames          = (string[])null;
            Rect rect = GUILayoutUtility.GetRect(maxWidth,
                                                 (float)(m_ListViewMessage.totalRows * m_ListViewMessage.rowHeight + 3));

            foreach (ListViewElement el in ListViewGUI.DoListView(rect, m_ListViewMessage, null, string.Empty))
            {
                if (e.type == EventType.MouseDown && (e.button == 0 || e.button == 1) && el.position.Contains(e.mousePosition))
                {
                    if (e.button == 1)
                    {
                        m_ListViewMessage.row           = el.row;
                        selectedRow                     = m_ListViewMessage.row;
                        m_StacktraceLineContextClickRow = selectedRow;
                        continue;
                    }

                    selectedRow = m_ListViewMessage.row;
                    if (e.clickCount == 2)
                    {
                        openSelectedItem = true;
                    }
                }
                else if (e.type == EventType.Repaint)
                {
                    tempContent.text = LogEntries.wrapped.StacktraceListView_GetLine(el.row);
                    rect             = el.position;
                    if (rect.width < maxWidth)
                    {
                        rect.width = maxWidth;
                    }
                    Constants.MessageStyle.Draw(rect, tempContent, id, m_ListViewMessage.row == el.row);
                }
            }

            // Open entry using return key
            if ((GUIUtility.keyboardControl == m_ListViewMessage.ID) && (e.type == EventType.KeyDown) && (e.keyCode == KeyCode.Return) && (m_ListViewMessage.row != 0))
            {
                selectedRow      = m_ListViewMessage.row;
                openSelectedItem = true;
            }

            if (openSelectedItem)
            {
                rowDoubleClicked = selectedRow;
                e.Use();
            }

            if (m_StacktraceLineContextClickRow != -1)
            {
                Repaint();
            }

            if (rowDoubleClicked != -1)
            {
                LogEntries.wrapped.StacktraceListView_Open(rowDoubleClicked);
            }
        }