Repository: flex-asjs Updated Branches: refs/heads/feature/mdl 35c462084 -> fa6ce36ce
Changes to MDL Slider to get valueChange working but maven build is failing Project: http://git-wip-us.apache.org/repos/asf/flex-asjs/repo Commit: http://git-wip-us.apache.org/repos/asf/flex-asjs/commit/fa6ce36c Tree: http://git-wip-us.apache.org/repos/asf/flex-asjs/tree/fa6ce36c Diff: http://git-wip-us.apache.org/repos/asf/flex-asjs/diff/fa6ce36c Branch: refs/heads/feature/mdl Commit: fa6ce36cec94971eafebd4d4cccebde251906b2d Parents: 35c4620 Author: Carlos Rovira <[email protected]> Authored: Mon Dec 19 03:18:52 2016 +0100 Committer: Carlos Rovira <[email protected]> Committed: Mon Dec 19 03:18:52 2016 +0100 ---------------------------------------------------------------------- .../flexjs/MDLExample/src/main/flex/Cards.mxml | 14 +- frameworks/projects/MaterialDesignLite/pom.xml | 21 ++ .../src/main/flex/org/apache/flex/mdl/Slider.as | 54 +--- .../apache/flex/mdl/beads/SliderThumbView.as | 121 ++++++++ .../apache/flex/mdl/beads/SliderTrackView.as | 121 ++++++++ .../beads/controllers/SliderMouseController.as | 287 +++++++++++++++++++ .../apache/flex/mdl/beads/views/SliderView.as | 188 ++++++++++++ .../src/main/resources/defaults.css | 12 +- .../src/main/resources/mdl-manifest.xml | 4 + 9 files changed, 773 insertions(+), 49 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/examples/flexjs/MDLExample/src/main/flex/Cards.mxml ---------------------------------------------------------------------- diff --git a/examples/flexjs/MDLExample/src/main/flex/Cards.mxml b/examples/flexjs/MDLExample/src/main/flex/Cards.mxml index 6369d42..e81715d 100644 --- a/examples/flexjs/MDLExample/src/main/flex/Cards.mxml +++ b/examples/flexjs/MDLExample/src/main/flex/Cards.mxml @@ -22,9 +22,19 @@ limitations under the License. xmlns:mdl="library://ns.apache.org/flexjs/mdl" xmlns="http://www.w3.org/1999/xhtml"> + <fx:Script> + <![CDATA[ + private function onValueChange(event:Event):void + { + trace("value change:", slider.value); + mycard.shadow = slider.value + } + ]]> +</fx:Script> + <mdl:Grid className="center-items"> - <mdl:Card className="demo-card-wide" shadow="2"> + <mdl:Card id="mycard" className="demo-card-wide" shadow="2"> <mdl:CardTitle> <mdl:CardTitleText text="Welcome"/> </mdl:CardTitle> @@ -37,6 +47,8 @@ limitations under the License. </mdl:CardSupportingText> <mdl:CardActions border="true"> <mdl:Button text="Get Started" ripple="true" colored="true"/> + <mdl:Slider id="slider" minimum="0" maximum="16" value="2" stepSize="1" width="200" + valueChange="onValueChange(event)"/> </mdl:CardActions> <mdl:CardMenu> <mdl:Button icon="true" ripple="true"> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/frameworks/projects/MaterialDesignLite/pom.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/pom.xml b/frameworks/projects/MaterialDesignLite/pom.xml index d5fde11..ca2ca23 100644 --- a/frameworks/projects/MaterialDesignLite/pom.xml +++ b/frameworks/projects/MaterialDesignLite/pom.xml @@ -89,15 +89,36 @@ </dependency> <dependency> <groupId>org.apache.flex.flexjs.framework</groupId> + <artifactId>Binding</artifactId> + <version>0.8.0-SNAPSHOT</version> + <type>swc</type> + <classifier>typedefs</classifier> + </dependency> + <dependency> + <groupId>org.apache.flex.flexjs.framework</groupId> <artifactId>Graphics</artifactId> <version>0.8.0-SNAPSHOT</version> <type>swc</type> </dependency> <dependency> <groupId>org.apache.flex.flexjs.framework</groupId> + <artifactId>Graphics</artifactId> + <version>0.8.0-SNAPSHOT</version> + <type>swc</type> + <classifier>typedefs</classifier> + </dependency> + <dependency> + <groupId>org.apache.flex.flexjs.framework</groupId> + <artifactId>Collections</artifactId> + <version>0.8.0-SNAPSHOT</version> + <type>swc</type> + </dependency> + <dependency> + <groupId>org.apache.flex.flexjs.framework</groupId> <artifactId>Collections</artifactId> <version>0.8.0-SNAPSHOT</version> <type>swc</type> + <classifier>typedefs</classifier> </dependency> <dependency> <groupId>org.apache.flex.flexjs.framework</groupId> http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/Slider.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/Slider.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/Slider.as index 18a077b..bcbef9b 100644 --- a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/Slider.as +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/Slider.as @@ -24,6 +24,7 @@ package org.apache.flex.mdl COMPILE::JS { + import org.apache.flex.html.beads.controllers.SliderMouseController; import org.apache.flex.core.WrappedHTMLElement; } @@ -35,6 +36,8 @@ package org.apache.flex.mdl * The Slider uses the following bead types: * * org.apache.flex.core.IBeadModel: the data model, typically an IRangeModel, that holds the Slider values. + * org.apache.flex.core.IBeadView: the bead that constructs the visual parts of the Slider. + * org.apache.flex.core.IBeadController: the bead that handles input. * * @langversion 3.0 * @playerversion Flash 10.2 @@ -80,10 +83,10 @@ package org.apache.flex.mdl { IRangeModel(model).value = newValue; - COMPILE::JS + /*COMPILE::JS { (element as HTMLInputElement).value = IRangeModel(model).value.toString(); - } + }*/ } /** @@ -102,10 +105,10 @@ package org.apache.flex.mdl { IRangeModel(model).minimum = value; - COMPILE::JS + /*COMPILE::JS { (element as HTMLInputElement).min = IRangeModel(model).minimum.toString(); - } + }*/ } /** @@ -124,11 +127,10 @@ package org.apache.flex.mdl { IRangeModel(model).maximum = value; - COMPILE::JS + /*COMPILE::JS { (element as HTMLInputElement).max = IRangeModel(model).maximum.toString(); - } - + }*/ } /** @@ -166,20 +168,11 @@ package org.apache.flex.mdl { IRangeModel(model).stepSize = value; - COMPILE::JS + /*COMPILE::JS { (element as HTMLInputElement).step = IRangeModel(model).stepSize.toString(); - } + }*/ } - - //COMPILE::JS - //private var track:SliderTrackView; - - //COMPILE::JS - //private var thumb:SliderThumbView; - - //COMPILE::JS - //private var controller:SliderMouseController; COMPILE::JS private var input:HTMLInputElement; @@ -209,12 +202,6 @@ package org.apache.flex.mdl element = input as WrappedHTMLElement; - //track = new SliderTrackView(); - //addBead(track); - //thumb = new SliderThumbView(); - //addBead(thumb); - //controller = new SliderMouseController(); - //addBead(controller); positioner = p as WrappedHTMLElement; (input as WrappedHTMLElement).flexjs_wrapper = this; @@ -243,6 +230,7 @@ package org.apache.flex.mdl } /** + * @private */ COMPILE::JS public function snap(value:Number):Number @@ -260,23 +248,5 @@ package org.apache.flex.mdl return n + si; return n; } - - - /** - * @param {number} value The value used to calculate new position of the thumb. - * @return {void} Moves the thumb to the corresponding position. - * - COMPILE::JS - public function setThumbFromValue(value:Number):void - { - var min:Number = model.minimum; - var max:Number = model.maximum; - var p:Number = (value - min) / (max - min); - var xloc:Number = p * (parseInt(track.element.style.width, 10) - - parseInt(thumb.element.style.width, 10)); - - thumb.element.style.left = "" + xloc + 'px'; - } */ - } } http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/SliderThumbView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/SliderThumbView.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/SliderThumbView.as new file mode 100644 index 0000000..5113b5a --- /dev/null +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/SliderThumbView.as @@ -0,0 +1,121 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.mdl.beads +{ + import flash.display.Graphics; + import flash.display.Shape; + import flash.display.SimpleButton; + + import org.apache.flex.core.BeadViewBase; + import org.apache.flex.core.IBeadView; + import org.apache.flex.core.IStrand; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.core.IChild; + + import org.apache.flex.mdl.Button; + + /** + * The SliderThumbView class creates the draggable input element for the + * org.apache.flex.html.Slider component. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class SliderThumbView extends BeadViewBase implements IBeadView + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function SliderThumbView() + { + hitArea = new Shape(); + upView = new Shape(); + downView = new Shape(); + overView = new Shape(); + } + + /** + * @private + */ + private function drawView(g:Graphics, bgColor:uint):void + { + var host:Button = Button(_strand); + var button:SimpleButton = IChild(_strand).$displayObject as SimpleButton; + g.clear(); + g.lineStyle(1,0x000000); + g.beginFill(bgColor,1.0); + g.drawCircle(host.width/2, host.height/2, 10); + g.endFill(); + } + + private var hitArea:Shape; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + * @flexjsignoreimport org.apache.flex.core.WrappedHTMLElement + * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement + */ + override public function set strand(value:IStrand):void + { + super.strand = value; + + drawView(hitArea.graphics, 0xDD0000); + drawView(upView.graphics, 0xFFFFFF); + drawView(downView.graphics, 0x999999); + drawView(overView.graphics, 0xDDDDDD); + + var button:SimpleButton = IChild(value).$displayObject as SimpleButton; + button.upState = upView; + button.downState = downView; + button.overState = overView; + button.hitTestState = hitArea; + + IEventDispatcher(value).addEventListener("widthChanged",sizeChangeHandler); + IEventDispatcher(value).addEventListener("heightChanged",sizeChangeHandler); + } + + private var upView:Shape; + private var downView:Shape; + private var overView:Shape; + + /** + * @private + */ + private function sizeChangeHandler( event:Event ) : void + { + drawView(hitArea.graphics, 0xDD0000); + drawView(upView.graphics, 0xFFFFFF); + drawView(downView.graphics, 0x999999); + drawView(overView.graphics, 0xDDDDDD); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/SliderTrackView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/SliderTrackView.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/SliderTrackView.as new file mode 100644 index 0000000..603a4fb --- /dev/null +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/SliderTrackView.as @@ -0,0 +1,121 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.mdl.beads +{ + import flash.display.Graphics; + import flash.display.Shape; + import flash.display.SimpleButton; + + import org.apache.flex.core.BeadViewBase; + import org.apache.flex.core.IBeadView; + 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.core.IChild; + + import org.apache.flex.mdl.Button; + + /** + * The SliderTrackView class creates the track area for the org.apache.flex.html.Slider + * component. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class SliderTrackView extends BeadViewBase implements IBeadView + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function SliderTrackView() + { + hitArea = new Shape(); + upView = new Shape(); + downView = new Shape(); + overView = new Shape(); + } + + /** + * @private + */ + private function drawView(g:Graphics, bgColor:uint):void + { + var host:Button = Button(_strand); + var button:SimpleButton = IChild(_strand).$displayObject as SimpleButton; + g.clear(); + g.lineStyle(1,0x000000); + g.beginFill(bgColor); + g.drawRect(0, 0, host.width, host.height); + g.endFill(); + } + + private var hitArea:Shape; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + * @flexjsignorecoercion org.apache.flex.core.WrappedHTMLElement + */ + override public function set strand(value:IStrand):void + { + super.strand = value; + + drawView(hitArea.graphics, 0xDD0000); + drawView(upView.graphics, 0xCCCCCC); + drawView(downView.graphics, 0x808080); + drawView(overView.graphics, 0xEEEEEE); + + var button:SimpleButton = IChild(value).$displayObject as SimpleButton; + button.upState = upView; + button.downState = downView; + button.overState = overView; + button.hitTestState = hitArea; + + IEventDispatcher(value).addEventListener("widthChanged",sizeChangeHandler); + IEventDispatcher(value).addEventListener("heightChanged",sizeChangeHandler); + } + + private var upView:Shape; + private var downView:Shape; + private var overView:Shape; + + /** + * @private + */ + private function sizeChangeHandler( event:Event ) : void + { + drawView(hitArea.graphics, 0xDD0000); + drawView(upView.graphics, 0xCCCCCC); + drawView(downView.graphics, 0x808080); + drawView(overView.graphics, 0xEEEEEE); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/SliderMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/SliderMouseController.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/SliderMouseController.as new file mode 100644 index 0000000..8cbc8db --- /dev/null +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/controllers/SliderMouseController.as @@ -0,0 +1,287 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.mdl.beads.controllers +{ + import org.apache.flex.core.IBead; + import org.apache.flex.core.IBeadController; + import org.apache.flex.core.IRangeModel; + 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.events.MouseEvent; + import org.apache.flex.geom.Point; + + import org.apache.flex.html.beads.ISliderView; + import org.apache.flex.mdl.beads.SliderTrackView; + + COMPILE::JS + { + import goog.events; + import goog.events.EventType; + import org.apache.flex.events.BrowserEvent; + + import org.apache.flex.mdl.Slider; + import org.apache.flex.mdl.beads.SliderThumbView; + import org.apache.flex.mdl.beads.SliderTrackView; + } + + /** + * The SliderMouseController class bead handles mouse events on the + * org.apache.flex.html.Slider's component parts (thumb and track) and + * dispatches change events on behalf of the Slider (as well as co-ordinating visual + * changes (such as moving the thumb when the track has been tapped or clicked). + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class SliderMouseController implements IBead, IBeadController + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function SliderMouseController() + { + } + + private var rangeModel:IRangeModel; + + 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 + */ + public function set strand(value:IStrand):void + { + _strand = value; + + rangeModel = UIBase(value).model as IRangeModel; + + COMPILE::SWF + { + var sliderView:ISliderView = value.getBeadByType(ISliderView) as ISliderView; + sliderView.thumb.addEventListener(MouseEvent.MOUSE_DOWN, thumbDownHandler); + + // add handler to detect click on track + sliderView.track.addEventListener(MouseEvent.CLICK, trackClickHandler, false, 99999); + + } + COMPILE::JS + { + var sliderView:ISliderView = value.getBeadByType(ISliderView) as ISliderView; + track = sliderView.track as UIBase; + thumb = sliderView.thumb as UIBase; + + goog.events.listen(track.element, goog.events.EventType.CLICK, + handleTrackClick, false, this); + + goog.events.listen(thumb.element, goog.events.EventType.MOUSEDOWN, + handleThumbDown, false, this); + + } + } + + COMPILE::JS + private var track:UIBase; + + COMPILE::JS + private var thumb:UIBase; + + /** + * @private + */ + COMPILE::SWF + private function thumbDownHandler( event:MouseEvent ) : void + { + UIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_MOVE, thumbMoveHandler); + UIBase(_strand).topMostEventDispatcher.addEventListener(MouseEvent.MOUSE_UP, thumbUpHandler); + + var sliderView:ISliderView = _strand.getBeadByType(ISliderView) as ISliderView; + + origin = new Point(event.screenX, event.screenY); + thumb = new Point(sliderView.thumb.x,sliderView.thumb.y); + } + + /** + * @private + */ + COMPILE::SWF + private function thumbUpHandler( event:MouseEvent ) : void + { + UIBase(_strand).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_MOVE, thumbMoveHandler); + UIBase(_strand).topMostEventDispatcher.removeEventListener(MouseEvent.MOUSE_UP, thumbUpHandler); + + IEventDispatcher(_strand).dispatchEvent(new Event("valueChange")); + } + + COMPILE::SWF + private var origin:Point; + COMPILE::SWF + private var thumb:Point; + + /** + * @private + */ + COMPILE::SWF + private function thumbMoveHandler( event:MouseEvent ) : void + { + var sliderView:ISliderView = _strand.getBeadByType(ISliderView) as ISliderView; + + var deltaX:Number = event.screenX - origin.x; + var thumbW:Number = sliderView.thumb.width/2; + var newX:Number = thumb.x + deltaX; + + var p:Number = newX/sliderView.track.width; + var n:Number = p*(rangeModel.maximum - rangeModel.minimum) + rangeModel.minimum; + + rangeModel.value = n; + + IEventDispatcher(_strand).dispatchEvent(new Event("valueChange")); + } + + /** + * @private + */ + COMPILE::SWF + private function trackClickHandler( event:MouseEvent ) : void + { + event.stopImmediatePropagation(); + + var sliderView:ISliderView = _strand.getBeadByType(ISliderView) as ISliderView; + + var xloc:Number = event.localX; + var p:Number = xloc/sliderView.track.width; + var n:Number = p*(rangeModel.maximum - rangeModel.minimum) + rangeModel.minimum; + + rangeModel.value = n; + + IEventDispatcher(_strand).dispatchEvent(new Event("valueChange")); + } + + /** + */ + COMPILE::JS + private function handleTrackClick(event:BrowserEvent):void + { + var host:Slider = _strand as Slider; + var xloc:Number = event.clientX; + var p:Number = Math.min(1, xloc / parseInt(track.element.style.width, 10)); + var n:Number = p * (host.maximum - host.minimum) + + host.minimum; + + host.value = n; + + origin = parseInt(thumb.element.style.left, 10); + position = parseInt(thumb.element.style.left, 10); + + calcValFromMousePosition(event, true); + + host.dispatchEvent(new org.apache.flex.events.Event('valueChange')); + } + + + /** + */ + COMPILE::JS + private function handleThumbDown(event:BrowserEvent):void + { + var host:Slider = _strand as Slider; + goog.events.listen(host.element, goog.events.EventType.MOUSEUP, + handleThumbUp, false, this); + goog.events.listen(host.element, goog.events.EventType.MOUSEMOVE, + handleThumbMove, false, this); + + origin = event.clientX; + position = parseInt(thumb.element.style.left, 10); + } + + COMPILE::JS + private var origin:Number; + COMPILE::JS + private var position:int; + + /** + */ + COMPILE::JS + private function handleThumbUp(event:BrowserEvent):void + { + var host:Slider = _strand as Slider; + goog.events.unlisten(host.element, goog.events.EventType.MOUSEUP, + handleThumbUp, false, this); + goog.events.unlisten(host.element, goog.events.EventType.MOUSEMOVE, + handleThumbMove, false, this); + + calcValFromMousePosition(event, false); + + host.dispatchEvent(new org.apache.flex.events.Event('valueChange')); + } + + + /** + */ + COMPILE::JS + private function handleThumbMove(event:BrowserEvent):void + { + var host:Slider = _strand as Slider; + calcValFromMousePosition(event, false); + + host.dispatchEvent(new org.apache.flex.events.Event('valueChange')); + } + + + /** + */ + COMPILE::JS + private function calcValFromMousePosition(event:BrowserEvent, useOffset:Boolean):void + { + var host:Slider = _strand as Slider; + var deltaX:Number = (useOffset ? event.offsetX : event.clientX) - origin; + var thumbW:int = parseInt(thumb.element.style.width, 10) / 2; + var newX:Number = position + deltaX; + + var p:Number = newX / parseInt(track.element.style.width, 10); + var n:Number = p * (host.maximum - host.minimum) + + host.minimum; + n = host.snap(n); + if (n < host.minimum) n = host.minimum; + else if (n > host.maximum) n = host.maximum; + + p = (n - host.minimum) / (host.maximum - + host.minimum); + newX = p * parseInt(track.element.style.width, 10); + + thumb.element.style.left = String(newX - + parseInt(thumb.element.style.width, 10) / 2) + 'px'; + + host.value = n; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/SliderView.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/SliderView.as b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/SliderView.as new file mode 100644 index 0000000..d578b70 --- /dev/null +++ b/frameworks/projects/MaterialDesignLite/src/main/flex/org/apache/flex/mdl/beads/views/SliderView.as @@ -0,0 +1,188 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.mdl.beads.views +{ + COMPILE::SWF { + import flash.display.DisplayObject; + import flash.display.Sprite; + } + + import org.apache.flex.core.BeadViewBase; + import org.apache.flex.core.IBead; + import org.apache.flex.core.IBeadModel; + import org.apache.flex.core.IBeadView; + import org.apache.flex.core.IRangeModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.UIBase; + import org.apache.flex.core.IUIBase; + import org.apache.flex.core.ValuesManager; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + + import org.apache.flex.mdl.Button; + import org.apache.flex.html.beads.ISliderView; + + /** + * The SliderView class creates the visual elements of the org.apache.flex.html.Slider + * component. The Slider has a track and a thumb control which are also created with view beads. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class SliderView extends BeadViewBase implements ISliderView, IBeadView + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function SliderView() + { + } + + private var rangeModel:IRangeModel; + + /** + * @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; + + COMPILE::SWF { + var s:UIBase = UIBase(_strand); + + _track = new Button(); + _track.addBead(new (ValuesManager.valuesImpl.getValue(_strand, "iTrackView")) as IBead); + _track.className = "SliderTrack"; + s.addElement(_track); + + _thumb = new Button(); + _thumb.addBead(new (ValuesManager.valuesImpl.getValue(_strand, "iThumbView")) as IBead); + _thumb.className = "SliderThumb"; + s.addElement(_thumb); + + } + COMPILE::JS { + _track = new Button(); + //_track.className = "SliderTrack"; + UIBase(_strand).addElement(_track); + + _thumb = new Button(); + //_thumb.className = "SliderThumb"; + UIBase(_strand).addElement(_thumb); + } + + IEventDispatcher(value).addEventListener("widthChanged",sizeChangeHandler); + IEventDispatcher(value).addEventListener("heightChanged",sizeChangeHandler); + + rangeModel = _strand.getBeadByType(IBeadModel) as IRangeModel; + + // listen for changes to the model and adjust the UI accordingly. + IEventDispatcher(rangeModel).addEventListener("valueChange",modelChangeHandler); + IEventDispatcher(rangeModel).addEventListener("minimumChange",modelChangeHandler); + IEventDispatcher(rangeModel).addEventListener("maximumChange",modelChangeHandler); + IEventDispatcher(rangeModel).addEventListener("stepSizeChange",modelChangeHandler); + IEventDispatcher(rangeModel).addEventListener("snapIntervalChange",modelChangeHandler); + + sizeChangeHandler(null); + } + + private var _track:Button; + private var _thumb:Button; + + + /** + * The track component. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get track():IUIBase + { + return _track; + } + + /** + * The thumb component. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function get thumb():IUIBase + { + return _thumb; + } + + /** + * @private + */ + private function sizeChangeHandler( event:Event ) : void + { + var host:UIBase = UIBase(_strand); + var w:Number = host.width; + var h:Number = host.height; + + _thumb.width = 20; + _thumb.height = host.height; + + // the track is inset 1/2 of the thumbwidth so the thumb can + // overlay the track on either end with the thumb center being + // on the track's edge + _track.width = host.width - _thumb.width; + _track.height = 5; + _track.x = _thumb.width/2; + _track.y = (host.height - _track.height)/2; + + setThumbPositionFromValue(rangeModel.value); + } + + /** + * @private + */ + private function modelChangeHandler( event:Event ) : void + { + setThumbPositionFromValue(rangeModel.value); + } + + /** + * @private + */ + private function setThumbPositionFromValue( value:Number ) : void + { + var p:Number = (value-rangeModel.minimum)/(rangeModel.maximum-rangeModel.minimum); + var xloc:Number = (p*_track.width); + _thumb.x = xloc; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/frameworks/projects/MaterialDesignLite/src/main/resources/defaults.css ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/resources/defaults.css b/frameworks/projects/MaterialDesignLite/src/main/resources/defaults.css index 2894c29..810be12 100644 --- a/frameworks/projects/MaterialDesignLite/src/main/resources/defaults.css +++ b/frameworks/projects/MaterialDesignLite/src/main/resources/defaults.css @@ -28,15 +28,15 @@ CheckBox Slider { IBeadModel: ClassReference("org.apache.flex.html.beads.models.RangeModel"); + iBeadView: ClassReference("org.apache.flex.mdl.beads.views.SliderView"); + iBeadController: ClassReference("org.apache.flex.mdl.beads.controllers.SliderMouseController"); } -/*Slider +Slider { - iBeadView: ClassReference("org.apache.flex.html.beads.SliderView"); - iBeadController: ClassReference("org.apache.flex.html.beads.controllers.SliderMouseController"); - iThumbView: ClassReference("org.apache.flex.html.beads.SliderThumbView"); - iTrackView: ClassReference("org.apache.flex.html.beads.SliderTrackView"); -}*/ + iThumbView: ClassReference("org.apache.flex.mdl.beads.SliderThumbView"); + iTrackView: ClassReference("org.apache.flex.mdl.beads.SliderTrackView"); +} List { http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/fa6ce36c/frameworks/projects/MaterialDesignLite/src/main/resources/mdl-manifest.xml ---------------------------------------------------------------------- diff --git a/frameworks/projects/MaterialDesignLite/src/main/resources/mdl-manifest.xml b/frameworks/projects/MaterialDesignLite/src/main/resources/mdl-manifest.xml index 69059bd..4ad2ebd 100644 --- a/frameworks/projects/MaterialDesignLite/src/main/resources/mdl-manifest.xml +++ b/frameworks/projects/MaterialDesignLite/src/main/resources/mdl-manifest.xml @@ -30,6 +30,10 @@ <component id="Restrict" class="org.apache.flex.mdl.beads.Restrict"/> <component id="Disabled" class="org.apache.flex.mdl.beads.Disabled"/> <component id="Slider" class="org.apache.flex.mdl.Slider"/> + <component id="SliderView" class="org.apache.flex.mdl.beads.views.SliderView"/> + <component id="SliderTrackView" class="org.apache.flex.mdl.beads.SliderTrackView"/> + <component id="SliderThumbView" class="org.apache.flex.mdl.beads.SliderThumbView"/> + <component id="SliderMouseController" class="org.apache.flex.mdl.beads.controllers.SliderMouseController"/> <component id="Badge" class="org.apache.flex.mdl.beads.Badge"/> <component id="Menu" class="org.apache.flex.mdl.Menu"/> <component id="MenuItem" class="org.apache.flex.mdl.MenuItem"/>
