1
0
Fork 0
mirror of https://github.com/beefytech/Beef.git synced 2025-06-15 23:04:09 +02:00

Add output window filtering options similar to what Visual Studio

offers.

To use right click on output window, and select which messages should
appear and which should be filtered out.

By default all types of messages appear as they normally would before
this change.

These settings are persisted into workspace_user file

This change helps keep the clutter out of the output window so that
program output logs are easier to read, especially on application
startup.
This commit is contained in:
Martin Cietwierkowski 2023-08-23 20:18:45 -04:00
parent da23ba4aa7
commit d9d954254f
7 changed files with 221 additions and 15 deletions

View file

@ -244,15 +244,100 @@ namespace IDE.ui
Menu menu = new Menu();
var menuItem = menu.AddItem("Clear All");
var menuItemClearAll = menu.AddItem("Clear All");
var panel = mParent.mParent.mParent as TextPanel;
menuItem.mOnMenuItemSelected.Add(new (evt) =>
{
menuItemClearAll.mOnMenuItemSelected.Add(new (evt) =>
{
if (panel != null)
panel.Clear();
else
ClearText();
});
ClearText();
});
// Separator
menu.AddItem();
IDE.Debugger.DebugManager.OutputFilterFlags outputFilterFlags = gApp.mDebugger.GetOutputFilterFlags();
var menuItemModuleLoadMessages = menu.AddItem("Module Load Messages");
if (!outputFilterFlags.HasFlag(.ModuleLoadMessages))
{
menuItemModuleLoadMessages.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
}
menuItemModuleLoadMessages.mOnMenuItemSelected.Add(new (evt) =>
{
gApp.mDebugger.SetOutputFilterFlags(outputFilterFlags ^ .ModuleLoadMessages);
});
var menuItemModuleUnloadMessages = menu.AddItem("Module Unload Messages");
if (!outputFilterFlags.HasFlag(.ModuleUnloadMessages))
{
menuItemModuleUnloadMessages.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
}
menuItemModuleUnloadMessages.mOnMenuItemSelected.Add(new (evt) =>
{
gApp.mDebugger.SetOutputFilterFlags(outputFilterFlags ^ .ModuleUnloadMessages);
});
var menuItemProcessExitMessages = menu.AddItem("Process Exit Messages");
if (!outputFilterFlags.HasFlag(.ProcessExitMessages))
{
menuItemProcessExitMessages.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
}
menuItemProcessExitMessages.mOnMenuItemSelected.Add(new (evt) =>
{
gApp.mDebugger.SetOutputFilterFlags(outputFilterFlags ^ .ProcessExitMessages);
});
var menuItemThreadCreateMessages = menu.AddItem("Thread Creation Messages");
if (!outputFilterFlags.HasFlag(.ThreadCreateMessages))
{
menuItemThreadCreateMessages.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
}
menuItemThreadCreateMessages.mOnMenuItemSelected.Add(new (evt) =>
{
gApp.mDebugger.SetOutputFilterFlags(outputFilterFlags ^ .ThreadCreateMessages);
});
var menuItemThreadExitMessages = menu.AddItem("Thread Exit Messages");
if (!outputFilterFlags.HasFlag(.ThreadExitMessages))
{
menuItemThreadExitMessages.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
}
menuItemThreadExitMessages.mOnMenuItemSelected.Add(new (evt) =>
{
gApp.mDebugger.SetOutputFilterFlags(outputFilterFlags ^ .ThreadExitMessages);
});
var menuItemSymbolLoadMessages = menu.AddItem("Symbol Load Messages");
if (!outputFilterFlags.HasFlag(.SymbolLoadMessages))
{
menuItemSymbolLoadMessages.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
}
menuItemSymbolLoadMessages.mOnMenuItemSelected.Add(new (evt) =>
{
gApp.mDebugger.SetOutputFilterFlags(outputFilterFlags ^ .SymbolLoadMessages);
});
/* Not sure how to filter Program Output, it's handled in BeefSysLib not the IDE/Debugger. Perhaps we would
also need SetOutputFilterFlags() in BeefSysLib
var menuItemProgramOutput = menu.AddItem("Program Output");
if (!outputFilterFlags.HasFlag(.ProgramOutput))
{
menuItemProgramOutput.mIconImage = DarkTheme.sDarkTheme.GetImage(DarkTheme.ImageIdx.Check);
}
menuItemProgramOutput.mOnMenuItemSelected.Add(new (evt) =>
{
gApp.mDebugger.SetOutputFilterFlags(outputFilterFlags ^ .ProgramOutput);
});
*/
MenuWidget menuWidget = DarkTheme.sDarkTheme.CreateMenuWidget(menu);
menuWidget.Init(this, useX, useY);