comparison getan/states.py @ 410:7e27d2145007

Code-cleanup: improves style. * Fixes warnings by pep8 v1.5.7.
author Bernhard Reiter <bernhard@intevation.de>
date Wed, 03 May 2017 11:50:30 +0200
parents ee98d0b45967
children 0650c47e7a1c
comparison
equal deleted inserted replaced
408:8ba4576e5381 410:7e27d2145007
19 19
20 logger = logging.getLogger() 20 logger = logging.getLogger()
21 21
22 22
23 class State(object): 23 class State(object):
24
25 """ Represents a State of Getan 24 """ Represents a State of Getan
26 25
27 A State can be used to handle user input. The user input handling is done in 26 A State can be used to handle user input. The user input handling is done
28 three phases. First it is possible to filter keys that shouldn't be passed 27 in three phases. First it is possible to filter keys that shouldn't be
29 to a widget in input_filter. Afterwards it is possible to redirect a key to 28 passed to a widget in input_filter. Afterwards it is possible to redirect
30 a specific widget in keypress. In the third phase it is possible to act on 29 a key to a specific widget in keypress. In the third phase it is possible
31 user input which isn't handled by a widget yet. The corresponing method is 30 to act on user input which isn't handled by a widget yet. The corresponing
32 handle_input. 31 method is handle_input.
33 32
34 Normally handle_input should be used to act on user input and change a 33 Normally handle_input should be used to act on user input and change a
35 state. 34 state.
36 """ 35 """
37 36
524 self.controller, 523 self.controller,
525 self.view)) 524 self.view))
526 else: 525 else:
527 entry = self.view.item_in_focus() 526 entry = self.view.item_in_focus()
528 self.set_next_state(DeleteEntryState(self.projectlist_state, 527 self.set_next_state(DeleteEntryState(self.projectlist_state,
529 self, 528 self, self.controller,
530 self.controller, self.view, 529 self.view, [entry]))
531 [entry]))
532 return True 530 return True
533 531
534 if keys.get_entry_move() in key: 532 if keys.get_entry_move() in key:
535 if self.view.selection: 533 if self.view.selection:
536 self.set_next_state(MoveEntryState(self.projectlist_state, 534 self.set_next_state(MoveEntryState(self.projectlist_state,
547 545
548 if keys.get_entry_adjust() in key: 546 if keys.get_entry_adjust() in key:
549 entry = self.view.item_in_focus() 547 entry = self.view.item_in_focus()
550 if entry: 548 if entry:
551 self.set_next_state(AdjustEntryState(self.projectlist_state, 549 self.set_next_state(AdjustEntryState(self.projectlist_state,
552 self.controller, self.view, 550 self.controller,
553 entry)) 551 self.view, entry))
554 return True 552 return True
555 553
556 if keys.get_entry_length() in key: 554 if keys.get_entry_length() in key:
557 entry = self.view.item_in_focus() 555 entry = self.view.item_in_focus()
558 if entry: 556 if entry:
559 self.set_next_state(LengthEntryState(self.projectlist_state, 557 self.set_next_state(LengthEntryState(self.projectlist_state,
560 self.controller, self.view, 558 self.controller,
561 entry)) 559 self.view, entry))
562 return True 560 return True
563 561
564 return False 562 return False
565 563
566 564
616 self.proj_keys = "" 614 self.proj_keys = ""
617 self.project_view = controller.project_view 615 self.project_view = controller.project_view
618 616
619 def set_project_footer(self): 617 def set_project_footer(self):
620 self.project_view.set_footer_text("Selecting project from " 618 self.project_view.set_footer_text("Selecting project from "
621 "key: %s" % self.proj_keys, "running") 619 "key: %s" % self.proj_keys,
620 "running")
622 621
623 def reset_project_footer(self): 622 def reset_project_footer(self):
624 self.project_view.reset_footer() 623 self.project_view.reset_footer()
625 624
626 def check_key(self, key): 625 def check_key(self, key):
754 self.exit() 753 self.exit()
755 return True 754 return True
756 755
757 756
758 class EditEntryState(HandleUserInputState): 757 class EditEntryState(HandleUserInputState):
759
760 messages = { 758 messages = {
761 'edit_entry': _('Edit entry text: '), 759 'edit_entry': _('Edit entry text: '),
762 } 760 }
763 761
764 def __init__(self, state, controller, view, entry): 762 def __init__(self, state, controller, view, entry):
790 788
791 def set_focus(self): 789 def set_focus(self):
792 self.controller.view.set_focus("entries") 790 self.controller.view.set_focus("entries")
793 self.view.frame.set_focus("footer") 791 self.view.frame.set_focus("footer")
794 792
793
795 class AdjustEntryState(HandleUserInputState): 794 class AdjustEntryState(HandleUserInputState):
796
797 messages = { 795 messages = {
798 'adjust_entry': _('Adjust datetime of entry: '), 796 'adjust_entry': _('Adjust datetime of entry: '),
799 } 797 }
800 798
801 def __init__(self, state, controller, view, entry): 799 def __init__(self, state, controller, view, entry):
802 view.set_footer_text(self.msg('adjust_entry'), 800 view.set_footer_text(self.msg('adjust_entry'),
803 'question', True) 801 'question', True)
804 super(AdjustEntryState, self).__init__(controller, view, 802 super(AdjustEntryState, self).__init__(controller, view,
805 None, view.footer) 803 None, view.footer)
806 804
807 # we only care up to seconds (which is 19 characters). 805 # we only care up to seconds (which is 19 characters).
808 # for usability the default value has to match the strptime fmt below. 806 # for usability the default value has to match the strptime fmt below.
809 self.footer.set_edit_text(str(entry.start)[:19]) 807 self.footer.set_edit_text(str(entry.start)[:19])
810 self.footer.set_edit_pos(len(self.footer.edit_text)) 808 self.footer.set_edit_pos(len(self.footer.edit_text))
811 self.entry = entry 809 self.entry = entry
812 self.state = state 810 self.state = state
813 logger.debug("AdjustEntryState: Entry %s" % entry) 811 logger.debug("AdjustEntryState: Entry %s" % entry)
814 812
815 def enter(self): 813 def enter(self):
816 entry_datetime = self.footer.get_edit_text() # 814 entry_datetime = self.footer.get_edit_text()
817 815
818 entry = self.entry 816 entry = self.entry
819 duration = entry.get_duration() 817 duration = entry.get_duration()
820 818
821 try: 819 try:
822 entry.start = datetime.strptime(entry_datetime, "%Y-%m-%d %H:%M:%S") 820 entry.start = datetime.strptime(entry_datetime,
821 "%Y-%m-%d %H:%M:%S")
823 except: 822 except:
824 return self 823 return self
825 824
826 entry.end = entry.start + duration 825 entry.end = entry.start + duration
827 826
837 836
838 def set_focus(self): 837 def set_focus(self):
839 self.controller.view.set_focus("entries") 838 self.controller.view.set_focus("entries")
840 self.view.frame.set_focus("footer") 839 self.view.frame.set_focus("footer")
841 840
841
842 class LengthEntryState(HandleUserInputState): 842 class LengthEntryState(HandleUserInputState):
843
844 messages = { 843 messages = {
845 'adjust_length_entry': _('Adjust length of entry: '), 844 'adjust_length_entry': _('Adjust length of entry: '),
846 } 845 }
847 846
848 def __init__(self, state, controller, view, entry): 847 def __init__(self, state, controller, view, entry):
849 view.set_footer_text(self.msg('adjust_length_entry'), 848 view.set_footer_text(self.msg('adjust_length_entry'),
850 'question', True) 849 'question', True)
851 super(LengthEntryState, self).__init__(controller, view, 850 super(LengthEntryState, self).__init__(controller, view,
852 None, view.footer) 851 None, view.footer)
853 852
854 # format current duration as string that is also accepted by enter() 853 # format current duration as string that is also accepted by enter()
855 total_minutes = int(entry.get_duration().total_seconds()/60) 854 total_minutes = int(entry.get_duration().total_seconds()/60)
856 hours = int(total_minutes // 60) 855 hours = int(total_minutes // 60)
857 856
902 return True 901 return True
903 902
904 def set_focus(self): 903 def set_focus(self):
905 self.controller.view.set_focus("entries") 904 self.controller.view.set_focus("entries")
906 self.view.frame.set_focus("footer") 905 self.view.frame.set_focus("footer")
907
908 906
909 907
910 class ProjectEditKeyState(AlterProjectState): 908 class ProjectEditKeyState(AlterProjectState):
911 909
912 messages = { 910 messages = {
This site is hosted by Intevation GmbH (Datenschutzerklärung und Impressum | Privacy Policy and Imprint)