topical media & game development
student-ar-fl-controls-UIScrollBar.ax
student-ar-fl-controls-UIScrollBar.ax
[swf]
flex
// Copyright 2007. Adobe Systems Incorporated. All Rights Reserved.
package fl.controls {
import Error;
import fl.controls.ScrollBar;
import fl.controls.ScrollBarDirection;
import fl.core.InvalidationType;
import fl.core.UIComponent;
import fl.events.ScrollEvent;
import flash.events.Event;
import flash.events.TextEvent;
import flash.text.TextField;
//--------------------------------------
// Class description
//--------------------------------------
The @ax-student-ar-fl-controls-UIScrollBar class includes all of the scroll bar functionality, but
adds a <code>scrollTarget()</code> method so it can be attached
to a TextField component instance.
<p><strong>Note:</strong> When you use ActionScript to update properties of
the TextField component that affect the text layout, you must call the
<code>update()</code> method on the @ax-student-ar-fl-controls-UIScrollBar component instance to refresh its scroll
properties. Examples of text layout properties that belong to the TextField
component include <code>width</code>, <code>height</code>, and <code>wordWrap</code>.</p>
@includeExample examples/@fileExample.as
@langversion 3.0
@playerversion Flash 9.0.28.0
public class @ax-student-ar-fl-controls-UIScrollBar extends ScrollBar {
@private (private)
@langversion 3.0
@playerversion Flash 9.0.28.0
protected var _scrollTarget:TextField;
@private (private)
@langversion 3.0
@playerversion Flash 9.0.28.0
protected var inEdit:Boolean = false;
@private
@langversion 3.0
@playerversion Flash 9.0.28.0
protected var inScroll:Boolean = false;
@private
private static var defaultStyles:Object = {};
@copy fl.core.UIComponent#getStyleDefinition()
see: fl.core.UIComponent#getStyle()
see: fl.core.UIComponent#setStyle()
see: fl.managers.StyleManager
@langversion 3.0
@playerversion Flash 9.0.28.0
public static function getStyleDefinition():Object {
return UIComponent.mergeStyles(defaultStyles, ScrollBar.getStyleDefinition());
}
Creates a new @ax-student-ar-fl-controls-UIScrollBar component instance.
@langversion 3.0
@playerversion Flash 9.0.28.0
public function @ax-student-ar-fl-controls-UIScrollBar() {
super();
}
@private
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function set minScrollPosition(minScrollPosition:Number):void {
super.minScrollPosition = (minScrollPosition<0)?0:minScrollPosition;
}
@private
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function set maxScrollPosition(maxScrollPosition:Number):void {
var maxScrollPos:Number = maxScrollPosition;
if (_scrollTarget != null) {
if (direction == ScrollBarDirection.HORIZONTAL) {
maxScrollPos = (maxScrollPos>_scrollTarget.maxScrollH)?_scrollTarget.maxScrollH:maxScrollPos;
} else {
maxScrollPos = (maxScrollPos>_scrollTarget.maxScrollV)?_scrollTarget.maxScrollV:maxScrollPos;
}
}
super.maxScrollPosition = maxScrollPos;
}
Registers a TextField component instance with the ScrollBar component instance.
@includeExample examples/@ax-student-ar-fl-controls-UIScrollBar.scrollTarget.1.as -noswf
see: #update()
@langversion 3.0
@playerversion Flash 9.0.28.0
public function get scrollTarget():TextField {
return _scrollTarget;
}
@private (setter)
@langversion 3.0
@playerversion Flash 9.0.28.0
public function set scrollTarget(target:TextField):void {
if (_scrollTarget != null) {
_scrollTarget.removeEventListener(Event.CHANGE,handleTargetChange,false);
_scrollTarget.removeEventListener(TextEvent.TEXT_INPUT,handleTargetChange,false);
_scrollTarget.removeEventListener(Event.SCROLL,handleTargetScroll,false);
removeEventListener(ScrollEvent.SCROLL,updateTargetScroll,false);
}
_scrollTarget = target;
if (_scrollTarget != null) {
_scrollTarget.addEventListener(Event.CHANGE,handleTargetChange,false,0,true);
_scrollTarget.addEventListener(TextEvent.TEXT_INPUT,handleTargetChange,false,0,true);
_scrollTarget.addEventListener(Event.SCROLL,handleTargetScroll,false,0,true);
addEventListener(ScrollEvent.SCROLL,updateTargetScroll,false,0,true);
}
invalidate(InvalidationType.DATA);
}
[Inspectable()]
@private (internal)
@internal For specifying in inspectable, and setting dropTarget
@langversion 3.0
@playerversion Flash 9.0.28.0
public function get scrollTargetName():String {
return _scrollTarget.name;
}
@private (setter)
@langversion 3.0
@playerversion Flash 9.0.28.0
public function set scrollTargetName(target:String):void {
try {
scrollTarget = parent.getChildByName(target) as TextField;
} catch (error:Error) {
throw new Error("ScrollTarget not found, or is not a TextField");
}
}
[Inspectable(defaultValue="vertical", type="list", enumeration="vertical,horizontal")]
@copy fl.controls.ScrollBar#direction
@default ScrollBarDirection.VERTICAL
@includeExample examples/@ax-student-ar-fl-controls-UIScrollBar.direction.1.as -noswf
@includeExample examples/@ax-student-ar-fl-controls-UIScrollBar.direction.2.as -noswf
see: ScrollBarDirection
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function get direction():String { return super.direction; }
@private (setter)
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function set direction(dir:String):void {
// in live preview mode always render vertical
if (isLivePreview) return;
super.direction = dir;
updateScrollTargetProperties();
}
Forces the scroll bar to update its scroll properties immediately.
This is necessary after text in the specified <code>scrollTarget</code> text field
is added using ActionScript, and the scroll bar needs to be refreshed.
see: #scrollTarget
@includeExample examples/@ax-student-ar-fl-controls-UIScrollBar.update.1.as -noswf
@langversion 3.0
@playerversion Flash 9.0.28.0
public function update():void {
inEdit = true;
updateScrollTargetProperties();
inEdit = false;
}
@private (protected)
@langversion 3.0
@playerversion Flash 9.0.28.0
override protected function draw():void {
if (isInvalid(InvalidationType.DATA)) {
updateScrollTargetProperties();
}
super.draw();
}
@private (protected)
@langversion 3.0
@playerversion Flash 9.0.28.0
protected function updateScrollTargetProperties():void {
if (_scrollTarget == null) {
setScrollProperties(pageSize,minScrollPosition,maxScrollPosition,pageScrollSize);
scrollPosition = 0;
} else {
var horizontal:Boolean = (direction == ScrollBarDirection.HORIZONTAL);
var pageSize:Number = horizontal ? _scrollTarget.width : 10;
setScrollProperties(pageSize, (horizontal ? 0 : 1), horizontal?_scrollTarget.maxScrollH:_scrollTarget.maxScrollV, pageScrollSize);
scrollPosition = horizontal?_scrollTarget.scrollH:_scrollTarget.scrollV;
}
}
@copy fl.controls.ScrollBar#setScrollProperties()
see: ScrollBar#pageSize ScrollBar.pageSize
see: ScrollBar#minScrollPosition ScrollBar.minScrollPosition
see: ScrollBar#maxScrollPosition ScrollBar.maxScrollPosition
see: ScrollBar#pageScrollSize ScrollBar.pageScrollSize
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function setScrollProperties(pageSize:Number,minScrollPosition:Number,maxScrollPosition:Number,pageScrollSize:Number=0):void {
var maxScrollPos:Number = maxScrollPosition;
var minScrollPos:Number = (minScrollPosition<0)?0:minScrollPosition;
if (_scrollTarget != null) {
if (direction == ScrollBarDirection.HORIZONTAL) {
maxScrollPos = (maxScrollPosition>_scrollTarget.maxScrollH) ? _scrollTarget.maxScrollH : maxScrollPos;
} else {
maxScrollPos = (maxScrollPosition>_scrollTarget.maxScrollV) ? _scrollTarget.maxScrollV : maxScrollPos;
}
}
super.setScrollProperties(pageSize,minScrollPos,maxScrollPos,pageScrollSize);
}
@private (protected)
@langversion 3.0
@playerversion Flash 9.0.28.0
override public function setScrollPosition(scrollPosition:Number, fireEvent:Boolean=true):void {
super.setScrollPosition(scrollPosition, fireEvent);
if (!_scrollTarget) { inScroll = false; return; }
updateTargetScroll();
}
// event default is null, so when user calls setScrollPosition, the text is updated, and we don't pass an event
@private (protected)
@langversion 3.0
@playerversion Flash 9.0.28.0
protected function updateTargetScroll(event:ScrollEvent=null):void {
if (inEdit) { return; } // Update came from the user input. Ignore.
if (direction == ScrollBarDirection.HORIZONTAL) {
_scrollTarget.scrollH = scrollPosition;
} else {
_scrollTarget.scrollV = scrollPosition;
}
}
@private (protected)
@langversion 3.0
@playerversion Flash 9.0.28.0
protected function handleTargetChange(event:Event):void {
inEdit = true;
setScrollPosition((direction == ScrollBarDirection.HORIZONTAL)?_scrollTarget.scrollH:_scrollTarget.scrollV, true);
updateScrollTargetProperties();
inEdit = false;
}
@private (protected)
@langversion 3.0
@playerversion Flash 9.0.28.0
protected function handleTargetScroll(event:Event):void {
if (inDrag) { return; }
if (!enabled) { return; }
inEdit = true;
updateScrollTargetProperties(); // This needs to be done first!
scrollPosition = (direction == ScrollBarDirection.HORIZONTAL)?_scrollTarget.scrollH:_scrollTarget.scrollV;
inEdit = false;
}
}
}
(C) Æliens
27/08/2009
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.