Ejemplo n.º 1
0
    def wait_and_listen_for_keypress(self, observer: CursesMenuControllerObserver):
        self.highlighted_menu_option_index = self.data_source.initially_highlighted_menu_option_index(controller=self)
        menu_options_count = self.data_source.menu_options_count(controller=self)

        waiting_for_next_keypress = True
        while waiting_for_next_keypress:
            self.refresh(observer=observer)

            keypress_integer = self.keypress_listener()

            close_menu_key_set = self.key_bindings.close_menu_keys(controller=self)
            select_individual_menu_option_key_set = self.key_bindings.select_option_keys(controller=self)
            highlight_menu_option_key_set = self.key_bindings.highlight_keys(controller=self,
                                                                             menu_options_count=menu_options_count)
            next_menu_option_key_set = self.key_bindings.next_keys(controller=self)
            previous_menu_option_key_set = self.key_bindings.previous_keys(controller=self)

            if keypress_integer in close_menu_key_set:
                observer.did_signal_intent_to_close_menu(controller=self)
                break
            elif keypress_integer in select_individual_menu_option_key_set:
                should_dismiss_menu = observer.did_select_menu_option_at_index(controller=self,
                                                                               menu_option_index=self.highlighted_menu_option_index)
                if should_dismiss_menu:
                    break
            elif keypress_integer in highlight_menu_option_key_set:
                key_char = int(chr(keypress_integer))
                self.highlighted_menu_option_index = key_char
            elif keypress_integer in next_menu_option_key_set:
                self.highlighted_menu_option_index = (self.highlighted_menu_option_index + 1) % menu_options_count
            elif keypress_integer in previous_menu_option_key_set:
                self.highlighted_menu_option_index = (self.highlighted_menu_option_index - 1) % menu_options_count
Ejemplo n.º 2
0
    def refresh(self, observer: CursesMenuControllerObserver = None):
        super().refresh()

        if observer:
            observer.will_redisplay_updated_menu_options(controller=self)

        for menu_option_index in range(self.data_source.menu_options_count(controller=self)):
            menu_option_display_number = menu_option_index
            menu_option_display_number_string = "{}. ".format(menu_option_display_number)
            menu_option_title_text = self.data_source.text_for_menu_option_at_index(controller=self,
                                                                                    menu_option_index=menu_option_index)
            title = "{} ".format(menu_option_title_text)

            highlighted_color = self.highlighter.highlighted_menu_option_color_pair(controller=self)
            normal_color = self.highlighter.non_highlighted_menu_option_color_pair(controller=self)
            color = highlighted_color if menu_option_index == self.highlighted_menu_option_index else normal_color

            self._window.addstr(menu_option_index + self.text_inset_y, self.text_inset_x,
                                menu_option_display_number_string,
                                normal_color)
            self._window.addstr(menu_option_index + self.text_inset_y,
                                self.text_inset_x + len(menu_option_display_number_string), title, color)
        if observer:
            observer.did_redisplay_updated_menu_options(controller=self)