package org.ripple.power.ui; import java.awt.Color; import java.awt.Cursor; import java.awt.Insets; import java.awt.event.MouseEvent; import java.awt.event.MouseListener; import javax.swing.BorderFactory; import javax.swing.Icon; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import org.bootstrap.ui.NavlinkUI; public class RPNavlink extends JButton { public static interface Click { public void down(); public void up(); public void move(); public void exit(); } /** * */ private static final long serialVersionUID = 1L; public static final int ALIGN_LEFT = 0; public static final int ALIGN_RIGHT = 1; private RPNavbar navbar; private boolean isLeftNode = false; private int navigationAlignment = ALIGN_LEFT; private JLabel titleLabel; private JPanel containerPanel; private JPanel linkPanel; private Click click; public RPNavbar getNavbar() { return navbar; } public void setNavbar(RPNavbar navbar) { this.navbar = navbar; } public int getNavigationAlignment() { return navigationAlignment; } public void setNavigationAlignment(int alignment) { this.navigationAlignment = alignment; } public boolean isLeftNode() { return isLeftNode; } public void setLeftNode(boolean isLeftNode) { this.isLeftNode = isLeftNode; } public JPanel getContainerPanel() { return containerPanel; } public void setContainerPanel(JPanel containerPanel) { this.containerPanel = containerPanel; } public JPanel getLinkPanel() { return linkPanel; } public void setLinkPanel(JPanel linkPanel) { this.linkPanel = linkPanel; } public RPNavlink(String title) { this(title, null, null, null); } public RPNavlink(Icon icon) { this(null, icon, null, null); } public RPNavlink(String title, JPanel containerPanel, JPanel linkPanel) { this(title, null, containerPanel, linkPanel); } public RPNavlink(Icon icon, JPanel containerPanel, JPanel linkPanel) { this(null, icon, containerPanel, linkPanel); } public RPNavlink(String title, Icon icon, JPanel containerPanel, JPanel linkPanel) { super(title, icon); this.containerPanel = containerPanel; this.linkPanel = linkPanel; setOpaque(false); setBackground(Color.decode("#F6F6F6")); setFont(getFont().deriveFont(16f)); setBorder(BorderFactory.createEmptyBorder()); setMargin(new Insets(0, 8, 0, 8)); NavlinkUI navUI = new NavlinkUI(); setUI(navUI); addMouseListener(new MouseListener() { private Color colorSave; private int cursorSave; public void mouseEntered(MouseEvent e) { if (click != null) { click.move(); } colorSave = RPNavlink.this.getForeground(); cursorSave = RPNavlink.this.getCursor().getType(); RPNavlink.this.setCursor(Cursor .getPredefinedCursor(Cursor.HAND_CURSOR)); RPNavlink.this.setForeground(RPNavlink.this.getForeground() .darker()); } public void mouseExited(MouseEvent e) { if (click != null) { click.exit(); } RPNavlink.this.setForeground(colorSave); RPNavlink.this .setCursor(Cursor.getPredefinedCursor(cursorSave)); } public void mouseReleased(MouseEvent e) { if (click != null) { click.up(); } } public void mousePressed(MouseEvent e) { route(); if (click != null) { click.down(); } } public void mouseClicked(MouseEvent e) { } }); } public void setClick(Click click){ this.click = click; } @Override public void setForeground(Color fg) { super.setForeground(fg); if (this.titleLabel != null) { this.titleLabel.setForeground(fg); } } public void route() { if (containerPanel != null && linkPanel != null) { containerPanel.removeAll(); containerPanel.add(linkPanel, "grow"); containerPanel.revalidate(); containerPanel.repaint(); } } }