/* * Copyright 2010, 2011 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 plugins.tutorial.event; import icy.gui.frame.IcyFrameAdapter; import icy.gui.frame.IcyFrameEvent; import icy.gui.frame.TitledFrame; import icy.gui.main.GlobalOverlayListener; import icy.gui.main.GlobalPluginListener; import icy.gui.main.GlobalROIListener; import icy.gui.main.GlobalSequenceListener; import icy.gui.main.GlobalViewerListener; import icy.gui.viewer.Viewer; import icy.main.Icy; import icy.painter.Overlay; import icy.plugin.abstract_.Plugin; import icy.plugin.abstract_.PluginActionable; import icy.roi.ROI; import icy.sequence.Sequence; import javax.swing.JScrollPane; import javax.swing.JTextArea; import javax.swing.ScrollPaneConstants; /** * This class demonstrate how use the MainListener to track global event * on Viewer, Sequence, ROI and Painter objects * * @author Stephane * @author Fab */ public class MainListenerTutorial extends PluginActionable { @Override public void run() { // build a simple titled frame final TitledFrame frame = new TitledFrame("Main Event logger", true, true); // we need a text area to put out event informations final JTextArea area = new JTextArea(); area.setWrapStyleWord(true); area.setEditable(false); // better to have a scroll pane as many events can occurs final JScrollPane scrollPane = new JScrollPane(area); scrollPane.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_ALWAYS); scrollPane.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_ALWAYS); // build the global event listeners final GlobalSequenceListener globalSequenceListener = new GlobalSequenceListener() { @Override public void sequenceOpened(Sequence sequence) { area.append("Sequence " + sequence + " opened\n"); area.setCaretPosition(area.getDocument().getLength()); } @Override public void sequenceClosed(Sequence sequence) { area.append("Sequence " + sequence + " closed\n"); area.setCaretPosition(area.getDocument().getLength()); } }; final GlobalViewerListener globalViewerListener = new GlobalViewerListener() { @Override public void viewerOpened(Viewer viewer) { area.append("Viewer " + viewer + " opened\n"); area.setCaretPosition(area.getDocument().getLength()); } @Override public void viewerClosed(Viewer viewer) { area.append("Viewer " + viewer + " closed\n"); area.setCaretPosition(area.getDocument().getLength()); } }; final GlobalOverlayListener globalOverlayListener = new GlobalOverlayListener() { @Override public void overlayRemoved(Overlay overlay) { area.append("Overlay " + overlay + " removed\n"); area.setCaretPosition(area.getDocument().getLength()); } @Override public void overlayAdded(Overlay overlay) { area.append("Overlay " + overlay + " added\n"); area.setCaretPosition(area.getDocument().getLength()); } }; final GlobalROIListener globalROIListener = new GlobalROIListener() { @Override public void roiRemoved(ROI roi) { area.append("ROI " + roi + " removed\n"); area.setCaretPosition(area.getDocument().getLength()); } @Override public void roiAdded(ROI roi) { area.append("ROI " + roi + " added\n"); area.setCaretPosition(area.getDocument().getLength()); } }; final GlobalPluginListener globalPluginListener = new GlobalPluginListener() { @Override public void pluginStarted(Plugin plugin) { area.append("Plugin " + plugin + " started\n"); area.setCaretPosition(area.getDocument().getLength()); } @Override public void pluginEnded(Plugin plugin) { area.append("Plugin " + plugin + " ended\n"); area.setCaretPosition(area.getDocument().getLength()); } }; // add the global event listeners Icy.getMainInterface().addGlobalSequenceListener(globalSequenceListener); Icy.getMainInterface().addGlobalViewerListener(globalViewerListener); Icy.getMainInterface().addGlobalROIListener(globalROIListener); Icy.getMainInterface().addGlobalOverlayListener(globalOverlayListener); Icy.getMainInterface().addGlobalPluginListener(globalPluginListener); frame.addFrameListener(new IcyFrameAdapter() { @Override public void icyFrameClosed(IcyFrameEvent e) { // remove the listeners so there is no more reference on plugin instance Icy.getMainInterface().removeGlobalSequenceListener(globalSequenceListener); Icy.getMainInterface().removeGlobalViewerListener(globalViewerListener); Icy.getMainInterface().removeGlobalROIListener(globalROIListener); Icy.getMainInterface().removeGlobalOverlayListener(globalOverlayListener); Icy.getMainInterface().removeGlobalPluginListener(globalPluginListener); } }); // add the scroll pane to the frame frame.getMainPanel().add(scrollPane); // set default size frame.setSize(700, 300); // add the frame to the interface addIcyFrame(frame); // center frame frame.center(); // make it visible frame.setVisible(true); // get focus frame.requestFocus(); } }