public ParserPanel()
        {
            InitializeComponent();

            _messageTable = new ParserMessageDataTable("Messages");
            _messageView  = new DataView(_messageTable);

            _fieldTable = new FieldDataTable("Fields");
            _fieldView  = new DataView(_fieldTable);

            _messageSearchTextBox = new SearchTextBox
            {
                Dock = DockStyle.Top
            };
            _messageSearchTextBox.TextChanged += MessageSearchTextBoxTextChanged;
            _fieldSearchTextBox = new SearchTextBox
            {
                Dock = DockStyle.Top
            };
            _fieldSearchTextBox.TextChanged += FieldSearchTextBoxTextChanged;

            _statusMessage = new TextBox
            {
                Dock     = DockStyle.Bottom,
                ReadOnly = true
            };

            messageStatusErrorImage = Properties.Resources.MessageStatusError;
            messageStatusInfoImage  = Properties.Resources.MessageStatusInfo;
            messageStatusWarnImage  = Properties.Resources.MessageStatusWarn;
            messageStatusNoneImage  = Properties.Resources.MessageStatusNone;

            #region ToolStrip
            var loadButton = new ToolStripButton(Properties.Resources.Open)
            {
                ImageTransparentColor = Color.Magenta,
                ToolTipText           = "Load a Glue/Gate/FIX Router/Desk Server log file"
            };
            loadButton.Click += LoadClientMessagesButtonClick;

            _showAdminMessageCheckBox = new ToolStripCheckBox();
            _showAdminMessageCheckBox.CheckChanged += ShowAdminMessageCheckBoxCheckChanged;

            _statusNoneMenuItem = new ToolStripMenuItem {
                Text = "None", Checked = true, CheckOnClick = true
            };
            _statusNoneMenuItem.Click += StatusMenuItemClick;

            _statusInfoMenuItem = new ToolStripMenuItem {
                Text = "Info", Checked = true, CheckOnClick = true
            };
            _statusInfoMenuItem.Click += StatusMenuItemClick;

            _statusWarnMenuItem = new ToolStripMenuItem {
                Text = "Warn", Checked = true, CheckOnClick = true
            };
            _statusWarnMenuItem.Click += StatusMenuItemClick;

            _statusErrorMenuItem = new ToolStripMenuItem {
                Text = "Error", Checked = true, CheckOnClick = true
            };
            _statusErrorMenuItem.Click += StatusMenuItemClick;

            _statusButton = new ToolStripDropDownButton("Message Status");

            _statusButton.DropDownItems.Add(_statusNoneMenuItem);
            _statusButton.DropDownItems.Add(_statusInfoMenuItem);
            _statusButton.DropDownItems.Add(_statusWarnMenuItem);
            _statusButton.DropDownItems.Add(_statusErrorMenuItem);

            var toolStrip = new ToolStrip(new ToolStripItem[]
            {
                loadButton,
                new ToolStripLabel("Show Administrative Messages"),
                _showAdminMessageCheckBox,
                _statusButton
            })
            {
                GripStyle = ToolStripGripStyle.Hidden,
                BackColor = LookAndFeel.Color.ToolStrip,
                Renderer  = new ToolStripRenderer()
            };

            #endregion

            var splitter = new SplitContainer
            {
                Orientation      = Orientation.Horizontal,
                Dock             = DockStyle.Fill,
                SplitterDistance = 200
            };

            var messageSplitter = new SplitContainer
            {
                Orientation = Orientation.Vertical,
                Dock        = DockStyle.Fill
            };

            var container = new ToolStripContainer {
                Dock = DockStyle.Fill
            };
            container.ContentPanel.Controls.Add(messageSplitter);
            container.TopToolStripPanel.Join(toolStrip);
            container.TopToolStripPanel.BackColor = LookAndFeel.Color.ToolStrip;

            _messageGridView = new ParserMessageDataGridView
            {
                Dock        = DockStyle.Fill,
                VirtualMode = true
            };
            _messageGridView.SelectionChanged += ClientMessageGridGridSelectionChanged;
            _messageGridView.CellValueNeeded  += MessageGridViewCellValueNeeded;
            _messageGridView.CellFormatting   += MessageGridViewCellFormatting;

            foreach (DataColumn source in _messageTable.Columns)
            {
                if (source.ColumnMapping == MappingType.Hidden)
                {
                    continue;
                }

                DataGridViewColumn column;

                if (source.DataType == typeof(Image))
                {
                    column = new DataGridViewImageColumn
                    {
                        Name      = source.ColumnName,
                        ValueType = source.DataType
                    };
                }
                else
                {
                    column = new DataGridViewTextBoxColumn
                    {
                        Name      = source.ColumnName,
                        ValueType = source.DataType
                    };
                }
                _messageGridView.Columns.Add(column);
            }

            var fieldGridView = new FieldDataGridView
            {
                Dock       = DockStyle.Fill,
                DataSource = _fieldView
            };

            messageSplitter.Panel1.Controls.Add(_messageGridView);
            messageSplitter.Panel1.Controls.Add(_messageSearchTextBox);
            messageSplitter.Panel2.Controls.Add(fieldGridView);
            messageSplitter.Panel2.Controls.Add(_fieldSearchTextBox);
            messageSplitter.Panel2.Controls.Add(_statusMessage);

            _orderBook = new Fix.OrderBook();
            _orderBook.Messages.MessageAdded += MessagesMessageAdded;
            _orderBook.OrderInserted         += OrderBookOrderInserted;
            _orderBook.OrderUpdated          += OrderBookOrderUpdated;

            _orderTable = new OrderDataTable("Orders");
            _orderView  = new DataView(_orderTable);
            orderGrid   = new OrderDataGridView
            {
                DataSource           = _orderView,
                Dock                 = DockStyle.Fill,
                DisplayExDestination = true
            };

            _orderSearchTextBox = new SearchTextBox
            {
                Dock = DockStyle.Top
            };
            _orderSearchTextBox.TextChanged += OrderSearchTextBoxTextChanged;

            splitter.Panel1.Controls.Add(container);
            splitter.Panel2.Controls.Add(orderGrid);
            splitter.Panel2.Controls.Add(_orderSearchTextBox);

            ContentPanel.Controls.Add(splitter);

            ShowAdminMessageCheckBoxCheckChanged(this, null);
        }
        public HistoryPanel()
        {
            InitializeComponent();

            #region ToolStrip
            var toolStrip = new ToolStrip
            {
                GripStyle = ToolStripGripStyle.Hidden,
                BackColor = LookAndFeel.Color.ToolStrip,
                Renderer  = new ToolStripRenderer()
            };


            _clearButton = new ToolStripButton
            {
                Image = Properties.Resources.Clear,
                ImageTransparentColor = Color.Magenta,
                ToolTipText           = "Clear all session messages"
            };
            _clearButton.Click += ClearButtonClick;

            _resendButton = new ToolStripButton
            {
                Image = Properties.Resources.Send,
                ImageTransparentColor = Color.White,
                ToolTipText           = "Resend the selected message"
            };
            _resendButton.Click += ResendButtonClick;

            _exportButton = new ToolStripButton
            {
                Image = Properties.Resources.Export,
                ImageTransparentColor = Color.Magenta,
                ToolTipText           = "Export the message history to a text file"
            };
            _exportButton.Click += ExportButtonClick;

            _tailMessagesCheckBox = new ToolStripCheckBox();
            _tailMessagesCheckBox.CheckChanged += TailMessagesCheckBoxCheckChanged;

            toolStrip.Items.AddRange(new ToolStripItem[]
            {
                _clearButton,
                _resendButton,
                _exportButton,
                new ToolStripLabel("Tail Messages"),
                _tailMessagesCheckBox
            });

            TopToolStripPanel.Join(toolStrip);

            #endregion

            #region MenuStrip
            var menu = new ToolStripMenuItem("Action");
            SetMenuStrip(menu);

            _clearMenuItem        = new ToolStripMenuItem("Clear", _clearButton.Image);
            _clearMenuItem.Click += ClearButtonClick;
            menu.DropDownItems.Add(_clearMenuItem);

            _resendMenuItem        = new ToolStripMenuItem("Resend", _resendButton.Image);
            _resendMenuItem.Click += ResendButtonClick;
            menu.DropDownItems.Add(_resendMenuItem);

            _exportMenuItem        = new ToolStripMenuItem("Export", _exportButton.Image);
            _exportMenuItem.Click += ExportButtonClick;
            menu.DropDownItems.Add(_exportMenuItem);
            #endregion

            _messageSearchTextBox = new SearchTextBox
            {
                Dock = DockStyle.Top,
            };
            _messageSearchTextBox.TextChanged += MessageSearchTextBoxTextChanged;
            _fieldSearchTextBox = new SearchTextBox
            {
                Dock = DockStyle.Top,
            };
            _fieldSearchTextBox.TextChanged += FieldSearchTextBoxTextChanged;

            var container = new SplitContainer
            {
                Dock        = DockStyle.Fill,
                Orientation = Orientation.Vertical
            };

            _messageGrid = new HistoryMessageDataGridView
            {
                Dock        = DockStyle.Fill,
                VirtualMode = true
            };
            _messageGrid.SelectionChanged += MessageGridSelectionChanged;
            _messageGrid.CellValueNeeded  += MessageGridCellValueNeeded;
            _messageGrid.CellFormatting   += MessageGridCellFormatting;

            _messageTable             = new MessageDataTable("Messages");
            _messageView              = new DataView(_messageTable);
            _messageView.ListChanged += ViewListChanged;

            _fieldTable = new FieldDataTable("Fields");
            _fieldView  = new DataView(_fieldTable);

            _fieldGrid = new FieldDataGridView
            {
                Dock       = DockStyle.Fill,
                DataSource = _fieldView
            };

            var rightSplitter = new SplitContainer
            {
                Dock             = DockStyle.Fill,
                Orientation      = Orientation.Horizontal,
                SplitterDistance = ClientRectangle.Height
            };

            _rawMessage = new TextBox
            {
                Dock        = DockStyle.Fill,
                Multiline   = true,
                ReadOnly    = true,
                Font        = new Font("Consolas", 10),
                BackColor   = LookAndFeel.Color.GridCellBackground,
                ForeColor   = LookAndFeel.Color.GridCellForeground,
                BorderStyle = BorderStyle.None
            };

            _statusMessage = new TextBox
            {
                Dock     = DockStyle.Bottom,
                ReadOnly = true
            };

            rightSplitter.Panel1.Controls.Add(_fieldGrid);
            rightSplitter.Panel1.Controls.Add(_fieldSearchTextBox);
            rightSplitter.Panel2.Controls.Add(_rawMessage);
            rightSplitter.Panel2.Controls.Add(_statusMessage);

            container.Panel1.Controls.Add(_messageGrid);
            container.Panel1.Controls.Add(_messageSearchTextBox);
            container.Panel2.Controls.Add(rightSplitter);

            ContentPanel.Controls.Add(container);

            IntPtr h = Handle;

            UpdateUiState();
        }