1 /*
2 * Licensed to the Apache Software Foundation (ASF) under one or more
3 * contributor license agreements. See the NOTICE file distributed with
4 * this work for additional information regarding copyright ownership.
5 * The ASF licenses this file to You under the Apache License, Version 2.0
6 * (the "License"); you may not use this file except in compliance with
7 * the License. You may obtain a copy of the License at
8 *
9 * http://www.apache.org/licenses/LICENSE-2.0
10 *
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
16 */
17 package org.apache.log4j.lf5.viewer;
18
19 import java.awt.*;
20 import java.awt.event.AdjustmentEvent;
21 import java.awt.event.AdjustmentListener;
22
23 /***
24 * An AdjustmentListener which ensures that an Adjustable (e.g. a Scrollbar)
25 * will "track" when the Adjustable expands.
26 * For example, when a vertical scroll bar is at its bottom anchor,
27 * the scrollbar will remain at the bottom. When the vertical scroll bar
28 * is at any other location, then no tracking will happen.
29 * An instance of this class should only listen to one Adjustable as
30 * it retains state information about the Adjustable it listens to.
31 *
32 * @author Richard Wan
33 */
34
35 // Contributed by ThoughtWorks Inc.
36
37 public class TrackingAdjustmentListener implements AdjustmentListener {
38 //--------------------------------------------------------------------------
39 // Constants:
40 //--------------------------------------------------------------------------
41
42 //--------------------------------------------------------------------------
43 // Protected Variables:
44 //--------------------------------------------------------------------------
45
46 protected int _lastMaximum = -1;
47
48 //--------------------------------------------------------------------------
49 // Private Variables:
50 //--------------------------------------------------------------------------
51
52 //--------------------------------------------------------------------------
53 // Constructors:
54 //--------------------------------------------------------------------------
55
56 //--------------------------------------------------------------------------
57 // Public Methods:
58 //--------------------------------------------------------------------------
59
60 public void adjustmentValueChanged(AdjustmentEvent e) {
61 Adjustable bar = e.getAdjustable();
62 int currentMaximum = bar.getMaximum();
63 if (bar.getMaximum() == _lastMaximum) {
64 return; // nothing to do, the adjustable has not expanded
65 }
66 int bottom = bar.getValue() + bar.getVisibleAmount();
67
68 if (bottom + bar.getUnitIncrement() >= _lastMaximum) {
69 bar.setValue(bar.getMaximum()); // use the most recent maximum
70 }
71 _lastMaximum = currentMaximum;
72 }
73
74 //--------------------------------------------------------------------------
75 // Protected Methods:
76 //--------------------------------------------------------------------------
77
78 //--------------------------------------------------------------------------
79 // Private Methods:
80 //--------------------------------------------------------------------------
81
82 //--------------------------------------------------------------------------
83 // Nested Top-Level Classes or Interfaces
84 //--------------------------------------------------------------------------
85 }
86