/*
* org.openmicroscopy.shoola.agents.dataBrowser.view.PlateGridUI
*
*------------------------------------------------------------------------------
* Copyright (C) 2006-2010 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.Point;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import javax.swing.JLabel;
import javax.swing.JPanel;
//Third-party libraries
import info.clearthought.layout.TableLayout;
//Application-internal dependencies
import org.openmicroscopy.shoola.agents.dataBrowser.browser.WellImageSet;
import org.openmicroscopy.shoola.util.ui.PlateGrid;
import org.openmicroscopy.shoola.util.ui.UIUtilities;
/**
* Displays a grid representing a plate.
*
* @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-Beta4
*/
class PlateGridUI
extends JPanel
{
/** The text for the selected well. */
private static final String DEFAULT_WELL_TEXT = "Well: ";
/** The text for the selected field. */
private static final String DEFAULT_FIELD_TEXT = "Field #";
/** Reference to the model. */
private WellsModel model;
/** The grid representing the plate. */
private PlateGrid grid;
/** The currently selected well. */
private JLabel selectedNode;
/** The currently selected field. */
private JLabel selectedField;
/** The currently selected field. */
private JLabel selectedText;
/** Reference to the controller. */
private DataBrowserControl controller;
/** Initializes the components. */
private void initComponents()
{
selectedField = new JLabel();
grid = new PlateGrid(model.getRowSequenceIndex(),
model.getColumnSequenceIndex(), model.getValidWells(),
model.getRows(), model.getColumns());
grid.addPropertyChangeListener(controller);
WellImageSet node = model.getSelectedWell();
selectedNode = new JLabel();
if (node != null) {
selectedNode.setText(DEFAULT_WELL_TEXT+node.getWellLocation());
grid.selectCell(node.getRow(), node.getColumn());
}
selectedText = new JLabel();
}
/** Builds and lays out the UI. */
private void buildGUI()
{
setBackground(UIUtilities.BACKGROUND_COLOR);
double[][] size = {{TableLayout.PREFERRED, 5, TableLayout.PREFERRED},
{TableLayout.PREFERRED, TableLayout.PREFERRED,
TableLayout.FILL}};
setLayout(new TableLayout(size));
add(grid, "0, 0, 0, 2");
//add(selectedNode, "2, 0, LEFT, TOP");
//add(selectedField, "2, 1, LEFT, TOP");
add(selectedText, "2, 2, LEFT, TOP");
}
/**
* Creates a new instance.
*
* @param model Reference to the model.
* @param controller Reference to the control.
*/
PlateGridUI(WellsModel model, DataBrowserControl controller)
{
this.model = model;
this.controller = controller;
initComponents();
buildGUI();
}
/** Invokes when a well is selected. */
void onSelectedWell()
{
List<WellImageSet> nodes = model.getSelectedWells();
if (nodes != null && nodes.size() > 0) {
WellImageSet node = nodes.get(0);
if (nodes.size() == 1) {
selectedNode.setText(DEFAULT_WELL_TEXT+node.getWellLocation());
if (node.getText() != null)
selectedText.setText(
UIUtilities.formatToolTipText(node.getText()));
} else {
selectedText.setText("");
selectedNode.setText("");
}
List<Point> cells = new ArrayList<Point>(nodes.size());
Iterator<WellImageSet> i = nodes.iterator();
while (i.hasNext()) {
node = i.next();
cells.add(new Point(node.getRow(), node.getColumn()));
}
grid.selectCells(cells);
}
}
}