/* * org.openmicroscopy.shoola.agents.dataBrowser.browser.CellDisplay * *------------------------------------------------------------------------------ * 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.browser; //Java imports import java.awt.Color; import java.awt.Point; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; //Third-party libraries //Application-internal dependencies /** * Creates a cell image, this is used to display 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 */ public class CellDisplay extends ImageNode { /** * Bound property indicating to show the dialog to set the color * and its description. */ public static final String DESCRIPTOR_PROPERTY = "descriptor"; /** Indicates that the cell is a vertical cell. */ public static final int TYPE_VERTICAL = 0; /** Indicates that the cell is a horizontal cell. */ public static final int TYPE_HORIZONTAL = 1; /** The default color of the cell. */ public static final Color DEFAULT_COLOR = Color.WHITE; /** * A place holder to simulate an hierarchy object. * This is required because every {@link ImageDisplay} must have one, * but it's not actually used. (It only avoids a <code>NPE</code> in * the constructor.) */ static final Object FAKE_HIERARCHY_OBJECT = new Object(); /** The tooltip text if it is a column. */ private static final String TEXT_COLUMN = "Click to edit the selected column."; /** The tooltip text if it is a row. */ private static final String TEXT_ROW = "Click to edit the selected row."; /** One of the constants defined by this class. */ private int type; /** One of the constants defined by this class. */ private int index; /** The location of the mouse click. */ private Point location; /** The description of the column or row. */ private String description; /** The color of the column if vertical or the row if horizontal. */ private Color cellColor; /** * Sets the location and fires a property change. * * @param location The mouse click location. */ private void showDescriptor(Point location) { this.location = location; firePropertyChange(DESCRIPTOR_PROPERTY, null, this); } /** * Creates a new root display. * * @param index Either the column or the row index depending on the type. * @param value The value of the cell. */ public CellDisplay(int index, String value) { this(index, value, TYPE_HORIZONTAL); } /** * Creates a new root display. * * @param index Either the column or the row index depending on the type. * @param value The value of the cell. * @param type One of the constants defined by this class. */ public CellDisplay(int index, String value, int type) { super(value, FAKE_HIERARCHY_OBJECT, null, SMALL_BAR); clearDefaultButtons(); setCollapsed(true); this.type = type; this.index = index; super.setHighlight(DEFAULT_COLOR); cellColor = DEFAULT_COLOR; setTitleBarType(SMALL_TITLE_BAR); setListenToBorder(false); setTitle(value); if (type == TYPE_HORIZONTAL) setToolTipText(TEXT_COLUMN); else setToolTipText(TEXT_ROW); addMouseListener(new MouseAdapter() { public void mousePressed(MouseEvent evt) { showDescriptor(evt.getPoint()); } }); //setNodeDecoration(); } /** * Returns the type of cell. One of the constants defined by this class. * * @return See above. */ public int getIndex() { return index; } /** * Returns the type of cell, either {@link #TYPE_HORIZONTAL} or * {@link #TYPE_VERTICAL}. * * @return See above. */ public int getType() { return type; } /** * Returns <code>false</code> if the highlight color is * the default color or <code>null</code>, <code>true</code> otherwise. * * @return See above. */ public boolean isSpecified() { if (cellColor == null) return false; return !(cellColor.getRed() == DEFAULT_COLOR.getRed() && cellColor.getGreen() == DEFAULT_COLOR.getGreen() && cellColor.getBlue() == DEFAULT_COLOR.getBlue() && cellColor.getAlpha() == DEFAULT_COLOR.getAlpha()); } /** * Returns the location. * * @return See above. */ public Point getLocation() { return location; } /** * Sets the description. * * @param description The value to set. */ public void setDescription(String description) { this.description = description; if (description != null) setToolTipText(description); } /** * Returns the description. * * @return See above. */ public String getDescription() { return description; } /** * Overridden to set the edit icon. * @see ImageNode#setNodeDecoration() */ public void setNodeDecoration() { } /** * Overridden to return the color associated to the column or row * @see ImageNode#getHighlight() */ public Color getHighlight() { return cellColor; } /** * Overridden to make sure that the default color is set. * @see ImageNode#setHighlight(Color) */ public void setHighlight(Color highlight) { if (highlight == null) highlight = DEFAULT_COLOR; cellColor = highlight; } /** * Overridden to be on the save side. * @see ImageNode#setBounds(int, int, int, int) */ public void setBounds(int x, int y, int w, int h) { super.setBounds(x, y, w, h); } }