[Getan-commits] [PATCH 1 of 2] Adds ability to adjust the length of (saved) entries
Wald Commits
scm-commit at wald.intevation.org
Fri Feb 10 15:31:25 CET 2017
# HG changeset patch
# User Bernhard Reiter <bernhard at intevation.de>
# Date 1486735267 -3600
# Node ID 150180e972d34f4496faa4da9cae51f41536393a
# Parent c272982799b580b830573ff548b9d11e022d054b
Adds ability to adjust the length of (saved) entries.
diff -r c272982799b5 -r 150180e972d3 INTRODUCTION
--- a/INTRODUCTION Fri Feb 03 15:01:06 2017 +0100
+++ b/INTRODUCTION Fri Feb 10 15:01:07 2017 +0100
@@ -13,8 +13,9 @@
| F1 | Switch time display mode in ProjectList.
| F2 | Switch sorting of entries in ProjectList.
| d | Delete marked entries (in EntryList).
-| e | Edit the text of an entry.
-| a | Adjust the starting datetime of an entry.
+| e | Edit the text of a (marked) entry.
+| a | Adjust the starting datetime of a (marked) entry.
+| l | Adjust the length of a (marked) entry.
| m | Start the 'wizard' to move selected entries to another
project.
| esc | Exit the application. This is only possible if no project
diff -r c272982799b5 -r 150180e972d3 getan/config.py
--- a/getan/config.py Fri Feb 03 15:01:06 2017 +0100
+++ b/getan/config.py Fri Feb 10 15:01:07 2017 +0100
@@ -90,6 +90,7 @@
KEY_ENTRY_MOVE = "entry_move"
KEY_ENTRY_EDIT = "entry_edit"
KEY_ENTRY_ADJUST = "entry_adjust"
+ KEY_ENTRY_LENGTH = "entry_length"
KEY_ADD_TIME = "add_time"
KEY_SUBTRACT_TIME = "subtract_time"
KEY_PROJECT_PAUSE = "project_pause"
@@ -109,6 +110,7 @@
KEY_ENTRY_MOVE: "m",
KEY_ENTRY_EDIT: "e",
KEY_ENTRY_ADJUST: "a",
+ KEY_ENTRY_LENGTH: "l",
KEY_ADD_TIME: "+",
KEY_SUBTRACT_TIME: "-",
KEY_PROJECT_PAUSE: " ",
@@ -163,6 +165,9 @@
def get_entry_adjust(self):
return self.get_binding(self.KEY_ENTRY_ADJUST)
+ def get_entry_length(self):
+ return self.get_binding(self.KEY_ENTRY_LENGTH)
+
def get_entry_up(self):
return self.get_binding(self.KEY_ENTRY_UP)
diff -r c272982799b5 -r 150180e972d3 getan/states.py
--- a/getan/states.py Fri Feb 03 15:01:06 2017 +0100
+++ b/getan/states.py Fri Feb 10 15:01:07 2017 +0100
@@ -547,8 +547,16 @@
entry = self.view.item_in_focus()
if entry:
self.set_next_state(AdjustEntryState(self.projectlist_state,
- self.controller, self.view,
- entry))
+ self.controller, self.view,
+ entry))
+ return True
+
+ if keys.get_entry_length() in key:
+ entry = self.view.item_in_focus()
+ if entry:
+ self.set_next_state(LengthEntryState(self.projectlist_state,
+ self.controller, self.view,
+ entry))
return True
return False
@@ -829,6 +837,71 @@
self.controller.view.set_focus("entries")
self.view.frame.set_focus("footer")
+class LengthEntryState(HandleUserInputState):
+
+ messages = {
+ 'adjust_length_entry': _('Adjust length of entry: '),
+ }
+
+ def __init__(self, state, controller, view, entry):
+ view.set_footer_text(self.msg('adjust_length_entry'),
+ 'question', True)
+ super(LengthEntryState, self).__init__(controller, view,
+ None, view.footer)
+
+ # format current duration as string that is also accepted by enter()
+ total_minutes = int(entry.get_duration().total_seconds()/60)
+ hours = int(total_minutes // 60)
+
+ if hours > 0:
+ self.footer.set_edit_text(
+ "{:d}:{:d}".format(hours, int(total_minutes % 60)))
+ else:
+ self.footer.set_edit_text(int(minutes))
+
+ self.footer.set_edit_pos(len(self.footer.edit_text))
+ self.entry = entry
+ self.state = state
+ logger.debug("LengthEntryState: Entry %s" % entry)
+
+ def enter(self):
+ """Changed the length of an entry.
+
+ Works for total minutes or HH:MM.
+ """
+ entry_duration = self.footer.get_edit_text()
+
+ # avoid unexpected behavior if minus signs are given in the new length
+ if '-' in entry_duration:
+ return self
+
+ if ':' in entry_duration:
+ hours, minutes = entry_duration.split(':')
+ else:
+ hours = 0
+ minutes = entry_duration
+
+ try:
+ duration = timedelta(minutes=int(minutes), hours=int(hours))
+ except:
+ return self
+
+ entry = self.entry
+ entry.end = entry.start + duration
+
+ self.controller.update_entry(entry)
+ self.view.node_in_focus().update()
+ return self.exit()
+
+ def exit(self):
+ self.view.set_footer_text("", 'entry_footer', False)
+ self.set_next_state(DefaultEntryListState(self.state, self.controller,
+ self.view))
+ return True
+
+ def set_focus(self):
+ self.controller.view.set_focus("entries")
+ self.view.frame.set_focus("footer")
More information about the Getan-commits
mailing list