Ticket #5443: PropertiesDialog.java.respcode-used.patch

File PropertiesDialog.java.respcode-used.patch, 5.8 KB (added by cmuelle8, 15 years ago)

simplified page-exists determination, took locale into account

  • src/org/openstreetmap/josm/gui/dialogs/properties/PropertiesDialog.java

     
    66
    77import java.awt.BorderLayout;
    88import java.awt.Component;
     9import java.awt.Desktop;
     10import java.awt.Dialog.ModalityType;
    911import java.awt.Font;
    1012import java.awt.GridBagLayout;
    1113import java.awt.Point;
    12 import java.awt.Dialog.ModalityType;
    1314import java.awt.event.ActionEvent;
    1415import java.awt.event.ActionListener;
    1516import java.awt.event.FocusAdapter;
     
    1718import java.awt.event.KeyEvent;
    1819import java.awt.event.MouseAdapter;
    1920import java.awt.event.MouseEvent;
     21import java.net.URI;
    2022import java.util.ArrayList;
    2123import java.util.Collection;
    2224import java.util.Collections;
     
    2426import java.util.HashMap;
    2527import java.util.Iterator;
    2628import java.util.List;
     29import java.util.Locale;
    2730import java.util.Map;
     31import java.util.Map.Entry;
    2832import java.util.TreeMap;
    2933import java.util.Vector;
    30 import java.util.Map.Entry;
    3134
    3235import javax.swing.AbstractAction;
    3336import javax.swing.Box;
     
    6770import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
    6871import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
    6972import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
    70 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
    7173import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
     74import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
    7275import org.openstreetmap.josm.gui.DefaultNameFormatter;
    7376import org.openstreetmap.josm.gui.ExtendedDialog;
    7477import org.openstreetmap.josm.gui.MapFrame;
     
    8790import org.openstreetmap.josm.tools.ImageProvider;
    8891import org.openstreetmap.josm.tools.Shortcut;
    8992
     93import sun.net.www.protocol.http.HttpURLConnection;
     94
    9095/**
    9196 * This dialog displays the properties of the current selected primitives.
    9297 *
     
    704709        getActionMap().put("delete", deleteAction);
    705710        buttonPanel.add(this.btnDel);
    706711        add(buttonPanel, BorderLayout.SOUTH);
     712
     713        // -- help action
     714        //
     715        HelpAction helpAction = new HelpAction();
     716        propertyTable.getSelectionModel().addListSelectionListener(helpAction);
     717        getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
     718                KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "onHelp");
     719        getActionMap().put("onHelp", helpAction);
    707720    }
    708721
    709722    @Override public void setVisible(boolean b) {
     
    10211034        }
    10221035    }
    10231036
     1037    class HelpAction extends AbstractAction implements ListSelectionListener {
     1038        public HelpAction() {
     1039            putValue(NAME, tr("Help"));
     1040            putValue(SHORT_DESCRIPTION, tr("Launch browser with wiki help to selected object"));
     1041            updateEnabledState();
     1042        }
     1043
     1044        @SuppressWarnings("unchecked")
     1045        public void actionPerformed(ActionEvent e) {
     1046            if (!isEnabled())
     1047                return;
     1048
     1049            try {
     1050                String base = new String("http://wiki.openstreetmap.org/wiki/");
     1051                String l = Locale.getDefault().getCountry() + ":";
     1052                Vector<URI> v = new Vector<URI>();
     1053
     1054                String uri;
     1055                int row;
     1056                if (propertyTable.getSelectedRowCount() == 1) {
     1057                    row = propertyTable.getSelectedRow();
     1058                    uri = base + l + "Tag:" +
     1059                    propertyData.getValueAt(row, 0).toString() + "=" +
     1060                    ((Map<String,Integer>)propertyData.getValueAt(row, 1)).entrySet().iterator().next().getKey();
     1061
     1062                    v.add(new URI(uri));
     1063                    v.add(new URI(uri.substring(0, uri.indexOf('=')).replace("Tag:", "Key:")));
     1064                    v.add(new URI(base + l + "Map_Features"));
     1065                } else if (membershipTable.getSelectedRowCount() == 1) {
     1066                    row = membershipTable.getSelectedRow();
     1067                    uri = base + l + "Relation:" + ((Relation)membershipData.getValueAt(row, 0)).get("type");
     1068
     1069                    v.add(new URI(uri));
     1070                    v.add(new URI(uri = base + l + "Relations"));
     1071                }
     1072
     1073                // try all localized variants and if they are not available, try default as well
     1074                for (row = 0; row < v.size(); row++) {
     1075                    v.insertElementAt(new URI(v.get(row).toString().replace(l, "")), ++row);
     1076                }
     1077                // find a page that actually exists in the wiki
     1078                while ( !v.isEmpty() &&
     1079                        ((HttpURLConnection) v.firstElement().toURL().openConnection())
     1080                        .getResponseCode() != 200) {
     1081                    System.out.println("INFO: looking for " + v.firstElement());
     1082                    v.remove(0);
     1083                }
     1084
     1085                // browse the help page
     1086                if (!v.isEmpty()) {
     1087                    System.out.println("INFO: browsing to url " + v.firstElement());
     1088                    Desktop.getDesktop().browse(v.firstElement());
     1089                }
     1090            } catch (Exception e1) {
     1091                e1.printStackTrace();
     1092            }
     1093        }
     1094
     1095        protected void updateEnabledState() {
     1096            setEnabled(
     1097                    propertyTable.getSelectedRowCount() == 1
     1098                    ^ membershipTable.getSelectedRowCount() == 1
     1099            );
     1100        }
     1101
     1102        public void valueChanged(ListSelectionEvent e) {
     1103            updateEnabledState();
     1104        }
     1105    }
     1106
    10241107    static class SelectRelationAction extends AbstractAction {
    10251108        boolean selectionmode;
    10261109        Relation relation;