package net.sf.openrocket.gui.dialogs.preferences; import java.awt.LayoutManager; import java.io.File; import java.util.ArrayList; import java.util.List; import javax.swing.AbstractListModel; import javax.swing.ComboBoxModel; import javax.swing.JDialog; import javax.swing.JPanel; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import net.sf.openrocket.gui.util.SwingPreferences; import net.sf.openrocket.l10n.Translator; import net.sf.openrocket.startup.Application; import net.sf.openrocket.unit.Unit; import net.sf.openrocket.unit.UnitGroup; public abstract class PreferencesPanel extends JPanel { protected static final Logger log = LoggerFactory.getLogger(PreferencesDialog.class); protected final List<DefaultUnitSelector> unitSelectors = new ArrayList<DefaultUnitSelector>(); protected File defaultDirectory = null; protected static final Translator trans = Application.getTranslator(); protected final SwingPreferences preferences = (SwingPreferences) Application.getPreferences(); protected JDialog parentDialog; protected PreferencesPanel(JDialog parent, LayoutManager layout) { super(layout); this.parentDialog=parent; } protected PreferencesPanel(LayoutManager layout) { super(layout); } protected class DefaultUnitSelector extends AbstractListModel<Object> implements ComboBoxModel<Object> { private final UnitGroup group; public DefaultUnitSelector(UnitGroup group) { this.group = group; unitSelectors.add(this); } @Override public Object getSelectedItem() { return group.getDefaultUnit(); } @Override public void setSelectedItem(Object item) { if (item == null) { // Clear selection - huh? return; } if (!(item instanceof Unit)) { throw new IllegalArgumentException("Illegal argument " + item); } group.setDefaultUnit(group.getUnitIndex((Unit) item)); } @Override public Object getElementAt(int index) { return group.getUnit(index); } @Override public int getSize() { return group.getUnitCount(); } public void fireChange() { this.fireContentsChanged(this, 0, this.getSize()); } } protected class PrefChoiceSelector extends AbstractListModel<Object> implements ComboBoxModel<Object> { private final String preference; private final String[] descriptions; public PrefChoiceSelector(String preference, String... descriptions) { this.preference = preference; this.descriptions = descriptions; } @Override public Object getSelectedItem() { return descriptions[preferences.getChoice(preference, descriptions.length, 0)]; } @Override public void setSelectedItem(Object item) { if (item == null) { // Clear selection - huh? return; } if (!(item instanceof String)) { throw new IllegalArgumentException("Illegal argument " + item); } int index; for (index = 0; index < descriptions.length; index++) { if (((String) item).equalsIgnoreCase(descriptions[index])) break; } if (index >= descriptions.length) { throw new IllegalArgumentException("Illegal argument " + item); } preferences.putChoice(preference, index); } @Override public Object getElementAt(int index) { return descriptions[index]; } @Override public int getSize() { return descriptions.length; } } protected class PrefBooleanSelector extends AbstractListModel<Object> implements ComboBoxModel<Object> { private final String preference; private final String trueDesc, falseDesc; private final boolean def; public PrefBooleanSelector(String preference, String falseDescription, String trueDescription, boolean defaultState) { this.preference = preference; this.trueDesc = trueDescription; this.falseDesc = falseDescription; this.def = defaultState; } @Override public Object getSelectedItem() { if (preferences.getBoolean(preference, def)) { return trueDesc; } else { return falseDesc; } } @Override public void setSelectedItem(Object item) { if (item == null) { // Clear selection - huh? return; } if (!(item instanceof String)) { throw new IllegalArgumentException("Illegal argument " + item); } if (trueDesc.equals(item)) { preferences.putBoolean(preference, true); } else if (falseDesc.equals(item)) { preferences.putBoolean(preference, false); } else { throw new IllegalArgumentException("Illegal argument " + item); } } @Override public Object getElementAt(int index) { switch (index) { case 0: return def ? trueDesc : falseDesc; case 1: return def ? falseDesc : trueDesc; default: throw new IndexOutOfBoundsException("Boolean asked for index=" + index); } } @Override public int getSize() { return 2; } } }