1 package coras.client.ui;
2
3 import java.awt.Color;
4 import java.awt.Component;
5 import java.awt.Frame;
6 import java.awt.GridBagConstraints;
7 import java.awt.GridBagLayout;
8 import java.awt.event.ItemEvent;
9 import java.util.ArrayList;
10 import java.util.Arrays;
11 import java.util.Collection;
12 import java.util.Collections;
13 import java.util.Iterator;
14
15 import javax.swing.JButton;
16 import javax.swing.JCheckBox;
17 import javax.swing.JDialog;
18 import javax.swing.JOptionPane;
19 import javax.swing.JPanel;
20 import javax.swing.JScrollPane;
21 import javax.swing.JTable;
22 import javax.swing.table.DefaultTableModel;
23 import javax.swing.table.TableColumn;
24 import javax.swing.table.TableModel;
25
26 import coras.common.CorasElement;
27 import coras.types.ElementTypeEnum;
28 import coras.types.SubtypeEnum;
29
30 public class SelectElementsDialog extends JDialog {
31
32 private JPanel jContentPane = null;
33 private JScrollPane elementScrollPane = null;
34 private JTable elementTable = null;
35 private JCheckBox selectAllCheckBox = null;
36 private JPanel buttonPanel = null;
37 private JButton okButton = null;
38 private JButton cancelButton = null;
39
40 private Collection elements = null;
41 private int result = JOptionPane.CANCEL_OPTION;
42 private SelectElementsTableModel tableModel = null;
43
44 public static void main(String[] args) {
45 SelectElementsDialog dialog =
46 new SelectElementsDialog();
47 dialog.setElements(Arrays.asList(new String[] {
48 "Hei", "på", "deg"
49 }));
50 dialog.setVisible(true);
51 }
52
53 /***
54 * This is the default constructor
55 */
56 public SelectElementsDialog() {
57 this(null);
58 }
59
60 public SelectElementsDialog(Component owner) {
61 super(owner instanceof Frame ? (Frame)owner : null);
62 initialize();
63 setLocationRelativeTo(owner);
64 }
65
66 public int getResult() {
67 return result;
68 }
69
70 public void setElements(Collection elements) {
71 this.elements = elements;
72 DefaultTableModel model = getTableModel();
73 int rows = model.getRowCount();
74 for (int i = rows - 1; i >= 0; i--) {
75 model.removeRow(i);
76 }
77
78 for (Iterator i = elements.iterator(); i.hasNext();) {
79 Object o = i.next();
80 ElementTypeEnum type;
81 SubtypeEnum subtype;
82 String name;
83 if (o instanceof CorasElement) {
84 CorasElement element = (CorasElement) o;
85 type = element.getType();
86 subtype = element.getSubtype();
87 name = element.getName();
88 } else {
89 type = ElementTypeEnum.TABLE;
90 subtype = null;
91 name = "" + o;
92 }
93 Boolean selected = new Boolean(true);
94 Object[] rowData = new Object[] {
95 selected,
96 name,
97 (subtype != null ? (Object)subtype : (Object)type)
98 };
99 model.addRow(rowData);
100 }
101
102
103
104
105
106
107
108 }
109
110 public Collection getSelectedElements() {
111 if (elements == null) {
112 return Collections.EMPTY_LIST;
113 }
114 ArrayList result = new ArrayList();
115 TableModel model = getElementTable().getModel();
116 int row = 0;
117 for (Iterator i = elements.iterator(); i.hasNext();) {
118 CorasElement element = (CorasElement) i.next();
119 Boolean selected = (Boolean) model.getValueAt(row, 0);
120 if (selected.booleanValue()) {
121 result.add(element);
122 }
123 row++;
124 }
125 return result;
126 }
127
128 /***
129 * This method initializes this
130 *
131 * @return void
132 */
133 private void initialize() {
134 this.setSize(500, 300);
135 this.setTitle("Select items");
136 this.setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
137 this.setModal(true);
138 this.setContentPane(getJContentPane());
139 this.addWindowListener(new java.awt.event.WindowAdapter() {
140 public void windowClosing(java.awt.event.WindowEvent e) {
141 result = JOptionPane.CANCEL_OPTION;
142 dispose();
143 }
144 });
145 }
146
147 /***
148 * This method initializes jContentPane
149 *
150 * @return javax.swing.JPanel
151 */
152 private JPanel getJContentPane() {
153 if (jContentPane == null) {
154 GridBagConstraints gridBagConstraints = new GridBagConstraints();
155 gridBagConstraints.fill = java.awt.GridBagConstraints.BOTH;
156 gridBagConstraints.gridy = 1;
157 gridBagConstraints.weightx = 1.0;
158 gridBagConstraints.weighty = 1.0;
159 gridBagConstraints.gridx = 0;
160 GridBagConstraints gridBagConstraints2 = new GridBagConstraints();
161 gridBagConstraints2.gridx = 0;
162 gridBagConstraints2.gridy = 3;
163 GridBagConstraints gridBagConstraints1 = new GridBagConstraints();
164 gridBagConstraints1.gridx = 0;
165 gridBagConstraints1.anchor = java.awt.GridBagConstraints.WEST;
166 gridBagConstraints1.gridy = 2;
167 jContentPane = new JPanel();
168 jContentPane.setLayout(new GridBagLayout());
169 jContentPane.add(getSelectAllCheckBox(), gridBagConstraints1);
170 jContentPane.add(getButtonPanel(), gridBagConstraints2);
171 jContentPane.add(getElementScrollPane(), gridBagConstraints);
172 }
173 return jContentPane;
174 }
175
176 /***
177 * This method initializes jScrollPane
178 *
179 * @return javax.swing.JScrollPane
180 */
181 private JScrollPane getElementScrollPane() {
182 if (elementScrollPane == null) {
183 elementScrollPane = new JScrollPane();
184 elementScrollPane.setVerticalScrollBarPolicy(javax.swing.JScrollPane.VERTICAL_SCROLLBAR_ALWAYS);
185 elementScrollPane.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
186 elementScrollPane.setViewportView(getElementTable());
187 elementScrollPane.getViewport().setBackground(Color.WHITE);
188 }
189 return elementScrollPane;
190 }
191
192 /***
193 * This method initializes elementTable
194 *
195 * @return javax.swing.JTable
196 */
197 private JTable getElementTable() {
198 if (elementTable == null) {
199 elementTable = new JTable();
200 elementTable.setModel(getTableModel());
201 TableColumn selectColumn = elementTable.getColumnModel().getColumn(0);
202 int width = new JCheckBox().getPreferredSize().width;
203 selectColumn.setMinWidth(width);
204 selectColumn.setMaxWidth(width);
205 }
206 return elementTable;
207 }
208
209 /***
210 * This method initializes selectAllCheckBox
211 *
212 * @return javax.swing.JCheckBox
213 */
214 private JCheckBox getSelectAllCheckBox() {
215 if (selectAllCheckBox == null) {
216 selectAllCheckBox = new JCheckBox();
217 selectAllCheckBox.setText("Select / Deselect All");
218 selectAllCheckBox.setMnemonic(java.awt.event.KeyEvent.VK_A);
219 selectAllCheckBox.setSelected(true);
220 selectAllCheckBox.addItemListener(new java.awt.event.ItemListener() {
221 public void itemStateChanged(java.awt.event.ItemEvent e) {
222 boolean selected = e.getStateChange() == ItemEvent.SELECTED;
223 DefaultTableModel model = (DefaultTableModel) getElementTable().getModel();
224 int rows = model.getRowCount();
225 for (int i = 0; i < rows; i++) {
226 model.setValueAt(new Boolean(selected), i, 0);
227 }
228 }
229 });
230 }
231 return selectAllCheckBox;
232 }
233
234 /***
235 * This method initializes buttonPanel
236 *
237 * @return javax.swing.JPanel
238 */
239 private JPanel getButtonPanel() {
240 if (buttonPanel == null) {
241 buttonPanel = new JPanel();
242 buttonPanel.add(getOkButton(), null);
243 buttonPanel.add(getCancelButton(), null);
244 }
245 return buttonPanel;
246 }
247
248 /***
249 * This method initializes okButton
250 *
251 * @return javax.swing.JButton
252 */
253 private JButton getOkButton() {
254 if (okButton == null) {
255 okButton = new JButton();
256 okButton.setText("OK");
257 okButton.setMnemonic(java.awt.event.KeyEvent.VK_O);
258 okButton.addActionListener(new java.awt.event.ActionListener() {
259 public void actionPerformed(java.awt.event.ActionEvent e) {
260 result = JOptionPane.OK_OPTION;
261 dispose();
262 }
263 });
264 }
265 return okButton;
266 }
267
268 /***
269 * This method initializes cancelButton
270 *
271 * @return javax.swing.JButton
272 */
273 private JButton getCancelButton() {
274 if (cancelButton == null) {
275 cancelButton = new JButton();
276 cancelButton.setText("Cancel");
277 cancelButton.setMnemonic(java.awt.event.KeyEvent.VK_C);
278 cancelButton.addActionListener(new java.awt.event.ActionListener() {
279 public void actionPerformed(java.awt.event.ActionEvent e) {
280 result = JOptionPane.CANCEL_OPTION;
281 dispose();
282 }
283 });
284 }
285 return cancelButton;
286 }
287
288 /***
289 * This method initializes tableModel
290 *
291 * @return coras.client.ui.SelectElementsTableModel
292 */
293 private SelectElementsTableModel getTableModel() {
294 if (tableModel == null) {
295 tableModel = new SelectElementsTableModel();
296 tableModel.addColumn(" ");
297 tableModel.addColumn("Name");
298 tableModel.addColumn("Type");
299 }
300 return tableModel;
301 }
302
303 class SelectElementsTableModel extends DefaultTableModel {
304 public Class getColumnClass(int column) {
305 if (column == 0) {
306 return Boolean.class;
307 } else {
308 return String.class;
309 }
310 }
311 public boolean isCellEditable(int row, int column) {
312 return column == 0;
313 }
314 }
315
316 }