Added possibility to update the main client GUI after changes made in the API

This commit is contained in:
Marcel Kronfeld 2010-09-02 13:35:05 +00:00
parent 09ef318b93
commit cf3e9aa7b9
3 changed files with 39 additions and 17 deletions

View File

@ -401,6 +401,15 @@ public class EvAClient implements RemoteStateListener, Serializable {
}
}
/**
* Refresh the parameter panels (if settings have been changed outside
* of the GUI which should be updated in the GUI.
*
*/
public void refreshMainPanels() {
frmMkr.refreshPanels();
}
/**
* The one and only main of the client program. Possible arguments:
* --autorun immediately starts the optimization (with parameters loaded from current

View File

@ -19,6 +19,7 @@ import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JTabbedPane;
@ -31,12 +32,17 @@ import eva2.server.go.problems.InterfaceAdditionalPopulationInformer;
*/
public class EvATabbedFrameMaker implements Serializable, PanelMaker, InterfaceNotifyOnInformers {
private static final long serialVersionUID = 2637376545826821423L;
private ArrayList<PanelMaker> guiContainer;
private ArrayList<PanelMaker> pmContainer = null;
private JExtToolBar m_BarStandard;
EvAModuleButtonPanelMaker butPanelMkr=null;
public EvATabbedFrameMaker(ArrayList<PanelMaker> GUIContainer) {
guiContainer = GUIContainer;
public EvATabbedFrameMaker() {
pmContainer = null;
}
public void addPanelMaker(PanelMaker pm) {
if (pmContainer==null) pmContainer = new ArrayList<PanelMaker>(2);
pmContainer.add(pm);
}
public JPanel makePanel() {
@ -70,13 +76,14 @@ public class EvATabbedFrameMaker implements Serializable, PanelMaker, InterfaceN
m_BarStandard = new JExtToolBar();
m_BarStandard.setFloatable(false);
for (int i=0;i<guiContainer.size();i++) {
PanelMaker element = guiContainer.get(i);
for (int i=0;i<pmContainer.size();i++) {
PanelMaker element = pmContainer.get(i);
JComponent panel = element.makePanel();
if (element instanceof EvAModuleButtonPanelMaker) {
m_BarStandard.add(element.makePanel());
m_BarStandard.add(panel);
butPanelMkr=(EvAModuleButtonPanelMaker)element;
} else if (element instanceof JParaPanel) {
m_MainPanel.addTab (((JParaPanel)element).getName(), element.makePanel());
m_MainPanel.addTab (((JParaPanel)element).getName(), panel);
}
}
m_SuperPanel.add(m_MainPanel, gbconst);
@ -97,11 +104,17 @@ public class EvATabbedFrameMaker implements Serializable, PanelMaker, InterfaceN
} else System.err.println("Error: button panel was null (EvATabbedFrameMaker)");
}
public void refreshPanels() {
for (PanelMaker jpp : pmContainer) {
if (jpp instanceof JParaPanel) ((JParaPanel)jpp).m_Editor.setValue(((JParaPanel)jpp).m_Editor.getValue());
}
}
public void setInformers(
List<InterfaceAdditionalPopulationInformer> informers) {
// if the informers have changed, update the GUI element which displays them
try {
JParaPanel statsPan = (JParaPanel) guiContainer.get(2);
JParaPanel statsPan = (JParaPanel) pmContainer.get(2);
if (statsPan.m_Editor!=null) {
statsPan.m_Editor.setValue(statsPan.m_Editor.getValue()); // really update the contents of the stats panel
// System.out.println("OOO setting informers to stats panel succeeded!");

View File

@ -81,20 +81,20 @@ public class GenericModuleAdapter extends AbstractModuleAdapter implements Seria
System.err.println("Error: Unable to create Frame when startet with noGUI option (GenericModuleAdapter)!");
return null;
}
ArrayList<PanelMaker> GUIContainer = new ArrayList<PanelMaker>();
EvATabbedFrameMaker frmMkr = new EvATabbedFrameMaker();
InterfaceStatisticsParameter Stat = ((StatisticsWithGUI)m_StatisticsModul).getStatisticsParameter();
EvAModuleButtonPanelMaker ButtonPanel = new EvAModuleButtonPanelMaker(m_RemoteThis,((Processor)m_Processor).isOptRunning());
ButtonPanel.setHelperFilename(helperFilename);
GUIContainer.add(ButtonPanel);
frmMkr.addPanelMaker(ButtonPanel);
InterfaceGOParameters Para = ((Processor)m_Processor).getGOParams();
if (TRACE) System.out.println("parameters are of type "+Para.getClass());
// TODO do we really need proxies here?
if (m_RMI && !Proxy.isProxyClass(Para.getClass())) GUIContainer.add(new JParaPanel( RMIProxyLocal.newInstance(Para), Para.getName()));
else GUIContainer.add(new JParaPanel(Para, Para.getName()));
if (m_RMI && !Proxy.isProxyClass(Stat.getClass())) GUIContainer.add(new JParaPanel( RMIProxyLocal.newInstance(Stat), Stat.getName()));
else GUIContainer.add(new JParaPanel(Stat, Stat.getName()));
if (m_RMI && !Proxy.isProxyClass(Para.getClass())) frmMkr.addPanelMaker(new JParaPanel( RMIProxyLocal.newInstance(Para), Para.getName()));
else frmMkr.addPanelMaker(new JParaPanel(Para, Para.getName()));
if (m_RMI && !Proxy.isProxyClass(Stat.getClass())) frmMkr.addPanelMaker(new JParaPanel( RMIProxyLocal.newInstance(Stat), Stat.getName()));
else frmMkr.addPanelMaker(new JParaPanel(Stat, Stat.getName()));
EvATabbedFrameMaker frmMkr = new EvATabbedFrameMaker(GUIContainer);
((Processor)m_Processor).getGOParams().addInformableInstance(frmMkr);
return frmMkr;
}