Changeset 4598 in josm for trunk/src/org/openstreetmap
- Timestamp:
- 2011-11-19T22:27:22+01:00 (13 years ago)
- Location:
- trunk/src/org/openstreetmap/josm/gui/history
- Files:
-
- 5 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowser.java
r4406 r4598 127 127 public void populate(History history) { 128 128 model.setHistory(history); 129 versionTable.updateSelection();130 129 131 130 tpViewers.removeAll(); -
trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java
r4566 r4598 410 410 @Override 411 411 public Object getValueAt(int row, int column) { 412 if(history == null) 412 switch (column) { 413 case 0: 414 return isReferencePointInTime(row); 415 case 1: 416 return isCurrentPointInTime(row); 417 case 2: 418 if(history == null) 419 return null; 420 if (row < history.getNumVersions()) 421 return history.get(row); 422 if (row == history.getNumVersions()) 423 return latest; 413 424 return null; 414 if (row < history.getNumVersions()) 415 return history.get(row); 416 if (row == history.getNumVersions()) 417 return latest; 425 } 418 426 return null; 419 427 } 420 428 421 429 @Override 430 public void setValueAt(Object aValue, int row, int column) { 431 if (!((Boolean) aValue)) return; 432 switch (column) { 433 case 0: 434 setReferencePointInTime(row); 435 break; 436 case 1: 437 setCurrentPointInTime(row); 438 break; 439 } 440 fireTableDataChanged(); 441 } 442 443 @Override 422 444 public boolean isCellEditable(int row, int column) { 423 return false;445 return column < 2; 424 446 } 425 447 … … 459 481 } 460 482 483 public boolean isCurrentPointInTime(int row) { 484 if (history == null) return false; 485 if (row == history.getNumVersions()) 486 return latest == current; 487 if (row < 0 || row > history.getNumVersions()) return false; 488 HistoryOsmPrimitive p = history.get(row); 489 return p == current; 490 } 491 461 492 public HistoryOsmPrimitive getPrimitive(int row) { 462 493 return isLatest(row) ? latest : history.get(row); … … 476 507 @Override 477 508 public int getColumnCount() { 478 return 1;509 return 3; 479 510 } 480 511 } -
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 } -
trunk/src/org/openstreetmap/josm/gui/history/VersionTableCellRenderer.java
r4191 r4598 27 27 public class VersionTableCellRenderer extends JLabel implements TableCellRenderer { 28 28 public final static Color BGCOLOR_SELECTED = new Color(143,170,255); 29 public final static Color BGCOLOR_IS_REFERENCE_POINT = new Color(255,197,197);30 29 31 30 protected HashMap<OsmPrimitiveType, ImageIcon> icons = null; … … 120 119 } 121 120 122 protected void renderBackground(JTable table, int row, boolean isSelected) {123 Color bgColor = Color.WHITE;124 if (isSelected) {125 bgColor = BGCOLOR_SELECTED;126 } else if (getModel(table).isReferencePointInTime(row)) {127 bgColor = BGCOLOR_IS_REFERENCE_POINT;128 }129 setBackground(bgColor);130 }131 132 121 public void renderVersionFromHistory(HistoryOsmPrimitive primitive, JTable table, int row, boolean isSelected) { 133 122 renderIcon(primitive == null? null : primitive.getType()); 134 123 renderText(primitive); 135 renderBackground(table, row, isSelected);136 124 } 137 125 … … 139 127 renderIcon(primitive.getType()); 140 128 renderLatestText(getModel(table).getLatest()); 141 renderBackground(table, row, isSelected);142 129 } 143 130 -
trunk/src/org/openstreetmap/josm/gui/history/VersionTableColumnModel.java
r3083 r4598 15 15 TableColumn col = null; 16 16 TableCellRenderer renderer = new VersionTableCellRenderer(); 17 VersionTable.RadioButtonRenderer bRenderer = new VersionTable.RadioButtonRenderer(); 17 18 18 // column 0 - Version19 // column 0 - Reverence 19 20 col = new TableColumn(0); 21 col.setCellRenderer(bRenderer); 22 col.setCellEditor(new VersionTable.RadioButtonEditor()); 23 col.setMaxWidth(1); 24 col.setResizable(false); 25 addColumn(col); 26 // column 1 - Current 27 col = new TableColumn(1); 28 col.setCellRenderer(bRenderer); 29 col.setCellEditor(new VersionTable.RadioButtonEditor()); 30 col.setMaxWidth(1); 31 col.setResizable(false); 32 addColumn(col); 33 // column 2 - Rest 34 col = new TableColumn(2); 20 35 col.setHeaderValue(tr("Version")); 21 36 col.setCellRenderer(renderer);
Note:
See TracChangeset
for help on using the changeset viewer.