Changeset 4598 in josm for trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java
- Timestamp:
- 2011-11-19T22:27:22+01:00 (14 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java
r4525 r4598 4 4 import static org.openstreetmap.josm.tools.I18n.tr; 5 5 6 import java.awt.Component; 6 7 import java.awt.event.ActionEvent; 8 import java.awt.event.ItemEvent; 9 import java.awt.event.ItemListener; 7 10 import java.awt.event.MouseAdapter; 8 11 import java.awt.event.MouseEvent; … … 10 13 import java.util.Observer; 11 14 15 import javax.swing.DefaultCellEditor; 12 16 import javax.swing.DefaultListSelectionModel; 17 import javax.swing.JCheckBox; 13 18 import javax.swing.JPopupMenu; 19 import javax.swing.JRadioButton; 14 20 import javax.swing.JTable; 15 21 import javax.swing.ListSelectionModel; 22 import javax.swing.SwingConstants; 16 23 import javax.swing.event.ListSelectionEvent; 17 24 import javax.swing.event.ListSelectionListener; 18 25 import javax.swing.event.TableModelEvent; 26 import javax.swing.table.TableCellRenderer; 19 27 20 28 import org.openstreetmap.josm.actions.AbstractInfoAction; … … 25 33 * VersionTable shows a list of version in a {@see History} of an {@see OsmPrimitive}. 26 34 * 27 *28 35 */ 29 36 public class VersionTable extends JTable implements Observer{ … … 31 38 32 39 protected void build() { 33 setSelectionMode(ListSelectionModel.SINGLE_SELECTION); 34 addMouseListener(new MouseHandler()); 35 getSelectionModel().addListSelectionListener(new SelectionHandler()); 40 setRowSelectionAllowed(false); 36 41 popupMenu = new VersionTablePopupMenu(); 37 42 addMouseListener(new PopupMenuTrigger()); … … 44 49 } 45 50 46 protected void handleSelectReferencePointInTime(int row) {47 getVersionTableModel().setReferencePointInTime(row);48 }49 50 protected void handleSelectCurrentPointInTime(int row) {51 getVersionTableModel().setCurrentPointInTime(row);52 }53 54 51 protected HistoryBrowserModel.VersionTableModel getVersionTableModel() { 55 52 return (HistoryBrowserModel.VersionTableModel) getModel(); 56 }57 58 class MouseHandler extends MouseAdapter {59 protected void handleDoubleClick(MouseEvent e) {60 int row = rowAtPoint(e.getPoint());61 handleSelectReferencePointInTime(row);62 }63 64 @Override65 public void mouseClicked(MouseEvent e) {66 switch(e.getClickCount()) {67 case 2: handleDoubleClick(e); break;68 }69 }70 }71 72 class SelectionHandler implements ListSelectionListener {73 public void valueChanged(ListSelectionEvent e) {74 DefaultListSelectionModel model = (DefaultListSelectionModel)e.getSource();75 // For some reason we receive multiple "adjusting" events here even when the source is a simple "set selection" action76 // The last and proper event will have getValueIsAdjusting() == false77 if (model.getMinSelectionIndex() >= 0 && e.getValueIsAdjusting() == false) {78 handleSelectCurrentPointInTime(model.getMinSelectionIndex());79 }80 }81 53 } 82 54 … … 85 57 } 86 58 87 /* (non-Javadoc)88 * @see javax.swing.JTable#tableChanged(javax.swing.event.TableModelEvent)89 */90 @Override91 public void tableChanged(TableModelEvent e) {92 int selectedRow = getSelectedRow();93 super.tableChanged(e);94 // Restore list selection (fix #6899)95 if (selectedRow > -1 && selectedRow < getRowCount()) {96 getSelectionModel().setSelectionInterval(0, selectedRow);97 }98 }99 100 59 protected void showPopupMenu(MouseEvent evt) { 101 60 HistoryBrowserModel.VersionTableModel model = getVersionTableModel(); 102 int row = getSelectedRow(); 103 if (row == -1) { 104 row = rowAtPoint(evt.getPoint()); 105 } 61 int row = rowAtPoint(evt.getPoint()); 106 62 if (!model.isLatest(row)) { 107 63 HistoryOsmPrimitive primitive = model.getPrimitive(row); … … 109 65 popupMenu.show(evt.getComponent(), evt.getX(), evt.getY()); 110 66 } 111 }112 113 public void updateSelection() {114 final int row = getVersionTableModel().getRowCount() - 1;115 setRowSelectionInterval(row, row);116 67 } 117 68 … … 180 131 } 181 132 } 133 134 public static class RadioButtonRenderer extends JRadioButton implements TableCellRenderer { 135 136 public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected, boolean hasFocus,int row,int column) { 137 HistoryBrowserModel.VersionTableModel model = (HistoryBrowserModel.VersionTableModel)table.getModel(); 138 setSelected(value != null && (Boolean)value); 139 setHorizontalAlignment(SwingConstants.CENTER); 140 return this; 141 } 142 } 143 144 public static class RadioButtonEditor extends DefaultCellEditor implements ItemListener { 145 146 private JRadioButton btn; 147 148 public RadioButtonEditor() { 149 super(new JCheckBox()); 150 btn = new JRadioButton(); 151 btn.setHorizontalAlignment(SwingConstants.CENTER); 152 } 153 154 public Component getTableCellEditorComponent(JTable table, Object value, boolean isSelected, int row, int column) { 155 if (value == null) return null; 156 boolean val = (Boolean) value; 157 btn.setSelected(val); 158 btn.addItemListener(this); 159 return btn; 160 } 161 162 public Object getCellEditorValue() { 163 btn.removeItemListener(this); 164 return btn.isSelected(); 165 } 166 167 public void itemStateChanged(ItemEvent e) { 168 fireEditingStopped(); 169 } 170 } 182 171 }
Note:
See TracChangeset
for help on using the changeset viewer.