Ticket #5443: PropertiesDialog.java.2.patch

File PropertiesDialog.java.2.patch, 5.3 KB (added by cmuelle8, 15 years ago)

if there exists a "Tag:key=value" page in osm wiki (verified w/ wgArticleId of the actual webpage), use that for help, else use "Key:key"

  • 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;
     
    2527import java.util.Iterator;
    2628import java.util.List;
    2729import java.util.Map;
     30import java.util.Map.Entry;
    2831import java.util.TreeMap;
    2932import java.util.Vector;
    30 import java.util.Map.Entry;
    3133
    3234import javax.swing.AbstractAction;
    3335import javax.swing.Box;
     
    6769import org.openstreetmap.josm.data.osm.event.AbstractDatasetChangedEvent;
    6870import org.openstreetmap.josm.data.osm.event.DataSetListenerAdapter;
    6971import org.openstreetmap.josm.data.osm.event.DatasetEventManager;
    70 import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
    7172import org.openstreetmap.josm.data.osm.event.DatasetEventManager.FireMode;
     73import org.openstreetmap.josm.data.osm.event.SelectionEventManager;
    7274import org.openstreetmap.josm.gui.DefaultNameFormatter;
    7375import org.openstreetmap.josm.gui.ExtendedDialog;
    7476import org.openstreetmap.josm.gui.MapFrame;
     
    8789import org.openstreetmap.josm.tools.ImageProvider;
    8890import org.openstreetmap.josm.tools.Shortcut;
    8991
     92
    9093/**
    9194 * This dialog displays the properties of the current selected primitives.
    9295 *
     
    704707        getActionMap().put("delete", deleteAction);
    705708        buttonPanel.add(this.btnDel);
    706709        add(buttonPanel, BorderLayout.SOUTH);
     710
     711        // -- help action
     712        //
     713        HelpAction helpAction = new HelpAction();
     714        propertyTable.getSelectionModel().addListSelectionListener(helpAction);
     715        getInputMap(JComponent.WHEN_ANCESTOR_OF_FOCUSED_COMPONENT).put(
     716                KeyStroke.getKeyStroke(KeyEvent.VK_F1, 0), "onHelp");
     717        getActionMap().put("onHelp", helpAction);
    707718    }
    708719
    709720    @Override public void setVisible(boolean b) {
     
    10211032        }
    10221033    }
    10231034
     1035    class HelpAction extends AbstractAction implements ListSelectionListener {
     1036        public HelpAction() {
     1037            putValue(NAME, tr("Help"));
     1038            putValue(SHORT_DESCRIPTION, tr("Launch browser with wiki help to selected object"));
     1039            updateEnabledState();
     1040        }
     1041
     1042        @SuppressWarnings("unchecked")
     1043        public void actionPerformed(ActionEvent e) {
     1044            if (!isEnabled())
     1045                return;
     1046
     1047            try {
     1048                URI uri = new URI("http://wiki.openstreetmap.org/");
     1049
     1050                if (propertyTable.getSelectedRowCount() == 1) {
     1051                    int row = propertyTable.getSelectedRow();
     1052                    uri = new URI("http://wiki.openstreetmap.org/wiki/Tag:"+
     1053                            propertyData.getValueAt(row, 0).toString()+"="+
     1054                            ((Map<String,Integer>)propertyData.getValueAt(row, 1))
     1055                            .entrySet().iterator().next().getKey()
     1056                    );
     1057
     1058                    byte[] b = new byte[4096];
     1059                    InputStream is = uri.toURL().openStream();
     1060                    is.read(b);
     1061                    is.close();
     1062
     1063                    String id = new String(b);
     1064                    int i1 = id.indexOf("wgArticleId=");
     1065                    if (i1 > -1) {
     1066                        id = id.substring(id.indexOf('=', i1) + 1, id.indexOf(',', i1));
     1067                    } else {
     1068                        id = "0";
     1069                    }
     1070                    if (id.equals("0")) {
     1071                        uri = new URI("http://wiki.openstreetmap.org/wiki/Key:"+
     1072                                propertyData.getValueAt(row, 0).toString());
     1073                    }
     1074                } else if (membershipTable.getSelectedRowCount() == 1) {
     1075                    int row = membershipTable.getSelectedRow();
     1076                    uri = new URI("http://wiki.openstreetmap.org/wiki/Relation:"+
     1077                            ((Relation)membershipData.getValueAt(row, 0)).get("type"));
     1078                }
     1079
     1080                Desktop.getDesktop().browse(uri);
     1081            } catch (Exception e1) {
     1082                e1.printStackTrace();
     1083            }
     1084        }
     1085
     1086        protected void updateEnabledState() {
     1087            setEnabled(
     1088                    propertyTable.getSelectedRowCount() == 1
     1089                    ^ membershipTable.getSelectedRowCount() == 1
     1090            );
     1091        }
     1092
     1093        public void valueChanged(ListSelectionEvent e) {
     1094            updateEnabledState();
     1095        }
     1096    }
     1097
    10241098    static class SelectRelationAction extends AbstractAction {
    10251099        boolean selectionmode;
    10261100        Relation relation;