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 ImageInfoHelpPopup extends JPopupMenu { 025 026 private static final long serialVersionUID = -1721594904273820586L; 027 028 private final Component invokerComp; 029 private boolean alreadyDisplayed; 030 031 public ImageInfoHelpPopup(Component invoker) { 032 invokerComp = invoker; 033 removeAll(); 034 setLayout(new BorderLayout()); 035 036 JPanel topBar = new JPanel(); 037 topBar.add(new JLabel(ImageProvider.get("streetside-logo-white"))); 038 topBar.setBackground(StreetsideColorScheme.TOOLBAR_DARK_GREY); 039 add(topBar, BorderLayout.NORTH); 040 041 JTextPane mainText = new JTextPane(); 042 mainText.setContentType("text/html"); 043 mainText.setFont(SelectableLabel.DEFAULT_FONT); 044 // TODO: tr( RRH 045 mainText.setText( 046 "<html><div style='width:250px'>" + 047 I18n.tr("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).") + 048 "<br><br>" + 049 I18n.tr("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 ); 052 add(mainText, BorderLayout.CENTER); 053 054 JPanel bottomBar = new JPanel(); 055 bottomBar.setBackground(new Color(0x00FFFFFF, true)); 056 StreetsideButton infoButton = new StreetsideButton(ImageInfoPanel.getInstance().getToggleAction()); 057 infoButton.addActionListener(e -> setVisible(false)); 058 bottomBar.add(infoButton); 059 StreetsideButton closeBtn = new StreetsideButton(new AbstractAction() { 060 061 private static final long serialVersionUID = 2853315308169651854L; 062 063 @Override 064 public void actionPerformed(ActionEvent e) { 065 setVisible(false); 066 StreetsideProperties.IMAGEINFO_HELP_COUNTDOWN.put(0); 067 } 068 }); 069 070 closeBtn.setText(I18n.tr("I got it, close this.")); 071 bottomBar.add(closeBtn); 072 add(bottomBar, BorderLayout.SOUTH); 073 074 setBackground(Color.WHITE); 075 } 076 077 /** 078 * @return <code>true</code> if the popup is displayed 079 */ 080 public boolean showPopup() { 081 if (!alreadyDisplayed && invokerComp.isShowing()) { 082 try { 083 show(invokerComp, invokerComp.getWidth(), 0); 084 alreadyDisplayed = true; 085 return true; 086 } catch (IllegalComponentStateException e) { 087 Logging.log(Logging.LEVEL_WARN, "Could not show ImageInfoHelpPopup, because probably the invoker component has disappeared from screen.", e); 088 } 089 } 090 return false; 091 } 092}