From bab1ce9e177998a33a5b21581e2f74496764849c Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Tue, 22 Aug 2023 11:03:50 +0200
Subject: [PATCH] Results: Display custom time in hydrograph.

---
 src/Solver/Mage.py                      |  2 +-
 src/View/Results/PlotH.py               | 52 +++++++++++++++++++++++--
 src/View/ui/Widgets/extendedTimeEdit.ui |  3 ++
 3 files changed, 52 insertions(+), 5 deletions(-)

diff --git a/src/Solver/Mage.py b/src/Solver/Mage.py
index 9bc9331e..a9273176 100644
--- a/src/Solver/Mage.py
+++ b/src/Solver/Mage.py
@@ -201,7 +201,7 @@ class Mage(AbstractSolver):
                 f.write(f"*{header[0]:>9}|{header[1]:>10}\n")
 
                 for d in bound.data:
-                    f.write(f"{d[0]:10.3f}{d[1]:10.3f}\n")
+                    f.write(f"{d[0]:10}{d[1]:10}\n")
 
         return files
 
diff --git a/src/View/Results/PlotH.py b/src/View/Results/PlotH.py
index dcc9f7f6..47c3f1bf 100644
--- a/src/View/Results/PlotH.py
+++ b/src/View/Results/PlotH.py
@@ -19,6 +19,7 @@
 import logging
 
 from functools import reduce
+from datetime import datetime
 
 from tools import timer, trace
 from View.Plot.APlot import APlot
@@ -34,14 +35,14 @@ logger = logging.getLogger()
 class PlotH(APlot):
     def __init__(self, canvas=None, results=None,
                  reach_id=0, profile_id=0,
-                 toolbar=None, display_current=True):
+                 toolbar=None):
         super(PlotH, self).__init__(
             canvas=canvas,
             data=results,
             toolbar=toolbar
         )
 
-        self.display_current = display_current
+        self._mode = "time"
 
         self._current_timestamp = max(results.get("timestamps"))
         self._current_reach_id = reach_id
@@ -99,6 +100,10 @@ class PlotH(APlot):
             )
             return
 
+        self.canvas.axes.set_ylim(
+            [min(min(y),0), max(y)]
+        )
+
         self._line = [
             self.canvas.axes.plot(
                 x, y, lw=1.,
@@ -107,8 +112,47 @@ class PlotH(APlot):
             )
         ]
 
-        self.canvas.axes.autoscale_view(True, True, True)
-        self.canvas.axes.autoscale()
+        # Custom time display
+        nb = len(x)
+        mod = int(nb / 5)
+        mod = mod if mod > 0 else nb
+
+        fx = list(
+            map(
+                lambda x: x[1],
+                filter(
+                    lambda x: x[0] % mod == 0,
+                    enumerate(x)
+                )
+            )
+        )
+
+        if self._mode == "time":
+            t0 = datetime.fromtimestamp(0)
+            xt = list(
+                map(
+                    lambda v: (
+                        str(
+                            datetime.fromtimestamp(v) - t0
+                        ).split(",")[0]\
+                        .replace("days", _translate("Results", "days"))\
+                        .replace("day", _translate("Results", "day"))
+                    ),
+                    fx
+                )
+            )
+        else:
+            xt = list(
+                map(
+                    lambda v: str(datetime.fromtimestamp(v).date()),
+                    fx
+                )
+            )
+
+        self.canvas.axes.set_xticks(ticks=fx, labels=xt, rotation=45)
+
+        # self.canvas.axes.autoscale_view(True, True, True)
+        # self.canvas.axes.autoscale()
         self.canvas.figure.tight_layout()
         self.canvas.figure.canvas.draw_idle()
         if self.toolbar is not None:
diff --git a/src/View/ui/Widgets/extendedTimeEdit.ui b/src/View/ui/Widgets/extendedTimeEdit.ui
index 493a96a1..eddf3892 100644
--- a/src/View/ui/Widgets/extendedTimeEdit.ui
+++ b/src/View/ui/Widgets/extendedTimeEdit.ui
@@ -28,6 +28,9 @@
      <property name="alignment">
       <set>Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter</set>
      </property>
+     <property name="maximum">
+      <number>999999</number>
+     </property>
     </widget>
    </item>
    <item>
-- 
GitLab