Changeset 1945 in josm for trunk/src/org/openstreetmap/josm


Ignore:
Timestamp:
2009-08-10T07:15:10+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed #3211: Keystrokes / "+" no function / "Del" removes selected object instead of selected list item

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/gui/dialogs/PropertiesDialog.java

    r1938 r1945  
    3333import java.util.Map.Entry;
    3434
     35import javax.swing.AbstractAction;
    3536import javax.swing.Box;
    3637import javax.swing.DefaultListCellRenderer;
    3738import javax.swing.JComboBox;
     39import javax.swing.JComponent;
    3840import javax.swing.JDialog;
    3941import javax.swing.JLabel;
     
    4345import javax.swing.JScrollPane;
    4446import javax.swing.JTable;
     47import javax.swing.KeyStroke;
    4548import javax.swing.ListSelectionModel;
     49import javax.swing.event.ListSelectionEvent;
     50import javax.swing.event.ListSelectionListener;
    4651import javax.swing.table.DefaultTableCellRenderer;
    4752import javax.swing.table.DefaultTableModel;
     
    7277import org.openstreetmap.josm.tools.AutoCompleteComboBox;
    7378import org.openstreetmap.josm.tools.GBC;
     79import org.openstreetmap.josm.tools.ImageProvider;
    7480import org.openstreetmap.josm.tools.Shortcut;
    7581
     
    413419
    414420    /**
    415      * Delete the keys from the given row.
    416      * @param row   The row, which key gets deleted from the dataset.
    417      */
    418     private void delete(int row) {
    419         String key = propertyData.getValueAt(row, 0).toString();
    420         Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
    421         Main.main.undoRedo.add(new ChangePropertyCommand(sel, key, null));
    422         DataSet.fireSelectionChanged(sel);
    423         selectionChanged(sel); // update table
    424 
    425         int rowCount = propertyTable.getRowCount();
    426         propertyTable.changeSelection((row < rowCount ? row : (rowCount-1)), 0, false, false);
    427     }
    428 
    429     /**
    430421     * The property data.
    431422     */
     
    579570                    if (e.getActionCommand().equals("Edit")) {
    580571                        membershipEdit(row);
    581                     } else if (e.getActionCommand().equals("Delete")) {
    582                         Relation cur = (Relation)membershipData.getValueAt(row, 0);
    583                         int result = new ExtendedDialog(Main.parent,
    584                                 tr("Change relation"),
    585                                 tr("Really delete selection from relation {0}?", NAME_FORMATTER.getName(cur)),
    586                                 new String[] {tr("Delete from relation"), tr("Cancel")},
    587                                 new String[] {"dialogs/delete.png", "cancel.png"}).getValue();
    588 
    589                         if(result == 1)
    590                         {
    591                             Relation rel = new Relation(cur);
    592                             Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
    593                             for (RelationMember rm : cur.getMembers()) {
    594                                 for (OsmPrimitive osm : sel) {
    595                                     if (rm.getMember() == osm)
    596                                     {
    597                                         rel.members.remove(rm);
    598                                         break;
    599                                     }
    600                                 }
    601                             }
    602                             Main.main.undoRedo.add(new ChangeCommand(cur, rel));
    603                             DataSet.fireSelectionChanged(sel);
    604                             selectionChanged(sel); // update whole table
    605                         }
    606 
    607572                    }
    608573                }
     
    614579                    if (e.getActionCommand().equals("Edit")) {
    615580                        propertyEdit(sel >= 0 ? sel : 0);
    616                     } else if (e.getActionCommand().equals("Delete")) {
    617                         delete(sel >= 0 ? sel : 0);
    618581                    }
    619582                }
     
    633596        buttonPanel.add(this.btnEdit);
    634597
    635         s = Shortcut.registerShortcut("properties:delete", tr("Delete Properties"), KeyEvent.VK_Q,
    636                 Shortcut.GROUP_MNEMONIC);
    637         this.btnDel = new SideButton(marktr("Delete"),"delete","Properties",
    638                 tr("Delete the selected key in all objects"), s, buttonAction);
     598        // -- delete action
     599        DeleteAction deleteAction = new DeleteAction();
     600        this.btnDel = new SideButton(deleteAction);
     601        membershipTable.getSelectionModel().addListSelectionListener(deleteAction);
     602        propertyTable.getSelectionModel().addListSelectionListener(deleteAction);
     603        getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
     604                KeyStroke.getKeyStroke(KeyEvent.VK_DELETE, 0),"delete"
     605        );
     606        getActionMap().put("delete", deleteAction);
    639607        buttonPanel.add(this.btnDel);
    640608        add(buttonPanel, BorderLayout.SOUTH);
     
    860828
    861829
     830    class DeleteAction extends AbstractAction implements ListSelectionListener {
     831
     832        protected void deleteProperty(int row){
     833            String key = propertyData.getValueAt(row, 0).toString();
     834            Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
     835            Main.main.undoRedo.add(new ChangePropertyCommand(sel, key, null));
     836            DataSet.fireSelectionChanged(sel);
     837            selectionChanged(sel); // update table
     838
     839            int rowCount = propertyTable.getRowCount();
     840            propertyTable.changeSelection((row < rowCount ? row : (rowCount-1)), 0, false, false);
     841        }
     842
     843        protected void deleteFromRelation(int row) {
     844            Relation cur = (Relation)membershipData.getValueAt(row, 0);
     845            int result = new ExtendedDialog(Main.parent,
     846                    tr("Change relation"),
     847                    tr("Really delete selection from relation {0}?", NAME_FORMATTER.getName(cur)),
     848                    new String[] {tr("Delete from relation"), tr("Cancel")},
     849                    new String[] {"dialogs/delete.png", "cancel.png"}).getValue();
     850
     851            if(result != 1)
     852                return;
     853
     854            Relation rel = new Relation(cur);
     855            Collection<OsmPrimitive> sel = Main.main.getCurrentDataSet().getSelected();
     856            for (RelationMember rm : cur.getMembers()) {
     857                for (OsmPrimitive osm : sel) {
     858                    if (rm.getMember() == osm)
     859                    {
     860                        rel.members.remove(rm);
     861                        break;
     862                    }
     863                }
     864            }
     865            Main.main.undoRedo.add(new ChangeCommand(cur, rel));
     866            DataSet.fireSelectionChanged(sel);
     867            selectionChanged(sel); // update whole table
     868        }
     869
     870        public DeleteAction() {
     871            putValue(NAME, tr("Delete"));
     872            putValue(SHORT_DESCRIPTION, tr("Delete the selected key in all objects"));
     873            putValue(SMALL_ICON, ImageProvider.get("dialogs", "delete"));
     874            Shortcut s = Shortcut.registerShortcut("properties:delete", tr("Delete Properties"), KeyEvent.VK_Q,
     875                    Shortcut.GROUP_MNEMONIC);
     876            putValue(MNEMONIC_KEY, (int) KeyEvent.getKeyText(s.getAssignedKey()).charAt(0));
     877            updateEnabledState();
     878        }
     879
     880        public void actionPerformed(ActionEvent e) {
     881            if (propertyTable.getSelectedRowCount() >0 ) {
     882                int row = propertyTable.getSelectedRow();
     883                deleteProperty(row);
     884            } else if (membershipTable.getSelectedRowCount() > 0) {
     885                int row = membershipTable.getSelectedRow();
     886                deleteFromRelation(row);
     887            }
     888        }
     889
     890        protected void updateEnabledState() {
     891            setEnabled(
     892                    PropertiesDialog.this.propertyTable.getSelectedRowCount() >0
     893                    || PropertiesDialog.this.membershipTable.getSelectedRowCount() > 0
     894            );
     895        }
     896
     897        public void valueChanged(ListSelectionEvent e) {
     898            updateEnabledState();
     899        }
     900    }
     901
    862902}
Note: See TracChangeset for help on using the changeset viewer.