Changeset 1763 in josm for trunk/src/org


Ignore:
Timestamp:
2009-07-11T10:06:41+02:00 (15 years ago)
Author:
Gubaer
Message:

fixed #2238: Calling Relation editor using properties dialog should update RelationList

Location:
trunk/src/org/openstreetmap/josm/gui/dialogs
Files:
2 edited

Legend:

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

    r1613 r1763  
    105105            if (e.getClickCount() < 2)
    106106            {
    107                 if (e.getSource() == propertyTable)
     107                if (e.getSource() == propertyTable) {
    108108                    membershipTable.clearSelection();
    109                 else if (e.getSource() == membershipTable)
     109                } else if (e.getSource() == membershipTable) {
    110110                    propertyTable.clearSelection();
     111                }
    111112            }
    112113            else if (e.getSource() == propertyTable)
    113114            {
    114115                int row = propertyTable.rowAtPoint(e.getPoint());
    115                 if (row > -1)
     116                if (row > -1) {
    116117                    propertyEdit(row);
     118                }
    117119            } else if (e.getSource() == membershipTable) {
    118120                int row = membershipTable.rowAtPoint(e.getPoint());
    119                 if (row > -1)
     121                if (row > -1) {
    120122                    membershipEdit(row);
     123                }
    121124            }
    122125            else
     
    140143
    141144        String msg = "<html>"+trn("This will change up to {0} object.",
    142         "This will change up to {0} objects.", sel.size(), sel.size())
    143         +"<br><br>("+tr("An empty value deletes the key.", key)+")</html>";
     145                "This will change up to {0} objects.", sel.size(), sel.size())
     146                +"<br><br>("+tr("An empty value deletes the key.", key)+")</html>";
    144147
    145148        JPanel panel = new JPanel(new BorderLayout());
     
    163166        values.setRenderer(new DefaultListCellRenderer() {
    164167            @Override public Component getListCellRendererComponent(JList list,
    165             Object value, int index, boolean isSelected,  boolean cellHasFocus){
     168                    Object value, int index, boolean isSelected,  boolean cellHasFocus){
    166169                Component c = super.getListCellRendererComponent(list, value,
    167                 index, isSelected, cellHasFocus);
     170                        index, isSelected, cellHasFocus);
    168171                if (c instanceof JLabel) {
    169172                    String str = null;
    170                         str=(String) value;
    171                         if (valueCount.containsKey(objKey)){
    172                             Map<String, Integer> m=valueCount.get(objKey);
    173                             if (m.containsKey(str)) {
    174                                 str+="("+m.get(str)+")";
    175                                 c.setFont(c.getFont().deriveFont(Font.ITALIC+Font.BOLD));
    176                             }
     173                    str=(String) value;
     174                    if (valueCount.containsKey(objKey)){
     175                        Map<String, Integer> m=valueCount.get(objKey);
     176                        if (m.containsKey(str)) {
     177                            str+="("+m.get(str)+")";
     178                            c.setFont(c.getFont().deriveFont(Font.ITALIC+Font.BOLD));
    177179                        }
     180                    }
    178181                    ((JLabel)c).setText(str);
    179182                }
     
    220223        // is not Java 1.5
    221224        //value = java.text.Normalizer.normalize(value, java.text.Normalizer.Form.NFC);
    222         if (value.equals(""))
     225        if (value.equals("")) {
    223226            value = null; // delete the key
     227        }
    224228        String newkey = keys.getEditor().getItem().toString().trim();
    225229        //newkey = java.text.Normalizer.normalize(newkey, java.text.Normalizer.Form.NFC);
     
    228232            value = null; // delete the key instead
    229233        }
    230         if (key.equals(newkey) || value == null)
     234        if (key.equals(newkey) || value == null) {
    231235            Main.main.undoRedo.add(new ChangePropertyCommand(sel, newkey, value));
    232         else {
     236        } else {
    233237            Collection<Command> commands=new Vector<Command>();
    234238            commands.add(new ChangePropertyCommand(sel, key, null));
     
    258262            }
    259263            Main.main.undoRedo.add(new SequenceCommand(
    260             trn("Change properties of up to {0} object",
    261             "Change properties of up to {0} objects", sel.size(), sel.size()),
    262             commands));
     264                    trn("Change properties of up to {0} object",
     265                            "Change properties of up to {0} objects", sel.size(), sel.size()),
     266                            commands));
    263267        }
    264268
     
    283287     */
    284288    private void updateListData(String key, final TreeMap<String, TreeSet<String>> allData,
    285     final AutoCompleteComboBox values) {
     289            final AutoCompleteComboBox values) {
    286290        Collection<String> newItems;
    287291        if (allData.containsKey(key)) {
     
    300304     */
    301305    void membershipEdit(int row) {
    302         RelationEditor.getEditor((Relation)membershipData.getValueAt(row, 0),
     306        Relation relation = (Relation)membershipData.getValueAt(row, 0);
     307        Main.main.map.relationListDialog.selectRelation(relation);
     308        RelationEditor.getEditor(relation,
    303309                (Collection<RelationMember>) membershipData.getValueAt(row, 1) ).setVisible(true);
    304310    }
     
    314320        JPanel p = new JPanel(new BorderLayout());
    315321        p.add(new JLabel("<html>"+trn("This will change up to {0} object.",
    316         "This will change up to {0} objects.", sel.size(),sel.size())
    317         +"<br><br>"+tr("Please select a key")), BorderLayout.NORTH);
     322                "This will change up to {0} objects.", sel.size(),sel.size())
     323                +"<br><br>"+tr("Please select a key")), BorderLayout.NORTH);
    318324        final TreeMap<String, TreeSet<String>> allData = createAutoCompletionInfo(false);
    319325        final AutoCompleteComboBox keys = new AutoCompleteComboBox();
     
    356362     */
    357363    private void addFocusAdapter(final int row, final TreeMap<String, TreeSet<String>> allData,
    358     final AutoCompleteComboBox keys, final AutoCompleteComboBox values) {
     364            final AutoCompleteComboBox keys, final AutoCompleteComboBox values) {
    359365        // get the combo box' editor component
    360366        JTextComponent editor = (JTextComponent)values.getEditor()
    361                 .getEditorComponent();
     367        .getEditorComponent();
    362368        // Refresh the values model when focus is gained
    363369        editor.addFocusListener(new FocusAdapter() {
     
    377383            for (String key : osm.keySet()) {
    378384                TreeSet<String> values = null;
    379                 if (allData.containsKey(key))
     385                if (allData.containsKey(key)) {
    380386                    values = allData.get(key);
    381                 else {
     387                } else {
    382388                    values = new TreeSet<String>();
    383389                    allData.put(key, values);
     
    387393        }
    388394        if (!edit) {
    389             for (int i = 0; i < propertyData.getRowCount(); ++i)
     395            for (int i = 0; i < propertyData.getRowCount(); ++i) {
    390396                allData.remove(propertyData.getValueAt(i, 0));
     397            }
    391398        }
    392399        return allData;
     
    449456
    450457    private final JLabel selectSth = new JLabel("<html><p>"
    451     + tr("Please select the objects you want to change properties for.") + "</p></html>");
     458            + tr("Please select the objects you want to change properties for.") + "</p></html>");
    452459
    453460    /**
     
    456463    public PropertiesDialog(MapFrame mapFrame) {
    457464        super(tr("Properties/Memberships"), "propertiesdialog", tr("Properties for selected objects."),
    458         Shortcut.registerShortcut("subwindow:properties", tr("Toggle: {0}", tr("Properties/Memberships")), KeyEvent.VK_P,
    459         Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 150);
     465                Shortcut.registerShortcut("subwindow:properties", tr("Toggle: {0}", tr("Properties/Memberships")), KeyEvent.VK_P,
     466                        Shortcut.GROUP_LAYER, Shortcut.SHIFT_DEFAULT), 150);
    460467
    461468        // setting up the properties table
     
    465472        propertyTable.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer(){
    466473            @Override public Component getTableCellRendererComponent(JTable table, Object value,
    467             boolean isSelected, boolean hasFocus, int row, int column) {
     474                    boolean isSelected, boolean hasFocus, int row, int column) {
    468475                Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    469476                if (c instanceof JLabel) {
     
    472479                    case 0:
    473480                        str = (String) value;
    474                     break;
     481                        break;
    475482                    case 1:
    476483                        Map<String, Integer> v = (Map<String,Integer>) value;
     
    481488                            str=v.entrySet().iterator().next().getKey();
    482489                        }
    483                     break;
     490                        break;
    484491                    }
    485492                    ((JLabel)c).setText(str);
     
    496503        membershipTable.getColumnModel().getColumn(0).setCellRenderer(new DefaultTableCellRenderer() {
    497504            @Override public Component getTableCellRendererComponent(JTable table, Object value,
    498             boolean isSelected, boolean hasFocus, int row, int column) {
     505                    boolean isSelected, boolean hasFocus, int row, int column) {
    499506                Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    500507                if (c instanceof JLabel) {
     
    508515        membershipTable.getColumnModel().getColumn(1).setCellRenderer(new DefaultTableCellRenderer() {
    509516            @Override public Component getTableCellRendererComponent(JTable table, Object value,
    510             boolean isSelected, boolean hasFocus, int row, int column) {
     517                    boolean isSelected, boolean hasFocus, int row, int column) {
    511518                Component c = super.getTableCellRendererComponent(table, value, isSelected, false, row, column);
    512519                if (c instanceof JLabel) {
     
    554561            public void actionPerformed(ActionEvent e) {
    555562                int row = membershipTable.getSelectedRow();
    556                 if (e.getActionCommand().equals("Add"))
     563                if (e.getActionCommand().equals("Add")) {
    557564                    add();
    558                 else if(row >= 0)
     565                } else if(row >= 0)
    559566                {
    560                     if (e.getActionCommand().equals("Edit"))
     567                    if (e.getActionCommand().equals("Edit")) {
    561568                        membershipEdit(row);
    562                     else if (e.getActionCommand().equals("Delete")) {
     569                    } else if (e.getActionCommand().equals("Delete")) {
    563570                        Relation cur = (Relation)membershipData.getValueAt(row, 0);
    564571                        NameVisitor n = new NameVisitor();
     
    566573
    567574                        int result = new ExtendedDialog(Main.parent,
    568                             tr("Change relation"),
    569                             tr("Really delete selection from relation {0}?", n.name),
    570                             new String[] {tr("Delete from relation"), tr("Cancel")},
    571                             new String[] {"dialogs/delete.png", "cancel.png"}).getValue();
     575                                tr("Change relation"),
     576                                tr("Really delete selection from relation {0}?", n.name),
     577                                new String[] {tr("Delete from relation"), tr("Cancel")},
     578                                new String[] {"dialogs/delete.png", "cancel.png"}).getValue();
    572579
    573580                        if(result == 1)
     
    599606                    // Although we might edit/delete the wrong tag here, chances are still better
    600607                    // than just displaying an error message (which always "fails").
    601                     if (e.getActionCommand().equals("Edit"))
     608                    if (e.getActionCommand().equals("Edit")) {
    602609                        propertyEdit(sel >= 0 ? sel : 0);
    603                     else if (e.getActionCommand().equals("Delete"))
     610                    } else if (e.getActionCommand().equals("Delete")) {
    604611                        delete(sel >= 0 ? sel : 0);
     612                    }
    605613                }
    606614            }
     
    608616
    609617        Shortcut s = Shortcut.registerShortcut("properties:add", tr("Add Properties"), KeyEvent.VK_B,
    610         Shortcut.GROUP_MNEMONIC);
     618                Shortcut.GROUP_MNEMONIC);
    611619        this.btnAdd = new SideButton(marktr("Add"),"add","Properties",
    612620                tr("Add a new key/value pair to all objects"), s, buttonAction);
     
    614622
    615623        s = Shortcut.registerShortcut("properties:edit", tr("Edit Properties"), KeyEvent.VK_I,
    616         Shortcut.GROUP_MNEMONIC);
     624                Shortcut.GROUP_MNEMONIC);
    617625        this.btnEdit = new SideButton(marktr("Edit"),"edit","Properties",
    618626                tr("Edit the value of the selected key for all objects"), s, buttonAction);
     
    620628
    621629        s = Shortcut.registerShortcut("properties:delete", tr("Delete Properties"), KeyEvent.VK_Q,
    622         Shortcut.GROUP_MNEMONIC);
     630                Shortcut.GROUP_MNEMONIC);
    623631        this.btnDel = new SideButton(marktr("Delete"),"delete","Properties",
    624632                tr("Delete the selected key in all objects"), s, buttonAction);
     
    631639    @Override public void setVisible(boolean b) {
    632640        super.setVisible(b);
    633         if (b)
     641        if (b) {
    634642            selectionChanged(Main.ds.getSelected());
     643        }
    635644    }
    636645
     
    677686        for(TaggingPreset t : TaggingPresetPreference.taggingPresets) {
    678687            if(t.types == null || !((relations > 0 && !t.types.contains("relation")) &&
    679             (nodes > 0 && !t.types.contains("node")) &&
    680             (ways+closedways > 0 && !t.types.contains("way")) &&
    681             (closedways > 0 && !t.types.contains("closedway"))))
     688                    (nodes > 0 && !t.types.contains("node")) &&
     689                    (ways+closedways > 0 && !t.types.contains("way")) &&
     690                    (closedways > 0 && !t.types.contains("closedway"))))
    682691            {
    683692                int found = 0;
    684693                for(TaggingPreset.Item i : t.data) {
    685                     if(!(i instanceof TaggingPreset.Key))
     694                    if(!(i instanceof TaggingPreset.Key)) {
    686695                        continue;
     696                    }
    687697                    String val = ((TaggingPreset.Key)i).value;
    688698                    String key = ((TaggingPreset.Key)i).key;
    689699                    // we subtract 100 if not found and add 1 if found
    690700                    found -= 100;
    691                     if(!valueCount.containsKey(key))
     701                    if(!valueCount.containsKey(key)) {
    692702                        continue;
     703                    }
    693704
    694705                    Map<String, Integer> v = valueCount.get(key);
    695                     if(v.size() == 1 && v.containsKey(val) && v.get(val) == total)
     706                    if(v.size() == 1 && v.containsKey(val) && v.get(val) == total) {
    696707                        found += 101;
    697                 }
    698 
    699                 if(found <= 0)
     708                    }
     709                }
     710
     711                if(found <= 0) {
    700712                    continue;
     713                }
    701714
    702715                JLabel lbl = new JLabel(t.getName());
     
    713726            presets.setMaximumSize(size);
    714727            presets.setMinimumSize(size);
    715         } else
     728        } else {
    716729            presets.setVisible(false);
     730        }
    717731    }
    718732
     
    722736        if (propertyTable == null)
    723737            return; // selection changed may be received in base class constructor before init
    724         if (propertyTable.getCellEditor() != null)
     738        if (propertyTable.getCellEditor() != null) {
    725739            propertyTable.getCellEditor().cancelCellEditing();
     740        }
    726741
    727742        // re-load property data
     
    735750        valueCount.clear();
    736751        for (OsmPrimitive osm : newSelection) {
    737             if(osm instanceof Node) ++nodes;
    738             else if(osm instanceof Relation) ++relations;
    739             else if(((Way)osm).isClosed()) ++closedways;
    740             else ++ways;
     752            if(osm instanceof Node) {
     753                ++nodes;
     754            } else if(osm instanceof Relation) {
     755                ++relations;
     756            } else if(((Way)osm).isClosed()) {
     757                ++closedways;
     758            } else {
     759                ++ways;
     760            }
    741761            for (Entry<String, String> e : osm.entrySet()) {
    742762                keyCount.put(e.getKey(), keyCount.containsKey(e.getKey()) ? keyCount.get(e.getKey())+1 : 1);
     
    802822        propertyTable.getTableHeader().setVisible(hasSelection);
    803823        selectSth.setVisible(!hasSelection);
    804         if(hasTags) propertyTable.changeSelection(0, 0, false, false);
    805         else if(hasMemberships) membershipTable.changeSelection(0, 0, false, false);
     824        if(hasTags) {
     825            propertyTable.changeSelection(0, 0, false, false);
     826        } else if(hasMemberships) {
     827            membershipTable.changeSelection(0, 0, false, false);
     828        }
    806829
    807830        if(propertyData.getRowCount() != 0 || membershipData.getRowCount() != 0) {
    808831            setTitle(tr("Properties: {0} / Memberships: {1}",
    809                 propertyData.getRowCount(), membershipData.getRowCount()), true);
     832                    propertyData.getRowCount(), membershipData.getRowCount()), true);
    810833        } else {
    811834            setTitle(tr("Properties / Memberships"), false);
  • trunk/src/org/openstreetmap/josm/gui/dialogs/RelationListDialog.java

    r1677 r1763  
    7676    public RelationListDialog() {
    7777        super(tr("Relations"), "relationlist", tr("Open a list of all relations."),
    78         Shortcut.registerShortcut("subwindow:relations", tr("Toggle: {0}", tr("Relations")), KeyEvent.VK_R, Shortcut.GROUP_LAYER), 150);
     78                Shortcut.registerShortcut("subwindow:relations", tr("Toggle: {0}", tr("Relations")), KeyEvent.VK_R, Shortcut.GROUP_LAYER), 150);
    7979        displaylist.setCellRenderer(new OsmPrimitivRenderer());
    8080        displaylist.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
    8181        displaylist.addMouseListener(new MouseAdapter(){
    8282            @Override public void mouseClicked(MouseEvent e) {
    83                 if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1)
     83                if (e.getClickCount() == 2 && e.getButton() == MouseEvent.BUTTON1) {
    8484                    Main.ds.setSelected((Relation)displaylist.getSelectedValue());
     85                }
    8586            }
    8687        });
     
    105106        displaylist.addListSelectionListener(new ListSelectionListener() {
    106107            public void valueChanged(ListSelectionEvent e) {
    107                sbEdit.setEnabled(getSelected() != null);
    108                sbDel.setEnabled(getSelected() != null);
     108                sbEdit.setEnabled(getSelected() != null);
     109                sbDel.setEnabled(getSelected() != null);
    109110            }
    110111        });
     
    113114    @Override public void setVisible(boolean b) {
    114115        super.setVisible(b);
    115         if (b) updateList();
     116        if (b) {
     117            updateList();
     118        }
    116119    }
    117120
     
    120123        int i = 0;
    121124        for (OsmPrimitive e : DataSet.sort(Main.ds.relations)) {
    122             if (!e.deleted && !e.incomplete)
     125            if (!e.deleted && !e.incomplete) {
    123126                list.setElementAt(e, i++);
     127            }
    124128        }
    125129        list.setSize(i);
     
    137141    public void activeLayerChange(Layer a, Layer b) {
    138142        if ((a == null || a instanceof OsmDataLayer) && b instanceof OsmDataLayer) {
    139             if (a != null) ((OsmDataLayer)a).listenerDataChanged.remove(this);
     143            if (a != null) {
     144                ((OsmDataLayer)a).listenerDataChanged.remove(this);
     145            }
    140146            ((OsmDataLayer)b).listenerDataChanged.add(this);
    141147            updateList();
     
    190196     */
    191197    private Relation getSelected() {
    192         if(list.size() == 1)
     198        if(list.size() == 1) {
    193199            displaylist.setSelectedIndex(0);
     200        }
    194201        return (Relation) displaylist.getSelectedValue();
    195202    }
     203
     204    /**
     205     * Selects the relation <code>relation</code> in the list of relations.
     206     *
     207     * @param relation  the relation
     208     */
     209    public void selectRelation(Relation relation) {
     210        if (relation == null) return;
     211        int i = -1;
     212        for (i=0; i < list.getSize(); i++) {
     213            Relation r = (Relation)list.get(i);
     214            if (r == relation) {
     215                break;
     216            }
     217        }
     218        if (i >= 0 && i < list.getSize()) {
     219            displaylist.setSelectedIndex(i);
     220        }
     221    }
    196222}
Note: See TracChangeset for help on using the changeset viewer.