Changeset 2252 in josm


Ignore:
Timestamp:
2009-10-06T00:07:00+02:00 (10 years ago)
Author:
Gubaer
Message:

Refactored JOSM help system, slightly extended
Fixed problem with new internal representation of nodes as array (in Way)

Location:
trunk
Files:
4 added
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/actions/HelpAction.java

    r2250 r2252  
    44import static org.openstreetmap.josm.tools.I18n.tr;
    55
    6 import java.awt.BorderLayout;
    76import java.awt.Component;
    87import java.awt.Point;
    98import java.awt.event.ActionEvent;
    10 import java.awt.event.KeyEvent;
    11 import java.awt.event.WindowAdapter;
    12 import java.awt.event.WindowEvent;
    13 import java.io.IOException;
    149
    1510import javax.swing.AbstractAction;
    1611import javax.swing.AbstractButton;
    1712import javax.swing.Action;
    18 import javax.swing.JButton;
    1913import javax.swing.JComponent;
    20 import javax.swing.JEditorPane;
    21 import javax.swing.JFrame;
    2214import javax.swing.JMenu;
    23 import javax.swing.JOptionPane;
    24 import javax.swing.JPanel;
    25 import javax.swing.JScrollPane;
    26 import javax.swing.KeyStroke;
    2715import javax.swing.SwingUtilities;
    28 import javax.swing.event.HyperlinkEvent;
    29 import javax.swing.event.HyperlinkListener;
    3016
    3117import org.openstreetmap.josm.Main;
     18import org.openstreetmap.josm.gui.help.HelpBrowser;
     19import org.openstreetmap.josm.gui.help.Helpful;
    3220import org.openstreetmap.josm.tools.ImageProvider;
    33 import org.openstreetmap.josm.tools.LanguageInfo;
    34 import org.openstreetmap.josm.tools.OpenBrowser;
    35 import org.openstreetmap.josm.tools.WikiReader;
    3621
    3722/**
     
    4227public class HelpAction extends AbstractAction {
    4328
    44     public interface Helpful {
    45         String helpTopic();
    46     }
     29    private HelpBrowser helpBrowser;
    4730
    48     private String languageCode = LanguageInfo.getLanguageCodeWiki();
    49     private JFrame helpBrowser = new JFrame(tr("JOSM Online Help"));
    50     private String baseurl = Main.pref.get("help.baseurl", "http://josm.openstreetmap.de");
    51     private String pathbase = Main.pref.get("help.pathbase", "/wiki/");
    5231    private String pathhelp = Main.pref.get("help.pathhelp", "Help/");
    5332    private String pathmenu = Main.pref.get("help.pathmenu", "Menu/");
    54     private JEditorPane help = new JEditorPane();
    55     private WikiReader reader = new WikiReader(baseurl);
    56     private String url;
    5733
    5834    public HelpAction() {
    5935        super(tr("Help"), ImageProvider.get("help"));
    60         help.setEditable(false);
    61         help.addHyperlinkListener(new HyperlinkListener(){
    62             public void hyperlinkUpdate(HyperlinkEvent e) {
    63                 if (e.getEventType() != HyperlinkEvent.EventType.ACTIVATED)
    64                     return;
    65                 if (e.getURL() == null) {
    66                     help.setText("<html>404 not found</html>");
    67                 } else if (e.getURL().toString().endsWith("action=edit")) {
    68                     OpenBrowser.displayUrl(e.getURL().toString());
    69                 } else {
    70                     setHelpUrl(e.getURL().toString());
    71                 }
    72             }
    73         });
    74         help.setContentType("text/html");
    75 
    76         JPanel p = new JPanel(new BorderLayout());
    77         helpBrowser.setContentPane(p);
    78 
    79         p.add(new JScrollPane(help), BorderLayout.CENTER);
    80         String[] bounds = Main.pref.get("help.window.bounds", "0,0,800,600").split(",");
    81         helpBrowser.setBounds(
    82                 Integer.parseInt(bounds[0]),
    83                 Integer.parseInt(bounds[1]),
    84                 Integer.parseInt(bounds[2]),
    85                 Integer.parseInt(bounds[3]));
    86 
    87         JPanel buttons = new JPanel();
    88         p.add(buttons, BorderLayout.SOUTH);
    89         createButton(buttons, tr("Open in Browser"));
    90         createButton(buttons, tr("Edit"));
    91         createButton(buttons, tr("Reload"));
    92 
    93         helpBrowser.addWindowListener(new WindowAdapter(){
    94             @Override public void windowClosing(WindowEvent e) {
    95                 closeHelp();
    96             }
    97         });
    98 
    99         help.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke(KeyEvent.VK_ESCAPE, 0), "Close");
    100         help.getActionMap().put("Close", new AbstractAction(){
    101             public void actionPerformed(ActionEvent e) {
    102                 closeHelp();
    103             }
    104         });
     36        this.helpBrowser = new HelpBrowser();
    10537    }
    10638
    10739    public void actionPerformed(ActionEvent e) {
    108         if (tr("Open in Browser").equals(e.getActionCommand())) {
    109             OpenBrowser.displayUrl(url);
    110         } else if (tr("Edit").equals(e.getActionCommand())) {
    111             if (!url.startsWith(baseurl)) {
    112                 JOptionPane.showMessageDialog(
    113                         Main.parent,
    114                         tr("Can only edit help pages from JOSM Online Help"),
    115                         tr("Warning"),
    116                         JOptionPane.WARNING_MESSAGE
    117                 );
    118                 return;
    119             }
    120             OpenBrowser.displayUrl(url+"?action=edit");
    121         } else if (tr("Reload").equals(e.getActionCommand())) {
    122             setHelpUrl(url);
    123         } else if (e.getActionCommand() == null) {
     40        if (e.getActionCommand() == null) {
    12441            String topic = null;
    12542            if (e.getSource() instanceof Component) {
     
    13451            if (topic == null) {
    13552                helpBrowser.setVisible(false);
    136                 setHelpUrl(baseurl+pathbase+"Help");
     53                helpBrowser.setUrlForHelpTopic("Help");
    13754            } else {
    13855                help(topic);
     
    14057        } else {
    14158            helpBrowser.setVisible(false);
    142             setHelpUrl(baseurl+pathbase+"Help");
     59            helpBrowser.setUrlForHelpTopic("Help");
    14360        }
    14461    }
     
    17996    public void help(String topic) {
    18097        helpBrowser.setVisible(false);
    181         setHelpUrl(baseurl+pathbase+pathhelp+topic);
    182     }
    183 
    184     /**
    185      * Set the content of the help window to a specific text (in html format)
    186      * @param url The url this content is the representation of
    187      */
    188     public void setHelpUrl(String url) {
    189         String langurl = url;
    190         if(url.startsWith(baseurl+pathbase))
    191         {
    192             int i = pathbase.length()+baseurl.length();
    193             String title = url.substring(i);
    194             if(languageCode.length() != 0 && !title.startsWith(languageCode)) {
    195                 title = languageCode + title;
    196             }
    197             langurl = url.substring(0, i) + title;
    198         }
    199         boolean loaded = false;
    200         if(!langurl.equals(this.url) && !langurl.equals(url))
    201         {
    202             loaded = loadHelpUrl(url, langurl, true);
    203         }
    204         if(!loaded) {
    205             loaded = loadHelpUrl(url, langurl, false);
    206         }
    207         if(!loaded) {
    208             help.setText(tr("Error while loading page {0}",url));
    209         }
    210         helpBrowser.setVisible(true);
    211     }
    212 
    213     private boolean loadHelpUrl(String url, String langurl, boolean lang)
    214     {
    215         this.url = lang ? langurl : url;
    216         boolean loaded = false;
    217         try {
    218             String txt = reader.read(this.url);
    219             if(txt.length() == 0)
    220             {
    221                 if(lang)
    222                     throw new IOException();
    223                 else
    224                 {
    225                     if(url.equals(langurl))
    226                     {
    227                         txt = ("<HTML>"+tr("Help page missing. Create it in <A HREF=\"{0}\">English</A>.",
    228                                 url+"?action=edit")+"</HTML>");
    229                     }
    230                     else
    231                     {
    232                         txt = ("<HTML>"+tr("Help page missing. Create it in <A HREF=\"{0}\">English</A> or <A HREF=\"{1}\">your language</A>.",
    233                                 url+"?action=edit", langurl+"?action=edit")+"</HTML>");
    234                     }
    235                 }
    236             }
    237             help.setText(txt);
    238             help.setCaretPosition(0);
    239             loaded = true;
    240         } catch (IOException ex) {
    241         }
    242         return loaded;
    243     }
    244 
    245     /**
    246      * Closes the help window
    247      */
    248     public void closeHelp() {
    249         String bounds = helpBrowser.getX()+","+helpBrowser.getY()+","+helpBrowser.getWidth()+","+helpBrowser.getHeight();
    250         Main.pref.put("help.window.bounds", bounds);
    251         helpBrowser.setVisible(false);
    252     }
    253 
    254     private void createButton(JPanel buttons, String name) {
    255         JButton b = new JButton(tr(name));
    256         b.setActionCommand(name);
    257         b.addActionListener(this);
    258         buttons.add(b);
     98        helpBrowser.setUrlForHelpTopic(pathhelp + topic);
    25999    }
    260100}
  • trunk/src/org/openstreetmap/josm/data/osm/OsmPrimitive.java

    r2249 r2252  
    634634        incomplete = osm.incomplete;
    635635        flags = osm.flags;
     636        user= osm.user;
    636637        clearCached();
    637638        clearErrors();
  • trunk/src/org/openstreetmap/josm/data/osm/Way.java

    r2204 r2252  
    8888        if (node == null) return false;
    8989        for (int i=0; i<nodes.length; i++) {
    90             if (nodes[i].equals(node)) {
     90            if (nodes[i].equals(node))
    9191                return true;
    92             }
    9392        }
    9493        return false;
     
    177176            return false;
    178177        Way w = (Way)other;
    179         return nodes.equals(w.nodes);
     178        return Arrays.equals(nodes, w.nodes);
    180179    }
    181180
  • trunk/src/org/openstreetmap/josm/gui/MapScaler.java

    r2017 r2252  
    1212
    1313import org.openstreetmap.josm.Main;
    14 import org.openstreetmap.josm.actions.HelpAction.Helpful;
     14import org.openstreetmap.josm.gui.help.Helpful;
    1515
    1616public class MapScaler extends JComponent implements Helpful {
  • trunk/src/org/openstreetmap/josm/gui/MapSlider.java

    r2114 r2252  
    99import javax.swing.event.ChangeListener;
    1010
    11 import org.openstreetmap.josm.actions.HelpAction.Helpful;
    1211import org.openstreetmap.josm.data.ProjectionBounds;
     12import org.openstreetmap.josm.gui.help.Helpful;
    1313
    1414class MapSlider extends JSlider implements PropertyChangeListener, ChangeListener, Helpful {
  • trunk/src/org/openstreetmap/josm/gui/MapStatus.java

    r2229 r2252  
    4040
    4141import org.openstreetmap.josm.Main;
    42 import org.openstreetmap.josm.actions.HelpAction.Helpful;
    4342import org.openstreetmap.josm.data.coor.CoordinateFormat;
    4443import org.openstreetmap.josm.data.coor.LatLon;
     
    4645import org.openstreetmap.josm.data.osm.OsmPrimitive;
    4746import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
     47import org.openstreetmap.josm.gui.help.Helpful;
    4848import org.openstreetmap.josm.tools.GBC;
    4949import org.openstreetmap.josm.tools.ImageProvider;
  • trunk/src/org/openstreetmap/josm/gui/NavigatableComponent.java

    r2120 r2252  
    1515
    1616import org.openstreetmap.josm.Main;
    17 import org.openstreetmap.josm.actions.HelpAction.Helpful;
    1817import org.openstreetmap.josm.data.Bounds;
    1918import org.openstreetmap.josm.data.ProjectionBounds;
     
    2726import org.openstreetmap.josm.data.osm.WaySegment;
    2827import org.openstreetmap.josm.data.projection.Projection;
     28import org.openstreetmap.josm.gui.help.Helpful;
    2929
    3030/**
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictDialog.java

    r2131 r2252  
    4646import org.openstreetmap.josm.gui.OsmPrimitivRenderer;
    4747import org.openstreetmap.josm.gui.SideButton;
     48import org.openstreetmap.josm.gui.help.HelpBuilder;
    4849import org.openstreetmap.josm.gui.layer.Layer;
    4950import org.openstreetmap.josm.gui.layer.OsmDataLayer;
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ConflictResolutionDialog.java

    r2017 r2252  
    2828import org.openstreetmap.josm.gui.conflict.pair.ConflictResolver;
    2929import org.openstreetmap.josm.gui.conflict.pair.properties.OperationCancelledException;
     30import org.openstreetmap.josm.gui.help.HelpBuilder;
    3031import org.openstreetmap.josm.tools.ImageProvider;
    3132
     
    143144
    144145        resolver.addPropertyChangeListener(this);
     146        HelpBuilder.setHelpContext(this.getRootPane(), "Dialog/ConflictDialog");
    145147    }
    146148
  • trunk/src/org/openstreetmap/josm/gui/dialogs/ToggleDialog.java

    r2232 r2252  
    3333import org.openstreetmap.josm.Main;
    3434import org.openstreetmap.josm.actions.JosmAction;
    35 import org.openstreetmap.josm.actions.HelpAction.Helpful;
    3635import org.openstreetmap.josm.gui.dialogs.DialogsPanel.Action;
     36import org.openstreetmap.josm.gui.help.Helpful;
    3737import org.openstreetmap.josm.tools.GBC;
    3838import org.openstreetmap.josm.tools.ImageProvider;
     
    291291                        @Override
    292292                        public void mouseClicked(MouseEvent e) {
    293 //                            toggleExpandedState();
     293                            //                            toggleExpandedState();
    294294                            if (isCollapsed) {
    295295                                expand();
  • trunk/test/unit/org/openstreetmap/josm/data/osm/history/HistoryNodeTest.java

    r1670 r2252  
    66
    77import org.junit.Test;
     8import org.openstreetmap.josm.data.coor.LatLon;
    89import org.openstreetmap.josm.data.osm.OsmPrimitiveType;
    910
     
    2223                3,
    2324                4,
    24                 d
     25                d,
     26                new LatLon(0,0)
    2527        );
    2628
     
    4446                3,
    4547                4,
    46                 d
     48                d,
     49                new LatLon(0,0)
    4750        );
    4851
  • trunk/test/unit/org/openstreetmap/josm/data/osm/visitor/MergeVisitorTest.java

    r2150 r2252  
    10241024        assertTrue(!w.getNode(1).incomplete);
    10251025    }
    1026 
    1027 
    1028     @Test
    1029     public void test1() throws Exception {
    1030         System.out.println(URLEncoder.encode("Ævar Arnfjörð Bjarmason", "UTF-8").replaceAll("\\+", "%20"));
    1031 
    1032     }
    10331026}
Note: See TracChangeset for help on using the changeset viewer.