source: josm/trunk/src/org/openstreetmap/josm/gui/io/ActionFlagsTableCell.java@ 7937

Last change on this file since 7937 was 7937, checked in by bastiK, 9 years ago

add subversion property svn:eol=native

  • Property svn:eol-style set to native
File size: 4.4 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.gui.io;
3
4import static org.openstreetmap.josm.tools.I18n.tr;
5
6import java.awt.Component;
7import java.awt.Dimension;
8import java.awt.GridBagLayout;
9import java.awt.event.ActionEvent;
10import java.awt.event.ActionListener;
11import java.util.EventObject;
12
13import javax.swing.AbstractAction;
14import javax.swing.ActionMap;
15import javax.swing.JCheckBox;
16import javax.swing.JPanel;
17import javax.swing.JTable;
18import javax.swing.event.CellEditorListener;
19import javax.swing.table.TableCellEditor;
20import javax.swing.table.TableCellRenderer;
21
22import org.openstreetmap.josm.gui.util.CellEditorSupport;
23import org.openstreetmap.josm.tools.GBC;
24
25/**
26 * This class creates a table cell that features two checkboxes, Upload and Save. It
27 * handles everything on its own, in other words it renders itself and also functions
28 * as editor so the checkboxes may be set by the user.
29 *
30 * Intended usage is like this:
31 * <code>
32 * <br>ActionFlagsTableCell aftc = new ActionFlagsTableCell();
33 * <br>col = new TableColumn(0);
34 * <br>col.setCellRenderer(aftc);
35 * <br>col.setCellEditor(aftc);
36 * </code>
37 */
38class ActionFlagsTableCell extends JPanel implements TableCellRenderer, TableCellEditor {
39 private final JCheckBox[] checkBoxes = new JCheckBox[2];
40 private final CellEditorSupport cellEditorSupport = new CellEditorSupport(this);
41
42 private ActionListener al = new ActionListener() {
43 @Override
44 public void actionPerformed(ActionEvent e) {
45 cellEditorSupport.fireEditingStopped();
46 }
47 };
48
49 public ActionFlagsTableCell() {
50 checkBoxes[0] = new JCheckBox(tr("Upload"));
51 checkBoxes[1] = new JCheckBox(tr("Save"));
52 setLayout(new GridBagLayout());
53
54 ActionMap am = getActionMap();
55 for (final JCheckBox b : checkBoxes) {
56 add(b, GBC.eol().fill(GBC.HORIZONTAL));
57 b.setPreferredSize(new Dimension(b.getPreferredSize().width, 19));
58 b.addActionListener(al);
59 am.put(b.getText(), new AbstractAction() {
60 @Override
61 public void actionPerformed(ActionEvent e) {
62 b.setSelected(!b.isSelected());
63 cellEditorSupport.fireEditingStopped();
64 }
65 });
66 }
67
68 setToolTipText(tr("<html>Select which actions to perform for this layer, if you click the leftmost button.<br/>Check \"upload\" to upload the changes to the OSM server.<br/>Check \"Save\" to save the layer to the file specified on the left.</html>"));
69 }
70
71 protected void updateCheckboxes(Object v) {
72 if (v != null && checkBoxes[0] != null && checkBoxes[1] != null) {
73 boolean[] values;
74 if(v instanceof SaveLayerInfo) {
75 values = new boolean[2];
76 values[0] = ((SaveLayerInfo) v).isDoUploadToServer();
77 values[1] = ((SaveLayerInfo) v).isDoSaveToFile();
78 } else {
79 values = (boolean[]) v;
80 }
81 checkBoxes[0].setSelected(values[0]);
82 checkBoxes[1].setSelected(values[1]);
83 }
84 }
85
86 @Override
87 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
88 updateCheckboxes(value);
89 return this;
90 }
91
92 @Override
93 public void addCellEditorListener(CellEditorListener l) {
94 cellEditorSupport.addCellEditorListener(l);
95 }
96
97 @Override
98 public void cancelCellEditing() {
99 cellEditorSupport.fireEditingCanceled();
100 }
101
102 @Override
103 public Object getCellEditorValue() {
104 boolean[] values = new boolean[2];
105 values[0] = checkBoxes[0].isSelected();
106 values[1] = checkBoxes[1].isSelected();
107 return values;
108 }
109
110 @Override
111 public boolean isCellEditable(EventObject anEvent) {
112 return true;
113 }
114
115 @Override
116 public void removeCellEditorListener(CellEditorListener l) {
117 cellEditorSupport.removeCellEditorListener(l);
118 }
119
120 @Override
121 public boolean shouldSelectCell(EventObject anEvent) {
122 return true;
123 }
124
125 @Override
126 public boolean stopCellEditing() {
127 cellEditorSupport.fireEditingStopped();
128 return true;
129 }
130
131 @Override
132 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
133 updateCheckboxes(value);
134 return this;
135 }
136}
Note: See TracBrowser for help on using the repository browser.