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 2019/12/12 23:47:38 UTC

[royale-asjs] 37/42: jewel-datagrid: add rollover behaviour to affect all columns lists in the datagrid to show hovered state

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

commit 4448a7bc9498d3507906303ddc046321b33626b5
Author: Carlos Rovira <ca...@apache.org>
AuthorDate: Sat Dec 7 20:54:00 2019 +0100

    jewel-datagrid: add rollover behaviour to affect all columns lists in the datagrid to show hovered state
---
 .../org/apache/royale/core/IDataGridModel.as       |  2 +-
 .../royale/org/apache/royale/jewel/DataGrid.as     | 67 ++++++++++++++++++----
 .../royale/jewel/beads/views/DataGridView.as       | 35 ++++++++---
 .../supportClasses/datagrid/DataGridColumnList.as  |  2 +-
 .../supportClasses/datagrid/IDataGridColumnList.as | 36 ++++++++++++
 5 files changed, 122 insertions(+), 20 deletions(-)

diff --git a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IDataGridModel.as b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IDataGridModel.as
index c66d1d6..4ea8eb5 100644
--- a/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IDataGridModel.as
+++ b/frameworks/projects/Core/src/main/royale/org/apache/royale/core/IDataGridModel.as
@@ -28,7 +28,7 @@ package org.apache.royale.core
      *  @playerversion AIR 2.6
      *  @productversion Royale 0.0
      */
-	public interface IDataGridModel extends ISelectionModel
+	public interface IDataGridModel extends ISelectionModel, IRollOverModel
 	{
         /**
          *  The set of DataGridColumns.
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataGrid.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataGrid.as
index d975d56..43682ea 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataGrid.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/DataGrid.as
@@ -29,9 +29,9 @@ package org.apache.royale.jewel
 	/**
 	 *  The DataGrid class displays a collection of data using columns and rows. Each
 	 *  column represents a specific field in the data set; each row represents a specific
-	 *  datum. The DataGrid is a composite component built with a org.apache.royale.html.ButtonBar 
-	 *  for the column headers and a org.apache.royale.html.List for each column. The DataGrid's 
-	 *  view bead (usually org.apache.royale.html.beads.DataGridView) constructs these parts while 
+	 *  datum. The DataGrid is a composite component built with a org.apache.royale.jewel.ButtonBar 
+	 *  for the column headers and a org.apache.royale.jewel.List for each column. The DataGrid's 
+	 *  view bead (usually org.apache.royale.jewel.beads.views.DataGridView) constructs these parts while 
 	 *  itemRenderer factories contruct the elements to display the data in each cell.
 	 *  
      *  @toplevel
@@ -58,13 +58,13 @@ package org.apache.royale.jewel
 		}
 		
 		/**
-		 *  The array of org.apache.royale.html.supportClasses.DataGridColumns used to 
+		 *  The array of org.apache.royale.jewel.supportClasses.datagrid.DataGridColumn used to 
 		 *  describe each column.
 		 *
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
+		 *  @productversion Royale 0.9.7
 		 *  @royaleignorecoercion org.apache.royale.core.IDataGridModel
 		 */
 		public function get columns():Array
@@ -80,12 +80,12 @@ package org.apache.royale.jewel
 		}
 		
 		/**
-		 *  The object used to provide data to the org.apache.royale.html.DataGrid.
+		 *  The object used to provide data to the org.apache.royale.jewel.DataGrid.
 		 *
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
+		 *  @productversion Royale 0.9.7
 		 *  @royaleignorecoercion org.apache.royale.core.IDataGridModel
 		 */
 		public function get dataProvider():Object
@@ -106,10 +106,10 @@ package org.apache.royale.jewel
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
+		 *  @productversion Royale 0.9.7
 		 *  @royaleignorecoercion org.apache.royale.core.IDataGridModel
 		 */
-		[Bindable("change")]
+		[Bindable("selectionChanged")]
 		public function get selectedIndex():int
 		{
 			return IDataGridModel(model).selectedIndex;
@@ -121,8 +121,53 @@ package org.apache.royale.jewel
 		{
 			IDataGridModel(model).selectedIndex = value;
 		}
+
+		[Bindable("rollOverIndexChanged")]
+		/**
+		 *  The index of the item currently below the pointer.
+		 *
+		 *  @langversion 3.0
+		 *  @playerversion Flash 10.2
+		 *  @playerversion AIR 2.6
+		 *  @productversion Royale 0.9.7
+		 *  @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 */
+        public function get rollOverIndex():int
+		{
+			return IDataGridModel(model).rollOverIndex;
+		}
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 */
+		public function set rollOverIndex(value:int):void
+		{
+			IDataGridModel(model).rollOverIndex = value;
+		}
 		
 		/**
+		 *  The item 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.7
+		 *  @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 */
+        [Bindable("selectionChanged")]
+		public function get selectedItem():Object
+		{
+			return IDataGridModel(model).selectedItem;
+		}
+		/**
+		 * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+		 */
+		public function set selectedItem(value:Object):void
+		{
+			IDataGridModel(model).selectedItem = value;
+		}
+
+		/**
 		 * @private
 		 */
 		private var _presentationModel:IDataGridPresentationModel;
@@ -133,7 +178,7 @@ package org.apache.royale.jewel
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
+		 *  @productversion Royale 0.9.7
 		 *  @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
 		 *  @royaleignorecoercion org.apache.royale.core.IBead
 		 */
@@ -163,7 +208,7 @@ package org.apache.royale.jewel
 		 *  @langversion 3.0
 		 *  @playerversion Flash 10.2
 		 *  @playerversion AIR 2.6
-		 *  @productversion Royale 0.9
+		 *  @productversion Royale 0.9.7
 		 *  @royaleignorecoercion org.apache.royale.core.IDataGridPresentationModel
 		 */
 		public function get rowHeight():Number
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
index 45b29b7..93cffd8 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/views/DataGridView.as
@@ -35,11 +35,11 @@ package org.apache.royale.jewel.beads.views
 	import org.apache.royale.html.beads.GroupView;
 	import org.apache.royale.html.beads.IDataGridView;
 	import org.apache.royale.html.beads.layouts.ButtonBarLayout;
-	import org.apache.royale.html.supportClasses.IDataGridColumnList;
 	import org.apache.royale.jewel.supportClasses.Viewport;
 	import org.apache.royale.jewel.supportClasses.datagrid.DataGridButtonBar;
 	import org.apache.royale.jewel.supportClasses.datagrid.IDataGrid;
 	import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumn;
+	import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList;
 
     /**
      *  The DataGridView class is the visual bead for the org.apache.royale.jewel.DataGrid.
@@ -105,13 +105,12 @@ package org.apache.royale.jewel.beads.views
         /**
          * @private
          * @royaleignorecoercion org.apache.royale.core.IDataGridModel
-         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
          * @royaleignorecoercion org.apache.royale.core.IBead
          * @royaleignorecoercion org.apache.royale.core.IBeadModel
          * @royaleignorecoercion org.apache.royale.core.IChild
          * @royaleignorecoercion org.apache.royale.core.ILayoutChild
          * @royaleignorecoercion org.apache.royale.core.IUIBase
-         * @royaleignorecoercion org.apache.royale.html.DataGrid
+         * @royaleignorecoercion org.apache.royale.events.IEventDispatcher
          */
         override protected function handleInitComplete(event:Event):void
         {
@@ -168,6 +167,8 @@ package org.apache.royale.jewel.beads.views
 
         /**
          * @private
+         * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+         * @royaleignorecoercion org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList
          */
         protected function handleDataProviderChanged(event:Event):void
         {
@@ -183,7 +184,7 @@ package org.apache.royale.jewel.beads.views
         /**
          * @private
          * @royaleignorecoercion org.apache.royale.core.IDataGridModel
-         * @royaleignorecoercion org.apache.royale.html.supportClasses.IDataGridColumnList
+         * @royaleignorecoercion org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList
          */
         private function handleSelectedIndexChanged(event:Event):void
         {
@@ -200,7 +201,7 @@ package org.apache.royale.jewel.beads.views
         /**
          * @private
          * @royaleignorecoercion org.apache.royale.core.IDataGridModel
-         * @royaleignorecoercion org.apache.royale.html.supportClasses.IDataGridColumnList
+         * @royaleignorecoercion org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList
          */
         private function handleColumnListChange(event:Event):void
         {
@@ -217,10 +218,29 @@ package org.apache.royale.jewel.beads.views
 
             host.dispatchEvent(new Event('change'));
         }
+        /**
+         * @private
+         * @royaleignorecoercion org.apache.royale.core.IDataGridModel
+         * @royaleignorecoercion org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList
+         */
+        private function handleColumnListRollOverChange(event:Event):void
+        {
+            var sharedModel:IDataGridModel = _strand.getBeadByType(IBeadModel) as IDataGridModel;
+            var list:IDataGridColumnList = event.target as IDataGridColumnList;
+            sharedModel.rollOverIndex = list.rollOverIndex;
+
+            for(var i:int=0; i < _lists.length; i++) {
+                if (list != _lists[i]) {
+                    var otherList:IDataGridColumnList = _lists[i] as IDataGridColumnList;
+                    otherList.rollOverIndex = list.rollOverIndex;
+                }
+            }
+
+            host.dispatchEvent(new Event('rollOverIndex'));
+        }
 
         /**
          * @private
-         * @royaleignorecoercion String
          * @royaleignorecoercion Class
          * @royaleignorecoercion org.apache.royale.core.IDataGridModel
          * @royaleignorecoercion org.apache.royale.core.IBead
@@ -266,7 +286,8 @@ package org.apache.royale.jewel.beads.views
                 list.dataProvider = sharedModel.dataProvider;
                 list.itemRenderer = dataGridColumn.itemRenderer;
                 list.labelField = dataGridColumn.dataField;
-                list.addEventListener('change', handleColumnListChange);
+                list.addEventListener('rollOverIndexChanged', handleColumnListRollOverChange);
+                list.addEventListener('selectionChanged', handleColumnListChange);
                 list.addBead(presentationModel as IBead);
 
                 (_listArea as IParent).addElement(list as IChild);
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridColumnList.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridColumnList.as
index 2c04991..7b82a0c 100644
--- a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridColumnList.as
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/DataGridColumnList.as
@@ -19,7 +19,7 @@
 package org.apache.royale.jewel.supportClasses.datagrid
 {
     import org.apache.royale.jewel.List;
-    import org.apache.royale.html.supportClasses.IDataGridColumnList;
+    import org.apache.royale.jewel.supportClasses.datagrid.IDataGridColumnList;
     
     //--------------------------------------
     //  Events
diff --git a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/IDataGridColumnList.as b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/IDataGridColumnList.as
new file mode 100644
index 0000000..2de9e35
--- /dev/null
+++ b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/supportClasses/datagrid/IDataGridColumnList.as
@@ -0,0 +1,36 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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 "Licens"); 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.supportClasses.datagrid
+{
+    import org.apache.royale.html.supportClasses.IDataGridColumnList;
+
+    /**
+     *  The Jewel IDataGridColumnList interface is a marker interface for Jewel DataGrid Column Lists
+     * 
+     *  @langversion 3.0
+     *  @playerversion Flash 10.2
+     *  @playerversion AIR 2.6
+     *  @productversion Royale 0.9.7
+     */
+    public interface IDataGridColumnList extends org.apache.royale.html.supportClasses.IDataGridColumnList
+    {
+        function get rollOverIndex():int;
+        function set rollOverIndex(value:int):void;
+    }
+}
\ No newline at end of file