예제 #1
0
        public void ScrollToItem(OSCConsolePacket consoleMessage)
        {
            if (consoleMessage == null)
            {
                return;
            }

            var messageItem = GetItemIndex(consoleMessage);

            if (messageItem < 0)
            {
                return;
            }

            var itemY = _lineHeight * messageItem;

            if (itemY < _scrollPosition.y)
            {
                _scrollPosition.y = itemY;
            }
            else if (itemY > _scrollPosition.y + _lastContentRect.height - _lineHeight)
            {
                _scrollPosition.y = itemY - _lastContentRect.height + _lineHeight;
            }
        }
예제 #2
0
        private static void DrawIcons(OSCConsolePacket consoleMessage, ref Rect dataRect)
        {
            Texture2D consoleTexture = null;

            if (consoleMessage.PacketType == OSCConsolePacketType.Received)
            {
                consoleTexture = OSCEditorTextures.Receiver;
            }
            else if (consoleMessage.PacketType == OSCConsolePacketType.Transmitted)
            {
                consoleTexture = OSCEditorTextures.Transmitter;
            }

            GUI.DrawTexture(PaddingRect(dataRect, 4), consoleTexture);

            dataRect.x     += dataRect.height;
            dataRect.width -= dataRect.height;

            if (consoleMessage.Packet != null)
            {
                var packetTypeTextire = consoleMessage.Packet.IsBundle() ? OSCEditorTextures.Bundle : OSCEditorTextures.Message;

                GUI.DrawTexture(PaddingRect(dataRect, 4), packetTypeTextire);
            }

            dataRect.x     += dataRect.height;
            dataRect.width -= dataRect.height;
        }
        private void DrawIcons(ref Rect iconsRect, OSCConsolePacket consolePacket)
        {
            var padding        = 4;
            var consoleTexture = (Texture2D)null;

            if (consolePacket.PacketType == OSCConsolePacketType.Received)
            {
                consoleTexture = OSCEditorTextures.Receiver;
            }
            else if (consolePacket.PacketType == OSCConsolePacketType.Transmitted)
            {
                consoleTexture = OSCEditorTextures.Transmitter;
            }

            GUI.DrawTexture(new Rect(iconsRect.x + padding,
                                     iconsRect.y + padding,
                                     iconsRect.height - padding * 2f,
                                     iconsRect.height - padding * 2f),
                            consoleTexture);

            iconsRect.x     += iconsRect.height;
            iconsRect.width -= iconsRect.height;

            GUI.DrawTexture(new Rect(iconsRect.x + padding,
                                     iconsRect.y + padding,
                                     iconsRect.height - padding * 2f,
                                     iconsRect.height - padding * 2f),
                            consolePacket.Packet.IsBundle()
                                                                ? OSCEditorTextures.Bundle
                                                                : OSCEditorTextures.Message);

            iconsRect.x     += iconsRect.height;
            iconsRect.width -= iconsRect.height;
        }
        public void ScrollToItem(OSCConsolePacket consolePacket)
        {
            if (consolePacket == null)
            {
                return;
            }

            var packetIndex = _consoleBuffer.IndexOf(SelectedMessage);

            if (packetIndex < 0)
            {
                return;
            }

            var itemY = _lineHeight * packetIndex;

            if (itemY < _scrollPosition.y)
            {
                _scrollPosition.y = itemY;
            }
            else if (itemY > _scrollPosition.y + _lastContentRect.height - _lineHeight)
            {
                _scrollPosition.y = itemY - _lastContentRect.height + _lineHeight;
            }
        }
예제 #5
0
        private static void DrawItem(Rect itemRect, int index, OSCConsolePacket consoleContainer, bool selected)
        {
            var dataRect  = new Rect(0, 0, itemRect.width, itemRect.height);
            var backStyle = index % 2 != 0 ? OSCEditorStyles.ConsoleItemBackEven : OSCEditorStyles.ConsoleItemBackOdd;

            if (Event.current.type == EventType.Repaint)
            {
                backStyle.Draw(itemRect, false, false, selected, false);
            }

            GUI.BeginGroup(itemRect);

            DrawIcons(consoleContainer, ref dataRect);

            /*
             * if (collapse)
             * {
             *  var collapseRect = new Rect(dataRect.x + 2, dataRect.y + 2, dataRect.height * 1.5f - 4, dataRect.height - 4);
             *
             *  GUI.Box(collapseRect, "", EditorStyles.helpBox);
             *  GUI.Label(collapseRect, consoleContainer.Count.ToString(), OSCEditorStyles.CenterLabel);
             *
             *  dataRect.x += collapseRect.width + 4;
             *  dataRect.width -= collapseRect.height + 4;
             * }
             */

            GUI.Label(dataRect, ItemToString(consoleContainer), OSCEditorStyles.ConsoleLabel);

            GUI.EndGroup();
        }
예제 #6
0
        private static void ShowMessageGenericMenu(OSCConsolePacket consoleMessage)
        {
            var genericMenu = new GenericMenu();

            genericMenu.AddItem(_openInDebugContent, false, OpenInDebugCallback, consoleMessage);
            genericMenu.AddItem(_generateCodeContent, false, GenerateCodeCallback, consoleMessage);
            genericMenu.ShowAsContext();
        }
예제 #7
0
        private static void Log(OSCConsolePacket message)
        {
            // COPY PACKET
            var rawData = OSCConverter.Pack(message.Packet);

            message.Packet = OSCConverter.Unpack(rawData);

            OSCConsole.ConsoleBuffer.Add(message);
        }
예제 #8
0
        public static void Received(OSCEditorReceiver receiver, IOSCPacket packet)
        {
            var message = new OSCConsolePacket();

            message.Info       = $"<color=green>Editor Receiver</color>: {receiver.LocalPort}. From: {(packet.Ip != null ? packet.Ip.ToString() : "Debug")}";
            message.PacketType = OSCConsolePacketType.Received;
            message.Packet     = packet;

            Log(message);
        }
예제 #9
0
        public static void Transmitted(OSCEditorTransmitter transmitter, IOSCPacket packet)
        {
            var message = new OSCConsolePacket();

            message.Info       = $"<color=green>Editor Transmitter</color>: {transmitter.RemoteHost}:{transmitter.RemotePort}";
            message.PacketType = OSCConsolePacketType.Transmitted;
            message.Packet     = packet;

            Log(message);
        }
예제 #10
0
        public void SelectLastItem()
        {
            if (_consoleBuffer.Length <= 0)
            {
                return;
            }

            _selectedMessage = _consoleBuffer[_consoleBuffer.Length - 1];
            ScrollToItem(_selectedMessage);
        }
예제 #11
0
        public void SelectPreviousItem()
        {
            if (_consoleBuffer.Length <= 0)
            {
                return;
            }

            var currentIndex = GetItemIndex(_selectedMessage);

            _selectedMessage = _consoleBuffer[Mathf.Clamp(currentIndex - 1, 0, _consoleBuffer.Length - 1)];
            ScrollToItem(_selectedMessage);
        }
예제 #12
0
        private int GetItemIndex(OSCConsolePacket consoleMessage)
        {
            for (var index = 0; index < _consoleBuffer.Length; index++)
            {
                if (_consoleBuffer[index] == consoleMessage)
                {
                    return(index);
                }
            }

            return(-1);
        }
예제 #13
0
        private static string ItemToString(OSCConsolePacket consoleMessage)
        {
            if (consoleMessage == null)
            {
                return(string.Empty);
            }

            var stringMessage = PacketToString(consoleMessage.Packet);

            stringMessage += "\n" + consoleMessage.Info;

            return(stringMessage);
        }
예제 #14
0
        public static List <OSCConsolePacket> LoadConsoleMessages(string filePath)
        {
            var list = new List <OSCConsolePacket>();

            if (!File.Exists(filePath))
            {
                SaveConsoleMessages(filePath, list);

                return(list);
            }

            var document = new XmlDocument();

            try
            {
                document.Load(filePath);

                var rootElement = document.FirstChild;

                foreach (XmlNode messageElement in rootElement.ChildNodes)
                {
                    var consoleMessage = new OSCConsolePacket();

                    var instanceAttribute = messageElement.Attributes["info"];
                    consoleMessage.Info = instanceAttribute.InnerText;

                    var typeAttribute = messageElement.Attributes["type"];
                    consoleMessage.PacketType = (OSCConsolePacketType)Enum.Parse(typeof(OSCConsolePacketType), typeAttribute.InnerText);

                    var timestampAttribute = messageElement.Attributes["timestamp"];
                    if (timestampAttribute != null)
                    {
                        consoleMessage.TimeStamp = timestampAttribute.InnerText;
                    }

                    var packetElement = messageElement["packet"];
                    consoleMessage.Packet = OSCUtilities.FromBase64String(packetElement.InnerText);

                    list.Add(consoleMessage);
                }
            }
            catch (Exception e)
            {
                Debug.LogFormat("[OSCConsole] Error: {0}", e);
                list.Clear();
            }

            return(list);
        }
        private void DrawItem(ref Rect itemRect, int index, OSCConsolePacket consolePacket, bool selected)
        {
            using (new GUI.GroupScope(itemRect))
            {
                var localRect = itemRect;
                localRect.x = localRect.y = 0;

                if (Event.current.type == EventType.Repaint)
                {
                    var backStyle = index % 2 != 0 ? OSCEditorStyles.ConsoleItemBackEven : OSCEditorStyles.ConsoleItemBackOdd;
                    backStyle.Draw(localRect, false, false, selected, false);
                }

                DrawIcons(ref localRect, consolePacket);

                GUI.Label(localRect, consolePacket.ToString(), OSCEditorStyles.ConsoleLabel);
            }
        }
예제 #16
0
        private static void DrawItem(Rect itemRect, int index, OSCConsolePacket consoleContainer, bool selected)
        {
            var dataRect  = new Rect(0, 0, itemRect.width, itemRect.height);
            var backStyle = index % 2 != 0 ? OSCEditorStyles.ConsoleItemBackEven : OSCEditorStyles.ConsoleItemBackOdd;

            if (Event.current.type == EventType.Repaint)
            {
                backStyle.Draw(itemRect, false, false, selected, false);
            }

            GUI.BeginGroup(itemRect);

            DrawIcons(consoleContainer, ref dataRect);

            GUI.Label(dataRect, ItemToString(consoleContainer), OSCEditorStyles.ConsoleLabel);

            GUI.EndGroup();
        }
예제 #17
0
        public static OSCConsolePacket[] GetConsoleBuffer(bool transmitted, bool received)
        {
            if (ConsoleBuffer == null || (ConsoleBuffer != null && ConsoleBuffer.Count == 0))
            {
                return(_emptyBuffer);
            }

            var requireRebuild = false;

            if (_previousTransmitted != transmitted ||
                _previousReceived != received)
            {
                _previousTransmitted = transmitted;
                _previousReceived    = received;

                requireRebuild = true;
            }
            else if (ConsoleBuffer.Count > 0)
            {
                requireRebuild = (ConsoleBuffer[0] != _lastMessage);
            }

            if (!requireRebuild)
            {
                return(_tempBuffer);
            }

            _lastMessage = ConsoleBuffer.Count > 0 ? ConsoleBuffer[0] : null;

            var consoleList = new List <OSCConsolePacket>();

            foreach (var consoleMessage in ConsoleBuffer)
            {
                if ((transmitted && consoleMessage.PacketType == OSCConsolePacketType.Transmitted) ||
                    (received && consoleMessage.PacketType == OSCConsolePacketType.Received))
                {
                    consoleList.Add(consoleMessage);
                }
            }

            _tempBuffer = consoleList.ToArray();

            return(_tempBuffer);
        }
예제 #18
0
        private void DrawToolbar(Rect contentRect)
        {
            GUILayout.BeginArea(new Rect(0, 0, contentRect.width, 18));

            EditorGUILayout.BeginVertical();
            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);

            var clearButton = GUILayout.Button(_clearContent, EditorStyles.toolbarButton, GUILayout.Height(45f));

            GUILayout.Space(5f);

            _showReceived    = GUILayout.Toggle(_showReceived, _recevedContent, EditorStyles.toolbarButton);
            _showTransmitted = GUILayout.Toggle(_showTransmitted, _transmittedContent, EditorStyles.toolbarButton);

            GUILayout.FlexibleSpace();
            GUILayout.Space(5f);

            //GUILayout.Label(_filterContent);
            _filterDrawer.Draw();

            GUILayout.Space(5f);

            _trackLast = GUILayout.Toggle(_trackLast, _trackLastContent, EditorStyles.toolbarButton);

            GUILayout.Space(5f);

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();

            GUILayout.EndArea();

            if (clearButton)
            {
                OSCWindowConsole.Clear();

                _selectedMessage = null;
            }
        }
예제 #19
0
        protected override void DrawContent(Rect contentRect)
        {
            GUILayout.BeginArea(new Rect(0, 0, contentRect.width, 18));

            EditorGUILayout.BeginVertical();
            EditorGUILayout.BeginHorizontal(EditorStyles.toolbar);

            var clearButton = GUILayout.Button(_clearContent, EditorStyles.toolbarButton, GUILayout.Height(45f));

            GUILayout.Space(5f);

            _showReceived    = GUILayout.Toggle(_showReceived, _recevedContent, EditorStyles.toolbarButton);
            _showTransmitted = GUILayout.Toggle(_showTransmitted, _transmittedContent, EditorStyles.toolbarButton);

            GUILayout.Space(5f);

            _trackLast = GUILayout.Toggle(_trackLast, _trackLastContent, EditorStyles.toolbarButton);

            GUILayout.FlexibleSpace();

            EditorGUILayout.EndHorizontal();
            EditorGUILayout.EndVertical();

            GUILayout.EndArea();

            contentRect.y      += 18;
            contentRect.height -= 18;

            _lastContentRect = new Rect(contentRect);
            _consoleBuffer   = OSCWindowConsole.GetConsoleBuffer(_showTransmitted, _showReceived);

            if (_trackLast)
            {
                if (_consoleBuffer.Length > 0)
                {
                    _selectedMessage = _consoleBuffer[0];
                }
                else
                {
                    _selectedMessage = null;
                }
            }

            var viewRect = new Rect(contentRect);

            viewRect.height = _consoleBuffer.Length * _lineHeight;

            if (viewRect.height > contentRect.height)
            {
                viewRect.width -= 15f;
            }

            var itemRect = new Rect(0, viewRect.y, viewRect.width, _lineHeight);

            _scrollPosition = GUI.BeginScrollView(contentRect, _scrollPosition, viewRect);

            var drawed = false;

            for (var index = 0; index < _consoleBuffer.Length; index++)
            {
                var drawItem = !((itemRect.y + itemRect.height < _scrollPosition.y) ||
                                 (itemRect.y > _scrollPosition.y + contentRect.height + itemRect.height));

                if (drawItem)
                {
                    drawed = true;

                    var consoleMessage = _consoleBuffer[index];
                    var selected       = _selectedMessage == consoleMessage;
                    var color          = GUI.color;

                    DrawItem(itemRect, index, consoleMessage, selected);

                    GUI.color = color;

                    if (Event.current.type == EventType.MouseDown && itemRect.Contains(Event.current.mousePosition))
                    {
                        if (Event.current.button == 0)
                        {
                            _trackLast = false;

                            if (_selectedMessage != consoleMessage)
                            {
                                _selectedMessage = consoleMessage;
                                _parentWindow.Repaint();
                            }

                            Event.current.Use();
                        }
                        else if (Event.current.button == 1)
                        {
                            ShowMessageGenericMenu(consoleMessage);

                            Event.current.Use();
                        }
                    }
                }
                else if (drawed)
                {
                    break;
                }

                itemRect.y += itemRect.height;
            }

            GUI.EndScrollView(true);

            if (clearButton)
            {
                OSCWindowConsole.Clear();

                _selectedMessage = null;
            }
        }
예제 #20
0
        protected override void DrawContent(Rect contentRect)
        {
            // TOOLBAR
            DrawToolbar(contentRect);

            contentRect.y      += 18;
            contentRect.height -= 18;

            _lastContentRect = new Rect(contentRect);
            _consoleBuffer   = OSCWindowConsole.GetConsoleBuffer(_showTransmitted, _showReceived, _filterDrawer.FilterValue);

            if (_trackLast)
            {
                if (_consoleBuffer.Length > 0)
                {
                    _selectedMessage = _consoleBuffer[0];
                }
                else
                {
                    _selectedMessage = null;
                }
            }

            var viewRect = new Rect(contentRect);

            viewRect.height = _consoleBuffer.Length * _lineHeight;

            if (viewRect.height > contentRect.height)
            {
                viewRect.width -= 15f;
            }

            var itemRect = new Rect(0, viewRect.y, viewRect.width, _lineHeight);

            _scrollPosition = GUI.BeginScrollView(contentRect, _scrollPosition, viewRect);

            var drawed = false;

            for (var index = 0; index < _consoleBuffer.Length; index++)
            {
                var drawItem = !((itemRect.y + itemRect.height < _scrollPosition.y) ||
                                 (itemRect.y > _scrollPosition.y + contentRect.height + itemRect.height));

                if (drawItem)
                {
                    drawed = true;

                    var consoleMessage = _consoleBuffer[index];
                    var selected       = _selectedMessage == consoleMessage;
                    var color          = GUI.color;

                    DrawItem(itemRect, index, consoleMessage, selected);

                    GUI.color = color;

                    if (Event.current.type == EventType.MouseDown && itemRect.Contains(Event.current.mousePosition))
                    {
                        GUIUtility.keyboardControl = 0;

                        if (Event.current.button == 0)
                        {
                            _trackLast = false;

                            if (_selectedMessage != consoleMessage)
                            {
                                _selectedMessage = consoleMessage;
                                _parentWindow.Repaint();
                            }

                            Event.current.Use();
                        }
                        else if (Event.current.button == 1)
                        {
                            ShowMessageGenericMenu(consoleMessage);

                            Event.current.Use();
                        }
                    }
                }
                else if (drawed)
                {
                    break;
                }

                itemRect.y += itemRect.height;
            }

            GUI.EndScrollView(true);
        }
예제 #21
0
        public static OSCConsolePacket[] GetConsoleBuffer(bool transmitted, bool received, string filter)
        {
            if (ConsoleBuffer == null || ConsoleBuffer.Count == 0)
            {
                return(_emptyBuffer);
            }

            var requireRebuild = false;

            if (_previousTransmitted != transmitted ||
                _previousReceived != received ||
                _previousFilter != filter)
            {
                _previousTransmitted = transmitted;
                _previousReceived    = received;
                _previousFilter      = filter;

                requireRebuild = true;
            }
            else
            {
                requireRebuild = ConsoleBuffer[0] != _lastMessage;
            }

            if (!requireRebuild)
            {
                return(_tempBuffer);
            }

            _lastMessage = ConsoleBuffer[0];

            var consoleList = new List <OSCConsolePacket>();

            var inverse = filter.StartsWith("!");

            if (inverse)
            {
                filter = filter.Remove(0, 1);
            }

            foreach (var consoleMessage in ConsoleBuffer)
            {
                if (transmitted && consoleMessage.PacketType == OSCConsolePacketType.Transmitted ||
                    received && consoleMessage.PacketType == OSCConsolePacketType.Received)
                {
                    if (!string.IsNullOrEmpty(filter))
                    {
                        var address = consoleMessage.Packet.Address;
                        var compare = OSCUtilities.CompareAddresses(filter, address);

                        if (inverse && compare ||
                            !inverse && !compare)
                        {
                            continue;
                        }
                    }

                    consoleList.Add(consoleMessage);
                }
            }

            _tempBuffer = consoleList.ToArray();

            return(_tempBuffer);
        }