package org.ripple.power.ui;
import java.awt.Color;
import java.awt.Cursor;
import java.awt.Graphics;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.geom.Rectangle2D;
import java.awt.geom.RoundRectangle2D;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import org.bootstrap.ui.RoundRectBorder;
import net.miginfocom.swing.MigLayout;
public class RPNavbar extends JPanel {
/**
*
*/
private static final long serialVersionUID = 1L;
private float borderWidth = 1;
private int arc = 8;
private String title;
private JLabel titleLabel;
private List<JComponent> leftLinkList = new ArrayList<JComponent>();
private List<JComponent> rightLinkList = new ArrayList<JComponent>();
private boolean linkFocusable = true;
public float getBorderWidth() {
return borderWidth;
}
public void setBorderWidth(float borderWidth) {
this.borderWidth = borderWidth;
}
public int getArc() {
return arc;
}
public void setArc(int arc) {
this.arc = arc;
}
public String getTitle() {
return title;
}
private void setTitle(String title) {
this.title = title;
if (this.titleLabel == null) {
this.titleLabel = new JLabel(title);
this.titleLabel.setForeground(getForeground());
this.titleLabel.setFont(getFont().deriveFont(22f));
this.titleLabel.addMouseListener(new MouseListener() {
private Color colorSave;
private int cursorSave;
public void mouseEntered(MouseEvent e) {
colorSave = titleLabel.getForeground();
cursorSave = titleLabel.getCursor().getType();
titleLabel.setCursor(Cursor
.getPredefinedCursor(Cursor.HAND_CURSOR));
titleLabel.setForeground(titleLabel.getForeground()
.darker());
}
public void mouseExited(MouseEvent e) {
titleLabel.setForeground(colorSave);
titleLabel.setCursor(Cursor.getPredefinedCursor(cursorSave));
}
public void mouseReleased(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mousePressed(MouseEvent e) {
// TODO Auto-generated method stub
}
public void mouseClicked(MouseEvent e) {
}
});
this.add(titleLabel, "gapright 18, grow");
}
}
public RPNavbar() {
setOpaque(false);
setBackground(Color.decode("#F6F6F6"));
setForeground(Color.decode("#5E5E5E"));
setBorder(new RoundRectBorder(Color.decode("#E1E1E1"), borderWidth, arc));
setLayout(new MigLayout("gap 0,insets 0",
"[10%][8%][8%][8%][8%][8%][8%][8%][8%][8%][8%][fill]", "[grow]"));
}
public RPNavbar(String title) {
this();
setTitle(title);
}
@Override
protected void paintComponent(Graphics graphics) {
super.paintComponent(graphics);
float width = getWidth();
float height = getHeight();
Graphics2D g2 = (Graphics2D) graphics.create();
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setRenderingHint(RenderingHints.KEY_STROKE_CONTROL,
RenderingHints.VALUE_STROKE_PURE);
if (getBorder() != null) {
RoundRectangle2D rect = new RoundRectangle2D.Float(borderWidth / 2,
borderWidth / 2, width - borderWidth, height - borderWidth,
arc, arc);
g2.setColor(this.getBackground());
g2.fill(rect);
} else {
Rectangle2D rect = new Rectangle2D.Float(0, 0, width, height);
g2.setColor(this.getBackground());
g2.fill(rect);
}
g2.dispose();
}
public int setNavLinkList(List<JComponent> navLinkList) {
for (JComponent comp : navLinkList) {
if (comp instanceof RPNavlink) {
RPNavlink linkItem = (RPNavlink) comp;
linkItem.setNavbar(this);
linkItem.setForeground(this.getForeground());
linkItem.setFocusable(this.linkFocusable);
if (linkItem.getNavigationAlignment() == RPNavlink.ALIGN_LEFT) {
this.leftLinkList.add(linkItem);
} else if (linkItem.getNavigationAlignment() == RPNavlink.ALIGN_RIGHT) {
this.rightLinkList.add(linkItem);
}
}
}
setLeftNode();
int span = 12 - this.leftLinkList.size() - this.rightLinkList.size();
if (this.titleLabel != null) {
span = span - 1;
}
if (span < 0) {
span = 0;
}
int i = 0;
for (i = 0; i < leftLinkList.size(); ++i) {
JComponent comp = leftLinkList.get(i);
this.add(comp, "grow");
}
if (span > 0) {
this.add(new JLabel(), "span " + span + ",grow");
}
for (i = 0; i < rightLinkList.size(); ++i) {
JComponent comp = rightLinkList.get(i);
this.add(comp, "grow");
}
return 0;
}
@Override
public void setForeground(Color fg) {
super.setForeground(fg);
if (this.titleLabel != null) {
this.titleLabel.setForeground(fg);
}
}
private void setLeftNode() {
if (this.titleLabel == null) {
JComponent comp = leftLinkList.get(0);
if (comp instanceof RPNavlink) {
((RPNavlink) comp).setLeftNode(true);
}
}
}
public void setNavLinkFocusable(boolean focusable) {
this.linkFocusable = focusable;
for (JComponent comp : leftLinkList) {
comp.setFocusable(focusable);
}
for (JComponent comp : rightLinkList) {
comp.setFocusable(focusable);
}
}
}