/*
* Freeplane - mind map editor
* Copyright (C) 2008 Joerg Mueller, Daniel Polansky, Christian Foltin, Dimitry Polivaev
*
* this file is modified by Dimitry Polivaev in 2008.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 2 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.freeplane.core.ui.components;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.Insets;
import java.awt.LayoutManager;
import java.awt.event.HierarchyBoundsListener;
import java.awt.event.HierarchyEvent;
import javax.swing.AbstractButton;
import javax.swing.Action;
import javax.swing.JToolBar;
/**
* @author Stefan Zechmeister
*/
public class FreeplaneToolBar extends JToolBar {
protected static Insets nullInsets = new Insets(0, 0, 0, 0);
/**
*
*/
private static final long serialVersionUID = 1L;
/**
*/
public FreeplaneToolBar(final String name, final int orientation) {
super(name, orientation);
this.setMargin(FreeplaneToolBar.nullInsets);
setFloatable(false);
setRollover(true);
if (orientation == HORIZONTAL) {
super.setLayout(ToolbarLayout.getInstance());
addHierarchyBoundsListener(new HierarchyBoundsListener() {
public void ancestorResized(final HierarchyEvent e) {
revalidate();
repaint();
}
public void ancestorMoved(final HierarchyEvent e) {
}
});
}
}
@Override
public void setLayout(LayoutManager mgr) {
if (getOrientation() != HORIZONTAL)
super.setLayout(mgr);
}
@Override
public Component add(final Component comp) {
super.add(comp);
configureComponent(comp);
return comp;
}
@Override
public Component add(final Component comp, final int index) {
super.add(comp, index);
configureComponent(comp);
return comp;
}
@Override
public void add(final Component comp, final Object constraints) {
super.add(comp, constraints);
configureComponent(comp);
}
@Override
public void add(final Component comp, final Object constraints, final int index) {
super.add(comp, constraints, index);
configureComponent(comp);
}
@Override
public Component add(final String name, final Component comp) {
super.add(name, comp);
configureComponent(comp);
return comp;
}
protected void configureComponent(final Component comp) {
if (!(comp instanceof AbstractButton)) {
return;
}
final AbstractButton abstractButton = (AbstractButton) comp;
final String actionName = (String) abstractButton.getAction().getValue(Action.NAME);
abstractButton.setName(actionName);
if (null != abstractButton.getIcon()) {
final String text = abstractButton.getText();
final String toolTipText = abstractButton.getToolTipText();
if (text != null) {
if (toolTipText == null) {
abstractButton.setToolTipText(text);
}
abstractButton.setText(null);
}
}
if (System.getProperty("os.name").equals("Mac OS X")) {
abstractButton.putClientProperty("JButton.buttonType", "segmented");
abstractButton.putClientProperty("JButton.segmentPosition", "middle");
final Dimension buttonSize = new Dimension(22, 22);
abstractButton.setPreferredSize(buttonSize);
abstractButton.setFocusPainted(false);
}
abstractButton.setFocusable(false);
abstractButton.setMargin(FreeplaneToolBar.nullInsets);
}
}