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 2018/08/17 08:55:45 UTC

[royale-asjs] branch develop updated: final touches to make table cell selection work

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 3ae50e0  final touches to make table cell selection work
3ae50e0 is described below

commit 3ae50e01dbbfbead76fbb218e2b92eca87956fb9
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Fri Aug 17 10:55:40 2018 +0200

    final touches to make table cell selection work
---
 .../src/main/royale/TablePlayGround.mxml           |  2 +-
 .../projects/Jewel/src/main/resources/defaults.css |  5 +-
 .../main/royale/org/apache/royale/jewel/Table.as   | 23 ++++++++
 .../controllers/DateChooserMouseController.as      |  3 +-
 .../TableCellSelectionMouseController.as           | 12 ++---
 .../TableItemRendererFactoryForCollectionView.as   |  3 +-
 .../royale/jewel/beads/models/DateChooserModel.as  |  1 -
 .../apache/royale/jewel/beads/models/TableModel.as | 62 +++++++++++++++++++++-
 .../royale/jewel/beads/views/DateChooserView.as    |  3 --
 .../apache/royale/jewel/beads/views/TableView.as   |  4 +-
 .../royale/jewel/itemRenderers/DateItemRenderer.as |  2 +-
 .../jewel/supportClasses/table/TBodyContentArea.as | 28 ++++++++--
 .../src/main/sass/components/_datechooser.sass     |  2 +-
 .../Jewel/src/main/sass/components/_table.sass     |  3 ++
 14 files changed, 123 insertions(+), 30 deletions(-)

diff --git a/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml b/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml
index d367956..50b7043 100644
--- a/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml
+++ b/examples/royale/JewelExample/src/main/royale/TablePlayGround.mxml
@@ -198,7 +198,7 @@ limitations under the License.
 			import org.apache.royale.collections.ArrayList;
 
 			private function onChange(event:Event):void {
-                selected.text = "Selected: " + table.model.selectedCellItem;
+                selected.text = "Selected: " + table.model.selectedItemProperty;
             }
 
 			private function clearTable():void
diff --git a/frameworks/projects/Jewel/src/main/resources/defaults.css b/frameworks/projects/Jewel/src/main/resources/defaults.css
index 804fb20..bea4d1a 100644
--- a/frameworks/projects/Jewel/src/main/resources/defaults.css
+++ b/frameworks/projects/Jewel/src/main/resources/defaults.css
@@ -250,7 +250,7 @@ j|ControlBar {
   padding: 0px;
 }
 .jewel.datechooser .jewel.table td {
-  padding: 0px;
+  padding: 2px;
 }
 
 .calendar.item {
@@ -2878,6 +2878,9 @@ j|Table {
   line-height: normal !important;
   overflow: hidden;
 }
+.jewel.tableitem.calendar {
+  border-radius: 10%;
+}
 
 .empty-cell {
   pointer-events: none;
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Table.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Table.as
index d78ceca..4b2f48e 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Table.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/Table.as
@@ -227,6 +227,29 @@ package org.apache.royale.jewel
 		}
 
 		/**
+		 *  The item property currently selected. Changing this value also
+		 *  changes the selectedIndex property.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.3
+		 *  @royaleignorecoercion org.apache.royale.core.ISelectionModel
+		 */
+		[Bindable("change")]
+		public function get selectedItemProperty():Object
+		{
+			return TableModel(model).selectedItemProperty;
+		}
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.ISelectionModel
+		 */
+		public function set selectedItemProperty(value:Object):void
+		{
+			TableModel(model).selectedItemProperty = value;
+		}
+
+		/**
          * @royaleignorecoercion org.apache.royale.core.WrappedHTMLElement
          */
         COMPILE::JS
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DateChooserMouseController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DateChooserMouseController.as
index 4198565..20ae861 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DateChooserMouseController.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/DateChooserMouseController.as
@@ -81,8 +81,7 @@ package org.apache.royale.jewel.beads.controllers
         private function tableHandler(event:Event):void
         {
             var table:DateChooserTable = event.target as DateChooserTable;
-            model.selectedDate = table.selectedItem[table.model.labelField] as Date;
-			trace("tableHandler - model.selectedDate: " + model.selectedDate);
+            model.selectedDate = table.selectedItemProperty as Date;
         }
 
 		/**
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/TableCellSelectionMouseController.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/TableCellSelectionMouseController.as
index 4d875c9..a20f5f0 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/TableCellSelectionMouseController.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controllers/TableCellSelectionMouseController.as
@@ -137,19 +137,13 @@ package org.apache.royale.jewel.beads.controllers
 		
 		protected function selectedHandler(event:ItemClickedEvent):void
         {
-            trace("selectedHandler");
             var renderer:DataItemRenderer = event.currentTarget as DataItemRenderer;
-			// if (renderer) {
-			// 	trace(renderer.rowIndex + ", " + renderer.columnIndex + " :: " + renderer.dataField + ", " + renderer.labelField);
-			// }
+			
             model.labelField = renderer.labelField;
-			//event.data[model.labelField];
-            trace("model.labelField: " + model.labelField);
-            model.selectedIndex = event.index;
-            trace("model.selectedIndex: " + model.selectedIndex);
 			model.selectedItem = event.data;
+            (model as TableModel).selectedItemProperty = model.selectedItem[model.labelField];
+            model.selectedIndex = (model as TableModel).getIndexForSelectedProperty();
 
-            trace("model.selectedItem: " + model.selectedItem);
             view.host.dispatchEvent(new Event("change"));
         }
 		
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/TableItemRendererFactoryForCollectionView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/TableItemRendererFactoryForCollectionView.as
index b9c9067..c2c0acc 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/TableItemRendererFactoryForCollectionView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/itemRenderers/TableItemRendererFactoryForCollectionView.as
@@ -215,8 +215,7 @@ package org.apache.royale.jewel.beads.itemRenderers
 					labelField =  column.dataField;
                     var item:Object = dp.getItemAt(i);
 
-                    // ir.labelField = labelField;
-                    //(ir as DataItemRenderer).dataField = labelField;
+                    (ir as DataItemRenderer).dataField = labelField;
 					(ir as DataItemRenderer).rowIndex = i;
 					(ir as DataItemRenderer).columnIndex = j;
                     fillRenderer(index++, item, (ir as ISelectableItemRenderer), presentationModel);
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DateChooserModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DateChooserModel.as
index 5d937be..b9219bd 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DateChooserModel.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/DateChooserModel.as
@@ -274,7 +274,6 @@ package org.apache.royale.jewel.beads.models
 				
 				if (test && test.toDateString() == str)
 				{
-					trace("getIndexForSelectedDate, index: " + i);
 					return i;
 				}
             }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/TableModel.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/TableModel.as
index 922b1e5..e9a7327 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/TableModel.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/models/TableModel.as
@@ -18,8 +18,9 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.models
 {
+	import org.apache.royale.events.Event;
 	import org.apache.royale.jewel.beads.models.ArrayListSelectionModel;
-	import org.apache.royale.html.supportClasses.DataItemRenderer;
+	import org.apache.royale.jewel.supportClasses.table.TableColumn;
 	
 	public class TableModel extends ArrayListSelectionModel
 	{
@@ -37,5 +38,64 @@ package org.apache.royale.jewel.beads.models
 		{
 			_columns = value;
 		}
+
+		private var _selectedItemProperty:Object;
+
+        /**
+         *  @copy org.apache.royale.core.ISelectionModel#selectedItem
+         *
+         *  @langversion 3.0
+         *  @playerversion Flash 10.2
+         *  @playerversion AIR 2.6
+         *  @productversion Royale 0.9.3
+         */
+		public function get selectedItemProperty():Object
+		{
+			return _selectedItemProperty;
+		}
+
+        /**
+         *  @private
+         */
+		public function set selectedItemProperty(value:Object):void
+		{
+			if(labelField == null || labelField == "") return;
+            if (value == _selectedItemProperty) return;
+
+			_selectedItemProperty = value;
+			var n:int = dataProvider.length;
+			for (var i:int = 0; i < n; i++)
+			{
+				if (dataProvider.getItemAt(i)[labelField] == value)
+				{
+					selectedIndex = i;
+					break;
+				}
+			}
+			dispatchEvent(new Event("selectedItemPropertyChanged"));
+		}
+
+		/**
+         * @private
+         */
+        public function getIndexForSelectedProperty():Number
+        {
+            if (!selectedItemProperty) return -1;
+
+			var index:int = 0;
+            for(var i:int=0; i < dataProvider.length; i++) {
+				for(var j:int=0; j < _columns.length; j++) {
+					var column:TableColumn = _columns[j] as TableColumn;
+					var test:Object = dataProvider.getItemAt(i)[column.dataField] as Object;
+					
+					if (test === selectedItemProperty)
+					{
+						return index;
+					}
+					index++;
+				}
+            }
+            return -1;
+		}
 	}
 }
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DateChooserView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DateChooserView.as
index ad825c1..f6ac21a 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DateChooserView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DateChooserView.as
@@ -230,7 +230,6 @@ package org.apache.royale.jewel.beads.views
 		 */
 		private function updateDisplay():void
 		{
-			trace("updateDisplay");
 			_monthLabel.text = model.monthNames[model.displayedMonth] + " " + String(model.displayedYear);
 
 			var len:int = columns.length;
@@ -266,7 +265,6 @@ package org.apache.royale.jewel.beads.views
 		 */
 		private function selectionChangeHandler(event:Event):void
 		{
-			trace("DateChooserView - selectionChangeHandler");
 			updateDisplay();
 
 			getHost().dispatchEvent(new Event("selectedDateChanged"));
@@ -278,7 +276,6 @@ package org.apache.royale.jewel.beads.views
 		 */
 		private function handleModelChange(event:Event):void
 		{
-			trace("DateChooserView - handleModelChange");
 			updateDisplay();
 		}
 	}
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TableView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TableView.as
index d8b10af..d640561 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TableView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/TableView.as
@@ -91,7 +91,7 @@ package org.apache.royale.jewel.beads.views
 		 * @royalesuppresspublicvarwarning
 		 */
 		public var tfoot:TFoot;
-		
+
 		/**
 		 * @private
 		 * @royaleignorecoercion org.apache.royale.core.ISelectableItemRenderer
@@ -102,9 +102,7 @@ package org.apache.royale.jewel.beads.views
             if (ir)
 				ir.selected = false;
 			
-			trace("TableView - selectionChangeHandler - listModel.selectedIndex: " + listModel.selectedIndex);
 			ir = dataGroup.getItemRendererForIndex(listModel.selectedIndex) as ISelectableItemRenderer;
-			trace(ir);
 			if (ir)
 				ir.selected = true;
             lastSelectedIndex = listModel.selectedIndex;
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/DateItemRenderer.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/DateItemRenderer.as
index d37b374..2ce88c4 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/DateItemRenderer.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/itemRenderers/DateItemRenderer.as
@@ -45,7 +45,7 @@ package org.apache.royale.jewel.itemRenderers
 		{
 			super();
 
-			// typeNames = "calendar item date";
+			typeNames = "jewel tableitem calendar";
 		}
 
 		/**
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TBodyContentArea.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TBodyContentArea.as
index 2662bcb..f14c067 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TBodyContentArea.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/table/TBodyContentArea.as
@@ -18,7 +18,6 @@
 ////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.supportClasses.table
 {
-    import org.apache.royale.core.IChild;
     import org.apache.royale.core.IItemRenderer;
     import org.apache.royale.core.IItemRendererParent;
 	import org.apache.royale.events.IEventDispatcher;
@@ -90,14 +89,33 @@ package org.apache.royale.jewel.supportClasses.table
 		 */
 		public function addItemRenderer(renderer:IItemRenderer, dispatchAdded:Boolean):void
 		{
+			// this method is not used for now, so it needs to be tested to see if it's correctly implemented
+			var r:DataItemRenderer = renderer as DataItemRenderer;
 			var tableCell:TableCell = new TableCell();
-			tableCell.addElement(renderer);
+			tableCell.addElement(r);
+
+			var row:TableRow;
+			try
+			{
+				row = getElementAt(r.rowIndex) as TableRow;
+				
+				//this if only happens if numElemens == 0, so throw an Error to make a new TableRow in the catch section
+				if(row == null)
+				{
+					row = new TableRow();
+					addElementAt(row, r.rowIndex, false);
+				}
+			}
+			catch (error:Error)
+			{
+				// this is the only way I found to do this when checking getElementAt() for an index that doen't exists.
+				row = new TableRow();
+				addElementAt(row, r.rowIndex, false);
+			}
 
-			var row:TableRow = new TableRow();
 			row.addElement(tableCell, dispatchAdded);
-			addElement(row, false);
 			
-			addElement(renderer, dispatchAdded);
+			itemRenderers.push(r);
 			dispatchItemAdded(renderer);
 		}
 		
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_datechooser.sass b/frameworks/projects/Jewel/src/main/sass/components/_datechooser.sass
index 3ed41a8..369afb8 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_datechooser.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_datechooser.sass
@@ -36,7 +36,7 @@
         tbody
             tr
         td
-            padding: 0px
+            padding: 2px
     
 .calendar
     &.item
diff --git a/frameworks/projects/Jewel/src/main/sass/components/_table.sass b/frameworks/projects/Jewel/src/main/sass/components/_table.sass
index 80b7c87..daaa4da 100644
--- a/frameworks/projects/Jewel/src/main/sass/components/_table.sass
+++ b/frameworks/projects/Jewel/src/main/sass/components/_table.sass
@@ -121,6 +121,9 @@ j|Table
     letter-spacing: 0
     line-height: normal !important
     overflow: hidden
+
+    &.calendar
+        border-radius: 10%
     
 .empty-cell
     pointer-events: none