diff --git a/src/View/BoundaryCondition/Edit/Table.py b/src/View/BoundaryCondition/Edit/Table.py index 363aa19f..d36f56f5 100644 --- a/src/View/BoundaryCondition/Edit/Table.py +++ b/src/View/BoundaryCondition/Edit/Table.py @@ -97,7 +97,9 @@ class TableModel(PamhyrTableModel): if self._opt_data == "time": value = timestamp_to_old_pamhyr_date(int(v)) else: - value = str(datetime.fromtimestamp(v)) + value = str( + self._start_date + timedelta(seconds=float(v)) + ) else: value = f"{v}" @@ -114,6 +116,10 @@ class TableModel(PamhyrTableModel): column = index.column() try: + if (self._data.header[column] == "time" + and self._opt_data == "date"): + value = self.date_to_elapsed_seconds(value) + row = self.get_true_data_row(row) self._undo.push( diff --git a/src/View/BoundaryCondition/Edit/Window.py b/src/View/BoundaryCondition/Edit/Window.py index 29281d6f..788b1203 100644 --- a/src/View/BoundaryCondition/Edit/Window.py +++ b/src/View/BoundaryCondition/Edit/Window.py @@ -173,7 +173,8 @@ class EditBoundaryConditionWindow(PamhyrWindow): }, data=self._data, undo=self._undo_stack, - opt_data=self._study.time_system + opt_data=self._study.time_system, + start_date=self._study.date ) table.setModel(self._table) diff --git a/src/View/BoundaryConditionsAdisTS/Edit/Table.py b/src/View/BoundaryConditionsAdisTS/Edit/Table.py index eeba2689..01179d92 100644 --- a/src/View/BoundaryConditionsAdisTS/Edit/Table.py +++ b/src/View/BoundaryConditionsAdisTS/Edit/Table.py @@ -87,7 +87,9 @@ class TableModel(PamhyrTableModel): if self._opt_data == "time": value = timestamp_to_old_pamhyr_date(int(v)) else: - value = str(datetime.fromtimestamp(v)) + value = str( + self._start_date + timedelta(seconds=float(v)) + ) else: value = f"{v}" @@ -104,6 +106,10 @@ class TableModel(PamhyrTableModel): column = index.column() try: + if (self._data.header[column] == "time" + and self._opt_data == "date"): + value = self.date_to_elapsed_seconds(value) + row = self.get_true_data_row(row) self._undo.push( diff --git a/src/View/BoundaryConditionsAdisTS/Edit/Window.py b/src/View/BoundaryConditionsAdisTS/Edit/Window.py index 9ae31212..09670489 100644 --- a/src/View/BoundaryConditionsAdisTS/Edit/Window.py +++ b/src/View/BoundaryConditionsAdisTS/Edit/Window.py @@ -120,7 +120,8 @@ class EditBoundaryConditionWindow(PamhyrWindow): }, data=self._data, undo=self._undo_stack, - opt_data=self._study.time_system + opt_data=self._study.time_system, + start_date=self._study.date ) table.setModel(self._table) diff --git a/src/View/BoundaryConditionsTemperature/Edit/Table.py b/src/View/BoundaryConditionsTemperature/Edit/Table.py index 812cc5ec..a29937b3 100644 --- a/src/View/BoundaryConditionsTemperature/Edit/Table.py +++ b/src/View/BoundaryConditionsTemperature/Edit/Table.py @@ -87,7 +87,9 @@ class TableModel(PamhyrTableModel): if self._opt_data == "time": value = timestamp_to_old_pamhyr_date(int(v)) else: - value = str(datetime.fromtimestamp(v)) + value = str( + self._start_date + timedelta(seconds=float(v)) + ) else: value = f"{v}" @@ -104,6 +106,10 @@ class TableModel(PamhyrTableModel): column = index.column() try: + if (self._data.header[column] == "time" + and self._opt_data == "date"): + value = self.date_to_elapsed_seconds(value) + row = self.get_true_data_row(row) self._undo.push( diff --git a/src/View/BoundaryConditionsTemperature/Edit/Window.py b/src/View/BoundaryConditionsTemperature/Edit/Window.py index 5d875d3e..0c7306a4 100644 --- a/src/View/BoundaryConditionsTemperature/Edit/Window.py +++ b/src/View/BoundaryConditionsTemperature/Edit/Window.py @@ -117,7 +117,8 @@ class EditBoundaryConditionWindow(PamhyrWindow): }, data=self._data, undo=self._undo_stack, - opt_data=self._study.time_system + opt_data=self._study.time_system, + start_date=self._study.date ) table.setModel(self._table) diff --git a/src/View/LateralContribution/Edit/Table.py b/src/View/LateralContribution/Edit/Table.py index 2c1e87ce..330d2092 100644 --- a/src/View/LateralContribution/Edit/Table.py +++ b/src/View/LateralContribution/Edit/Table.py @@ -76,7 +76,9 @@ class TableModel(PamhyrTableModel): if self._opt_data == "time": value = timestamp_to_old_pamhyr_date(int(v)) else: - value = str(datetime.fromtimestamp(v)) + value = str( + self._start_date + timedelta(seconds=float(v)) + ) else: value = f"{v}" @@ -93,6 +95,10 @@ class TableModel(PamhyrTableModel): column = index.column() try: + if (self._data.header[column] == "time" + and self._opt_data == "date"): + value = self.date_to_elapsed_seconds(value) + self._undo.push( SetDataCommand( self._data, row, column, value diff --git a/src/View/LateralContribution/Edit/Window.py b/src/View/LateralContribution/Edit/Window.py index 6b01d249..62329aef 100644 --- a/src/View/LateralContribution/Edit/Window.py +++ b/src/View/LateralContribution/Edit/Window.py @@ -109,7 +109,8 @@ class EditLateralContributionWindow(PamhyrWindow): data=self._data, undo=self._undo_stack, trad=self._trad, - opt_data=self._study.time_system + opt_data=self._study.time_system, + start_date=self._study.date ) table.setModel(self._table) diff --git a/src/View/LateralContributionsAdisTS/Edit/Table.py b/src/View/LateralContributionsAdisTS/Edit/Table.py index 5975c875..51d2540b 100644 --- a/src/View/LateralContributionsAdisTS/Edit/Table.py +++ b/src/View/LateralContributionsAdisTS/Edit/Table.py @@ -90,7 +90,9 @@ class TableModel(PamhyrTableModel): if self._opt_data == "time": value = timestamp_to_old_pamhyr_date_adists(int(v)) else: - value = str(datetime.fromtimestamp(v)) + value = str( + self._start_date + timedelta(seconds=float(v)) + ) else: value = f"{v}" @@ -107,6 +109,10 @@ class TableModel(PamhyrTableModel): column = index.column() try: + if (self._data.header[column] == "time" + and self._opt_data == "date"): + value = self.date_to_elapsed_seconds(value) + row = self.get_true_data_row(row) self._undo.push( diff --git a/src/View/LateralContributionsAdisTS/Edit/Window.py b/src/View/LateralContributionsAdisTS/Edit/Window.py index 174cc644..f828dc8c 100644 --- a/src/View/LateralContributionsAdisTS/Edit/Window.py +++ b/src/View/LateralContributionsAdisTS/Edit/Window.py @@ -124,7 +124,8 @@ class EditLateralContributionAdisTSWindow(PamhyrWindow): data=self._data, undo=self._undo_stack, trad=self._trad, - opt_data=self._study.time_system + opt_data=self._study.time_system, + start_date=self._study.date ) table.setModel(self._table) diff --git a/src/View/Tools/PamhyrTable.py b/src/View/Tools/PamhyrTable.py index dc8920fb..9748a13d 100644 --- a/src/View/Tools/PamhyrTable.py +++ b/src/View/Tools/PamhyrTable.py @@ -19,6 +19,8 @@ import logging import traceback +from datetime import datetime + from tools import trace, timer from Model.Except import NotImplementedMethodeError @@ -59,6 +61,14 @@ class PamhyrTextDelegate(QStyledItemDelegate): class PamhyrTableModel(QAbstractTableModel): + def date_to_elapsed_seconds(self, value): + """Convert an entered date to seconds since the study start date.""" + entered_date = value + if not isinstance(entered_date, datetime): + entered_date = datetime.fromisoformat(str(value).strip()) + + return (entered_date - self._start_date).total_seconds() + def _setup_delegates(self): if self._table_view is None: return @@ -85,7 +95,8 @@ class PamhyrTableModel(QAbstractTableModel): undo=None, opt_data=None, options=["rows_selection"], - parent=None): + parent=None, + start_date=None): super(PamhyrTableModel, self).__init__() self._table_view = table_view @@ -102,6 +113,7 @@ class PamhyrTableModel(QAbstractTableModel): self._options = options self._undo = undo self._lst = [] + self._start_date = start_date self._setup_delegates() self._setup_lst() diff --git a/src/View/WeatherParameters/Edit/Table.py b/src/View/WeatherParameters/Edit/Table.py index 996ef4b7..59191551 100644 --- a/src/View/WeatherParameters/Edit/Table.py +++ b/src/View/WeatherParameters/Edit/Table.py @@ -77,7 +77,9 @@ class TableModel(PamhyrTableModel): if self._opt_data == "time": value = timestamp_to_old_pamhyr_date(int(v)) else: - value = str(datetime.fromtimestamp(v)) + value = str( + self._start_date + timedelta(seconds=float(v)) + ) else: value = f"{v}" @@ -94,6 +96,10 @@ class TableModel(PamhyrTableModel): column = index.column() try: + if (self._data.header[column] == "time" + and self._opt_data == "date"): + value = self.date_to_elapsed_seconds(value) + self._undo.push( SetDataCommand( self._data, row, column, value diff --git a/src/View/WeatherParameters/Edit/Window.py b/src/View/WeatherParameters/Edit/Window.py index 2e2bb878..d20beaab 100644 --- a/src/View/WeatherParameters/Edit/Window.py +++ b/src/View/WeatherParameters/Edit/Window.py @@ -121,7 +121,8 @@ class EditWeatherParametersWindow(PamhyrWindow): data=self._data, undo=self._undo_stack, trad=self._trad, - opt_data=self._study.time_system + opt_data=self._study.time_system, + start_date=self._study.date ) table.setModel(self._table)