/* * 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.PopupPanel; import icy.gui.main.ActiveSequenceListener; import icy.gui.main.ActiveViewerListener; import icy.gui.sequence.SequenceInfosPanel; import icy.gui.viewer.Viewer; import icy.gui.viewer.ViewerEvent; import icy.sequence.Sequence; import icy.sequence.SequenceEvent; import java.awt.BorderLayout; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Insets; import javax.swing.JPanel; /** * @author Stephane */ public class SequencePanel extends JPanel implements ActiveSequenceListener, ActiveViewerListener { /** * */ private static final long serialVersionUID = -5727785928741370159L; private PopupPanel canvasPopupPanel; private PopupPanel lutPopupPanel; private PopupPanel infosPopupPanel; private JPanel canvasPanel; private JPanel lutPanel; private JPanel infosPanel; private SequenceInfosPanel sequenceInfosPanel; /** * */ public SequencePanel() { super(); initialize(); } private void initialize() { GridBagLayout gridBagLayout = new GridBagLayout(); gridBagLayout.columnWidths = new int[] {0, 0}; gridBagLayout.rowHeights = new int[] {0, 0, 0, 0, 0}; gridBagLayout.columnWeights = new double[] {1.0, Double.MIN_VALUE}; gridBagLayout.rowWeights = new double[] {0.0, 0.0, 0.0, 1.0, Double.MIN_VALUE}; setLayout(gridBagLayout); sequenceInfosPanel = new SequenceInfosPanel(); infosPopupPanel = new PopupPanel("Sequence Properties"); infosPanel = infosPopupPanel.getMainPanel(); infosPanel.setLayout(new BorderLayout()); infosPopupPanel.expand(); canvasPopupPanel = new PopupPanel("Canvas"); canvasPanel = canvasPopupPanel.getMainPanel(); canvasPanel.setLayout(new BorderLayout()); canvasPopupPanel.expand(); GridBagConstraints gbc_canvasPopupPanel = new GridBagConstraints(); gbc_canvasPopupPanel.fill = GridBagConstraints.HORIZONTAL; gbc_canvasPopupPanel.insets = new Insets(0, 0, 0, 0); gbc_canvasPopupPanel.gridx = 0; gbc_canvasPopupPanel.gridy = 0; add(canvasPopupPanel, gbc_canvasPopupPanel); lutPopupPanel = new PopupPanel("Histogram and colormap"); lutPanel = lutPopupPanel.getMainPanel(); lutPanel.setLayout(new BorderLayout()); lutPopupPanel.expand(); GridBagConstraints gbc_lutPopupPanel = new GridBagConstraints(); gbc_lutPopupPanel.fill = GridBagConstraints.HORIZONTAL; gbc_lutPopupPanel.insets = new Insets(0, 0, 0, 0); gbc_lutPopupPanel.gridx = 0; gbc_lutPopupPanel.gridy = 1; add(lutPopupPanel, gbc_lutPopupPanel); infosPanel.add(sequenceInfosPanel, BorderLayout.CENTER); GridBagConstraints gbc_infosPopupPanel = new GridBagConstraints(); gbc_infosPopupPanel.insets = new Insets(0, 0, 0, 0); gbc_infosPopupPanel.fill = GridBagConstraints.HORIZONTAL; gbc_infosPopupPanel.gridx = 0; gbc_infosPopupPanel.gridy = 2; add(infosPopupPanel, gbc_infosPopupPanel); } public void setCanvasPanel(JPanel panel) { canvasPanel.removeAll(); if (panel != null) canvasPanel.add(panel, BorderLayout.CENTER); canvasPanel.revalidate(); // we need it for zoom value refresh in detached mode // FIXME : normally revalidate should be enough canvasPanel.repaint(); } public void setLutPanel(JPanel panel) { lutPanel.removeAll(); if (panel != null) lutPanel.add(panel, BorderLayout.CENTER); lutPanel.revalidate(); // we need it for histogram refresh in detached mode // FIXME : normally revalidate should be enough lutPanel.repaint(); } @Override public void viewerActivated(Viewer viewer) { if (viewer != null) { setLutPanel(viewer.getLutViewer()); setCanvasPanel(viewer.getCanvasPanel()); } else { setLutPanel(null); setCanvasPanel(null); } } @Override public void viewerDeactivated(Viewer viewer) { // nothing here } @Override public void activeViewerChanged(ViewerEvent event) { // we receive from current focused viewer only switch (event.getType()) { case CANVAS_CHANGED: // refresh canvas panel setCanvasPanel(event.getSource().getCanvasPanel()); break; case LUT_CHANGED: // refresh lut panel setLutPanel(event.getSource().getLutViewer()); break; case POSITION_CHANGED: // nothing to do break; } } @Override public void sequenceActivated(Sequence sequence) { sequenceInfosPanel.sequenceActivated(sequence); } @Override public void sequenceDeactivated(Sequence sequence) { // nothing here } @Override public void activeSequenceChanged(SequenceEvent event) { sequenceInfosPanel.activeSequenceChanged(event); } }