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