Example #1
0
        public void HandleOnLogEvent(object _sender, KwmLogEventArgs args)
        {
            if (InvokeRequired)
            {
                BeginInvoke(new EventHandler<KwmLogEventArgs>(HandleOnLogEvent), new object[] { _sender, args });
                return;
            }

            // We might be called after the UI has been disposed. Let the
            // event go.
            if (this.IsDisposed || this.Disposing) return;

            // Determine whether we want to scroll.
            bool scrollFlag = (this.WindowState != FormWindowState.Minimized &&
                               lvMessages.Items.Count != 0 &&
                               lvMessages.ClientRectangle.Contains(
                                 lvMessages.Items[lvMessages.Items.Count - 1].SubItems[1].Bounds));

            // Add the event.
            AddEvent(args, scrollFlag);
        }
Example #2
0
        /// <summary>
        /// Handle a request to log an event. This method is called from 
        /// KLogging.
        /// </summary>
        public static void Logger(int severity, String msg, bool loggingExceptionFlag)
        {
            // Return early if we are not logging.
            if (m_loggingLevel == KwmLoggingLevel.None) return;

            // Generate the log event.
            String callerStr = "Unknown";
            String lineStr = "?";
            String callStackStr = "";

            if (m_loggingLevel == KwmLoggingLevel.Debug)
            {
                FormatStackFrame(new StackFrame(2, true), out callerStr, out lineStr);
                StackTrace st = new StackTrace(true);
                for (int i = 2; i < st.FrameCount; i++)
                {
                    String name, line;
                    FormatStackFrame(st.GetFrame(i), out name, out line);
                    callStackStr += name + " at line " + line + Environment.NewLine;
                }
            }

            KwmLogEventArgs evt = new KwmLogEventArgs(severity, callerStr, callStackStr, lineStr, msg,
                                                DateTime.Now.ToLocalTime());

            // For ordering and consistency purpose the following has to be
            // done in mutual exclusion.
            lock (Mutex)
            {
                // Overflow, remove some events.
                if (m_evtList.Count >= m_maxNbEvt) m_evtList.RemoveRange(0, m_evtList.Count / 2);

                // Add the event to the list.
                m_evtList.Add(evt);

            #if DEBUG
                Debug.WriteLine(evt.Timestamp.ToString("") + " | " + evt.Severity + " | " +
                evt.Caller + "::line " + evt.Line + " | " + evt.Message);
            #endif

                // Dispatch the event to the listeners.
                if (m_onLogEvent != null && !m_firingFlag)
                {
                    try
                    {
                        m_firingFlag = true;
                        m_onLogEvent(null, evt);
                        m_firingFlag = false;
                    }

                    catch (Exception ex)
                    {
                        KBase.HandleError(ex.Message, true);
                    }
                }
            }
        }
Example #3
0
        /// <summary>
        /// Adds a message to the listview. If scrollToBotton
        /// is set to true, calls EnsureVisible so that the last
        /// item is scrolled to.
        /// </summary>
        private void AddEvent(KwmLogEventArgs evt, bool scrollToBottom)
        {
            // Add this message to listview
            ListViewItem itm = new ListViewItem(evt.Severity.ToString());
            itm.Name = lvMessages.Columns[0].Name;
            itm.Tag = evt.CallStack;

            switch (evt.Severity)
            {
                case 1:
                    itm.BackColor = Color.Yellow;
                    break;
                case 2:
                    itm.BackColor = Color.Red;
                    break;
                default:
                    itm.BackColor = Color.White;
                    break;
            }

            ListViewItem.ListViewSubItem sub;

            sub = new ListViewItem.ListViewSubItem();
            sub.Name = lvMessages.Columns[1].Name;
            sub.Text = evt.Timestamp.ToString("hh:mm:ss.fff");
            itm.SubItems.Add(sub);

            sub = new ListViewItem.ListViewSubItem();
            sub.Name = lvMessages.Columns[2].Name;
            sub.Text = evt.Caller;
            itm.SubItems.Add(sub);

            sub = new ListViewItem.ListViewSubItem();
            sub.Name = lvMessages.Columns[3].Name;
            sub.Text = evt.Line;
            itm.SubItems.Add(sub);

            sub = new ListViewItem.ListViewSubItem();
            sub.Name = lvMessages.Columns[4].Name;
            sub.Text = evt.Message;
            itm.SubItems.Add(sub);

            lvMessages.Items.Add(itm);

            if (scrollToBottom) CorrectUI(false);
        }