Changeset 2252 in josm


Ignore:
Timestamp:
Oct 6, 2009 12:07:00 AM (4 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.