Mercurial > getan > getan
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 = { |