summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndreas Kling <awesomekling@gmail.com>2019-04-12 15:17:53 +0200
committerAndreas Kling <awesomekling@gmail.com>2019-04-12 15:17:53 +0200
commitc98bbff0cbe3e3b80478ace3d73544914285b9e1 (patch)
treeec04de95aaf4b0e5edfa32eb9ae380a20c9e3973
parent3674bb942979314e1dd3dd58a59a4043f715a392 (diff)
downloadserenity-c98bbff0cbe3e3b80478ace3d73544914285b9e1.zip
VisualBuilder: Add some widget-specific properties.
-rw-r--r--Applications/VisualBuilder/VBWidget.cpp75
-rw-r--r--Applications/VisualBuilder/VBWidget.h3
-rw-r--r--Applications/VisualBuilder/VBWidgetRegistry.cpp9
-rw-r--r--LibGUI/GProgressBar.h2
-rw-r--r--LibGUI/GSpinBox.h2
5 files changed, 66 insertions, 25 deletions
diff --git a/Applications/VisualBuilder/VBWidget.cpp b/Applications/VisualBuilder/VBWidget.cpp
index 89ddec309d..e77ba3b2bd 100644
--- a/Applications/VisualBuilder/VBWidget.cpp
+++ b/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();
}
diff --git a/Applications/VisualBuilder/VBWidget.h b/Applications/VisualBuilder/VBWidget.h
index 561057d647..1bcf5755d2 100644
--- a/Applications/VisualBuilder/VBWidget.h
+++ b/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&)>);
diff --git a/Applications/VisualBuilder/VBWidgetRegistry.cpp b/Applications/VisualBuilder/VBWidgetRegistry.cpp
index 1251212275..8ce03439ca 100644
--- a/Applications/VisualBuilder/VBWidgetRegistry.cpp
+++ b/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;
}
diff --git a/LibGUI/GProgressBar.h b/LibGUI/GProgressBar.h
index c5ef4d7701..c3f0dd671b 100644
--- a/LibGUI/GProgressBar.h
+++ b/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; }
diff --git a/LibGUI/GSpinBox.h b/LibGUI/GSpinBox.h
index 67b2e6d116..a8e5d79a1e 100644
--- a/LibGUI/GSpinBox.h
+++ b/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;