Ejemplo n.º 1
0
    def __init__(self, util, show_authors, bgr=None, bounding_box=None):
        """ Initializer
        
        :param util: utility object
        :param show_authors: callback method
        :param bgr: menu background
        :param bounding_box: bounding box
        """
        self.factory = Factory(util)
        self.util = util
        self.config = util.config
        self.current_ch = INITIAL_CHAR

        m = self.factory.create_cyrillic_menu_button
        Menu.__init__(self,
                      util,
                      bgr,
                      bounding_box,
                      CHAR_ROWS,
                      CHAR_COLUMNS,
                      create_item_method=m)
        self.config = util.config
        self.show_authors = show_authors
        self.chars = self.load_menu()
        self.set_items(self.chars, 0, self.abc_action, False)
        i = self.get_index_by_name(self.current_ch)
        self.select_by_index(i)
Ejemplo n.º 2
0
    def __init__(self, title, util, listeners, voice_assistant):
        """ Initializer
        
        :param title: screen title
        :param util: utility object
        :param listener: screen menu event listener
        :param voice_assistant: voice assistant
        """
        Screen.__init__(self, util, None, PERCENT_TOP_HEIGHT, voice_assistant)
        self.screen_title.set_text(title)
        self.factory = Factory(util)
        self.abc_menu = LatinAbcMenu(util, listeners[KEY_CALLBACK],
                                     (0, 0, 0, 0), self.layout.CENTER)
        self.abc_menu.add_listener(listeners[KEY_CALLBACK])
        self.add_menu(self.abc_menu)

        layout = GridLayout(self.layout.BOTTOM)
        layout.set_pixel_constraints(1, 4, 1, 0)
        layout.current_constraints = 0

        self.navigator = LatinKeyboardNavigator(util, layout, listeners)
        self.add_navigator(self.navigator)

        self.link_borders()
        self.link_borders_custom()
Ejemplo n.º 3
0
    def __init__(self, util, bgr=None, bounding_box=None, font_size=None):
        """ Initializer

        :param util: utility object
        :param bgr: menu background
        :param bounding_box: bounding box
        """
        self.util = util
        self.factory = Factory(util)
        self.config = util.config
        self.cdutil = CdUtil(util)

        self.bb = bounding_box
        self.horizontal_layout = True
        self.rows = None
        self.cols = None
        items = self.get_menu_items()
        cell_bb = items[2]

        m = self.create_home_menu_button
        label_area = (cell_bb.h / 100) * (100 - ICON_AREA)
        font_size = int((label_area / 100) * FONT_HEIGHT)
        Menu.__init__(self,
                      util,
                      bgr,
                      bounding_box,
                      None,
                      None,
                      create_item_method=m,
                      font_size=font_size)
        self.set_modes(*items)
Ejemplo n.º 4
0
    def __init__(self, util, listeners, bgr=None, bounding_box=None):
        """ Initializer
        
        :param util: utility object
        :param listeners: menu listeners
        :param bgr: menu background
        :param bounding_box: bounding box
        """   
        Container.__init__(self, util)
        self.factory = Factory(util)
        self.name = "collection.navigator"
        self.content = self.bounding_box = bounding_box
        self.content_x = bounding_box.x
        self.content_y = bounding_box.y
        self.menu_buttons = []

        layout = GridLayout(bounding_box)
        layout.set_pixel_constraints(1, 3, 1, 0)
        layout.current_constraints = 0

        constr = layout.get_next_constraints()
        self.home_button = self.factory.create_button(KEY_HOME, KEY_HOME, constr, listeners[KEY_HOME], bgr, IMAGE_SIZE)
        self.add_component(self.home_button)
        self.menu_buttons.append(self.home_button)

        constr = layout.get_next_constraints()
        self.back_button = self.factory.create_button(KEY_BACK, KEY_BACK, constr, listeners[KEY_BACK], bgr, IMAGE_SIZE)
        self.add_component(self.back_button)
        self.menu_buttons.append(self.back_button)
        
        constr = layout.get_next_constraints()
        self.player_button = self.factory.create_button(KEY_PLAYER, KEY_PLAY_PAUSE, constr, listeners[KEY_PLAYER], bgr, IMAGE_SIZE)
        self.add_component(self.player_button)
        self.menu_buttons.append(self.player_button)
Ejemplo n.º 5
0
 def __init__(self, items, util, bgr, bounding_box, listener):
     """ Initializer
     
     :param util: utility object
     :param bounding_box: bounding box
     :param listeners: buttons listeners
     :param bgr: menu background        
     """
     self.factory = Factory(util)
     m = self.factory.create_cd_drive_menu_button
     Menu.__init__(self,
                   util,
                   bgr,
                   bounding_box,
                   None,
                   None,
                   create_item_method=m)
     self.name = "cd.drives.menu"
     self.content = bounding_box
     self.content_x = bounding_box.x
     self.content_y = bounding_box.y
     self.menu_buttons = []
     id = str(util.config[CD_PLAYBACK][CD_DRIVE_ID])
     if len(id) == 0:
         id = "0"
     self.select_by_index(int(id))
Ejemplo n.º 6
0
    def __init__(self, util, listeners, ch, f, go_author, parser, base_url,
                 voice_assistant, d):
        """ Initializer
        
        :param util: utility object
        :param listeners: screen listeners
        :param ch: selected character
        :param f: selected filter
        :param go_authors: callback
        :param parser: authors parser
        :param base_url: url
        :param d: dictionary with menu button flags 
        """
        self.util = util
        self.factory = Factory(util)
        self.base_url = base_url
        self.config = util.config

        self.parser = parser
        self.current_author_char = ch
        self.current_author_filter = f
        self.go_author = go_author
        self.author_cache = {}
        self.title = self.config[LABELS][KEY_AUTHORS]

        MenuScreen.__init__(self, util, listeners, MENU_ROWS, MENU_COLUMNS,
                            voice_assistant, d, self.turn_page)
        m = self.factory.create_book_author_menu_button

        self.authors_menu = MultiPageMenu(util, self.next_page,
                                          self.previous_page, self.set_title,
                                          self.reset_title, self.go_to_page, m,
                                          MENU_ROWS, MENU_COLUMNS, None,
                                          (0, 0, 0), self.menu_layout)
        self.set_menu(self.authors_menu)
Ejemplo n.º 7
0
    def __init__(self, util, bb, callback, screen):
        """ Initializer

        :param util: utility object
        :param bb: bounding box
        :param callback: function to call on Enter
        :param screen: parent screen
        """
        Container.__init__(self, util, bb, (0, 0, 0))
        self.content = None
        self.screen = screen
        self.bb = bb
        self.util = util
        self.config = util.config
        self.callback = callback
        self.move_listeners = []
        self.text_listeners = []
        self.buttons = {}
        self.factory = Factory(util)
        self.caps = False
        self.text = ""

        self.controls = ["Caps", "Del", "abc", "ABC", "123", "#+=", "Enter"]
        self.keyboards = {}
        self.current_keyboard_type = None
        self.create_keyboard(KEYBOARD_abc, LAYOUT_1, TRANSITION_MAP_1)
Ejemplo n.º 8
0
 def __init__(self, util, listeners, go_book_by_genre, genres, base_url,
              voice_assistant, d):
     self.util = util
     self.go_book_by_genre = go_book_by_genre
     self.config = util.config
     self.genres_list = genres
     self.base_url = base_url
     self.factory = Factory(util)
     MenuScreen.__init__(self, util, listeners, MENU_ROWS, MENU_COLUMNS,
                         voice_assistant, d, self.turn_page)
     self.total_pages = math.ceil(len(genres) / PAGE_SIZE)
     self.title = self.config[LABELS][KEY_CHOOSE_GENRE]
     m = self.create_book_genre_menu_button
     font_size = int(((self.menu_layout.h / MENU_ROWS) / 100) *
                     self.config[FONT_HEIGHT_PERCENT])
     self.genre_menu = MultiPageMenu(util,
                                     self.next_page,
                                     self.previous_page,
                                     self.set_title,
                                     self.reset_title,
                                     self.go_to_page,
                                     m,
                                     MENU_ROWS,
                                     MENU_COLUMNS,
                                     None, (0, 0, 0, 0),
                                     self.menu_layout,
                                     font_size=font_size)
     self.set_menu(self.genre_menu)
     self.navigator = BookNavigator(util, self.layout.BOTTOM, listeners,
                                    d[4])
     self.add_component(self.navigator)
     self.turn_page()
Ejemplo n.º 9
0
 def __init__(self,
              util,
              next_page,
              previous_page,
              set_title,
              reset_title,
              go_to_page,
              play_track,
              bgr=None,
              bounding_box=None):
     """ Initializer
     
     :param util: utility object
     :param next_page: next page callback
     :param previous_page: previous page callback
     :param set_title: set title callback
     :param reset_title: reset title callback
     :param go_to_page: go to page callback
     :param play_track: play track callback
     :param bgr: menu background
     :param bounding_box: bounding box
     """
     self.factory = Factory(util)
     self.util = util
     self.next_page = next_page
     self.previous_page = previous_page
     self.bb = bounding_box
     m = self.factory.create_track_menu_button
     MultiPageMenu.__init__(self, util, next_page, previous_page, set_title,
                            reset_title, go_to_page, m, TRACK_ROWS,
                            TRACK_COLUMNS, None, bgr, bounding_box)
     self.config = util.config
     self.play_track = play_track
     self.tracks = None
Ejemplo n.º 10
0
    def __init__(self, util, listeners, voice_assistant):
        """ Initializer

        :param util: utility object
        :param listeners: listeners
        :param voice_assistant: voice assistant
        """
        self.util = util
        self.config = util.config
        self.listeners = listeners
        self.factory = Factory(util)
        self.go_home = listeners[KEY_HOME]
        self.go_file_playback = listeners[KEY_PLAY_COLLECTION]

        dbutil = util.get_db_util()
        self.selector = Selector(dbutil)

        self.bounding_box = util.screen_rect
        layout = BorderLayout(self.bounding_box)
        layout.set_percent_constraints(PERCENT_TOP_HEIGHT,
                                       PERCENT_BOTTOM_HEIGHT, 0, 0)

        MenuScreen.__init__(self,
                            util,
                            listeners,
                            ROWS,
                            COLUMNS,
                            voice_assistant, [ROWS, COLUMNS],
                            self.turn_page,
                            page_in_title=False,
                            show_loading=False)

        m = self.factory.create_collection_menu_button
        font_size = int(((self.menu_layout.h / ROWS) / 100) * FONT_HEIGHT)
        self.collection_list_menu = MultiPageMenu(util,
                                                  self.next_page,
                                                  self.previous_page,
                                                  self.set_title,
                                                  self.reset_title,
                                                  self.go_to_page,
                                                  m,
                                                  ROWS,
                                                  COLUMNS,
                                                  None, (0, 0, 0, 0),
                                                  self.menu_layout,
                                                  align=ALIGN_LEFT,
                                                  font_size=font_size)
        self.set_menu(self.collection_list_menu)

        self.navigator = TopicDetailNavigator(self.util, self.layout.BOTTOM,
                                              listeners)
        self.add_component(self.navigator)
        self.current_item = None
        self.current_page_items = None
        self.first_item = None
        self.last_item = None
        self.collection_topic = None
        self.selection = None
        self.prev_page = 1
        self.animated_title = True
Ejemplo n.º 11
0
    def __init__(self, util, bgr=None, bounding_box=None):
        """ Initializer
        
        :param util: utility object
        :param bgr: menu background
        :param bounding_box: bounding box
        """
        self.util = util
        self.factory = Factory(util)

        m = self.create_language_menu_button
        Menu.__init__(self, util, bgr, bounding_box, None, None, create_item_method=m)
        self.config = self.util.config
        language = self.config[CURRENT][LANGUAGE] 
        
        languages = self.config[KEY_LANGUAGES]
        layout = self.get_layout(languages)        
        button_rect = layout.constraints[0]
        image_box = self.factory.get_icon_bounding_box(button_rect, ICON_LOCATION, ICON_AREA, ICON_SIZE, BUTTON_PADDING)
        self.languages = self.util.load_languages_menu(image_box)

        label_area = (button_rect.h / 100) * (100 - ICON_AREA)
        self.font_size = int((label_area / 100) * FONT_HEIGHT)

        self.set_items(self.languages, 0, self.change_language, False)
        self.current_language = self.languages[language]
        self.item_selected(self.current_language)
Ejemplo n.º 12
0
    def __init__(self, util, bounding_box, listeners):
        """ Initializer

        :param util: utility object
        :param bounding_box: bounding box
        :param listeners: buttons listeners
        """
        Container.__init__(self, util)
        self.factory = Factory(util)
        self.name = "collection.navigator"
        self.content = None
        self.content_x = bounding_box.x
        self.content_y = bounding_box.y
        self.listeners = listeners
        self.menu_buttons = []
        self.config = util.config
        self.use_web = self.config[USAGE][USE_WEB]
        self.go_abc = listeners[KEY_ABC]
        self.go_keyboard = listeners[KEY_KEYBOARD_KEY]
        self.keyboard_callback = listeners[KEY_CALLBACK]
        self.bgr = util.config[BACKGROUND][FOOTER_BGR_COLOR]
        self.arrow_layout = BorderLayout(bounding_box)
        self.arrow_layout.set_percent_constraints(0, 0, PERCENT_ARROW_WIDTH, PERCENT_ARROW_WIDTH)
        self.collection_topic = None
        self.update_observer = None
        self.redraw_observer = None
        self.menu_button = None
Ejemplo n.º 13
0
 def __init__(self, util, bgr=None, bb=None, rows=3, cols=3, create_item_method=None, menu_button_layout=None,
              font_size=None, align=ALIGN_CENTER, button_padding_x=None):
     """ Initializer
     
     :param util: utility object
     :param bgr: menu background
     :param bb: bounding box
     :param rows: number of rows in menu
     :param cols: number of columns in menu
     :param create_item_method: factory method for menu item creation
     :param menu_button_layout: menu buttons layout
     """        
     Container.__init__(self, util, bb, bgr)
     self.bb = bb
     self.rows = rows
     self.cols = cols
     self.util = util
     self.menu_button_layout = menu_button_layout
     self.start_listeners = []
     self.move_listeners = []
     self.menu_loaded_listeners = []
     self.font_size = font_size
     self.button_padding_x = button_padding_x
            
     self.buttons = {}
     self.factory = Factory(util)
     self.create_item_method = create_item_method
     self.selected_index = None
     self.align = align
Ejemplo n.º 14
0
 def __init__(self, title, util, listeners, voice_assistant):
     """ Initializer
     
     :param title: screen title
     :param util: utility object
     :param listener: screen menu event listener
     :param voice_assistant: voice assistant
     """
     Screen.__init__(self, util, None, PERCENT_TOP_HEIGHT, voice_assistant)
     self.screen_title.set_text(title)
     self.factory = Factory(util)
     self.abc_menu = LatinAbcMenu(util, listeners[KEY_CALLBACK], (0, 0, 0, 0), self.layout.CENTER)
     self.abc_menu.add_listener(listeners[KEY_CALLBACK]) 
     self.add_menu(self.abc_menu)
     
     layout = GridLayout(self.layout.BOTTOM)
     layout.set_pixel_constraints(1, 4, 1, 0)
     layout.current_constraints = 0
     d = util.config[BACKGROUND][FOOTER_BGR_COLOR]
     
     self.navigator = Container(util)
     self.buttons = []
     self.add_button(KEY_HOME, KEY_HOME, layout, listeners[KEY_HOME], d)
     self.add_button(KEY_BACK, KEY_BACK, layout, listeners[KEY_BACK], d)
     self.add_button(COLLECTION, KEY_PARENT, layout, listeners[COLLECTION], d)
     self.add_button(KEY_PLAYER, KEY_PLAY_PAUSE, layout, listeners[KEY_PLAYER], d)
     self.add_menu(self.navigator)
Ejemplo n.º 15
0
    def __init__(self, util, callback, bgr=None, bounding_box=None):
        """ Initializer
        
        :param util: utility object
        :param callback: callback method
        :param bgr: menu background
        :param bounding_box: bounding box
        """
        self.factory = Factory(util)
        self.util = util
        self.config = util.config
        self.current_ch = ABC[0]

        m = self.create_latin_abc_menu_button
        font_size = int(((bounding_box.h / ROWS) / 100) * FONT_HEIGHT)
        Menu.__init__(self,
                      util,
                      bgr,
                      bounding_box,
                      ROWS,
                      COLUMNS,
                      create_item_method=m,
                      font_size=font_size)
        self.config = util.config
        self.callback = callback
        self.chars = self.load_menu()
        self.set_items(self.chars, 0, self.abc_action, False)
        self.make_blank("foo")
        self.make_blank("bar")

        self.select_by_index(0)
Ejemplo n.º 16
0
    def __init__(self, util, bounding_box, listeners, bgr):
        """ Initializer
        
        :param util: utility object
        :param bounding_box: bounding box
        :param listeners: buttons listeners
        :param bgr: menu background        
        """
        Container.__init__(self, util)
        self.factory = Factory(util)
        self.name = "timer.navigator"
        self.content = bounding_box
        self.content_x = bounding_box.x
        self.content_y = bounding_box.y
        self.menu_buttons = []
        self.bgr = bgr

        self.layout = GridLayout(bounding_box)
        self.layout.set_pixel_constraints(1, 3, 1, 0)
        self.layout.current_constraints = 0
        self.image_size = 64

        self.home_button = self.add_button(KEY_HOME, KEY_HOME,
                                           listeners[KEY_HOME])
        self.sleep_now_button = self.add_button(SLEEP_NOW, KEY_MUTE,
                                                listeners[SLEEP_NOW])
        self.player_button = self.add_button(KEY_PLAYER, KEY_PLAY_PAUSE,
                                             listeners[KEY_PLAYER])
Ejemplo n.º 17
0
    def __init__(self, util, bgr=None, bounding_box=None):
        """ Initializer
        
        :param util: utility object
        :param bgr: menu background
        :param bounding_box: bounding box
        """
        self.factory = Factory(util)
        m = self.factory.create_language_menu_button
        self.util = util
        Menu.__init__(self,
                      util,
                      bgr,
                      bounding_box,
                      None,
                      None,
                      create_item_method=m)
        self.config = self.util.config
        language = self.config[CURRENT][LANGUAGE]

        languages = self.config[KEY_LANGUAGES]
        layout = self.get_layout(languages)
        button_rect = layout.constraints[0]
        self.languages = self.util.load_languages_menu(button_rect)
        self.set_items(self.languages, 0, self.change_language, False)
        self.current_language = self.languages[language]
        self.item_selected(self.current_language)
Ejemplo n.º 18
0
    def __init__(self, util, listeners, voice_assistant):
        """ Initializer

        :param util: utility object
        :param listeners: listeners
        :param voice_assistant: voice assistant
        """
        self.util = util
        self.config = util.config
        self.listeners = listeners
        self.listeners[KEY_LIST] = self.set_list
        self.factory = Factory(util)
        dbutil = util.get_db_util()
        self.selector = Selector(dbutil)

        self.bounding_box = util.screen_rect
        layout = BorderLayout(self.bounding_box)
        layout.set_percent_constraints(PERCENT_TOP_HEIGHT,
                                       PERCENT_BOTTOM_HEIGHT, 0, 0)

        MenuScreen.__init__(self,
                            util,
                            listeners,
                            ROWS,
                            COLUMNS,
                            voice_assistant, [ROWS, COLUMNS],
                            self.turn_page,
                            page_in_title=False,
                            show_loading=False)

        m = self.factory.create_collection_menu_button
        self.topic_menu = MultiPageMenu(util,
                                        self.next_page,
                                        self.previous_page,
                                        self.set_title,
                                        self.reset_title,
                                        self.go_to_page,
                                        m,
                                        ROWS,
                                        COLUMNS,
                                        None, (0, 0, 0),
                                        self.menu_layout,
                                        align=ALIGN_LEFT)
        self.set_menu(self.topic_menu)

        self.navigator = TopicNavigator(self.util, self.layout.BOTTOM,
                                        listeners)
        self.components.append(self.navigator)

        self.current_topic = None
        self.current_item = None
        self.current_page_items = None
        self.first_item = None
        self.last_item = None
        self.collection_topic = None
        self.previous_page = 1
        self.search_string = None
        self.source = None
        self.mode = KEY_LIST
        self.animated_title = True
Ejemplo n.º 19
0
    def __init__(self, util, bounding_box, listeners, show_visibility=True):
        """ Initializer

        :param util: utility object
        :param bounding_box: bounding box
        :param listeners: buttons listeners
        """
        Container.__init__(self, util)
        self.factory = Factory(util)
        self.name = "keyboard.navigator"
        self.content = bounding_box
        self.content_x = bounding_box.x
        self.content_y = bounding_box.y
        self.menu_buttons = []

        if show_visibility:
            n = 5
        else:
            n = 4
        self.layout = GridLayout(bounding_box)
        self.layout.set_pixel_constraints(1, n, 1, 0)
        self.layout.current_constraints = 0
        self.bgr = util.config[COLORS][COLOR_DARK_LIGHT]

        self.add_button(KEY_HOME, KEY_HOME, listeners[KEY_HOME])
        self.add_button(KEY_BACK, KEY_BACK, listeners[KEY_BACK])
        self.add_button(KEY_DELETE, KEY_PARENT, listeners[KEY_DELETE])
        if n == 5:
            self.add_button(KEY_VIEW, KEY_SETUP, listeners[KEY_VIEW])
        self.add_button(KEY_PLAYER, KEY_PLAY_PAUSE, listeners[KEY_PLAYER])
Ejemplo n.º 20
0
 def __init__(self, util, bounding_box, listener):
     """ Initializer
     
     :param util: utility object
     :param bounding_box: bounding box
     :param listeners: buttons listeners
     """
     self.factory = Factory(util)
     m = self.create_cd_drive_menu_button
     label_area = (bounding_box.h / 100) * (100 - ICON_AREA)
     font_size = int((label_area / 100) * FONT_HEIGHT)
     r = Rect(bounding_box.x, bounding_box.y, bounding_box.w,
              bounding_box.h + 1)
     Menu.__init__(self,
                   util,
                   None,
                   r,
                   None,
                   None,
                   create_item_method=m,
                   font_size=font_size)
     self.name = "cd.drives.menu"
     self.content = bounding_box
     self.content_x = bounding_box.x
     self.content_y = bounding_box.y
     self.menu_buttons = []
     id = str(util.config[CD_PLAYBACK][CD_DRIVE_ID])
     if len(id) == 0:
         id = "0"
     self.select_by_index(int(id))
Ejemplo n.º 21
0
    def __init__(self, util, listeners, voice_assistant):
        """ Initializer
        
        :param util: utility object
        :param listeners: listeners
        :param voice_assistant: voice assistant
        """
        self.util = util
        self.config = util.config
        self.listeners = listeners
        self.factory = Factory(util)

        self.podcasts_util = util.get_podcasts_util()
        self.bounding_box = util.screen_rect
        layout = BorderLayout(self.bounding_box)
        layout.set_percent_constraints(PERCENT_TOP_HEIGHT,
                                       PERCENT_BOTTOM_HEIGHT, 0, 0)

        d = [MENU_ROWS_PODCASTS, MENU_COLUMNS_PODCASTS]
        MenuScreen.__init__(self,
                            util,
                            listeners,
                            MENU_ROWS_PODCASTS,
                            MENU_COLUMNS_PODCASTS,
                            voice_assistant,
                            d,
                            self.turn_page,
                            page_in_title=False,
                            show_loading=True)
        self.title = self.config[LABELS][PODCASTS]

        m = self.factory.create_podcast_menu_button
        self.podcasts_menu = MultiPageMenu(util,
                                           self.next_page,
                                           self.previous_page,
                                           self.set_title,
                                           self.reset_title,
                                           self.go_to_page,
                                           m,
                                           MENU_ROWS_PODCASTS,
                                           MENU_COLUMNS_PODCASTS,
                                           None, (0, 0, 0),
                                           self.menu_layout,
                                           align=ALIGN_CENTER)
        self.set_menu(self.podcasts_menu)

        self.navigator = PodcastNavigator(
            self.util, self.layout.BOTTOM, listeners,
            self.config[COLORS][COLOR_DARK_LIGHT], PAGE_SIZE_PODCASTS + 1)
        self.components.append(self.navigator)

        url = self.config[PODCASTS][PODCAST_URL]
        if url and len(url) > 0:
            self.current_page = self.podcasts_util.get_podcast_page(
                url, PAGE_SIZE_PODCASTS)
        else:
            self.current_page = 1

        self.animated_title = True
Ejemplo n.º 22
0
    def __init__(self, util, bounding_box, listeners, bgr, pages):
        """ Initializer
        
        :param util: utility object
        :param bounding_box: bounding box
        :param listeners: buttons listeners
        :param bgr: menu background
        :param pages: number of episodes menu pages       
        """ 
        Container.__init__(self, util)
        self.factory = Factory(util)
        self.name = "podcasts.navigator"
        self.content = bounding_box
        self.content_x = bounding_box.x
        self.content_y = bounding_box.y
        self.menu_buttons = []

        arrow_layout = BorderLayout(bounding_box)
        arrow_layout.set_percent_constraints(0, 0, PERCENT_ARROW_WIDTH, PERCENT_ARROW_WIDTH)
        
        if pages > 1:
            constr = arrow_layout.LEFT
            self.left_button = self.factory.create_page_down_button(constr, "0", 40, 100)
            self.left_button.add_release_listener(listeners[GO_LEFT_PAGE])
            self.add_component(self.left_button)
            self.menu_buttons.append(self.left_button)
            
            constr = arrow_layout.RIGHT
            self.right_button = self.factory.create_page_up_button(constr, "0", 40, 100)
            self.right_button.add_release_listener(listeners[GO_RIGHT_PAGE])
            self.add_component(self.right_button)
            self.menu_buttons.append(self.right_button)
            layout = GridLayout(arrow_layout.CENTER)
        else:
            layout = GridLayout(bounding_box)
            
        layout.set_pixel_constraints(1, 4, 1, 0)        
        layout.current_constraints = 0
        image_size = 64 
        
        constr = layout.get_next_constraints()
        self.home_button = self.factory.create_button(KEY_HOME, KEY_HOME, constr, listeners[KEY_HOME], bgr, image_size_percent=image_size)
        self.add_component(self.home_button)
        self.menu_buttons.append(self.home_button)
        
        constr = layout.get_next_constraints()
        self.back_button = self.factory.create_button(KEY_PODCASTS_MENU, KEY_PARENT, constr, listeners[PODCASTS], bgr, image_size_percent=image_size)
        self.add_component(self.back_button)
        self.menu_buttons.append(self.back_button)
        
        constr = layout.get_next_constraints()
        self.back_button = self.factory.create_button(KEY_BACK, KEY_BACK, constr, listeners[GO_BACK], bgr, image_size_percent=image_size)
        self.add_component(self.back_button)
        self.menu_buttons.append(self.back_button)
        
        constr = layout.get_next_constraints()
        self.player_button = self.factory.create_button(KEY_PLAYER, KEY_PLAY_PAUSE, constr, listeners[KEY_PLAYER], bgr, image_size_percent=image_size)       
        self.add_component(self.player_button)
        self.menu_buttons.append(self.player_button)
Ejemplo n.º 23
0
    def __init__(self, util, listeners, voice_assistant, state):
        """ Initializer
        
        :param util: utility object
        :param listeners: file browser listeners
        :param voice_assistant: voice assistant
        :param state: button state
        """
        self.util = util
        self.config = util.config
        self.podcasts_util = util.get_podcasts_util()
        self.listeners = listeners
        self.factory = Factory(util)
        self.bounding_box = util.screen_rect
        self.layout = BorderLayout(self.bounding_box)
        self.layout.set_percent_constraints(PERCENT_TOP_HEIGHT,
                                            PERCENT_BOTTOM_HEIGHT, 0, 0)

        d = [MENU_ROWS_EPISODES, MENU_COLUMNS_EPISODES]
        MenuScreen.__init__(self,
                            util,
                            listeners,
                            MENU_ROWS_EPISODES,
                            MENU_COLUMNS_EPISODES,
                            voice_assistant,
                            d,
                            self.turn_page,
                            page_in_title=False)

        if hasattr(state, "podcast_url"):
            podcast_url = state.podcast_url
            self.title = self.podcasts_util.summary_cache[podcast_url].name
        else:
            self.title = state.name

        m = self.factory.create_episode_menu_button
        self.episodes_menu = MultiPageMenu(util,
                                           self.next_page,
                                           self.previous_page,
                                           self.set_title,
                                           self.reset_title,
                                           self.go_to_page,
                                           m,
                                           MENU_ROWS_EPISODES,
                                           MENU_COLUMNS_EPISODES,
                                           None, (0, 0, 0),
                                           self.menu_layout,
                                           align=ALIGN_MIDDLE)
        self.set_menu(self.episodes_menu)

        self.total_pages = PAGE_SIZE_EPISODES * 2
        self.episodes = []
        self.navigator = EpisodeNavigator(
            self.util, self.layout.BOTTOM, listeners,
            self.config[COLORS][COLOR_DARK_LIGHT], self.total_pages)
        self.components.append(self.navigator)
        self.current_page = 1

        self.save_episode_listeners = []
Ejemplo n.º 24
0
    def __init__(self, util, listeners, voice_assistant):
        self.util = util
        self.config = util.config
        self.groups_list = self.util.get_stations_folders()
        self.factory = Factory(util)
        d = [MENU_ROWS, MENU_COLUMNS]
        MenuScreen.__init__(self,
                            util,
                            listeners,
                            MENU_ROWS,
                            MENU_COLUMNS,
                            voice_assistant,
                            d,
                            self.turn_page,
                            page_in_title=False)
        self.total_pages = math.ceil(len(self.groups_list) / PAGE_SIZE)
        self.title = util.get_stations_top_folder()
        m = self.create_genre_menu_button
        label_area = (
            (self.menu_layout.h / MENU_ROWS) / 100) * (100 - ICON_AREA)
        font_size = int((label_area / 100) * FONT_HEIGHT)

        self.navigator = RadioGroupNavigator(self.util, self.layout.BOTTOM,
                                             listeners, self.total_pages)
        self.add_navigator(self.navigator)
        self.player_button = self.navigator.get_button_by_name(KEY_PLAYER)
        if self.total_pages > 1:
            self.left_button = self.navigator.get_button_by_name(KEY_PAGE_DOWN)
            self.right_button = self.navigator.get_button_by_name(KEY_PAGE_UP)

        self.groups_menu = MultiPageMenu(util,
                                         self.next_page,
                                         self.previous_page,
                                         self.set_title,
                                         self.reset_title,
                                         self.go_to_page,
                                         m,
                                         MENU_ROWS,
                                         MENU_COLUMNS,
                                         None, (0, 0, 0, 0),
                                         self.menu_layout,
                                         align=ALIGN_CENTER,
                                         font_size=font_size)
        self.groups_menu.add_listener(listeners[KEY_GENRE])
        self.set_menu(self.groups_menu)

        current_name = self.get_current_group_name()

        if current_name == None:
            self.current_page = 1
        else:
            try:
                current_group_index = self.groups_list.index(current_name)
                self.current_page = int(current_group_index / PAGE_SIZE) + 1
            except:
                current_group_index = 0

        self.turn_page()
Ejemplo n.º 25
0
    def __init__(self,
                 util,
                 listeners,
                 rows,
                 columns,
                 voice_assistant,
                 d=None,
                 turn_page=None,
                 page_in_title=True,
                 show_loading=False):
        """ Initializer
        
        :param util: utility object
        :param listeners: file browser listeners
        :param rows: menu rows
        :param d: dictionary with menu button flags
        :param turn_page: turn page callback
        :param util: utility object
        """
        self.util = util
        self.config = util.config
        self.factory = Factory(util)
        self.bounding_box = util.screen_rect
        self.player = None
        self.turn_page = turn_page
        self.page_in_title = page_in_title
        self.show_loading = show_loading

        self.cache = Cache(self.util)
        self.layout = BorderLayout(self.bounding_box)
        self.layout.set_percent_constraints(PERCENT_TOP_HEIGHT,
                                            PERCENT_BOTTOM_HEIGHT, 0, 0)
        Screen.__init__(self, util, "", PERCENT_TOP_HEIGHT, voice_assistant,
                        "menu_screen_screen_title", True, self.layout.TOP)

        color_dark_light = self.config[COLORS][COLOR_DARK_LIGHT]
        self.menu_layout = self.layout.CENTER

        if d:
            self.menu_button_layout = self.get_menu_button_layout(d)
            self.img_rect = self.menu_button_layout.image_rectangle

        listeners[GO_LEFT_PAGE] = self.previous_page
        listeners[GO_RIGHT_PAGE] = self.next_page

        try:
            self.navigator = BookNavigator(util, self.layout.BOTTOM, listeners,
                                           color_dark_light, d[4])
            Container.add_component(self, None)
            Container.add_component(self, self.navigator)
        except:
            Container.add_component(self, None)

        self.total_pages = 0
        self.current_page = 1
        self.menu = None
Ejemplo n.º 26
0
    def __init__(self, util, bounding_box, listeners):
        """ Initializer

        :param util: utility object
        :param bounding_box: bounding box
        :param listeners: buttons listeners
        """
        Container.__init__(self, util)
        self.factory = Factory(util)
        self.name = "collection.navigator"
        self.content = bounding_box
        self.content_x = bounding_box.x
        self.content_y = bounding_box.y
        self.listeners = listeners
        self.menu_buttons = []
        self.config = util.config
        self.use_web = self.config[USAGE][USE_WEB]
        self.arrow_layout = BorderLayout(bounding_box)
        self.arrow_layout.set_percent_constraints(0, 0, PERCENT_ARROW_WIDTH,
                                                  PERCENT_ARROW_WIDTH)
        self.update_observer = None
        self.redraw_observer = None
        self.menu_buttons = []

        constr = self.arrow_layout.LEFT
        self.left_button = self.factory.create_page_down_button(
            constr, "0", 40, 100)
        self.left_button.add_release_listener(self.listeners[GO_LEFT_PAGE])
        self.add_component(self.left_button)
        self.menu_buttons.append(self.left_button)

        constr = self.arrow_layout.RIGHT
        self.right_button = self.factory.create_page_up_button(
            constr, "0", 40, 100)
        self.right_button.add_release_listener(self.listeners[GO_RIGHT_PAGE])
        self.add_component(self.right_button)
        self.menu_buttons.append(self.right_button)

        layout = GridLayout(self.arrow_layout.CENTER)
        layout.set_pixel_constraints(1, 5, 1, 0)
        layout.current_constraints = 0

        bgr = util.config[BACKGROUND][FOOTER_BGR_COLOR]
        self.add_button(KEY_HOME, KEY_HOME, layout, self.listeners[KEY_HOME],
                        bgr)
        self.add_button(COLLECTION, KEY_PARENT, layout,
                        self.listeners[COLLECTION], bgr)
        self.add_button(KEY_LIST, KEY_MENU, layout,
                        self.listeners[COLLECTION_TOPIC], bgr)
        self.add_button(KEY_DETAIL, KEY_SETUP, layout,
                        self.listeners[TOPIC_DETAIL], bgr)
        self.add_button(KEY_PLAYER, KEY_PLAY_PAUSE, layout,
                        self.listeners[KEY_PLAYER], bgr)

        if self.use_web and self.update_observer != None:
            self.add_observers(self.update_observer, self.redraw_observer)
Ejemplo n.º 27
0
    def __init__(self, util, listeners, voice_assistant):
        """ Initializer
        
        :param util: utility object
        :param listener: screen menu event listener
        """
        self.util = util
        config = util.config
        screen_layout = BorderLayout(util.screen_rect)
        top = int((util.screen_rect.h * PERCENT_SAVERS) / 100)
        bottom = util.screen_rect.h - top
        screen_layout.set_pixel_constraints(top, bottom, 0, 0)

        layout = BorderLayout(screen_layout.TOP)
        layout.set_percent_constraints(PERCENT_TOP_HEIGHT, 0, 0, 0)

        Screen.__init__(self,
                        util,
                        "",
                        PERCENT_TOP_HEIGHT,
                        voice_assistant,
                        "saver_title",
                        title_layout=layout.TOP)
        factory = Factory(util)

        self.bounding_box = util.screen_rect
        self.saver_menu = SaverMenu(util, None, layout.CENTER)
        self.add_component(self.saver_menu)

        b = config[BACKGROUND][HEADER_BGR_COLOR]
        c = config[COLORS][COLOR_CONTRAST]

        font_size = (layout.TOP.h * PERCENT_TITLE_FONT) / 100.0
        label = config[LABELS][SCREENSAVER]
        self.screen_title.set_text(label)

        layout = BorderLayout(screen_layout.BOTTOM)
        layout.set_percent_constraints(PERCENT_DELAY_TITLE,
                                       PERCENT_DELAY_TITLE, 0, 0)
        self.delay_menu = SaverDelayMenu(util, None, layout.CENTER)
        self.add_component(self.delay_menu)

        layout.TOP.y += 2
        layout.TOP.h -= 2
        self.saver_delay_title = factory.create_output_text(
            "saver_delay_title", layout.TOP, b, c, int(font_size))
        label = config[LABELS][DELAY]
        self.saver_delay_title.set_text(label)
        self.add_component(self.saver_delay_title)

        b = self.config[BACKGROUND][FOOTER_BGR_COLOR]
        self.navigator = SaverNavigator(util, listeners, b, layout.BOTTOM)
        self.add_component(self.navigator)

        self.top_menu_enabled = True
Ejemplo n.º 28
0
    def __init__(self,
                 util,
                 bgr=None,
                 bb=None,
                 rows=3,
                 cols=3,
                 create_item_method=None,
                 menu_button_layout=None,
                 font_size=None,
                 align=ALIGN_CENTER,
                 button_padding_x=None,
                 bgr_component=None,
                 horizontal_layout=True):
        """ Initializer
        
        :param util: utility object
        :param bgr: menu background
        :param bb: bounding box
        :param rows: number of rows in menu
        :param cols: number of columns in menu
        :param create_item_method: factory method for menu item creation
        :param menu_button_layout: menu buttons layout
        :param font_size: font size
        :param align: label alignment
        :param button_padding_x: padding X
        :param bgr_component: menu background component
        """
        Container.__init__(self, util, bb, bgr)
        self.content = None
        self.bb = bb
        self.rows = rows
        self.cols = cols
        self.util = util
        self.menu_button_layout = menu_button_layout
        self.start_listeners = []
        self.move_listeners = []
        self.menu_loaded_listeners = []
        self.font_size = font_size
        self.button_padding_x = button_padding_x
        self.horizontal_layout = horizontal_layout

        self.buttons = {}
        self.factory = Factory(util)
        self.create_item_method = create_item_method
        self.selected_index = None
        self.align = align

        self.update_observer = None
        self.redraw_observer = None
        self.press = False
        self.release = False

        if bgr_component:
            self.add_component(bgr_component)
Ejemplo n.º 29
0
    def __init__(self,
                 playlist,
                 util,
                 mode=STATION,
                 bgr=None,
                 bounding_box=None):
        """ Initializer
        
        :param playlist: playlist object
        :param util: utility object
        :param bgr: menu background
        :param bounding_box: bounding box
        """
        self.factory = Factory(util)
        self.util = util
        self.config = self.util.config
        self.image_util = util.image_util
        self.favorites_util = FavoritesUtil(self.util)
        m = self.create_station_menu_button
        bb = bounding_box
        self.menu_mode = mode
        Menu.__init__(self,
                      util,
                      bgr,
                      bb,
                      playlist.rows,
                      playlist.columns,
                      create_item_method=m)
        self.bounding_box = bb
        self.playlist = playlist
        self.current_mode = self.STATION_MODE

        path = os.path.join(FOLDER_ICONS, IMAGE_SHADOW + EXT_PNG)
        self.original_shadow = self.image_util.load_image(path,
                                                          bounding_box=(bb.w,
                                                                        bb.h))
        h = self.bounding_box.h
        self.shadow = (self.original_shadow[0],
                       self.image_util.scale_image(self.original_shadow[1],
                                                   (h, h)))
        self.shadow_component = None

        path = os.path.join(FOLDER_ICONS, IMAGE_SELECTION + EXT_PNG)
        self.selection = self.image_util.load_image(path)
        self.station_button = None
        self.menu_click_listeners = []
        self.mode_listeners = []
        self.change_logo_listeners = []
        self.page_turned = False
        self.genre = None
        self.current_logo_image = None
        self.current_logo_filename = None
        self.current_album_image = None
Ejemplo n.º 30
0
    def __init__(self, util, listeners, voice_assistant):
        """ Initializer
        
        :param util: utility object
        :param listeners: file browser listeners
        """
        self.util = util
        self.config = util.config
        self.cdutil = CdUtil(util)
        self.factory = Factory(util)
        self.bounding_box = util.screen_rect
        layout = BorderLayout(self.bounding_box)
        layout.set_percent_constraints(PERCENT_TOP_HEIGHT,
                                       PERCENT_BOTTOM_HEIGHT, 0, 0)
        Screen.__init__(self, util, "", PERCENT_TOP_HEIGHT, voice_assistant,
                        "cd_drives_screen_title", True, layout.TOP)

        self.cd_drive_id = self.config[CD_PLAYBACK][CD_DRIVE_ID]
        self.cd_track = self.config[CD_PLAYBACK][CD_TRACK]
        self.cd_track_time = self.config[CD_PLAYBACK][CD_TRACK_TIME]
        self.screen_title.set_text(self.config[LABELS][KEY_CD_DRIVES])

        self.cd_drives_menu = CdDrivesMenu(util, layout.CENTER,
                                           listeners[KEY_CD_TRACKS])
        drives_info = self.cdutil.get_cd_drives_info()
        l = self.cd_drives_menu.get_layout(drives_info)
        bb = l.get_next_constraints()
        drives = self.cdutil.get_cd_drives(self.font_size, (bb.w, bb.h))
        self.cd_drives_menu.set_items(drives, 0, listeners[KEY_CD_TRACKS])

        for b in self.cd_drives_menu.buttons.values():
            b.parent_screen = self

        Container.add_component(self, self.cd_drives_menu)

        factory = Factory(util)
        self.menu_buttons = factory.create_home_player_buttons(
            self, self.layout.BOTTOM, listeners)
        self.home_button = self.menu_buttons[0]
        self.player_button = self.menu_buttons[1]