示例#1
0
    def __init__(self, config, widget_properties, locale_manager, main_menu, core=None):
        Menu.__init__(self, widget_properties)
        self.core = core
        self.main_menu = main_menu
        self.widget_properties = widget_properties
        self.config = config
        self.disp = DisplayProperties()

        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

        # Button labels:
        l_back =  _(u'back')
        l_save =  _(u'save')
        l_save_quit =  _(u'save & restart')
        l_quit =  _(u'quit')

        # Menu headings:
        h1_settings_main =  _(u'Settings')

        # Settings:
        on_off_toggle = [('off'), ('on')]

       # Options parent menu:
        self.options_menu_main = self
        self.options_menu_main.set_heading(h1_settings_main)

        # Add buttons to options parent menu:
        self.options_menu_main.add(MenuButton(l_back, target=self.main_menu, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')
        #self.options_menu_main.add(MenuButton(l_save, function=self.save, \
        #    widget_properties = self.widget_properties, pos_size=pos_size), 'horiz')
        #self.options_menu_main.add(MenuButton(l_save_quit, function=self.save, \
        #    args='quit', widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')

        # Options sub menus:
        for k, v in self.config.iteritems():
            # Options sub menus:
            menu = MenuGroup(self.widget_properties, key=k)
            menu.set_heading(_(k[0].upper() + k[1:]) + ' ' + _('Settings'))

            self.options_menu_main.add(
                MenuButton(_(k[0].upper() + k[1:]), target=menu, \
                widget_properties=self.widget_properties, \
                pos_size=pos_size), 'center')
            back_from_screen = MenuButton(l_back, \
                target=self.options_menu_main, \
                widget_properties=self.widget_properties)

            save_button = MenuButton(l_save, function=self.save, \
                args=[menu, 'go_on'], widget_properties=self.widget_properties)
            save_quit_button = MenuButton(l_save_quit, function=self.save, \
                args=[menu, 'quit'], widget_properties=self.widget_properties)

            # Add items to settings menus:
            menu.add(back_from_screen, 'center')
            menu.add(save_button, 'center')
            menu.add(save_quit_button, 'center')

            x_items = []
            for key, value in v.iteritems():
                item_spec = v.configspec[key]
                if item_spec.startswith('boolean'):
                    if value == True:
                        toggle='on'
                    else:
                        toggle='off'
                    x_items.append({'info' : _(key),
                        'button_type' : 'toggle',
                        'toggle_items' : on_off_toggle,
                        'selected_item' : toggle})
                elif item_spec.startswith('option'):
                    options = item_spec.strip('option(').strip(')').split(',')
                    choices = []
                    for option in options:
                        option = option.strip().replace("'", '')
                        if option.startswith('default='):
                            default_value = option.split('=')[1]
                        else:
                            choices.append(option.strip())
                    try:
                        selected_index = choices.index(value)
                    except ValueError:
                        selected_index = choices.index(default_value)

                    x_items.append({'info' : key,
                        'button_type' : 'toggle',
                        'toggle_items' : choices,
                        'selected_item' : selected_index})
            if len(x_items) > 0:
                item_group = {'heading' : k, 'items' : x_items}
                menu.add_group(item_group)
        '''
示例#2
0
文件: settings.py 项目: tewe/canta
    def init_menus(self, main_menu, pos_size):
        # Button labels:
        l_settings_main = _(u'Settings')
        l_settings_screen = _(u'Screen')
        l_settings_sound = _(u'Sound')
        l_settings_theme = _(u'Theme')
        l_settings_misc = _(u'Misc')
        l_back =  _(u'back')
        l_save =  _(u'save')
        l_save_quit =  _(u'save & restart')
        l_quit =  _(u'quit')

        # Menu headings:
        h1_settings_main =  _(u'Settings')
        h1_settings_screen =  _(u'Screen Settings')
        h2_settings_screen =  _(u'SCREEN:')
        h1_settings_sound =  _(u'Sound Settings')
        h2_settings_sound =  _(u'SOUND:')
        h1_settings_theme =  _(u'Theme Settings')
        h2_settings_theme =  _(u'THEME:')
        h1_settings_misc = _(u'Miscellaneous Settings')
        h2_settings_misc = _(u'Miscellaneous')

        # Settings:
        valid_languages = self.lm.get_langs()
        on_off_toggle = [_('off'), _('on')]
        i_resolution =  _(u'Resolution:')
        i_fullscreen =  _(u'Fullscreen:')
        i_fps_label =  _(u'FPS label:')
        i_pil =  _(u'Cover images:')
        i_sound_output =  _(u'Select sound output engine:')
        i_sound_input =  _(u'Select sound input engine:')
        i_song_preview =  _(u'Play preview in song browser:')
        i_theme =  _(u'Choose a theme:')
        i_lan = _(u'Choose a language:')
        i_octave = _(u'Octave correctness:')
        i_helper = _(u'Easier tone hitting:')
        i_allowed_difference = _(u'Allowed difference:')

       # Options parent menu:
        self.options_menu_main = Menu(self.widget_properties)
        self.options_menu_main.set_heading(h1_settings_main)

        # Options sub menus:
        self.options_menu_screen = MenuGroup(self.widget_properties)
        self.options_menu_screen.set_heading(h1_settings_screen)
        self.options_menu_sound = MenuGroup(self.widget_properties)
        self.options_menu_sound.set_heading(h1_settings_sound)
        self.options_menu_theme = MenuGroup(self.widget_properties)
        self.options_menu_theme.set_heading(h1_settings_theme)
        self.options_menu_misc = MenuGroup(self.widget_properties)
        self.options_menu_misc.set_heading(h1_settings_misc)

        # Add buttons to options parent menu:
        self.options_menu_main.add(MenuButton(l_back, target=main_menu, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')
        self.options_menu_main.add(MenuButton(l_save, function=self.save, \
            widget_properties = self.widget_properties, pos_size=pos_size), 'horiz')
        self.options_menu_main.add(MenuButton(l_save_quit, function=self.save, \
            args='quit', widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')

        self.options_menu_main.add(MenuButton(l_settings_screen, target=self.options_menu_screen, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_sound, target=self.options_menu_sound, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_theme, target=self.options_menu_theme, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_misc, target=self.options_menu_misc, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')

        back_from_screen = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_sound = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_theme = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_misc = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        save_button = MenuButton(l_save, function=self.save, \
            widget_properties=self.widget_properties)
        save_quit_button = MenuButton(l_save_quit, function=self.save, \
            args='quit', widget_properties=self.widget_properties)

        # Add items to settings menus:
        self.options_menu_screen.add(back_from_screen, 'center')
        self.options_menu_screen.add(save_button, 'center')
        self.options_menu_screen.add(save_quit_button, 'center')

        self.options_menu_sound.add(back_from_sound, 'center')
        self.options_menu_sound.add(save_button, 'center')
        self.options_menu_sound.add(save_quit_button, 'center')

        self.options_menu_theme.add(back_from_theme, 'center')
        self.options_menu_theme.add(save_button, 'center')
        self.options_menu_theme.add(save_quit_button, 'center')

        self.options_menu_misc.add(back_from_misc, 'center')
        self.options_menu_misc.add(save_button, 'center')
        self.options_menu_misc.add(save_quit_button, 'center')



        res = str(self.screen_res_x) + 'x' + str(self.screen_res_y)
        if res in self.disp.valid_resolutions:
            selected_resolution = \
                self.disp.valid_resolutions.index(res)
        else:
            selected_resolution = 2

        screen_items = []
        screen_items.append({'info' : i_resolution,
                    'button_type' : 'toggle',
                    'toggle_items' : self.disp.valid_resolutions,
                    'selected_item' : selected_resolution})
        screen_items.append({'info' : i_fullscreen, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.fullscreen_on})
        screen_items.append({'info' : i_fps_label, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.fps_label})
        screen_items.append({'info' : i_pil, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle, \
                    'selected_item' : self.use_pil})
        screen_group = {'heading' : h2_settings_screen, 'items' : screen_items}
        self.options_menu_screen.add_group(screen_group)


        misc_items = []
        misc_items.append({'info' : i_lan,
                    'button_type' : 'toggle',
                    'toggle_items' : valid_languages,
                    'selected_item' : self.locale})
        misc_items.append({'info' : i_octave,
                    'button_type' : 'toggle',
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.octave})

        misc_items.append({'info' : i_helper,
                    'button_type' : 'toggle',
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.helper})
        misc_items.append({'info' : i_allowed_difference,
                    'button_type' : 'toggle',
                    'toggle_items' : ['1', '2', '3', '4', '5', '6', '7'],
                    'selected_item' : str(self.allowed_difference)})

        misc_group = {'heading' : h2_settings_misc, 'items' : misc_items}
        self.options_menu_misc.add_group(misc_group)


        if self.sound_player in self.valid_sound_players:
            self.selected_player = self.valid_sound_players.index(self.sound_player)
        else:
            self.selected_player = 1 # defaults to PyGame
        sound_items = []
        sound_items.append({'info' : i_sound_output,
                    'button_type' : 'toggle',
                    'toggle_items' : self.valid_sound_players,
                    'selected_item' : self.selected_player})

        if self.sound_input in self.valid_sound_inputs:
            self.selected_input = self.valid_sound_inputs.index(self.sound_input)
        else:
            self.selected_input = 0 # defaults to OSS

        sound_items.append({'info' : i_sound_input,
                    'button_type' : 'toggle',
                    'toggle_items' : self.valid_sound_inputs,
                    'selected_item' : self.selected_input})

        sound_items.append({'info' : i_song_preview,
                    'button_type' : 'toggle',
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.sound_preview})

        sound_group = {'heading' : h2_settings_sound, 'items' : sound_items}
        self.options_menu_sound.add_group(sound_group)
        theme_mgr = ThemeManager()
        available_themes = theme_mgr.get_theme_names(os.path.join(self.app_dir, 'media', 'themes'))

        if self.theme_name in available_themes:
            selected_theme = available_themes.index(self.theme_name)
        else: selected_theme = 0
        theme_items = []
        theme_items.append({'info' : i_theme,
                    'button_type' : 'toggle',
                    'toggle_items' : available_themes,
                    'selected_item' : selected_theme})
        theme_group = {'heading': h2_settings_theme, 'items' : theme_items}
        self.options_menu_theme.add_group(theme_group)

        main_menu.add(MenuButton(l_settings_main, target=self.options_menu_main, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
示例#3
0
    def init_menus(self, main_menu, pos_size):
        # Button labels:
        l_settings_main = _(u'Settings')
        l_settings_screen = _(u'Screen')
        l_settings_sound = _(u'Sound')
        l_settings_theme = _(u'Theme')
        l_settings_misc = _(u'Misc')
        l_back = _(u'back')
        l_save = _(u'save')
        l_save_quit = _(u'save & restart')
        l_quit = _(u'quit')

        # Menu headings:
        h1_settings_main = _(u'Settings')
        h1_settings_screen = _(u'Screen Settings')
        h2_settings_screen = _(u'SCREEN:')
        h1_settings_sound = _(u'Sound Settings')
        h2_settings_sound = _(u'SOUND:')
        h1_settings_theme = _(u'Theme Settings')
        h2_settings_theme = _(u'THEME:')
        h1_settings_misc = _(u'Miscellaneous Settings')
        h2_settings_misc = _(u'Miscellaneous')

        # Settings:
        valid_languages = self.lm.get_langs()
        on_off_toggle = [_('off'), _('on')]
        i_resolution = _(u'Resolution:')
        i_fullscreen = _(u'Fullscreen:')
        i_fps_label = _(u'FPS label:')
        i_pil = _(u'Cover images:')
        i_sound_output = _(u'Select sound output engine:')
        i_sound_input = _(u'Select sound input engine:')
        i_song_preview = _(u'Play preview in song browser:')
        i_theme = _(u'Choose a theme:')
        i_lan = _(u'Choose a language:')
        i_octave = _(u'Octave correctness:')
        i_helper = _(u'Easier tone hitting:')
        i_allowed_difference = _(u'Allowed difference:')

        # Options parent menu:
        self.options_menu_main = Menu(self.widget_properties)
        self.options_menu_main.set_heading(h1_settings_main)

        # Options sub menus:
        self.options_menu_screen = MenuGroup(self.widget_properties)
        self.options_menu_screen.set_heading(h1_settings_screen)
        self.options_menu_sound = MenuGroup(self.widget_properties)
        self.options_menu_sound.set_heading(h1_settings_sound)
        self.options_menu_theme = MenuGroup(self.widget_properties)
        self.options_menu_theme.set_heading(h1_settings_theme)
        self.options_menu_misc = MenuGroup(self.widget_properties)
        self.options_menu_misc.set_heading(h1_settings_misc)

        # Add buttons to options parent menu:
        self.options_menu_main.add(MenuButton(l_back, target=main_menu, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')
        self.options_menu_main.add(MenuButton(l_save, function=self.save, \
            widget_properties = self.widget_properties, pos_size=pos_size), 'horiz')
        self.options_menu_main.add(MenuButton(l_save_quit, function=self.save, \
            args='quit', widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')

        self.options_menu_main.add(MenuButton(l_settings_screen, target=self.options_menu_screen, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_sound, target=self.options_menu_sound, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_theme, target=self.options_menu_theme, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_misc, target=self.options_menu_misc, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')

        back_from_screen = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_sound = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_theme = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_misc = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        save_button = MenuButton(l_save, function=self.save, \
            widget_properties=self.widget_properties)
        save_quit_button = MenuButton(l_save_quit, function=self.save, \
            args='quit', widget_properties=self.widget_properties)

        # Add items to settings menus:
        self.options_menu_screen.add(back_from_screen, 'center')
        self.options_menu_screen.add(save_button, 'center')
        self.options_menu_screen.add(save_quit_button, 'center')

        self.options_menu_sound.add(back_from_sound, 'center')
        self.options_menu_sound.add(save_button, 'center')
        self.options_menu_sound.add(save_quit_button, 'center')

        self.options_menu_theme.add(back_from_theme, 'center')
        self.options_menu_theme.add(save_button, 'center')
        self.options_menu_theme.add(save_quit_button, 'center')

        self.options_menu_misc.add(back_from_misc, 'center')
        self.options_menu_misc.add(save_button, 'center')
        self.options_menu_misc.add(save_quit_button, 'center')

        res = str(self.screen_res_x) + 'x' + str(self.screen_res_y)
        if res in self.disp.valid_resolutions:
            selected_resolution = \
                self.disp.valid_resolutions.index(res)
        else:
            selected_resolution = 2

        screen_items = []
        screen_items.append({
            'info': i_resolution,
            'button_type': 'toggle',
            'toggle_items': self.disp.valid_resolutions,
            'selected_item': selected_resolution
        })
        screen_items.append({'info' : i_fullscreen, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.fullscreen_on})
        screen_items.append({'info' : i_fps_label, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.fps_label})
        screen_items.append({'info' : i_pil, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle, \
                    'selected_item' : self.use_pil})
        screen_group = {'heading': h2_settings_screen, 'items': screen_items}
        self.options_menu_screen.add_group(screen_group)

        misc_items = []
        misc_items.append({
            'info': i_lan,
            'button_type': 'toggle',
            'toggle_items': valid_languages,
            'selected_item': self.locale
        })
        misc_items.append({
            'info': i_octave,
            'button_type': 'toggle',
            'toggle_items': on_off_toggle,
            'selected_item': self.octave
        })

        misc_items.append({
            'info': i_helper,
            'button_type': 'toggle',
            'toggle_items': on_off_toggle,
            'selected_item': self.helper
        })
        misc_items.append({
            'info': i_allowed_difference,
            'button_type': 'toggle',
            'toggle_items': ['1', '2', '3', '4', '5', '6', '7'],
            'selected_item': str(self.allowed_difference)
        })

        misc_group = {'heading': h2_settings_misc, 'items': misc_items}
        self.options_menu_misc.add_group(misc_group)

        if self.sound_player in self.valid_sound_players:
            self.selected_player = self.valid_sound_players.index(
                self.sound_player)
        else:
            self.selected_player = 1  # defaults to PyGame
        sound_items = []
        sound_items.append({
            'info': i_sound_output,
            'button_type': 'toggle',
            'toggle_items': self.valid_sound_players,
            'selected_item': self.selected_player
        })

        if self.sound_input in self.valid_sound_inputs:
            self.selected_input = self.valid_sound_inputs.index(
                self.sound_input)
        else:
            self.selected_input = 0  # defaults to OSS

        sound_items.append({
            'info': i_sound_input,
            'button_type': 'toggle',
            'toggle_items': self.valid_sound_inputs,
            'selected_item': self.selected_input
        })

        sound_items.append({
            'info': i_song_preview,
            'button_type': 'toggle',
            'toggle_items': on_off_toggle,
            'selected_item': self.sound_preview
        })

        sound_group = {'heading': h2_settings_sound, 'items': sound_items}
        self.options_menu_sound.add_group(sound_group)
        theme_mgr = ThemeManager()
        available_themes = theme_mgr.get_theme_names(
            os.path.join(self.app_dir, 'media', 'themes'))

        if self.theme_name in available_themes:
            selected_theme = available_themes.index(self.theme_name)
        else:
            selected_theme = 0
        theme_items = []
        theme_items.append({
            'info': i_theme,
            'button_type': 'toggle',
            'toggle_items': available_themes,
            'selected_item': selected_theme
        })
        theme_group = {'heading': h2_settings_theme, 'items': theme_items}
        self.options_menu_theme.add_group(theme_group)

        main_menu.add(MenuButton(l_settings_main, target=self.options_menu_main, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
示例#4
0
文件: settings.py 项目: tewe/canta
class Settings:
    """Initialize
        * user configuration (screen resolution, fullscreen settings, selected theme, ...)
    """
    def __init__(self, config, widget_properties, core):
        self.core = core
        self.widget_properties = widget_properties
        self.config = config
        self.locale = self.config['misc']['locale']
        self.octave = int(self.config['misc'].as_bool('octave'))
        self.helper = int(self.config['misc'].as_bool('helper'))
        self.allowed_difference =  int(self.config['misc'].as_int('allowed_difference'))

        self.screen_res_x =  self.config['screen'].as_int('resolution_x')
        self.screen_res_y =  self.config['screen'].as_int('resolution_y')
        self.fullscreen_on = int(self.config['screen'].as_bool('fullscreen'))
        self.fps_label = int(self.config['screen'].as_bool('fps_label'))
        self.use_pil = int(self.config['screen'].as_bool('pil'))
        self.sound_player = self.config['sound']['player']
        self.sound_input = self.config['sound']['input']
        self.sound_preview = int(self.config['sound'].as_bool('preview'))
        self.theme_name = self.config['theme']['name']

        self.app_dir = os.path.dirname(sys.argv[0])

        self.lm = LocaleManager(self.app_dir)
        self.lm.install(self.locale)

        self.disp = DisplayProperties()

        self.valid_sound_players = ['Dummy', 'Gstreamer']
        self.valid_sound_inputs = ['Gstreamer']


    def init_menus(self, main_menu, pos_size):
        # Button labels:
        l_settings_main = _(u'Settings')
        l_settings_screen = _(u'Screen')
        l_settings_sound = _(u'Sound')
        l_settings_theme = _(u'Theme')
        l_settings_misc = _(u'Misc')
        l_back =  _(u'back')
        l_save =  _(u'save')
        l_save_quit =  _(u'save & restart')
        l_quit =  _(u'quit')

        # Menu headings:
        h1_settings_main =  _(u'Settings')
        h1_settings_screen =  _(u'Screen Settings')
        h2_settings_screen =  _(u'SCREEN:')
        h1_settings_sound =  _(u'Sound Settings')
        h2_settings_sound =  _(u'SOUND:')
        h1_settings_theme =  _(u'Theme Settings')
        h2_settings_theme =  _(u'THEME:')
        h1_settings_misc = _(u'Miscellaneous Settings')
        h2_settings_misc = _(u'Miscellaneous')

        # Settings:
        valid_languages = self.lm.get_langs()
        on_off_toggle = [_('off'), _('on')]
        i_resolution =  _(u'Resolution:')
        i_fullscreen =  _(u'Fullscreen:')
        i_fps_label =  _(u'FPS label:')
        i_pil =  _(u'Cover images:')
        i_sound_output =  _(u'Select sound output engine:')
        i_sound_input =  _(u'Select sound input engine:')
        i_song_preview =  _(u'Play preview in song browser:')
        i_theme =  _(u'Choose a theme:')
        i_lan = _(u'Choose a language:')
        i_octave = _(u'Octave correctness:')
        i_helper = _(u'Easier tone hitting:')
        i_allowed_difference = _(u'Allowed difference:')

       # Options parent menu:
        self.options_menu_main = Menu(self.widget_properties)
        self.options_menu_main.set_heading(h1_settings_main)

        # Options sub menus:
        self.options_menu_screen = MenuGroup(self.widget_properties)
        self.options_menu_screen.set_heading(h1_settings_screen)
        self.options_menu_sound = MenuGroup(self.widget_properties)
        self.options_menu_sound.set_heading(h1_settings_sound)
        self.options_menu_theme = MenuGroup(self.widget_properties)
        self.options_menu_theme.set_heading(h1_settings_theme)
        self.options_menu_misc = MenuGroup(self.widget_properties)
        self.options_menu_misc.set_heading(h1_settings_misc)

        # Add buttons to options parent menu:
        self.options_menu_main.add(MenuButton(l_back, target=main_menu, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')
        self.options_menu_main.add(MenuButton(l_save, function=self.save, \
            widget_properties = self.widget_properties, pos_size=pos_size), 'horiz')
        self.options_menu_main.add(MenuButton(l_save_quit, function=self.save, \
            args='quit', widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')

        self.options_menu_main.add(MenuButton(l_settings_screen, target=self.options_menu_screen, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_sound, target=self.options_menu_sound, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_theme, target=self.options_menu_theme, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_misc, target=self.options_menu_misc, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')

        back_from_screen = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_sound = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_theme = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_misc = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        save_button = MenuButton(l_save, function=self.save, \
            widget_properties=self.widget_properties)
        save_quit_button = MenuButton(l_save_quit, function=self.save, \
            args='quit', widget_properties=self.widget_properties)

        # Add items to settings menus:
        self.options_menu_screen.add(back_from_screen, 'center')
        self.options_menu_screen.add(save_button, 'center')
        self.options_menu_screen.add(save_quit_button, 'center')

        self.options_menu_sound.add(back_from_sound, 'center')
        self.options_menu_sound.add(save_button, 'center')
        self.options_menu_sound.add(save_quit_button, 'center')

        self.options_menu_theme.add(back_from_theme, 'center')
        self.options_menu_theme.add(save_button, 'center')
        self.options_menu_theme.add(save_quit_button, 'center')

        self.options_menu_misc.add(back_from_misc, 'center')
        self.options_menu_misc.add(save_button, 'center')
        self.options_menu_misc.add(save_quit_button, 'center')



        res = str(self.screen_res_x) + 'x' + str(self.screen_res_y)
        if res in self.disp.valid_resolutions:
            selected_resolution = \
                self.disp.valid_resolutions.index(res)
        else:
            selected_resolution = 2

        screen_items = []
        screen_items.append({'info' : i_resolution,
                    'button_type' : 'toggle',
                    'toggle_items' : self.disp.valid_resolutions,
                    'selected_item' : selected_resolution})
        screen_items.append({'info' : i_fullscreen, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.fullscreen_on})
        screen_items.append({'info' : i_fps_label, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.fps_label})
        screen_items.append({'info' : i_pil, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle, \
                    'selected_item' : self.use_pil})
        screen_group = {'heading' : h2_settings_screen, 'items' : screen_items}
        self.options_menu_screen.add_group(screen_group)


        misc_items = []
        misc_items.append({'info' : i_lan,
                    'button_type' : 'toggle',
                    'toggle_items' : valid_languages,
                    'selected_item' : self.locale})
        misc_items.append({'info' : i_octave,
                    'button_type' : 'toggle',
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.octave})

        misc_items.append({'info' : i_helper,
                    'button_type' : 'toggle',
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.helper})
        misc_items.append({'info' : i_allowed_difference,
                    'button_type' : 'toggle',
                    'toggle_items' : ['1', '2', '3', '4', '5', '6', '7'],
                    'selected_item' : str(self.allowed_difference)})

        misc_group = {'heading' : h2_settings_misc, 'items' : misc_items}
        self.options_menu_misc.add_group(misc_group)


        if self.sound_player in self.valid_sound_players:
            self.selected_player = self.valid_sound_players.index(self.sound_player)
        else:
            self.selected_player = 1 # defaults to PyGame
        sound_items = []
        sound_items.append({'info' : i_sound_output,
                    'button_type' : 'toggle',
                    'toggle_items' : self.valid_sound_players,
                    'selected_item' : self.selected_player})

        if self.sound_input in self.valid_sound_inputs:
            self.selected_input = self.valid_sound_inputs.index(self.sound_input)
        else:
            self.selected_input = 0 # defaults to OSS

        sound_items.append({'info' : i_sound_input,
                    'button_type' : 'toggle',
                    'toggle_items' : self.valid_sound_inputs,
                    'selected_item' : self.selected_input})

        sound_items.append({'info' : i_song_preview,
                    'button_type' : 'toggle',
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.sound_preview})

        sound_group = {'heading' : h2_settings_sound, 'items' : sound_items}
        self.options_menu_sound.add_group(sound_group)
        theme_mgr = ThemeManager()
        available_themes = theme_mgr.get_theme_names(os.path.join(self.app_dir, 'media', 'themes'))

        if self.theme_name in available_themes:
            selected_theme = available_themes.index(self.theme_name)
        else: selected_theme = 0
        theme_items = []
        theme_items.append({'info' : i_theme,
                    'button_type' : 'toggle',
                    'toggle_items' : available_themes,
                    'selected_item' : selected_theme})
        theme_group = {'heading': h2_settings_theme, 'items' : theme_items}
        self.options_menu_theme.add_group(theme_group)

        main_menu.add(MenuButton(l_settings_main, target=self.options_menu_main, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')



    def save(self, args=None):
        # Sucking values out of the pudding labels, wich is crap:
        toggle_map = [_('off'), _('on')]
        on_off_mapping = {toggle_map[0]: 'off', toggle_map[1]: 'on'}
        x, y = self.options_menu_screen.toggle_list[0].label.split('x')
        fs = on_off_mapping[self.options_menu_screen.toggle_list[1].label]
        fps = on_off_mapping[self.options_menu_screen.toggle_list[2].label]
        pil = on_off_mapping[self.options_menu_screen.toggle_list[3].label]

        sp = self.options_menu_sound.toggle_list[0].label
        si = self.options_menu_sound.toggle_list[1].label
        spr = on_off_mapping[self.options_menu_sound.toggle_list[2].label]

        tn = self.options_menu_theme.toggle_list[0].label

        locale = self.options_menu_misc.toggle_list[0].label
        octave = on_off_mapping[self.options_menu_misc.toggle_list[1].label]
        helper = on_off_mapping[self.options_menu_misc.toggle_list[2].label]
        allowed_difference = self.options_menu_misc.toggle_list[3].label


        self.config['screen'] = {
            'resolution_x' : x,
            'resolution_y' : y,
            'fullscreen' : fs,
            'fps_label' : fps,
            'pil' : pil
        }
        self.config['sound'] = {
            'player' : sp,
            'input' : si,
            'preview' : spr,
        }
        self.config['theme'] = {
            'name' : tn
        }
        self.config['misc'] = {
            'locale' : locale,
            'octave' : octave,
            'helper' : helper,
            'allowed_difference' : allowed_difference
        }
        self.config.write()

        if args == 'quit':
            soya.quit()
            self.core._start()
示例#5
0
class Settings:
    """Initialize
        * user configuration (screen resolution, fullscreen settings, selected theme, ...)
    """
    def __init__(self, config, widget_properties, core):
        self.core = core
        self.widget_properties = widget_properties
        self.config = config
        self.locale = self.config['misc']['locale']
        self.octave = int(self.config['misc'].as_bool('octave'))
        self.helper = int(self.config['misc'].as_bool('helper'))
        self.allowed_difference = int(
            self.config['misc'].as_int('allowed_difference'))

        self.screen_res_x = self.config['screen'].as_int('resolution_x')
        self.screen_res_y = self.config['screen'].as_int('resolution_y')
        self.fullscreen_on = int(self.config['screen'].as_bool('fullscreen'))
        self.fps_label = int(self.config['screen'].as_bool('fps_label'))
        self.use_pil = int(self.config['screen'].as_bool('pil'))
        self.sound_player = self.config['sound']['player']
        self.sound_input = self.config['sound']['input']
        self.sound_preview = int(self.config['sound'].as_bool('preview'))
        self.theme_name = self.config['theme']['name']

        self.app_dir = os.path.dirname(sys.argv[0])

        self.lm = LocaleManager(self.app_dir)
        self.lm.install(self.locale)

        self.disp = DisplayProperties()

        self.valid_sound_players = ['Dummy', 'Gstreamer']
        self.valid_sound_inputs = ['Gstreamer']

    def init_menus(self, main_menu, pos_size):
        # Button labels:
        l_settings_main = _(u'Settings')
        l_settings_screen = _(u'Screen')
        l_settings_sound = _(u'Sound')
        l_settings_theme = _(u'Theme')
        l_settings_misc = _(u'Misc')
        l_back = _(u'back')
        l_save = _(u'save')
        l_save_quit = _(u'save & restart')
        l_quit = _(u'quit')

        # Menu headings:
        h1_settings_main = _(u'Settings')
        h1_settings_screen = _(u'Screen Settings')
        h2_settings_screen = _(u'SCREEN:')
        h1_settings_sound = _(u'Sound Settings')
        h2_settings_sound = _(u'SOUND:')
        h1_settings_theme = _(u'Theme Settings')
        h2_settings_theme = _(u'THEME:')
        h1_settings_misc = _(u'Miscellaneous Settings')
        h2_settings_misc = _(u'Miscellaneous')

        # Settings:
        valid_languages = self.lm.get_langs()
        on_off_toggle = [_('off'), _('on')]
        i_resolution = _(u'Resolution:')
        i_fullscreen = _(u'Fullscreen:')
        i_fps_label = _(u'FPS label:')
        i_pil = _(u'Cover images:')
        i_sound_output = _(u'Select sound output engine:')
        i_sound_input = _(u'Select sound input engine:')
        i_song_preview = _(u'Play preview in song browser:')
        i_theme = _(u'Choose a theme:')
        i_lan = _(u'Choose a language:')
        i_octave = _(u'Octave correctness:')
        i_helper = _(u'Easier tone hitting:')
        i_allowed_difference = _(u'Allowed difference:')

        # Options parent menu:
        self.options_menu_main = Menu(self.widget_properties)
        self.options_menu_main.set_heading(h1_settings_main)

        # Options sub menus:
        self.options_menu_screen = MenuGroup(self.widget_properties)
        self.options_menu_screen.set_heading(h1_settings_screen)
        self.options_menu_sound = MenuGroup(self.widget_properties)
        self.options_menu_sound.set_heading(h1_settings_sound)
        self.options_menu_theme = MenuGroup(self.widget_properties)
        self.options_menu_theme.set_heading(h1_settings_theme)
        self.options_menu_misc = MenuGroup(self.widget_properties)
        self.options_menu_misc.set_heading(h1_settings_misc)

        # Add buttons to options parent menu:
        self.options_menu_main.add(MenuButton(l_back, target=main_menu, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')
        self.options_menu_main.add(MenuButton(l_save, function=self.save, \
            widget_properties = self.widget_properties, pos_size=pos_size), 'horiz')
        self.options_menu_main.add(MenuButton(l_save_quit, function=self.save, \
            args='quit', widget_properties=self.widget_properties, pos_size=pos_size), 'horiz')

        self.options_menu_main.add(MenuButton(l_settings_screen, target=self.options_menu_screen, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_sound, target=self.options_menu_sound, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_theme, target=self.options_menu_theme, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')
        self.options_menu_main.add(MenuButton(l_settings_misc, target=self.options_menu_misc, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')

        back_from_screen = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_sound = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_theme = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        back_from_misc = MenuButton(l_back, target=self.options_menu_main, \
            widget_properties=self.widget_properties)
        save_button = MenuButton(l_save, function=self.save, \
            widget_properties=self.widget_properties)
        save_quit_button = MenuButton(l_save_quit, function=self.save, \
            args='quit', widget_properties=self.widget_properties)

        # Add items to settings menus:
        self.options_menu_screen.add(back_from_screen, 'center')
        self.options_menu_screen.add(save_button, 'center')
        self.options_menu_screen.add(save_quit_button, 'center')

        self.options_menu_sound.add(back_from_sound, 'center')
        self.options_menu_sound.add(save_button, 'center')
        self.options_menu_sound.add(save_quit_button, 'center')

        self.options_menu_theme.add(back_from_theme, 'center')
        self.options_menu_theme.add(save_button, 'center')
        self.options_menu_theme.add(save_quit_button, 'center')

        self.options_menu_misc.add(back_from_misc, 'center')
        self.options_menu_misc.add(save_button, 'center')
        self.options_menu_misc.add(save_quit_button, 'center')

        res = str(self.screen_res_x) + 'x' + str(self.screen_res_y)
        if res in self.disp.valid_resolutions:
            selected_resolution = \
                self.disp.valid_resolutions.index(res)
        else:
            selected_resolution = 2

        screen_items = []
        screen_items.append({
            'info': i_resolution,
            'button_type': 'toggle',
            'toggle_items': self.disp.valid_resolutions,
            'selected_item': selected_resolution
        })
        screen_items.append({'info' : i_fullscreen, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.fullscreen_on})
        screen_items.append({'info' : i_fps_label, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle,
                    'selected_item' : self.fps_label})
        screen_items.append({'info' : i_pil, 'button_type' : 'toggle', \
                    'toggle_items' : on_off_toggle, \
                    'selected_item' : self.use_pil})
        screen_group = {'heading': h2_settings_screen, 'items': screen_items}
        self.options_menu_screen.add_group(screen_group)

        misc_items = []
        misc_items.append({
            'info': i_lan,
            'button_type': 'toggle',
            'toggle_items': valid_languages,
            'selected_item': self.locale
        })
        misc_items.append({
            'info': i_octave,
            'button_type': 'toggle',
            'toggle_items': on_off_toggle,
            'selected_item': self.octave
        })

        misc_items.append({
            'info': i_helper,
            'button_type': 'toggle',
            'toggle_items': on_off_toggle,
            'selected_item': self.helper
        })
        misc_items.append({
            'info': i_allowed_difference,
            'button_type': 'toggle',
            'toggle_items': ['1', '2', '3', '4', '5', '6', '7'],
            'selected_item': str(self.allowed_difference)
        })

        misc_group = {'heading': h2_settings_misc, 'items': misc_items}
        self.options_menu_misc.add_group(misc_group)

        if self.sound_player in self.valid_sound_players:
            self.selected_player = self.valid_sound_players.index(
                self.sound_player)
        else:
            self.selected_player = 1  # defaults to PyGame
        sound_items = []
        sound_items.append({
            'info': i_sound_output,
            'button_type': 'toggle',
            'toggle_items': self.valid_sound_players,
            'selected_item': self.selected_player
        })

        if self.sound_input in self.valid_sound_inputs:
            self.selected_input = self.valid_sound_inputs.index(
                self.sound_input)
        else:
            self.selected_input = 0  # defaults to OSS

        sound_items.append({
            'info': i_sound_input,
            'button_type': 'toggle',
            'toggle_items': self.valid_sound_inputs,
            'selected_item': self.selected_input
        })

        sound_items.append({
            'info': i_song_preview,
            'button_type': 'toggle',
            'toggle_items': on_off_toggle,
            'selected_item': self.sound_preview
        })

        sound_group = {'heading': h2_settings_sound, 'items': sound_items}
        self.options_menu_sound.add_group(sound_group)
        theme_mgr = ThemeManager()
        available_themes = theme_mgr.get_theme_names(
            os.path.join(self.app_dir, 'media', 'themes'))

        if self.theme_name in available_themes:
            selected_theme = available_themes.index(self.theme_name)
        else:
            selected_theme = 0
        theme_items = []
        theme_items.append({
            'info': i_theme,
            'button_type': 'toggle',
            'toggle_items': available_themes,
            'selected_item': selected_theme
        })
        theme_group = {'heading': h2_settings_theme, 'items': theme_items}
        self.options_menu_theme.add_group(theme_group)

        main_menu.add(MenuButton(l_settings_main, target=self.options_menu_main, \
            widget_properties=self.widget_properties, pos_size=pos_size), 'center')

    def save(self, args=None):
        # Sucking values out of the pudding labels, wich is crap:
        toggle_map = [_('off'), _('on')]
        on_off_mapping = {toggle_map[0]: 'off', toggle_map[1]: 'on'}
        x, y = self.options_menu_screen.toggle_list[0].label.split('x')
        fs = on_off_mapping[self.options_menu_screen.toggle_list[1].label]
        fps = on_off_mapping[self.options_menu_screen.toggle_list[2].label]
        pil = on_off_mapping[self.options_menu_screen.toggle_list[3].label]

        sp = self.options_menu_sound.toggle_list[0].label
        si = self.options_menu_sound.toggle_list[1].label
        spr = on_off_mapping[self.options_menu_sound.toggle_list[2].label]

        tn = self.options_menu_theme.toggle_list[0].label

        locale = self.options_menu_misc.toggle_list[0].label
        octave = on_off_mapping[self.options_menu_misc.toggle_list[1].label]
        helper = on_off_mapping[self.options_menu_misc.toggle_list[2].label]
        allowed_difference = self.options_menu_misc.toggle_list[3].label

        self.config['screen'] = {
            'resolution_x': x,
            'resolution_y': y,
            'fullscreen': fs,
            'fps_label': fps,
            'pil': pil
        }
        self.config['sound'] = {
            'player': sp,
            'input': si,
            'preview': spr,
        }
        self.config['theme'] = {'name': tn}
        self.config['misc'] = {
            'locale': locale,
            'octave': octave,
            'helper': helper,
            'allowed_difference': allowed_difference
        }
        self.config.write()

        if args == 'quit':
            soya.quit()
            self.core._start()