Index: src/DeltaShell/DeltaShell.Gui/Forms/MessageWindow/MessageWindow.cs =================================================================== diff -u -r54df01948125b5291b93915b5b99c6790459b146 -rf35260d1876528f1ea61908a8d5fc3cdb5deb238 --- src/DeltaShell/DeltaShell.Gui/Forms/MessageWindow/MessageWindow.cs (.../MessageWindow.cs) (revision 54df01948125b5291b93915b5b99c6790459b146) +++ src/DeltaShell/DeltaShell.Gui/Forms/MessageWindow/MessageWindow.cs (.../MessageWindow.cs) (revision f35260d1876528f1ea61908a8d5fc3cdb5deb238) @@ -11,7 +11,7 @@ namespace DeltaShell.Gui.Forms.MessageWindow { - public partial class MessageWindow : UserControl, IMessageWindow, IObserver + public partial class MessageWindow : UserControl, IMessageWindow { public event EventHandler OnError; private readonly Dictionary levelImageName; @@ -58,46 +58,52 @@ // fixes DPI problem messagesDataGridView.ColumnHeadersHeightSizeMode = DataGridViewColumnHeadersHeightSizeMode.AutoSize; messagesDataGridView.RowsAdded += messagesDataGridView_RowsAdded; - - newMessages.Attach(this); } - public void UpdateObserver() + private void PopulateMessages() { if (newMessages.Count == 0) { return; } - messagesDataGridView.SuspendLayout(); + var hasError = false; + messageWindowData.Messages.BeginLoadData(); try { - Refresh(); - - while (newMessages.Count != 0) + foreach (var msg in newMessages) { - var newMessage = newMessages[0]; - newMessages.RemoveAt(0); - - messageWindowData.Messages.AddMessagesRow(newMessage.ImageName, newMessage.Time, newMessage.Message); - - if (newMessage.ImageName == "ERROR" && OnError != null) - { - OnError(this, null); - } + messageWindowData.Messages.AddMessagesRow(msg.ImageName, msg.Time, msg.Message); + hasError = hasError || (msg.ImageName == "ERROR" && OnError != null); } } finally { - messagesDataGridView.ResumeLayout(); + newMessages.Clear(); + messageWindowData.Messages.EndLoadData(); } + if (hasError) + { + OnError(this, null); + } + if (messagesDataGridView.Rows.Count > 0) { messagesDataGridView.CurrentCell = messagesDataGridView.Rows[0].Cells[0]; } } + /// + /// Raises the event. + /// + /// A that contains the event data. + protected override void OnPaint(PaintEventArgs e) + { + base.OnPaint(e); + PopulateMessages(); + } + private void messagesDataGridView_RowsAdded(object sender, DataGridViewRowsAddedEventArgs e) { if (filtering) @@ -300,7 +306,7 @@ { ImageName = level.ToString(), Time = time, Message = message }); - newMessages.NotifyObservers(); + Invalidate(); } ///