2
0
Michael Ragazzon 5 жил өмнө
parent
commit
463cc5632a

+ 2 - 15
Samples/basic/databinding/data/databinding.rml

@@ -181,7 +181,7 @@ form h2
 	<p class="title" style="margin-top: 1.8em;">{{hello_world}}<span style="color: blue;"> Rated: {{rating}}</span></p>
 	<p>Data binding demo. We rate this a good old {{rating}}!</p>
 	<input type="range" name="rating" min="0" max="100" step="1" value="50" data-value="rating"/>
-	<div data-if="rating > 50">Thanks for the <span data-if="rating < 80">good</span><span data-if="rating >= 80">awesome</span> rating!</div>
+	<div data-visible="rating > 50">Thanks for the <span data-if="rating < 80">good</span><span data-if="rating >= 80">awesome</span> rating!</div>
 	<div class="mouse_detector" style="height: 70px;"
 		data-event-mousemove="mouse_detector = 'x: ' + ev.mouse_x + '<br/>y: ' + ev.mouse_y"
 		data-event-click="add_mouse_pos(); hello_world = 'Hello click!'"
@@ -223,22 +223,9 @@ form h2
 	</div>
 	<h1 data-if="invaders.size == 0">It's all safe and sound, sir!</h1>
 </panel>
-<tab>Decorators</tab>
-<panel id="decorators">
-	<h1>Gradient decorator</h1>
-	<p>The 'gradient' decorator renders a color gradient in the vertical or horizontal direction.</p>
-	<div class="center">
-		<button class="gradient">Gradient</button>
-		<button class="gradient horizontal">Gradient</button>
-	</div>
-</panel>
-<tab>Font effects</tab>
-<panel id="font_effects">
-	<h1>None</h1>
-	<div class="original">RmlUi 😍</div>
-</panel>
 <tab>Forms</tab>
 <panel id="controls">
+	<h1>Todo</h1>
 	<form onsubmit="submit_form">
 		<h2>Full name</h2>
 		<div>

+ 24 - 0
Source/Core/DataViewDefault.cpp

@@ -206,7 +206,31 @@ bool DataViewIf::Update(DataModel& model)
 }
 
 
+DataViewVisible::DataViewVisible(Element* element) : DataViewCommon(element)
+{}
 
+bool DataViewVisible::Update(DataModel& model)
+{
+	bool result = false;
+	Variant variant;
+	Element* element = GetElement();
+	DataExpressionInterface interface(&model, element);
+
+	if (element && GetExpression().Run(interface, variant))
+	{
+		const bool value = variant.Get<bool>();
+		const bool is_visible = (element->GetLocalStyleProperties().count(PropertyId::Visibility) == 0);
+		if (is_visible != value)
+		{
+			if (value)
+				element->RemoveProperty(PropertyId::Visibility);
+			else
+				element->SetProperty(PropertyId::Visibility, Property(Style::Visibility::Hidden));
+			result = true;
+		}
+	}
+	return result;
+}
 
 
 DataViewText::DataViewText(Element* element) : DataView(element)

+ 8 - 0
Source/Core/DataViewDefault.h

@@ -112,6 +112,14 @@ public:
 };
 
 
+class DataViewVisible final : public DataViewCommon {
+public:
+	DataViewVisible(Element* element);
+
+	bool Update(DataModel& model) override;
+};
+
+
 class DataViewText final : public DataView {
 public:
 	DataViewText(Element* in_element);

+ 12 - 9
Source/Core/Factory.cpp

@@ -126,15 +126,17 @@ struct DefaultInstancers {
 	Ptr<DataViewInstancer> data_view_attribute = std::make_unique<DataViewInstancerDefault< DataViewAttribute >>();
 	Ptr<DataViewInstancer> data_view_class     = std::make_unique<DataViewInstancerDefault< DataViewClass >>();
 	Ptr<DataViewInstancer> data_view_if        = std::make_unique<DataViewInstancerDefault< DataViewIf >>();
+	Ptr<DataViewInstancer> data_view_visible   = std::make_unique<DataViewInstancerDefault< DataViewVisible >>();
 	Ptr<DataViewInstancer> data_view_rml       = std::make_unique<DataViewInstancerDefault< DataViewRml >>();
 	Ptr<DataViewInstancer> data_view_style     = std::make_unique<DataViewInstancerDefault< DataViewStyle >>();
 	Ptr<DataViewInstancer> data_view_text      = std::make_unique<DataViewInstancerDefault< DataViewText >>();
 	Ptr<DataViewInstancer> data_view_value     = std::make_unique<DataViewInstancerDefault< DataViewValue >>();
 
+	Ptr<DataViewInstancer> structural_data_view_for = std::make_unique<DataViewInstancerDefault< DataViewFor >>();
+
 	Ptr<DataControllerInstancer> data_controller_value = std::make_unique<DataControllerInstancerDefault< DataControllerValue >>();
 	Ptr<DataControllerInstancer> data_controller_event = std::make_unique<DataControllerInstancerDefault< DataControllerEvent >>();
 
-	Ptr<DataViewInstancer> structural_data_view_for = std::make_unique<DataViewInstancerDefault< DataViewFor >>();
 };
 
 static UniquePtr<DefaultInstancers> default_instancers;
@@ -198,18 +200,19 @@ bool Factory::Initialise()
 	XMLParser::RegisterNodeHandler("template", std::make_shared<XMLNodeHandlerTemplate>());
 
 	// Register the default data views
-	RegisterDataViewInstancer(default_instancers->data_view_attribute.get(), "attr", false);
-	RegisterDataViewInstancer(default_instancers->data_view_class.get(),     "class", false);
-	RegisterDataViewInstancer(default_instancers->data_view_if.get(),        "if", false);
-	RegisterDataViewInstancer(default_instancers->data_view_rml.get(),       "rml", false);
-	RegisterDataViewInstancer(default_instancers->data_view_style.get(),     "style", false);
-	RegisterDataViewInstancer(default_instancers->data_view_text.get(),      "text", false);
-	RegisterDataViewInstancer(default_instancers->data_view_value.get(),     "value", false);
+	RegisterDataViewInstancer(default_instancers->data_view_attribute.get(), "attr",     false);
+	RegisterDataViewInstancer(default_instancers->data_view_class.get(),     "class",    false);
+	RegisterDataViewInstancer(default_instancers->data_view_if.get(),        "if",       false);
+	RegisterDataViewInstancer(default_instancers->data_view_visible.get(),   "visible",  false);
+	RegisterDataViewInstancer(default_instancers->data_view_rml.get(),       "rml",      false);
+	RegisterDataViewInstancer(default_instancers->data_view_style.get(),     "style",    false);
+	RegisterDataViewInstancer(default_instancers->data_view_text.get(),      "text",     false);
+	RegisterDataViewInstancer(default_instancers->data_view_value.get(),     "value",    false);
+	RegisterDataViewInstancer(default_instancers->structural_data_view_for.get(), "for", true );
 
 	RegisterDataControllerInstancer(default_instancers->data_controller_value.get(), "value");
 	RegisterDataControllerInstancer(default_instancers->data_controller_event.get(), "event");
 
-	RegisterDataViewInstancer(default_instancers->structural_data_view_for.get(), "for", true);
 
 	return true;
 }