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()
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()