diff --git a/samples/src/sample/atriasoft/ewol/simpleWindowsWithCheckBox/MainWindows.java b/samples/src/sample/atriasoft/ewol/simpleWindowsWithCheckBox/MainWindows.java index 135ce7a..8b0f4f5 100644 --- a/samples/src/sample/atriasoft/ewol/simpleWindowsWithCheckBox/MainWindows.java +++ b/samples/src/sample/atriasoft/ewol/simpleWindowsWithCheckBox/MainWindows.java @@ -13,7 +13,7 @@ public class MainWindows extends BasicWindows { //! [ewol_sample_HW_windows_title] setPropertyTitle("Simple CheckBox"); - this.testWidget = new CheckBox(); + this.testWidget = new CheckBox("Hello, how Are You?
second-life?"); //this.testWidget.setPropertySource(new Uri("DATA", "mireA.png")); this.testWidget.setPropertyExpand(Vector3b.TRUE); this.testWidget.setPropertyFill(Vector3b.TRUE); diff --git a/src/org/atriasoft/ewol/widget/CheckBox.java b/src/org/atriasoft/ewol/widget/CheckBox.java index 3a32a9e..e7ee581 100644 --- a/src/org/atriasoft/ewol/widget/CheckBox.java +++ b/src/org/atriasoft/ewol/widget/CheckBox.java @@ -1,29 +1,100 @@ package org.atriasoft.ewol.widget; +import org.atriasoft.esignal.Signal; +import org.atriasoft.esignal.SignalEmpty; import org.atriasoft.etk.math.Vector3b; import org.atriasoft.ewol.Gravity; +import org.atriasoft.ewol.annotation.EwolDescription; +import org.atriasoft.ewol.annotation.EwolSignal; import org.atriasoft.ewol.widget.Sizer.DisplayMode; +import org.atriasoft.exml.annotation.XmlAttribute; +import org.atriasoft.exml.annotation.XmlManaged; +import org.atriasoft.exml.annotation.XmlName; public class CheckBox extends Container { + protected static void eventLabelClick(final CheckBox self) { + self.tick.setPropertyValue(!self.tick.getPropertyValue()); + self.signalClick.emit(); + } + + protected static void eventTickClick(final CheckBox self) { + self.signalClick.emit(); + } + + protected static void eventTickDown(final CheckBox self) { + self.signalDown.emit(); + } + + protected static void eventTickUp(final CheckBox self) { + self.signalUp.emit(); + } + + protected static void eventTickValue(final CheckBox self, final Boolean value) { + self.signalValue.emit(value); + } + + @EwolSignal(name = "down", description = "CheckBox is Down") + public SignalEmpty signalDown = new SignalEmpty(); + @EwolSignal(name = "up", description = "CheckBox is Up") + public SignalEmpty signalUp = new SignalEmpty(); + @EwolSignal(name = "click", description = "CheckBox is Clicked") + public SignalEmpty signalClick = new SignalEmpty(); + @EwolSignal(name = "value", description = "CheckBox value change") + public Signal signalValue = new Signal<>(); + final Tick tick; + final Label label; + public CheckBox() { + this("No Label"); + } + + public CheckBox(final String basicLabel) { final Sizer subs = new Sizer(DisplayMode.modeHori); subs.setPropertyLockExpand(Vector3b.TRUE); subs.setPropertyGravity(Gravity.CENTER); setSubWidget(subs); - final Tick tick = new Tick(); - tick.setPropertyExpand(new Vector3b(false, true, true)); - tick.setPropertyFill(Vector3b.FALSE); - tick.setPropertyGravity(Gravity.CENTER); - subs.subWidgetAdd(tick); - - final Label label = new Label("No Label"); - label.setPropertyExpand(Vector3b.TRUE); - label.setPropertyFill(Vector3b.FALSE); - label.setPropertyGravity(Gravity.LEFT); - subs.subWidgetAdd(label); + this.tick = new Tick(); + this.tick.setPropertyExpand(new Vector3b(false, true, true)); + this.tick.setPropertyFill(Vector3b.FALSE); + this.tick.setPropertyGravity(Gravity.CENTER); + subs.subWidgetAdd(this.tick); + this.tick.signalClick.connectAuto(this, CheckBox::eventTickClick); + this.tick.signalUp.connectAuto(this, CheckBox::eventTickUp); + this.tick.signalDown.connectAuto(this, CheckBox::eventTickDown); + this.tick.signalValue.connectAuto(this, CheckBox::eventTickValue); + this.label = new Label(basicLabel); + this.label.setPropertyExpand(Vector3b.TRUE); + this.label.setPropertyFill(Vector3b.FALSE); + this.label.setPropertyGravity(Gravity.LEFT); + subs.subWidgetAdd(this.label); + this.label.signalPressed.connectAuto(this, CheckBox::eventLabelClick); + } + + @XmlManaged + @XmlAttribute + @XmlName(value = "label") + @EwolDescription(value = "value of the label") + public String getPropertyLabel() { + return this.label.getPropertyValue(); + } + + @XmlManaged + @XmlAttribute + @XmlName(value = "value") + @EwolDescription(value = "State of the checkbox") + public Boolean getPropertyValue() { + return this.tick.getPropertyValue(); + } + + public void setPropertyLabel(final String value) { + this.label.setPropertyValue(value); + } + + public void setPropertyValue(final Boolean value) { + this.tick.setPropertyValue(value); } } diff --git a/src/org/atriasoft/ewol/widget/Tick.java b/src/org/atriasoft/ewol/widget/Tick.java index de3666b..2123308 100644 --- a/src/org/atriasoft/ewol/widget/Tick.java +++ b/src/org/atriasoft/ewol/widget/Tick.java @@ -71,7 +71,7 @@ public class Tick extends Widget { @EwolSignal(name = "click", description = "Tick is Clicked") public SignalEmpty signalClick = new SignalEmpty(); @EwolSignal(name = "value", description = "Tick value change") - public Signal signalValue; + public Signal signalValue = new Signal<>(); // element over: Vector3f overPositionStart = Vector3f.ZERO; Vector3f overPositionStop = Vector3f.ZERO; @@ -305,6 +305,7 @@ public class Tick extends Widget { return; } this.propertyValue = propertyValue; + this.signalValue.emit(this.propertyValue); onChangePropertyValue(); }