/*========================================================================= Program: FusionViewer Module: $RCSfile: SplitWindowPanel.java,v $ Language: Java Date: $Date: 2007/02/02 19:27:57 $ Version: $Revision: 1.2 $ Copyright (c) Insightful Corporation. All rights reserved. See Copyright.txt for details. This software is distributed WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the above copyright notice for more information. =========================================================================*/ package org.fusionviewer.ui; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JLabel; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JSlider; import javax.swing.event.ChangeEvent; import javax.swing.event.ChangeListener; import org.fusionviewer.model.FusionDisplayModel; import org.fusionviewer.model.ImageDisplayModel; import org.fusionviewer.model.ImageDisplayModelListener; /**\class SplitWindowPanel *\brief Controls for changing split window fusion mode parameters. */ public class SplitWindowPanel extends JPanel implements ChangeListener, ImageDisplayModelListener { private FusionDisplayModel m_model; private JSlider m_slider; private JLabel m_alphaValue; private JLabel m_tickSpacingValue; private JButton m_optionsButton; public SplitWindowPanel(FusionDisplayModel model) { m_model = model; model.addListener(this); setBorder(BorderFactory.createEmptyBorder(5, 5, 5, 5)); setLayout(new GridBagLayout()); GridBagConstraints labelConstraints = new GridBagConstraints(); labelConstraints.fill = GridBagConstraints.NONE; labelConstraints.anchor = GridBagConstraints.LINE_START; labelConstraints.insets = new java.awt.Insets(5, 5, 5, 5); labelConstraints.gridx = 0; labelConstraints.gridy = 0; GridBagConstraints sliderConstraints = new GridBagConstraints(); sliderConstraints.fill = GridBagConstraints.HORIZONTAL; sliderConstraints.weightx = 1.0; sliderConstraints.insets = new java.awt.Insets(5, 5, 5, 5); sliderConstraints.gridx = 1; sliderConstraints.gridy = 0; GridBagConstraints valueConstraints = new GridBagConstraints(); valueConstraints.fill = GridBagConstraints.HORIZONTAL; valueConstraints.insets = new java.awt.Insets(5, 5, 5, 5); valueConstraints.gridx = 1; valueConstraints.gridy = 1; GridBagConstraints spacingConstraints = new GridBagConstraints(); spacingConstraints.fill = GridBagConstraints.NONE; spacingConstraints.anchor = GridBagConstraints.LINE_START; spacingConstraints.insets = new java.awt.Insets(5, 5, 5, 5); spacingConstraints.gridx = 0; spacingConstraints.gridy = 2; spacingConstraints.gridwidth = 2; m_slider = new JSlider(); m_slider.setPaintTicks(true); m_slider.setMajorTickSpacing(10); m_slider.setMaximum(100); m_slider.setMinimum(0); m_slider.addChangeListener(this); m_alphaValue = new JLabel(); m_alphaValue.setHorizontalAlignment(JLabel.CENTER); m_optionsButton = new JButton("Set..."); m_optionsButton.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { showTickmarkDialog(); } }); m_tickSpacingValue = new JLabel(); m_tickSpacingValue.setHorizontalAlignment(JLabel.CENTER); setOpaque(false); m_slider.setOpaque(false); m_optionsButton.setOpaque(false); setValuesToModel(); add(new JLabel("Opacity"), labelConstraints); add(m_slider, sliderConstraints); add(m_alphaValue, valueConstraints); Box spacingPanel = Box.createHorizontalBox(); spacingPanel.add(new JLabel("Tickmark Spacing:")); spacingPanel.add(Box.createHorizontalStrut(10)); spacingPanel.add(m_tickSpacingValue); spacingPanel.add(Box.createHorizontalStrut(20)); spacingPanel.add(m_optionsButton); add(spacingPanel, spacingConstraints); } private void setValuesToModel() { int value = (int) (m_model.getSplitWindowAlpha() * 100.0f); m_slider.setValue(value); showText(value, m_model.getSplitWindowTickSpacing()); } /* (non-Javadoc) * @see javax.swing.event.ChangeListener#stateChanged(javax.swing.event.ChangeEvent) */ public void stateChanged(ChangeEvent e) { m_model.setSplitWindowAlpha((float) m_slider.getValue() / 100.0f); showText(m_slider.getValue(), m_model.getSplitWindowTickSpacing()); } /* (non-Javadoc) * @see com.insightful.jimage.core.ImageDisplayModelListener#modelChanged(int, com.insightful.jimage.core.ImageDisplayModel) */ public void modelChanged(int type, int planes, ImageDisplayModel source) { if (type == FusionDisplayModel.SPLITWINDOW_CHANGED) setValuesToModel(); } private void showText(int alpha, float spacing) { m_alphaValue.setText(Integer.toString(alpha) + "%"); m_tickSpacingValue.setText(Float.toString(spacing) + " mm"); } private void showTickmarkDialog() { TickmarkSpacingDialog dialog = new TickmarkSpacingDialog(JOptionPane.getFrameForComponent(this), m_model.getSplitWindowTickSpacing()); if (dialog.run()) m_model.setSplitWindowTickSpacing(dialog.getTickmarkSpacing()); } }