/* BookPlotOptionsPopupDialog.java created 2008-02-23
*
*/
package org.signalml.app.view.book.popup;
import static org.signalml.app.util.i18n.SvarogI18n._;
import java.awt.BorderLayout;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.Window;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.text.ParseException;
import java.util.LinkedList;
import java.util.List;
import javax.swing.Box;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JComponent;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSpinner.DefaultEditor;
import javax.swing.JToggleButton;
import javax.swing.SpinnerNumberModel;
import javax.swing.border.EmptyBorder;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import org.signalml.app.SvarogApplication;
import org.signalml.app.config.ApplicationConfiguration;
import org.signalml.app.util.IconUtils;
import org.signalml.app.view.book.BookPlot;
import org.signalml.app.view.book.BookView;
import org.signalml.app.view.common.components.TitledCrossBorder;
import org.signalml.app.view.common.components.spinners.IntegerSpinner;
import org.signalml.plugin.export.SignalMLException;
import org.signalml.plugin.export.view.AbstractPopupDialog;
/** BookPlotOptionsPopupDialog
*
*
* @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o.
*/
public class BookPlotOptionsPopupDialog extends AbstractPopupDialog {
private static final long serialVersionUID = 1L;
private BookView bookView;
private List<Component> buttonPanelComponents = new LinkedList<Component>();
private JPanel aspectRatioPanel;
private IntegerSpinner aspectUpSpinner;
private IntegerSpinner aspectDownSpinner;
private JToggleButton antialiasButton;
private JToggleButton originalSignalVisibleButton;
private JToggleButton fullReconstructionVisibleButton;
private JToggleButton reconstructionVisibleButton;
private JToggleButton legendVisibleButton;
private JToggleButton scaleVisibleButton;
private JToggleButton axesVisibleButton;
private JToggleButton atomToolTipsVisibleButton;
public BookPlotOptionsPopupDialog(Window w, boolean isModal) {
super(w, isModal);
}
public BookView getBookView() {
return bookView;
}
public void setBookView(BookView bookView) {
this.bookView = bookView;
}
@Override
public JComponent createInterface() {
createButtons();
JPanel interfacePanel = new JPanel(new BorderLayout());
interfacePanel.setBorder(new TitledCrossBorder(_("Plot options"), true));
JPanel buttonPanel = new JPanel();
buttonPanel.setBorder(new EmptyBorder(3,3,3,3));
buttonPanel.setLayout(new GridLayout(buttonPanelComponents.size(), 1, 3, 3));
for (Component c : buttonPanelComponents) {
if (c instanceof JComponent) {
((JComponent) c).setAlignmentX(Component.CENTER_ALIGNMENT);
}
buttonPanel.add(c);
}
interfacePanel.add(buttonPanel, BorderLayout.CENTER);
JPanel rightPanel = new JPanel(new BorderLayout());
rightPanel.add(createSettingPanel(), BorderLayout.NORTH);
rightPanel.add(Box.createVerticalGlue(), BorderLayout.CENTER);
interfacePanel.add(rightPanel, BorderLayout.EAST);
return interfacePanel;
}
private JPanel createSettingPanel() {
JPanel settingPanel = new JPanel();
settingPanel.setBorder(new EmptyBorder(3,3,3,3));
GroupLayout layout = new GroupLayout(settingPanel);
settingPanel.setLayout(layout);
layout.setAutoCreateContainerGaps(false);
layout.setAutoCreateGaps(true);
JLabel aspectRatioLabel = new JLabel(_("Map aspect ratio"));
GroupLayout.SequentialGroup hGroup = layout.createSequentialGroup();
hGroup.addGroup(
layout.createParallelGroup(Alignment.LEADING)
.addComponent(aspectRatioLabel)
);
hGroup.addGroup(
layout.createParallelGroup(Alignment.TRAILING)
.addComponent(getAspectRatioPanel())
);
layout.setHorizontalGroup(hGroup);
GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup();
vGroup.addGroup(
layout.createParallelGroup(Alignment.BASELINE)
.addComponent(aspectRatioLabel)
.addComponent(getAspectRatioPanel())
);
layout.setVerticalGroup(vGroup);
return settingPanel;
}
public JPanel getAspectRatioPanel() {
if (aspectRatioPanel == null) {
aspectRatioPanel = new JPanel(new BorderLayout(3,3));
aspectRatioPanel.add(getAspectUpSpinner(), BorderLayout.WEST);
aspectRatioPanel.add(new JLabel("/"), BorderLayout.CENTER);
aspectRatioPanel.add(getAspectDownSpinner(), BorderLayout.EAST);
}
return aspectRatioPanel;
}
public IntegerSpinner getAspectUpSpinner() {
if (aspectUpSpinner == null) {
aspectUpSpinner = new IntegerSpinner(new SpinnerNumberModel(bookView.getPlot().getMapAspectRatioUp(), 1, BookPlot.MAX_ASPECT_RATIO_SCALE, 1));
aspectUpSpinner.setPreferredSize(new Dimension(40,25));
aspectUpSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
bookView.getPlot().setMapAspectRatioUp(aspectUpSpinner.getValue());
}
});
}
return aspectUpSpinner;
}
public IntegerSpinner getAspectDownSpinner() {
if (aspectDownSpinner == null) {
aspectDownSpinner = new IntegerSpinner(new SpinnerNumberModel(bookView.getPlot().getMapAspectRatioDown(), 1, BookPlot.MAX_ASPECT_RATIO_SCALE, 1));
aspectDownSpinner.setPreferredSize(new Dimension(40,25));
aspectDownSpinner.addChangeListener(new ChangeListener() {
@Override
public void stateChanged(ChangeEvent e) {
bookView.getPlot().setMapAspectRatioDown(aspectDownSpinner.getValue());
}
});
}
return aspectDownSpinner;
}
protected BookPlot getPlot() {
return bookView == null? null : bookView.getPlot();
}
private void createButtons() {
buttonPanelComponents.add(getOriginalSignalVisibleButton());
buttonPanelComponents.add(getFullReconstructionVisibleButton());
buttonPanelComponents.add(getReconstructionVisibleButton());
buttonPanelComponents.add(Box.createRigidArea(new Dimension(1,1)));
buttonPanelComponents.add(getLegendVisibleButton());
buttonPanelComponents.add(getScaleVisibleButton());
buttonPanelComponents.add(getAxesVisibleButton());
buttonPanelComponents.add(getAtomToolTipsVisibleButton());
buttonPanelComponents.add(Box.createRigidArea(new Dimension(1,1)));
buttonPanelComponents.add(getAntialiasButton());
}
public JToggleButton getAntialiasButton() {
if (antialiasButton == null) {
antialiasButton = new JToggleButton(_("Signal antialiasing"), IconUtils.loadClassPathIcon("org/signalml/app/icon/antialias.png"));
antialiasButton.setToolTipText(_("Toggle reconstruction antialiasing"));
antialiasButton.setSelected(getPlot().isSignalAntialiased());
antialiasButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getPlot().setSignalAntialiased(antialiasButton.isSelected());
}
});
}
return antialiasButton;
}
public JToggleButton getOriginalSignalVisibleButton() {
if (originalSignalVisibleButton == null) {
originalSignalVisibleButton = new JToggleButton(_("Show original signal"));
originalSignalVisibleButton.setIcon(IconUtils.loadClassPathIcon("org/signalml/app/icon/originalsignalvisible.png"));
originalSignalVisibleButton.setToolTipText(_("Toggle showing original signal graph"));
originalSignalVisibleButton.setSelected(getPlot().isOriginalSignalVisible());
originalSignalVisibleButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getPlot().setOriginalSignalVisible(originalSignalVisibleButton.isSelected());
}
});
}
return originalSignalVisibleButton;
}
public JToggleButton getFullReconstructionVisibleButton() {
if (fullReconstructionVisibleButton == null) {
fullReconstructionVisibleButton = new JToggleButton(_("Show full reconstruction"));
fullReconstructionVisibleButton.setIcon(IconUtils.loadClassPathIcon("org/signalml/app/icon/fullreconstructionvisible.png"));
fullReconstructionVisibleButton.setToolTipText(_("Toggle showing full reconstruction graph"));
fullReconstructionVisibleButton.setSelected(bookView.getPlot().isFullReconstructionVisible());
fullReconstructionVisibleButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getPlot().setFullReconstructionVisible(fullReconstructionVisibleButton.isSelected());
}
});
}
return fullReconstructionVisibleButton;
}
public JToggleButton getReconstructionVisibleButton() {
if (reconstructionVisibleButton == null) {
reconstructionVisibleButton = new JToggleButton(_("Show reconstruction"));
reconstructionVisibleButton.setIcon(IconUtils.loadClassPathIcon("org/signalml/app/icon/reconstructionvisible.png"));
reconstructionVisibleButton.setToolTipText(_("Toggle showing reconstruction graph"));
reconstructionVisibleButton.setSelected(bookView.getPlot().isReconstructionVisible());
reconstructionVisibleButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getPlot().setReconstructionVisible(reconstructionVisibleButton.isSelected());
}
});
}
return reconstructionVisibleButton;
}
public JToggleButton getLegendVisibleButton() {
if (legendVisibleButton == null) {
legendVisibleButton = new JToggleButton(_("Show legend"));
legendVisibleButton.setIcon(IconUtils.loadClassPathIcon("org/signalml/app/icon/legendvisible.png"));
legendVisibleButton.setToolTipText(_("Toggle showing reconstruction legend"));
legendVisibleButton.setSelected(bookView.getPlot().isLegendVisible());
legendVisibleButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getPlot().setLegendVisible(legendVisibleButton.isSelected());
}
});
}
return legendVisibleButton;
}
public JToggleButton getScaleVisibleButton() {
if (scaleVisibleButton == null) {
scaleVisibleButton = new JToggleButton(_("Show scale"));
scaleVisibleButton.setIcon(IconUtils.loadClassPathIcon("org/signalml/app/icon/scalevisible.png"));
scaleVisibleButton.setToolTipText(_("Toggle showing map scale"));
scaleVisibleButton.setSelected(bookView.getPlot().isScaleVisible());
scaleVisibleButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getPlot().setScaleVisible(scaleVisibleButton.isSelected());
}
});
}
return scaleVisibleButton;
}
public JToggleButton getAxesVisibleButton() {
if (axesVisibleButton == null) {
axesVisibleButton = new JToggleButton(_("Show axes"));
axesVisibleButton.setIcon(IconUtils.loadClassPathIcon("org/signalml/app/icon/axesvisible.png"));
axesVisibleButton.setToolTipText(_("Toggle showing map axes"));
axesVisibleButton.setSelected(bookView.getPlot().isAxesVisible());
axesVisibleButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getPlot().setAxesVisible(axesVisibleButton.isSelected());
}
});
}
return axesVisibleButton;
}
public JToggleButton getAtomToolTipsVisibleButton() {
if (atomToolTipsVisibleButton == null) {
atomToolTipsVisibleButton = new JToggleButton(_("Show atom tool tips"));
atomToolTipsVisibleButton.setIcon(IconUtils.loadClassPathIcon("org/signalml/app/icon/atomtooltips.png"));
atomToolTipsVisibleButton.setToolTipText(_("Show tool tips when mouse hovers over an atom"));
atomToolTipsVisibleButton.setSelected(bookView.getPlot().isAtomToolTipsVisible());
atomToolTipsVisibleButton.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
getPlot().setAtomToolTipsVisible(atomToolTipsVisibleButton.isSelected());
}
});
}
return atomToolTipsVisibleButton;
}
@Override
public void fillDialogFromModel(Object model) throws SignalMLException {
// nothing to do
}
@Override
public void fillModelFromDialog(Object model) throws SignalMLException {
// nothing to do
}
@Override
protected void onDialogClose() {
super.onDialogClose();
try {
getAspectDownSpinner().commitEdit();
} catch (ParseException ex) {
JComponent editor = getAspectDownSpinner().getEditor();
if (editor instanceof DefaultEditor) {
((DefaultEditor) editor).getTextField().setValue(getAspectDownSpinner().getValue());
}
}
try {
getAspectUpSpinner().commitEdit();
} catch (ParseException ex) {
JComponent editor = getAspectUpSpinner().getEditor();
if (editor instanceof DefaultEditor) {
((DefaultEditor) editor).getTextField().setValue(getAspectUpSpinner().getValue());
}
}
}
@Override
public boolean supportsModelClass(Class<?> clazz) {
return (clazz == null);
}
@Override
public boolean isCancellable() {
return false;
}
@Override
public boolean isFormClickApproving() {
return true;
}
@Override
public boolean isControlPanelEquipped() {
return false;
}
/**
* Saves settings set in this dialog to {@ling ApplicationConfiguration}.
*/
public void saveSettingsToApplicationConfiguration() {
ApplicationConfiguration applicationConfiguration = SvarogApplication.getApplicationConfiguration();
applicationConfiguration.setMapAspectRatioUp(getAspectUpSpinner().getValue());
applicationConfiguration.setMapAspectRatioDown(getAspectDownSpinner().getValue());
applicationConfiguration.setSignalInBookAntialiased(getAntialiasButton().isSelected());
applicationConfiguration.setOriginalSignalVisible(getOriginalSignalVisibleButton().isSelected());
applicationConfiguration.setFullReconstructionVisible(getFullReconstructionVisibleButton().isSelected());
applicationConfiguration.setReconstructionVisible(getReconstructionVisibleButton().isSelected());
applicationConfiguration.setLegendVisible(getLegendVisibleButton().isSelected());
applicationConfiguration.setScaleVisible(getScaleVisibleButton().isSelected());
applicationConfiguration.setAxesVisible(getAxesVisibleButton().isSelected());
applicationConfiguration.setAtomToolTipsVisible(getAtomToolTipsVisibleButton().isSelected());
}
}