diff --git a/src/Model/Results/Results.py b/src/Model/Results/Results.py index 7c9ed54c9a1028d61a1ab0c22012cd69b26e3114..b8dff0ccd496da6e5d514fbb7db0269094fffb47 100644 --- a/src/Model/Results/Results.py +++ b/src/Model/Results/Results.py @@ -26,8 +26,13 @@ logger = logging.getLogger() class Results(object): - def __init__(self, study=None): + def __init__(self, study=None, solver=None, + repertory="", name="0"): self._study = study + self._solver = solver + self._repertory = repertory + self._name = name + self._river = River(self._study) self._meta_data = { @@ -53,3 +58,10 @@ class Results(object): def get(self, key): return self._meta_data[key] + + def reload(self): + return self._solver.results( + self._study, + self._repertory, + qlog=None, + ) diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py index f6346b66bf64a3b0d31cbb8ea77d59869a0632e1..f0df6e951fce5f29ce357aa328d7a2018bc8fd08 100644 --- a/src/Solver/Mage.py +++ b/src/Solver/Mage.py @@ -438,8 +438,12 @@ class Mage(AbstractSolver): @timer 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) return results diff --git a/src/View/Results/PlotAC.py b/src/View/Results/PlotAC.py index 075e879f9126aaf4ce33b2bed592649d05078fd0..345b5824afdf21a46703197dbefebbf205949a19 100644 --- a/src/View/Results/PlotAC.py +++ b/src/View/Results/PlotAC.py @@ -46,6 +46,11 @@ class PlotAC(PamhyrPlot): def results(self): return self.data + @results.setter + def results(self, results): + self.data = results + self._current_timestamp = max(results.get("timestamps")) + @timer def draw(self, highlight=None): self.canvas.axes.cla() diff --git a/src/View/Results/PlotH.py b/src/View/Results/PlotH.py index dd5a332b9cadf377f73cd5a25625735b760a4b06..f4f38e7c1d583b55eda4c9c7c7721c3376fef039 100644 --- a/src/View/Results/PlotH.py +++ b/src/View/Results/PlotH.py @@ -55,6 +55,11 @@ class PlotH(PamhyrPlot): def results(self): return self.data + @results.setter + def results(self, results): + self.data = results + self._current_timestamp = max(results.get("timestamps")) + @timer def draw(self, highlight=None): self.canvas.axes.cla() diff --git a/src/View/Results/PlotKPC.py b/src/View/Results/PlotKPC.py index 3dd789a2f1ef79707f3e61748b864ddd5d8812cf..827ca104e1905503afc4024cbb0ba411cd66f660 100644 --- a/src/View/Results/PlotKPC.py +++ b/src/View/Results/PlotKPC.py @@ -46,6 +46,11 @@ class PlotKPC(PamhyrPlot): def results(self): return self.data + @results.setter + def results(self, results): + self.data = results + self._current_timestamp = max(results.get("timestamps")) + @timer def draw(self, highlight=None): self.canvas.axes.cla() diff --git a/src/View/Results/PlotSedProfile.py b/src/View/Results/PlotSedProfile.py index d16fb0b87a039ec43b9235874e55866e784f1ff8..8d8f7b9137f3b915b439aab34e8d6293a11e54e5 100644 --- a/src/View/Results/PlotSedProfile.py +++ b/src/View/Results/PlotSedProfile.py @@ -34,6 +34,16 @@ class PlotSedProfile(PamhyrPlot): self._current_reach_id = reach_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): x = profile.geometry.get_station() z = profile.geometry.z() diff --git a/src/View/Results/PlotSedReach.py b/src/View/Results/PlotSedReach.py index 5cdc4ad7b0221dc4e4e8c51df93d02351e5e2783..e404f09cd5ac1059e1ae1446c6ec5d7ce4088227 100644 --- a/src/View/Results/PlotSedReach.py +++ b/src/View/Results/PlotSedReach.py @@ -34,6 +34,16 @@ class PlotSedReach(PamhyrPlot): self._current_reach_id = reach_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 # def _get_zsl(self, reach): # kp = reach.geometry.get_kp() diff --git a/src/View/Results/PlotXY.py b/src/View/Results/PlotXY.py index 5a513322f0f8b23bcb2863ac35fbbb12344aab01..78d4c66b47582f71d9da8ad21f7580a492a07cdd 100644 --- a/src/View/Results/PlotXY.py +++ b/src/View/Results/PlotXY.py @@ -57,6 +57,11 @@ class PlotXY(PamhyrPlot): def results(self): return self.data + @results.setter + def results(self, results): + self.data = results + self._current_timestamp = max(results.get("timestamps")) + @timer def draw(self, highlight=None): self.canvas.axes.cla() diff --git a/src/View/Results/Window.py b/src/View/Results/Window.py index 15167fd351a05463882ab26a8d54a76418c6b566..d076fd42b0760da6e4091355a6919ee9da29221f 100644 --- a/src/View/Results/Window.py +++ b/src/View/Results/Window.py @@ -75,8 +75,7 @@ class ResultsWindow(PamhyrWindow): name = ( self._pamhyr_name + " - " + study.name + " - " - + self._solver.name + " - " - + self._results.date + + self._solver.name ) super(ResultsWindow, self).__init__( @@ -272,6 +271,16 @@ class ResultsWindow(PamhyrWindow): self._status_label.setText(txt) def setup_connections(self): + # Action + actions = { + "action_reload": self._reload, + } + + for action in actions: + self.find(QAction, action).triggered.connect( + actions[action] + ) + fun = { "reach": self._set_current_reach, "profile": self._set_current_profile, @@ -384,12 +393,43 @@ class ResultsWindow(PamhyrWindow): pid = self._slider_profile.value() self.update(profile_id=pid) - return - def _set_current_timestamp(self): timestamp = self._timestamps[self._slider_time.value()] 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): logger.info("TODO: copy") diff --git a/src/View/Tools/Plot/APlot.py b/src/View/Tools/Plot/APlot.py index 3fe98fbc5bfa9561b3cac0ed53dfa6019c76774f..439ae2e9b03a741dc6407a5ec35e4e675de1b6f5 100644 --- a/src/View/Tools/Plot/APlot.py +++ b/src/View/Tools/Plot/APlot.py @@ -30,6 +30,10 @@ class APlot(object): def data(self): return self._data + @data.setter + def data(self, data): + self._data = data + def draw(self): """Draw plot diff --git a/src/View/ui/Results.ui b/src/View/ui/Results.ui index 5b7977242bbdeaec70fa2548687695f6ad45e888..bb8aaae66b4ca6adef85cb922eac1ec107e2471f 100644 --- a/src/View/ui/Results.ui +++ b/src/View/ui/Results.ui @@ -140,6 +140,36 @@ </property> </widget> <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> <resources/> <connections/>