You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@royale.apache.org by ca...@apache.org on 2020/06/25 10:43:18 UTC
[royale-asjs] branch develop updated: jewel-numericstepper: move
logic to a new controller and remove from view
This is an automated email from the ASF dual-hosted git repository.
carlosrovira pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/royale-asjs.git
The following commit(s) were added to refs/heads/develop by this push:
new ce5f7ed jewel-numericstepper: move logic to a new controller and remove from view
ce5f7ed is described below
commit ce5f7ed59b69a979771a3e57d153a3b35ac869e8
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Thu Jun 25 12:43:05 2020 +0200
jewel-numericstepper: move logic to a new controller and remove from view
---
.../projects/Jewel/src/main/resources/defaults.css | 1 +
.../projects/Jewel/src/main/royale/JewelClasses.as | 1 +
.../beads/controllers/NumericStepperController.as | 148 +++++++++++++++++++++
.../royale/jewel/beads/views/NumericStepperView.as | 98 ++------------
.../src/main/sass/components/_numericstepper.sass | 1 +
5 files changed, 165 insertions(+), 84 deletions(-)
diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css b/frameworks/projects/Jewel/src/main/resources/defaults.css
index 6d160c8..5b3a334 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -3347,6 +3347,7 @@ j|CollapsibleNavigationSectionRenderer {
j|NumericStepper {
IBeadModel: ClassReference("org.apache.royale.jewel.beads.models.RangeModel");
IBeadView: ClassReference("org.apache.royale.jewel.beads.views.NumericStepperView");
+ IBeadController: ClassReference("org.apache.royale.jewel.beads.controllers.NumericStepperController");
}
j|Spinner {
diff --git a/frameworks/projects/Jewel/src/main/royale/JewelClasses.as b/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
index e59e453..f52d769 100644
--- a/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
+++ b/frameworks/projects/Jewel/src/main/royale/JewelClasses.as
@@ -56,6 +56,7 @@ package
import org.apache.royale.jewel.beads.controllers.VirtualListKeyDownController; VirtualListKeyDownController;
import org.apache.royale.jewel.beads.controllers.TableCellSelectionMouseController; TableCellSelectionMouseController;
import org.apache.royale.jewel.beads.controllers.ComboBoxController; ComboBoxController;
+ import org.apache.royale.jewel.beads.controllers.NumericStepperController; NumericStepperController;
import org.apache.royale.jewel.beads.controllers.SnackbarController; SnackbarController;
import org.apache.royale.jewel.beads.controllers.DropDownListController; DropDownListController;
import org.apache.royale.jewel.beads.controllers.WizardController; WizardController;
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/NumericStepperController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/NumericStepperController.as
new file mode 100644
index 0000000..48dbf1b
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/NumericStepperController.as
@@ -0,0 +1,148 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+// Licensed to the Apache Software Foundation (ASF) under one or more
+// contributor license agreements. See the NOTICE file distributed with
+// this work for additional information regarding copyright ownership.
+// The ASF licenses this file to You under the Apache License, Version 2.0
+// (the "License"); you may not use this file except in compliance with
+// the License. You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+//
+////////////////////////////////////////////////////////////////////////////////
+package org.apache.royale.jewel.beads.controllers
+{
+ import org.apache.royale.core.Bead;
+ import org.apache.royale.core.IBeadController;
+ import org.apache.royale.core.IRangeModel;
+ import org.apache.royale.core.IStrand;
+ import org.apache.royale.core.UIBase;
+ import org.apache.royale.events.Event;
+ import org.apache.royale.events.ValueChangeEvent;
+ import org.apache.royale.jewel.Spinner;
+ import org.apache.royale.jewel.TextInput;
+ import org.apache.royale.jewel.beads.views.NumericStepperView;
+ import org.apache.royale.utils.sendStrandEvent;
+
+ /**
+ * The NumericStepperController class is responsible for listening to
+ * mouse event related to NumericStepper.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.10.0
+ */
+ public class NumericStepperController extends Bead implements IBeadController
+ {
+ /**
+ * constructor.
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.10.0
+ */
+ public function NumericStepperController()
+ {
+ }
+
+ private var view:NumericStepperView;
+ private var input:TextInput;
+ private var spinner:Spinner;
+
+ /**
+ * @copy org.apache.royale.core.IBead#strand
+ *
+ * @langversion 3.0
+ * @playerversion Flash 10.2
+ * @playerversion AIR 2.6
+ * @productversion Royale 0.10.0
+ * @royaleignorecoercion org.apache.royale.jewel.beads.views.NumericStepperView
+ */
+ override public function set strand(value:IStrand):void
+ {
+ super.strand = value;
+
+ view = _strand.getBeadByType(NumericStepperView) as NumericStepperView;
+ if (view) {
+ finishSetup();
+ } else {
+ listenOnStrand("viewChanged", finishSetup);
+ }
+ }
+
+ /**
+ * @private
+ */
+ protected function finishSetup(event:Event = null):void
+ {
+ input = view.input;
+ spinner = view.spinner;
+
+ // listen for changes to the text input field which will reset the
+ // value. ideally, we should either set the input to accept only
+ // numeric values or, barring that, reject non-numeric entries. we
+ // cannot do that right now however.
+ input.addEventListener(Event.CHANGE, inputChangeHandler);
+
+ // listen for change events on the spinner so the value can be updated as
+ // as resizing the component
+ spinner.addEventListener("valueChange",spinnerValueChanged);
+
+ // listen for changes and update the UI accordingly
+ listenOnStrand("valueChange",modelChangeHandler);
+ listenOnStrand("minimumChange",modelChangeHandler);
+ listenOnStrand("maximumChange",modelChangeHandler);
+ listenOnStrand("stepSizeChange",modelChangeHandler);
+ listenOnStrand("snapIntervalChange",modelChangeHandler);
+ }
+
+ /**
+ * @private
+ * @royaleignorecoercion org.apache.royale.core.UIBase
+ * @royaleignorecoercion org.apache.royale.core.IRangeModel
+ */
+ private function modelChangeHandler(event:Event):void
+ {
+ input.text = String(IRangeModel(UIBase(_strand).model).value);
+ }
+
+ /**
+ * @private
+ */
+ private function inputChangeHandler(event:Event):void
+ {
+ var newValue:Number = Number(input.text);
+
+ if( !isNaN(newValue) ) {
+ var oldValue:Number = spinner.value;
+ spinner.value = newValue;
+ if (oldValue != spinner.value) {
+ var newEvent:ValueChangeEvent = ValueChangeEvent.createUpdateEvent(_strand, "value", oldValue, spinner.value);
+ sendStrandEvent(_strand, newEvent);
+ }
+ }
+ else {
+ input.text = String(spinner.value);
+ }
+ }
+
+ /**
+ * @private
+ */
+ private function spinnerValueChanged(event:ValueChangeEvent):void
+ {
+ input.text = "" + spinner.value;
+
+ var newEvent:ValueChangeEvent = ValueChangeEvent.createUpdateEvent(_strand, "value", event.oldValue, event.newValue);
+ sendStrandEvent(_strand, newEvent);
+ }
+ }
+}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/NumericStepperView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/NumericStepperView.as
index cff68e6..d2fe531 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/NumericStepperView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/NumericStepperView.as
@@ -20,21 +20,16 @@ package org.apache.royale.jewel.beads.views
{
import org.apache.royale.core.BeadViewBase;
import org.apache.royale.core.IBead;
- import org.apache.royale.core.IBeadView;
+ import org.apache.royale.core.IChild;
import org.apache.royale.core.ILayoutChild;
import org.apache.royale.core.IParent;
import org.apache.royale.core.IParentIUIBase;
- import org.apache.royale.core.IRangeModel;
import org.apache.royale.core.IStrand;
import org.apache.royale.core.IUIBase;
import org.apache.royale.core.UIBase;
- import org.apache.royale.events.Event;
- import org.apache.royale.events.IEventDispatcher;
- import org.apache.royale.events.ValueChangeEvent;
import org.apache.royale.jewel.Label;
import org.apache.royale.jewel.Spinner;
import org.apache.royale.jewel.TextInput;
- import org.apache.royale.core.IChild;
/**
* The NumericStepperView class creates the visual elements of the
@@ -47,7 +42,7 @@ package org.apache.royale.jewel.beads.views
* @playerversion AIR 2.6
* @productversion Royale 0.9.4
*/
- public class NumericStepperView extends BeadViewBase implements IBeadView
+ public class NumericStepperView extends BeadViewBase
{
/**
* constructor.
@@ -62,8 +57,8 @@ package org.apache.royale.jewel.beads.views
}
private var label:Label;
- private var input:TextInput;
- private var spinner:Spinner;
+ public var input:TextInput;
+ public var spinner:Spinner;
/**
* @copy org.apache.royale.core.IBead#strand
@@ -87,47 +82,27 @@ package org.apache.royale.jewel.beads.views
// add a spinner
spinner = new Spinner();
- spinner.addBead( (value as UIBase).model as IBead);
+ spinner.addBead((value as UIBase).model as IBead);
(value as IParent).addElement(spinner);
+
// now we parent the spinner buttons to the numeric stepper
// we'll be using flex box column layout with wrapping to get the buttons to the right side
// on phones and tablets, we want to reorder elements (again flexbox) and position :
// button down + text input + button up
- var spinnerview:SpinnerView = spinner.getBeadByType(IBeadView) as SpinnerView;
+ var spinnerview:SpinnerView = spinner.getBeadByType(SpinnerView) as SpinnerView;
(value as IParent).addElement(spinnerview.increment as IChild);
(value as IParent).addElement(spinnerview.decrement as IChild);
+ input.text = String(spinner.value);
+
+ initSize();
+
// delay this until the resize event in JS
COMPILE::SWF
{
spinner.height = input.height;
spinner.width = input.height/2;
- }
-
- // listen for changes to the text input field which will reset the
- // value. ideally, we should either set the input to accept only
- // numeric values or, barring that, reject non-numeric entries. we
- // cannot do that right now however.
- input.addEventListener(Event.CHANGE,inputChangeHandler);
-
- // listen for change events on the spinner so the value can be updated as
- // as resizing the component
- spinner.addEventListener("valueChange",spinnerValueChanged);
- // IEventDispatcher(value).addEventListener("widthChanged",sizeChangeHandler);
- // IEventDispatcher(value).addEventListener("heightChanged",sizeChangeHandler);
- // IEventDispatcher(value).addEventListener("sizeChanged",sizeChangeHandler);
-
- // listen for changes to the model itself and update the UI accordingly
- IEventDispatcher(UIBase(value).model).addEventListener("valueChange",modelChangeHandler);
- IEventDispatcher(UIBase(value).model).addEventListener("minimumChange",modelChangeHandler);
- IEventDispatcher(UIBase(value).model).addEventListener("maximumChange",modelChangeHandler);
- IEventDispatcher(UIBase(value).model).addEventListener("stepSizeChange",modelChangeHandler);
- IEventDispatcher(UIBase(value).model).addEventListener("snapIntervalChange",modelChangeHandler);
-
- input.text = String(spinner.value);
-
- // COMPILE::SWF
- // {
+
// var host:ILayoutChild = ILayoutChild(value);
// // Complete the setup if the height is sized to content or has been explicitly set
@@ -135,12 +110,9 @@ package org.apache.royale.jewel.beads.views
// if ((host.isHeightSizedToContent() || !isNaN(host.explicitHeight)) &&
// (host.isWidthSizedToContent() || !isNaN(host.explicitWidth)))
// sizeChangeHandler(null);
- // }
-
- initSize();
-
// always run size change since there are no size change events
// sizeChangeHandler(null);
+ }
}
public static const DEFAULT_BUTTON_WIDTH:Number = 38;
@@ -168,6 +140,7 @@ package org.apache.royale.jewel.beads.views
* @private
* @royaleignorecoercion org.apache.royale.core.UIBase
*/
+ // COMPILE::SWF
// private function sizeChangeHandler(event:Event) : void
// {
// // first reads
@@ -194,49 +167,6 @@ package org.apache.royale.jewel.beads.views
// }
/**
- * @private
- * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
- */
- private function spinnerValueChanged(event:ValueChangeEvent) : void
- {
- input.text = "" + spinner.value;
-
- var newEvent:ValueChangeEvent = ValueChangeEvent.createUpdateEvent(_strand, "value", event.oldValue, event.newValue);
- IEventDispatcher(_strand).dispatchEvent(newEvent);
- }
-
- /**
- * @private
- */
- private function inputChangeHandler(event:Event) : void
- {
- var newValue:Number = Number(input.text);
-
- if( !isNaN(newValue) ) {
- var oldValue:Number = spinner.value;
- spinner.value = newValue;
- if (oldValue != spinner.value) {
- var newEvent:ValueChangeEvent = ValueChangeEvent.createUpdateEvent(_strand, "value", oldValue, spinner.value);
- IEventDispatcher(_strand).dispatchEvent(newEvent);
- }
- }
- else {
- input.text = String(spinner.value);
- }
- }
-
- /**
- * @private
- * @royaleignorecoercion org.apache.royale.core.UIBase
- * @royaleignorecoercion org.apache.royale.core.IRangeModel
- */
- private function modelChangeHandler( event:Event ) : void
- {
- var n:Number = IRangeModel(UIBase(_strand).model).value;
- input.text = String(IRangeModel(UIBase(_strand).model).value);
- }
-
- /**
* The area containing the TextInput and Spinner controls.
*
* @langversion 3.0
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_numericstepper.sass b/frameworks/projects/Jewel/src/main/sass/components/_numericstepper.sass
index e75a118..59a68ba 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_numericstepper.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_numericstepper.sass
@@ -60,6 +60,7 @@
j|NumericStepper
IBeadModel: ClassReference("org.apache.royale.jewel.beads.models.RangeModel")
IBeadView: ClassReference("org.apache.royale.jewel.beads.views.NumericStepperView")
+ IBeadController: ClassReference("org.apache.royale.jewel.beads.controllers.NumericStepperController")
@media -royale-swf
j|NumericStepper