/* AtomTableDialog.java created 2008-03-01 * */ package org.signalml.app.view.book; import static org.signalml.app.util.i18n.SvarogI18n._; import java.awt.BorderLayout; import java.awt.Dimension; import java.awt.Window; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; import javax.swing.Box; import javax.swing.JButton; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JToggleButton; import javax.swing.JToolBar; import javax.swing.border.EmptyBorder; import javax.swing.border.TitledBorder; import javax.swing.border.CompoundBorder; import org.signalml.app.document.BookDocument; import org.signalml.app.util.IconUtils; import org.signalml.app.view.common.dialogs.AbstractDialog; import org.signalml.domain.book.BookFilterProcessor; import org.signalml.domain.book.StandardBookSegment; import org.signalml.plugin.export.SignalMLException; /** AtomTableDialog * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class AtomTableDialog extends AbstractDialog implements PropertyChangeListener { private static final long serialVersionUID = 1L; private AtomTableModel atomTableModel; private AtomTable atomTable; private JScrollPane atomTableScrollPane; private JToggleButton filterSwitchButton; private JButton previousSegmentButton; private JButton nextSegmentButton; private JButton previousChannelButton; private JButton nextChannelButton; private SegmentTextField segmentTextField; private ChannelTextField channelTextField; private JToolBar toolBar; private BookView currentView; public AtomTableDialog() { super(); } public AtomTableDialog(Window w, boolean isModal) { super(w, isModal); } @Override protected void initialize() { setTitle(_("Atom table")); setIconImage(IconUtils.loadClassPathImage("org/signalml/app/icon/atomtable.png")); super.initialize(); setResizable(true); } @Override public boolean isCancellable() { return false; } @Override public JComponent createInterface() { JPanel interfacePanel = new JPanel(new BorderLayout()); JPanel tablePanel = new JPanel(new BorderLayout()); CompoundBorder border = new CompoundBorder( new TitledBorder(_("Atoms in the current segment (may exclude filtered atoms)")), new EmptyBorder(3,3,3,3) ); tablePanel.setBorder(border); tablePanel.add(getAtomTableScrollPane(), BorderLayout.CENTER); interfacePanel.add(getToolBar(), BorderLayout.NORTH); interfacePanel.add(tablePanel, BorderLayout.CENTER); return interfacePanel; } public AtomTableModel getAtomTableModel() { if (atomTableModel == null) { atomTableModel = new AtomTableModel(); } return atomTableModel; } public AtomTable getAtomTable() { if (atomTable == null) { atomTable = new AtomTable(getAtomTableModel()); } return atomTable; } public JScrollPane getAtomTableScrollPane() { if (atomTableScrollPane == null) { atomTableScrollPane = new JScrollPane(getAtomTable()); atomTableScrollPane.setPreferredSize(new Dimension(800,600)); } return atomTableScrollPane; } public JToolBar getToolBar() { if (toolBar == null) { toolBar = new JToolBar(JToolBar.HORIZONTAL); toolBar.setFloatable(false); toolBar.add(getPreviousSegmentButton()); toolBar.addSeparator(new Dimension(2,2)); toolBar.add(getSegmentTextField()); toolBar.addSeparator(new Dimension(2,2)); toolBar.add(getNextSegmentButton()); toolBar.addSeparator(); toolBar.add(getPreviousChannelButton()); toolBar.addSeparator(new Dimension(2,2)); toolBar.add(getChannelTextField()); toolBar.addSeparator(new Dimension(2,2)); toolBar.add(getNextChannelButton()); toolBar.addSeparator(); toolBar.add(Box.createHorizontalGlue()); toolBar.add(getFilterSwitchButton()); } return toolBar; } public JToggleButton getFilterSwitchButton() { if (filterSwitchButton == null) { filterSwitchButton = new JToggleButton(); filterSwitchButton.setHideActionText(true); filterSwitchButton.setSelectedIcon(IconUtils.loadClassPathIcon("org/signalml/app/icon/filteron.png")); } return filterSwitchButton; } public JButton getPreviousSegmentButton() { if (previousSegmentButton == null) { previousSegmentButton = new JButton(); previousSegmentButton.setHideActionText(true); } return previousSegmentButton; } public JButton getNextSegmentButton() { if (nextSegmentButton == null) { nextSegmentButton = new JButton(); nextSegmentButton.setHideActionText(true); } return nextSegmentButton; } public JButton getPreviousChannelButton() { if (previousChannelButton == null) { previousChannelButton = new JButton(); previousChannelButton.setHideActionText(true); } return previousChannelButton; } public JButton getNextChannelButton() { if (nextChannelButton == null) { nextChannelButton = new JButton(); nextChannelButton.setHideActionText(true); } return nextChannelButton; } public SegmentTextField getSegmentTextField() { if (segmentTextField == null) { segmentTextField = new SegmentTextField(); segmentTextField.setPreferredSize(new Dimension(100, 25)); } return segmentTextField; } public ChannelTextField getChannelTextField() { if (channelTextField == null) { channelTextField = new ChannelTextField(); channelTextField.setPreferredSize(new Dimension(100,25)); } return channelTextField; } @Override public void fillDialogFromModel(Object model) throws SignalMLException { setCurrentView((BookView) model); } @Override public void fillModelFromDialog(Object model) throws SignalMLException { // do nothing } protected BookView getCurrentView() { return currentView; } protected void setCurrentView(BookView currentView) { if (this.currentView != currentView) { if (this.currentView != null) { this.currentView.removePropertyChangeListener(this); this.currentView.getDocument().removePropertyChangeListener(this); } } this.currentView = currentView; if (currentView != null) { getFilterSwitchButton().setAction(currentView.getFilterSwitchAction()); getPreviousSegmentButton().setAction(currentView.getPreviousSegmentAction()); getNextSegmentButton().setAction(currentView.getNextSegmentAction()); getPreviousChannelButton().setAction(currentView.getPreviousChannelAction()); getNextChannelButton().setAction(currentView.getNextChannelAction()); getSegmentTextField().setBookView(currentView); getChannelTextField().setBookView(currentView); refreshAfterChange(); currentView.getDocument().addPropertyChangeListener(this); currentView.addPropertyChangeListener(this); } else { getFilterSwitchButton().setAction(null); getPreviousSegmentButton().setAction(null); getNextSegmentButton().setAction(null); getPreviousChannelButton().setAction(null); getNextChannelButton().setAction(null); getSegmentTextField().setBookView(null); getChannelTextField().setBookView(null); AtomTableModel atomModel = getAtomTableModel(); atomModel.setSegment(null); atomModel.setReconstruction(null); } } protected void refreshAfterChange() { BookFilterProcessor filter = currentView.getFilter(); int currentSegment = currentView.getCurrentSegment(); int currentChannel = currentView.getCurrentChannel(); StandardBookSegment segment = filter.getSegmentAt(currentSegment, currentChannel); AtomTableModel atomModel = getAtomTableModel(); atomModel.setSegment(segment); atomModel.setReconstruction(currentView.getPlot().getReconstructionProvider()); } @Override public void propertyChange(PropertyChangeEvent evt) { if (currentView == null) { return; } Object source = evt.getSource(); String propertyName = evt.getPropertyName(); if (source == currentView.getDocument()) { if (BookDocument.FILTER_CHAIN_PROPERTY.equals(propertyName)) { refreshAfterChange(); } } else if (source == currentView) { if (BookView.CURRENT_SEGMENT_PROPERTY.equals(propertyName)) { refreshAfterChange(); } else if (BookView.CURRENT_CHANNEL_PROPERTY.equals(propertyName)) { refreshAfterChange(); } } } @Override protected void onDialogClose() { super.onDialogClose(); setCurrentView(null); } @Override public boolean supportsModelClass(Class<?> clazz) { return BookView.class.isAssignableFrom(clazz); } }