Changeset 4598 in josm


Ignore:
Timestamp:
2011-11-19T22:27:22+01:00 (8 years ago)
Author:
bastiK
Message:

history browser: changed selection of 2 compared version. WAS: double click and single click. NOW: 2 rows of radio buttons (inspired by Mediawiki)

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  
    127127    public void populate(History history) {
    128128        model.setHistory(history);
    129         versionTable.updateSelection();
    130129
    131130        tpViewers.removeAll();
  • trunk/src/org/openstreetmap/josm/gui/history/HistoryBrowserModel.java

    r4566 r4598  
    410410        @Override
    411411        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;
    413424                return null;
    414             if (row < history.getNumVersions())
    415                 return history.get(row);
    416             if (row == history.getNumVersions())
    417                 return latest;
     425            }
    418426            return null;
    419427        }
    420428
    421429        @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
    422444        public boolean isCellEditable(int row, int column) {
    423             return false;
     445            return column < 2;
    424446        }
    425447
     
    459481        }
    460482
     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
    461492        public HistoryOsmPrimitive getPrimitive(int row) {
    462493            return isLatest(row) ? latest : history.get(row);
     
    476507        @Override
    477508        public int getColumnCount() {
    478             return 1;
     509            return 3;
    479510        }
    480511    }
  • trunk/src/org/openstreetmap/josm/gui/history/VersionTable.java

    r4525 r4598  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
     6import java.awt.Component;
    67import java.awt.event.ActionEvent;
     8import java.awt.event.ItemEvent;
     9import java.awt.event.ItemListener;
    710import java.awt.event.MouseAdapter;
    811import java.awt.event.MouseEvent;
     
    1013import java.util.Observer;
    1114
     15import javax.swing.DefaultCellEditor;
    1216import javax.swing.DefaultListSelectionModel;
     17import javax.swing.JCheckBox;
    1318import javax.swing.JPopupMenu;
     19import javax.swing.JRadioButton;
    1420import javax.swing.JTable;
    1521import javax.swing.ListSelectionModel;
     22import javax.swing.SwingConstants;
    1623import javax.swing.event.ListSelectionEvent;
    1724import javax.swing.event.ListSelectionListener;
    1825import javax.swing.event.TableModelEvent;
     26import javax.swing.table.TableCellRenderer;
    1927
    2028import org.openstreetmap.josm.actions.AbstractInfoAction;
     
    2533 * VersionTable shows a list of version in a {@see History} of an {@see OsmPrimitive}.
    2634 *
    27  *
    2835 */
    2936public class VersionTable extends JTable implements Observer{
     
    3138
    3239    protected void build() {
    33         setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    34         addMouseListener(new MouseHandler());
    35         getSelectionModel().addListSelectionListener(new SelectionHandler());
     40        setRowSelectionAllowed(false);
    3641        popupMenu = new VersionTablePopupMenu();
    3742        addMouseListener(new PopupMenuTrigger());
     
    4449    }
    4550
    46     protected void handleSelectReferencePointInTime(int row) {
    47         getVersionTableModel().setReferencePointInTime(row);
    48     }
    49 
    50     protected void handleSelectCurrentPointInTime(int row) {
    51         getVersionTableModel().setCurrentPointInTime(row);
    52     }
    53 
    5451    protected HistoryBrowserModel.VersionTableModel getVersionTableModel() {
    5552        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         @Override
    65         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" action
    76             // The last and proper event will have getValueIsAdjusting() == false
    77             if (model.getMinSelectionIndex() >= 0 && e.getValueIsAdjusting() == false) {
    78                 handleSelectCurrentPointInTime(model.getMinSelectionIndex());
    79             }
    80         }
    8153    }
    8254
     
    8557    }
    8658
    87     /* (non-Javadoc)
    88      * @see javax.swing.JTable#tableChanged(javax.swing.event.TableModelEvent)
    89      */
    90     @Override
    91     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 
    10059    protected void showPopupMenu(MouseEvent evt) {
    10160        HistoryBrowserModel.VersionTableModel model = getVersionTableModel();
    102         int row = getSelectedRow();
    103         if (row == -1) {
    104             row = rowAtPoint(evt.getPoint());
    105         }
     61        int row = rowAtPoint(evt.getPoint());
    10662        if (!model.isLatest(row)) {
    10763            HistoryOsmPrimitive primitive = model.getPrimitive(row);
     
    10965            popupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
    11066        }
    111     }
    112 
    113     public void updateSelection() {
    114         final int row = getVersionTableModel().getRowCount() - 1;
    115         setRowSelectionInterval(row, row);
    11667    }
    11768
     
    180131        }
    181132    }
     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    }
    182171}
  • trunk/src/org/openstreetmap/josm/gui/history/VersionTableCellRenderer.java

    r4191 r4598  
    2727public class VersionTableCellRenderer extends JLabel implements TableCellRenderer {
    2828    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);
    3029
    3130    protected HashMap<OsmPrimitiveType, ImageIcon> icons = null;
     
    120119    }
    121120
    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 
    132121    public void renderVersionFromHistory(HistoryOsmPrimitive primitive, JTable table, int row, boolean isSelected) {
    133122        renderIcon(primitive == null? null : primitive.getType());
    134123        renderText(primitive);
    135         renderBackground(table, row, isSelected);
    136124    }
    137125
     
    139127        renderIcon(primitive.getType());
    140128        renderLatestText(getModel(table).getLatest());
    141         renderBackground(table, row, isSelected);
    142129    }
    143130
  • trunk/src/org/openstreetmap/josm/gui/history/VersionTableColumnModel.java

    r3083 r4598  
    1515        TableColumn col = null;
    1616        TableCellRenderer renderer = new VersionTableCellRenderer();
     17        VersionTable.RadioButtonRenderer bRenderer = new VersionTable.RadioButtonRenderer();
    1718
    18         // column 0 - Version
     19        // column 0 - Reverence
    1920        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);
    2035        col.setHeaderValue(tr("Version"));
    2136        col.setCellRenderer(renderer);
Note: See TracChangeset for help on using the changeset viewer.