http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateChooserMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateChooserMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateChooserMouseController.as new file mode 100644 index 0000000..c0bed5b --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateChooserMouseController.as @@ -0,0 +1,127 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import org.apache.flex.html.beads.DateChooserView; + import org.apache.flex.html.beads.models.DateChooserModel; + import org.apache.flex.html.supportClasses.DateChooserButton; + + import org.apache.flex.core.IBeadController; + import org.apache.flex.core.IBeadModel; + import org.apache.flex.core.IBeadView; + import org.apache.flex.core.IStrand; + import org.apache.flex.events.Event; + import org.apache.flex.events.MouseEvent; + import org.apache.flex.events.IEventDispatcher; + + /** + * The DateChooserMouseController class is responsible for listening to + * mouse event related to the DateChooser. Events such as selecting a date + * or changing the calendar. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class DateChooserMouseController implements IBeadController + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function DateChooserMouseController() + { + } + + 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; + + var view:DateChooserView = value.getBeadByType(IBeadView) as DateChooserView; + view.prevMonthButton.addEventListener("click", prevMonthClickHandler); + view.nextMonthButton.addEventListener("click", nextMonthClickHandler); + + var dayButtons:Array = view.dayButtons; + for(var i:int=0; i < dayButtons.length; i++) { + IEventDispatcher(dayButtons[i]).addEventListener("click", dayButtonClickHandler); + } + } + + /** + * @private + */ + private function prevMonthClickHandler(event:Event):void + { + var model:DateChooserModel = _strand.getBeadByType(IBeadModel) as DateChooserModel; + var month:Number = model.displayedMonth - 1; + var year:Number = model.displayedYear; + if (month < 0) { + month = 11; + year--; + } + model.displayedMonth = month; + model.displayedYear = year; + } + + /** + * @private + */ + private function nextMonthClickHandler(event:Event):void + { + var model:DateChooserModel = _strand.getBeadByType(IBeadModel) as DateChooserModel; + var month:Number = model.displayedMonth + 1; + var year:Number = model.displayedYear; + if (month >= 12) { + month = 0; + year++; + } + model.displayedMonth = month; + model.displayedYear = year; + } + + /** + * @private + */ + private function dayButtonClickHandler(event:MouseEvent):void + { + var dateButton:DateChooserButton = event.target as DateChooserButton; + if (dateButton.dayOfMonth > 0) { + var model:DateChooserModel = _strand.getBeadByType(IBeadModel) as DateChooserModel; + var newDate:Date = new Date(model.displayedYear,model.displayedMonth,dateButton.dayOfMonth); + model.selectedDate = newDate; + IEventDispatcher(_strand).dispatchEvent( new Event("change") ); + } + } + } +}
http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateFieldMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateFieldMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateFieldMouseController.as new file mode 100644 index 0000000..c4f130a --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DateFieldMouseController.as @@ -0,0 +1,96 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import org.apache.flex.core.IBeadController; + 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.MouseEvent; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.html.beads.DateFieldView; + + /** + * The DateFieldMouseController class is responsible for monitoring + * the mouse events on the elements of the DateField. A click on the + * DateField's menu button triggers the pop-up, for example. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class DateFieldMouseController implements IBeadController + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function DateFieldMouseController() + { + } + + 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; + + var viewBead:DateFieldView = _strand.getBeadByType(DateFieldView) as DateFieldView; + IEventDispatcher(viewBead.menuButton).addEventListener("click", clickHandler); + } + + /** + * @private + */ + private function clickHandler(event:MouseEvent):void + { + var viewBead:DateFieldView = _strand.getBeadByType(DateFieldView) as DateFieldView; + viewBead.popUpVisible = true; + IEventDispatcher(viewBead.popUp).addEventListener("change", changeHandler); + } + + /** + * @private + */ + private function changeHandler(event:Event):void + { + var viewBead:DateFieldView = _strand.getBeadByType(DateFieldView) as DateFieldView; + + var model:IDateChooserModel = _strand.getBeadByType(IDateChooserModel) as IDateChooserModel; + model.selectedDate = IDateChooserModel(viewBead.popUp.getBeadByType(IDateChooserModel)).selectedDate; + + viewBead.popUpVisible = false; + IEventDispatcher(_strand).dispatchEvent(new Event("change")); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DropDownListController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DropDownListController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DropDownListController.as new file mode 100644 index 0000000..c279dc5 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/DropDownListController.as @@ -0,0 +1,117 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import flash.display.DisplayObject; + import flash.geom.Point; + + import org.apache.flex.core.IBead; + import org.apache.flex.core.IBeadController; + import org.apache.flex.core.ISelectionModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.IUIBase; + 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.html.beads.IDropDownListView; + + /** + * The DropDownListController class is the controller for + * org.apache.flex.html.DropDownList. Controllers + * watch for events from the interactive portions of a View and + * update the data model or dispatch a semantic event. + * This controller watches for the click event and displays the + * dropdown/popup, and watches the dropdown/popup for change events + * and updates the selection model accordingly. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class DropDownListController implements IBead, IBeadController + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function DropDownListController() + { + } + + 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; + IEventDispatcher(value).addEventListener(org.apache.flex.events.MouseEvent.CLICK, clickHandler); + } + + private function clickHandler(event:org.apache.flex.events.MouseEvent):void + { + var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView; + var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; + var popUpModel:ISelectionModel = UIBase(viewBead.popUp).model as ISelectionModel; + DisplayObject(viewBead.popUp).width = DisplayObject(_strand).width; + popUpModel.dataProvider = selectionModel.dataProvider; + popUpModel.labelField = selectionModel.labelField; + viewBead.popUpVisible = true; // adds to display list as well + popUpModel.selectedIndex = selectionModel.selectedIndex; + var pt:Point = new Point(DisplayObject(_strand).x, DisplayObject(_strand).y + DisplayObject(_strand).height); + pt = DisplayObject(_strand).parent.localToGlobal(pt); + DisplayObject(viewBead.popUp).x = pt.x; + DisplayObject(viewBead.popUp).y = pt.y; + IEventDispatcher(viewBead.popUp).addEventListener("change", changeHandler); + IUIBase(_strand).topMostEventDispatcher.addEventListener(org.apache.flex.events.MouseEvent.CLICK, dismissHandler); + } + + private function dismissHandler(event:org.apache.flex.events.MouseEvent):void + { + if (event.target == _strand) return; + + IUIBase(_strand).topMostEventDispatcher.removeEventListener(org.apache.flex.events.MouseEvent.CLICK, dismissHandler); + var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView; + viewBead.popUpVisible = false; + } + + private function changeHandler(event:Event):void + { + var viewBead:IDropDownListView = _strand.getBeadByType(IDropDownListView) as IDropDownListView; + viewBead.popUpVisible = false; + var selectionModel:ISelectionModel = _strand.getBeadByType(ISelectionModel) as ISelectionModel; + var popUpModel:ISelectionModel = UIBase(viewBead.popUp).model as ISelectionModel; + selectionModel.selectedIndex = popUpModel.selectedIndex; + IEventDispatcher(_strand).dispatchEvent(new Event("change")); + } + + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/EditableTextKeyboardController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/EditableTextKeyboardController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/EditableTextKeyboardController.as new file mode 100644 index 0000000..4a8115f --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/EditableTextKeyboardController.as @@ -0,0 +1,86 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import org.apache.flex.core.CSSTextField; + import org.apache.flex.core.IBead; + import org.apache.flex.core.IBeadController; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.ITextModel; + import org.apache.flex.core.UIBase; + import org.apache.flex.html.beads.ITextFieldView; + + /** + * The EditableTextKeyboardController class bead intercepts keyboard events on the + * component's text field and emits change events. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class EditableTextKeyboardController implements IBead, IBeadController + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function EditableTextKeyboardController() + { + } + + private var model:ITextModel; + private var textField:CSSTextField; + + 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; + + model = UIBase(_strand).model as ITextModel; + + var viewBead:ITextFieldView = _strand.getBeadByType(ITextFieldView) as ITextFieldView; + textField = viewBead.textField; + textField.addEventListener("change", inputChangeHandler); + } + + /** + * @private + */ + private function inputChangeHandler( event:Object ) : void + { + // this will otherwise bubble an event of flash.events.Event + event.stopImmediatePropagation(); + model.text = textField.text; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/HScrollBarMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/HScrollBarMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/HScrollBarMouseController.as new file mode 100644 index 0000000..4abaffe --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/HScrollBarMouseController.as @@ -0,0 +1,101 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import flash.display.DisplayObject; + + import org.apache.flex.events.Event; + import org.apache.flex.events.MouseEvent; + import org.apache.flex.events.IEventDispatcher; + + /** + * The HScrollBarMouseController class is the controller for + * org.apache.flex.html.supportClasses.HScrollBar + * that acts as the Horizontal ScrollBar. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class HScrollBarMouseController extends ScrollBarMouseControllerBase + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function HScrollBarMouseController() + { + } + + /** + * @private + */ + override protected function trackClickHandler(event:MouseEvent):void + { + if (sbView.thumb.visible) + { + if (event.localX < sbView.thumb.x) + { + sbModel.value = snap(Math.max(sbModel.minimum, sbModel.value - sbModel.pageStepSize)); + IEventDispatcher(strand).dispatchEvent(new Event("scroll")); + } + else + { + sbModel.value = snap(Math.min(sbModel.maximum - sbModel.pageSize, sbModel.value + sbModel.pageStepSize)); + IEventDispatcher(strand).dispatchEvent(new Event("scroll")); + } + } + } + + private var thumbDownX:Number; + private var lastThumbX:Number; + + /** + * @private + */ + override protected function thumbMouseDownHandler(event:MouseEvent):void + { + sbView.thumb.stage.addEventListener(MouseEvent.MOUSE_MOVE, thumbMouseMoveHandler); + sbView.thumb.stage.addEventListener(MouseEvent.MOUSE_UP, thumbMouseUpHandler); + thumbDownX = event.screenX; + lastThumbX = sbView.thumb.x; + } + + private function thumbMouseMoveHandler(event:MouseEvent):void + { + var thumb:DisplayObject = sbView.thumb; + var track:DisplayObject = sbView.track; + thumb.x = Math.max(track.x, Math.min(lastThumbX + (event.screenX - thumbDownX), track.x + track.width - thumb.width)); + var newValue:Number = snap((thumb.x - track.x) / (track.width - thumb.width) * (sbModel.maximum - sbModel.minimum - sbModel.pageSize)); + sbModel.value = newValue; + IEventDispatcher(strand).dispatchEvent(new Event("scroll")); + } + + private function thumbMouseUpHandler(event:MouseEvent):void + { + sbView.thumb.stage.removeEventListener(MouseEvent.MOUSE_MOVE, thumbMouseMoveHandler); + sbView.thumb.stage.removeEventListener(MouseEvent.MOUSE_UP, thumbMouseUpHandler); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as new file mode 100644 index 0000000..33c6aa2 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ItemRendererMouseController.as @@ -0,0 +1,209 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import org.apache.flex.core.IBeadController; + import org.apache.flex.core.ISelectableItemRenderer; + import org.apache.flex.core.IStrand; +COMPILE::SWF { + import org.apache.flex.events.Event; + import org.apache.flex.events.MouseEvent; +} +COMPILE::JS { + import org.apache.flex.core.UIBase; + import org.apache.flex.core.WrappedHTMLElement; + import org.apache.flex.events.BrowserEvent; + import goog.events.Event; + import goog.events.EventType; + import goog.events; +} + import org.apache.flex.events.ItemClickedEvent; + + /** + * The ItemRendererMouseController class can mouse events in itemRenderers. This + * includes roll-overs, mouse down, and mouse up. These platform-specific events are then + * re-dispatched as FlexJS events. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + * @flexjsignoreimport goog.events.Event + */ + public class ItemRendererMouseController implements IBeadController + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function ItemRendererMouseController() + { + } + + private var renderer:ISelectableItemRenderer; + 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; + renderer = value as ISelectableItemRenderer; + + COMPILE::SWF { + renderer.addEventListener(MouseEvent.ROLL_OVER, rollOverHandler); + renderer.addEventListener(MouseEvent.ROLL_OUT, rollOutHandler); + renderer.addEventListener(MouseEvent.MOUSE_DOWN, mouseDownHandler); + renderer.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); + } + + COMPILE::JS { + var element:WrappedHTMLElement = (_strand as UIBase).element; + + goog.events.listen(element, goog.events.EventType.MOUSEOVER, this.handleMouseOver); + goog.events.listen(element, goog.events.EventType.MOUSEOUT, this.handleMouseOut); + goog.events.listen(element, goog.events.EventType.MOUSEDOWN, this.handleMouseDown); + goog.events.listen(element, goog.events.EventType.MOUSEUP, this.handleMouseUp); + } + } + + /** + * @private + */ + COMPILE::SWF + protected function rollOverHandler(event:MouseEvent):void + { + var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (target) + { + target.dispatchEvent(new Event("itemRollOver",true)); + } + } + + COMPILE::JS + protected function handleMouseOver(event:BrowserEvent):void + { + var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (target) { + target.dispatchEvent(new Event("itemRollOver",true)); + } + } + + /** + * @private + */ + COMPILE::SWF + protected function rollOutHandler(event:MouseEvent):void + { + var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (target) + { + target.dispatchEvent(new Event("itemRollOut",true)); + } + } + + COMPILE::JS + protected function handleMouseOut(event:BrowserEvent):void + { + var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (target) + { + target.dispatchEvent(new Event("itemRollOut",true)); + } + } + + /** + * @private + */ + COMPILE::SWF + protected function mouseDownHandler(event:MouseEvent):void + { + var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (target) + { + target.down = true; + target.addEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); + } + } + + /** + * @private + */ + COMPILE::JS + protected function handleMouseDown(event:BrowserEvent):void + { + var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (target) + { + target.down = true; + target.hovered = false; + } + } + + /** + * @private + */ + COMPILE::SWF + protected function mouseUpHandler(event:MouseEvent):void + { + var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (target) + { + event.stopImmediatePropagation(); + + var newEvent:ItemClickedEvent = new ItemClickedEvent("itemClicked"); + newEvent.data = target.data; + newEvent.multipleSelection = event.shiftKey; + newEvent.index = target.index; + + target.removeEventListener(MouseEvent.MOUSE_UP, mouseUpHandler); + target.dispatchEvent(newEvent); + } + } + + /** + * @private + */ + COMPILE::JS + protected function handleMouseUp(event:BrowserEvent):void + { + var target:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (target) + { + var newEvent:ItemClickedEvent = new ItemClickedEvent("itemClicked"); + newEvent.data = target.data; + newEvent.multipleSelection = event.shiftKey; + newEvent.index = target.index; + + target.dispatchEvent(newEvent); + } + } + + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as new file mode 100644 index 0000000..77ab6f5 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ListSingleSelectionMouseController.as @@ -0,0 +1,153 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import org.apache.flex.core.IBeadController; + import org.apache.flex.core.IItemRendererParent; + import org.apache.flex.core.IRollOverModel; + import org.apache.flex.core.ISelectableItemRenderer; + import org.apache.flex.core.ISelectionModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.events.ItemAddedEvent; + import org.apache.flex.events.ItemRemovedEvent; + import org.apache.flex.events.MouseEvent; + import org.apache.flex.html.beads.IListView; + + import org.apache.flex.events.ItemClickedEvent; + + /** + * The ListSingleSelectionMouseController class is a controller for + * org.apache.flex.html.List. Controllers + * watch for events from the interactive portions of a View and + * update the data model or dispatch a semantic event. + * This controller watches for events from the item renderers + * and updates an ISelectionModel (which only supports single + * selection). Other controller/model pairs would support + * various kinds of multiple selection. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class ListSingleSelectionMouseController implements IBeadController + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function ListSingleSelectionMouseController() + { + } + + /** + * The model. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected var listModel:ISelectionModel; + + /** + * The view. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected var listView:IListView; + + /** + * The parent of the item renderers. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected var dataGroup:IItemRendererParent; + + 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; + listModel = value.getBeadByType(ISelectionModel) as ISelectionModel; + listView = value.getBeadByType(IListView) as IListView; + IEventDispatcher(_strand).addEventListener("itemAdded", handleItemAdded); + IEventDispatcher(_strand).addEventListener("itemRemoved", handleItemRemoved); + } + + protected function handleItemAdded(event:ItemAddedEvent):void + { + IEventDispatcher(event.item).addEventListener("itemClicked", selectedHandler); + IEventDispatcher(event.item).addEventListener("itemRollOver", rolloverHandler); + IEventDispatcher(event.item).addEventListener("itemRollOut", rolloutHandler); + } + + protected function handleItemRemoved(event:ItemAddedEvent):void + { + IEventDispatcher(event.item).removeEventListener("itemClicked", selectedHandler); + IEventDispatcher(event.item).removeEventListener("itemRollOver", rolloverHandler); + IEventDispatcher(event.item).removeEventListener("itemRollOut", rolloutHandler); + } + + protected function selectedHandler(event:ItemClickedEvent):void + { + listModel.selectedIndex = event.index; + listView.host.dispatchEvent(new Event("change")); + } + + protected function rolloverHandler(event:Event):void + { + var renderer:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (renderer) { + IRollOverModel(listModel).rollOverIndex = renderer.index; + } + } + + protected function rolloutHandler(event:Event):void + { + var renderer:ISelectableItemRenderer = event.currentTarget as ISelectableItemRenderer; + if (renderer) { + renderer.hovered = false; + renderer.down = false; + IRollOverModel(listModel).rollOverIndex = -1; + } + } + + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/RangeStepperMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/RangeStepperMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/RangeStepperMouseController.as new file mode 100644 index 0000000..b566d55 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/RangeStepperMouseController.as @@ -0,0 +1,94 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import org.apache.flex.core.IBeadController; + import org.apache.flex.core.IStrand; + import org.apache.flex.core.UIBase; + import org.apache.flex.events.MouseEvent; + import org.apache.flex.html.ImageButton; + import org.apache.flex.html.beads.RangeStepperView; + import org.apache.flex.html.beads.models.RangeModel; + + /** + * The RangeStepperMouseController bead feeds mouse events to the RangeStepper and its + * components. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class RangeStepperMouseController implements IBeadController + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function RangeStepperMouseController() + { + } + + private var _strand:IStrand; + + private var _incrButton:ImageButton; + private var _decrButton:ImageButton; + + /** + * @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; + + var stepperView:RangeStepperView = _strand.getBeadByType(RangeStepperView) as RangeStepperView; + + _incrButton = stepperView.incrementButton; + _incrButton.addEventListener(MouseEvent.CLICK, handleIncrClick); + + _decrButton = stepperView.decrementButton; + _decrButton.addEventListener(MouseEvent.CLICK, handleDecrClick); + } + + private function handleIncrClick(event:MouseEvent):void + { + var model:RangeModel = (_strand as UIBase).model as RangeModel; + var nextValue:Number = model.value + 1; + if (nextValue >= model.maximum) nextValue = model.maximum; + model.value = nextValue; + } + + private function handleDecrClick(event:MouseEvent):void + { + var model:RangeModel = (_strand as UIBase).model as RangeModel; + var nextValue:Number = model.value - 1; + if (nextValue < model.minimum) nextValue = model.minimum; + model.value = nextValue; + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ScrollBarMouseControllerBase.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ScrollBarMouseControllerBase.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ScrollBarMouseControllerBase.as new file mode 100644 index 0000000..8d9d27b --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/ScrollBarMouseControllerBase.as @@ -0,0 +1,184 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import org.apache.flex.core.IBeadController; + import org.apache.flex.core.IScrollBarModel; + import org.apache.flex.core.IStrand; + import org.apache.flex.events.Event; + import org.apache.flex.events.IEventDispatcher; + import org.apache.flex.events.MouseEvent; + import org.apache.flex.html.beads.IScrollBarView; + + /** + * The ScrollBarMouseControllerBase class is the base class + * for ScrollBarMouseControllers such as VScrollBarMouseController. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class ScrollBarMouseControllerBase implements IBeadController + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function ScrollBarMouseControllerBase() + { + } + + /** + * The data model + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected var sbModel:IScrollBarModel; + + /** + * The view + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected var sbView:IScrollBarView; + + private var _strand:IStrand; + + /** + * @private + */ + public function get strand():IStrand + { + return _strand; + } + + /** + * @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; + sbModel = value.getBeadByType(IScrollBarModel) as IScrollBarModel; + sbView = value.getBeadByType(IScrollBarView) as IScrollBarView; + sbView.decrement.addEventListener(MouseEvent.CLICK, decrementClickHandler); + sbView.increment.addEventListener(MouseEvent.CLICK, incrementClickHandler); + sbView.decrement.addEventListener("buttonRepeat", decrementClickHandler); + sbView.increment.addEventListener("buttonRepeat", incrementClickHandler); + sbView.track.addEventListener(MouseEvent.CLICK, trackClickHandler); + sbView.thumb.addEventListener(MouseEvent.MOUSE_DOWN, thumbMouseDownHandler); + } + + /** + * Force the input number to be "snapped" to the snapInterval. + * + * @param value The input number. + * @return The input number "snapped" to the snapInterval. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected function snap(value:Number):Number + { + var si:Number = sbModel.snapInterval; + var n:Number = Math.round((value - sbModel.minimum) / si) * si + sbModel.minimum; + if (value > 0) + { + if (value - n < n + si - value) + return n; + return n + si; + + } + if (value - n > n + si - value) + return n + si; + return n; + } + + /** + * Updates the model when the decrement button is clicked. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected function decrementClickHandler(event:Event):void + { + sbModel.value = snap(Math.max(sbModel.minimum, sbModel.value - sbModel.stepSize)); + IEventDispatcher(_strand).dispatchEvent(new Event("scroll")); + } + + /** + * Updates the model when the increment button is clicked. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected function incrementClickHandler(event:Event):void + { + sbModel.value = snap(Math.min(sbModel.maximum - sbModel.pageSize, sbModel.value + sbModel.stepSize)); + IEventDispatcher(_strand).dispatchEvent(new Event("scroll")); + } + + /** + * Handles a click in the track. Must be overridden. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected function trackClickHandler(event:MouseEvent):void + { + } + + /** + * Handles a mouse down on the thumb. Must be overridden. + * Subclasses process the mouseMove and mouseUp events. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + protected function thumbMouseDownHandler(event:MouseEvent):void + { + } + + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SliderMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SliderMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SliderMouseController.as new file mode 100644 index 0000000..487b365 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SliderMouseController.as @@ -0,0 +1,286 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.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.html.beads.SliderTrackView; + + COMPILE::JS + { + import goog.events; + import goog.events.EventType; + import org.apache.flex.events.BrowserEvent; + import org.apache.flex.html.Slider; + import org.apache.flex.html.beads.SliderThumbView; + import org.apache.flex.html.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 + { + track = value.getBeadByType( + SliderTrackView) as SliderTrackView; + thumb = value.getBeadByType( + SliderThumbView) as SliderThumbView; + + 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:SliderTrackView; + + COMPILE::JS + private var thumb:SliderThumbView; + + /** + * @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/UIBase(_strand).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/UIBase(_strand).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/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SpinnerMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SpinnerMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SpinnerMouseController.as new file mode 100644 index 0000000..2a898d8 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/SpinnerMouseController.as @@ -0,0 +1,124 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + 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.html.TextButton; + import org.apache.flex.html.beads.ISpinnerView; + COMPILE::JS + { + import org.apache.flex.html.Spinner; + import org.apache.flex.html.supportClasses.SpinnerButton; + import goog.events; + import goog.events.EventType; + } + + /** + * The SpinnerMouseController class bead handles mouse events on the + * org.apache.flex.html.Spinner's component buttons, changing the + * value of the Spinner. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class SpinnerMouseController implements IBeadController + { + /** + * constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function SpinnerMouseController() + { + } + + private var rangeModel:IRangeModel; + + private var _strand:IStrand; + + /** + * @copy org.apache.flex.core.IBead#strand + * + * @flexjsignorecoercion org.apache.flex.html.Spinner + * @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 spinnerBead:ISpinnerView = value.getBeadByType(ISpinnerView) as ISpinnerView; + spinnerBead.decrement.addEventListener(MouseEvent.CLICK, decrementClickHandler); + spinnerBead.decrement.addEventListener("buttonRepeat", decrementClickHandler); + spinnerBead.increment.addEventListener(MouseEvent.CLICK, incrementClickHandler); + spinnerBead.increment.addEventListener("buttonRepeat", incrementClickHandler); + } + + COMPILE::JS + { + var spinnerBead:ISpinnerView = value.getBeadByType(ISpinnerView) as ISpinnerView; + + var incrementButton:SpinnerButton = spinnerBead.increment; + var decrementButton:SpinnerButton = spinnerBead.decrement; + + goog.events.listen(incrementButton.element, goog.events.EventType.CLICK, + incrementClickHandler); + + goog.events.listen(decrementButton.element, goog.events.EventType.CLICK, + decrementClickHandler); + + } + } + + /** + * @private + */ + private function decrementClickHandler( event:org.apache.flex.events.MouseEvent ) : void + { + rangeModel.value = Math.max(rangeModel.minimum, rangeModel.value - rangeModel.stepSize); + IEventDispatcher(_strand).dispatchEvent(new Event("valueChange")); + } + + /** + * @private + */ + private function incrementClickHandler( event:org.apache.flex.events.MouseEvent ) : void + { + rangeModel.value = Math.min(rangeModel.maximum, rangeModel.value + rangeModel.stepSize); + IEventDispatcher(_strand).dispatchEvent(new Event("valueChange")); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as new file mode 100644 index 0000000..a668fa4 --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/TreeSingleSelectionMouseController.as @@ -0,0 +1,82 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import org.apache.flex.collections.FlattenedList; + import org.apache.flex.html.Tree + import org.apache.flex.events.ItemClickedEvent; + import org.apache.flex.core.IStrand; + import org.apache.flex.events.Event; + + /** + * The TreeSingleSelectionMouseController class is a controller for + * org.apache.flex.html.Tree. This controller watches for selection + * events on the tree item renderers and uses those events to open + * or close nodes of the tree. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class TreeSingleSelectionMouseController extends ListSingleSelectionMouseController + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function TreeSingleSelectionMouseController() + { + super(); + } + + private var _strand:IStrand; + + /** + * @private + */ + override public function set strand(value:IStrand):void + { + _strand = value; + super.strand = value; + } + + /** + * @private + */ + override protected function selectedHandler(event:ItemClickedEvent):void + { + var tree:Tree = _strand as Tree; + var flatList:FlattenedList = listModel.dataProvider as FlattenedList; + var node:Object = event.data; + + if (flatList.isOpen(node)) { + flatList.closeNode(node); + } else { + flatList.openNode(node); + } + + listModel.dispatchEvent(new Event("dataProviderChanged")); + } + } +} http://git-wip-us.apache.org/repos/asf/flex-asjs/blob/d8221452/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/VScrollBarMouseController.as ---------------------------------------------------------------------- diff --git a/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/VScrollBarMouseController.as b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/VScrollBarMouseController.as new file mode 100644 index 0000000..611f6dd --- /dev/null +++ b/frameworks/projects/Basic/src/main/flex/org/apache/flex/html/beads/controllers/VScrollBarMouseController.as @@ -0,0 +1,101 @@ +//////////////////////////////////////////////////////////////////////////////// +// +// 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.html.beads.controllers +{ + import flash.display.DisplayObject; + + import org.apache.flex.events.Event; + import org.apache.flex.events.MouseEvent; + import org.apache.flex.events.IEventDispatcher; + + /** + * The VScrollBarMouseController class is the controller for + * org.apache.flex.html.supportClasses.ScrollBar + * that acts as the Vertical ScrollBar. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public class VScrollBarMouseController extends ScrollBarMouseControllerBase + { + /** + * Constructor. + * + * @langversion 3.0 + * @playerversion Flash 10.2 + * @playerversion AIR 2.6 + * @productversion FlexJS 0.0 + */ + public function VScrollBarMouseController() + { + } + + /** + * @private + */ + override protected function trackClickHandler(event:MouseEvent):void + { + if (sbView.thumb.visible) + { + if (event.localY < sbView.thumb.y) + { + sbModel.value = snap(Math.max(sbModel.minimum, sbModel.value - sbModel.pageStepSize)); + IEventDispatcher(strand).dispatchEvent(new Event("scroll")); + } + else + { + sbModel.value = snap(Math.min(sbModel.maximum - sbModel.pageSize, sbModel.value + sbModel.pageStepSize)); + IEventDispatcher(strand).dispatchEvent(new Event("scroll")); + } + } + } + + private var thumbDownY:Number; + private var lastThumbY:Number; + + /** + * @private + */ + override protected function thumbMouseDownHandler(event:MouseEvent):void + { + sbView.thumb.stage.addEventListener(MouseEvent.MOUSE_MOVE, thumbMouseMoveHandler); + sbView.thumb.stage.addEventListener(MouseEvent.MOUSE_UP, thumbMouseUpHandler); + thumbDownY = event.screenY; + lastThumbY = sbView.thumb.y; + } + + private function thumbMouseMoveHandler(event:MouseEvent):void + { + var thumb:DisplayObject = sbView.thumb; + var track:DisplayObject = sbView.track; + thumb.y = Math.max(track.y, Math.min(lastThumbY + (event.screenY - thumbDownY), track.y + track.height - thumb.height)); + var newValue:Number = snap((thumb.y - track.y) / (track.height - thumb.height) * (sbModel.maximum - sbModel.minimum - sbModel.pageSize)); + sbModel.value = newValue; + IEventDispatcher(strand).dispatchEvent(new Event("scroll")); + } + + private function thumbMouseUpHandler(event:MouseEvent):void + { + sbView.thumb.stage.removeEventListener(MouseEvent.MOUSE_MOVE, thumbMouseMoveHandler); + sbView.thumb.stage.removeEventListener(MouseEvent.MOUSE_UP, thumbMouseUpHandler); + } + } +}