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.openstreetmap.josm.plugins.streetside.gui.boilerplate.SelectableLabel; 017import org.openstreetmap.josm.plugins.streetside.gui.boilerplate.StreetsideButton; 018import org.openstreetmap.josm.plugins.streetside.utils.StreetsideColorScheme; 019import org.openstreetmap.josm.plugins.streetside.utils.StreetsideProperties; 020import org.openstreetmap.josm.tools.I18n; 021import org.openstreetmap.josm.tools.ImageProvider; 022import org.openstreetmap.josm.tools.Logging; 023 024public class StreetsideViewerHelpPopup extends JPopupMenu { 025 026 private static final long serialVersionUID = -7840242522398163839L; 027 028 private final Component invokerComp; 029 private boolean alreadyDisplayed; 030 031 public StreetsideViewerHelpPopup(Component invoker) { 032 033 invokerComp = invoker; 034 removeAll(); 035 setLayout(new BorderLayout()); 036 037 JPanel topBar = new JPanel(); 038 topBar.add(new JLabel(ImageProvider.get("streetside-logo-white"))); 039 topBar.setBackground(StreetsideColorScheme.TOOLBAR_DARK_GREY); 040 add(topBar, BorderLayout.NORTH); 041 042 JTextPane mainText = new JTextPane(); 043 mainText.setContentType("text/html"); 044 mainText.setFont(SelectableLabel.DEFAULT_FONT); 045 mainText.setText("<html><div style='width:250px'>" + I18n.tr( 046 "The Streetside plugin now uses a separate panel to display extra information (like the image key) and actions for the currently selected Streetside image (like viewing it in a browser).") 047 + "<br><br>" 048 + I18n.tr( 049 "It can be activated by clicking the left button at the bottom of this message or the button in the toolbar on the left, which uses the same icon.") 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 private static final long serialVersionUID = -6193886964751195196L; 060 061 @Override 062 public void actionPerformed(ActionEvent e) { 063 setVisible(false); 064 StreetsideProperties.IMAGEINFO_HELP_COUNTDOWN.put(0); 065 } 066 }); 067 068 closeBtn.setText(I18n.tr("I got it, close this.")); 069 bottomBar.add(closeBtn); 070 add(bottomBar, BorderLayout.SOUTH); 071 072 setBackground(Color.WHITE); 073} 074 075/** 076* @return <code>true</code> if the popup is displayed 077*/ 078public boolean showPopup() { 079 if (!alreadyDisplayed && invokerComp.isShowing()) { 080 try { 081 show(invokerComp, invokerComp.getWidth(), 0); 082 alreadyDisplayed = true; 083 return true; 084 } catch (IllegalComponentStateException e) { 085 Logging.log(Logging.LEVEL_WARN, "Could not show ImageInfoHelpPopup, because probably the invoker component has disappeared from screen.", e); 086 } 087 } 088 return false; 089} 090}