Пример #1
0
    def setup(self):
        # Sizes and positions for the lyrics:
        pos_size = {}
        pos_size['width'] = 70
        pos_size['height'] = 30
        pos_size['top'] = self.widget_properties['config']['screen'].as_int('resolution_y') / 1.1 - 12
        pos_size['left'] = 35
        self.widget_properties['pos_size'] = pos_size
        self.widget_properties['anchoring'] = 'bottom'

        # We deactivate the "done"-color by giving it the same color as "to_sing":
        self.lyrics_to_sing_color = self.widget_properties['font']['lyrics']['to_sing']['color']
        self.widget_properties['font']['lyrics']['to_sing']['color'] = \
            self.widget_properties['font']['lyrics']['done']['color']

        # The observer for the lyrics:
        lyrics = LyricsObserver(self.widget_properties)

        # The observer for the symbolical musical representations:

        song_bar_color = {}
        song_bar_color['special'] = (1, 0, 0, 0.6)
        song_bar_color['freestyle'] = (0, 1., 0., 0.6)
        song_bar_color['normal'] = (0, 0., 1., 0.4)

        cube = MainCubeObserver(self.widget_properties['root_world'], \
                        song_bar_color)

        self.music_notes = MusicNotes(self.parent_world)

        self.pos = 0
        self.song_data = SongData()
        self.song_data.attach(lyrics)
        self.song_data.attach(cube)
        self.song_data.attach(self.music_notes)

        # The paths to the song:
        self.msg['song'] = self.song
        self.song.read()
        self.song.split_in_lines()
        self.msg['type'] = 'nextLine'
        self.song_data.set_data(self.msg)
        self.msg['pos'] = 0
        self.msg['type'] = 'activateNote'
        self.song_data.set_data(self.msg)

        self.player.load(path=self.song.path, file= self.selected_song)

        self.heading_label = pudding.control.SimpleLabel( \
                self.v_cont, label=self.song.info['artist'] + \
                self.separator + self.song.info['title'], \
                font=self.font_h,\
                color=self.color_h, top=10, left=0)

        # The line number label:
        ln_label = ''
        self.line_number_label = pudding.control.SimpleLabel( \
            self.v_cont, label=ln_label, font=self.font_p, \
            color=self.color_p)

        self.bpm_label = self.l_bpm + str(self.song.info['bpm'])
        self.bpm_number_label = pudding.control.SimpleLabel( \
            self.v_cont, label= self.bpm_label, font=self.font_p, \
            color=self.color_p)

        self.parent_widget.on_resize()
        self.parent_world.add(self.keyboard_event)

        # Help menu:
        self.help_menu = MenuText(self.widget_properties, top=self.screen_res_y / 5, \
                left=self.screen_res_x / 2)
        self.help_menu.set_heading(self.h_help)
        fd_help = open(self.help_file_path, 'r')
        help = fd_help.read()
        self.help_menu.add_text(help)
        self.help_hint = pudding.control.SimpleLabel(self.help_hint_cont, \
                label=self.l_help_hint)

        self.add_child(self.help_menu)
        # needs testing
        #click_observer = ClickObserver(self.player)
        #self.song_data.attach(click_observer)

        self.parent_widget.on_resize()
        self.refresh()
Пример #2
0
    def init_menus(self):
        """Initialize all menus, then tell pudding main loop to idle().
        """

        # Button labels:
        l_start = _(u"Sing")#_(u'Party Mode')
        l_song_editor = _(u'Song Editor')

        l_about = _(u'About')
        l_quit2 = _(u'Quit')

        l_back =  _(u'back')
        l_save =  _(u'save')
        l_save_quit =  _(u'save & restart')
        l_quit =  _(u'quit')

        # Menu headings:
        h1_main_menu =  _(u'Main Menu')
        h1_about =  _(u'About')
        h1_song_browser =  _(u'Choose a song...')


        # File paths:
        about_file = os.path.join('misc', 'ABOUT.txt')
        logo_path = 'logo.png'
        show_logo = False

        self.menus = {}

        # Main menu:
        main_menu = Menu(self.widget_properties)

        self.menus['main'] = main_menu # obsolete?
        # About menu:
        about_menu = MenuText(self.widget_properties, top=self.screen_res_y / 3, \
                left=self.screen_res_x / 2)
        about_menu.set_heading(h1_about)
        about_back = MenuButton(l_back, widget_properties = self.widget_properties, \
            target = main_menu)
        about_menu.add(about_back, 'horiz')
        about_quit = MenuButton(l_quit, function=self.quit, \
            pos_size=0, widget_properties = self.widget_properties)
        about_menu.add(about_quit, 'center')
        fd_license = open(os.path.join(self.app_dir, about_file), 'r')
        license = fd_license.read()
        about_menu.add_text(license)

        self.load_player()
        song_editor = SongEditor(self.app_dir, self.widget_properties, \
            self.theme_mgr, main_menu, player=self.player)

        # Sing screen:
        sing_screen = SingScreen(app_dir=self.app_dir, \
                    camera=self.camera, theme_mgr=self.theme_mgr, \
                    widget_properties=self.widget_properties, \
                    menu_list=self.menus, config=self.config, \
                    player=self.player)

        pos_size = {}
        pos_size['height'] = self.screen_res_y / 16
        pos_size['width'] = self.screen_res_x - 80
        pos_size['top'] = 10
        pos_size['left'] = 10

        # Song browser:
        entries = []
        entry_sing_screen = {}
        entry_sing_screen['song_start_text'] = 'Start'
        entry_sing_screen['start_screen'] = sing_screen
        entry_sing_screen['menu_text'] = _(u"Sing")
        entry_sing_screen['default_manager'] = 0
        entry_song_editor = {}
        entry_song_editor['song_start_text'] = 'Edit'
        entry_song_editor['start_screen'] = song_editor
        entry_song_editor['menu_text'] = _(u'Song Editor')
        entry_song_editor['default_manager'] = 1
        entries.append(entry_sing_screen)
        entries.append(entry_song_editor)

        browsers = []
        for entry in entries:
            browser = MenuBrowser(entry['default_manager'], self.widget_properties, \
                entry['start_screen'], self.config, player = self.player,\
                song_start_text=entry['song_start_text'])
            browser.set_heading(h1_song_browser)

            back_button = MenuButton(l_back, target=main_menu, \
                widget_properties = self.widget_properties, \
                function=browser.stop_preview)
            quit_button = MenuButton(l_quit, function=self.quit, \
                pos_size=0, widget_properties = self.widget_properties)
            browser.add(back_button, 'center')
            browser.add(quit_button, 'center')
            browsers.append(browser)
            # Add buttons to main menu:
            args = {}
            args['selected'] = entry['start_screen']
            args['widgets'] = [main_menu]
            main_menu.add(MenuButton(entry['menu_text'], target=browser, function=browser.start_song,\
                widget_properties=self.widget_properties, pos_size=pos_size), 'center')

        self.settings.init_menus(main_menu, pos_size)

        main_menu.add(MenuButton(l_about, target=about_menu, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        main_menu.add(MenuButton(l_quit2, function=self.quit, args=0, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')

        # hide the loading label:
        self.loading_cont.visible = 0
        use_pil = int(self.config['screen'].as_bool('pil'))
        # logo:
        if use_pil and show_logo:
            try:
                logo = pudding.control.Logo(self.root_widget, logo_path, z_index=4)
            except:
                pass

        main_menu.show()
        pudding.main_loop.MainLoop(self.root_world).idle()