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 77284e1  jewel-datechooser: New DateRangeRestriction by Piotr with 
some updates and styles in JewelTheme. Still need work to disable/enable the 
right cells
77284e1 is described below

commit 77284e1959824c7a1b87461587e6de535344c08e
Author: Carlos Rovira <[email protected]>
AuthorDate: Wed Dec 30 14:35:10 2020 +0100

    jewel-datechooser: New DateRangeRestriction by Piotr with some updates and 
styles in JewelTheme. Still need work to disable/enable the right cells
---
 .../Jewel/src/main/resources/jewel-manifest.xml    |   1 +
 .../controls/datechooser/DateRangeRestriction.as   | 175 +++++++++++++++++++++
 .../JewelTheme/src/main/resources/defaults.css     |   4 +
 .../main/sass/components-primary/_datechooser.sass |   6 +-
 4 files changed, 185 insertions(+), 1 deletion(-)

diff --git a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml 
b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
index 1e6f2e5..9e8ac6e 100644
--- a/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
+++ b/frameworks/projects/Jewel/src/main/resources/jewel-manifest.xml
@@ -134,6 +134,7 @@
     <component id="CollapsibleNavigationSectionRenderer" 
class="org.apache.royale.jewel.itemRenderers.CollapsibleNavigationSectionRenderer"/>
 
     <component id="DateChooserModel" 
class="org.apache.royale.jewel.beads.models.DateChooserModel"/>
+    <component id="DateRangeRestriction" 
class="org.apache.royale.jewel.beads.controls.datechooser.DateRangeRestriction"/>
 
     <component id="ResponsiveView" 
class="org.apache.royale.jewel.ResponsiveView"/>
 
diff --git 
a/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datechooser/DateRangeRestriction.as
 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datechooser/DateRangeRestriction.as
new file mode 100644
index 0000000..94beccb
--- /dev/null
+++ 
b/frameworks/projects/Jewel/src/main/royale/org/apache/royale/jewel/beads/controls/datechooser/DateRangeRestriction.as
@@ -0,0 +1,175 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.royale.jewel.beads.controls.datechooser
+{
+    import org.apache.royale.core.IBead;
+    import org.apache.royale.core.IStrand;
+    import org.apache.royale.events.Event;
+    import org.apache.royale.events.IEventDispatcher;
+    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
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion Royale 0.9.8
+        */
+       public class DateRangeRestriction implements IBead
+       {
+        /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                */
+               public function DateRangeRestriction()
+               {
+               }
+               
+               private var _minDate:Date;
+        /**
+         *  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
+               {
+                       return _minDate;
+               }
+               public function set minDate(value:Date):void
+               {
+                       if (_minDate != value)
+                       {
+                               _minDate = value;
+                               refreshDateRange();
+                       }
+               }
+               
+               private var _maxDate:Date;
+        /**
+         *  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
+               {
+                       return _maxDate;
+               }
+               public function set maxDate(value:Date):void
+               {
+                       if (_maxDate != value)
+                       {
+                               _maxDate = value;
+                               refreshDateRange();
+                       }
+               }
+               
+               private var _strand:IStrand;
+               /**
+                *  @copy org.apache.royale.core.IBead#strand
+                *  
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion Royale 0.9.8
+                *  @royaleignorecoercion 
org.apache.royale.events.IEventDispatcher
+                */
+               public function set strand(value:IStrand):void
+               {
+                       _strand = value;
+                       (_strand as 
IEventDispatcher).addEventListener("initComplete", 
handlerDateChooserInitComplete);
+               }
+               
+               private function 
handlerDateChooserInitComplete(event:Event):void
+               {
+                       (_strand as 
IEventDispatcher).removeEventListener("initComplete", 
handlerDateChooserInitComplete);
+                       
+                       refreshDateRange();
+               }
+               
+               protected function refreshDateRange():void
+               {
+            if (!minDate || !maxDate) return;
+                       
+                       var model:DateChooserModel = 
_strand.getBeadByType(DateChooserModel) as DateChooserModel;
+            var dateChooserView:DateChooserView = 
_strand.getBeadByType(DateChooserView) as DateChooserView;
+            var table:DateChooserTable = dateChooserView.table;
+            var tableContent:TBodyContentArea = 
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++)
+                               {
+                               var tableCell:TableCell = row.getElementAt(j) 
as TableCell;
+                               var renderer:ITextItemRenderer  = 
tableCell.getElementAt(0) as ITextItemRenderer;
+                    disableRenderer(renderer);
+                       }
+                   }
+               }               
+               
+               private function 
disableRenderer(renderer:ITextItemRenderer):void
+               {
+                       var rendererDate:Date = 
renderer.data[renderer.labelField];
+            if (!rendererDate) return;
+                       
+                       var minTime:Number = minDate.getTime();
+                       var maxTime:Number = maxDate.getTime();
+                       var itemTime:Number = rendererDate.getTime();
+                       
+                       var disabled:Disabled = (renderer as 
IStrand).getBeadByType(Disabled) as Disabled;
+                       if (disabled == null)
+                       {
+                           disabled = new Disabled();
+                               (renderer as IStrand).addBead(disabled);
+                       }
+
+                       if ((minTime < itemTime) && (itemTime > maxTime))
+                       {
+                trace("disabling ", rendererDate.day, rendererDate.month, 
rendererDate.fullYear, " -- ", minDate.day, minDate.month, minDate.fullYear, " 
-- ", maxDate.day, maxDate.month, maxDate.fullYear);
+                               disabled.disabled = true;
+                       }
+                       else
+                       {
+                trace(" - ENABLING ", rendererDate.day, rendererDate.month, 
rendererDate.fullYear, " -- ", minDate.day, minDate.month, minDate.fullYear, " 
-- ", maxDate.day, maxDate.month, maxDate.fullYear);
+                               disabled.disabled = false;
+                       }
+               }
+    }
+}
\ No newline at end of file
diff --git a/frameworks/themes/JewelTheme/src/main/resources/defaults.css 
b/frameworks/themes/JewelTheme/src/main/resources/defaults.css
index 5252ef7..47ae867 100644
--- a/frameworks/themes/JewelTheme/src/main/resources/defaults.css
+++ b/frameworks/themes/JewelTheme/src/main/resources/defaults.css
@@ -632,6 +632,10 @@ j|CardActions {
 .calendar.item.date {
   color: grey;
 }
+.calendar[disabled] {
+  color: silver;
+  pointer-events: none;
+}
 
 .jewel.datefield .jewel.textinput input {
   border-radius: 0.25rem 0px 0px 0.25rem;
diff --git 
a/frameworks/themes/JewelTheme/src/main/sass/components-primary/_datechooser.sass
 
b/frameworks/themes/JewelTheme/src/main/sass/components-primary/_datechooser.sass
index 17f3853..baf6ada 100644
--- 
a/frameworks/themes/JewelTheme/src/main/sass/components-primary/_datechooser.sass
+++ 
b/frameworks/themes/JewelTheme/src/main/sass/components-primary/_datechooser.sass
@@ -140,4 +140,8 @@ $datechooser-buttons-border-radius: 50%
                 weight: 600
 
         &.date
-            color: grey
\ No newline at end of file
+            color: grey
+        
+    &[disabled]
+        color: $disabled-font-color
+        pointer-events: none
\ No newline at end of file

Reply via email to