From 124518a14a94a7b5d9098d2805dd4aed983d7753 Mon Sep 17 00:00:00 2001 From: TheMorc Date: Fri, 8 Jan 2021 01:03:49 +0100 Subject: [PATCH] SystemMonitor: Add args parsing for opening a specific tab This allows SystemMonitor to parse -t or -open-tab argument to open a specific tab. (ex. network, interrupts etc.) --- Applications/SystemMonitor/main.cpp | 50 +++++++++++++++++++++++------ 1 file changed, 40 insertions(+), 10 deletions(-) diff --git a/Applications/SystemMonitor/main.cpp b/Applications/SystemMonitor/main.cpp index 9464d60dd1..bdf88e44d1 100644 --- a/Applications/SystemMonitor/main.cpp +++ b/Applications/SystemMonitor/main.cpp @@ -35,6 +35,7 @@ #include "ProcessUnveiledPathsWidget.h" #include "ThreadStackWidget.h" #include +#include #include #include #include @@ -153,6 +154,12 @@ int main(int argc, char** argv) unveil(nullptr, nullptr); + const char* args_tab = "processes"; + Core::ArgsParser parser; + parser.add_option(args_tab, "Tab, one of 'processes', 'graphs', 'fs', 'pci', 'devices', 'network', 'processors' or 'interrupts'", "open-tab", 't', "tab"); + parser.parse(argc, argv); + StringView args_tab_view = args_tab; + auto app_icon = GUI::Icon::default_icon("app-system-monitor"); auto window = GUI::Window::construct(); @@ -166,23 +173,29 @@ int main(int argc, char** argv) auto& tabwidget = keeper.add(); - auto& process_container_splitter = tabwidget.add_tab("Processes"); - process_container_splitter.layout()->set_margins({ 4, 4, 4, 4 }); + auto process_container_splitter = GUI::VerticalSplitter::construct(); + tabwidget.add_widget("Processes", process_container_splitter); + process_container_splitter->layout()->set_margins({ 4, 4, 4, 4 }); - auto& process_table_container = process_container_splitter.add(); + auto& process_table_container = process_container_splitter->add(); - tabwidget.add_widget("Graphs", build_graphs_tab()); + auto graphs_widget = build_graphs_tab(); + tabwidget.add_widget("Graphs", graphs_widget); - tabwidget.add_widget("File systems", build_file_systems_tab()); + auto file_systems_widget = build_file_systems_tab(); + tabwidget.add_widget("File systems", file_systems_widget); - tabwidget.add_widget("PCI devices", build_pci_devices_tab()); + auto pci_devices_widget = build_pci_devices_tab(); + tabwidget.add_widget("PCI devices", pci_devices_widget); - tabwidget.add_widget("Devices", build_devices_tab()); + auto devices_widget = build_devices_tab(); + tabwidget.add_widget("Devices", devices_widget); auto network_stats_widget = NetworkStatisticsWidget::construct(); tabwidget.add_widget("Network", network_stats_widget); - tabwidget.add_widget("Processors", build_processors_tab()); + auto processors_widget = build_processors_tab(); + tabwidget.add_widget("Processors", processors_widget); auto interrupts_widget = InterruptsWidget::construct(); tabwidget.add_widget("Interrupts", interrupts_widget); @@ -308,10 +321,10 @@ int main(int argc, char** argv) app->set_menubar(move(menubar)); - auto& process_tab_unused_widget = process_container_splitter.add("No process selected"); + auto& process_tab_unused_widget = process_container_splitter->add("No process selected"); process_tab_unused_widget.set_visible(true); - auto& process_tab_widget = process_container_splitter.add(); + auto& process_tab_widget = process_container_splitter->add(); process_tab_widget.set_tab_position(GUI::TabWidget::TabPosition::Bottom); process_tab_widget.set_visible(false); @@ -342,6 +355,23 @@ int main(int argc, char** argv) window->set_icon(app_icon.bitmap_for_size(16)); + if (args_tab_view == "processes") + tabwidget.set_active_widget(process_container_splitter); + else if (args_tab_view == "graphs") + tabwidget.set_active_widget(graphs_widget); + else if (args_tab_view == "fs") + tabwidget.set_active_widget(file_systems_widget); + else if (args_tab_view == "pci") + tabwidget.set_active_widget(pci_devices_widget); + else if (args_tab_view == "devices") + tabwidget.set_active_widget(devices_widget); + else if (args_tab_view == "network") + tabwidget.set_active_widget(network_stats_widget); + else if (args_tab_view == "processors") + tabwidget.set_active_widget(processors_widget); + else if (args_tab_view == "interrupts") + tabwidget.set_active_widget(interrupts_widget); + return app->exec(); }