package org.docear.plugin.services.features.payment.view; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Cursor; import java.awt.Dimension; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import java.io.IOException; import java.net.URI; import javax.swing.AbstractAction; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.border.LineBorder; import javax.swing.border.MatteBorder; import org.freeplane.core.resources.IFreeplanePropertyListener; import org.freeplane.core.resources.ResourceController; import org.freeplane.core.util.LogUtils; import org.freeplane.core.util.TextUtils; import org.freeplane.features.mode.Controller; import org.freeplane.features.mode.ModeController; import org.freeplane.plugin.workspace.WorkspaceController; import org.freeplane.plugin.workspace.components.TreeView; import org.freeplane.plugin.workspace.features.AWorkspaceModeExtension; import org.pushingpixels.flamingo.api.common.icon.ImageWrapperResizableIcon; import org.pushingpixels.flamingo.api.common.icon.ResizableIcon; import com.jgoodies.forms.factories.FormFactory; import com.jgoodies.forms.layout.ColumnSpec; import com.jgoodies.forms.layout.FormLayout; import com.jgoodies.forms.layout.RowSpec; public class PayPalBanner extends JPanel { public static final String BANNER_PROPERTY_NAME = "docear.banner.paypal.show"; private static final long serialVersionUID = 1L; public PayPalBanner() { setBorder(new CompoundBorder(new MatteBorder(0, 0, 0, 0, (Color) new Color(160, 160, 160)), new CompoundBorder(new EmptyBorder(0, 2, 2, 2), new LineBorder(new Color(160, 160, 160))))); JPanel banner = new JPanel(); banner.setBackground(Color.white); banner.setLayout(new FormLayout(new ColumnSpec[] { ColumnSpec.decode("4dlu:grow"), ColumnSpec.decode("right:default"), ColumnSpec.decode("left:default"), FormFactory.RELATED_GAP_COLSPEC, ColumnSpec.decode("default:grow"),}, new RowSpec[] { RowSpec.decode("22px"),})); JLabel lblText = new JLabel(TextUtils.getText("docear.banner.supportus") + " "); Font font = lblText.getFont().deriveFont(Font.BOLD); lblText.setFont(font); banner.add(lblText, "2, 1"); JLabel lblIcon = new JLabel(""); ResizableIcon icon = ImageWrapperResizableIcon.getIcon(PayPalBanner.class.getResource("/icons/paypal.png"), new Dimension(151, 46)); icon.setDimension(new Dimension(48, 16)); lblIcon.setIcon(icon); banner.add(lblIcon, "3, 1"); setMaximumSize(new Dimension(99999, 28)); banner.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR)); banner.addMouseListener(new MouseListener() { public void mouseReleased(MouseEvent e) { if(!e.isConsumed() && e.isPopupTrigger()) { e.consume(); showContextMenu(e); } } public void mousePressed(MouseEvent e) { if(!e.isConsumed() && e.isPopupTrigger()) { e.consume(); showContextMenu(e); } } public void mouseExited(MouseEvent e) {} public void mouseEntered(MouseEvent e) {} public void mouseClicked(MouseEvent e) { if(e.getButton() == MouseEvent.BUTTON1) { try { Controller.getCurrentController().getViewController().openDocument(URI.create("https://www.docear.org/give-back/donate/")); } catch (IOException ex) { LogUtils.warn("org.docear.plugin.services.features.payment.view.PayPalBanner.PayPalBanner(): "+ ex.getMessage()); } } } }); setLayout(new BorderLayout(0, 0)); add(banner); } /*********************************************************************************** * CONSTRUCTORS **********************************************************************************/ /*********************************************************************************** * METHODS **********************************************************************************/ private void showContextMenu(MouseEvent e) { JPopupMenu context = new JPopupMenu(); JMenuItem item = new JMenuItem(); item.setAction(new AbstractAction() { private static final long serialVersionUID = 1L; public void actionPerformed(ActionEvent e) { ResourceController.getResourceController().setProperty(BANNER_PROPERTY_NAME, "false"); } }); item.setText(TextUtils.getText("menu.context.banner.paypal.disable")); context.add(item); context.show(e.getComponent(), e.getX(), e.getY()); } public void init(final ModeController modeController) { ResourceController.getResourceController().addPropertyChangeListener(new IFreeplanePropertyListener() { public void propertyChanged(String propertyName, String newValue, String oldValue) { if(BANNER_PROPERTY_NAME.equals(propertyName)) { showBanner(modeController, Boolean.parseBoolean(newValue)); } } }); showBanner(modeController, Boolean.parseBoolean(ResourceController.getResourceController().getProperty(BANNER_PROPERTY_NAME, "true"))); } public void showBanner(ModeController modeController, boolean enabled) { AWorkspaceModeExtension modeExt = WorkspaceController.getModeExtension(modeController); if(modeExt != null) { if(modeExt.getView() instanceof TreeView) { TreeView view = (TreeView) modeExt.getView(); if(enabled) { view.addBottomBanner(this); } else { view.removeBottomBanner(this); } } } } }