package gdxstudio;
import java.awt.Color;
import java.awt.FlowLayout;
import java.awt.GradientPaint;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.Rectangle;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.HashMap;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import web.laf.lite.layout.ToolbarLayout;
import web.laf.lite.layout.VerticalFlowLayout;
import web.laf.lite.utils.ColorUtils;
import web.laf.lite.utils.UIUtils;
public enum Style {
BLUE, DARK;
private static Style currentStyle = Style.BLUE;
public static Color topColor;
public static Color botColor;
public static Color headerTopLine;
public static Color headerBg;
public static Color headerBgBot;
public static Color headerFg;
public static Color border;
public static Color focus;
public static Color font;
public static Color listBg;
public static Color listSelect;
public static Color topLineColor = new Color(0x4580c8);
public static Color bottomColor = new Color(0x1956ad);
private static HashMap<Style, ArrayList<Color>> stylesMap = new HashMap<Style, ArrayList<Color>>();
/* top, bot, headerTopline, headerBg, headerBgBot, headerFg, border, focus, font, listBg, listSelect*/
private static String blueColors = "e4e4e4,d1d1d1,e8eaeb,2a3b57,1a2b47,ffffff,"
+ "808080,ef8e39,000000,ffffff,000080";
private static String darkColors = "213134,272b2f,6C788C,20272a,0b0e20,93c705,"
+ "404040,ef8e39,e4e0e2,272b2f,000080";
static {
stylesMap.put(Style.BLUE, getColor(blueColors));
stylesMap.put(Style.DARK, getColor(darkColors));
setStyle(Style.BLUE);
}
public static void setStyle(Style style){
currentStyle = style;
topColor = stylesMap.get(currentStyle).get(0);
botColor = stylesMap.get(currentStyle).get(1);
headerTopLine = stylesMap.get(currentStyle).get(2);
headerBg = stylesMap.get(currentStyle).get(3);
headerBgBot = stylesMap.get(currentStyle).get(4);
headerFg = stylesMap.get(currentStyle).get(5);
border = stylesMap.get(currentStyle).get(6);
focus = stylesMap.get(currentStyle).get(7);
font = stylesMap.get(currentStyle).get(8);
listBg = stylesMap.get(currentStyle).get(9);
listSelect = stylesMap.get(currentStyle).get(10);
}
private static ArrayList<Color> getColor(String colorsString){
ArrayList<Color> listColor = new ArrayList<Color>();
for(String c: colorsString.split(","))
listColor.add(ColorUtils.parseHexColor(c));
return listColor;
}
public static Color canvasBg = new Color(108, 108, 108);
public static Color canvasScreen = new Color(28, 28, 28);
public static Color canvasShadowTop = new Color(108, 108, 108);
public static Color canvasShadowBot = new Color(155, 155, 155);
public static Color canvasBox = new Color(83, 82, 82);
private static Color scrollBg = new Color ( 245, 245, 245 );
private static Color scrollBorder = new Color ( 230, 230, 230 );
private static Color scrollBarBorder = new Color ( 201, 201, 201 );
private static Color scrollGradientLeft = new Color ( 239, 239, 239 );
private static Color scrollSelGradientLeft = new Color ( 203, 203, 203 ); //33
private static Color scrollGradientRight = new Color ( 211, 211, 211 );
private static Color scrollSelGradientRight = new Color ( 175, 175, 175 );//-45
public static HashMap<String, JButton> btnMap = new HashMap<String, JButton>();
public static ArrayList<JButton> viewGroup = new ArrayList<JButton>();
private static GradientPaint headerBgPaint;
private static final int margin = 15;
private static int screenX = 0;
private static int screenY = 0;
private static int screenW = 0;
private static int screenH = 0;
public static void setScreenPosition(int x, int y){
screenX = x - 5;
screenY = y + 5;
}
public static void setScreenSize(int width, int height){
screenW = width + 40;
screenH = height + 25;
}
public static void drawScreen(Graphics g, int width, int height){
g.setColor(Style.canvasBg);
g.fillRect(0, 0, width, height); //bg
g.setColor(Color.black);
g.fillRoundRect(screenX, screenY, screenW, screenH, 10, 10);
g.setColor(Style.canvasShadowBot);
g.drawLine(screenX+5, screenY+screenH, screenX+screenW-5, screenY+screenH);//hoz shadow y same
g.drawLine(screenX+screenW, screenY+5, screenX+screenW, screenY+screenH-5);// vert shadow x same
g.setColor(Style.canvasBox);
g.fillRect(0, screenH+3*margin, width, 2);
g.fillRect(0, screenH+3*margin+3, width, height-screenH+3*margin-3);
}
public static Color tableHeaderTopLineColor = new Color ( 232, 234, 235 );
public static Color tableHeaderTopBgColor = new Color ( 226, 226, 226 );
public static Color tableHeaderBotBgColor = new Color ( 201, 201, 201 );
public static Color tableHeaderBotLineColor = new Color ( 104, 104, 104 );
public static void drawTableHeader(Graphics g, int width, int height){
Graphics2D g2d = ( Graphics2D ) g;
// Table header background
GradientPaint bgPaint = new GradientPaint (0, 1, topColor, 0, height - 1, botColor);
g2d.setPaint(bgPaint);
g2d.fillRect(0, 1, width, height - 1);
// Header top and bottom lines
//g2d.setColor(headerTopLine);
// g2d.drawLine( 0, 0, width, 0);
}
final public static void drawHorizontalBar(Graphics g, int width, int height){
Graphics2D g2d = ( Graphics2D ) g;
GradientPaint paint = new GradientPaint(0, 1, Style.topColor, 0, height, Style.botColor);
g2d.setPaint(paint);
g2d.fillRect(0, 0, width, height);
}
final public static void drawVerticalScrollTrack( Graphics g, Rectangle thumbRect, int width,int height,
boolean drawBorder ){
if (drawBorder){
Graphics2D g2d = ( Graphics2D ) g;
g2d.setPaint ( scrollBg );
g2d.fillRect ( 0, 0, width, height );
int vBorder = width - 1; //maybe 0
g2d.setColor ( scrollBorder );
g2d.drawLine ( vBorder, 0, vBorder, height - 1 );
}
}
final public static void drawHorizontalScrollTrack( Graphics g, Rectangle thumbRect, int width,int height,
boolean drawBorder ){
if (drawBorder){
Graphics2D g2d = ( Graphics2D ) g;
g2d.setPaint ( scrollBg );
g2d.fillRect ( 0, 0, width, height );
g2d.setColor ( scrollBorder );
g2d.drawLine ( 0, 0, width, 0 );
}
}
final public static void drawVerticalScrollBar( Graphics g, Rectangle thumbRect, int width, boolean isDragging){
Graphics2D g2d = ( Graphics2D ) g;
Color leftColor = isDragging ? scrollSelGradientLeft : scrollGradientLeft;
Color rightColor = isDragging ? scrollSelGradientRight : scrollGradientRight;
g2d.setPaint ( new GradientPaint ( 3, 0, leftColor, width - 4, 0, rightColor ) );
g2d.fillRoundRect ( thumbRect.x + 2, thumbRect.y + 1, thumbRect.width - 4, thumbRect.height - 3, 0, 0);
g2d.setPaint ( scrollBarBorder );
g2d.drawRoundRect ( thumbRect.x + 2, thumbRect.y + 1, thumbRect.width - 4, thumbRect.height - 3, 0, 0);
}
final public static void drawHorizontalScrollBar( Graphics g, Rectangle thumbRect, int width, boolean isDragging){
Graphics2D g2d = ( Graphics2D ) g;
Color leftColor = isDragging ? scrollSelGradientLeft : scrollGradientLeft;
Color rightColor = isDragging ? scrollSelGradientRight : scrollGradientRight;
g2d.setPaint ( new GradientPaint ( 0, thumbRect.y + 2, leftColor, 0, thumbRect.y + 2 + thumbRect.height - 4, rightColor ) );
g2d.fillRoundRect ( thumbRect.x + 1, thumbRect.y + 2, thumbRect.width - 3, thumbRect.height - 4, 0, 0);
g2d.setPaint ( scrollBarBorder );
g2d.drawRoundRect ( thumbRect.x + 1, thumbRect.y + 2, thumbRect.width - 3, thumbRect.height - 4, 0, 0);
}
public static class TitleLabel extends JLabel {
private static final long serialVersionUID = 1L;
public TitleLabel(String text){
setText(text);
UIUtils.setBoldFont(this);
setVerticalTextPosition(JLabel.CENTER);
setHorizontalTextPosition(JLabel.CENTER);
setHorizontalAlignment(JLabel.CENTER);
setForeground(Style.headerFg);
}
public TitleLabel(String text, String icon){
this(text);
setIcon(Icon.icon(icon));
setHorizontalTextPosition(JLabel.RIGHT);
}
@Override
public void setText(String text){
super.setText(text.toUpperCase());
}
@Override
public void paint ( Graphics g){
Graphics2D g2d = ( Graphics2D ) g;
if(headerBgPaint == null)
headerBgPaint = new GradientPaint ( 0, 1, Style.headerBg,
0, getHeight()-1, Style.headerBgBot);
g2d.setPaint ( headerBgPaint );
g2d.fillRect ( 0, 1, getWidth(), getHeight() - 1 );
g2d.setColor ( Style.headerTopLine);
g2d.drawLine ( 0, 0, getWidth (), 0 );
super.paint(g);
}
}
public static class TitleButton extends JButton {
private static final long serialVersionUID = 1L;
public TitleButton(String text, ActionListener al){
setText(text);
//btn.setOpaque(true);
//btn.setBackground(headerBg);
setForeground(Style.headerFg);
UIUtils.setBoldFont(this);
UIUtils.setRolloverDecoratedOnly(this,true);
UIUtils.setLeftRightSpacing(this, 4);
UIUtils.setRound(this, 0);
UIUtils.setUndecorated(this, true);
UIUtils.setShadeWidth(this, 2);
setVerticalTextPosition(JLabel.CENTER);
setHorizontalTextPosition(JLabel.CENTER);
setHorizontalAlignment(JLabel.CENTER);
if(al != null)
addActionListener(al);
}
@Override
public void setText(String text){
super.setText(text.toUpperCase());
}
@Override
public void paint( Graphics g){
Graphics2D g2d = ( Graphics2D ) g;
if(headerBgPaint == null)
headerBgPaint = new GradientPaint ( 0, 1, Style.headerBg,
0, getHeight()-1, Style.headerBgBot);
g2d.setPaint ( headerBgPaint );
g2d.fillRect ( 0, 1, getWidth (), getHeight () - 1 );
// Header top and bottom lines
g2d.setColor ( Style.headerTopLine );
g2d.drawLine ( 0, 0, getWidth (), 0 );
super.paint(g);
}
}
/* ToolBar Related Methods */
// This is for Menu Items
final public static JButton createMenuButton(String title){
JButton btn = new JButton(title);
btn.setFocusable(false);
btn.setOpaque(false);
UIUtils.setRolloverDecoratedOnly(btn, true);
UIUtils.setRound(btn, 0);
UIUtils.setLeftRightSpacing(btn, 5);
UIUtils.setShadeWidth(btn, 0);
UIUtils.setInnerShadeWidth(btn, 0);
return btn;
}
// This is for ToolButtons without Popup
final public static JPanel createToolPanel(String text, String iconname,final ActionListener onClick){
final JPanel pan = new JPanel(new VerticalFlowLayout(FlowLayout.CENTER, 0, 0));
pan.setOpaque(false);
UIUtils.setRound(pan, 0);
UIUtils.setShadeWidth(pan, 0);
JButton btn = createMenuButton(text);
btn.setIcon(Icon.icon(iconname));
if(onClick != null)
btn.addActionListener(onClick);
btnMap.put(iconname, btn);
pan.add(btn);
return pan;
}
/* SideBar Related Methods */
// This is for ToolButtons with Popup
final public static JButton createToolButton(String tooltip, String iconname, ActionListener al){
final JButton btn = new JButton(Icon.icon(iconname));
btn.setToolTipText(tooltip);
UIUtils.setRolloverDecoratedOnly(btn,true);
UIUtils.setLeftRightSpacing(btn, 0);
btn.setFocusable(false);
if(al != null)
btn.addActionListener(al);
return btn;
}
// This is for ToolButtons without Popup
public static JButton createPopUpToolButton(String iconname){
JButton btn = new JButton(Icon.icon(iconname));
btn.setFocusable(false);
btn.setToolTipText(iconname.toUpperCase());
btn.setOpaque(false);
UIUtils.setLeftRightSpacing(btn, 4);
UIUtils.setRound(btn, 0);
UIUtils.setUndecorated(btn, true);
return btn;
}
static int currentIndex = 1;
public static void viewButton(String text, String ic){
final int id = Integer.valueOf(currentIndex);
currentIndex += 1;
JButton btn = new JButton(text,Icon.icon(ic));
UIUtils.setDrawFocus(btn, false);
UIUtils.setShadeWidth(btn, 0);
UIUtils.setRound(btn, 0);
viewGroup.add(btn);
btn.addActionListener(new ActionListener(){
@Override
public void actionPerformed(ActionEvent arg0) {
Content.toggleView(id);
}
});
}
final public static JPanel createButtonToolBarPanel(){
JPanel tools = new JPanel(new ToolbarLayout(ToolbarLayout.HORIZONTAL)){
private static final long serialVersionUID = 1L;
@Override
public void paintComponent(Graphics g){
Style.drawHorizontalBar(g, getWidth (), getHeight ());
g.setColor(Color.GRAY);
g.drawLine(0, getHeight()-1, getWidth(), getHeight()-1);
}
};
return tools;
}
public static JPanel createButtonToolBar(ActionListener al, String[] list){
JPanel tools = createButtonToolBarPanel();
for(int i=0;i< list.length-1; i++){
if(i != 0)
if(i%2 != 0)
continue;
final JButton btn = new JButton(Icon.icon(list[i+1]));
UIUtils.setRolloverDecoratedOnly(btn,true);
UIUtils.setLeftRightSpacing(btn, 0);
btn.setFocusable(false);
btn.setToolTipText(list[i]);
btn.addActionListener(al);
tools.add(btn);
}
return tools;
}
}