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

Last change on this file since 13146 was 12866, checked in by Don-vip, 7 years ago

SonarQube:

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