package org.limewire.ui.swing.components; import java.awt.Color; import java.awt.Component; import java.awt.Font; import java.awt.LayoutManager; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.text.JTextComponent; import net.miginfocom.swing.MigLayout; import org.jdesktop.swingx.JXLabel; import org.jdesktop.swingx.JXPanel; import org.limewire.ui.swing.painter.TextShadowPainter; import org.limewire.ui.swing.util.ResizeUtils; public class HeaderBar extends JXPanel { private final Component titleComponent; private final JPanel componentContainer; private JLabel titleTextComponent = null; /** * The default height of components added to the * content pane. Accessed with setDefaultComponentHeight(int). * <p> * NOTE: When unset or -1 no default will be set. */ private int defaultCompHeight = -1; public HeaderBar() { this(""); } public HeaderBar(String title) { JXLabel headerLabel = new JXLabel(title); headerLabel.setForegroundPainter(new TextShadowPainter()); this.titleComponent = headerLabel; this.componentContainer = new JPanel(); if(title.length() == 0) titleComponent.setVisible(false); init(); } public HeaderBar(Component titleComponent) { this.titleComponent = titleComponent; this.componentContainer = new JPanel(); init(); } private void init() { if (titleComponent instanceof JLabel) { titleTextComponent = (JLabel) titleComponent; } this.componentContainer.setOpaque(false); super.setLayout(new MigLayout("insets 0, gap 0!, fill, aligny center","[][]","")); super.add(titleComponent, "hidemode 3, growy, dock west, gapbefore 5, gapafter 10"); super.add(componentContainer, "grow, push, right"); } @Override public Component add(Component comp) { forceHeight(comp); return this.componentContainer.add(comp); } @Override public Component add(Component comp, int index) { forceHeight(comp); return this.componentContainer.add(comp, index); } @Override public void add(Component comp, Object constraints) { forceHeight(comp); this.componentContainer.add(comp, constraints); } @Override public void add(Component comp, Object constraints, int index) { forceHeight(comp); this.componentContainer.add(comp, constraints, index); } @Override public void remove(Component comp) { componentContainer.remove(comp); } @Override public void setLayout(LayoutManager mgr) { if (this.componentContainer == null) { super.setLayout(mgr); } else { this.componentContainer.setLayout(mgr); } } public void setDefaultComponentHeight(int height) { defaultCompHeight = height; } /** * If the titleComponent is compound and not * a JLabel this method can be used to link * the headers set text to a specific label. */ public void linkTextComponent(JLabel label) { titleTextComponent = label; } /** * Sets the headers text, usually the title. */ public void setText(String text) { if (titleTextComponent != null) { titleTextComponent.setText(text); } } public String getText() { return titleTextComponent == null ? "" : titleTextComponent.getText(); } @Override public void setFont(Font font) { if (this.titleTextComponent == null) { super.setFont(font); } else { this.titleTextComponent.setFont(font); } } @Override public void setForeground(Color fg) { if (this.titleTextComponent == null) { super.setForeground(fg); } else { this.titleTextComponent.setForeground(fg); } } private void forceHeight(Component comp) { if (defaultCompHeight != -1 && (comp instanceof JButton || comp instanceof JTextComponent) ) { ResizeUtils.forceHeight(comp, defaultCompHeight); } } }