/* SlavePlotSettingsPopupDialog.java created 2007-11-08 * */ package org.signalml.app.view.signal.popup; import static org.signalml.app.util.i18n.SvarogI18n._; import java.awt.BorderLayout; import java.awt.Component; import java.awt.Dimension; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import javax.swing.AbstractAction; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.ButtonGroup; import javax.swing.JButton; import javax.swing.JCheckBox; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import org.signalml.app.model.montage.MontageDescriptor; import org.signalml.app.util.IconUtils; import org.signalml.app.util.SwingUtils; import org.signalml.app.view.common.components.TitledCrossBorder; import org.signalml.app.view.montage.SignalMontageDialog; import org.signalml.app.view.signal.SignalPlot; import org.signalml.domain.montage.Montage; import org.signalml.plugin.export.SignalMLException; import org.signalml.plugin.export.view.AbstractPopupDialog; /** SlavePlotSettingsPopupDialog * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class SlavePlotSettingsPopupDialog extends AbstractPopupDialog { private static final long serialVersionUID = 1L; private SignalPlot currentPlot; private JRadioButton inheritedMontageRadioButton; private JRadioButton localMontageRadioButton; private ButtonGroup montageButtonGroup; private JCheckBox horizontalLockCheckBox; private JCheckBox verticalLockCheckBox; private EditMontageAction editMontageAction; private JButton editMontageButton; private SynchronizeNowAction synchronizeNowAction; private JButton synchronizeNowButton; private SignalMontageDialog signalMontageDialog; private Montage currentMontage; public SlavePlotSettingsPopupDialog(Window w, boolean isModal) { super(w, isModal); } @Override public JComponent createInterface() { JPanel interfacePanel = new JPanel(new BorderLayout()); JPanel synchronizationPanel = new JPanel(); synchronizationPanel.setLayout(new BoxLayout(synchronizationPanel, BoxLayout.Y_AXIS)); CompoundBorder border = new CompoundBorder( new TitledCrossBorder(_("Synchronization"), true), new EmptyBorder(3,3,3,3) ); synchronizationPanel.setBorder(border); synchronizationPanel.add(getHorizontalLockCheckBox()); synchronizationPanel.add(Box.createVerticalStrut(3)); synchronizationPanel.add(getVerticalLockCheckBox()); synchronizationPanel.add(Box.createVerticalStrut(5)); synchronizationPanel.add(getSynchronizeNowButton()); JPanel montagePanel = new JPanel(); montagePanel.setLayout(new BoxLayout(montagePanel, BoxLayout.Y_AXIS)); border = new CompoundBorder( new TitledBorder(_("Montage")), new EmptyBorder(3,3,3,3) ); montagePanel.setBorder(border); montagePanel.add(getInheritedMontageRadioButton()); montagePanel.add(Box.createVerticalStrut(3)); montagePanel.add(getLocalMontageRadioButton()); montagePanel.add(Box.createVerticalStrut(5)); montagePanel.add(getEditMontageButton()); SwingUtils.makeButtonsSameSize(new JButton[] { getSynchronizeNowButton(), getEditMontageButton() }); interfacePanel.add(synchronizationPanel, BorderLayout.NORTH); interfacePanel.add(montagePanel); Dimension size = interfacePanel.getPreferredSize(); if (size.width < 150) { size.width = 150; } interfacePanel.setPreferredSize(size); return interfacePanel; } @Override public void fillDialogFromModel(Object model) throws SignalMLException { currentPlot = (SignalPlot) model; getHorizontalLockCheckBox().setSelected(currentPlot.isHorizontalLock()); getVerticalLockCheckBox().setSelected(currentPlot.isVerticalLock()); currentMontage = currentPlot.getLocalMontage(); if (currentMontage == null) { getInheritedMontageRadioButton().setSelected(true); currentMontage = currentPlot.getDocument().getMontage(); } else { getLocalMontageRadioButton().setSelected(true); } } @Override public void fillModelFromDialog(Object model) throws SignalMLException { SignalPlot plot = (SignalPlot) model; plot.setHorizontalLock(getHorizontalLockCheckBox().isSelected()); plot.setVerticalLock(getVerticalLockCheckBox().isSelected()); boolean local = getLocalMontageRadioButton().isSelected(); if (local) { plot.setLocalMontage(currentMontage); } else { plot.setLocalMontage(null); } } public ButtonGroup getMontageButtonGroup() { if (montageButtonGroup == null) { montageButtonGroup = new ButtonGroup(); } return montageButtonGroup; } public JRadioButton getInheritedMontageRadioButton() { if (inheritedMontageRadioButton == null) { inheritedMontageRadioButton = new JRadioButton(_("Inherited from document")); getMontageButtonGroup().add(inheritedMontageRadioButton); inheritedMontageRadioButton.setAlignmentX(Component.LEFT_ALIGNMENT); } return inheritedMontageRadioButton; } public JRadioButton getLocalMontageRadioButton() { if (localMontageRadioButton == null) { localMontageRadioButton = new JRadioButton(_("Modified")); getMontageButtonGroup().add(localMontageRadioButton); localMontageRadioButton.setAlignmentX(Component.LEFT_ALIGNMENT); localMontageRadioButton.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { boolean selected = (e.getStateChange() == ItemEvent.SELECTED); getEditMontageAction().setEnabled(selected); if (selected) { currentPlot.setLocalMontage(currentMontage); } else { currentPlot.setLocalMontage(null); } } }); } return localMontageRadioButton; } public JCheckBox getHorizontalLockCheckBox() { if (horizontalLockCheckBox == null) { horizontalLockCheckBox = new JCheckBox(_("Horizontal scroll lock")); horizontalLockCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT); horizontalLockCheckBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { currentPlot.setHorizontalLock(e.getStateChange() == ItemEvent.SELECTED); } }); } return horizontalLockCheckBox; } public JCheckBox getVerticalLockCheckBox() { if (verticalLockCheckBox == null) { verticalLockCheckBox = new JCheckBox(_("Vertical scroll lock")); verticalLockCheckBox.setAlignmentX(Component.LEFT_ALIGNMENT); verticalLockCheckBox.addItemListener(new ItemListener() { @Override public void itemStateChanged(ItemEvent e) { currentPlot.setVerticalLock(e.getStateChange() == ItemEvent.SELECTED); } }); } return verticalLockCheckBox; } public EditMontageAction getEditMontageAction() { if (editMontageAction == null) { editMontageAction = new EditMontageAction(); } return editMontageAction; } public JButton getEditMontageButton() { if (editMontageButton == null) { editMontageButton = new JButton(getEditMontageAction()); editMontageButton.setAlignmentX(Component.LEFT_ALIGNMENT); } return editMontageButton; } public SynchronizeNowAction getSynchronizeNowAction() { if (synchronizeNowAction == null) { synchronizeNowAction = new SynchronizeNowAction(); } return synchronizeNowAction; } public JButton getSynchronizeNowButton() { if (synchronizeNowButton == null) { synchronizeNowButton = new JButton(getSynchronizeNowAction()); synchronizeNowButton.setAlignmentX(Component.LEFT_ALIGNMENT); } return synchronizeNowButton; } @Override public boolean supportsModelClass(Class<?> clazz) { return SignalPlot.class.isAssignableFrom(clazz); } @Override public boolean isControlPanelEquipped() { return false; } @Override public boolean isCancellable() { return false; } @Override public boolean isFormClickApproving() { return true; } public SignalMontageDialog getSignalMontageDialog() { return signalMontageDialog; } public void setSignalMontageDialog(SignalMontageDialog signalMontageDialog) { this.signalMontageDialog = signalMontageDialog; } protected class EditMontageAction extends AbstractAction { private static final long serialVersionUID = 1L; public EditMontageAction() { super(_("Edit modified montage")); putValue(AbstractAction.SMALL_ICON, IconUtils.loadClassPathIcon("org/signalml/app/icon/montage.png")); putValue(AbstractAction.SHORT_DESCRIPTION,_("Edit montage for this plot")); setEnabled(false); } public void actionPerformed(ActionEvent ev) { MontageDescriptor descriptor = new MontageDescriptor(currentMontage, currentPlot.getDocument()); boolean ok = signalMontageDialog.showDialog(descriptor, true); if (!ok) { return; } currentMontage = descriptor.getMontage(); boolean local = getLocalMontageRadioButton().isSelected(); if (local) { currentPlot.setLocalMontage(currentMontage); } } } protected class SynchronizeNowAction extends AbstractAction { private static final long serialVersionUID = 1L; public SynchronizeNowAction() { super(_("Synchronize now")); putValue(AbstractAction.SMALL_ICON, IconUtils.loadClassPathIcon("org/signalml/app/icon/synchronizenow.png")); putValue(AbstractAction.SHORT_DESCRIPTION,_("Synchronize plot with master plot")); } public void actionPerformed(ActionEvent ev) { currentPlot.synchronizeToMaster(); setVisible(false); } } }