Ignore:
Timestamp:
2010-10-31T17:46:32+01:00 (14 years ago)
Author:
oliverw
Message:

Use key input to jump quickly to entries in the street table.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • applications/editors/josm/plugins/FixAddresses/src/org/openstreetmap/josm/plugins/fixAddresses/gui/AddressEditDialog.java

    r23966 r23968  
    2525import java.awt.event.ActionEvent;
    2626import java.awt.event.ActionListener;
    27 import java.util.Collection;
     27import java.awt.event.KeyEvent;
     28import java.awt.event.KeyListener;
    2829import java.util.List;
    2930
     
    4041import javax.swing.event.ListSelectionEvent;
    4142import javax.swing.event.ListSelectionListener;
     43import javax.swing.table.TableModel;
    4244
    4345import org.openstreetmap.gui.jmapviewer.JMapViewer;
     
    4547import org.openstreetmap.josm.Main;
    4648import org.openstreetmap.josm.data.osm.Node;
    47 import org.openstreetmap.josm.data.osm.OsmPrimitive;
    48 import org.openstreetmap.josm.data.osm.Tag;
    4949import org.openstreetmap.josm.data.osm.Way;
    5050import org.openstreetmap.josm.gui.SideButton;
    51 import org.openstreetmap.josm.gui.dialogs.properties.PresetListPanel.PresetHandler;
    5251import org.openstreetmap.josm.plugins.fixAddresses.AddressEditContainer;
    5352import org.openstreetmap.josm.plugins.fixAddresses.AddressNode;
     
    107106                        streetTable.getSelectionModel().setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    108107                        streetTable.getSelectionModel().addListSelectionListener(this);
     108                        streetTable.addKeyListener(new JumpToEntryListener(1));
    109109                       
    110110                        JScrollPane scroll1 = new JScrollPane(streetTable);
     
    325325        }
    326326       
    327         class IncompleteAddressPresetHandler implements PresetHandler {
    328                 private List<OsmPrimitive> osmPrimitives;
     327        /**
     328         * The listener interface for receiving key events of a table.
     329         * The class that is interested in processing a jumpToEntry
     330         * event implements this interface, and the object created
     331         * with that class is registered with a component using the
     332         * component's <code>addJumpToEntryListener<code> method. When
     333         * the jumpToEntry event occurs, that object's appropriate
     334         * method is invoked.
     335         *
     336         * @see JumpToEntryEvent
     337         */
     338        class JumpToEntryListener implements KeyListener {
     339                private int column;
    329340               
    330341                /**
    331                  * @param osmPrimitives
     342                 * Instantiates a new jump-to-entry listener.
     343                 * @param column the column of the table to use for the comparison
    332344                 */
    333                 public IncompleteAddressPresetHandler(List<OsmPrimitive> osmPrimitives) {
     345                public JumpToEntryListener(int column) {
    334346                        super();
    335                         this.osmPrimitives = osmPrimitives;
     347                        this.column = column;
    336348                }
    337349
    338350                @Override
    339                 public Collection<OsmPrimitive> getSelection() {
     351                public void keyPressed(KeyEvent arg0) {
    340352                        // TODO Auto-generated method stub
    341                         return osmPrimitives;
     353                       
    342354                }
    343355
    344356                @Override
    345                 public void updateTags(List<Tag> tags) {
    346                        
    347                 }
    348                
     357                public void keyReleased(KeyEvent arg0) {
     358                        // TODO Auto-generated method stub
     359                       
     360                }
     361
     362                @Override
     363                public void keyTyped(KeyEvent arg0) {
     364                        JTable table  = (JTable) arg0.getSource();
     365                       
     366                        if (table == null) return;
     367                       
     368                        TableModel model = table.getModel();
     369                       
     370                        if (model == null || model.getColumnCount() == 0) {
     371                                return;
     372                        }
     373                        // clip column
     374                        if (column < 0 || column >= model.getColumnCount()) {
     375                                column = 0; // use the first column                             
     376                        }
     377                       
     378                        char firstChar = Character.toLowerCase(arg0.getKeyChar());
     379
     380                        // visit every row and find a matching entry
     381                        for (int i = 0; i < model.getRowCount(); i++) {
     382                                Object obj = model.getValueAt(i, column);
     383                                if (obj != null) {
     384                                        String s = obj.toString();
     385                                        if (s.length() > 0 && firstChar == Character.toLowerCase(s.charAt(0))) {
     386                                                // select entry and make it visible in the table
     387                                                table.getSelectionModel().setSelectionInterval(i, i);
     388                                                table.scrollRectToVisible(streetTable.getCellRect(i, 0, true));
     389                                                return;
     390                                        }
     391                                }
     392                        }                       
     393                }
    349394        }
    350395}
Note: See TracChangeset for help on using the changeset viewer.