1
4
5 import org.aswing.plaf.*;
6 import org.aswing.geom.*;
7 import org.aswing.*;
8 import org.aswing.utils.*;
9
10
14 class org.aswing.JScrollPane extends Container{
15
16
17
23 public static var ON_ADJUSTMENT_VALUE_CHANGED:String = "onAdjustmentValueChanged";
24
25
30 public static var ON_VIEWPORT_CHANGED:String = "onViewportChanged";
31
32
35 public static var SCROLLBAR_AS_NEEDED:Number = 0;
36
39 public static var SCROLLBAR_NEVER:Number = 1;
40
43 public static var SCROLLBAR_ALWAYS:Number = 2;
44
45 private var viewport:Viewportable;
46 private var vScrollBar:JScrollBar;
47 private var hScrollBar:JScrollBar;
48 private var vsbPolicy:Number;
49 private var hsbPolicy:Number;
50 private var scrollbarListener:Object;
51 private var view:Component;
52
53
80 public function JScrollPane(viewOrViewport:Object, vsbPolicy:Number, hsbPolicy:Number){
81 super();
82 setName("JScrollPane");
83 if(vsbPolicy == undefined) vsbPolicy = SCROLLBAR_AS_NEEDED;
84 if(hsbPolicy == undefined) hsbPolicy = SCROLLBAR_AS_NEEDED;
85 this.vsbPolicy = vsbPolicy;
86 this.hsbPolicy = hsbPolicy;
87
88 scrollbarListener = new Object();
89 scrollbarListener[JScrollBar.ON_ADJUSTMENT_VALUE_CHANGED] = Delegate.create(this, __onBarScroll);
90
91 setVerticalScrollBar(new JScrollBar(JScrollBar.VERTICAL));
92 setHorizontalScrollBar(new JScrollBar(JScrollBar.HORIZONTAL));
93 setView(viewOrViewport);
94 setLayout(new ScrollPaneLayout());
95 updateUI();
96 }
97
98 public function updateUI():Void{
99 setUI(ScrollPaneUI(UIManager.getUI(this)));
100 }
101
102 public function setUI(newUI:ScrollPaneUI):Void{
103 super.setUI(newUI);
104 }
105
106 public function getUIClassID():String{
107 return "ScrollPaneUI";
108 }
109
110
113 public function setLayout(layout:LayoutManager):Void{
114 if(layout instanceof ScrollPaneLayout){
115 super.setLayout(layout);
116 }else{
117 trace("Only on set ScrollPaneLayout to JScrollPane");
118 throw new Error("Only on set ScrollPaneLayout to JScrollPane");
119 }
120 }
121
122
125 public function isValidateRoot():Boolean{
126 return true;
127 }
128
129
151 public function setView(viewOrViewport:Object):Void{
152 if(viewOrViewport instanceof Viewportable){
153 setViewport(Viewportable(viewOrViewport));
154 }else if(viewOrViewport instanceof Component){
155 setViewportView(Component(viewOrViewport));
156 }else{
157
158 }
159 }
160
161
177 public function setViewportView(view:Component):Void{
178 setViewport(new JViewport(view));
179 }
180
181
184 public function getViewportView():Component{
185 return view;
186 }
187
188
205 private function setViewport(vp:Viewportable):Void{
206 if(viewport != vp){
207 var event:Event = createEventObj(ON_VIEWPORT_CHANGED);
208 event.oldViewport = viewport;
209 event.newViewport = vp;
210 if(viewport != null){
211 remove(viewport.getViewportPane());
212 }
213 viewport = vp;
214 if(viewport != null){
215 super.insert(-1, viewport.getViewportPane());
216 }
217 revalidate();
218 dispatchEvent(ON_VIEWPORT_CHANGED, event);
219 }
220 }
221
222 public function getViewport():Viewportable{
223 return viewport;
224 }
225
226
230 public function getVisibleRect():Rectangle{
231 return new Rectangle(getHorizontalScrollBar().getValue(),
232 getVerticalScrollBar().getValue(),
233 getHorizontalScrollBar().getVisibleAmount(),
234 getVerticalScrollBar().getVisibleAmount());
235 }
236
237
246 public function addAdjustmentListener(func:Function, obj:Object):Object{
247 return addEventListener(ON_ADJUSTMENT_VALUE_CHANGED, func, obj);
248 }
249
250
253 private function __onBarScroll(event:Event):Void{
254 event.pane = this;
255 dispatchEvent(ON_ADJUSTMENT_VALUE_CHANGED, event);
256 }
257
258
261 public function setHorizontalScrollBar(horizontalScrollBar:JScrollBar):Void{
262 if(hScrollBar != horizontalScrollBar){
263 hScrollBar.removeEventListener(scrollbarListener);
264 remove(hScrollBar);
265 hScrollBar = horizontalScrollBar;
266 hScrollBar.setName("HorizontalScrollBar");
267 super.insert(-1, hScrollBar);
268 hScrollBar.addEventListener(scrollbarListener);
269 revalidate();
270 }
271 }
272
273 public function getHorizontalScrollBar():JScrollBar{
274 return hScrollBar;
275 }
276
277 public function setHorizontalScrollBarPolicy(policy:Number):Void{
278 hsbPolicy = (policy == undefined ? SCROLLBAR_AS_NEEDED : policy);
279 }
280
281 public function getHorizontalScrollBarPolicy():Number{
282 return hsbPolicy;
283 }
284
285
288 public function setVerticalScrollBar(verticalScrollBar:JScrollBar):Void{
289 if(vScrollBar != verticalScrollBar){
290 vScrollBar.removeEventListener(scrollbarListener);
291 remove(vScrollBar);
292 vScrollBar = verticalScrollBar;
293 vScrollBar.setName("verticalScrollBar");
294 super.insert(-1, vScrollBar);
295 vScrollBar.addEventListener(scrollbarListener);
296 revalidate();
297 }
298 }
299
300 public function getVerticalScrollBar():JScrollBar{
301 return vScrollBar;
302 }
303
304 public function setVerticalScrollBarPolicy(policy:Number):Void{
305 vsbPolicy = (policy == undefined ? SCROLLBAR_AS_NEEDED : policy);
306 }
307
308 public function getVerticalScrollBarPolicy():Number{
309 return vsbPolicy;
310 }
311
312
315 public function append(com:Component, constraints:Object):Void{
316 trace("Can not add comp to JScrollPane");
317 throw new Error("Can not add comp to JScrollPane");
318 }
319
320
323 public function insert(i:Number, com:Component, constraints:Object):Void{
324 trace("Can not add comp to JScrollPane");
325 throw new Error("Can not add comp to JScrollPane");
326 }
327 }
328