package com.explodingpixels.macwidgets;
import com.explodingpixels.macwidgets.plaf.PreferencesTabBarButtonUI;
import com.explodingpixels.widgets.WindowUtils;
import javax.swing.*;
import javax.swing.border.Border;
import java.awt.*;
import java.awt.event.ActionListener;
import java.util.Enumeration;
@SuppressWarnings("serial")
public class PreferencesTabBar {
private final TriAreaComponent fPreferencesTabBar = new TriAreaComponent();
private final ButtonGroup fButtonGroup = new ButtonGroup();
public PreferencesTabBar() {
Border b = BorderFactory.createEmptyBorder(0, 4, 0, 4);
fPreferencesTabBar.getComponent().setBorder(b);
UnifiedToolBar.installUnifiedToolBarBorder(fPreferencesTabBar.getComponent());
fPreferencesTabBar.setBackgroundPainter(MacPainterFactory.createTexturedWindowWorkaroundPainter());
WindowUtils.installJComponentRepainterOnWindowFocusChanged(fPreferencesTabBar.getComponent());
}
public void addTab(String title, Icon icon, ActionListener listener) {
AbstractButton button = new JToggleButton(title, icon) {
@Override
public void updateUI() {
setUI(new PreferencesTabBarButtonUI());
}
};
fButtonGroup.add(button);
button.addActionListener(listener);
fPreferencesTabBar.addComponentToLeft(button);
}
public void showTab(String title) {
getButton(title).doClick();
}
public void installWindowDraggerOnWindow(Window window) {
fPreferencesTabBar.installWindowDraggerOnWindow(window);
}
public JComponent getComponent() {
return fPreferencesTabBar.getComponent();
}
private AbstractButton getButton(String title) {
AbstractButton retVal = null;
Enumeration<AbstractButton> buttons = fButtonGroup.getElements();
while (buttons.hasMoreElements()) {
AbstractButton button = buttons.nextElement();
if (button.getText().equals(title)) {
retVal = button;
break;
}
}
checkButtonFound(retVal);
return retVal;
}
private static void checkButtonFound(AbstractButton button) {
if (button == null) {
throw new IllegalArgumentException(
"The given button title does not represent a preferences tab.");
}
}
}