diff getan/states.py @ 400:527168c08ae4

Added possibility to move starting datetime of entries.
author Bernhard Reiter <bernhard@intevation.de>
date Mon, 12 Sep 2016 10:19:21 +0200
parents cf0406ed424a
children 150180e972d3
line wrap: on
line diff
--- a/getan/states.py	Thu Jan 28 10:08:32 2016 +0100
+++ b/getan/states.py	Mon Sep 12 10:19:21 2016 +0200
@@ -543,6 +543,14 @@
                                                    entry))
             return True
 
+        if keys.get_entry_adjust() in key:
+            entry = self.view.item_in_focus()
+            if entry:
+                self.set_next_state(AdjustEntryState(self.projectlist_state,
+                                                   self.controller, self.view,
+                                                   entry))
+            return True
+
         return False
 
 
@@ -774,6 +782,55 @@
         self.controller.view.set_focus("entries")
         self.view.frame.set_focus("footer")
 
+class AdjustEntryState(HandleUserInputState):
+
+    messages = {
+        'adjust_entry': _('Adjust datetime of entry: '),
+    }
+
+    def __init__(self, state, controller, view, entry):
+        view.set_footer_text(self.msg('adjust_entry'),
+                             'question', True)
+        super(AdjustEntryState, self).__init__(controller, view,
+                                             None, view.footer)
+
+        # we only care up to seconds (which is 19 characters).
+        # for usability the default value has to match the strptime fmt below.
+        self.footer.set_edit_text(str(entry.start)[:19])
+        self.footer.set_edit_pos(len(self.footer.edit_text))
+        self.entry = entry
+        self.state = state
+        logger.debug("AdjustEntryState: Entry %s" % entry)
+
+    def enter(self):
+        entry_datetime = self.footer.get_edit_text() #
+
+        entry = self.entry
+        duration = entry.get_duration()
+
+        try:
+            entry.start = datetime.strptime(entry_datetime, "%Y-%m-%d %H:%M:%S")
+        except:
+            return self
+
+        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")
+
+
+
 
 class ProjectEditKeyState(AlterProjectState):
 
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)