Hi Om,

Looks good.  Some points to ponder:

1) Ideally, in a Pay-as-you-go philosophy, a rolloverIndex would not be in
the ArraySelectionModel since, in theory, ArraySelectionModel should be
reusable in mobile devices where there is no rollover.  I honestly don't
know what the right answer is.  There are options like having a subclass
of ArraySelectionModel that supports rollover.  There is the option of
having rolloverIndex stored somewhere else.  Maybe rollover is a
presentation concept, or maybe rollover should be entirely encapsulated in
its own bead so it can be dropped out of mobile configs?  But I think the
entire mousecontroller will be replaced by a touchcontroller in that case.
 Another thing to consider is that, if a JS DG happens to wrap a
third-party DG or I think there is one built into HTML5, and the JS
version doesn't support rollover, how can we extract rollover from the AS
version?

2) There is an entirely alternate implementation of rollover where it is
completely delegated to the renderer to determine based on mouse events
what its display/rollover and selection state is.  Think of renderers that
have buttons in them for deleting that row.  Clicking on the button may or
may not change the selection, rollover the button may not cause rollover
highlighting of the row, just the button.  I'm not saying this a preferred
implementation, just that we want to make sure we make as many other beads
reusable as possible in such an implementation, and not lock folks into
one implementation or another.

Anyway, that last point is mainly food for thought.  From what I could
tell from the diff this is a perfectly fine implementation of rollover,
the only thing that stood out was adding rolloverindex to
ArraySelectionModel.  Any thoughts on where else to hang it?  Of course,
there is the argument that it is just one property slot, but I can promise
you I've seen that philosophy cause slow but steady size and dependency
creep.

Thanks,
-Alex

On 11/12/13 6:09 PM, "OmPrakash Muppirala" <bigosma...@gmail.com> wrote:

>This is my first real contribution to the FlexJS project.  Alex/Peter can
>you please review this and let me know if I am on the right track?
>Once you approve, I will start looking at the JS version of the same
>logic.
>
>Thanks,
>Om
>
>
>On Tue, Nov 12, 2013 at 6:07 PM, <bigosma...@apache.org> wrote:
>
>> Updated Branches:
>>   refs/heads/develop 22f891823 -> 67c11796e
>>
>>
>> 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/67c11796
>> Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/67c11796
>> Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/67c11796
>>
>> Branch: refs/heads/develop
>> Commit: 67c11796e271bf7811e8afb12f556aa2386d2960
>> Parents: 22f8918
>> Author: Om <bigosma...@gmail.com>
>> Authored: Tue Nov 12 18:05:48 2013 -0800
>> Committer: Om <bigosma...@gmail.com>
>> Committed: Tue Nov 12 18:06:26 2013 -0800
>>
>> ----------------------------------------------------------------------
>>  .../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/67c11796/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/67c11796/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/67c11796/frameworks
>>/as/src/org/apache/flex/html/staticControls/beads/DataGridView.as
>> ----------------------------------------------------------------------
>> diff --git
>>
>>a/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridVie
>>w.as
>>
>>b/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridVie
>>w.as
>> index 4088734..f2d3cc2 100644
>> ---
>>
>>a/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridVie
>>w.as
>> +++
>>
>>b/frameworks/as/src/org/apache/flex/html/staticControls/beads/DataGridVie
>>w.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",handleSizeChang
>>e);
>> @@ -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/67c11796/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/67c11796/frameworks
>>/as/src/org/apache/flex/html/staticControls/beads/controllers/ItemRendere
>>rMouseController.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/67c11796/frameworks
>>/as/src/org/apache/flex/html/staticControls/beads/controllers/ListSingleS
>>electionMouseController.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/67c11796/frameworks
>>/as/src/org/apache/flex/html/staticControls/beads/models/ArraySelectionMo
>>del.as
>> ----------------------------------------------------------------------
>> diff --git
>>
>>a/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/Arra
>>ySelectionModel.as
>>
>>b/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/Arra
>>ySelectionModel.as
>> index 3ca7f94..d1794be 100644
>> ---
>>
>>a/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/Arra
>>ySelectionModel.as
>> +++
>>
>>b/frameworks/as/src/org/apache/flex/html/staticControls/beads/models/Arra
>>ySelectionModel.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