Table of Contents

Session Message Panel

The model is MachiningProject.SessionMessageHost.

MachiningProject is assigned from the Player Panel.

Layout

  • Top Message Filter ToolBar
    • Message Type Filter SubMenu
      • NC CheckBox
      • Progress CheckBox
      • Error CheckBox
    • Message Text Filter Input
      • Message Text Filter Input Text Area
      • Message Text Filter Reset Button
    • Export Button
  • Central Message Table

Central Message Table

The model of Central Message Table is SessionMessageHost.MessageCollection.

Only take last 1000 filtered elements in the MessageCollection by GetFliteredList(FilterFlag, string) to show for user experience. Find the usage example in the code:

internal static void DemoUseSessionMessageHost(MachiningProject project)
{
    SessionMessageHost sessionMessageHost = project.SessionMessageHost;

    SessionMessageHost.FilterFlag filterFlags =
        SessionMessageHost.FilterFlag.NC |
        SessionMessageHost.FilterFlag.Progress |
        SessionMessageHost.FilterFlag.Error;
    string filterText = null;
    var filteredSessionMessageList = sessionMessageHost
        .GetFliteredList(filterFlags, filterText);

    foreach (var sessionMessage in filteredSessionMessageList)
    {
        //M.I.: Message Index.
        Console.Write($"M.I.: {sessionMessage.Index}; Role: {sessionMessage.MessageRoleText}");

        // For SessionMessageHost.FilterFlag.NC
        var nc = sessionMessage.DirectInstantSourceCommand;
        if (nc != null)
            Console.Write($"Message/NC: {nc.Line}; File: {nc.FilePath}; LineNo: {nc.GetLineNo()}; ");

        // For SessionMessageHost.FilterFlag.Progress or Error.
        var multiTagMessage = sessionMessage.MultiTagMessage;
        if (multiTagMessage != null)
            Console.WriteLine($"Message/NC: {multiTagMessage.Message}");
        var exception = sessionMessage.Exception;
        if (exception != null)
            Console.WriteLine($"Message/NC: {exception.Message}");
    }
    File.WriteAllLines("output-session-messages.txt",
        filteredSessionMessageList.Select(m =>
        $"Msg[{m.Index}][{m.MessageRoleText}]: {m}"));
}

In the table, show the columns: Role, NC/Message.

Add update table event to CollectionItemChanged. The updating process has to be called by Loose Manner for user experience.

Tip

On window desktop application (WPF), consider use textarea instead of datagrid to MessageTable for better performance. Use padding to show the different columns. And use the font in the textarea that with consistent width.

Behavior of Export Button

Export ALL filtered elements in the MessageCollection by GetFliteredList(FilterFlag, string).

Single-User WPF Application Source Code Path

  • Play/SessionMessagePanel

see this page for git repository.