/* * 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.inspector; import icy.gui.component.AbstractRoisPanel; import icy.main.Icy; import icy.preferences.GeneralPreferences; import icy.roi.ROI; import icy.roi.ROIEvent; import icy.sequence.Sequence; import icy.sequence.SequenceEvent; import icy.sequence.SequenceEvent.SequenceEventSourceType; import java.awt.BorderLayout; import javax.swing.event.ListSelectionEvent; /** * ROI Panel component displayed in the Icy inspector.<br> * Use the {@link AbstractRoisPanel} if you want to embed the ROI table in your own component. * * @author Stephane */ public class RoisPanel extends AbstractRoisPanel { protected static final String PREF_ID = "ROIPanel"; // GUI protected RoiControlPanel roiControlPanel; public RoisPanel() { super(GeneralPreferences.getPreferences().node(PREF_ID)); } @Override protected void initialize() { super.initialize(); // build control panel roiControlPanel = new RoiControlPanel(this); add(roiControlPanel, BorderLayout.SOUTH); validate(); } @Override protected ROIResults createNewROIResults(ROI roi) { return new CustomROIResults(roi); } protected Sequence getSequence() { return Icy.getMainInterface().getActiveSequence(); } @Override protected void refreshTableDataStructureInternal() { super.refreshTableDataStructureInternal(); // notify the ROI control panel that selection changed roiControlPanel.selectionChanged(); } @Override protected void refreshTableDataInternal() { super.refreshTableDataInternal(); // notify the ROI control panel that selection changed (force data refresh) roiControlPanel.selectionChanged(); } @Override protected void refreshTableSelectionInternal() { super.refreshTableSelectionInternal(); // notify the ROI control panel that selection changed roiControlPanel.selectionChanged(); } // called when selection changed in the ROI roiTable @Override public void valueChanged(ListSelectionEvent e) { super.valueChanged(e); // currently changing the selection ? --> exit if (e.getValueIsAdjusting()) return; // currently changing the selection ? --> exit if (roiSelectionModel.getValueIsAdjusting()) return; // currently changing the selection ? --> exit if (modifySelection.availablePermits() <= 0) return; // notify the ROI control panel that selection changed roiControlPanel.selectionChanged(); } @Override public void activeSequenceChanged(SequenceEvent event) { super.activeSequenceChanged(event); // if data changed (more or less Z, T or C) we need to refresh action // so we can change ROI position correctly if (event.getSourceType() == SequenceEventSourceType.SEQUENCE_DATA) roiControlPanel.refreshROIActions(); } protected class CustomROIResults extends ROIResults { protected CustomROIResults(ROI roi) { super(roi); } @Override public void roiChanged(ROIEvent event) { final ROI roi = event.getSource(); // ROI selected ? --> propagate event to control panel if (roi.isSelected()) roiControlPanel.roiChanged(event); super.roiChanged(event); } } }