Browse Source

VisualBuilder: Add some widget-specific properties.

Andreas Kling 6 years ago
parent
commit
c98bbff0cb

+ 61 - 14
Applications/VisualBuilder/VBWidget.cpp

@@ -4,6 +4,13 @@
 #include "VBWidgetRegistry.h"
 #include "VBWidgetPropertyModel.h"
 #include <LibGUI/GPainter.h>
+#include <LibGUI/GLabel.h>
+#include <LibGUI/GButton.h>
+#include <LibGUI/GScrollBar.h>
+#include <LibGUI/GSpinBox.h>
+#include <LibGUI/GTextEditor.h>
+#include <LibGUI/GGroupBox.h>
+#include <LibGUI/GProgressBar.h>
 
 VBWidget::VBWidget(VBWidgetType type, VBForm& form)
     : m_type(type)
@@ -80,23 +87,63 @@ void VBWidget::for_each_property(Function<void(VBProperty&)> callback)
 
 void VBWidget::synchronize_properties()
 {
-    property_by_name("width")->set_value(m_gwidget->width());
-    property_by_name("height")->set_value(m_gwidget->height());
-    property_by_name("x")->set_value(m_gwidget->x());
-    property_by_name("y")->set_value(m_gwidget->y());
-    property_by_name("visible")->set_value(m_gwidget->is_visible());
-    property_by_name("enabled")->set_value(m_gwidget->is_enabled());
-    property_by_name("tooltip")->set_value(m_gwidget->tooltip());
-    property_by_name("background_color")->set_value(m_gwidget->background_color());
-    property_by_name("foreground_color")->set_value(m_gwidget->foreground_color());
+    property("width").set_value(m_gwidget->width());
+    property("height").set_value(m_gwidget->height());
+    property("x").set_value(m_gwidget->x());
+    property("y").set_value(m_gwidget->y());
+    property("visible").set_value(m_gwidget->is_visible());
+    property("enabled").set_value(m_gwidget->is_enabled());
+    property("tooltip").set_value(m_gwidget->tooltip());
+    property("background_color").set_value(m_gwidget->background_color());
+    property("foreground_color").set_value(m_gwidget->foreground_color());
+
+    if (m_type == VBWidgetType::GLabel) {
+        auto& widget = *static_cast<GLabel*>(m_gwidget);
+        property("text").set_value(widget.text());
+    }
+
+    if (m_type == VBWidgetType::GButton) {
+        auto& widget = *static_cast<GButton*>(m_gwidget);
+        property("caption").set_value(widget.caption());
+    }
+
+    if (m_type == VBWidgetType::GScrollBar) {
+        auto& widget = *static_cast<GScrollBar*>(m_gwidget);
+        property("min").set_value(widget.min());
+        property("max").set_value(widget.max());
+        property("value").set_value(widget.value());
+        property("step").set_value(widget.step());
+    }
+
+    if (m_type == VBWidgetType::GSpinBox) {
+        auto& widget = *static_cast<GSpinBox*>(m_gwidget);
+        property("min").set_value(widget.min());
+        property("max").set_value(widget.max());
+        property("value").set_value(widget.value());
+    }
+
+    if (m_type == VBWidgetType::GProgressBar) {
+        auto& widget = *static_cast<GProgressBar*>(m_gwidget);
+        property("min").set_value(widget.min());
+        property("max").set_value(widget.max());
+        property("value").set_value(widget.value());
+    }
+
+    if (m_type == VBWidgetType::GTextEditor) {
+        auto& widget = *static_cast<GTextEditor*>(m_gwidget);
+        property("text").set_value(widget.text());
+        property("ruler_visible").set_value(widget.is_ruler_visible());
+    }
+
     m_property_model->update();
 }
 
-VBProperty* VBWidget::property_by_name(const String& name)
+VBProperty& VBWidget::property(const String& name)
 {
-    for (auto& property : m_properties) {
-        if (property->name() == name)
-            return property.ptr();
+    for (auto& prop : m_properties) {
+        if (prop->name() == name)
+            return *prop;
     }
-    return nullptr;
+    m_properties.append(make<VBProperty>(name, GVariant()));
+    return *m_properties.last();
 }

+ 1 - 2
Applications/VisualBuilder/VBWidget.h

@@ -44,8 +44,7 @@ public:
 
     GWidget* gwidget() { return m_gwidget; }
 
-    const VBProperty* property_by_name(const String&) const;
-    VBProperty* property_by_name(const String&);
+    VBProperty& property(const String&);
 
     void for_each_property(Function<void(VBProperty&)>);
 

+ 0 - 9
Applications/VisualBuilder/VBWidgetRegistry.cpp

@@ -82,14 +82,5 @@ GWidget* VBWidgetRegistry::build_gwidget(VBWidgetType type, GWidget* parent, Vec
         properties.append(move(property));
     };
     add_property("class", to_class_name(type), true);
-    add_property("width");
-    add_property("height");
-    add_property("x");
-    add_property("y");
-    add_property("visible");
-    add_property("enabled");
-    add_property("tooltip");
-    add_property("background_color");
-    add_property("foreground_color");
     return gwidget;
 }

+ 2 - 0
LibGUI/GProgressBar.h

@@ -11,6 +11,8 @@ public:
     void set_value(int);
 
     int value() const { return m_value; }
+    int min() const { return m_min; }
+    int max() const { return m_max; }
 
     String caption() const { return m_caption; }
     void set_caption(const String& caption) { m_caption = caption; }

+ 2 - 0
LibGUI/GSpinBox.h

@@ -13,6 +13,8 @@ public:
     int value() const { return m_value; }
     void set_value(int);
 
+    int min() const { return m_min; }
+    int max() const { return m_max; }
     void set_range(int min, int max);
 
     Function<void(int value)> on_change;