Commit 1dd189cb authored by Pierre-Antoine Rouby's avatar Pierre-Antoine Rouby
Browse files

Results: Implement results reload (for same solver) #16.

Showing with 137 additions and 7 deletions
+137 -7
...@@ -26,8 +26,13 @@ logger = logging.getLogger() ...@@ -26,8 +26,13 @@ logger = logging.getLogger()
class Results(object): class Results(object):
def __init__(self, study=None): def __init__(self, study=None, solver=None,
repertory="", name="0"):
self._study = study self._study = study
self._solver = solver
self._repertory = repertory
self._name = name
self._river = River(self._study) self._river = River(self._study)
self._meta_data = { self._meta_data = {
...@@ -53,3 +58,10 @@ class Results(object): ...@@ -53,3 +58,10 @@ class Results(object):
def get(self, key): def get(self, key):
return self._meta_data[key] return self._meta_data[key]
def reload(self):
return self._solver.results(
self._study,
self._repertory,
qlog=None,
)
...@@ -438,8 +438,12 @@ class Mage(AbstractSolver): ...@@ -438,8 +438,12 @@ class Mage(AbstractSolver):
@timer @timer
def results(self, study, repertory, qlog=None, name="0"): def results(self, study, repertory, qlog=None, name="0"):
results = Results(study=study) results = Results(
study=study,
solver=self,
repertory=repertory,
name=name,
)
self.read_bin(study, repertory, results, qlog, name=name) self.read_bin(study, repertory, results, qlog, name=name)
return results return results
......
...@@ -46,6 +46,11 @@ class PlotAC(PamhyrPlot): ...@@ -46,6 +46,11 @@ class PlotAC(PamhyrPlot):
def results(self): def results(self):
return self.data return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer @timer
def draw(self, highlight=None): def draw(self, highlight=None):
self.canvas.axes.cla() self.canvas.axes.cla()
......
...@@ -55,6 +55,11 @@ class PlotH(PamhyrPlot): ...@@ -55,6 +55,11 @@ class PlotH(PamhyrPlot):
def results(self): def results(self):
return self.data return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer @timer
def draw(self, highlight=None): def draw(self, highlight=None):
self.canvas.axes.cla() self.canvas.axes.cla()
......
...@@ -46,6 +46,11 @@ class PlotKPC(PamhyrPlot): ...@@ -46,6 +46,11 @@ class PlotKPC(PamhyrPlot):
def results(self): def results(self):
return self.data return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer @timer
def draw(self, highlight=None): def draw(self, highlight=None):
self.canvas.axes.cla() self.canvas.axes.cla()
......
...@@ -34,6 +34,16 @@ class PlotSedProfile(PamhyrPlot): ...@@ -34,6 +34,16 @@ class PlotSedProfile(PamhyrPlot):
self._current_reach_id = reach_id self._current_reach_id = reach_id
self._current_profile_id = profile_id self._current_profile_id = profile_id
@property
def results(self):
return self.data
@results.setter
def results(self, results):
self.data = results
self._results = results
self._current_timestamp = max(results.get("timestamps"))
def get_zsl(self, profile): def get_zsl(self, profile):
x = profile.geometry.get_station() x = profile.geometry.get_station()
z = profile.geometry.z() z = profile.geometry.z()
......
...@@ -34,6 +34,16 @@ class PlotSedReach(PamhyrPlot): ...@@ -34,6 +34,16 @@ class PlotSedReach(PamhyrPlot):
self._current_reach_id = reach_id self._current_reach_id = reach_id
self._current_profile_id = profile_id self._current_profile_id = profile_id
@property
def results(self):
return self.data
@results.setter
def results(self, results):
self.data = results
self._results = results
self._current_timestamp = max(results.get("timestamps"))
# DEPRECATED version of sediment layser display # DEPRECATED version of sediment layser display
# def _get_zsl(self, reach): # def _get_zsl(self, reach):
# kp = reach.geometry.get_kp() # kp = reach.geometry.get_kp()
......
...@@ -57,6 +57,11 @@ class PlotXY(PamhyrPlot): ...@@ -57,6 +57,11 @@ class PlotXY(PamhyrPlot):
def results(self): def results(self):
return self.data return self.data
@results.setter
def results(self, results):
self.data = results
self._current_timestamp = max(results.get("timestamps"))
@timer @timer
def draw(self, highlight=None): def draw(self, highlight=None):
self.canvas.axes.cla() self.canvas.axes.cla()
......
...@@ -75,8 +75,7 @@ class ResultsWindow(PamhyrWindow): ...@@ -75,8 +75,7 @@ class ResultsWindow(PamhyrWindow):
name = ( name = (
self._pamhyr_name + " - " self._pamhyr_name + " - "
+ study.name + " - " + study.name + " - "
+ self._solver.name + " - " + self._solver.name
+ self._results.date
) )
super(ResultsWindow, self).__init__( super(ResultsWindow, self).__init__(
...@@ -272,6 +271,16 @@ class ResultsWindow(PamhyrWindow): ...@@ -272,6 +271,16 @@ class ResultsWindow(PamhyrWindow):
self._status_label.setText(txt) self._status_label.setText(txt)
def setup_connections(self): def setup_connections(self):
# Action
actions = {
"action_reload": self._reload,
}
for action in actions:
self.find(QAction, action).triggered.connect(
actions[action]
)
fun = { fun = {
"reach": self._set_current_reach, "reach": self._set_current_reach,
"profile": self._set_current_profile, "profile": self._set_current_profile,
...@@ -384,12 +393,43 @@ class ResultsWindow(PamhyrWindow): ...@@ -384,12 +393,43 @@ class ResultsWindow(PamhyrWindow):
pid = self._slider_profile.value() pid = self._slider_profile.value()
self.update(profile_id=pid) self.update(profile_id=pid)
return
def _set_current_timestamp(self): def _set_current_timestamp(self):
timestamp = self._timestamps[self._slider_time.value()] timestamp = self._timestamps[self._slider_time.value()]
self.update(timestamp=timestamp) self.update(timestamp=timestamp)
def _reload_plots(self):
self.plot_xy.results = self._results
self.plot_ac.results = self._results
self.plot_kpc.results = self._results
self.plot_h.results = self._results
if self._study.river.has_sediment():
self.plot_sed_reach.results = self._results
self.plot_sed_profile.results = self._results
self.plot_xy.draw()
self.plot_ac.draw()
self.plot_kpc.draw()
self.plot_h.draw()
if self._study.river.has_sediment():
self.plot_sed_reach.draw()
self.plot_sed_profile.draw()
def _reload_slider(self):
self._slider_time = self.find(QSlider, f"horizontalSlider_time")
self._slider_time.setMaximum(len(self._timestamps) - 1)
self._slider_time.setValue(len(self._timestamps) - 1)
def _reload(self):
logger.debug("Reload results...")
self._results = self._results.reload()
self._timestamps = sorted(list(self._results.get("timestamps")))
self._reload_plots()
self._reload_slider()
def _copy(self): def _copy(self):
logger.info("TODO: copy") logger.info("TODO: copy")
......
...@@ -30,6 +30,10 @@ class APlot(object): ...@@ -30,6 +30,10 @@ class APlot(object):
def data(self): def data(self):
return self._data return self._data
@data.setter
def data(self, data):
self._data = data
def draw(self): def draw(self):
"""Draw plot """Draw plot
......
...@@ -140,6 +140,36 @@ ...@@ -140,6 +140,36 @@
</property> </property>
</widget> </widget>
<widget class="QStatusBar" name="statusbar"/> <widget class="QStatusBar" name="statusbar"/>
<widget class="QToolBar" name="toolBar">
<property name="windowTitle">
<string>toolBar</string>
</property>
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
<addaction name="action_add"/>
<addaction name="action_reload"/>
</widget>
<action name="action_add">
<property name="icon">
<iconset>
<normaloff>ressources/gtk-add.png</normaloff>ressources/gtk-add.png</iconset>
</property>
<property name="text">
<string>Add</string>
</property>
<property name="toolTip">
<string>Add custom visualization</string>
</property>
</action>
<action name="action_reload">
<property name="text">
<string>Reload</string>
</property>
</action>
</widget> </widget>
<resources/> <resources/>
<connections/> <connections/>
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment