/* * 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.main; import icy.common.listener.AcceptListener; import icy.gui.inspector.InspectorPanel; import icy.gui.inspector.LayersPanel; import icy.gui.inspector.RoisPanel; import icy.gui.menu.ApplicationMenu; import icy.gui.menu.ToolRibbonTask; import icy.gui.viewer.Viewer; import icy.image.IcyBufferedImage; import icy.image.lut.LUT; import icy.imagej.ImageJWrapper; import icy.painter.Overlay; import icy.painter.Painter; import icy.plugin.abstract_.Plugin; import icy.preferences.XMLPreferences; import icy.roi.ROI; import icy.search.SearchEngine; import icy.sequence.Sequence; import icy.swimmingPool.SwimmingPool; import icy.undo.IcyUndoManager; import java.util.ArrayList; import java.util.List; import javax.swing.JFrame; import javax.swing.JInternalFrame; import javax.swing.undo.UndoManager; /** * MainInterface * * @see icy.gui.main.MainInterfaceGui * @author Fabrice de Chaumont & Stephane */ public interface MainInterface { /** * Creates the windows in the Icy.getMainInterface() */ public abstract void init(); /** * Check if exit is allowed from registered listeners */ public abstract boolean canExitExternal(); /** * Return true is the application is running in headless mode (no screen device). */ public abstract boolean isHeadLess(); /** * Open a viewer for the specified sequence. */ public abstract void addSequence(Sequence sequence); /** * Returns all internal frames */ public abstract ArrayList<JInternalFrame> getInternalFrames(); /** * Returns all external frames */ public abstract ArrayList<JFrame> getExternalFrames(); public abstract XMLPreferences getPreferences(); /** * Returns the inspector object (right informations panel) */ public abstract InspectorPanel getInspector(); /** * Returns the ROI manager panel */ public abstract RoisPanel getRoisPanel(); /** * Returns the Layer manager panel */ public abstract LayersPanel getLayersPanel(); /** * Returns the currently active plugins */ public abstract ArrayList<Plugin> getActivePlugins(); /** * Returns the active viewer window. * Returns <code>null</code> if there is no sequence opened. */ public abstract Viewer getActiveViewer(); /** * Returns the LUT from the active viewer window. * Returns <code>null</code> if there is no sequence opened. */ public abstract LUT getActiveLUT(); /** * Returns the current active sequence.<br> * Returns <code>null</code> if there is no sequence opened. */ public abstract Sequence getActiveSequence(); /** * Returns the current active image.<br> * It can return <code>null</code> if the active viewer is <code>null</code> or * if it uses 3D display so prefer {@link #getActiveSequence()} instead. */ public abstract IcyBufferedImage getActiveImage(); /** * @deprecated Use {@link #getActiveViewer()} instead. */ @Deprecated public abstract Viewer getFocusedViewer(); /** * @deprecated Use {@link #getActiveSequence()} instead. */ @Deprecated public abstract Sequence getFocusedSequence(); /** * @deprecated Use {@link #getActiveImage()} instead. */ @Deprecated public abstract IcyBufferedImage getFocusedImage(); /** * Returns the current active {@link UndoManager} (UndoManager from active sequence). * It returns <code>null</code> if the active sequence is <code>null</code>. * * @see Sequence#getUndoManager() */ public abstract IcyUndoManager getUndoManager(); /** * Undo to the last <i>Undoable</i> change set in the active Sequence {@link UndoManager} * * @return <code>true</code> if the operation succeed * @see Sequence#undo() */ public abstract boolean undo(); /** * Redo the next <i>Undoable</i> change set in the active Sequence {@link UndoManager} * * @return <code>true</code> if the operation succeed * @see Sequence#redo() */ public abstract boolean redo(); /** * Returns all active viewers */ public abstract ArrayList<Viewer> getViewers(); /** * Set the current active viewer. * * @param viewer * viewer which received activation */ public abstract void setActiveViewer(Viewer viewer); /** * @deprecated Use {@link #setActiveViewer(Viewer)} instead. */ @Deprecated public abstract void setFocusedViewer(Viewer viewer); /** * Set all active viewers to specified synchronization group id (0 means unsynchronized). */ public abstract void setGlobalViewSyncId(int id); /** * Add the frame to the Desktop pane and change its layer value to make it over the other * internal frames. * * @param internalFrame */ public abstract void addToDesktopPane(JInternalFrame internalFrame); public abstract IcyDesktopPane getDesktopPane(); public abstract ApplicationMenu getApplicationMenu(); public abstract TaskFrameManager getTaskWindowManager(); @Deprecated public abstract void registerExternalFrame(JFrame frame); @Deprecated public abstract void unRegisterExternalFrame(JFrame frame); public abstract void registerPlugin(Plugin plugin); public abstract void unRegisterPlugin(Plugin plugin); public abstract void registerViewer(Viewer viewer); public abstract void unRegisterViewer(Viewer viewer); // public abstract void registerStreamPlugin(PluginStreamGenerator pluginStreamGenerator); /** * @deprecated Use {@link #getMainFrame()} instead */ @Deprecated public abstract MainFrame getFrame(); /** * Get Icy main frame */ public abstract MainFrame getMainFrame(); /** * Get Icy main searh engine. */ public abstract SearchEngine getSearchEngine(); /** * Close all viewers displaying the specified sequence. */ public abstract void closeSequence(Sequence sequence); /** * @deprecated Use {@link #closeSequence(Sequence)} instead. */ @Deprecated public abstract void closeViewersOfSequence(Sequence sequence); /** * Close all viewers */ public abstract void closeAllViewers(); /** * Returns first viewer for the sequence containing specified ROI */ public abstract Viewer getFirstViewerContaining(ROI roi); /** * Returns first viewer for the sequence containing specified Painter. * * @deprecated use {@link #getFirstViewerContaining(Overlay)} instead. */ @Deprecated public abstract Viewer getFirstViewerContaining(Painter painter); /** * Returns first viewer for the sequence containing specified Overlay */ public abstract Viewer getFirstViewerContaining(Overlay overlay); /** * Returns first viewer attached to specified sequence */ public abstract Viewer getFirstViewer(Sequence sequence); /** * Returns viewers attached to specified sequence */ public abstract ArrayList<Viewer> getViewers(Sequence sequence); /** * Returns true if specified viewer is the unique viewer for its attached sequence */ public abstract boolean isUniqueViewer(Viewer viewer); /** * Returns the list of opened sequence (sequence actually displayed in a viewer) */ public abstract ArrayList<Sequence> getSequences(); /** * Returns the list of opened sequence (sequence actually displayed in a viewer) matching the specified name. */ public abstract ArrayList<Sequence> getSequences(String name); /** * Returns true if specified sequence is currently opened (displayed in a viewer) */ public abstract boolean isOpened(Sequence sequence); /** * Use {@link #getFirstSequenceContaining(ROI)} instead * * @deprecated */ @Deprecated public abstract Sequence getFirstSequencesContaining(ROI roi); /** * Use {@link #getFirstSequenceContaining(Overlay)} instead * * @deprecated */ @Deprecated public abstract Sequence getFirstSequencesContaining(Painter painter); /** * Returns the first active sequence containing the specified ROI */ public abstract Sequence getFirstSequenceContaining(ROI roi); /** * Returns the first active sequence containing the specified Painter * * @deprecated Use {@link #getFirstSequenceContaining(Overlay)} instead. */ @Deprecated public abstract Sequence getFirstSequenceContaining(Painter painter); /** * Returns the first active sequence containing the specified Overlay */ public abstract Sequence getFirstSequenceContaining(Overlay overlay); /** * Returns all active sequence containing the specified ROI */ public abstract ArrayList<Sequence> getSequencesContaining(ROI roi); /** * Returns all active sequence containing the specified Painter * * @deprecated Use {@link #getSequencesContaining(Overlay)} instead. */ @Deprecated public abstract ArrayList<Sequence> getSequencesContaining(Painter painter); /** * Returns all active sequence containing the specified Overlay */ public abstract List<Sequence> getSequencesContaining(Overlay overlay); /** * Returns all active ROI */ public abstract ArrayList<ROI> getROIs(); /** * Returns the ROI containing the specified painter (if any). * * @deprecated Use {@link #getROI(Overlay)} instead. */ @Deprecated public abstract ROI getROI(Painter painter); /** * Returns the ROI containing the specified overlay (if any) */ public abstract ROI getROI(Overlay overlay); /** * Returns all active Painter. * * @deprecated Use {@link #getOverlays()} instead. */ @Deprecated public abstract ArrayList<Painter> getPainters(); /** * Returns all active Overlay. */ public abstract List<Overlay> getOverlays(); /** * Returns the SwimmingPool object */ public abstract SwimmingPool getSwimmingPool(); /** * Returns the ImageJ object instance */ public abstract ImageJWrapper getImageJ(); /** * Returns current selected tool (ROI / Selection) */ public abstract String getSelectedTool(); /** * Set current selected tool (ROI / Selection). */ public abstract void setSelectedTool(String command); /** * Returns the tool task of the Ribbon menu. */ public abstract ToolRibbonTask getToolRibbon(); /** * Returns true if the main frame is set as "always on top" */ public abstract boolean isAlwaysOnTop(); /** * Set the main frame as "always on top" */ public abstract void setAlwaysOnTop(boolean value); /** * Returns true if the application is in "detached" mode */ public abstract boolean isDetachedMode(); /** * Set the the application is in "detached" mode */ public abstract void setDetachedMode(boolean value); /** * @deprecated Use addGlobalXXXListener instead. */ @Deprecated public abstract void addListener(MainListener listener); /** * @deprecated Use removeGlobalXXXListener instead. */ @Deprecated public abstract void removeListener(MainListener listener); /** * Add global Viewer listener */ public abstract void addGlobalViewerListener(GlobalViewerListener listener); /** * Remove global Viewer listener */ public abstract void removeGlobalViewerListener(GlobalViewerListener listener); /** * Add global Sequence listener */ public abstract void addGlobalSequenceListener(GlobalSequenceListener listener); /** * Remove global Sequence listener */ public abstract void removeGlobalSequenceListener(GlobalSequenceListener listener); /** * Add global ROI listener */ public abstract void addGlobalROIListener(GlobalROIListener listener); /** * Remove global ROI listener */ public abstract void removeGlobalROIListener(GlobalROIListener listener); /** * Add global Overlay listener */ public abstract void addGlobalOverlayListener(GlobalOverlayListener listener); /** * Remove global Overlay listener */ public abstract void removeGlobalOverlayListener(GlobalOverlayListener listener); /** * Add global Plugin listener */ public abstract void addGlobalPluginListener(GlobalPluginListener listener); /** * Remove global Plugin listener */ public abstract void removeGlobalPluginListener(GlobalPluginListener listener); /** * @deprecated Use {@link #addActiveViewerListener(ActiveViewerListener)} instead. */ @Deprecated public abstract void addFocusedViewerListener(FocusedViewerListener listener); /** * @deprecated Use {@link #removeActiveViewerListener(ActiveViewerListener)} instead. */ @Deprecated public abstract void removeFocusedViewerListener(FocusedViewerListener listener); /** * Add active viewer listener.<br> * This permit to receive events of activated viewer only.<br> * It can also be used to detect viewer activation change. */ public abstract void addActiveViewerListener(ActiveViewerListener listener); /** * Remove active viewer listener. */ public abstract void removeActiveViewerListener(ActiveViewerListener listener); /** * @deprecated Use {@link #addActiveSequenceListener(ActiveSequenceListener)} instead. */ @Deprecated public abstract void addFocusedSequenceListener(FocusedSequenceListener listener); /** * @deprecated Use {@link #removeActiveSequenceListener(ActiveSequenceListener)} instead. */ @Deprecated public abstract void removeFocusedSequenceListener(FocusedSequenceListener listener); /** * Add active sequence listener.<br> * This permit to receive events of activated sequence only.<br> * It can also be used to detect sequence activation change. */ public abstract void addActiveSequenceListener(ActiveSequenceListener listener); /** * Remove focused sequence listener. */ public abstract void removeActiveSequenceListener(ActiveSequenceListener listener); /** * Add "can exit" listener.<br> * <br> * CAUTION : A weak reference is used to reference the listener for easier release<br> * so you should have a hard reference to your listener to keep it alive. */ public abstract void addCanExitListener(AcceptListener listener); /** * Remove "can exit" listener */ public abstract void removeCanExitListener(AcceptListener listener); /** * @deprecated */ @Deprecated public abstract void beginUpdate(); /** * @deprecated */ @Deprecated public abstract void endUpdate(); /** * @deprecated */ @Deprecated public abstract boolean isUpdating(); }