/* * org.openmicroscopy.shoola.agents.measurement.util.roimenu.ROIPopupMenu * *------------------------------------------------------------------------------ * Copyright (C) 2006-2007 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.measurement.util.roimenu; //Java imports import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.List; import javax.swing.JMenu; import javax.swing.JMenuItem; import javax.swing.JPopupMenu; //Third-party libraries //Application-internal dependencies import org.jhotdraw.draw.Figure; import org.openmicroscopy.shoola.agents.measurement.util.actions.ROIAction; import org.openmicroscopy.shoola.agents.measurement.util.roitable.ROIActionController; import org.openmicroscopy.shoola.agents.measurement.util.roitable.ROIActionController.CreationActionType; import org.openmicroscopy.shoola.util.roi.figures.ROIFigure; /** * Displays options to manipulate a ROI. * * @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 OME3.0 */ public class ROIPopupMenu { /** Text for the pop-up Menu -- not shown. */ final static String POPUP_MENU_DESCRIPTION = "Manager Options"; /** * Text for the ROI options -- parent of Split, merge, delete, propagate, * duplicate. * */ final static String ROI_CREATION_OPTIONS = "ROI Management Options"; /** * Text for the ROI stats options, the ability to call the roi stats: * show intensity over time, project, etc. * */ final static String ROI_STATS_OPTIONS = "ROI Stats Options"; /** The menubar which holds the menu items. */ private JPopupMenu popupMenu; /** The link to the controller for the pop up menu. */ private ROIActionController controller; /** The list of actions. */ private List<ROIAction> actions; /** * Instantiate the popup menu * @param controller class which has interface ROIActionController that * determines which action to perform depending on menu item selected. */ public ROIPopupMenu(ROIActionController controller) { this.controller = controller; actions = new ArrayList<ROIAction>(); createPopupMenu(); } /** * Creates the menu which will allow the user to adjust the ROI properties. * * @return The ROI control menu. */ private JMenu createROICreationOptions() { JMenu roiOptionsParent = new JMenu(ROI_CREATION_OPTIONS); ROIAction action; CreationActionType[] values = ROIActionController.CreationActionType.values(); for (int indexCnt = 0 ; indexCnt < values.length ; indexCnt++) { action = new ROIAction(controller, values[indexCnt]); actions.add(action); popupMenu.add(new JMenuItem(action)); } return roiOptionsParent; } /** Creates the popup menu. */ private void createPopupMenu() { popupMenu = new JPopupMenu(); createROICreationOptions(); } /** * Sets the flag to access the action to manage ROIs. * * @param figures The selected figure. */ public void setActionsEnabled(Collection<Figure> figures) { Iterator<Figure> i = figures.iterator(); Figure figure; int readable = 0; int delete = 0; int edit = 0; ROIFigure roi; while (i.hasNext()) { figure = i.next(); if (figure instanceof ROIFigure) { roi = (ROIFigure) figure; if (!(roi.isReadOnly())) { readable++; if (roi.canEdit()) edit++; if (roi.canDelete()) delete++; } } } Iterator<ROIAction> j = actions.iterator(); if (readable != figures.size()) { //some read-only while (j.hasNext()) { j.next().setEnabled(false); } } else { ROIAction action; boolean db = delete == figures.size(); boolean eb = edit == figures.size(); while (j.hasNext()) { action = j.next(); switch (action.getCreationActionType()) { case DUPLICATE: action.setEnabled(true); break; case DELETE: action.setEnabled(db); break; default: action.setEnabled(eb); } } } } /** * Returns the popup menu. * @return see above. */ public JPopupMenu getPopupMenu() { return popupMenu; } }