/*
* Copyright 2010-2015 Institut Pasteur.
*
* This file is part of Icy.
*
* Icy 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 3 of the License, or
* (at your option) any later version.
*
* Icy 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 Icy. If not, see <http://www.gnu.org/licenses/>.
*/
package icy.gui.sequence.tools;
import icy.gui.component.button.IcyToggleButton;
import icy.resource.ResourceUtil;
import icy.resource.icon.IcyIcon;
import java.awt.Color;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JPanel;
import javax.swing.SwingConstants;
import javax.swing.event.EventListenerList;
public class PositionAlignmentPanel extends JPanel
{
/**
*
*/
private static final long serialVersionUID = -811970435734479103L;
public static class PositionBox extends IcyToggleButton
{
/**
*
*/
private static final long serialVersionUID = -6952409965950366299L;
public PositionBox()
{
super(new IcyIcon(ResourceUtil.ICON_NULL, 16));
setSelectedIcon(new IcyIcon(ResourceUtil.ICON_PICTURE, 16));
setBorder(BorderFactory.createLineBorder(Color.black));
setFocusPainted(false);
}
}
private PositionBox topLeftBox;
private PositionBox topBox;
private PositionBox topRightBox;
private PositionBox leftBox;
private PositionBox centerBox;
private PositionBox rightBox;
private PositionBox bottomLeftBox;
private PositionBox bottomBox;
private PositionBox bottomRightBox;
private final ButtonGroup positionGroup;
/**
* Create the panel.
*/
public PositionAlignmentPanel()
{
super();
initialize();
positionGroup = new ButtonGroup();
positionGroup.add(topLeftBox);
positionGroup.add(topBox);
positionGroup.add(topRightBox);
positionGroup.add(leftBox);
positionGroup.add(centerBox);
positionGroup.add(rightBox);
positionGroup.add(bottomLeftBox);
positionGroup.add(bottomBox);
positionGroup.add(bottomRightBox);
centerBox.setSelected(true);
final ActionListener listener = new ActionListener()
{
@Override
public void actionPerformed(ActionEvent e)
{
// forward event
fireActionPerformed(e);
}
};
topLeftBox.addActionListener(listener);
topBox.addActionListener(listener);
topRightBox.addActionListener(listener);
leftBox.addActionListener(listener);
centerBox.addActionListener(listener);
rightBox.addActionListener(listener);
bottomLeftBox.addActionListener(listener);
bottomBox.addActionListener(listener);
bottomRightBox.addActionListener(listener);
}
@Override
public void setEnabled(boolean enabled)
{
super.setEnabled(enabled);
topLeftBox.setEnabled(enabled);
topBox.setEnabled(enabled);
topRightBox.setEnabled(enabled);
leftBox.setEnabled(enabled);
centerBox.setEnabled(enabled);
rightBox.setEnabled(enabled);
bottomLeftBox.setEnabled(enabled);
bottomBox.setEnabled(enabled);
bottomRightBox.setEnabled(enabled);
}
/**
* Returns the selected horizontal alignment.<br>
* Possible values are <code>SwingConstants.LEFT / CENTER / RIGHT</code>
**/
public int getXAlign()
{
final ButtonModel model = positionGroup.getSelection();
if ((model == topLeftBox.getModel()) || (model == leftBox.getModel()) || (model == bottomLeftBox.getModel()))
return SwingConstants.LEFT;
if ((model == topBox.getModel()) || (model == centerBox.getModel()) || (model == bottomBox.getModel()))
return SwingConstants.CENTER;
return SwingConstants.RIGHT;
}
/**
* Return the selected vertical alignment.<br>
* Possible values are <code>SwingConstants.TOP / CENTER / BOTTOM</code>
**/
public int getYAlign()
{
final ButtonModel model = positionGroup.getSelection();
if ((model == topLeftBox.getModel()) || (model == topBox.getModel()) || (model == topRightBox.getModel()))
return SwingConstants.TOP;
if ((model == leftBox.getModel()) || (model == centerBox.getModel()) || (model == rightBox.getModel()))
return SwingConstants.CENTER;
return SwingConstants.BOTTOM;
}
/**
* Notifies all listeners that have registered interest for
* notification on this event type. The event instance
* is lazily created using the <code>event</code> parameter.
*
* @param event
* the <code>ActionEvent</code> object
* @see EventListenerList
*/
protected void fireActionPerformed(ActionEvent event)
{
for (ActionListener listener : getActionListeners())
listener.actionPerformed(new ActionEvent(this, ActionEvent.ACTION_PERFORMED, event.getActionCommand(),
event.getWhen(), event.getModifiers()));
}
/**
* Adds an <code>ActionListener</code> to the panel.
*
* @param l
* the <code>ActionListener</code> to be added
*/
public void addActionListener(ActionListener l)
{
listenerList.add(ActionListener.class, l);
}
/**
* Removes an <code>ActionListener</code> from the panel.
* If the listener is the currently set <code>Action</code> for the button, then the
* <code>Action</code> is set to <code>null</code>.
*
* @param l
* the listener to be removed
*/
public void removeActionListener(ActionListener l)
{
listenerList.remove(ActionListener.class, l);
}
/**
* Returns an array of all the <code>ActionListener</code>s added
* to this AbstractButton with addActionListener().
*
* @return all of the <code>ActionListener</code>s added or an empty
* array if no listeners have been added
* @since 1.4
*/
public ActionListener[] getActionListeners()
{
return listenerList.getListeners(ActionListener.class);
}
private void initialize()
{
GridBagLayout gridBagLayout = new GridBagLayout();
gridBagLayout.columnWidths = new int[] {0, 0, 0, 0};
gridBagLayout.rowHeights = new int[] {0, 0, 0, 0};
gridBagLayout.columnWeights = new double[] {0.0, 0.0, 0.0, Double.MIN_VALUE};
gridBagLayout.rowWeights = new double[] {0.0, 0.0, 0.0, Double.MIN_VALUE};
setLayout(gridBagLayout);
topLeftBox = new PositionBox();
topLeftBox.setToolTipText("Align content to top left");
GridBagConstraints gbc_topLeftBox = new GridBagConstraints();
gbc_topLeftBox.insets = new Insets(0, 0, 5, 5);
gbc_topLeftBox.gridx = 0;
gbc_topLeftBox.gridy = 0;
add(topLeftBox, gbc_topLeftBox);
topBox = new PositionBox();
topBox.setToolTipText("Align content to top");
GridBagConstraints gbc_topBox = new GridBagConstraints();
gbc_topBox.insets = new Insets(0, 0, 5, 5);
gbc_topBox.gridx = 1;
gbc_topBox.gridy = 0;
add(topBox, gbc_topBox);
topRightBox = new PositionBox();
topRightBox.setToolTipText("Align content to top right");
GridBagConstraints gbc_topRightBox = new GridBagConstraints();
gbc_topRightBox.insets = new Insets(0, 0, 5, 0);
gbc_topRightBox.gridx = 2;
gbc_topRightBox.gridy = 0;
add(topRightBox, gbc_topRightBox);
leftBox = new PositionBox();
leftBox.setToolTipText("Align content to left");
GridBagConstraints gbc_leftBox = new GridBagConstraints();
gbc_leftBox.insets = new Insets(0, 0, 5, 5);
gbc_leftBox.gridx = 0;
gbc_leftBox.gridy = 1;
add(leftBox, gbc_leftBox);
centerBox = new PositionBox();
centerBox.setToolTipText("Align content to center");
GridBagConstraints gbc_centerBox = new GridBagConstraints();
gbc_centerBox.insets = new Insets(0, 0, 5, 5);
gbc_centerBox.gridx = 1;
gbc_centerBox.gridy = 1;
add(centerBox, gbc_centerBox);
rightBox = new PositionBox();
rightBox.setToolTipText("Align content to right");
GridBagConstraints gbc_rightBox = new GridBagConstraints();
gbc_rightBox.insets = new Insets(0, 0, 5, 0);
gbc_rightBox.gridx = 2;
gbc_rightBox.gridy = 1;
add(rightBox, gbc_rightBox);
bottomLeftBox = new PositionBox();
bottomLeftBox.setToolTipText("Align content to bottom left");
GridBagConstraints gbc_bottomLeftBox = new GridBagConstraints();
gbc_bottomLeftBox.insets = new Insets(0, 0, 0, 5);
gbc_bottomLeftBox.gridx = 0;
gbc_bottomLeftBox.gridy = 2;
add(bottomLeftBox, gbc_bottomLeftBox);
bottomBox = new PositionBox();
bottomBox.setToolTipText("Align content to bottom");
GridBagConstraints gbc_bottomBox = new GridBagConstraints();
gbc_bottomBox.insets = new Insets(0, 0, 0, 5);
gbc_bottomBox.gridx = 1;
gbc_bottomBox.gridy = 2;
add(bottomBox, gbc_bottomBox);
bottomRightBox = new PositionBox();
bottomRightBox.setToolTipText("Align content to bottom right");
GridBagConstraints gbc_bottomRightBox = new GridBagConstraints();
gbc_bottomRightBox.gridx = 2;
gbc_bottomRightBox.gridy = 2;
add(bottomRightBox, gbc_bottomRightBox);
}
}