Changeset 1945 in josm


Ignore:
Timestamp:
Aug 10, 2009 7:15:10 AM (4 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.