001// License: GPL. For details, see LICENSE file.
002package org.openstreetmap.josm.plugins.streetside.gui.imageinfo;
003
004import java.awt.BorderLayout;
005import java.awt.Color;
006import java.awt.Component;
007import java.awt.IllegalComponentStateException;
008import java.awt.event.ActionEvent;
009
010import javax.swing.AbstractAction;
011import javax.swing.JLabel;
012import javax.swing.JPanel;
013import javax.swing.JPopupMenu;
014import javax.swing.JTextPane;
015
016import org.apache.log4j.Logger;
017import org.openstreetmap.josm.plugins.streetside.gui.boilerplate.SelectableLabel;
018import org.openstreetmap.josm.plugins.streetside.gui.boilerplate.StreetsideButton;
019import org.openstreetmap.josm.plugins.streetside.utils.StreetsideColorScheme;
020import org.openstreetmap.josm.plugins.streetside.utils.StreetsideProperties;
021import org.openstreetmap.josm.tools.I18n;
022import org.openstreetmap.josm.tools.ImageProvider;
023
024public class ImageInfoHelpPopup extends JPopupMenu {
025
026  private static final long serialVersionUID = -1721594904273820586L;
027
028  final static Logger logger = Logger.getLogger(ImageInfoHelpPopup.class);
029
030  private final Component invokerComp;
031  private boolean alreadyDisplayed;
032
033  public ImageInfoHelpPopup(Component invoker) {
034    invokerComp = invoker;
035    removeAll();
036    setLayout(new BorderLayout());
037
038    JPanel topBar = new JPanel();
039    topBar.add(new JLabel(ImageProvider.get("streetside-logo-white")));
040    topBar.setBackground(StreetsideColorScheme.TOOLBAR_DARK_GREY);
041    add(topBar, BorderLayout.NORTH);
042
043    JTextPane mainText = new JTextPane();
044    mainText.setContentType("text/html");
045    mainText.setFont(SelectableLabel.DEFAULT_FONT);
046    mainText.setText("<html><div style='width:250px'>" +
047      "Welcome to the Microsoft Streetside JOSM Plugin. To view the vector bubbles for the 360 degree imagery, select Imagery->Streetside from the JOSM menu."
048      + "<br><br>"
049      + "Once the blue bubbles appear on the map, click on a vector bubble and undock/maximize the 360 viewer to view the imagery."
050      + "</div></html>");
051    add(mainText, BorderLayout.CENTER);
052
053    JPanel bottomBar = new JPanel();
054    bottomBar.setBackground(new Color(0x00FFFFFF, true));
055    StreetsideButton infoButton = new StreetsideButton(ImageInfoPanel.getInstance().getToggleAction());
056    infoButton.addActionListener(e -> setVisible(false));
057    bottomBar.add(infoButton);
058                StreetsideButton closeBtn = new StreetsideButton(new AbstractAction() {
059
060                        private static final long serialVersionUID = 2853315308169651854L;
061
062                        @Override
063                        public void actionPerformed(ActionEvent e) {
064                                setVisible(false);
065                                StreetsideProperties.IMAGEINFO_HELP_COUNTDOWN.put(0);
066                        }
067                });
068
069                closeBtn.setText(I18n.tr("I got it, close this."));
070                bottomBar.add(closeBtn);
071                add(bottomBar, BorderLayout.SOUTH);
072
073                setBackground(Color.WHITE);
074        }
075
076  /**
077   * @return <code>true</code> if the popup is displayed
078   */
079  public boolean showPopup() {
080    if (!alreadyDisplayed && invokerComp.isShowing()) {
081      try {
082        show(invokerComp, invokerComp.getWidth(), 0);
083        alreadyDisplayed = true;
084        return true;
085      } catch (IllegalComponentStateException e) {
086        logger.warn(I18n.tr("Could not show ImageInfoHelpPopup, because probably the invoker component has disappeared from screen.", e));
087      }
088    }
089    return false;
090  }
091}