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

Last change on this file since 11457 was 10611, checked in by Don-vip, 8 years ago

see #11390 - sonar - squid:S1604 - Java 8: Anonymous inner classes containing only one method should become lambdas

  • Property svn:eol-style set to native
File size: 5.0 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 transient CellEditorSupport cellEditorSupport = new CellEditorSupport(this);
41
42 private final transient ActionListener al = e -> cellEditorSupport.fireEditingStopped();
43
44 /**
45 * Constructs a new {@code ActionFlagsTableCell}.
46 */
47 ActionFlagsTableCell() {
48 checkBoxes[0] = new JCheckBox(tr("Upload"));
49 checkBoxes[1] = new JCheckBox(tr("Save"));
50 setLayout(new GridBagLayout());
51
52 ActionMap am = getActionMap();
53 for (final JCheckBox b : checkBoxes) {
54 b.setPreferredSize(new Dimension(b.getPreferredSize().width, 19));
55 b.addActionListener(al);
56 am.put(b.getText(), new AbstractAction() {
57 @Override
58 public void actionPerformed(ActionEvent e) {
59 b.setSelected(!b.isSelected());
60 cellEditorSupport.fireEditingStopped();
61 }
62 });
63 }
64 }
65
66 protected void updateCheckboxes(Object v) {
67 if (v != null && checkBoxes[0] != null && checkBoxes[1] != null) {
68 boolean[] values;
69 if (v instanceof SaveLayerInfo) {
70 values = new boolean[2];
71 values[0] = ((SaveLayerInfo) v).isDoUploadToServer();
72 values[1] = ((SaveLayerInfo) v).isDoSaveToFile();
73 } else {
74 values = (boolean[]) v;
75 }
76 checkBoxes[0].setSelected(values[0]);
77 checkBoxes[1].setSelected(values[1]);
78 }
79 }
80
81 private void updatePanel(SaveLayerInfo info) {
82 StringBuilder sb = new StringBuilder(128)
83 .append("<html>")
84 .append(tr("Select which actions to perform for this layer, if you click the leftmost button."));
85 removeAll();
86 if (info != null) {
87 if (info.isUploadable()) {
88 sb.append("<br/>")
89 .append(tr("Check \"Upload\" to upload the changes to the OSM server."));
90 add(checkBoxes[0], GBC.eol().fill(GBC.HORIZONTAL));
91 }
92 if (info.isSavable()) {
93 sb.append("<br/>")
94 .append(tr("Check \"Save\" to save the layer to the file specified on the left."));
95 add(checkBoxes[1], GBC.eol().fill(GBC.HORIZONTAL));
96 }
97 }
98 sb.append("</html>");
99 setToolTipText(sb.toString());
100 }
101
102 @Override
103 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus, int row, int column) {
104 updatePanel((SaveLayerInfo) value);
105 updateCheckboxes(value);
106 return this;
107 }
108
109 @Override
110 public void addCellEditorListener(CellEditorListener l) {
111 cellEditorSupport.addCellEditorListener(l);
112 }
113
114 @Override
115 public void cancelCellEditing() {
116 cellEditorSupport.fireEditingCanceled();
117 }
118
119 @Override
120 public Object getCellEditorValue() {
121 boolean[] values = new boolean[2];
122 values[0] = checkBoxes[0].isSelected();
123 values[1] = checkBoxes[1].isSelected();
124 return values;
125 }
126
127 @Override
128 public boolean isCellEditable(EventObject anEvent) {
129 return true;
130 }
131
132 @Override
133 public void removeCellEditorListener(CellEditorListener l) {
134 cellEditorSupport.removeCellEditorListener(l);
135 }
136
137 @Override
138 public boolean shouldSelectCell(EventObject anEvent) {
139 return true;
140 }
141
142 @Override
143 public boolean stopCellEditing() {
144 cellEditorSupport.fireEditingStopped();
145 return true;
146 }
147
148 @Override
149 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) {
150 updatePanel((SaveLayerInfo) value);
151 updateCheckboxes(value);
152 return this;
153 }
154}
Note: See TracBrowser for help on using the repository browser.