Ignore:
Timestamp:
2019-12-08T14:35:57+01:00 (4 years ago)
Author:
Don-vip
Message:

fix #18302 - support national taginfo instances

File:
1 edited

Legend:

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

    r15376 r15565  
    2828import java.util.TreeSet;
    2929import java.util.concurrent.atomic.AtomicBoolean;
     30import java.util.stream.Collectors;
    3031
    3132import javax.swing.AbstractAction;
    3233import javax.swing.JComponent;
    3334import javax.swing.JLabel;
     35import javax.swing.JMenuItem;
    3436import javax.swing.JPanel;
    3537import javax.swing.JPopupMenu;
     
    109111import org.openstreetmap.josm.tools.Logging;
    110112import org.openstreetmap.josm.tools.Shortcut;
     113import org.openstreetmap.josm.tools.Territories;
    111114import org.openstreetmap.josm.tools.Utils;
    112115
     
    172175    private final transient PopupMenuHandler blankSpaceMenuHandler = new PopupMenuHandler(blankSpaceMenu);
    173176
     177    private final List<JMenuItem> tagMenuTagInfoNatItems = new ArrayList<>();
     178    private final List<JMenuItem> membershipMenuTagInfoNatItems = new ArrayList<>();
     179
    174180    private final transient Map<String, Map<String, Integer>> valueCount = new TreeMap<>();
    175181    /**
     
    183189    private final TaginfoAction taginfoAction = new TaginfoAction(tagTable, editHelper::getDataKey, editHelper::getDataValues,
    184190            membershipTable, x -> (IRelation<?>) membershipData.getValueAt(x, 0));
     191    private final Collection<TaginfoAction> taginfoNationalActions = new ArrayList<>();
    185192    private final PasteValueAction pasteValueAction = new PasteValueAction();
    186193    private final CopyValueAction copyValueAction = new CopyValueAction(
     
    348355    }
    349356
     357    private void destroyTaginfoNationalActions() {
     358        membershipMenuTagInfoNatItems.forEach(membershipMenu::remove);
     359        membershipMenuTagInfoNatItems.clear();
     360        tagMenuTagInfoNatItems.forEach(tagMenu::remove);
     361        tagMenuTagInfoNatItems.clear();
     362        taginfoNationalActions.forEach(JosmAction::destroy);
     363        taginfoNationalActions.clear();
     364    }
     365
     366    private void setupTaginfoNationalActions(Collection<? extends IPrimitive> newSel) {
     367        destroyTaginfoNationalActions();
     368        if (!newSel.isEmpty()) {
     369            for (Entry<String, String> e : Territories.getNationalTaginfoUrls(
     370                    newSel.iterator().next().getBBox().getCenter()).entrySet()) {
     371                taginfoNationalActions.add(new TaginfoAction(tagTable, editHelper::getDataKey, editHelper::getDataValues,
     372                        membershipTable, x -> (IRelation<?>) membershipData.getValueAt(x, 0), e.getValue(), e.getKey()));
     373            }
     374            membershipMenuTagInfoNatItems.addAll(taginfoNationalActions.stream().map(membershipMenu::add).collect(Collectors.toList()));
     375            tagMenuTagInfoNatItems.addAll(taginfoNationalActions.stream().map(tagMenu::add).collect(Collectors.toList()));
     376        }
     377    }
     378
    350379    /**
    351380     * Creates the popup menu @field membershipMenu and its launcher on membership table.
     
    538567    public void destroy() {
    539568        taginfoAction.destroy();
     569        destroyTaginfoNationalActions();
    540570        super.destroy();
    541571        Config.getPref().removeKeyPreferenceChangeListener("display.discardable-keys", preferenceListener);
     
    558588        // Ignore parameter as we do not want to operate always on real selection here, especially in draw mode
    559589        Collection<? extends IPrimitive> newSel = OsmDataManager.getInstance().getInProgressISelection();
    560         String selectedTag;
     590        int newSelSize = newSel.size();
    561591        IRelation<?> selectedRelation = null;
    562         selectedTag = editHelper.getChangedKey(); // select last added or last edited key by default
     592        String selectedTag = editHelper.getChangedKey(); // select last added or last edited key by default
    563593        if (selectedTag == null && tagTable.getSelectedRowCount() == 1) {
    564594            selectedTag = editHelper.getDataKey(tagTable.getSelectedRow());
     
    598628                count += e1.getValue();
    599629            }
    600             if (count < newSel.size()) {
    601                 e.getValue().put("", newSel.size() - count);
     630            if (count < newSelSize) {
     631                e.getValue().put("", newSelSize - count);
    602632            }
    603633            tagData.addRow(new Object[]{e.getKey(), e.getValue()});
     
    655685        pluginHook.setVisible(hasSelection);
    656686
     687        setupTaginfoNationalActions(newSel);
    657688        autoresizeTagTable();
    658689
     
    669700
    670701        if (tagData.getRowCount() != 0 || membershipData.getRowCount() != 0) {
    671             if (newSel.size() > 1) {
     702            if (newSelSize > 1) {
    672703                setTitle(tr("Objects: {2} / Tags: {0} / Memberships: {1}",
    673                     tagData.getRowCount(), membershipData.getRowCount(), newSel.size()));
     704                    tagData.getRowCount(), membershipData.getRowCount(), newSelSize));
    674705            } else {
    675706                setTitle(tr("Tags: {0} / Memberships: {1}",
Note: See TracChangeset for help on using the changeset viewer.