main.cpp 5.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  1. #include <LibGUI/GWindow.h>
  2. #include <LibGUI/GWidget.h>
  3. #include <LibGUI/GBoxLayout.h>
  4. #include <LibGUI/GApplication.h>
  5. #include <LibGUI/GMenuBar.h>
  6. #include <LibGUI/GAction.h>
  7. #include <LibGUI/GButton.h>
  8. #include <LibGUI/GTableView.h>
  9. #include "VBForm.h"
  10. #include "VBWidget.h"
  11. #include "VBWidgetPropertyModel.h"
  12. #include "VBPropertiesWindow.h"
  13. #include <unistd.h>
  14. #include <stdio.h>
  15. #include <signal.h>
  16. #include <fcntl.h>
  17. static GWindow* make_toolbox_window();
  18. int main(int argc, char** argv)
  19. {
  20. GApplication app(argc, argv);
  21. auto* propbox = new VBPropertiesWindow;
  22. auto* form1 = new VBForm("Form1");
  23. form1->on_widget_selected = [propbox] (VBWidget* widget) {
  24. propbox->table_view().set_model(widget ? &widget->property_model() : nullptr);
  25. };
  26. auto menubar = make<GMenuBar>();
  27. auto app_menu = make<GMenu>("Visual Builder");
  28. app_menu->add_action(GAction::create("Quit", { Mod_Alt, Key_F4 }, [] (const GAction&) {
  29. GApplication::the().quit(0);
  30. return;
  31. }));
  32. menubar->add_menu(move(app_menu));
  33. auto file_menu = make<GMenu>("File");
  34. file_menu->add_action(GAction::create("Dump Form", [&] (auto&) {
  35. form1->dump();
  36. }));
  37. file_menu->add_action(GAction::create("Save Form...", { Mod_Ctrl, Key_S }, [form1] (auto&) {
  38. form1->write_to_file("/tmp/form.frm");
  39. }));
  40. menubar->add_menu(move(file_menu));
  41. auto edit_menu = make<GMenu>("Edit");
  42. menubar->add_menu(move(edit_menu));
  43. auto help_menu = make<GMenu>("Help");
  44. help_menu->add_action(GAction::create("About", [] (const GAction&) {
  45. dbgprintf("FIXME: Implement Help/About\n");
  46. }));
  47. menubar->add_menu(move(help_menu));
  48. app.set_menubar(move(menubar));
  49. auto* window = new GWindow;
  50. window->set_title(form1->name());
  51. window->set_rect(120, 200, 640, 400);
  52. window->set_main_widget(form1);
  53. window->set_should_exit_event_loop_on_close(true);
  54. window->show();
  55. auto* toolbox = make_toolbox_window();
  56. toolbox->show();
  57. propbox->show();
  58. return app.exec();
  59. }
  60. GWindow* make_toolbox_window()
  61. {
  62. auto* window = new GWindow;
  63. window->set_title("Widgets");
  64. window->set_rect(20, 200, 80, 300);
  65. auto* widget = new GWidget;
  66. widget->set_fill_with_background_color(true);
  67. widget->set_layout(make<GBoxLayout>(Orientation::Vertical));
  68. window->set_main_widget(widget);
  69. auto* label_button = new GButton(widget);
  70. label_button->set_tooltip("GLabel");
  71. label_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/label.png"));
  72. label_button->on_click = [] (GButton&) {
  73. if (auto* form = VBForm::current())
  74. form->insert_widget(VBWidgetType::GLabel);
  75. };
  76. auto* button_button = new GButton(widget);
  77. button_button->set_tooltip("GButton");
  78. button_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/button.png"));
  79. button_button->on_click = [] (GButton&) {
  80. if (auto* form = VBForm::current())
  81. form->insert_widget(VBWidgetType::GButton);
  82. };
  83. auto* spinbox_button = new GButton(widget);
  84. spinbox_button->set_tooltip("GSpinBox");
  85. spinbox_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/spinbox.png"));
  86. spinbox_button->on_click = [] (GButton&) {
  87. if (auto* form = VBForm::current())
  88. form->insert_widget(VBWidgetType::GSpinBox);
  89. };
  90. auto* editor_button = new GButton(widget);
  91. editor_button->set_tooltip("GTextEditor");
  92. editor_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/textbox.png"));
  93. editor_button->on_click = [] (GButton&) {
  94. if (auto* form = VBForm::current())
  95. form->insert_widget(VBWidgetType::GTextEditor);
  96. };
  97. auto* progress_bar_button = new GButton(widget);
  98. progress_bar_button->set_tooltip("GProgressBar");
  99. progress_bar_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/progressbar.png"));
  100. progress_bar_button->on_click = [] (GButton&) {
  101. if (auto* form = VBForm::current())
  102. form->insert_widget(VBWidgetType::GProgressBar);
  103. };
  104. auto* slider_button = new GButton(widget);
  105. slider_button->set_tooltip("GSlider");
  106. slider_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/slider.png"));
  107. slider_button->on_click = [] (GButton&) {
  108. if (auto* form = VBForm::current())
  109. form->insert_widget(VBWidgetType::GSlider);
  110. };
  111. auto* checkbox_button = new GButton(widget);
  112. checkbox_button->set_tooltip("GCheckBox");
  113. checkbox_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/checkbox.png"));
  114. checkbox_button->on_click = [] (GButton&) {
  115. if (auto* form = VBForm::current())
  116. form->insert_widget(VBWidgetType::GCheckBox);
  117. };
  118. auto* scrollbar_button = new GButton(widget);
  119. scrollbar_button->set_tooltip("GScrollBar");
  120. scrollbar_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/scrollbar.png"));
  121. scrollbar_button->on_click = [] (GButton&) {
  122. if (auto* form = VBForm::current())
  123. form->insert_widget(VBWidgetType::GScrollBar);
  124. };
  125. auto* groupbox_button = new GButton(widget);
  126. groupbox_button->set_tooltip("GGroupBox");
  127. groupbox_button->set_icon(GraphicsBitmap::load_from_file("/res/icons/vbwidgets/groupbox.png"));
  128. groupbox_button->on_click = [] (GButton&) {
  129. if (auto* form = VBForm::current())
  130. form->insert_widget(VBWidgetType::GGroupBox);
  131. };
  132. return window;
  133. }