Class |
Line # |
Actions |
|||
---|---|---|---|---|---|
ProgressPanel | 44 | 32 | 7 |
1 | /* | |
2 | * Jalview - A Sequence Alignment Editor and Viewer ($$Version-Rel$$) | |
3 | * Copyright (C) $$Year-Rel$$ The Jalview Authors | |
4 | * | |
5 | * This file is part of Jalview. | |
6 | * | |
7 | * Jalview is free software: you can redistribute it and/or | |
8 | * modify it under the terms of the GNU General Public License | |
9 | * as published by the Free Software Foundation, either version 3 | |
10 | * of the License, or (at your option) any later version. | |
11 | * | |
12 | * Jalview is distributed in the hope that it will be useful, but | |
13 | * WITHOUT ANY WARRANTY; without even the implied warranty | |
14 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR | |
15 | * PURPOSE. See the GNU General Public License for more details. | |
16 | * | |
17 | * You should have received a copy of the GNU General Public License | |
18 | * along with Jalview. If not, see <http://www.gnu.org/licenses/>. | |
19 | * The Jalview Authors are detailed in the 'AUTHORS' file. | |
20 | */ | |
21 | package jalview.gui; | |
22 | ||
23 | import jalview.api.RendererListenerI; | |
24 | ||
25 | import java.awt.BorderLayout; | |
26 | import java.awt.CardLayout; | |
27 | import java.awt.Color; | |
28 | import java.awt.Dimension; | |
29 | import java.beans.PropertyChangeEvent; | |
30 | ||
31 | import javax.swing.BorderFactory; | |
32 | import javax.swing.JLabel; | |
33 | import javax.swing.JPanel; | |
34 | import javax.swing.JProgressBar; | |
35 | import javax.swing.border.EmptyBorder; | |
36 | ||
37 | /** | |
38 | * A class to manage a panel containing a label and progress bar updated by an | |
39 | * event firing | |
40 | * | |
41 | * @author kmourao | |
42 | * | |
43 | */ | |
44 | public class ProgressPanel extends JPanel implements RendererListenerI | |
45 | { | |
46 | // max value of progress bar: values expected to be %s | |
47 | private final int MAXVALUE = 100; | |
48 | ||
49 | private final String VISIBLE = "VISIBLE"; | |
50 | ||
51 | private final String INVISIBLE = "INVISIBLE"; | |
52 | ||
53 | // name of event property which updates the progress bar | |
54 | private String eventName; | |
55 | ||
56 | private JProgressBar progressBar; | |
57 | ||
58 | private JLabel progressLabel; | |
59 | ||
60 | private JPanel labelPanel = new JPanel(); | |
61 | ||
62 | private CardLayout labelLayout = new CardLayout(); | |
63 | ||
64 | private JPanel barPanel = new JPanel(); | |
65 | ||
66 | private CardLayout barLayout = new CardLayout(); | |
67 | ||
68 | /** | |
69 | * Construct a JPanel containing a progress bar and a label. | |
70 | * | |
71 | * @param eventPropertyName | |
72 | * The name of the event property to update the progress bar | |
73 | * @param label | |
74 | * The label to place next to the progress bar | |
75 | */ | |
76 | 43 | public ProgressPanel(String eventPropertyName, String label, int maxwidth) |
77 | { | |
78 | 43 | super(new BorderLayout(10, 0)); |
79 | 43 | setBorder(new EmptyBorder(0, 3, 0, 0)); |
80 | ||
81 | 43 | eventName = eventPropertyName; |
82 | 43 | String labelText = label; |
83 | ||
84 | 43 | final int w = maxwidth; |
85 | ||
86 | 43 | progressBar = new JProgressBar() |
87 | { | |
88 | 43 | @Override |
89 | public Dimension getMaximumSize() | |
90 | { | |
91 | 43 | return new Dimension(w, 1); |
92 | } | |
93 | }; | |
94 | 43 | progressBar.setMinimum(0); |
95 | 43 | progressBar.setPreferredSize(progressBar.getMaximumSize()); |
96 | 43 | progressLabel = new JLabel(labelText); |
97 | 43 | progressLabel.setFont(new java.awt.Font("Verdana", 0, 11)); |
98 | ||
99 | // Use a CardLayout to stop the progress bar panel moving around when | |
100 | // changing visibility | |
101 | 43 | labelPanel.setLayout(labelLayout); |
102 | 43 | barPanel.setLayout(barLayout); |
103 | ||
104 | 43 | labelPanel.add(progressLabel, VISIBLE); |
105 | 43 | labelPanel.add(new JPanel(), INVISIBLE); |
106 | 43 | barPanel.add(progressBar, VISIBLE); |
107 | 43 | barPanel.add(new JPanel(), INVISIBLE); |
108 | ||
109 | 43 | labelLayout.show(labelPanel, VISIBLE); |
110 | 43 | barLayout.show(barPanel, VISIBLE); |
111 | ||
112 | 43 | add(labelPanel, BorderLayout.WEST); |
113 | 43 | add(barPanel, BorderLayout.CENTER); |
114 | 43 | add(new JLabel(" "), BorderLayout.EAST); |
115 | ||
116 | 43 | setBorder(BorderFactory.createLineBorder(Color.black)); |
117 | // setBorder(BorderFactory.createEtchedBorder(EtchedBorder.LOWERED)); | |
118 | } | |
119 | ||
120 | 13243 | @Override |
121 | /** | |
122 | * Update the progress bar in response to the event. Expects the value | |
123 | * supplied by the event to be in the range 0-100 i.e. a percentage | |
124 | */ | |
125 | public void propertyChange(PropertyChangeEvent evt) | |
126 | { | |
127 | 13243 | if (evt.getPropertyName().equals(eventName)) |
128 | { | |
129 | 13243 | int progress = (int) evt.getNewValue(); |
130 | 13243 | progressBar.setValue(progress); |
131 | ||
132 | // switch progress bar to visible if it is not visible and current | |
133 | // progress is less than MAXVALUE | |
134 | // switch progress bar to invisible if it is visible and we reached | |
135 | // MAXVALUE | |
136 | 13243 | if (progress < MAXVALUE && !progressBar.isVisible()) |
137 | { | |
138 | 430 | labelLayout.show(labelPanel, VISIBLE); |
139 | 430 | barLayout.show(barPanel, VISIBLE); |
140 | } | |
141 | 13243 | if (progress >= MAXVALUE) |
142 | { | |
143 | 466 | labelLayout.show(labelPanel, INVISIBLE); |
144 | 466 | barLayout.show(barPanel, INVISIBLE); |
145 | } | |
146 | } | |
147 | } | |
148 | } |