Exemple #1
0
        /// <summary>
        /// Handles the change of the <see cref="LogFilter"/> of the registered <see cref="ILogFilterProvider"/>
        /// </summary>
        public void FilterChanged()
        {
            if (InvokeRequired)
            {
                Invoke(new MethodInvoker(FilterChanged));
                return;
            }

            mLogFilterToApply = new List <LogFilter>();

            foreach (ILogFilterProvider filterProvider in mLogFilterProvider)
            {
                if (filterProvider.Filter == null || filterProvider.Filter.Count == 0)
                {
                    continue;
                }

                mLogFilterToApply.AddRange(filterProvider.Filter);
            }

            using (new WaitCursor(Cursors.Default, Settings.Default.WaitCursorTimeout))
            {
                try
                {
                    dtgLogMessages.SelectionChanged -= DtgLogMessagesSelectionChanged;

                    // Remember the current selected message.
                    LogMessage selectedMessage = null;

                    if (dtgLogMessages.SelectedRows.Count == 1 &&
                        dtgLogMessages.SelectedRows[0].Index >= 0 &&
                        dtgLogMessages.SelectedRows[0].Index < mFilteredLogMessages.Count)
                    {
                        selectedMessage = mFilteredLogMessages[dtgLogMessages.SelectedRows[0].Index];
                    }

                    // Clear all existing datasets.
                    dtgLogMessages.Rows.Clear();

                    // Convert the list to an array to fix
                    // accessing it while the enumeration is changed.
                    UpdateInternalList(mLogcontainer.LogMessages.ToArray());

                    // Try to select the previous selected log message again.
                    SelectLogMessage(selectedMessage);
                }
                finally
                {
                    dtgLogMessages.SelectionChanged += DtgLogMessagesSelectionChanged;
                }
            }

            dtgLogMessages.Refresh();

            if (mLogcontainer != null)
            {
                mLogcontainer.UpdateStatusBarInformation();
            }
        }