Ticket #14578: 14578.patch

File 14578.patch, 3.7 KB (added by simon04, 9 years ago)
  • src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java

    diff --git a/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java b/src/org/openstreetmap/josm/gui/history/VersionInfoPanel.java
    index f001e982c..d86d7373c 100644
    a b  
    99import java.awt.GridBagConstraints;
    1010import java.awt.GridBagLayout;
    1111import java.awt.Insets;
     12import java.awt.Rectangle;
    1213import java.awt.event.ActionEvent;
    1314import java.text.DateFormat;
     15import java.text.MessageFormat;
     16import java.util.Arrays;
    1417import java.util.Collections;
    1518import java.util.Date;
    1619
     
    1922import javax.swing.JComponent;
    2023import javax.swing.JLabel;
    2124import javax.swing.JPanel;
     25import javax.swing.JPopupMenu;
    2226import javax.swing.JTextArea;
    2327import javax.swing.event.ChangeEvent;
    2428import javax.swing.event.ChangeListener;
     29import javax.swing.plaf.basic.BasicArrowButton;
    2530
    2631import org.openstreetmap.josm.Main;
    2732import org.openstreetmap.josm.data.osm.Changeset;
     
    3843import org.openstreetmap.josm.tools.CheckParameterUtil;
    3944import org.openstreetmap.josm.tools.GBC;
    4045import org.openstreetmap.josm.tools.ImageProvider;
     46import org.openstreetmap.josm.tools.OpenBrowser;
    4147import org.openstreetmap.josm.tools.Utils;
    4248import org.openstreetmap.josm.tools.date.DateUtils;
    4349
    protected void build() {  
    107113        lblUser = new UrlLabel("", 2);
    108114        pnlUserAndChangeset.add(lblUser, GBC.eol().insets(5, 0, 0, 0).weight(1, 0));
    109115
     116        final JPanel changesetPanel = new JPanel(new BorderLayout());
    110117        changesetButton.setMargin(new Insets(0, 0, 0, 2));
    111         pnlUserAndChangeset.add(changesetButton, GBC.std().fill().weight(0, 0));
     118        changesetPanel.add(changesetButton, BorderLayout.CENTER);
     119        final BasicArrowButton arrowButton = new BasicArrowButton(BasicArrowButton.SOUTH);
     120        arrowButton.addActionListener(action -> new OpenChangesetPopupMenu(changesetDialogAction).show(arrowButton));
     121        changesetPanel.add(arrowButton, BorderLayout.EAST);
     122        pnlUserAndChangeset.add(changesetPanel, GBC.std().fill().weight(0, 0));
    112123
    113124        lblChangeset = new UrlLabel("", 2);
    114125        pnlUserAndChangeset.add(lblChangeset, GBC.std().insets(5, 0, 0, 0).weight(1, 0));
    public void actionPerformed(ActionEvent e) {  
    310321            }
    311322        }
    312323    }
     324
     325    static class OpenChangesetPopupMenu extends JPopupMenu {
     326        OpenChangesetPopupMenu(final OpenChangesetDialogAction openChangesetDialogAction) {
     327            add(openChangesetDialogAction).setText(tr("Open Changeset Manager"));
     328            Main.pref.getCollection("history-dialog.urls",
     329                    Arrays.asList(Main.getBaseBrowseUrl() + "/changeset/{0}", "http://osmhv.openstreetmap.de/changeset.jsp?id={0}", "https://overpass-api.de/achavi/?changeset={0}")
     330            ).stream()
     331                    .map(template -> MessageFormat.format(template, Long.toString(openChangesetDialogAction.id)))
     332                    .map(OpenBrowserAction::new)
     333                    .forEach(this::add);
     334        }
     335
     336        void show(final JComponent parent) {
     337            final Rectangle r = parent.getBounds();
     338            show(parent.getParent(), r.x + r.width - (int) getPreferredSize().getWidth(), r.y + r.height);
     339        }
     340    }
     341
     342    static class OpenBrowserAction extends AbstractAction {
     343        final String url;
     344
     345        OpenBrowserAction(String url) {
     346            putValue(NAME, tr("Open {0}", url));
     347            new ImageProvider("help/internet").getResource().attachImageIcon(this, true);
     348            this.url = url;
     349        }
     350
     351        @Override
     352        public void actionPerformed(ActionEvent e) {
     353            OpenBrowser.displayUrl(url);
     354        }
     355    }
    313356}