mirror of https://gitlab.com/pamhyr/pamhyr2
Study: Add time / date mode to study.
parent
e987962510
commit
7b93f62a64
|
|
@ -13,6 +13,9 @@ class Study(Serializable):
|
||||||
# Study general information
|
# Study general information
|
||||||
self.name = ""
|
self.name = ""
|
||||||
self.description = ""
|
self.description = ""
|
||||||
|
# Time system
|
||||||
|
self._time_system = "time"
|
||||||
|
self._date = datetime.fromtimestamp(0)
|
||||||
|
|
||||||
self.creation_date = datetime.now()
|
self.creation_date = datetime.now()
|
||||||
self.last_modification_date = datetime.now()
|
self.last_modification_date = datetime.now()
|
||||||
|
|
@ -21,13 +24,35 @@ class Study(Serializable):
|
||||||
# Study data
|
# Study data
|
||||||
self.river = None
|
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
|
@classmethod
|
||||||
def new(cls):
|
def new(cls):
|
||||||
return cls()
|
return cls()
|
||||||
|
|
||||||
@classmethod
|
@classmethod
|
||||||
def new(cls, name, description):
|
def new(cls, name, description, date = None):
|
||||||
me = cls()
|
me = cls()
|
||||||
me.name = name
|
me.name = name
|
||||||
me.description = description
|
me.description = description
|
||||||
|
if date is not None:
|
||||||
|
me.use_date()
|
||||||
|
me.date = date
|
||||||
return me
|
return me
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@ import os
|
||||||
import csv
|
import csv
|
||||||
|
|
||||||
from io import StringIO
|
from io import StringIO
|
||||||
|
from datetime import datetime
|
||||||
|
|
||||||
from tools import trace
|
from tools import trace
|
||||||
|
|
||||||
|
|
@ -16,9 +17,10 @@ from PyQt5.QtWidgets import (
|
||||||
QTimeEdit, QSpinBox, QTextEdit,
|
QTimeEdit, QSpinBox, QTextEdit,
|
||||||
QRadioButton, QComboBox, QFileDialog,
|
QRadioButton, QComboBox, QFileDialog,
|
||||||
QMessageBox, QTableView, QAction,
|
QMessageBox, QTableView, QAction,
|
||||||
|
QDateTimeEdit,
|
||||||
)
|
)
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
QTime,
|
QTime, QDateTime,
|
||||||
)
|
)
|
||||||
from PyQt5.uic import loadUi
|
from PyQt5.uic import loadUi
|
||||||
|
|
||||||
|
|
@ -350,6 +352,31 @@ class ASubWindowFeatures(object):
|
||||||
"""
|
"""
|
||||||
return self.find(QComboBox, name).currentText()
|
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
|
# Top level interface
|
||||||
|
|
||||||
class ASubMainWindow(QMainWindow, ASubWindowFeatures, WindowToolKit):
|
class ASubMainWindow(QMainWindow, ASubWindowFeatures, WindowToolKit):
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,11 @@
|
||||||
from Model.Study import Study
|
from Model.Study import Study
|
||||||
from View.ASubWindow import ASubWindow
|
from View.ASubWindow import ASubWindow
|
||||||
|
|
||||||
|
from PyQt5.QtWidgets import (
|
||||||
|
QRadioButton, QLabel, QDateTimeEdit,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class NewStudyWindow(ASubWindow):
|
class NewStudyWindow(ASubWindow):
|
||||||
def __init__(self, study=None, title="New Study", parent=None):
|
def __init__(self, study=None, title="New Study", parent=None):
|
||||||
super(NewStudyWindow, self).__init__(name=title, ui="NewStudy", parent=parent)
|
super(NewStudyWindow, self).__init__(name=title, ui="NewStudy", parent=parent)
|
||||||
|
|
@ -13,16 +18,50 @@ class NewStudyWindow(ASubWindow):
|
||||||
self.study = study
|
self.study = study
|
||||||
|
|
||||||
if not self.study is None:
|
if not self.study is None:
|
||||||
self.set_line_edit_text("lineEdit_name", study.name)
|
self.set_line_edit_text("lineEdit_name", self.study.name)
|
||||||
self.set_text_edit_text("textEdit_description", study.description)
|
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):
|
def accept(self):
|
||||||
name = self.get_line_edit_text("lineEdit_name")
|
name = self.get_line_edit_text("lineEdit_name")
|
||||||
description = self.get_text_edit_text("textEdit_description")
|
description = self.get_text_edit_text("textEdit_description")
|
||||||
|
|
||||||
if self.study is None:
|
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:
|
else:
|
||||||
self.study.name = name
|
self.study.name = name
|
||||||
self.study.description = description
|
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)
|
self.done(True)
|
||||||
|
|
|
||||||
|
|
@ -13,60 +13,104 @@
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Dialog</string>
|
<string>Dialog</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout_2">
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
<widget class="QLabel" name="label">
|
||||||
|
<property name="text">
|
||||||
|
<string>Name</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" colspan="2">
|
||||||
|
<widget class="QLineEdit" name="lineEdit_name">
|
||||||
|
<property name="text">
|
||||||
|
<string>MyNewStudy</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_3">
|
||||||
|
<property name="text">
|
||||||
|
<string>Time system</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="2">
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<widget class="QRadioButton" name="radioButton_time">
|
||||||
<item>
|
<property name="text">
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<string>Time</string>
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QLabel" name="label">
|
|
||||||
<property name="text">
|
|
||||||
<string>Name</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Description</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<widget class="QLineEdit" name="lineEdit_name">
|
|
||||||
<property name="text">
|
|
||||||
<string>MyNewStudy</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="1">
|
|
||||||
<widget class="QTextEdit" name="textEdit_description">
|
|
||||||
<property name="autoFillBackground">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="tabChangesFocus">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
</property>
|
||||||
<property name="standardButtons">
|
<property name="checked">
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QRadioButton" name="radioButton_date">
|
||||||
|
<property name="text">
|
||||||
|
<string>Date</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="Line" name="line">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_date">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>Staring date</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDateTimeEdit" name="dateTimeEdit_date">
|
||||||
|
<property name="enabled">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
|
<item row="2" column="0" colspan="2">
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Description</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" column="2">
|
||||||
|
<widget class="QTextEdit" name="textEdit_description">
|
||||||
|
<property name="autoFillBackground">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
<property name="tabChangesFocus">
|
||||||
|
<bool>false</bool>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="3" column="0" colspan="3">
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|
|
||||||
22
src/tools.py
22
src/tools.py
|
|
@ -131,3 +131,25 @@ def flatten(lst):
|
||||||
return []
|
return []
|
||||||
|
|
||||||
return reduce(list.__add__, lst)
|
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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue