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 85265ec  jewel-daterangerestriction: Replace time calculation with 
appropriate filters per view state
     new 16d9cbd  Merge pull request #1079 from brianraymes/develop
85265ec is described below

commit 85265ec3070cd19a467b92667190a395474754fa
Author: Brian Raymes <[email protected]>
AuthorDate: Sat Feb 13 11:42:20 2021 -0800

    jewel-daterangerestriction: Replace time calculation with appropriate 
filters per view state
---
 .../datechooser/DateChooserDateRangeRestriction.as | 196 +++++++++++++--------
 .../datefield/DateFieldDateRangeRestriction.as     |  70 ++++----
 2 files changed, 159 insertions(+), 107 deletions(-)

diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datechooser/DateChooserDateRangeRestriction.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datechooser/DateChooserDateRangeRestriction.as
old mode 100644
new mode 100755
index ac5e864..1992f99
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datechooser/DateChooserDateRangeRestriction.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datechooser/DateChooserDateRangeRestriction.as
@@ -18,19 +18,20 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.controls.datechooser
 {
-    import org.apache.royale.core.DispatcherBead;
-    import org.apache.royale.core.IStrand;
-    import org.apache.royale.events.Event;
-    import org.apache.royale.events.IEventDispatcher;
-    import org.apache.royale.events.MouseEvent;
-    import org.apache.royale.jewel.beads.controls.Disabled;
-    import org.apache.royale.jewel.beads.itemRenderers.ITextItemRenderer;
-    import org.apache.royale.jewel.beads.views.DateChooserView;
-    import org.apache.royale.jewel.supportClasses.datechooser.DateChooserTable;
-    import org.apache.royale.jewel.supportClasses.table.TBodyContentArea;
-    import org.apache.royale.jewel.supportClasses.table.TableCell;
-    import org.apache.royale.jewel.supportClasses.table.TableRow;
-                                                                               
                        
+       import org.apache.royale.core.DispatcherBead;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.events.IEventDispatcher;
+       import org.apache.royale.events.MouseEvent;
+       import org.apache.royale.jewel.beads.controls.Disabled;
+       import org.apache.royale.jewel.beads.itemRenderers.ITextItemRenderer;
+       import org.apache.royale.jewel.beads.models.DateChooserModel;
+       import org.apache.royale.jewel.beads.views.DateChooserView;
+       import 
org.apache.royale.jewel.supportClasses.datechooser.DateChooserTable;
+       import org.apache.royale.jewel.supportClasses.table.TBodyContentArea;
+       import org.apache.royale.jewel.supportClasses.table.TableCell;
+       import org.apache.royale.jewel.supportClasses.table.TableRow;
+
        /**
         *  Disable dates which are outside restriction provided by minDate and 
maxDate properties
         *  in DateChooser component. User can set just one restriction 
(minDate or maxDate), or both
@@ -47,7 +48,7 @@ package org.apache.royale.jewel.beads.controls.datechooser
         */
        public class DateChooserDateRangeRestriction extends DispatcherBead
        {
-        /**
+               /**
                 *  constructor.
                 *
                 *  @langversion 3.0
@@ -58,16 +59,16 @@ package org.apache.royale.jewel.beads.controls.datechooser
                public function DateChooserDateRangeRestriction()
                {
                }
-               
+
                private var _minDate:Date;
-        /**
-         *  The minimun date
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.8
-         */
+               /**
+                *  The minimun date
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                */
                [Bindable]
                public function get minDate():Date
                {
@@ -81,16 +82,16 @@ package org.apache.royale.jewel.beads.controls.datechooser
                                refreshDateRange();
                        }
                }
-               
+
                private var _maxDate:Date;
-        /**
-         *  The maximun date
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.8
-         */
+               /**
+                *  The maximun date
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                */
                [Bindable]
                public function get maxDate():Date
                {
@@ -104,7 +105,7 @@ package org.apache.royale.jewel.beads.controls.datechooser
                                refreshDateRange();
                        }
                }
-               
+
                /**
                 *  @copy org.apache.royale.core.IBead#strand
                 *  
@@ -116,10 +117,11 @@ package org.apache.royale.jewel.beads.controls.datechooser
                 */
                public override function set strand(value:IStrand):void
                {
-            super.strand = value;
+                       super.strand = value;
                        (_strand as 
IEventDispatcher).addEventListener("initComplete", 
handleDateChooserInitComplete);
                }
 
+               private var model:DateChooserModel;
                private var view:DateChooserView;
                private var table:DateChooserTable;
                private var tableContent:TBodyContentArea;
@@ -132,67 +134,119 @@ package 
org.apache.royale.jewel.beads.controls.datechooser
 
                public function setUpBead():void
                {
+                       model = _strand.getBeadByType(DateChooserModel) as 
DateChooserModel;
+
                        view = _strand.getBeadByType(DateChooserView) as 
DateChooserView;
                        view.previousButton.addEventListener(MouseEvent.CLICK, 
refreshDateRange);
                        view.nextButton.addEventListener(MouseEvent.CLICK, 
refreshDateRange);
                        view.viewSelector.addEventListener(MouseEvent.CLICK, 
refreshDateRange);
-            
+
                        refreshDateRange();
                }
-               
+
                public function refreshDateRange():void
                {
-                       if(!view) return;
-            if (!minDate && !maxDate) return;
+                       if (!view)
+                               return;
 
-                       if(view.table)
+                       if (view.table)
                                view.table.removeEventListener(Event.CHANGE, 
refreshDateRange);
                        table = view.table;
                        view.table.addEventListener(Event.CHANGE, 
refreshDateRange);
-            tableContent = table.getBeadByType(TBodyContentArea) as 
TBodyContentArea;
-                       
-            var n:int = table.dataProvider.length;
+                       tableContent = table.getBeadByType(TBodyContentArea) as 
TBodyContentArea;
+
+                       var n:int = table.dataProvider.length;
                        for (var i:int = 0; i < tableContent.numElements; i++)
                        {
                                var row:TableRow = tableContent.getElementAt(i) 
as TableRow;
-                           for(var j:int = 0; j < row.numElements; j++)
+                               for (var j:int = 0; j < row.numElements; j++)
                                {
-                               var tableCell:TableCell = row.getElementAt(j) 
as TableCell;
-                               var renderer:ITextItemRenderer  = 
tableCell.getElementAt(0) as ITextItemRenderer;
-                    disableRenderer(renderer);
-                       }
-                   }
-               }               
-               
+                                       var tableCell:TableCell = 
row.getElementAt(j) as TableCell;
+                                       var renderer:ITextItemRenderer  = 
tableCell.getElementAt(0) as ITextItemRenderer;
+                                       disableRenderer(renderer);
+                               }
+                       }
+               }
+
+               /**
+                *  <code>true</code> if the date1's year is less than date2's 
year.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                */
+               private function isLessThanYear(date1:Date, date2:Date):Boolean
+               {
+                       return date1.getYear() < date2.getYear();
+               }
+
+               /**
+                *  <code>true</code> if the date1's month is less than date2's 
month.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                */
+               private function isLessThanMonth(date1:Date, date2:Date):Boolean
+               {
+                       return date1.getYear() == date2.getYear() && 
date1.getMonth() < date2.getMonth();
+               }
+
+               /**
+                *  <code>true</code> if the date1's day is less than date2's 
day.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                */
+               private function isLessThanDay(date1:Date, date2:Date):Boolean
+               {
+                       return date1.getYear() == date2.getYear() && 
date1.getMonth() == date2.getMonth() && date1.getDate() < date2.getDate();
+               }
+
                private function 
disableRenderer(renderer:ITextItemRenderer):void
                {
                        var rendererDate:Date = 
renderer.data[renderer.labelField];
-            if (!rendererDate) return;
-                       
-                       var minTime:Number;
-                       var maxTime:Number;
-                       if(minDate) 
-                               minTime = minDate.getTime();
-                       if(maxDate) 
-                               maxTime = maxDate.getTime();
-                       var itemTime:Number = rendererDate.getTime();
-                       
+                       if (!rendererDate)
+                               return;
+
                        var disabled:Disabled = (renderer as 
IStrand).getBeadByType(Disabled) as Disabled;
                        if (disabled == null)
                        {
-                           disabled = new Disabled();
+                               disabled = new Disabled();
                                (renderer as IStrand).addBead(disabled);
                        }
 
-                       if(minDate && maxDate)
-                               // both minDate and maxDate
-                               disabled.disabled = (itemTime > minTime) && 
(maxTime > itemTime) ? false : true;
-                       else if(!minDate && maxDate)
-                               // only maxDate
-                               disabled.disabled = maxTime > itemTime ? false 
: true; 
-                       else if(minDate && !maxDate)
-                               // only minDate
-                               disabled.disabled = itemTime > minTime ? false 
: true;
+                       if (model.viewState == 0) // Day view
+                       {
+                               if (minDate && maxDate)
+                                       disabled.disabled = 
isLessThanDay(rendererDate, minDate) && isLessThanDay(maxDate, rendererDate);
+                               else if (minDate)
+                                       disabled.disabled = 
isLessThanDay(rendererDate, minDate);
+                               else if (maxDate)
+                                       disabled.disabled = 
isLessThanDay(maxDate, rendererDate);
+                       }
+                       else if (model.viewState == 1) // Year view
+                       {
+                               if (minDate && maxDate)
+                                       disabled.disabled = 
isLessThanYear(rendererDate, minDate) && isLessThanYear(maxDate, rendererDate);
+                               else if (minDate)
+                                       disabled.disabled = 
isLessThanYear(rendererDate, minDate);
+                               else if (maxDate)
+                                       disabled.disabled = 
isLessThanYear(maxDate, rendererDate);
+                       }
+                       else if (model.viewState == 2) // Month view
+                       {
+                               if (minDate && maxDate)
+                                       disabled.disabled = 
isLessThanMonth(rendererDate, minDate) && isLessThanMonth(maxDate, 
rendererDate);
+                               else if (minDate)
+                                       disabled.disabled = 
isLessThanMonth(rendererDate, minDate);
+                               else if (maxDate)
+                                       disabled.disabled = 
isLessThanMonth(maxDate, rendererDate);
+                       }
 
                        // ensure no selection remains in dates out of the range
                        // if(disabled.disabled)
@@ -202,5 +256,5 @@ package org.apache.royale.jewel.beads.controls.datechooser
                        //              selectionBead.selected = false;
                        // }
                }
-    }
+       }
 }
\ No newline at end of file
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldDateRangeRestriction.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldDateRangeRestriction.as
old mode 100644
new mode 100755
index cdb29a1..aad7d13
--- 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldDateRangeRestriction.as
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datefield/DateFieldDateRangeRestriction.as
@@ -18,18 +18,18 @@
 
////////////////////////////////////////////////////////////////////////////////
 package org.apache.royale.jewel.beads.controls.datefield
 {
-    import org.apache.royale.core.DispatcherBead;
-    import org.apache.royale.core.IStrand;
-    import org.apache.royale.events.Event;
-    import org.apache.royale.events.IEventDispatcher;
-    import org.apache.royale.jewel.DateChooser;
-    import 
org.apache.royale.jewel.beads.controls.datechooser.DateChooserDateRangeRestriction;
-    import org.apache.royale.jewel.beads.views.DateFieldView;
-                                                                               
                        
+       import org.apache.royale.core.DispatcherBead;
+       import org.apache.royale.core.IStrand;
+       import org.apache.royale.events.Event;
+       import org.apache.royale.events.IEventDispatcher;
+       import org.apache.royale.jewel.DateChooser;
+       import 
org.apache.royale.jewel.beads.controls.datechooser.DateChooserDateRangeRestriction;
+       import org.apache.royale.jewel.beads.views.DateFieldView;
+
        /**
         *  Disable dates which are outside restriction provided by minDate and 
maxDate properties
         *  in DateField component
-     * 
+        * 
         *  @langversion 3.0
         *  @playerversion Flash 10.2
         *  @playerversion AIR 2.6
@@ -37,7 +37,7 @@ package org.apache.royale.jewel.beads.controls.datefield
         */
        public class DateFieldDateRangeRestriction extends DispatcherBead
        {
-        /**
+               /**
                 *  constructor.
                 *
                 *  @langversion 3.0
@@ -48,16 +48,16 @@ package org.apache.royale.jewel.beads.controls.datefield
                public function DateFieldDateRangeRestriction()
                {
                }
-               
+
                private var _minDate:Date;
-        /**
-         *  The minimun date
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.8
-         */
+               /**
+                *  The minimun date
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                */
                [Bindable]
                public function get minDate():Date
                {
@@ -71,16 +71,16 @@ package org.apache.royale.jewel.beads.controls.datefield
                                setUpDateRangeRestriction();
                        }
                }
-               
+
                private var _maxDate:Date;
-        /**
-         *  The maximun date
-         *
-         *  @langversion 3.0
-         *  @playerversion Flash 10.2
-         *  @playerversion AIR 2.6
-         *  @productversion Royale 0.9.8
-         */
+               /**
+                *  The maximun date
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                */
                [Bindable]
                public function get maxDate():Date
                {
@@ -94,7 +94,7 @@ package org.apache.royale.jewel.beads.controls.datefield
                                setUpDateRangeRestriction();
                        }
                }
-               
+
                /**
                 *  @copy org.apache.royale.core.IBead#strand
                 *  
@@ -112,11 +112,11 @@ package org.apache.royale.jewel.beads.controls.datefield
 
                private var view:DateFieldView;
                private var 
dataRangeRestriction:DateChooserDateRangeRestriction;
-               
+
                private function handleDateFieldInitComplete(event:Event):void
                {
                        (_strand as 
IEventDispatcher).removeEventListener("initComplete", 
handleDateFieldInitComplete);
-            (_strand as IEventDispatcher).addEventListener('popUpOpened', 
popUpOpenedHandler, false);
+                       (_strand as 
IEventDispatcher).addEventListener('popUpOpened', popUpOpenedHandler, false);
                        
                        view = _strand.getBeadByType(DateFieldView) as 
DateFieldView;
                }
@@ -129,17 +129,15 @@ package org.apache.royale.jewel.beads.controls.datefield
                        dataRangeRestriction.minDate = minDate;
                        dataRangeRestriction.maxDate = maxDate;
                }
-               
+
                protected function popUpOpenedHandler():void
                {
-            if (!minDate || !maxDate) return;
-                       
-            setUpDateRangeRestriction();
+                       setUpDateRangeRestriction();
 
                        var dateChooser:DateChooser = view.popUp as DateChooser;
                        dateChooser.addBead(dataRangeRestriction);
 
                        dataRangeRestriction.setUpBead();
                }
-    }
+       }
 }
\ No newline at end of file

Reply via email to