package abstrasy.bedesk.ui;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.GraphicsConfiguration;
import java.awt.GraphicsEnvironment;
import java.awt.Point;
import java.awt.RenderingHints;
import java.awt.Transparency;
import java.awt.geom.Line2D;
import java.awt.image.BufferedImage;
import javax.swing.BorderFactory;
import javax.swing.JPanel;
import javax.swing.border.Border;
/**
* Abstrasy Interpreter
*
* Copyright : Copyright (c) 2006-2012, Luc Bruninx.
*
* Concédée sous licence EUPL, version 1.1 uniquement (la «Licence»).
*
* Vous ne pouvez utiliser la présente oeuvre que conformément à la Licence.
* Vous pouvez obtenir une copie de la Licence à l’adresse suivante:
*
* http://www.osor.eu/eupl
*
* Sauf obligation légale ou contractuelle écrite, le logiciel distribué sous
* la Licence est distribué "en l’état", SANS GARANTIES OU CONDITIONS QUELLES
* QU’ELLES SOIENT, expresses ou implicites.
*
* Consultez la Licence pour les autorisations et les restrictions
* linguistiques spécifiques relevant de la Licence.
*
*
* @author Luc Bruninx
* @version 1.0
*
* Note:
* ====
*
* Le code suivant est offert sous sous la licence mentionnée ci-dessus par
* la société BEDESK sprl dans le cadre du support du projet Abstrasy.
*
*/
public class BeTabsGroup extends JPanel {
FlowLayout flowLayout1 = new FlowLayout();
Border border1;
Border border2;
private boolean topConnected = false;
private int roundDiameter = 2;
private int leftOffset = 0;
private int rightOffset = 0;
private int topOffset = 0;
private int bottomOffset = 0;
Border border3;
Border border4;
private int ow = -1;
private int oh = -1;
private BufferedImage vgBuffer = null;
private int bw = -1;
private int bh = -1;
private boolean bottomConnected = false;
public BeTabsGroup() {
try {
jbInit();
}
catch (Exception ex) {
ex.printStackTrace();
}
}
void jbInit() throws Exception {
this.setLayout(flowLayout1);
this.setMinimumSize(new Dimension(22, 22));
this.setOpaque(false);
}
public void setBuffer() {
GraphicsConfiguration configuration = GraphicsEnvironment.getLocalGraphicsEnvironment().getDefaultScreenDevice().getDefaultConfiguration();
vgBuffer = configuration.createCompatibleImage(bw, bh, Transparency.TRANSLUCENT);
}
public void paintComponent(Graphics g) {
Graphics2D g2x = (Graphics2D) g;
g2x.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
super.paintComponent(g);
if (this.getWidth() != ow) {
ow = this.getWidth();
bw = ow - leftOffset - rightOffset;
if (bw < 1) {
bw = 1;
}
vgBuffer = null;
}
if (this.getHeight() != oh) {
oh = this.getHeight();
bh = oh - topOffset - bottomOffset;
if (bh < 1) {
bh = 1;
}
vgBuffer = null;
}
if (vgBuffer == null) {
setBuffer();
Graphics2D g2 = vgBuffer.createGraphics();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
if (topConnected) {
GradientPaint gp = new GradientPaint(new Point(0, 0), new Color(0, 0, 0, 0), new Point(0, bh), new Color(0, 0, 0, 42));
g2.setPaint(gp);
g2.fillRoundRect(0, 0 - roundDiameter, bw - 1, bh - 1 + roundDiameter, roundDiameter, roundDiameter);
g2.drawRoundRect(0, 0 - roundDiameter, bw - 2, bh - 2 + roundDiameter, roundDiameter, roundDiameter);
GradientPaint gp1 = new GradientPaint(new Point(0, 0), new Color(0, 0, 0, 0), new Point(0, bh), new Color(96, 96, 96));
g2.setPaint(gp1);
g2.drawRoundRect(0, 0 - roundDiameter, bw - 2, bh + roundDiameter - 1, roundDiameter, roundDiameter);
}
else {
GradientPaint gp = new GradientPaint(new Point(0, 0), new Color(0, 0, 0, 42), new Point(0, bh), new Color(0, 0, 0, 0));
g2.setPaint(gp);
g2.fillRoundRect(0, 0, bw - 1, bh + roundDiameter, roundDiameter, roundDiameter);
g2.drawRoundRect(0, 1, bw - 2, bh + roundDiameter, roundDiameter, roundDiameter);
GradientPaint gp1 = new GradientPaint(new Point(0, 0), new Color(96, 96, 96), new Point(0, bh), new Color(0, 0, 0, 0));
g2.setPaint(gp1);
g2.drawRoundRect(0, 0, bw - 2, bh + roundDiameter, roundDiameter, roundDiameter);
}
}
if (vgBuffer != null) {
g2x.drawImage(vgBuffer, null, leftOffset, topOffset);
}
if(bottomConnected){
g2x.setPaint(new Color(96, 96, 96));
g2x.draw(new Line2D.Float(0,this.getHeight()-1,this.getWidth()-1,this.getHeight()-1));
}
}
public int getRoundDiameter() {
return roundDiameter;
}
public void setRoundDiameter(int roundDiameter) {
this.roundDiameter = roundDiameter;
border1 = BorderFactory.createEmptyBorder(0, this.roundDiameter / 2, 0, 0);
vgBuffer = null;
this.repaint();
}
public boolean isTopConnected() {
return topConnected;
}
public void setTopConnected(boolean topConnected) {
this.topConnected = topConnected;
vgBuffer = null;
this.repaint();
}
public int getBottomOffset() {
return bottomOffset;
}
public void setBottomOffset(int bottomOffset) {
this.bottomOffset = bottomOffset;
vgBuffer = null;
this.repaint();
}
public int getLeftOffset() {
return leftOffset;
}
public void setLeftOffset(int leftOffset) {
this.leftOffset = leftOffset;
vgBuffer = null;
this.repaint();
}
public int getRightOffset() {
return rightOffset;
}
public void setRightOffset(int rightOffset) {
this.rightOffset = rightOffset;
vgBuffer = null;
this.repaint();
}
public int getTopOffset() {
return topOffset;
}
public void setTopOffset(int topOffset) {
this.topOffset = topOffset;
vgBuffer = null;
this.repaint();
}
public void setBottomConnected(boolean bottomConnected) {
this.bottomConnected = bottomConnected;
vgBuffer = null;
this.repaint();
}
public boolean isBottomConnected() {
return bottomConnected;
}
}