Changeset 4598 in josm


Ignore:
Timestamp:
Nov 19, 2011 10:27:22 PM (18 months 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.