Add Option element and fix Select's Value
This commit is contained in:
parent
296a72ce48
commit
cfdad03e1c
10
Ooui/Node.cs
10
Ooui/Node.cs
|
@ -74,6 +74,7 @@ namespace Ooui
|
||||||
}
|
}
|
||||||
newChild.MessageSent += HandleChildMessageSent;
|
newChild.MessageSent += HandleChildMessageSent;
|
||||||
SendCall ("insertBefore", newChild, referenceChild);
|
SendCall ("insertBefore", newChild, referenceChild);
|
||||||
|
OnChildInsertedBefore (newChild, referenceChild);
|
||||||
return newChild;
|
return newChild;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -88,9 +89,18 @@ namespace Ooui
|
||||||
}
|
}
|
||||||
child.MessageSent -= HandleChildMessageSent;
|
child.MessageSent -= HandleChildMessageSent;
|
||||||
SendCall ("removeChild", child);
|
SendCall ("removeChild", child);
|
||||||
|
OnChildRemoved (child);
|
||||||
return child;
|
return child;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected virtual void OnChildInsertedBefore (Node newChild, Node referenceChild)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
protected virtual void OnChildRemoved (Node child)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
protected void ReplaceAll (Node newNode)
|
protected void ReplaceAll (Node newNode)
|
||||||
{
|
{
|
||||||
var toRemove = new List<Node> ();
|
var toRemove = new List<Node> ();
|
||||||
|
|
|
@ -0,0 +1,30 @@
|
||||||
|
using System;
|
||||||
|
|
||||||
|
namespace Ooui
|
||||||
|
{
|
||||||
|
public class Option : Element
|
||||||
|
{
|
||||||
|
string val = "";
|
||||||
|
public string Value {
|
||||||
|
get => val;
|
||||||
|
set => SetProperty (ref val, value ?? "", "value");
|
||||||
|
}
|
||||||
|
|
||||||
|
string label = "";
|
||||||
|
public string Label {
|
||||||
|
get => label;
|
||||||
|
set => SetProperty (ref label, value ?? "", "label");
|
||||||
|
}
|
||||||
|
|
||||||
|
bool defaultSelected = false;
|
||||||
|
public bool DefaultSelected {
|
||||||
|
get => defaultSelected;
|
||||||
|
set => SetProperty (ref defaultSelected, value, "defaultSelected");
|
||||||
|
}
|
||||||
|
|
||||||
|
public Option ()
|
||||||
|
: base ("option")
|
||||||
|
{
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
|
@ -15,9 +15,37 @@ namespace Ooui
|
||||||
remove => RemoveEventListener ("change", value);
|
remove => RemoveEventListener ("change", value);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public event TargetEventHandler Inputted {
|
||||||
|
add => AddEventListener ("input", value);
|
||||||
|
remove => RemoveEventListener ("input", value);
|
||||||
|
}
|
||||||
|
|
||||||
public Select ()
|
public Select ()
|
||||||
: base ("select")
|
: base ("select")
|
||||||
{
|
{
|
||||||
|
// Subscribe to the change event so we always get up-to-date values
|
||||||
|
Changed += (s, e) => { };
|
||||||
|
}
|
||||||
|
|
||||||
|
public void AddOption (string label, string value)
|
||||||
|
{
|
||||||
|
AppendChild (new Option { Label = label, Value = value });
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override void OnChildInsertedBefore (Node newChild, Node referenceChild)
|
||||||
|
{
|
||||||
|
base.OnChildInsertedBefore (newChild, referenceChild);
|
||||||
|
if (string.IsNullOrEmpty (val) && newChild is Option o && !string.IsNullOrEmpty (o.Value)) {
|
||||||
|
val = o.Value;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
protected override bool TriggerEventFromMessage (Message message)
|
||||||
|
{
|
||||||
|
if (message.TargetId == Id && message.MessageType == MessageType.Event && (message.Key == "change" || message.Key == "input")) {
|
||||||
|
val = message.Value != null ? Convert.ToString (message.Value) : "";
|
||||||
|
}
|
||||||
|
return base.TriggerEventFromMessage (message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue