VBWidgetRegistry.cpp 2.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. #include "VBWidgetRegistry.h"
  2. #include "VBProperty.h"
  3. #include <LibGUI/GLabel.h>
  4. #include <LibGUI/GButton.h>
  5. #include <LibGUI/GSpinBox.h>
  6. #include <LibGUI/GTextEditor.h>
  7. #include <LibGUI/GProgressBar.h>
  8. #include <LibGUI/GCheckBox.h>
  9. #include <LibGUI/GScrollBar.h>
  10. #include <LibGUI/GGroupBox.h>
  11. static String to_class_name(VBWidgetType type)
  12. {
  13. switch (type) {
  14. case VBWidgetType::GWidget: return "GWidget";
  15. case VBWidgetType::GButton: return "GButton";
  16. case VBWidgetType::GLabel: return "GLabel";
  17. case VBWidgetType::GSpinBox: return "GSpinBox";
  18. case VBWidgetType::GTextEditor: return "GTextEditor";
  19. case VBWidgetType::GProgressBar: return "GProgressBar";
  20. case VBWidgetType::GCheckBox: return "GCheckBox";
  21. case VBWidgetType::GScrollBar: return "GScrollBar";
  22. case VBWidgetType::GGroupBox: return "GGroupBox";
  23. default: ASSERT_NOT_REACHED();
  24. }
  25. }
  26. static GWidget* build_gwidget(VBWidgetType type, GWidget* parent)
  27. {
  28. switch (type) {
  29. case VBWidgetType::GWidget:
  30. return new GWidget(parent);
  31. case VBWidgetType::GScrollBar:
  32. return new GScrollBar(Orientation::Vertical, parent);
  33. case VBWidgetType::GGroupBox:
  34. return new GGroupBox("groupbox_1", parent);
  35. case VBWidgetType::GLabel: {
  36. auto* label = new GLabel(parent);
  37. label->set_text("label_1");
  38. return label;
  39. }
  40. case VBWidgetType::GButton: {
  41. auto* button = new GButton(parent);
  42. button->set_caption("button_1");
  43. return button;
  44. }
  45. case VBWidgetType::GSpinBox: {
  46. auto* box = new GSpinBox(parent);
  47. box->set_range(0, 100);
  48. box->set_value(0);
  49. return box;
  50. }
  51. case VBWidgetType::GTextEditor: {
  52. auto* editor = new GTextEditor(GTextEditor::Type::MultiLine, parent);
  53. editor->set_ruler_visible(false);
  54. return editor;
  55. }
  56. case VBWidgetType::GProgressBar: {
  57. auto* bar = new GProgressBar(parent);
  58. bar->set_format(GProgressBar::Format::NoText);
  59. bar->set_range(0, 100);
  60. bar->set_value(50);
  61. return bar;
  62. }
  63. case VBWidgetType::GCheckBox: {
  64. auto* box = new GCheckBox(parent);
  65. box->set_caption("checkbox_1");
  66. return box;
  67. }
  68. default:
  69. ASSERT_NOT_REACHED();
  70. return nullptr;
  71. }
  72. }
  73. GWidget* VBWidgetRegistry::build_gwidget(VBWidgetType type, GWidget* parent, Vector<OwnPtr<VBProperty>>& properties)
  74. {
  75. auto* gwidget = ::build_gwidget(type, parent);
  76. auto add_property = [&properties] (const String& name, const GVariant& value, bool is_readonly) {
  77. auto property = make<VBProperty>(name, value);
  78. property->set_readonly(is_readonly);
  79. properties.append(move(property));
  80. };
  81. add_property("ClassName", to_class_name(type), true);
  82. return gwidget;
  83. }