package org.ripple.power.ui; import java.awt.Color; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.RenderingHints; 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 RPButtonGroup 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; } public RPButtonGroup() { setOpaque(false); setBackground(Color.LIGHT_GRAY); setForeground(Color.BLACK); setBorder(new RoundRectBorder(Color.LIGHT_GRAY, borderWidth, arc)); setLayout(new MigLayout("gap 1,insets 0", "[sg sg1]", "[grow]")); } @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 setButtons(List<RPButton> navLinkList) { for (RPButton btn : navLinkList) { btn.setBtnGroup(this); btn.setForeground(this.getForeground()); btn.setFocusable(this.linkFocusable); leftLinkList.add(btn); add(btn, "grow"); } 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"); } return 0; } @Override public void setForeground(Color fg) { super.setForeground(fg); if (this.titleLabel != null) { this.titleLabel.setForeground(fg); } } private void setLeftNode() { if (leftLinkList.size() > 0) { JComponent comp = leftLinkList.get(0); if (comp instanceof RPButton) { ((RPButton) comp).setLeftNode(true); } JComponent lastComp = leftLinkList.get(leftLinkList.size() - 1); if (lastComp instanceof RPButton) { ((RPButton) lastComp).setRightNode(true); } } } public void setNavLinkFocusable(boolean focusable) { this.linkFocusable = focusable; for (JComponent comp : leftLinkList) { comp.setFocusable(focusable); } for (JComponent comp : rightLinkList) { comp.setFocusable(focusable); } } }