Repository: flex-asjs
Updated Branches:
  refs/heads/develop f376283d4 -> 63a3e201c


Added DatePicker to the set of mobile controls.


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

Branch: refs/heads/develop
Commit: 63a3e201c4aa0cea6fca6da69a044a7260d62849
Parents: f376283
Author: Peter Ent <[email protected]>
Authored: Mon Jun 6 16:26:24 2016 -0400
Committer: Peter Ent <[email protected]>
Committed: Mon Jun 6 16:26:24 2016 -0400

----------------------------------------------------------------------
 .../Mobile/src/main/flex/MobileClasses.as       |   2 +
 .../flex/org/apache/flex/mobile/DatePicker.as   |  80 ++++++++
 .../apache/flex/mobile/beads/DatePickerView.as  | 187 +++++++++++++++++++
 .../src/main/resources/basic-manifest.xml       |   1 +
 .../Mobile/src/main/resources/defaults.css      |  23 +++
 5 files changed, 293 insertions(+)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/63a3e201/frameworks/projects/Mobile/src/main/flex/MobileClasses.as
----------------------------------------------------------------------
diff --git a/frameworks/projects/Mobile/src/main/flex/MobileClasses.as 
b/frameworks/projects/Mobile/src/main/flex/MobileClasses.as
index b1e6dae..411b05c 100644
--- a/frameworks/projects/Mobile/src/main/flex/MobileClasses.as
+++ b/frameworks/projects/Mobile/src/main/flex/MobileClasses.as
@@ -29,6 +29,8 @@ internal class MobileClasses
 {      
        import org.apache.flex.mobile.ManagerBase; ManagerBase;
        
+       import org.apache.flex.mobile.DatePicker; DatePicker;
+       import org.apache.flex.mobile.beads.DatePickerView; DatePickerView;
        import org.apache.flex.mobile.ToggleSwitch; ToggleSwitch;
        import org.apache.flex.mobile.ViewManagerBase; ViewManagerBase;
        import org.apache.flex.mobile.beads.StackedViewManagerView; 
StackedViewManagerView;

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/63a3e201/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/DatePicker.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/DatePicker.as 
b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/DatePicker.as
new file mode 100644
index 0000000..8d659cf
--- /dev/null
+++ 
b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/DatePicker.as
@@ -0,0 +1,80 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.mobile
+{
+       import org.apache.flex.core.IDateChooserModel;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+
+       [Event(name="selectedDateChanged", type="org.apache.flex.events.Event")]
+
+       /**
+        *  The DatePicker presents a control for picking a date. 
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class DatePicker extends UIBase
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function DatePicker()
+               {
+                       super();
+
+                       className = "DatePicker";
+
+                       setWidthAndHeight(120, 60, true);
+                       selectedDate = new Date();
+
+                       
IEventDispatcher(model).addEventListener("selectedDateChanged",handleDateChange);
+               }
+
+               /**
+                *  The date selected or set.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function get selectedDate():Date
+               {
+                       return IDateChooserModel(model).selectedDate;
+               }
+               public function set selectedDate(value:Date):void
+               {
+                       IDateChooserModel(model).selectedDate = value;
+               }
+
+               private function handleDateChange(event:Event):void
+               {
+                       dispatchEvent(new Event("selectedDateChanged"));
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/63a3e201/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/DatePickerView.as
----------------------------------------------------------------------
diff --git 
a/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/DatePickerView.as
 
b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/DatePickerView.as
new file mode 100644
index 0000000..6be8544
--- /dev/null
+++ 
b/frameworks/projects/Mobile/src/main/flex/org/apache/flex/mobile/beads/DatePickerView.as
@@ -0,0 +1,187 @@
+////////////////////////////////////////////////////////////////////////////////
+//
+//  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.mobile.beads
+{
+       //import flash.events.Event;
+
+       import org.apache.flex.core.BeadViewBase;
+       import org.apache.flex.core.IBeadView;
+       import org.apache.flex.core.IDateChooserModel;
+       import org.apache.flex.core.IStrand;
+       import org.apache.flex.core.UIBase;
+       import org.apache.flex.events.Event;
+       import org.apache.flex.events.IEventDispatcher;
+
+       import org.apache.flex.html.beads.models.RangeModelExtended;
+       import org.apache.flex.html.RangeStepper;
+       import org.apache.flex.html.beads.RangeStepperView;
+
+       /**
+        *  The DatePickerView bead creates the visual elements of the 
DatePicker. This
+        *  is a set of three RangeSteppers (one each for month, day, and 
year). 
+        *  
+        *  @langversion 3.0
+        *  @playerversion Flash 10.2
+        *  @playerversion AIR 2.6
+        *  @productversion FlexJS 0.0
+        */
+       public class DatePickerView extends BeadViewBase implements IBeadView
+       {
+               /**
+                *  constructor.
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               public function DatePickerView()
+               {
+                       super();
+               }
+
+               private var _monthStepper:RangeStepper;
+               private var _dayStepper:RangeStepper;
+               private var _yearStepper:RangeStepper;
+
+               private function monthValue(model:RangeModelExtended, 
index:Number):String
+               {
+                       var dayModel:IDateChooserModel = 
_strand.getBeadByType(IDateChooserModel) as IDateChooserModel;
+                       return String(dayModel.monthNames[index]);
+               }
+
+               private function dayValue(model:RangeModelExtended, 
index:Number):String
+               {
+                       return String(index);
+               }
+
+               private function yearValue(model:RangeModelExtended, 
index:Number):String
+               {
+                       return String(index);
+               }
+
+               private var _strand:IStrand;
+               
+               /**
+                *  @copy org.apache.flex.core.IBead#strand
+                *
+                *  @langversion 3.0
+                *  @playerversion Flash 10.2
+                *  @playerversion AIR 2.6
+                *  @productversion FlexJS 0.0
+                */
+               override public function set strand(value:IStrand):void
+               {
+                       super.strand = value;
+                       _strand = value;
+
+                       var host:UIBase = _strand as UIBase;
+                       var model:IDateChooserModel = 
_strand.getBeadByType(IDateChooserModel) as IDateChooserModel;
+                       var today:Date = model.selectedDate;
+
+                       var third:int = int(host.width/3.0)
+
+                       _monthStepper = new RangeStepper();
+                       _monthStepper.className = host.className+"_Month";
+                       _monthStepper.addBead(new RangeModelExtended());
+                       _monthStepper.addBead(new RangeStepperView());
+                       (_monthStepper.model as 
RangeModelExtended).labelFunction = monthValue;
+                       (_monthStepper.model as RangeModelExtended).minimum = 0;
+                       (_monthStepper.model as RangeModelExtended).maximum = 
11;
+                       (_monthStepper.model as RangeModelExtended).value = 
today.getMonth();
+                       _monthStepper.setWidthAndHeight(third,host.height);
+                       host.addElement(_monthStepper);
+
+                       _dayStepper = new RangeStepper();
+                       _dayStepper.className = host.className+"_Day";
+                       _dayStepper.addBead(new RangeModelExtended());
+                       _dayStepper.addBead(new RangeStepperView());
+                       (_dayStepper.model as RangeModelExtended).labelFunction 
= dayValue;
+                       (_dayStepper.model as RangeModelExtended).minimum = 1;
+                       (_dayStepper.model as RangeModelExtended).maximum = 31;
+                       (_dayStepper.model as RangeModelExtended).value = 
today.getDate();
+                       _dayStepper.setWidthAndHeight(third,host.height);
+                       host.addElement(_dayStepper);
+
+                       _yearStepper = new RangeStepper();
+                       _yearStepper.className = host.className+"_Year";
+                       _yearStepper.addBead(new RangeModelExtended());
+                       _yearStepper.addBead(new RangeStepperView());
+                       (_yearStepper.model as 
RangeModelExtended).labelFunction = yearValue;
+                       (_yearStepper.model as RangeModelExtended).minimum = 
1970;
+                       (_yearStepper.model as RangeModelExtended).maximum = 
2025;
+                       (_yearStepper.model as RangeModelExtended).value = 
today.getFullYear();
+                       _yearStepper.setWidthAndHeight(third,host.height);
+                       host.addElement(_yearStepper);
+
+                       setupListeners(true);
+
+                       sizeChangeHandler(null);
+               }
+
+               private function setupListeners(state:Boolean):void
+               {
+                       if (state) {
+                               (_monthStepper.model as 
IEventDispatcher).addEventListener("valueChange", handleStepperChange);
+                               (_dayStepper.model as 
IEventDispatcher).addEventListener("valueChange", handleStepperChange);
+                               (_yearStepper.model as 
IEventDispatcher).addEventListener("valueChange", handleStepperChange);
+                       }
+                       else {
+                               (_monthStepper.model as 
IEventDispatcher).removeEventListener("valueChange", handleStepperChange);
+                               (_dayStepper.model as 
IEventDispatcher).removeEventListener("valueChange", handleStepperChange);
+                               (_yearStepper.model as 
IEventDispatcher).removeEventListener("valueChange", handleStepperChange);
+                       }
+               }
+
+               private function sizeChangeHandler(event:Event):void
+               {
+                       _monthStepper.x = 0;
+                       _monthStepper.y = 0;
+
+                       _dayStepper.x = _monthStepper.width - 1;
+                       _dayStepper.y = 0;
+
+                       _yearStepper.x = _monthStepper.width + 
_dayStepper.width - 2;
+                       _yearStepper.y = 0;
+               }
+
+               private function handleStepperChange(event:Event):void
+               {
+                       var model:IDateChooserModel = 
_strand.getBeadByType(IDateChooserModel) as IDateChooserModel;
+
+                       var newMonth:Number = _monthStepper.value;
+                       var newDay:Number = _dayStepper.value;
+                       var newYear:Number = _yearStepper.value;
+
+                       var newDate:Date = new Date(newYear, newMonth, newDay);
+                       var oldDate:Date = model.selectedDate;
+
+                       if (newDate.getFullYear() != newYear || 
newDate.getDate() != newDay || newDate.getMonth() != newMonth) {
+                               setupListeners(false);
+                               _monthStepper.value = oldDate.getMonth();
+                               _dayStepper.value = oldDate.getDate();
+                               _yearStepper.value = oldDate.getFullYear();
+                               setupListeners(true);
+                       }
+                       else {
+                               model.selectedDate = newDate;
+                       }
+               }
+       }
+}

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/63a3e201/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml
----------------------------------------------------------------------
diff --git a/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml 
b/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml
index a70352f..ddec534 100644
--- a/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml
+++ b/frameworks/projects/Mobile/src/main/resources/basic-manifest.xml
@@ -27,4 +27,5 @@
     <component id="ToolBar" class="org.apache.flex.mobile.chrome.ToolBar" />
     <component id="TabBar" class="org.apache.flex.mobile.chrome.TabBar" />
     <component id="ToggleSwitch" class="org.apache.flex.mobile.ToggleSwitch" />
+    <component id="DatePicker" class="org.apache.flex.mobile.DatePicker" />
 </componentPackage>

http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/63a3e201/frameworks/projects/Mobile/src/main/resources/defaults.css
----------------------------------------------------------------------
diff --git a/frameworks/projects/Mobile/src/main/resources/defaults.css 
b/frameworks/projects/Mobile/src/main/resources/defaults.css
index c1e2828..ddf9229 100644
--- a/frameworks/projects/Mobile/src/main/resources/defaults.css
+++ b/frameworks/projects/Mobile/src/main/resources/defaults.css
@@ -40,3 +40,26 @@ ToggleSwitch
        width: 40px;
        height: 25px;
 }
+
+DatePicker {
+       IBeadView: 
ClassReference("org.apache.flex.mobile.beads.DatePickerView");
+       IBeadModel: 
ClassReference("org.apache.flex.html.beads.models.DateChooserModel");
+}
+               
+.DatePicker_Month {
+       IBeadView: 
ClassReference("org.apache.flex.html.beads.RangeStepperView");
+       IBeadModel: 
ClassReference("org.apache.flex.html.beads.models.RangeModelExtended");
+       IBeadController: 
ClassReference("org.apache.flex.html.beads.controllers.RangeStepperMouseController");
+}
+
+.DatePicker_Day {
+       IBeadView: 
ClassReference("org.apache.flex.html.beads.RangeStepperView");
+       IBeadModel: 
ClassReference("org.apache.flex.html.beads.models.RangeModelExtended");
+       IBeadController: 
ClassReference("org.apache.flex.html.beads.controllers.RangeStepperMouseController");
+}
+
+.DatePicker_Year {
+       IBeadView: 
ClassReference("org.apache.flex.html.beads.RangeStepperView");
+       IBeadModel: 
ClassReference("org.apache.flex.html.beads.models.RangeModelExtended");
+       IBeadController: 
ClassReference("org.apache.flex.html.beads.controllers.RangeStepperMouseController");
+}

Reply via email to