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