private void RefreshMessageDetail(LogListViewItem listItem, bool forceRefresh)
        {
            if (listItem == null)
            {
                logMessageEdit.Text    = String.Empty;
                currentItemStatus.Text = String.Empty;
                currentLineStatus.Text = String.Empty;
                return;
            }
            if (logMessageEdit.Visible)
            {
                if (forceRefresh || prevSelectedListItem == null || prevSelectedListItem.Index != listItem.Index)
                {
                    LogEntry logEntry = listItem.LogItem;
                    logMessageEdit.Text           = "";
                    logMessageEdit.SelectionColor = SystemColors.GrayText;
                    logMessageEdit.AppendText(logParser.GetFormattedMessageDetailHeader(logEntry));
                    logMessageEdit.SelectionColor = SystemColors.WindowText;
                    logMessageEdit.AppendText(logEntry.Message);


                    if (settings.MainFormUI.EnableHighlights)
                    {
                        ColorHighlightManager.CurrentGroup.HighlightTextInMessageDetail(logMessageEdit);
                    }

                    logMessageEdit.SelectionStart  = 0;
                    logMessageEdit.SelectionLength = 0;
                }
            }
            currentItemStatus.Text = "Current item: " + (listItem.Index + 1).ToString();
            currentLineStatus.Text = "Line: " + listItem.LogItem.LineInFile;
        }
        private void openInExternalTextEditorToolStripMenuItem_Click(object sender, EventArgs e)
        {
            LogListViewItem item = GetSelectedListItem();

            if (item == null)
            {
                return;
            }
            OpenLogFileInTextEditor(item.LogItem.LineInFile);
        }
        private void GoToSameTimeInAnotherLog(Guid anotherLogID)
        {
            LogListViewItem selectedItem = GetSelectedListItem();

            if (selectedItem == null)
            {
                return;
            }

            this.CommManager.GoToTimeInAnotherLog(anotherLogID, selectedItem.LogItem.Date);
        }
        public void JumpToSameNearestType(bool down)
        {
            LogListViewItem item = this.GetSelectedListItem();

            if (item == null)
            {
                return;
            }
            LogEntry selectedEntry = item.LogItem;
            int      selectedIdx   = owner.LogEntries.IndexOf(selectedEntry);

            if (selectedIdx < 0)
            {
                return;
            }

            if (down)
            {
                for (int i = selectedIdx + 1; i < owner.LogEntries.Count; i++)
                {
                    LogEntry entry = owner.LogEntries[i];
                    if (entry.LogType == selectedEntry.LogType)
                    {
                        this.GoToLogItem(entry);
                        break;
                    }
                }
            }
            else
            {
                for (int i = selectedIdx - 1; i > -1; i--)
                {
                    LogEntry entry = owner.LogEntries[i];
                    if (entry.LogType == selectedEntry.LogType)
                    {
                        this.GoToLogItem(entry);
                        break;
                    }
                }
            }
        }
        public void Find(bool searchDown)
        {
            LogListViewItem selectedItem = this.context.GetLogItem(GetLogListItemType.Selected);

            if (selectedItem == null)
            {
                return;
            }

            if (logHasBeenChanged || foundEntries == null)
            {
                this.foundEntries = FindItemsMatchingToSearchCriteria();
                logHasBeenChanged = false;
                ReflectChangesInFoundList();
            }

            if (this.foundEntries.Count == 0)
            {
                SetStatusText("Entered text wasn't found.", Color.Red);
            }
            else
            {
                Color    statusColor = Color.Green;
                LogEntry logEntry    = null;
                int      i           = foundEntries.IndexOf(selectedItem.LogItem);

                if (i == -1)
                {
                    i = searchDown ? -1 : foundEntries.Count;
                }
                else
                {
                    if (TryHighlightNextOccurenceInMessageDetail())
                    {
                        return;
                    }
                }

                bool found = false;
                if (searchDown)
                {
                    while (i + 1 < foundEntries.Count)
                    {
                        i++;
                        logEntry = foundEntries[i];
                        if (logEntry.LineInFile > selectedItem.LogItem.LineInFile)
                        {
                            found = true;
                            break;
                        }
                    }
                }
                else
                {
                    while (i - 1 >= 0)
                    {
                        i--;
                        logEntry = foundEntries[i];
                        if (logEntry.LineInFile < selectedItem.LogItem.LineInFile)
                        {
                            found = true;
                            break;
                        }
                    }
                }
                string currentStatusText;
                if (found)
                {
                    context.GoToLogItem(logEntry);
                    currentStatusText = String.Format("Selected {0} of {1}", i + 1, foundEntries.Count);
                    TryHighlightNextOccurenceInMessageDetail();
                }
                else
                {
                    statusColor       = Color.DarkOrange;
                    currentStatusText = searchDown ? "Nothing, click on Find prev" : "Nothing, click on Find next";
                }
                SetStatusText(String.Format("Found {0} results.{1}{2}", foundEntries.Count, Environment.NewLine, currentStatusText), statusColor);
            }
        }