From 2111307965b01ef43200d5d4573b8ac4653b1fd5 Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Fri, 16 Feb 2024 10:16:38 +0100
Subject: [PATCH] LC: Update plot with PmahyrPlot new features.

---
 src/View/BoundaryCondition/Edit/Plot.py    |  5 +-
 src/View/LateralContribution/Edit/Plot.py  | 99 +++++++---------------
 src/View/LateralContribution/Edit/Table.py | 10 ++-
 src/View/LateralContribution/Window.py     |  3 +-
 src/tools.py                               |  2 +-
 5 files changed, 42 insertions(+), 77 deletions(-)

diff --git a/src/View/BoundaryCondition/Edit/Plot.py b/src/View/BoundaryCondition/Edit/Plot.py
index 09310bd6..5405a501 100644
--- a/src/View/BoundaryCondition/Edit/Plot.py
+++ b/src/View/BoundaryCondition/Edit/Plot.py
@@ -27,8 +27,6 @@ from PyQt5.QtCore import (
     QCoreApplication
 )
 
-from View.BoundaryCondition.Edit.translate import BCETranslate
-
 _translate = QCoreApplication.translate
 
 logger = logging.getLogger()
@@ -55,6 +53,8 @@ class Plot(PamhyrPlot):
         self._mode = mode
         self._isometric_axis = False
 
+        self._auto_relim_update = True
+        self._autoscale_update = True
 
     def custom_ticks(self):
         if self.data.header[0] != "time":
@@ -94,7 +94,6 @@ class Plot(PamhyrPlot):
             return
 
         self.update_data()
-        self.custom_ticks()
 
         self.update_idle()
 
diff --git a/src/View/LateralContribution/Edit/Plot.py b/src/View/LateralContribution/Edit/Plot.py
index e6caa995..5405a501 100644
--- a/src/View/LateralContribution/Edit/Plot.py
+++ b/src/View/LateralContribution/Edit/Plot.py
@@ -16,6 +16,8 @@
 
 # -*- coding: utf-8 -*-
 
+import logging
+
 from datetime import datetime
 
 from tools import timer, trace
@@ -25,14 +27,14 @@ from PyQt5.QtCore import (
     QCoreApplication
 )
 
-from View.LateralContribution.Edit.translate import *
-
 _translate = QCoreApplication.translate
 
+logger = logging.getLogger()
+
 
 class Plot(PamhyrPlot):
     def __init__(self, mode="time", data=None,
-                 canvas=None, trad=None, toolbar=None,
+                 trad=None, canvas=None, toolbar=None,
                  parent=None):
         super(Plot, self).__init__(
             canvas=canvas,
@@ -43,99 +45,60 @@ class Plot(PamhyrPlot):
         )
 
         self._table_headers = self._trad.get_dict("table_headers")
+
+        header = self.data.header
+        self.label_x = self._table_headers[header[0]]
+        self.label_y = self._table_headers[header[1]]
+
         self._mode = mode
+        self._isometric_axis = False
+
+        self._auto_relim_update = True
+        self._autoscale_update = True
 
     def custom_ticks(self):
         if self.data.header[0] != "time":
             return
 
-        t0 = datetime.fromtimestamp(0)
-        nb = len(self.data.data)
-        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(self.data.data)
-                )
-            )
-        )
-        xx = list(map(lambda v: v[0], fx))
-        if self._mode == "time":
-            xt = list(
-                map(
-                    lambda v: str(
-                        datetime.fromtimestamp(v[0]) - t0
-                    ).split(",")[0]
-                    .replace("days", _translate("LateralContribution", "days"))
-                    .replace("day", _translate("LateralContribution", "day")),
-                    fx
-                )
-            )
-        else:
-            xt = list(
-                map(
-                    lambda v: str(datetime.fromtimestamp(v[0]).date()),
-                    fx
-                )
-            )
-
-        self.canvas.axes.set_xticks(ticks=xx, labels=xt, rotation=45)
+        self.set_ticks_time_formater()
 
     @timer
     def draw(self):
-        self.canvas.axes.cla()
-        self.canvas.axes.grid(color='grey', linestyle='--', linewidth=0.5)
+        self.init_axes()
 
         if len(self.data) == 0:
             self._init = False
             return
 
+        self.draw_data()
+        self.custom_ticks()
+
+        self.idle()
+        self._init = True
+
+    def draw_data(self):
         # Plot data
         x = list(map(lambda v: v[0], self.data.data))
         y = list(map(lambda v: v[1], self.data.data))
+
         self._line, = self.canvas.axes.plot(
             x, y,
-            color='r', lw=1.,
-            markersize=5, marker='+',
-            picker=30,
+            color=self.color_plot,
+            **self.plot_default_kargs
         )
 
-        self.custom_ticks()
-
-        # Plot label
-        header = self.data.header
-        self.canvas.axes.set_xlabel(
-            self._table_headers[header[0]], color='black', fontsize=10
-        )
-        self.canvas.axes.set_ylabel(
-            self._table_headers[header[1]], color='black', fontsize=10
-        )
-
-        self.canvas.axes.autoscale_view(True, True, True)
-        self.canvas.figure.tight_layout()
-        self.canvas.figure.canvas.draw_idle()
-        # self.toolbar.update()
-
-        self._init = True
-
     @timer
     def update(self, ind=None):
         if not self._init:
             self.draw()
             return
 
+        self.update_data()
+
+        self.update_idle()
+
+    def update_data(self):
         x = list(map(lambda v: v[0], self.data.data))
         y = list(map(lambda v: v[1], self.data.data))
 
         self._line.set_data(x, y)
-
-        self.custom_ticks()
-
-        self.canvas.axes.relim()
-        self.canvas.axes.autoscale()
-        self.canvas.figure.tight_layout()
-        self.canvas.figure.canvas.draw_idle()
diff --git a/src/View/LateralContribution/Edit/Table.py b/src/View/LateralContribution/Edit/Table.py
index 1dd24ec4..c0ab3b44 100644
--- a/src/View/LateralContribution/Edit/Table.py
+++ b/src/View/LateralContribution/Edit/Table.py
@@ -20,7 +20,11 @@ import logging
 import traceback
 from datetime import date, time, datetime, timedelta
 
-from tools import trace, timer
+from tools import (
+    trace, timer,
+    timestamp_to_old_pamhyr_date,
+    old_pamhyr_date_to_timestamp
+)
 
 from View.Tools.PamhyrTable import PamhyrTableModel
 
@@ -70,9 +74,7 @@ class TableModel(PamhyrTableModel):
                 value = f"{v:.4f}"
             elif self._data.header[column] == "time":
                 if self._opt_data == "time":
-                    t0 = datetime.fromtimestamp(0)
-                    t = datetime.fromtimestamp(v)
-                    value = str(t - t0)
+                    value = timestamp_to_old_pamhyr_date(int(v))
                 else:
                     value = str(datetime.fromtimestamp(v))
             else:
diff --git a/src/View/LateralContribution/Window.py b/src/View/LateralContribution/Window.py
index aedb87ef..6edd2a42 100644
--- a/src/View/LateralContribution/Window.py
+++ b/src/View/LateralContribution/Window.py
@@ -199,7 +199,8 @@ class LateralContributionWindow(PamhyrWindow):
             data=data,
             toolbar=None,
         )
-        self.plot.draw(highlight=highlight)
+        self.plot.highlight = highlight
+        self.plot.draw()
 
     def add(self):
         tab = self.current_tab()
diff --git a/src/tools.py b/src/tools.py
index 841a4c0a..ee78528e 100644
--- a/src/tools.py
+++ b/src/tools.py
@@ -251,7 +251,7 @@ def old_pamhyr_date_to_timestamp(date: str):
     return ts
 
 
-def timestamp_to_old_pamhyr_date(time:int):
+def timestamp_to_old_pamhyr_date(time: int):
     t0 = datetime.fromtimestamp(0)
     t = datetime.fromtimestamp(time)
 
-- 
GitLab