Add functionality to AS version of DataGrid to highlight entire row when 
rolling over any column
JS version to follow after discussion on dev@f.a.o


Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo
Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/93942215
Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/93942215
Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/93942215

Branch: refs/heads/develop
Commit: 9394221514ab5f709ad4b55484a7c3dc2ca1922a
Parents: 78dcdc9
Author: Om <bigosma...@gmail.com>
Authored: Tue Nov 12 18:05:48 2013 -0800
Committer: Erik de Bruin <e...@ixsoftware.nl>
Committed: Wed Nov 13 08:16:08 2013 +0100

----------------------------------------------------------------------
 .../src/org/apache/flex/core/IRollOverModel.as  | 28 ++++++++++++++++++++
 .../org/apache/flex/html/staticControls/List.as | 12 ++++++++-
 .../html/staticControls/beads/DataGridView.as   | 13 +++++++++
 .../flex/html/staticControls/beads/ListView.as  | 19 +++++++++++++
 .../controllers/ItemRendererMouseController.as  |  1 +
 .../ListSingleSelectionMouseController.as       | 10 ++++++-
 .../beads/models/ArraySelectionModel.as         | 14 +++++++++-
 7 files changed, 94 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/93942215/frameworks/as/src/org/apache/flex/core/IRollOverModel.as
----------------------------------------------------------------------
diff --git a/frameworks/as/src/org/apache/flex/core/IRollOverModel.as 
b/frameworks/as/src/org/apache/flex/core/IRollOverModel.as
new file mode 100644
index 0000000..d38aa41
--- /dev/null
+++ b/frameworks/as/src/org/apache/flex/core/IRollOverModel.as
@@ -0,0 +1,28 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.flex.core
+{
+       import org.apache.flex.events.IEventDispatcher;
+       
+       public interface IRollOverModel extends IEventDispatcher, IBeadModel
+       {
+               function get rollOverIndex():int;
+               function set rollOverIndex(value:int):void;
+       }
+}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/93942215/frameworks/as/src/org/apache/flex/html/staticControls/List.as
----------------------------------------------------------------------
diff --git a/frameworks/as/src/org/apache/flex/html/staticControls/List.as 
b/frameworks/as/src/org/apache/flex/html/staticControls/List.as
index 7cb3b6d..da1638e 100644
--- a/frameworks/as/src/org/apache/flex/html/staticControls/List.as
+++ b/frameworks/as/src/org/apache/flex/html/staticControls/List.as
@@ -18,8 +18,9 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.html.staticControls
 {
+       import org.apache.flex.core.IRollOverModel;
        import org.apache.flex.core.ISelectionModel;
-    import org.apache.flex.core.UIBase;
+       import org.apache.flex.core.UIBase;
        import org.apache.flex.core.ValuesManager;
        import 
org.apache.flex.html.staticControls.beads.IDataProviderItemRendererMapper;
        
@@ -56,6 +57,15 @@ package org.apache.flex.html.staticControls
                {
                        ISelectionModel(model).selectedIndex = value;
                }
+
+        public function get rollOverIndex():int
+               {
+                       return IRollOverModel(model).rollOverIndex;
+               }
+               public function set rollOverIndex(value:int):void
+               {
+                       IRollOverModel(model).rollOverIndex = value;
+               }
                
                public function get selectedItem():Object
                {

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/93942215/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridView.as 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridView.as
index 4088734..f2d3cc2 100644
--- 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridView.as
+++ 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridView.as
@@ -85,6 +85,7 @@ package org.apache.flex.html.staticControls.beads
                                columns.push(column);
                                
                                
column.addEventListener('change',columnListChangeHandler);
+                               
column.addEventListener('rollover',columnListRollOverHandler);
                        }
                        
                        
IEventDispatcher(_strand).addEventListener("widthChanged",handleSizeChange);
@@ -139,5 +140,17 @@ package org.apache.flex.html.staticControls.beads
                        
                        IEventDispatcher(_strand).dispatchEvent(new 
Event('change'));
                }
+               
+               private function columnListRollOverHandler(event:Event):void
+               {
+                       var list:List = event.target as List;
+                       for(var i:int=0; i < columns.length; i++) {
+                               if (list != columns[i]) {
+                                       columns[i].rollOverIndex = 
list.rollOverIndex;
+                               }
+                       }
+                       
+                       IEventDispatcher(_strand).dispatchEvent(new 
Event('rollOver'));
+               }
        }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/93942215/frameworks/as/src/org/apache/flex/html/staticControls/beads/ListView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/ListView.as 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/ListView.as
index dbe9e36..b8c9ab9 100644
--- a/frameworks/as/src/org/apache/flex/html/staticControls/beads/ListView.as
+++ b/frameworks/as/src/org/apache/flex/html/staticControls/beads/ListView.as
@@ -27,6 +27,7 @@ package org.apache.flex.html.staticControls.beads
        import org.apache.flex.core.IItemRendererParent;
        import org.apache.flex.core.ILayoutParent;
        import org.apache.flex.core.IParent;
+       import org.apache.flex.core.IRollOverModel;
        import org.apache.flex.core.ISelectionModel;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.core.Strand;
@@ -96,6 +97,7 @@ package org.apache.flex.html.staticControls.beads
             
             listModel = value.getBeadByType(ISelectionModel) as 
ISelectionModel;
             listModel.addEventListener("selectedIndexChanged", 
selectionChangeHandler);
+            listModel.addEventListener("rollOverIndexChanged", 
rollOverIndexChangeHandler);
 
             _border = new Border();
             _border.model = new SingleLineBorderModel();
@@ -128,6 +130,23 @@ package org.apache.flex.html.staticControls.beads
                        }
             lastSelectedIndex = listModel.selectedIndex;
                }
+               
+               private var lastRollOverIndex:int = -1;
+               
+               private function rollOverIndexChangeHandler(event:Event):void
+               {
+                       if (lastRollOverIndex != -1)
+                       {
+                               var ir:IItemRenderer = 
dataGroup.getItemRendererForIndex(lastRollOverIndex) as IItemRenderer;
+                ir.hovered = false;
+                       }
+                       if (IRollOverModel(listModel).rollOverIndex != -1)
+                       {
+                   ir = 
dataGroup.getItemRendererForIndex(IRollOverModel(listModel).rollOverIndex);
+                   ir.hovered = true;
+                       }
+                       lastRollOverIndex = 
IRollOverModel(listModel).rollOverIndex;
+               }
                        
                private function createScrollBar():ScrollBar
                {

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/93942215/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ItemRendererMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ItemRendererMouseController.as
 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ItemRendererMouseController.as
index 87d9a58..fbc0b1c 100644
--- 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ItemRendererMouseController.as
+++ 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ItemRendererMouseController.as
@@ -49,6 +49,7 @@ package org.apache.flex.html.staticControls.beads.controllers
                        if (target)
                        {
                 target.hovered = true;
+                               target.dispatchEvent(new Event("rollover"));
                        }
                }
                

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/93942215/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ListSingleSelectionMouseController.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ListSingleSelectionMouseController.as
 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ListSingleSelectionMouseController.as
index dc69476..ea870ab 100644
--- 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ListSingleSelectionMouseController.as
+++ 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/controllers/ListSingleSelectionMouseController.as
@@ -21,11 +21,12 @@ package 
org.apache.flex.html.staticControls.beads.controllers
        import org.apache.flex.core.IBeadController;
        import org.apache.flex.core.IItemRenderer;
        import org.apache.flex.core.IItemRendererParent;
+       import org.apache.flex.core.IRollOverModel;
        import org.apache.flex.core.ISelectionModel;
        import org.apache.flex.core.IStrand;
-       import org.apache.flex.html.staticControls.beads.IListView;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.IEventDispatcher;
+       import org.apache.flex.html.staticControls.beads.IListView;
        
 
        public class ListSingleSelectionMouseController implements 
IBeadController
@@ -47,6 +48,7 @@ package org.apache.flex.html.staticControls.beads.controllers
                        listView = value.getBeadByType(IListView) as IListView;
                        dataGroup = listView.dataGroup;
             dataGroup.addEventListener("selected", selectedHandler, true);
+            dataGroup.addEventListener("rollover", rolloverHandler, true);
                }
                
         private function selectedHandler(event:Event):void
@@ -54,6 +56,12 @@ package org.apache.flex.html.staticControls.beads.controllers
             listModel.selectedIndex = IItemRenderer(event.target).index;
             IEventDispatcher(listView.strand).dispatchEvent(new 
Event("change"));
         }
+               
+        private function rolloverHandler(event:Event):void
+        {
+            IRollOverModel(listModel).rollOverIndex = 
IItemRenderer(event.target).index;
+            IEventDispatcher(listView.strand).dispatchEvent(new 
Event("rollover"));
+        }
        
        }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/93942215/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/ArraySelectionModel.as
----------------------------------------------------------------------
diff --git 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/ArraySelectionModel.as
 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/ArraySelectionModel.as
index 3ca7f94..d1794be 100644
--- 
a/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/ArraySelectionModel.as
+++ 
b/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/ArraySelectionModel.as
@@ -18,12 +18,13 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.flex.html.staticControls.beads.models
 {
+       import org.apache.flex.core.IRollOverModel;
        import org.apache.flex.core.ISelectionModel;
        import org.apache.flex.core.IStrand;
        import org.apache.flex.events.Event;
        import org.apache.flex.events.EventDispatcher;
                        
-       public class ArraySelectionModel extends EventDispatcher implements 
ISelectionModel
+       public class ArraySelectionModel extends EventDispatcher implements 
ISelectionModel, IRollOverModel
        {
                public function ArraySelectionModel()
                {
@@ -49,6 +50,7 @@ package org.apache.flex.html.staticControls.beads.models
                }
 
                private var _selectedIndex:int = -1;
+               private var _rollOverIndex:int = -1;
                
                public function get selectedIndex():int
                {
@@ -61,6 +63,16 @@ package org.apache.flex.html.staticControls.beads.models
                        dispatchEvent(new Event("selectedIndexChanged"));       
                
                }
                
+               public function get rollOverIndex():int
+               {
+                       return _rollOverIndex;
+               }
+               public function set rollOverIndex(value:int):void
+               {
+                       _rollOverIndex = value;
+                       dispatchEvent(new Event("rollOverIndexChanged"));       
                
+               }
+               
                private var _selectedItem:Object;
                
                public function get selectedItem():Object

Reply via email to