import mx.events.EventDispatcher; import mx.utils.Delegate; class BasicSlider extends MovieClip { private var __minimum:Number = 0; private var __maximum:Number = 100; private var __boundingbox:MovieClip; private var __thumb:MovieClip; private var __slot:MovieClip; private var __value:Number; private var __width:Number; private var __height:Number; public var addEventListener:Function; public var removeEventListener:Function; private var dispatchEvent:Function; private var dispatchQueue:Function; public var changeHandler:Function; public function BasicSlider(Void) { init(); } private function init(Void):Void { EventDispatcher.initialize(this); __width = _width; __height = _height; _xscale = 100; _yscale = 100; __boundingbox._width = 0; __boundingbox._height = 0; __boundingbox._visible = false; attachMovie("basicSliderSlot", "__slot", 0); attachMovie("basicSliderThumb", "__thumb", 1); __width = Math.max(__slot._width, __thumb._width); __slot._x = __width / 2 - __slot._width / 2; __thumb._x = __width / 2 - __thumb._width / 2; __thumb.onPress = Delegate.create(this, doDrag); __thumb.onRelease = Delegate.create(this, doDrop); __thumb.onReleaseOutside = Delegate.create(this, doDrop); draw(); } public function draw(Void):Void { size(); } private function size(Void):Void { __slot._height = __height; var range = __maximum - __minimum; __thumb._y = __height - __thumb._height - (__value - __minimum) / range * (__height - __thumb._height); } public function setSize(w:Number, h:Number):Void { __width = w; __height = h; draw(); } private function doDrag(Void):Void { __thumb.startDrag(false, __thumb._x, 0, __thumb._x, __height - __thumb._height); onMouseMove = Delegate.create(this, update); } private function doDrop(Void):Void { __thumb.stopDrag(); delete onMouseMove; } private function update(Void):Void { var range:Number = __maximum - __minimum; __value = (__height - __thumb._height - __thumb._y) / (__height - __thumb._height) * range + __minimum; dispatchEvent({type:"change"}); } [Inspectable (type="Number", defaultValue=100)] public function set maximum(max:Number) { __maximum = max; draw(); } public function get maximum():Number { return __maximum; } [Inspectable (type="Number", defaultValue=0)] public function set minimum(min:Number) { __minimum = min; draw(); } public function get minimum():Number { return __minimum; } [Inspectable (type="Number", defaultValue=0)] public function set value(val:Number) { __value = val; draw(); } public function get value():Number { return __value; } }