summaryrefslogtreecommitdiff
path: root/src/de/lmu/ifi/dbs/elki/gui/multistep
diff options
context:
space:
mode:
Diffstat (limited to 'src/de/lmu/ifi/dbs/elki/gui/multistep')
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/MultiStepGUI.java121
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/package-info.java2
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/panels/AlgorithmTabPanel.java38
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/panels/EvaluationTabPanel.java13
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/panels/InputTabPanel.java2
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/panels/LoggingTabPanel.java12
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/panels/OutputTabPanel.java13
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/panels/ParameterTabPanel.java36
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/panels/SavedSettingsTabPanel.java27
-rw-r--r--src/de/lmu/ifi/dbs/elki/gui/multistep/panels/package-info.java2
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