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