diff options
author | Joris | 2020-05-09 13:37:08 +0200 |
---|---|---|
committer | Joris | 2020-05-09 13:37:08 +0200 |
commit | 3c946e02e59a05ea0b04aa6c95ce38d9d1f8ae30 (patch) | |
tree | a044b3d4a47f98722bec170d7519eaef49c10b36 /src/gui/tasks | |
parent | 6ed4e669ef7cb857c7b0ac774c41e8f9c7758217 (diff) |
Use duration format in form
Diffstat (limited to 'src/gui/tasks')
-rw-r--r-- | src/gui/tasks/duration.py | 31 | ||||
-rw-r--r-- | src/gui/tasks/form/state.py | 8 | ||||
-rw-r--r-- | src/gui/tasks/form/widget.py | 3 | ||||
-rw-r--r-- | src/gui/tasks/table/model.py | 11 |
4 files changed, 40 insertions, 13 deletions
diff --git a/src/gui/tasks/duration.py b/src/gui/tasks/duration.py new file mode 100644 index 0000000..d1b7106 --- /dev/null +++ b/src/gui/tasks/duration.py @@ -0,0 +1,31 @@ +import re +from typing import Optional +import math + +def format(minutes: int): + if minutes >= 60 * 24: + return '' + str(math.floor(minutes / 60 / 24)) + 'd' + elif minutes >= 60: + return '' + str(math.floor(minutes / 60)) + 'h' + elif minutes > 0: + return '' + str(minutes) + 'm' + else: + return '' + +def parse(duration: str) -> Optional[int]: + duration = duration.strip() + if duration: + result = re.match('^(\d+)([mhd])$', duration.strip()) + if result: + n = int(result.group(1)) + unit = result.group(2) + if unit == 'm': + return n + elif unit == 'h': + return n * 60 + elif unit == 'd': + return n * 60 * 24 + else: + return None + else: + return 0 diff --git a/src/gui/tasks/form/state.py b/src/gui/tasks/form/state.py index a47aec7..12ffe36 100644 --- a/src/gui/tasks/form/state.py +++ b/src/gui/tasks/form/state.py @@ -1,7 +1,9 @@ +import re from PyQt5 import QtCore from typing import NamedTuple, Optional from model.task import ValidTaskForm +import gui.tasks.duration class TaskFormEdition: def __init__(self, name, name_signal, duration, duration_signal, tag, tag_signal): @@ -15,13 +17,13 @@ class TaskFormEdition: def get(self) -> Optional[ValidTaskForm]: name = self._name.strip() - duration = self._duration.strip() + duration = gui.tasks.duration.parse(self._duration) tag = self._tag.strip() - if name and (duration == '' or duration.isdigit()): + if name and duration != None: return ValidTaskForm( name = name, - duration = 0 if duration == '' else int(duration), + duration = duration, tag = tag) else: return None diff --git a/src/gui/tasks/form/widget.py b/src/gui/tasks/form/widget.py index 8063d8d..6421747 100644 --- a/src/gui/tasks/form/widget.py +++ b/src/gui/tasks/form/widget.py @@ -6,6 +6,7 @@ from model.task import Task, ValidTaskForm import gui.icons import gui.tasks.form.state +import gui.tasks.duration def widget( parent: QtWidgets.QWidget, @@ -22,7 +23,7 @@ def widget( (name_labelled_input, name_input) = labelled_input(widget, 'Name', init_name) layout.addWidget(name_labelled_input) - init_duration = str(task.duration) if task is not None else '' + init_duration = gui.tasks.duration.format(task.duration) if task is not None else '' (duration_labelled_input, duration_input) = labelled_input(widget, 'Duration', init_duration) layout.addWidget(duration_labelled_input) diff --git a/src/gui/tasks/table/model.py b/src/gui/tasks/table/model.py index 6b8133d..cb25b22 100644 --- a/src/gui/tasks/table/model.py +++ b/src/gui/tasks/table/model.py @@ -6,6 +6,7 @@ import time import math import util.array import util.range +import gui.tasks.duration columns = 4 @@ -34,7 +35,7 @@ class TableModel(QtCore.QAbstractTableModel): elif index.column() == 1: return task.name elif index.column() == 2: - return pp_duration(task.duration) + return gui.tasks.duration.format(task.duration) elif index.column() == 3: return task.tag else: @@ -103,14 +104,6 @@ def age_since(timestamp): else: return '1m' -def pp_duration(minutes: int): - if minutes >= 60 * 24: - return '' + str(math.floor(minutes / 60 / 24)) + 'd' - elif minutes >= 60: - return '' + str(math.floor(minutes / 60)) + 'h' - else: - return '' + str(minutes) + 'm' - def sort_key(task: Task, row: int): if row == 0: return task.created_at |