001 package org.openstreetmap.josm.gui.actionsupport;
002
003
004 import static org.openstreetmap.josm.tools.I18n.tr;
005
006 import java.awt.Color;
007 import java.awt.Font;
008 import java.awt.GridBagLayout;
009 import java.awt.Toolkit;
010 import java.awt.event.ActionEvent;
011 import java.awt.event.ActionListener;
012
013 import javax.swing.JButton;
014 import javax.swing.JLabel;
015 import javax.swing.JPanel;
016 import javax.swing.border.CompoundBorder;
017 import javax.swing.border.EmptyBorder;
018 import javax.swing.border.EtchedBorder;
019
020 import org.openstreetmap.josm.Main;
021 import org.openstreetmap.josm.tools.GBC;
022 import org.openstreetmap.josm.tools.ImageProvider;
023 import org.openstreetmap.josm.tools.UrlLabel;
024
025
026 /**
027 * The panel to nag a user ONCE that he/she has to align imagery.
028 *
029 * @author zverik
030 */
031 public class AlignImageryPanel extends JPanel {
032 private static final String PREF = "imagery.offsetnagging";
033
034 public AlignImageryPanel(boolean oneLine) {
035 super();
036
037 Font font = getFont().deriveFont(Font.PLAIN, 14.0f);
038 JLabel nagLabel = new JLabel(tr("Aerial imagery might be misaligned. Please check its offset using GPS tracks!"));
039 UrlLabel detailsList = new UrlLabel(tr("http://wiki.openstreetmap.org/wiki/Using_Imagery"), tr("Details..."));
040 nagLabel.setFont(font);
041 detailsList.setFont(font);
042
043 JButton closeButton = new JButton(ImageProvider.get("misc", "black_x"));
044 closeButton.setContentAreaFilled(false);
045 closeButton.setRolloverEnabled(true);
046 closeButton.setBorderPainted(false);
047 closeButton.setToolTipText(tr("Hide this message and never show it again"));
048 closeButton.addActionListener(new ActionListener() {
049 @Override
050 public void actionPerformed( ActionEvent e ) {
051 if (Main.isDisplayingMapView()) {
052 Main.map.removeTopPanel(AlignImageryPanel.class);
053 Main.pref.put(PREF, false);
054 }
055 }
056 });
057
058 setLayout(new GridBagLayout());
059 if (!oneLine) { // tune for small screens
060 add(nagLabel, GBC.std(1, 1).fill());
061 add(detailsList, GBC.std(1, 2).fill());
062 add(closeButton, GBC.std(2, 1).span(1,2).anchor(GBC.EAST));
063 } else {
064 add(nagLabel, GBC.std(1,1).fill());
065 add(detailsList, GBC.std(2,1).fill());
066 add(closeButton, GBC.std(3,1).anchor(GBC.EAST));
067 }
068 // setBorder(new EmptyBorder(12, 12, 12, 12));
069 setBorder(new CompoundBorder(new EtchedBorder(EtchedBorder.LOWERED), new EmptyBorder(12, 12, 12, 12)));
070 setBackground(new Color(224, 236, 249));
071 }
072
073 public static void addNagPanelIfNeeded() {
074 if (Main.isDisplayingMapView() && !Main.pref.getBoolean("expert") && Main.pref.getBoolean(PREF, true) ) {
075 if (Main.map.getTopPanel(AlignImageryPanel.class) == null) {
076 double w = Toolkit.getDefaultToolkit().getScreenSize().getWidth();
077 AlignImageryPanel p = new AlignImageryPanel(w>1300);
078 Main.map.addTopPanel(p);
079 }
080 }
081 }
082
083 }