diff options
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/gui/multistep')
10 files changed, 144 insertions, 122 deletions
diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java index 820bc543..11a45d25 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.gui.multistep; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -32,12 +32,12 @@ import java.util.ArrayList; import javax.swing.ImageIcon; import javax.swing.JFrame; -import javax.swing.JPanel; import javax.swing.JScrollPane; import javax.swing.JTabbedPane; -import javax.swing.UIManager; import de.lmu.ifi.dbs.elki.KDDTask; +import de.lmu.ifi.dbs.elki.application.AbstractApplication; +import de.lmu.ifi.dbs.elki.gui.GUIUtil; import de.lmu.ifi.dbs.elki.gui.minigui.MiniGUI; import de.lmu.ifi.dbs.elki.gui.multistep.panels.AlgorithmTabPanel; import de.lmu.ifi.dbs.elki.gui.multistep.panels.EvaluationTabPanel; @@ -48,8 +48,11 @@ import de.lmu.ifi.dbs.elki.gui.multistep.panels.SavedSettingsTabPanel; import de.lmu.ifi.dbs.elki.gui.util.LogPanel; import de.lmu.ifi.dbs.elki.gui.util.SavedSettingsFile; import de.lmu.ifi.dbs.elki.logging.Logging; +import de.lmu.ifi.dbs.elki.utilities.Alias; +import de.lmu.ifi.dbs.elki.utilities.exceptions.UnableToComplyException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; +import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.SerializedParameterization; import de.lmu.ifi.dbs.elki.workflow.OutputStep; /** @@ -65,32 +68,51 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep; * @apiviz.composedOf OutputTabPanel * @apiviz.composedOf SavedSettingsTabPanel */ -public class MultiStepGUI extends JPanel { +@Alias({ "multi", "multigui", "multistepgui" }) +public class MultiStepGUI extends AbstractApplication { /** - * Serial version + * ELKI logger for the GUI */ - private static final long serialVersionUID = 1L; + private static final Logging LOG = Logging.getLogger(MultiStepGUI.class); /** - * ELKI logger for the GUI + * The frame */ - private static final Logging LOG = Logging.getLogger(MultiStepGUI.class); + JFrame frame; /** * Logging output area. */ protected LogPanel outputArea; + /** + * Input panel. + */ private InputTabPanel inputTab; + /** + * Algorithm panel. + */ private AlgorithmTabPanel algTab; + /** + * Evaluation panel. + */ private EvaluationTabPanel evalTab; + /** + * Output panel. + */ private OutputTabPanel outTab; + /** + * Logging panel. + */ private LoggingTabPanel logTab; + /** + * Saved settingspanel. + */ private SavedSettingsTabPanel setTab; /** @@ -98,7 +120,15 @@ public class MultiStepGUI extends JPanel { */ public MultiStepGUI() { super(); - this.setLayout(new GridBagLayout()); + frame = new JFrame("ELKI ExpGUI"); + frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); + try { + frame.setIconImage(new ImageIcon(KDDTask.class.getResource("elki-icon.png")).getImage()); + } catch (Exception e) { + // Ignore - icon not found is not fatal. + } + + frame.setLayout(new GridBagLayout()); { // setup text output area outputArea = new LogPanel(); @@ -114,7 +144,7 @@ public class MultiStepGUI extends JPanel { constraints.gridy = 1; constraints.weightx = 1; constraints.weighty = 1; - add(outputPane, constraints); + frame.add(outputPane, constraints); // reconfigure logging outputArea.becomeDefaultLogger(); @@ -130,24 +160,23 @@ public class MultiStepGUI extends JPanel { constraints.gridy = 0; constraints.weightx = 1; constraints.weighty = 1; - add(panels, constraints); + frame.add(panels, constraints); addPanels(panels); } + frame.pack(); } private void addPanels(JTabbedPane panels) { SavedSettingsFile settings = new SavedSettingsFile(MiniGUI.SAVED_SETTINGS_FILENAME); try { settings.load(); - } - catch(FileNotFoundException e) { + } catch (FileNotFoundException e) { LOG.warning("Error loading saved settings.", e); - } - catch(IOException e) { + } catch (IOException e) { LOG.exception(e); } - + inputTab = new InputTabPanel(); algTab = new AlgorithmTabPanel(inputTab); evalTab = new EvaluationTabPanel(inputTab, algTab); @@ -173,15 +202,15 @@ public class MultiStepGUI extends JPanel { // Clear errors after each step, so they don't consider themselves failed // because of earlier errors. logTab.setParameters(config); - //config.clearErrors(); + // config.clearErrors(); inputTab.setParameters(config); - //config.clearErrors(); + // config.clearErrors(); algTab.setParameters(config); - //config.clearErrors(); + // config.clearErrors(); evalTab.setParameters(config); - //config.clearErrors(); + // config.clearErrors(); outTab.setParameters(config); - //config.clearErrors(); + // config.clearErrors(); } /** @@ -198,36 +227,11 @@ public class MultiStepGUI extends JPanel { outTab.appendParameters(params); return params.serialize(); } - - /** - * Create the GUI and show it. For thread safety, this method should be - * invoked from the event-dispatching thread. - */ - protected static void createAndShowGUI() { - // Create and set up the window. - JFrame frame = new JFrame("ELKI ExpGUI"); - frame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); - try { - UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); - } - catch(Exception e) { - // ignore - } - try { - frame.setIconImage(new ImageIcon(KDDTask.class.getResource("elki-icon.png")).getImage()); - } - catch(Exception e) { - // Ignore - icon not found is not fatal. - } - - // Create and set up the content pane. - MultiStepGUI newContentPane = new MultiStepGUI(); - newContentPane.setOpaque(true); // content panes must be opaque - frame.setContentPane(newContentPane); - // Display the window. - frame.pack(); + @Override + public void run() throws UnableToComplyException { frame.setVisible(true); + outputArea.becomeDefaultLogger(); } /** @@ -235,13 +239,26 @@ public class MultiStepGUI extends JPanel { * * @param args command line parameters */ - public static void main(String[] args) { + public static void main(final String[] args) { + GUIUtil.logUncaughtExceptions(LOG); + GUIUtil.setLookAndFeel(); OutputStep.setDefaultHandlerVisualizer(); + javax.swing.SwingUtilities.invokeLater(new Runnable() { @Override public void run() { - createAndShowGUI(); + try { + final MultiStepGUI gui = new MultiStepGUI(); + gui.run(); + if (args != null && args.length > 0) { + gui.setParameters(new SerializedParameterization(args)); + } else { + gui.setParameters(new SerializedParameterization()); + } + } catch (UnableToComplyException e) { + LOG.exception(e); + } } }); } -}
\ No newline at end of file +} diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/package-info.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/package-info.java index 35a08689..3e8f11b2 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/package-info.java @@ -5,7 +5,7 @@ This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures -Copyright (C) 2012 +Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java index f6eb2955..d6622e8f 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -26,7 +26,6 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; import java.lang.ref.WeakReference; import de.lmu.ifi.dbs.elki.database.Database; -import de.lmu.ifi.dbs.elki.utilities.designpattern.Observer; import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep; @@ -36,7 +35,7 @@ import de.lmu.ifi.dbs.elki.workflow.AlgorithmStep; * * @author Erich Schubert */ -public class AlgorithmTabPanel extends ParameterTabPanel implements Observer<Object> { +public class AlgorithmTabPanel extends ParameterTabPanel { /** * Serial version. */ @@ -65,13 +64,13 @@ public class AlgorithmTabPanel extends ParameterTabPanel implements Observer<Obj public AlgorithmTabPanel(InputTabPanel input) { super(); this.input = input; - input.addObserver(this); + input.addPanelListener(this); } @Override protected synchronized void configureStep(Parameterization config) { algorithms = config.tryInstantiate(AlgorithmStep.class); - if(config.getErrors().size() > 0) { + if (config.getErrors().size() > 0) { algorithms = null; } basedOnDatabase = null; @@ -79,10 +78,10 @@ public class AlgorithmTabPanel extends ParameterTabPanel implements Observer<Obj @Override protected void executeStep() { - if(input.canRun() && !input.isComplete()) { + if (input.canRun() && !input.isComplete()) { input.execute(); } - if(!input.isComplete()) { + if (!input.isComplete()) { throw new AbortException("Input data not available."); } // Get the database and run the algorithms @@ -93,18 +92,17 @@ public class AlgorithmTabPanel extends ParameterTabPanel implements Observer<Obj @Override protected Status getStatus() { - if(algorithms == null) { + if (algorithms == null) { return Status.STATUS_UNCONFIGURED; } - if(!input.canRun()) { + if (!input.canRun()) { return Status.STATUS_CONFIGURED; } checkDependencies(); - if(input.isComplete() && basedOnDatabase != null) { - if(algorithms.getResult() == null) { + if (input.isComplete() && basedOnDatabase != null) { + if (algorithms.getResult() == null) { return Status.STATUS_FAILED; - } - else { + } else { return Status.STATUS_COMPLETE; } } @@ -117,15 +115,15 @@ public class AlgorithmTabPanel extends ParameterTabPanel implements Observer<Obj * @return Algorithm step */ public AlgorithmStep getAlgorithmStep() { - if(algorithms == null) { + if (algorithms == null) { throw new AbortException("Algorithms not configured."); } return algorithms; } @Override - public void update(Object o) { - if(o == input) { + public void panelUpdated(ParameterTabPanel o) { + if (o == input) { checkDependencies(); updateStatus(); } @@ -135,12 +133,12 @@ public class AlgorithmTabPanel extends ParameterTabPanel implements Observer<Obj * Test if the dependencies are still valid. */ private void checkDependencies() { - if(basedOnDatabase != null) { - if(!input.isComplete() || basedOnDatabase.get() != input.getInputStep().getDatabase()) { + if (basedOnDatabase != null) { + if (!input.isComplete() || basedOnDatabase.get() != input.getInputStep().getDatabase()) { // We've become invalidated, notify. basedOnDatabase = null; - observers.notifyObservers(this); + firePanelUpdated(); } } } -}
\ No newline at end of file +} diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java index 9a74e250..d8d4153c 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -27,7 +27,6 @@ import java.lang.ref.WeakReference; import de.lmu.ifi.dbs.elki.database.Database; import de.lmu.ifi.dbs.elki.result.HierarchicalResult; -import de.lmu.ifi.dbs.elki.utilities.designpattern.Observer; import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.workflow.EvaluationStep; @@ -37,7 +36,7 @@ import de.lmu.ifi.dbs.elki.workflow.EvaluationStep; * * @author Erich Schubert */ -public class EvaluationTabPanel extends ParameterTabPanel implements Observer<Object> { +public class EvaluationTabPanel extends ParameterTabPanel { /** * Serial version. */ @@ -72,8 +71,8 @@ public class EvaluationTabPanel extends ParameterTabPanel implements Observer<Ob super(); this.input = input; this.algs = algs; - input.addObserver(this); - algs.addObserver(this); + input.addPanelListener(this); + algs.addPanelListener(this); } @Override @@ -136,7 +135,7 @@ public class EvaluationTabPanel extends ParameterTabPanel implements Observer<Ob } @Override - public void update(Object o) { + public void panelUpdated(ParameterTabPanel o) { if (o == input || o == algs) { checkDependencies(); updateStatus(); @@ -151,7 +150,7 @@ public class EvaluationTabPanel extends ParameterTabPanel implements Observer<Ob if (!input.isComplete() || !algs.isComplete() || basedOnResult.get() != algs.getAlgorithmStep().getResult()) { // We've become invalidated, notify. basedOnResult = null; - observers.notifyObservers(this); + firePanelUpdated(); } } } diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java index 9d88e900..2f4d027b 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java index 5bf4c086..c4933673 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -23,9 +23,10 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; along with this program. If not, see <http://www.gnu.org/licenses/>. */ +import de.lmu.ifi.dbs.elki.application.AbstractApplication; import de.lmu.ifi.dbs.elki.logging.LoggingConfiguration; import de.lmu.ifi.dbs.elki.logging.LoggingUtil; -import de.lmu.ifi.dbs.elki.utilities.optionhandling.OptionID; +import de.lmu.ifi.dbs.elki.logging.Logging.Level; import de.lmu.ifi.dbs.elki.utilities.optionhandling.WrongParameterValueException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameters.Flag; @@ -51,13 +52,14 @@ public class LoggingTabPanel extends ParameterTabPanel { @Override protected synchronized void configureStep(Parameterization config) { - StringParameter debugParam = new StringParameter(OptionID.DEBUG); + StringParameter debugParam = new StringParameter(AbstractApplication.Parameterizer.DEBUG_ID); debugParam.setOptional(true); - Flag verboseFlag = new Flag(OptionID.VERBOSE_FLAG); + Flag verboseFlag = new Flag(AbstractApplication.Parameterizer.VERBOSE_ID); // Verbose mode is a lot simpler if (config.grab(verboseFlag) && verboseFlag.isTrue()) { - LoggingConfiguration.setVerbose(true); + LoggingConfiguration.setVerbose(Level.VERBOSE); } + // FIXME: add second level of verbosity! if (config.grab(debugParam)) { try { LoggingUtil.parseDebugParameter(debugParam); diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java index 48ddc344..12af18d3 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -26,7 +26,6 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; import java.lang.ref.WeakReference; import de.lmu.ifi.dbs.elki.result.HierarchicalResult; -import de.lmu.ifi.dbs.elki.utilities.designpattern.Observer; import de.lmu.ifi.dbs.elki.utilities.exceptions.AbortException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.Parameterization; import de.lmu.ifi.dbs.elki.workflow.OutputStep; @@ -36,7 +35,7 @@ import de.lmu.ifi.dbs.elki.workflow.OutputStep; * * @author Erich Schubert */ -public class OutputTabPanel extends ParameterTabPanel implements Observer<Object> { +public class OutputTabPanel extends ParameterTabPanel { /** * Serial version. */ @@ -71,8 +70,8 @@ public class OutputTabPanel extends ParameterTabPanel implements Observer<Object super(); this.input = input; this.evals = evals; - input.addObserver(this); - evals.addObserver(this); + input.addPanelListener(this); + evals.addPanelListener(this); } @Override @@ -121,7 +120,7 @@ public class OutputTabPanel extends ParameterTabPanel implements Observer<Object } @Override - public void update(Object o) { + public void panelUpdated(ParameterTabPanel o) { if (o == input || o == evals) { checkDependencies(); updateStatus(); @@ -136,7 +135,7 @@ public class OutputTabPanel extends ParameterTabPanel implements Observer<Object if (!input.isComplete() || !evals.isComplete() || basedOnResult.get() != evals.getEvaluationStep().getResult()) { // We've become invalidated, notify. basedOnResult = null; - observers.notifyObservers(this); + firePanelUpdated(); } } } diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java index cb72e6cd..667960a1 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java @@ -4,7 +4,7 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -40,8 +40,6 @@ import javax.swing.event.ChangeListener; import de.lmu.ifi.dbs.elki.gui.configurator.ConfiguratorPanel; import de.lmu.ifi.dbs.elki.logging.Logging; import de.lmu.ifi.dbs.elki.utilities.FormatUtil; -import de.lmu.ifi.dbs.elki.utilities.designpattern.Observer; -import de.lmu.ifi.dbs.elki.utilities.designpattern.Observers; import de.lmu.ifi.dbs.elki.utilities.optionhandling.ParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.UnspecifiedParameterException; import de.lmu.ifi.dbs.elki.utilities.optionhandling.parameterization.ListParameterization; @@ -131,11 +129,6 @@ public abstract class ParameterTabPanel extends JPanel implements ChangeListener private final JLabel statusText; /** - * Observers of this panel - */ - protected final Observers<ParameterTabPanel> observers = new Observers<ParameterTabPanel>(); - - /** * Input pane */ public ParameterTabPanel() { @@ -237,7 +230,7 @@ public abstract class ParameterTabPanel extends JPanel implements ChangeListener // Update status and notify observers updateStatus(); - observers.notifyObservers(this); + firePanelUpdated(); } /** @@ -291,7 +284,7 @@ public abstract class ParameterTabPanel extends JPanel implements ChangeListener LOG.exception(e); } updateStatus(); - observers.notifyObservers(this); + firePanelUpdated(); } /** @@ -347,12 +340,18 @@ public abstract class ParameterTabPanel extends JPanel implements ChangeListener runButton.setEnabled(canRun()); } - public void addObserver(Observer<? super ParameterTabPanel> o) { - observers.add(o); + protected void firePanelUpdated() { + for (ParameterTabPanel p : listenerList.getListeners(ParameterTabPanel.class)) { + p.panelUpdated(this); + } + } + + public void addPanelListener(ParameterTabPanel o) { + listenerList.add(ParameterTabPanel.class, o); } - public void removeObserver(Observer<? super ParameterTabPanel> o) { - observers.remove(o); + public void removePanelListener(ParameterTabPanel o) { + listenerList.remove(ParameterTabPanel.class, o); } @Override @@ -362,4 +361,13 @@ public abstract class ParameterTabPanel extends JPanel implements ChangeListener updateParameterTable(); } } + + /** + * Called when an observed panel changes. + * + * @param o Observed panel + */ + void panelUpdated(ParameterTabPanel o) { + // Do nothing by default. + }; } diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java index 845df73c..acebdc16 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java @@ -1,9 +1,10 @@ package de.lmu.ifi.dbs.elki.gui.multistep.panels; + /* This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures - Copyright (C) 2012 + Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team @@ -73,7 +74,7 @@ public class SavedSettingsTabPanel extends JPanel { /** * The combo box to use */ - JComboBox savedCombo; + JComboBox<String> savedCombo; /** * The UI to set parameters on. @@ -96,7 +97,7 @@ public class SavedSettingsTabPanel extends JPanel { // Dropdown for saved settings { savedSettingsModel = new SettingsComboboxModel(store); - savedCombo = new JComboBox(savedSettingsModel); + savedCombo = new JComboBox<>(savedSettingsModel); savedCombo.setEditable(true); savedCombo.setSelectedItem("[Saved Settings]"); GridBagConstraints constraints = new GridBagConstraints(); @@ -111,7 +112,7 @@ public class SavedSettingsTabPanel extends JPanel { { JPanel buttonPanel = new JPanel(); buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS)); - + // button to load settings JButton loadButton = new JButton("Load"); loadButton.setMnemonic(KeyEvent.VK_L); @@ -137,8 +138,7 @@ public class SavedSettingsTabPanel extends JPanel { store.put(key, gui.serializeParameters()); try { store.save(); - } - catch(IOException e1) { + } catch (IOException e1) { LOG.exception(e1); } savedSettingsModel.update(); @@ -155,8 +155,7 @@ public class SavedSettingsTabPanel extends JPanel { store.remove(key); try { store.save(); - } - catch(IOException e1) { + } catch (IOException e1) { LOG.exception(e1); } savedCombo.setSelectedItem("[Saved Settings]"); @@ -164,7 +163,7 @@ public class SavedSettingsTabPanel extends JPanel { } }); buttonPanel.add(removeButton); - + GridBagConstraints constraints = new GridBagConstraints(); constraints.fill = GridBagConstraints.HORIZONTAL; constraints.gridx = 0; @@ -182,7 +181,7 @@ public class SavedSettingsTabPanel extends JPanel { * * @apiviz.composedOf de.lmu.ifi.dbs.elki.gui.util.SavedSettingsFile */ - class SettingsComboboxModel extends AbstractListModel implements ComboBoxModel { + class SettingsComboboxModel extends AbstractListModel<String> implements ComboBoxModel<String> { /** * Serial version */ @@ -215,14 +214,14 @@ public class SavedSettingsTabPanel extends JPanel { @Override public void setSelectedItem(Object anItem) { - if(anItem instanceof String) { + if (anItem instanceof String) { selected = (String) anItem; } } @Override - public Object getElementAt(int index) { - return store.getElementAt(index).first; + public String getElementAt(int index) { + return store.getElementAt(store.size() - 1 - index).first; } @Override @@ -237,4 +236,4 @@ public class SavedSettingsTabPanel extends JPanel { fireContentsChanged(this, 0, getSize() + 1); } } -}
\ No newline at end of file +} diff --git a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/package-info.java b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/package-info.java index b9d4d90a..77d1779d 100644 --- a/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/package-info.java +++ b/src/de/lmu/ifi/dbs/elki/gui/multistep/panels/package-info.java @@ -5,7 +5,7 @@ This file is part of ELKI: Environment for Developing KDD-Applications Supported by Index-Structures -Copyright (C) 2012 +Copyright (C) 2013 Ludwig-Maximilians-Universität München Lehr- und Forschungseinheit für Datenbanksysteme ELKI Development Team |