main.cpp 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. /*
  2. * Copyright (c) 2020, Hüseyin Aslıtürk <asliturk@hotmail.com>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "KeyboardMapperWidget.h"
  7. #include <LibCore/ArgsParser.h>
  8. #include <LibGUI/Action.h>
  9. #include <LibGUI/Application.h>
  10. #include <LibGUI/FilePicker.h>
  11. #include <LibGUI/Icon.h>
  12. #include <LibGUI/Menu.h>
  13. #include <LibGUI/Menubar.h>
  14. #include <unistd.h>
  15. int main(int argc, char** argv)
  16. {
  17. const char* path = nullptr;
  18. Core::ArgsParser args_parser;
  19. args_parser.add_positional_argument(path, "Keyboard character mapping file.", "file", Core::ArgsParser::Required::No);
  20. args_parser.parse(argc, argv);
  21. if (pledge("stdio getkeymap thread rpath cpath wpath recvfd sendfd unix", nullptr) < 0) {
  22. perror("pledge");
  23. return 1;
  24. }
  25. auto app = GUI::Application::construct(argc, argv);
  26. if (pledge("stdio getkeymap thread rpath cpath wpath recvfd sendfd", nullptr) < 0) {
  27. perror("pledge");
  28. return 1;
  29. }
  30. auto app_icon = GUI::Icon::default_icon("app-keyboard-mapper");
  31. auto window = GUI::Window::construct();
  32. window->set_title("Keyboard Mapper");
  33. window->set_icon(app_icon.bitmap_for_size(16));
  34. window->set_main_widget<KeyboardMapperWidget>();
  35. window->resize(775, 315);
  36. window->set_resizable(false);
  37. window->show();
  38. auto keyboard_mapper_widget = (KeyboardMapperWidget*)window->main_widget();
  39. if (path != nullptr) {
  40. keyboard_mapper_widget->load_from_file(path);
  41. } else {
  42. keyboard_mapper_widget->load_from_system();
  43. }
  44. if (pledge("stdio thread rpath cpath wpath recvfd sendfd", nullptr) < 0) {
  45. perror("pledge");
  46. return 1;
  47. }
  48. auto open_action = GUI::CommonActions::make_open_action(
  49. [&](auto&) {
  50. Optional<String> path = GUI::FilePicker::get_open_filepath(window, "Open", "/res/keymaps/");
  51. if (path.has_value()) {
  52. keyboard_mapper_widget->load_from_file(path.value());
  53. }
  54. });
  55. auto save_action = GUI::CommonActions::make_save_action(
  56. [&](auto&) {
  57. keyboard_mapper_widget->save();
  58. });
  59. auto save_as_action = GUI::CommonActions::make_save_as_action([&](auto&) {
  60. String name = "Unnamed";
  61. Optional<String> save_path = GUI::FilePicker::get_save_filepath(window, name, "json");
  62. if (!save_path.has_value())
  63. return;
  64. keyboard_mapper_widget->save_to_file(save_path.value());
  65. });
  66. auto quit_action = GUI::CommonActions::make_quit_action(
  67. [&](auto&) {
  68. app->quit();
  69. });
  70. auto menubar = GUI::Menubar::construct();
  71. auto& file_menu = menubar->add_menu("&File");
  72. file_menu.add_action(open_action);
  73. file_menu.add_action(save_action);
  74. file_menu.add_action(save_as_action);
  75. file_menu.add_separator();
  76. file_menu.add_action(quit_action);
  77. auto& help_menu = menubar->add_menu("&Help");
  78. help_menu.add_action(GUI::CommonActions::make_about_action("Keyboard Mapper", app_icon, window));
  79. window->set_menubar(move(menubar));
  80. return app->exec();
  81. }