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