/* ActiveTagPopupDialog.java created 2007-10-14 * */ package org.signalml.app.view.signal.popup; import static org.signalml.app.util.i18n.SvarogI18n._; import static org.signalml.app.util.i18n.SvarogI18n._R; import java.awt.Dimension; import java.awt.GridLayout; import java.awt.Window; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.swing.ButtonGroup; import javax.swing.ButtonModel; import javax.swing.JComponent; import javax.swing.JPanel; import javax.swing.JRadioButton; import javax.swing.border.CompoundBorder; import javax.swing.border.EmptyBorder; import org.signalml.app.document.TagDocument; import org.signalml.app.view.common.components.TitledCrossBorder; import org.signalml.app.view.signal.SignalView; import org.signalml.plugin.export.SignalMLException; import org.signalml.plugin.export.view.AbstractPopupDialog; /** ActiveTagPopupDialog * * * @author Michal Dobaczewski © 2007-2008 CC Otwarte Systemy Komputerowe Sp. z o.o. */ public class ActiveTagPopupDialog extends AbstractPopupDialog implements ActionListener { private static final long serialVersionUID = 1L; private SignalView signalView; private ButtonGroup buttonGroup; private JRadioButton[] radioButtons; private TagDocument[] tagDocuments; private Map<TagDocument,JRadioButton> tagToButtonMap; private Map<ButtonModel,TagDocument> buttonToTagMap; public ActiveTagPopupDialog(Window w, boolean isModal) { super(w, isModal); } public SignalView getSignalView() { return signalView; } public void setSignalView(SignalView signalView) { this.signalView = signalView; } @Override public JComponent createInterface() { buttonGroup = new ButtonGroup(); tagToButtonMap = new HashMap<TagDocument, JRadioButton>(); buttonToTagMap = new HashMap<ButtonModel, TagDocument>(); JPanel interfacePanel = new JPanel(); List<TagDocument> tags = signalView.getDocument().getTagDocuments(); int cnt = tags.size(); tagDocuments = new TagDocument[cnt]; tags.toArray(tagDocuments); interfacePanel.setLayout(new GridLayout(cnt, 1, 3, 3)); CompoundBorder cb = new CompoundBorder( new TitledCrossBorder(_("Choose active tag"), true), new EmptyBorder(3,3,3,3) ); interfacePanel.setBorder(cb); radioButtons = new JRadioButton[cnt]; JRadioButton button; for (int i=0; i<cnt; i++) { String message; if (tagDocuments[i].getBackingFile() == null) { message = _R("New tag {0}", tagDocuments[i].getName()); } else { message = tagDocuments[i].getName(); } button = new JRadioButton(message); buttonGroup.add(button); tagToButtonMap.put(tagDocuments[i], button); buttonToTagMap.put(button.getModel(), tagDocuments[i]); interfacePanel.add(button); button.addActionListener(this); radioButtons[i] = button; } Dimension size = interfacePanel.getPreferredSize(); if (size.width < 150) { size.width = 150; } interfacePanel.setPreferredSize(size); return interfacePanel; } @Override public void fillDialogFromModel(Object model) throws SignalMLException { TagDocument document = signalView.getDocument().getActiveTag(); if (signalView.isComparingTags()) { TagDocument[] comparedTags = signalView.getComparedTags(); for (int i=0; i<radioButtons.length; i++) { if (tagDocuments[i] == comparedTags[0] || tagDocuments[i] == comparedTags[1]) { radioButtons[i].setEnabled(true); } else { radioButtons[i].setEnabled(false); } } } else { for (int i=0; i<radioButtons.length; i++) { radioButtons[i].setEnabled(true); } } if (document != null) { JRadioButton button = tagToButtonMap.get(document); if (button != null) { buttonGroup.setSelected(button.getModel(), true); } } } @Override public void fillModelFromDialog(Object model) throws SignalMLException { ButtonModel buttonModel = buttonGroup.getSelection(); if (buttonModel != null) { TagDocument document = buttonToTagMap.get(buttonModel); if (document != null) { signalView.getDocument().setActiveTag(document); } } } @Override public boolean supportsModelClass(Class<?> clazz) { return (clazz == null); } @Override public boolean isControlPanelEquipped() { return false; } @Override public void actionPerformed(ActionEvent e) { getOkAction().actionPerformed(new ActionEvent(this, 0, "ok")); } }