/* *------------------------------------------------------------------------------ * Copyright (C) 2006-2014 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; import java.awt.Point; import java.util.Collection; import java.util.List; import java.util.Set; import javax.swing.JComponent; import org.openmicroscopy.shoola.agents.dataBrowser.layout.Layout; import org.openmicroscopy.shoola.util.ui.component.ObservableComponent; import omero.gateway.model.DataObject; /** * Defines the interface provided by the browser component. * The browser provides a <code>JComponent</code> to host and display one or * more visualization trees. That is, one or more {@link ImageDisplay} top * nodes, each representing an image hierarchy. * Use the {@link BrowserFactory} to create an object implementing this * interface. * * @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 * @since OME3.0 */ public interface Browser extends ObservableComponent { /** * Bound property name indicating that a cell is selected. */ public static final String CELL_SELECTION_PROPERTY = "cellSelection"; /** * Bound property name indicating an {@link ImageDisplay} object has been * selected in the visualization tree. */ public static final String MOUSE_OVER_PROPERTY = "mouseOver"; /** * Bound property name indicating an {@link ImageDisplay} object has been * selected in the visualization tree. */ public static final String SELECTED_DATA_BROWSER_NODE_DISPLAY_PROPERTY = "selectedDataBrowserNodeDisplay"; /** * Bound property name indicating {@link ImageDisplay} objects have been * selected in the visualization tree. */ public static final String SELECTED_DATA_BROWSER_NODES_DISPLAY_PROPERTY = "selectedDataBrowserNodesDisplay"; /** * Bound property name indicating an {@link ImageDisplay} object has been * unselected in the visualization tree. */ public static final String UNSELECTED_DATA_BROWSER_NODE_DISPLAY_PROPERTY = "unselectedDataBrowserNodeDisplay"; /** * Bound property name indicating a {@link Thumbnail} has been selected * within an {@link ImageNode}. * The associated property change event is always dispatched <i>after</i> * dispatching the one for the * {@link #SELECTED_DATA_BROWSER_NODE_DISPLAY_PROPERTY}. This * latter property will be set to the {@link ImageNode} the * {@link Thumbnail} belong in. */ public static final String THUMB_SELECTED_PROPERTY = "thumbSelected"; /** * Bound property name indicating a pop-up trigger event occurred at a * given point within the browser component. */ public static final String POPUP_POINT_PROPERTY = "popupPoint"; /** Bound property name indicating a layout selection. */ public static final String LAYOUT_PROPERTY = "layout"; /** Bound property indicating an annotation visualization. */ public static final String ANNOTATED_NODE_PROPERTY = "annotatedNode"; /** Bound property indicating a classification visualization. */ public static final String CLASSIFIED_NODE_PROPERTY = "classifiedNode"; /** Bound property indicating to magnify the node when roll over. */ public static final String ROLL_OVER_PROPERTY = "rollOver"; /** Bound property indicating to view the specified note. */ public static final String VIEW_DISPLAY_PROPERTY = "viewDisplay"; /** Bound property indicating to view the specified note. */ public static final String MAIN_VIEW_DISPLAY_PROPERTY = "mainViewDisplay"; /** * Returns the node, if any, that is currently selected in the * visualization tree. * * @return The currently selected node or <code>null</code> if no node * is currently selected. */ public ImageDisplay getLastSelectedDisplay(); /** * Sets a flag to indicate if a {@link Thumbnail} has been selected * within an {@link ImageNode}. * * @param selected Pass <code>true</code> if the currently passed display * is an {@link ImageNode} and its {@link Thumbnail} has * been selected. Pass <code>false</code> in any other * case. * @param node The selected node. * @throws IllegalArgumentException If you pass <code>true</code> but the * currently selected display is <i>not</i> an {@link ImageNode}. */ public void setThumbSelected(boolean selected, ImageNode node); /** * Tells if a {@link Thumbnail} has been selected within an * {@link ImageNode}. * The only case in which this method will return <code>true</code> is * when the currently selected display is an {@link ImageNode} and its * {@link Thumbnail} has been selected. In particular, the returned * value will <i>always</i> be <code>false</code> if the currently selected * display is <i>not</i> an {@link ImageNode}. * * @return <code>true</code> if currently selected display is an * {@link ImageNode} and its {@link Thumbnail} has been selected; * <code>false</code> in all other cases. */ public boolean isThumbSelected(); /** * Sets the point at which the last pop-up trigger event occurred within * the browser component. * * @param p The point at which the event occurred, <i>relative</i> to the * coordinates of the currently selected display. * @param fireProperty Pass <code>true</code> to fire a property, * <code>false</code> otherwise. */ public void setPopupPoint(Point p, boolean fireProperty); /** * Returns the point at which the last pop-up trigger event occurred within * the browser component. * This method may return <code>null</code>, for example if no such an * event has occurred yet or if a thumbnail has been selected — these * two events are mutually exclusive. * * @return The point at which the event occurred, <i>relative</i> to the * coordinates of the currently selected display. */ public Point getPopupPoint(); /** * Returns all the hierarchy objects that are linked to any of the * {@link ImageNode}s in the visualization trees hosted by the browser. * * @return A set of <code>Object</code>s. */ public Set<DataObject> getImages(); /** * Returns all the {@link ImageNode}s in the visualization trees hosted * by the browser. * * @return A set of {@link ImageNode} objects. */ public Set getImageNodes(); /** * Returns all the {@link ImageDisplay} objects that are children * of the {@link RootDisplay} node. * * @return A set of {@link ImageDisplay} objects. */ public Collection getRootNodes(); /** * Returns the widget that displays all the visualization trees hosted * by the browser. * * @return The browser widget. */ public JComponent getUI(); /** * Sets the selected layout. * * @param layout The layout. */ public void setSelectedLayout(Layout layout); /** * Returns <code>true</code> if more than one {@link ImageNode}s are * selected, <code>false</code> otherwise. * * @return See above. */ public boolean isMultiSelection(); /** * Returns the collection of selected nodes. * * @return See above. */ public Collection<ImageDisplay> getSelectedDisplays(); /** * Returns the collection of the <code>DataObject</code>s hosted by * the selected nodes. * * @return See above. */ public Collection<DataObject> getSelectedDataObjects(); /** * Returns <code>true</code> if the image's title bar is visible, * <code>false</code> otherwise. * * @return See above. */ public boolean isTitleBarVisible(); /** * Sets the title bar visible flag. * * @param b Pass <code>true</code> to show the image's title bar, * <code>false</code> to hide it. */ public void setTitleBarVisible(boolean b); /** * Sets the value of the <code>Roll over</code> flag. * * @param rollOver Pass <code>true</code> to zoom the image when the user * mouses over an {@link ImageNode}, * <code>false</code> otherwise. */ public void setRollOver(boolean rollOver); /** * Returns <code>true</code> if the image is zoomed when the user mouses * over an {@link ImageNode}, <code>false</code> otherwise. * * @return See above. */ public boolean isRollOver(); /** * Returns <code>true</code> if data related to a node is displayed * when the user mouses over the node, <code>false</code> otherwise. * * @return See above. */ public boolean isMouseOver(); /** * Sets to <code>true</code> if data related to a node is displayed * when the user mouses over the node, to <code>false</code> otherwise. * * @param b The value to set. */ public void setMouseOver(boolean b); /** * Adds the nodes to the <code>Desktop</code> of the root node according * to the currently selected layout. */ public void resetChildDisplay(); /** * Has the specified object visit all the visualization trees hosted by * the browser. * * @param visitor The visitor. Mustn't be <code>null</code>. * @see ImageDisplayVisitor */ public void accept(ImageDisplayVisitor visitor); /** * Has the specified object visit all the visualization trees hosted by * the browser. * * @param visitor The visitor. Mustn't be <code>null</code>. * @param algoType The algorithm selected to visit the visualization trees. * One of the constants defined by * {@link ImageDisplayVisitor} * @see ImageDisplayVisitor */ public void accept(ImageDisplayVisitor visitor, int algoType); /** * Sets the selected nodes. * * @param nodes The collection of selected data objects. */ public void setSelectedNodes(List<DataObject> nodes); /** * Sets the collection of nodes filtered. * * @param nodes The collection to set. */ public void setFilterNodes(Collection<ImageDisplay> nodes); /** Shows all the nodes. */ public void showAll(); /** * Returns the original collection of <code>DataObject</code>s. * * @return See above. */ public Set<DataObject> getOriginal(); /** * Returns the images currently visible. * * @return See above. */ public Set<DataObject> getVisibleImages(); /** * Returns the images currently visible. * * @return See above. */ public List<ImageNode> getVisibleImageNodes(); /** * Returns the nodes currently visible. * * @return See above. */ public List<ImageNode> getVisibleNodes(); /** * Returns the selected layout. * * @return See above. */ public Layout getSelectedLayout(); /** * Returns the collection of selected nodes. * * @param nodes The selected nodes. */ public void setNodesSelection(Collection<ImageDisplay> nodes); /** * Removes the passed node from the selection. * * @param node The node to remove from the list. */ public void removeSelectedDisplay(ImageDisplay node); /** * Views the passed node. * * @param node The node to view. * @param internal Pass <code>true</code> to open in the internal viewer, * <code>false</code> otherwise. This only applies for images. */ public void viewDisplay(ImageDisplay node, boolean internal); /** * Sets the passed title in the header of the browser. * * @param title The value to set. */ public void setComponentTitle(String title); /** * Refreshes the collection of passed nodes. * * @param nodes The nodes to refresh. * @param selected The nodes to select. */ public void refresh(Collection<ImageDisplay> nodes, List<ImageDisplay> selected); /** * Marks the nodes on which a given operation could not be performed * e.g. paste rendering settings. * * @param type The type of data objects. * @param ids Collection of object's ids. */ public void markUnmodifiedNodes(Class type, Collection<Long> ids); /** * Sets the node which has to be zoomed. * * @param node The node to zoom. */ public void setRollOverNode(RollOverNode node); /** * Sets the specified <code>node</code> to be the currently selected * node in the visualization tree. * Sets it to <code>null</code> to indicate no node is currently selected. * * @param node The node to become the currently selected node. * Pass <code>null</code> only when refreshing the * display. * @param multiSelection Pass <code>false</code> to indicate that only * one node is selected, <code>true</code> * otherwise. * @param fireProperty Pass <code>true</code> to fire a property, * <code>false</code> otherwise. */ public void setSelectedDisplay(ImageDisplay node, boolean multiSelection, boolean fireProperty); /** * Scrolls to the specified node. * * @param node The node to scroll to. */ public void scrollToNode(ImageDisplay node); /** * Sets the nodes selected via multi-selection. * * @param nodes The selected nodes. */ public void setSelectedDisplays(List<ImageDisplay> nodes); /** * Select the ImageDisplay which is located at the given coordinates * * @param coords The component coordinates * @param multiSel Pass <code>true</code> for adding selection * to a multiple selection */ public void setSelectedDisplay(Point coords, boolean multiSel); }