main.cpp 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. /*
  2. * Copyright (c) 2019-2020, Sergey Bugaev <bugaevc@serenityos.org>
  3. *
  4. * SPDX-License-Identifier: BSD-2-Clause
  5. */
  6. #include "CalculatorWidget.h"
  7. #include <LibGUI/Action.h>
  8. #include <LibGUI/Application.h>
  9. #include <LibGUI/Clipboard.h>
  10. #include <LibGUI/Icon.h>
  11. #include <LibGUI/Menu.h>
  12. #include <LibGUI/Menubar.h>
  13. #include <LibGUI/Window.h>
  14. #include <LibGfx/Bitmap.h>
  15. #include <stdio.h>
  16. #include <unistd.h>
  17. int main(int argc, char** argv)
  18. {
  19. if (pledge("stdio recvfd sendfd rpath unix", nullptr) < 0) {
  20. perror("pledge");
  21. return 1;
  22. }
  23. auto app = GUI::Application::construct(argc, argv);
  24. if (pledge("stdio recvfd sendfd rpath", nullptr) < 0) {
  25. perror("pledge");
  26. return 1;
  27. }
  28. if (unveil("/res", "r") < 0) {
  29. perror("unveil");
  30. return 1;
  31. }
  32. unveil(nullptr, nullptr);
  33. auto app_icon = GUI::Icon::default_icon("app-calculator");
  34. auto window = GUI::Window::construct();
  35. window->set_title("Calculator");
  36. window->set_resizable(false);
  37. window->resize(254, 215);
  38. auto& widget = window->set_main_widget<CalculatorWidget>();
  39. window->show();
  40. window->set_icon(app_icon.bitmap_for_size(16));
  41. auto menubar = GUI::Menubar::construct();
  42. auto& file_menu = menubar->add_menu("&File");
  43. file_menu.add_action(GUI::CommonActions::make_quit_action([](auto&) {
  44. GUI::Application::the()->quit();
  45. }));
  46. auto& edit_menu = menubar->add_menu("&Edit");
  47. edit_menu.add_action(GUI::CommonActions::make_copy_action([&](auto&) {
  48. GUI::Clipboard::the().set_plain_text(widget.get_entry());
  49. }));
  50. edit_menu.add_action(GUI::CommonActions::make_paste_action([&](auto&) {
  51. auto clipboard = GUI::Clipboard::the().data_and_type();
  52. if (clipboard.mime_type == "text/plain") {
  53. if (!clipboard.data.is_empty()) {
  54. auto data = atof(StringView(clipboard.data).to_string().characters());
  55. widget.set_entry(data);
  56. }
  57. }
  58. }));
  59. auto& help_menu = menubar->add_menu("&Help");
  60. help_menu.add_action(GUI::CommonActions::make_about_action("Calculator", app_icon, window));
  61. window->set_menubar(move(menubar));
  62. return app->exec();
  63. }