diff --git a/src/Model/Study.py b/src/Model/Study.py
index 59a2ec9c..f1a50131 100644
--- a/src/Model/Study.py
+++ b/src/Model/Study.py
@@ -13,6 +13,9 @@ class Study(Serializable):
# Study general information
self.name = ""
self.description = ""
+ # Time system
+ self._time_system = "time"
+ self._date = datetime.fromtimestamp(0)
self.creation_date = datetime.now()
self.last_modification_date = datetime.now()
@@ -21,13 +24,35 @@ class Study(Serializable):
# Study data
self.river = None
+ @property
+ def time_system(self):
+ return self._time_system
+
+ def use_time(self):
+ self._time_system = "time"
+
+ def use_date(self, date:datetime):
+ self._time_system = "date"
+ self._date = date
+
+ @property
+ def date(self):
+ return self._date
+
+ @date.setter
+ def date(self, timestamp):
+ self._date = timestamp
+
@classmethod
def new(cls):
return cls()
@classmethod
- def new(cls, name, description):
+ def new(cls, name, description, date = None):
me = cls()
me.name = name
me.description = description
+ if date is not None:
+ me.use_date()
+ me.date = date
return me
diff --git a/src/View/ASubWindow.py b/src/View/ASubWindow.py
index 3e1a138f..a7b40c9f 100644
--- a/src/View/ASubWindow.py
+++ b/src/View/ASubWindow.py
@@ -4,6 +4,7 @@ import os
import csv
from io import StringIO
+from datetime import datetime
from tools import trace
@@ -16,9 +17,10 @@ from PyQt5.QtWidgets import (
QTimeEdit, QSpinBox, QTextEdit,
QRadioButton, QComboBox, QFileDialog,
QMessageBox, QTableView, QAction,
+ QDateTimeEdit,
)
from PyQt5.QtCore import (
- QTime,
+ QTime, QDateTime,
)
from PyQt5.uic import loadUi
@@ -350,6 +352,31 @@ class ASubWindowFeatures(object):
"""
return self.find(QComboBox, name).currentText()
+ def get_datetime_edit(self, name:str):
+ """Get datetime of datetime edit
+
+ Args:
+ name: The datetime edit component name
+
+ Returns:
+ The datetime
+ """
+ return self.find(QDateTimeEdit, name).dateTime().toPyDateTime()
+
+ def set_datetime_edit(self, name:str, date:datetime):
+ """Set datetime of a datetime edit
+
+ Args:
+ name: The datetime edit component name
+ date: The new datetime
+
+ Returns:
+ Nothing
+ """
+ qdate = QDateTime.fromString(date.isoformat(), "yyyy-MM-ddThh:mm:ss")
+ self.find(QDateTimeEdit, name).setDateTime(qdate)
+
+
# Top level interface
class ASubMainWindow(QMainWindow, ASubWindowFeatures, WindowToolKit):
diff --git a/src/View/Main/NewStudyWindow.py b/src/View/Main/NewStudyWindow.py
index 905815ea..6d313199 100644
--- a/src/View/Main/NewStudyWindow.py
+++ b/src/View/Main/NewStudyWindow.py
@@ -3,6 +3,11 @@
from Model.Study import Study
from View.ASubWindow import ASubWindow
+from PyQt5.QtWidgets import (
+ QRadioButton, QLabel, QDateTimeEdit,
+)
+
+
class NewStudyWindow(ASubWindow):
def __init__(self, study=None, title="New Study", parent=None):
super(NewStudyWindow, self).__init__(name=title, ui="NewStudy", parent=parent)
@@ -13,16 +18,50 @@ class NewStudyWindow(ASubWindow):
self.study = study
if not self.study is None:
- self.set_line_edit_text("lineEdit_name", study.name)
- self.set_text_edit_text("textEdit_description", study.description)
+ self.set_line_edit_text("lineEdit_name", self.study.name)
+ self.set_text_edit_text("textEdit_description", self.study.description)
+ self.set_datetime_edit("dateTimeEdit_date", self.study.date)
+ if self.study.time_system == "date":
+ self.set_radio_button("radioButton_date", True)
+ self.find(QLabel, "label_date").setEnabled(True)
+ self.find(QDateTimeEdit, "dateTimeEdit_date").setEnabled(True)
+
+ self.connection()
+
+ def connection(self):
+ time = self.find(QRadioButton, "radioButton_time")
+ date = self.find(QRadioButton, "radioButton_date")
+
+ time.toggled.connect(self.set_time)
+ date.toggled.connect(self.set_date)
+
+ def set_time(self):
+ if self.get_radio_button("radioButton_time"):
+ self.find(QLabel, "label_date").setEnabled(False)
+ self.find(QDateTimeEdit, "dateTimeEdit_date").setEnabled(False)
+
+ def set_date(self):
+ if self.get_radio_button("radioButton_date"):
+ self.find(QLabel, "label_date").setEnabled(True)
+ self.find(QDateTimeEdit, "dateTimeEdit_date").setEnabled(True)
+
def accept(self):
name = self.get_line_edit_text("lineEdit_name")
description = self.get_text_edit_text("textEdit_description")
if self.study is None:
- self.parent.set_model(Study.new(name, description))
+ study = Study.new(name, description)
+ if self.get_radio_button("radioButton_date"):
+ date = self.get_datetime_edit("dateTimeEdit_date")
+ study.use_date(date)
+ self.parent.set_model(study)
else:
self.study.name = name
self.study.description = description
+ if self.get_radio_button("radioButton_date"):
+ date = self.get_datetime_edit("dateTimeEdit_date")
+ self.study.use_date(date)
+ else:
+ self.study.use_time()
self.done(True)
diff --git a/src/View/ui/NewStudy.ui b/src/View/ui/NewStudy.ui
index 1805c10e..f95ff4a1 100644
--- a/src/View/ui/NewStudy.ui
+++ b/src/View/ui/NewStudy.ui
@@ -13,60 +13,104 @@
Dialog
-
+
-
-
+
+
+ Name
+
+
+
+ -
+
+
+ MyNewStudy
+
+
+
+ -
+
+
+ Time system
+
+
+
+ -
+
-
-
-
-
-
-
-
-
-
- Name
-
-
-
- -
-
-
- Description
-
-
-
- -
-
-
- MyNewStudy
-
-
-
- -
-
-
- false
-
-
- false
-
-
-
-
-
-
-
- -
-
-
- Qt::Horizontal
+
+
+ Time
-
- QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+ true
+ -
+
+
-
+
+
+ Date
+
+
+
+ -
+
+
+ Qt::Vertical
+
+
+
+ -
+
+
+ false
+
+
+ Staring date
+
+
+
+ -
+
+
+ false
+
+
+
+
+
+ -
+
+
+ Description
+
+
+
+ -
+
+
+ false
+
+
+ false
+
+
+
+ -
+
+
+ Qt::Horizontal
+
+
+ QDialogButtonBox::Cancel|QDialogButtonBox::Ok
+
+
+
diff --git a/src/tools.py b/src/tools.py
index d2f11917..be41a5b3 100644
--- a/src/tools.py
+++ b/src/tools.py
@@ -131,3 +131,25 @@ def flatten(lst):
return []
return reduce(list.__add__, lst)
+
+def old_pamhyr_date_to_timestamp(date:str):
+ v = date.split(":")
+ if len(v) != 4:
+ return 0
+
+ m = [
+ (24 * 60 * 60), # Day to sec
+ (60 * 60), # Hour to sec
+ 60, # Minute to sec
+ 1 # Sec
+ ]
+
+ ts = reduce(
+ lambda acc, x: acc + x,
+ map(
+ lambda v, m: int(v) * int(m),
+ v, m
+ )
+ )
+
+ return ts