main.cpp 6.4 KB

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