package com.toedter.e4.ui.workbench.renderers.swing.controls;
import java.awt.Component;
import java.awt.Container;
import java.awt.Dimension;
import java.awt.LayoutManager;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
import javax.swing.JToolBar;
@SuppressWarnings("serial")
public class CTabbedPane extends JPanel {
private class CTabbedPaneLayout implements LayoutManager {
private final static int BUTTON_SIZE = 20;
@Override
public void addLayoutComponent(String name, Component comp) {
System.out.println("CTabbedPane.CTabbedPaneLayout.addLayoutComponent()");
}
@Override
public void removeLayoutComponent(Component comp) {
System.out.println("CTabbedPane.CTabbedPaneLayout.removeLayoutComponent()");
}
@Override
public Dimension preferredLayoutSize(Container parent) {
return new Dimension(tabbedPane.getPreferredSize().width + 2 * BUTTON_SIZE,
tabbedPane.getPreferredSize().height);
}
@Override
public Dimension minimumLayoutSize(Container parent) {
return new Dimension(tabbedPane.getMinimumSize().width + 3 * BUTTON_SIZE,
tabbedPane.getMinimumSize().height);
}
@Override
public void layoutContainer(Container parent) {
toolBar.setBounds(parent.getWidth() - BUTTON_SIZE * 2 - 7, 2, BUTTON_SIZE * 2 + 6, BUTTON_SIZE);
tabbedPane.setBounds(0, 0, parent.getWidth(), parent.getHeight());
}
}
private final JButton minButton = new JButton();
private final JButton maxButton = new JButton();
private final JButton restoreButton = new JButton();
private final JToolBar toolBar = new JToolBar();
private final JTabbedPane tabbedPane = new JTabbedPane();
public CTabbedPane() {
toolBar.setFloatable(false);
toolBar.setBorder(BorderFactory.createEmptyBorder());
ImageIcon maxIcon = new ImageIcon(getClass().getResource("max.png"));
maxButton.setIcon(maxIcon);
ImageIcon minIcon = new ImageIcon(getClass().getResource("min.png"));
minButton.setIcon(minIcon);
ImageIcon restoreIcon = new ImageIcon(getClass().getResource("restore.png"));
restoreButton.setIcon(restoreIcon);
toolBar.add(minButton);
toolBar.add(maxButton);
super.add(toolBar);
super.add(tabbedPane);
setLayout(new CTabbedPaneLayout());
}
public int getTabCount() {
return tabbedPane.getTabCount();
}
public void setTabComponentAt(int index, JLabel component) {
tabbedPane.setTabComponentAt(index, component);
}
@Override
public Component add(Component component) {
return tabbedPane.add(component);
}
public void setMaximizeHandler(final Runnable handler) {
maxButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
handler.run();
toolBar.remove(maxButton);
toolBar.add(restoreButton);
}
});
}
public void setMinimizeHandler(final Runnable handler) {
minButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
handler.run();
}
});
}
public void setRestoreHandler(final Runnable handler) {
restoreButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
handler.run();
toolBar.remove(restoreButton);
toolBar.add(maxButton);
}
});
}
@Override
public void setVisible(boolean isVisible) {
super.setVisible(isVisible);
tabbedPane.setVisible(isVisible);
toolBar.setVisible(isVisible);
}
}