From d62ed1884c84e35b3af06b386243e1056b7c2544 Mon Sep 17 00:00:00 2001 From: Ray Greenwell Date: Tue, 15 Apr 2008 02:20:29 +0000 Subject: [PATCH] AmbidextrousList, can have its scrollbar on the left or right side. In fact, it can be swapped while the user is dragging it... git-svn-id: svn+ssh://src.earth.threerings.net/nenya/trunk@463 ed5b42cb-e716-0410-a449-f6a68f950b19 --- .../com/threerings/flex/AmbidextrousList.as | 58 +++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/as/com/threerings/flex/AmbidextrousList.as diff --git a/src/as/com/threerings/flex/AmbidextrousList.as b/src/as/com/threerings/flex/AmbidextrousList.as new file mode 100644 index 00000000..7c68eee4 --- /dev/null +++ b/src/as/com/threerings/flex/AmbidextrousList.as @@ -0,0 +1,58 @@ +package com.threerings.flex { + +import mx.controls.List; + +import mx.core.EdgeMetrics; + +/** + * A list that can be configured with the vertical scrollbar on the left or right side. + */ +public class AmbidextrousList extends List +{ + /** + * Get whether the scrollbar is on the left side. + */ + public function get scrollBarOnLeft () :Boolean + { + return _scrollLeft; + } + + /** + * Sets whether to place the scrollbar on the left or right side. + */ + public function set scrollBarOnLeft (scrollLeft :Boolean) :void + { + _scrollLeft = scrollLeft; + + scrollAreaChanged = true; + invalidateDisplayList(); + } + + /** @inheritDoc */ + override public function get viewMetrics () :EdgeMetrics + { + var em :EdgeMetrics = super.viewMetrics; + + if (_scrollLeft && verticalScrollBar && verticalScrollBar.visible) { + em.right -= verticalScrollBar.minWidth; + em.left += verticalScrollBar.minWidth; + } + + return em; + } + + /** @inheritDoc */ + override protected function updateDisplayList (uw :Number, uh :Number) :void + { + super.updateDisplayList(uw, uh); + + if (_scrollLeft) { + var vm :EdgeMetrics = viewMetrics; + verticalScrollBar.move(vm.left - verticalScrollBar.minWidth, vm.top); + } + } + + /** Do we want to have the scrollbar on the left? */ + protected var _scrollLeft :Boolean; +} +}