/*
* org.openmicroscopy.shoola.agents.dataBrowser.view.DataBrowserWellToolBar
*
*------------------------------------------------------------------------------
* Copyright (C) 2006-2008 University of Dundee. All rights reserved.
*
*
* 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, write to the Free Software Foundation, Inc.,
* 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*
*------------------------------------------------------------------------------
*/
package org.openmicroscopy.shoola.agents.dataBrowser.view;
//Java imports
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JPanel;
import javax.swing.JToggleButton;
import javax.swing.JToolBar;
//Third-party libraries
import org.jdesktop.swingx.JXBusyLabel;
//Application-internal dependencies
import org.openmicroscopy.shoola.agents.dataBrowser.IconManager;
import org.openmicroscopy.shoola.util.ui.UIUtilities;
/**
* The tool bar of {@link DataBrowser} displaying wells.
*
* @author Jean-Marie Burel
* <a href="mailto:j.burel@dundee.ac.uk">j.burel@dundee.ac.uk</a>
* @author Donald MacDonald
* <a href="mailto:donald@lifesci.dundee.ac.uk">donald@lifesci.dundee.ac.uk</a>
* @version 3.0
* <small>
* (<b>Internal version:</b> $Revision: $Date: $)
* </small>
* @since 3.0-Beta3
*/
class DataBrowserWellToolBar
extends JPanel
implements ActionListener
{
/** ID to bring up the add thumbnail view to the node.. */
private static final int ROLL_OVER = 0;
/** The layout options for the fields. */
private static final String[] LAYOUT;
/** Reference to the control. */
private DataBrowserControl controller;
/** Reference to the view. */
private DataBrowserUI view;
/** Button to refresh the display. */
private JButton refreshButton;
/** Button to view all the fields for a given well. */
private JToggleButton fieldsViewButton;
/**
* Button to display a magnified thumbnail if selected when
* the user mouses over a node.
*/
private JToggleButton rollOverButton;
/** Displays the possible fields per well. */
private JComboBox fields;
/** The fields indicating the loading state of the field. */
private JXBusyLabel busyLabel;
/** The type of possible layout of the fields. */
private JComboBox layoutBox;
/** Defines the static values. */
static {
LAYOUT = new String[2];
LAYOUT[WellFieldsView.ROW_LAYOUT] = "As a row";
LAYOUT[WellFieldsView.SPATIAL_LAYOUT] = "Spatial";
}
/** Initializes the components. */
private void initComponents()
{
layoutBox = new JComboBox(LAYOUT);
layoutBox.setSelectedIndex(WellFieldsView.SPATIAL_LAYOUT);
view.setSelectedFieldLayout(WellFieldsView.DEFAULT_LAYOUT);
layoutBox.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
view.setSelectedFieldLayout(layoutBox.getSelectedIndex());
}
});
IconManager icons = IconManager.getInstance();
rollOverButton = new JToggleButton();
rollOverButton.setIcon(icons.getIcon(IconManager.ROLL_OVER));
rollOverButton.setToolTipText("Turn on/off the magnification " +
"of a thumbnail while mousing over it.");
rollOverButton.addActionListener(this);
rollOverButton.setActionCommand(""+ROLL_OVER);
busyLabel = new JXBusyLabel(new Dimension(
UIUtilities.DEFAULT_ICON_WIDTH,
UIUtilities.DEFAULT_ICON_HEIGHT));
busyLabel.setVisible(false);
refreshButton = new JButton(controller.getAction(
DataBrowserControl.REFRESH));
UIUtilities.unifiedButtonLookAndFeel(refreshButton);
fieldsViewButton = new JToggleButton(controller.getAction(
DataBrowserControl.FIELDS_VIEW));
int f = view.getFieldsNumber();
if (f > 1) {
String[] values = new String[f];
for (int i = 0; i < f; i++)
values[i] = "Field #"+(i+1);
fields = new JComboBox(values);
fields.setSelectedIndex(view.getSelectedField());
fields.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
controller.viewField(fields.getSelectedIndex());
}
});
}
displayFieldsOptions(false);
}
/**
* Builds the tool bar with the various control for the view.
*
* @return See above.
*/
private JToolBar buildViewsBar()
{
JToolBar bar = new JToolBar();
bar.setFloatable(false);
bar.setBorder(null);
bar.setRollover(true);
bar.add(refreshButton);
bar.add(rollOverButton);
if (fields != null) {
bar.add(fieldsViewButton);
bar.add(layoutBox);
bar.add(Box.createHorizontalStrut(5));
bar.add(fields);
bar.add(Box.createHorizontalStrut(5));
bar.add(busyLabel);
}
return bar;
}
/** Builds and lays out the UI. */
private void buildGUI()
{
JPanel content = new JPanel();
content.setLayout(new BoxLayout(content, BoxLayout.Y_AXIS));
JPanel p = new JPanel();
p.add(buildViewsBar());
content.add(p);
setLayout(new FlowLayout(FlowLayout.LEFT, 0, 0));
add(content);
}
/**
* Creates a new instance.
*
* @param view Reference to the view. Mustn't be <code>null</code>.
* @param controller Reference to the control.
* Mustn't be <code>null</code>.
*/
DataBrowserWellToolBar(DataBrowserUI view, DataBrowserControl controller)
{
if (controller == null)
throw new IllegalArgumentException("No control.");
if (view == null)
throw new IllegalArgumentException("No view.");
this.controller = controller;
this.view = view;
initComponents();
buildGUI();
}
/**
* Indicates the status of the fields loading.
*
* @param busy Pass <code>true</code> when the fields are loading,
* <code>false</code> when they are loaded.
*/
void setStatus(boolean busy)
{
busyLabel.setVisible(busy);
busyLabel.setBusy(busy);
}
/**
* Shows or hides the options only available in the fields view.
*
* @param show Pass <code>true</code> to show the options,
* <code>false</code> to hide them.
*/
void displayFieldsOptions(boolean show)
{
refreshButton.setEnabled(!show);
if (fields != null) fields.setEnabled(!show);
layoutBox.setVisible(show);
}
/**
* Sets the specified view.
* @see ActionListener#actionPerformed(ActionEvent)
*/
public void actionPerformed(ActionEvent e)
{
int index = Integer.parseInt(e.getActionCommand());
switch (index) {
case ROLL_OVER:
//view.setRollOver(rollOverItem.isSelected());
view.setRollOver(rollOverButton.isSelected());
break;
}
}
}