package plugins.nherve.toolbox.plugin;
import icy.gui.frame.IcyFrame;
import java.awt.AlphaComposite;
import java.awt.BasicStroke;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Font;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.RadialGradientPaint;
import java.awt.RenderingHints;
import java.awt.geom.Point2D;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import javax.swing.BorderFactory;
import javax.swing.BoxLayout;
import javax.swing.JPanel;
import org.pushingpixels.substance.api.DecorationAreaType;
import org.pushingpixels.substance.api.SubstanceColorScheme;
import org.pushingpixels.substance.api.SubstanceLookAndFeel;
import org.pushingpixels.substance.api.SubstanceSkin;
public class MyFrame extends IcyFrame {
private class MyLogo extends JPanel {
private static final long serialVersionUID = -3599856522326379063L;
final String pluginName;
final String pluginVersion;
final Font nameFont;
final Font versionFont;
final Image logo;
public MyLogo(String pluginName, String pluginVersion, Dimension dim, Image logo) {
super();
this.pluginName = pluginName;
this.pluginVersion = pluginVersion;
this.logo = logo;
setPreferredSize(dim);
nameFont = new Font("Arial", Font.BOLD, 20);
versionFont = new Font("Arial", Font.ITALIC, 10);
}
@Override
protected void paintComponent(Graphics g) {
super.paintComponent(g);
final int w = getWidth();
final int h = getHeight();
final Graphics2D g2 = (Graphics2D) g.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_TEXT_ANTIALIASING, RenderingHints.VALUE_TEXT_ANTIALIAS_ON);
SubstanceSkin skin = SubstanceLookAndFeel.getCurrentSkin();
DecorationAreaType deco = SubstanceLookAndFeel.getDecorationType(getInternalFrame());
SubstanceColorScheme cs = skin.getActiveColorScheme(deco);
Color lightColor = cs.getLightColor();
Color darkColor = cs.getUltraDarkColor();
Point2D center = new Point2D.Float(w / 2, h / 2);
float radius = (float) w / 1.7f;
float[] dist = { 0.1f, 0.7f };
Color[] colors = { lightColor, darkColor };
RadialGradientPaint gradient = new RadialGradientPaint(center, radius, dist, colors);
final float ray = Math.max(w, h) * 0.05f;
final RoundRectangle2D roundRect = new RoundRectangle2D.Double(0, 0, w, h, Math.min(ray * 2, 20), Math.min(ray * 2, 20));
g2.setPaint(gradient);
g2.fill(roundRect);
g2.setColor(darkColor);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 0.5f));
g2.setStroke(new BasicStroke(Math.max(1f, 10f)));
g2.draw(roundRect);
g2.setComposite(AlphaComposite.getInstance(AlphaComposite.SRC_OVER, 1f));
g2.setColor(darkColor.darker().darker());
g2.setFont(nameFont);
Rectangle2D ts = g2.getFontMetrics().getStringBounds(pluginName, g2);
g2.drawString(pluginName, (int) ((w - ts.getWidth()) / 2), (int) ((h + ts.getHeight()) / 2));
g2.setColor(lightColor.brighter().brighter());
g2.setFont(versionFont);
ts = g2.getFontMetrics().getStringBounds(pluginVersion, g2);
g2.drawString(pluginVersion, (int) (w - ts.getWidth() - 5), h - 5);
if (logo != null) {
g2.drawImage (logo, 5, 5, null);
}
g2.dispose();
}
}
public static MyFrame create(SingletonPlugin plugin) {
return create(plugin, plugin.getFullName());
}
public static MyFrame create(SingletonPlugin plugin, String title) {
return create(plugin, title, true, true, true, true, true);
}
public static MyFrame create(SingletonPlugin plugin, String title, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable, boolean showLogo) {
Image logo = showLogo ? plugin.getDescriptor().getIconAsImage() : null;
final MyFrame result = new MyFrame(plugin.getName(), plugin.getVersion(), title, new Dimension(400, 74), resizable, closable, maximizable, iconifiable, logo);
result.setVisible(true);
return result;
}
public static MyFrame create(SingletonPlugin plugin, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable) {
return create(plugin, plugin.getName(), resizable, closable, maximizable, iconifiable, true);
}
protected final JPanel internalPanel;
public MyFrame(String pluginName, String pluginVersion, String title, Dimension dim, boolean resizable, boolean closable, boolean maximizable, boolean iconifiable, Image logo) {
super(title, resizable, closable, maximizable, iconifiable);
setLayout(new BorderLayout());
add(new MyLogo(pluginName, pluginVersion, dim, logo), BorderLayout.NORTH);
internalPanel = new JPanel();
internalPanel.setOpaque(false);
internalPanel.setLayout(new BoxLayout(internalPanel, BoxLayout.PAGE_AXIS));
internalPanel.setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5));
add(internalPanel, BorderLayout.CENTER);
}
public JPanel getMainPanel() {
return internalPanel;
}
}