示例#1
0
文件: menus.py 项目: parpg/parpg
    def __init__(self, engine, settings):
        self.engine = engine
        self.settings = settings

        # available options
        screen_modes = self.engine.getDeviceCaps().getSupportedScreenModes()
        resolutions = list(set([(mode.getWidth(), mode.getHeight())
                                for mode in screen_modes]))
        self.resolutions = ["{0}x{1}".format(item[0], item[1])
                            for item in sorted(resolutions)[1:]]

        self.render_backends = ['OpenGL', 'SDL']
        self.lighting_models = range(3)
        
        # selected options
        self.resolution = self.settings.get("FIFE", "ScreenResolution")
        self.render_backend = self.settings.get("FIFE", "RenderBackend")
        self.lighting_model = self.settings.get("FIFE", "Lighting")
        self.fullscreen = self.settings.get("FIFE", "FullScreen")
        self.sound = self.settings.get("FIFE", "PlaySounds")
        self.scroll_speed = self.settings.get("parpg", "ScrollSpeed")
        
        xml_file = vfs.VFS.open('gui/settings_menu.xml')
        self.window = pychan.loadXML(xml_file)
        self.restart_dialog = RestartDialog(self.settings)
        self.window.mapEvents({'okButton': self.save,
                               'cancelButton': self.hide,
                               'defaultButton': self.reset,
                               'scroll_speed': self.update})
        self.initializeWidgets()
        self.fillWidgets()
示例#2
0
文件: menus.py 项目: parpg/parpg
class SettingsMenu(object):
    def __init__(self, engine, settings):
        self.engine = engine
        self.settings = settings

        # available options
        screen_modes = self.engine.getDeviceCaps().getSupportedScreenModes()
        resolutions = list(set([(mode.getWidth(), mode.getHeight())
                                for mode in screen_modes]))
        self.resolutions = ["{0}x{1}".format(item[0], item[1])
                            for item in sorted(resolutions)[1:]]

        self.render_backends = ['OpenGL', 'SDL']
        self.lighting_models = range(3)
        
        # selected options
        self.resolution = self.settings.get("FIFE", "ScreenResolution")
        self.render_backend = self.settings.get("FIFE", "RenderBackend")
        self.lighting_model = self.settings.get("FIFE", "Lighting")
        self.fullscreen = self.settings.get("FIFE", "FullScreen")
        self.sound = self.settings.get("FIFE", "PlaySounds")
        self.scroll_speed = self.settings.get("parpg", "ScrollSpeed")
        
        xml_file = vfs.VFS.open('gui/settings_menu.xml')
        self.window = pychan.loadXML(xml_file)
        self.restart_dialog = RestartDialog(self.settings)
        self.window.mapEvents({'okButton': self.save,
                               'cancelButton': self.hide,
                               'defaultButton': self.reset,
                               'scroll_speed': self.update})
        self.initializeWidgets()
        self.fillWidgets()

    def initializeWidgets(self):
        scroll_speed = unicode(self.scroll_speed)
        initial_data = {'screen_resolution': self.resolutions,
                        'render_backend': self.render_backends,
                        'lighting_model': self.lighting_models,
                        'scroll_speed_value': scroll_speed}

        self.window.distributeInitialData(initial_data)


    def fillWidgets(self):
        resolution = self.resolutions.index(self.resolution)
        backend = self.render_backends.index(self.render_backend)
        lighting = self.lighting_models.index(self.lighting_model)
        
        self.window.distributeData({'screen_resolution': resolution,
                                    'render_backend': backend,
                                    'lighting_model': lighting,
                                    'enable_fullscreen': self.fullscreen,
                                    'enable_sound': self.sound})

    def update(self):
        """updates lables to show realtime data"""
        #collects the data from the widgets
        (scroll_speed) = self.window.collectData('scroll_speed')

        #alter the data note:pychan insists that all lables be given
        #  unicode text
        #the slice rounds the number displayed
        scroll_speed = unicode(scroll_speed)[:3]

        #adds the data to the proper widgets
        self.window.distributeInitialData({'scroll_speed_value': scroll_speed})

    def show(self):
        self.window.show()

    def hide(self):
        self.window.hide()

    def reset(self):
        self.settings.read(self.settings.system_path)
        self.fillWidgets()

    def save(self):
        (resolution, backend, lighting, fullscreen, sound, scroll_speed) = \
            self.window.collectData('screen_resolution', 'render_backend',
                                    'lighting_model', 'enable_fullscreen',
                                    'enable_sound', 'scroll_speed')
        self.settings.set("FIFE", "ScreenResolution", self.resolutions[resolution])
        self.settings.set("FIFE", "RenderBackend", self.render_backends[backend])
        self.settings.set("FIFE", "Lighting", self.lighting_models[lighting])
        self.settings.set("FIFE", "FullScreen", fullscreen)
        self.settings.set("FIFE", "EnableSound", sound)
        self.settings.set("FIFE", "ScrollSpeed", scroll_speed)
        self.settings.saveSettings("../settings.xml")
       
        self.restart_dialog.show()
        self.hide()