main.cpp 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. #include <LibGUI/GWindow.h>
  2. #include <LibGUI/GWidget.h>
  3. #include <LibGUI/GBoxLayout.h>
  4. #include <LibGUI/GApplication.h>
  5. #include <LibGUI/GStatusBar.h>
  6. #include <LibGUI/GToolBar.h>
  7. #include <LibGUI/GMenuBar.h>
  8. #include <LibGUI/GAction.h>
  9. #include <unistd.h>
  10. #include <stdio.h>
  11. #include <signal.h>
  12. #include "ProcessTableView.h"
  13. int main(int argc, char** argv)
  14. {
  15. GApplication app(argc, argv);
  16. auto* widget = new GWidget;
  17. widget->set_fill_with_background_color(false);
  18. widget->set_layout(make<GBoxLayout>(Orientation::Vertical));
  19. auto* toolbar = new GToolBar(widget);
  20. auto* process_table_view = new ProcessTableView(widget);
  21. auto* statusbar = new GStatusBar(widget);
  22. process_table_view->on_status_message = [statusbar] (String message) {
  23. statusbar->set_text(move(message));
  24. };
  25. auto kill_action = GAction::create("Kill process", GraphicsBitmap::load_from_file(GraphicsBitmap::Format::RGBA32, "/res/icons/kill16.rgb", { 16, 16 }), [process_table_view] (const GAction&) {
  26. pid_t pid = process_table_view->selected_pid();
  27. if (pid != -1)
  28. kill(pid, SIGKILL);
  29. });
  30. auto stop_action = GAction::create("Stop process", GraphicsBitmap::load_from_file(GraphicsBitmap::Format::RGBA32, "/res/icons/stop16.rgb", { 16, 16 }), [process_table_view] (const GAction&) {
  31. pid_t pid = process_table_view->selected_pid();
  32. if (pid != -1)
  33. kill(pid, SIGSTOP);
  34. });
  35. auto continue_action = GAction::create("Continue process", GraphicsBitmap::load_from_file(GraphicsBitmap::Format::RGBA32, "/res/icons/continue16.rgb", { 16, 16 }), [process_table_view] (const GAction&) {
  36. pid_t pid = process_table_view->selected_pid();
  37. if (pid != -1)
  38. kill(pid, SIGCONT);
  39. });
  40. toolbar->add_action(kill_action.copy_ref());
  41. toolbar->add_action(stop_action.copy_ref());
  42. toolbar->add_action(continue_action.copy_ref());
  43. auto menubar = make<GMenuBar>();
  44. auto app_menu = make<GMenu>("ProcessManager");
  45. app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) {
  46. GApplication::the().quit(0);
  47. return;
  48. }));
  49. menubar->add_menu(move(app_menu));
  50. auto process_menu = make<GMenu>("Process");
  51. process_menu->add_action(kill_action.copy_ref());
  52. process_menu->add_action(stop_action.copy_ref());
  53. process_menu->add_action(continue_action.copy_ref());
  54. menubar->add_menu(move(process_menu));
  55. auto help_menu = make<GMenu>("Help");
  56. help_menu->add_action(GAction::create("About", [] (const GAction&) {
  57. dbgprintf("FIXME: Implement Help/About\n");
  58. }));
  59. menubar->add_menu(move(help_menu));
  60. app.set_menubar(move(menubar));
  61. auto* window = new GWindow;
  62. window->set_title("ProcessManager");
  63. window->set_rect(20, 200, 640, 400);
  64. window->set_main_widget(widget);
  65. window->set_should_exit_app_on_close(true);
  66. window->show();
  67. return app.exec();
  68. }