# HG changeset patch
# User prock@33b003aa-7bff-0310-803a-e67f0ece8222
# Date 1273680586 0
# Node ID 987307d12235876a2b62c2ea30d3c198e0ea7431
# Parent ae9f5383f5b18fbe543418511ea97be57a3ebd07
Added the fife_settings.py extension. This provides a small utility class for loading and saving settings along with a dialog box for setting screen resolution and other things.
Updated the shooter demo and rio_de_hola to use the new settings extension.
diff -r ae9f5383f5b1 -r 987307d12235 demos/rio_de_hola/gui/changes_require_restart.xml
--- a/demos/rio_de_hola/gui/changes_require_restart.xml Tue May 11 21:30:55 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-
-
-
-
-
-
-
diff -r ae9f5383f5b1 -r 987307d12235 demos/rio_de_hola/gui/settings.xml
--- a/demos/rio_de_hola/gui/settings.xml Tue May 11 21:30:55 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
diff -r ae9f5383f5b1 -r 987307d12235 demos/rio_de_hola/run.py
--- a/demos/rio_de_hola/run.py Tue May 11 21:30:55 2010 +0000
+++ b/demos/rio_de_hola/run.py Wed May 12 16:09:46 2010 +0000
@@ -39,10 +39,10 @@
from fife.extensions.basicapplication import ApplicationBase
from fife.extensions import pychan
from fife.extensions.pychan import widgets
-from settings import Setting
+from fife.extensions.fife_settings import Setting
from fife.extensions.fife_utils import getUserDataDirectory
-TDS = Setting()
+TDS = Setting(app_name="rio_de_hola")
class ApplicationListener(eventlistenerbase.EventListenerBase):
def __init__(self, engine, world):
@@ -128,8 +128,6 @@
Load the settings from a python file and load them into the engine.
Called in the ApplicationBase constructor.
"""
- import settings
- self.settings = settings
engineSetting = self.engine.getSettings()
engineSetting.setDefaultFontGlyphs(str(TDS.readSetting("FontGlyphs", strip=False)))
diff -r ae9f5383f5b1 -r 987307d12235 demos/rio_de_hola/scripts/agents/girl.py
--- a/demos/rio_de_hola/scripts/agents/girl.py Tue May 11 21:30:55 2010 +0000
+++ b/demos/rio_de_hola/scripts/agents/girl.py Wed May 12 16:09:46 2010 +0000
@@ -23,9 +23,9 @@
from agent import Agent
from fife import fife
-from settings import Setting
+from fife.extensions.fife_settings import Setting
-TDS = Setting()
+TDS = Setting(app_name="rio_de_hola")
_STATE_NONE, _STATE_IDLE, _STATE_RUN, _STATE_FOLLOW = 0, 1, 2, 3
diff -r ae9f5383f5b1 -r 987307d12235 demos/rio_de_hola/scripts/agents/hero.py
--- a/demos/rio_de_hola/scripts/agents/hero.py Tue May 11 21:30:55 2010 +0000
+++ b/demos/rio_de_hola/scripts/agents/hero.py Wed May 12 16:09:46 2010 +0000
@@ -23,9 +23,9 @@
import random
from agent import Agent
-from settings import Setting
+from fife.extensions.fife_settings import Setting
-TDS = Setting()
+TDS = Setting(app_name="rio_de_hola")
_STATE_NONE, _STATE_IDLE, _STATE_RUN, _STATE_KICK, _STATE_TALK = xrange(5)
diff -r ae9f5383f5b1 -r 987307d12235 demos/rio_de_hola/scripts/world.py
--- a/demos/rio_de_hola/scripts/world.py Tue May 11 21:30:55 2010 +0000
+++ b/demos/rio_de_hola/scripts/world.py Wed May 12 16:09:46 2010 +0000
@@ -35,9 +35,9 @@
from agents.cloud import Cloud
from agents.beekeeper import Beekeeper
from agents.agent import create_anonymous_agents
-from settings import Setting
+from fife.extensions.fife_settings import Setting
-TDS = Setting()
+TDS = Setting(app_name="rio_de_hola")
class MapListener(fife.MapChangeListener):
def __init__(self, map):
diff -r ae9f5383f5b1 -r 987307d12235 demos/rio_de_hola/settings.py
--- a/demos/rio_de_hola/settings.py Tue May 11 21:30:55 2010 +0000
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,133 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# ####################################################################
-# Copyright (C) 2005-2009 by the FIFE team
-# http://www.fifengine.de
-# This file is part of FIFE.
-#
-# FIFE is free software; you can redistribute it and/or
-# modify it under the terms of the GNU Lesser General Public
-# License as published by the Free Software Foundation; either
-# version 2.1 of the License, or (at your option) any later version.
-#
-# This library is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
-# Lesser General Public License for more details.
-#
-# You should have received a copy of the GNU Lesser General Public
-# License along with this library; if not, write to the
-# Free Software Foundation, Inc.,
-# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
-# ####################################################################
-
-import shutil
-from fife.extensions import pychan
-import os
-from fife.extensions.fife_utils import getUserDataDirectory
-try:
- import xml.etree.cElementTree as ET
-except:
- import xml.etree.ElementTree as ET
-
-class Setting(object):
- def __init__(self, *args, **kwargs):
- self._appdata = getUserDataDirectory("fife", "rio_de_hola")
-
- if not os.path.exists(self._appdata+'/settings.xml'):
- shutil.copyfile('settings-dist.xml', self._appdata+'/settings.xml')
-
-
- def onOptionsPress(self):
- self.changesRequireRestart = False
- self.isSetToDefault = False
- self.Resolutions = ['640x480', '800x600', '1024x768', '1280x800', '1440x900']
- if not hasattr(self, 'OptionsDlg'):
- self.OptionsDlg = None
- if not self.OptionsDlg:
- self.OptionsDlg = pychan.loadXML('gui/settings.xml')
- self.OptionsDlg.distributeInitialData({
- 'screen_resolution' : self.Resolutions,
- 'render_backend' : ['OpenGL', 'SDL']
- })
- self.OptionsDlg.distributeData({
- 'screen_resolution' : self.Resolutions.index(str(self.readSetting("ScreenWidth")) + 'x' + str(self.readSetting("ScreenHeight"))),
- 'render_backend' : 0 if str(self.readSetting("RenderBackend")) == "OpenGL" else 1,
- 'enable_fullscreen' : int(self.readSetting("FullScreen")),
- 'enable_sound' : int(self.readSetting("PlaySounds"))
- })
- self.OptionsDlg.mapEvents({
- 'okButton' : self.saveSettings,
- 'cancelButton' : self.OptionsDlg.hide,
- 'defaultButton' : self.setDefaults
- })
- self.OptionsDlg.show()
-
- def setDefaults(self):
- shutil.copyfile('settings-dist.xml', self._appdata+'/settings.xml')
- self.isSetToDefault = True
- self.changesRequireRestart = True
-
- def readSetting(self, name, type='int', strip=True, text=False):
- if not hasattr(self, 'tree'):
- self.tree = ET.parse(self._appdata+'/settings.xml')
- self.root_element = self.tree.getroot()
- element = self.root_element.find(name)
- if element is not None:
- element_value = element.text
- if element_value is None:
- if type == 'int':
- return 0
- elif type == 'list':
- list = []
- return list
- else:
- if type == 'int':
- return element_value.strip() if strip else element_value
- elif type == 'list':
- list = []
- list_s = []
- list = str(element_value.strip()).split(";")
- for item in list:
- item = item.strip()
- if text:
- item = item.replace('\\n', '\n')
- list_s.append(item)
- return list_s
- elif type == 'bool':
- return False if element_value.strip() == 'False' else True
- else:
- print 'Setting,', name, 'does not exist!'
-
- def setSetting(self, name, value):
- element = self.root_element.find(name)
- if element is not None:
- if value is not element.text:
- element.text = str(value)
- else:
- print 'Setting,', name, 'does not exist!'
-
- def saveSettings(self):
- screen_resolution, render_backend, enable_fullscreen, enable_sound = self.OptionsDlg.collectData('screen_resolution', 'render_backend', 'enable_fullscreen', 'enable_sound')
- render_backend = 'OpenGL' if render_backend is 0 else 'SDL'
- if render_backend != str(self.readSetting("RenderBackend")):
- self.setSetting('RenderBackend', render_backend)
- self.changesRequireRestart = True
- if int(enable_fullscreen) != int(self.readSetting("FullScreen")):
- self.setSetting('FullScreen', int(enable_fullscreen))
- self.changesRequireRestart = True
- if int(enable_sound) != int(self.readSetting("PlaySounds")):
- self.setSetting('PlaySounds', int(enable_sound))
- self.changesRequireRestart = True
- if screen_resolution != self.Resolutions.index(str(self.readSetting("ScreenWidth")) + 'x' + str(self.readSetting("ScreenHeight"))):
- self.setSetting('ScreenWidth', int(self.Resolutions[screen_resolution].partition('x')[0]))
- self.setSetting('ScreenHeight', int(self.Resolutions[screen_resolution].partition('x')[2]))
- self.changesRequireRestart = True
-
- if not self.isSetToDefault:
- self.tree.write(self._appdata+'/settings.xml')
- self.OptionsDlg.hide()
- if self.changesRequireRestart:
- RestartDlg = pychan.loadXML('gui/changes_require_restart.xml')
- RestartDlg.mapEvents({ 'closeButton' : RestartDlg.hide })
- RestartDlg.show()
diff -r ae9f5383f5b1 -r 987307d12235 demos/shooter/gui/mainmenu.xml
--- a/demos/shooter/gui/mainmenu.xml Tue May 11 21:30:55 2010 +0000
+++ b/demos/shooter/gui/mainmenu.xml Wed May 12 16:09:46 2010 +0000
@@ -7,6 +7,7 @@
+
diff -r ae9f5383f5b1 -r 987307d12235 demos/shooter/run.py
--- a/demos/shooter/run.py Tue May 11 21:30:55 2010 +0000
+++ b/demos/shooter/run.py Wed May 12 16:09:46 2010 +0000
@@ -39,6 +39,11 @@
from fife.extensions.basicapplication import ApplicationBase
from fife.extensions import pychan
from fife.extensions.pychan import widgets
+from fife.extensions.fife_settings import Setting
+
+TDS = Setting(app_name="shooter",
+ settings_file="./settings.xml",
+ settings_gui_xml="")
class ApplicationListener(eventlistenerbase.EventListenerBase):
def __init__(self, engine, world):
@@ -67,8 +72,10 @@
#This is requred if you want to use modal dialog boxes
pychan.setupModalExecution(self.mainLoop,self.breakFromMainLoop)
+
+ self._setting = TDS
- self._world = world.World(self, self.engine)
+ self._world = world.World(self, self.engine, self._setting)
self._listener = ApplicationListener(self.engine, self._world)
def requestQuit(self):
@@ -84,23 +91,29 @@
settings in here to remove the complexity of loading settings from
an XML file which would be out of scope of this demo.
"""
-
+
+ self._setting = TDS
+
engineSetting = self.engine.getSettings()
- engineSetting.setDefaultFontGlyphs(" abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?-+/():;%&`'*#=[]\"")
- engineSetting.setDefaultFontPath("fonts/FreeSans.ttf")
- engineSetting.setDefaultFontSize(16)
- engineSetting.setBitsPerPixel(16)
- engineSetting.setScreenWidth(1024)
- engineSetting.setScreenHeight(768)
- engineSetting.setRenderBackend("OpenGL")
- engineSetting.setFullScreen(0)
+ engineSetting.setDefaultFontGlyphs(str(self._setting.readSetting("FontGlyphs", strip=False)))
+ engineSetting.setDefaultFontPath(str(self._setting.readSetting("Font")))
+ engineSetting.setDefaultFontSize(int(self._setting.readSetting("DefaultFontSize")))
+ engineSetting.setBitsPerPixel(int(self._setting.readSetting("BitsPerPixel")))
+ engineSetting.setInitialVolume(float(self._setting.readSetting("InitialVolume")))
+ engineSetting.setSDLRemoveFakeAlpha(int(self._setting.readSetting("SDLRemoveFakeAlpha")))
+ engineSetting.setScreenWidth(int(self._setting.readSetting("ScreenWidth")))
+ engineSetting.setScreenHeight(int(self._setting.readSetting("ScreenHeight")))
+ engineSetting.setRenderBackend(str(self._setting.readSetting("RenderBackend")))
+ engineSetting.setFullScreen(int(self._setting.readSetting("FullScreen")))
try:
- engineSetting.setWindowTitle("FIFE - Shooter")
+ engineSetting.setWindowTitle(str(self._setting.readSetting("WindowTitle")))
+ engineSetting.setWindowIcon(str(self._setting.readSetting("WindowIcon")))
except:
pass
+
try:
- engineSetting.setImageChunkingSize(256)
+ engineSetting.setImageChunkingSize(int(self._setting.readSetting("ImageChunkSize")))
except:
pass
@@ -109,6 +122,7 @@
Initialize the LogManager.
"""
+ #@todo: load this from settings
logmodules = ["controller",
"event channel",
"audio",
@@ -132,6 +146,7 @@
#log to both the console and log file
self._log = fifelog.LogManager(self.engine, 1, 1)
+ self._log.setLevelFilter(fife.LogManager.LEVEL_DEBUG)
if logmodules:
self._log.setVisibleModules(*logmodules)
diff -r ae9f5383f5b1 -r 987307d12235 demos/shooter/scripts/gui/guis.py
--- a/demos/shooter/scripts/gui/guis.py Tue May 11 21:30:55 2010 +0000
+++ b/demos/shooter/scripts/gui/guis.py Wed May 12 16:09:46 2010 +0000
@@ -29,8 +29,9 @@
from xml.sax.xmlreader import AttributesNSImpl
class MainMenu(object):
- def __init__(self, world):
+ def __init__(self, world, setting):
self._world = world
+ self._setting = setting
self._widget = pychan.loadXML('gui/mainmenu.xml')
self._continue = self._widget.findChild(name="continue")
@@ -44,6 +45,7 @@
eventMap = {
'continue': self._world.continueGame,
'new_game': self._world.newGame,
+ 'settings': self._setting.onOptionsPress,
'credits': self._world.showCredits,
'high_scores': self._world.showHighScores,
'quit': self._world.quit,
diff -r ae9f5383f5b1 -r 987307d12235 demos/shooter/scripts/world.py
--- a/demos/shooter/scripts/world.py Tue May 11 21:30:55 2010 +0000
+++ b/demos/shooter/scripts/world.py Wed May 12 16:09:46 2010 +0000
@@ -48,11 +48,12 @@
( by inheriting from EventlistenerBase )
"""
- def __init__(self, app, engine):
+ def __init__(self, app, engine, setting):
super(World, self).__init__(engine, regKeys=True)
self._applictaion = app
self._engine = engine
+ self._setting = setting
self._timemanager = engine.getTimeManager()
self._eventmanager = engine.getEventManager()
self._model = engine.getModel()
@@ -72,7 +73,7 @@
self._soundmanager = SoundManager(self._engine)
- self._mainmenu = MainMenu(self)
+ self._mainmenu = MainMenu(self, self._setting)
self.showMainMenu()
self._hudwindow = HeadsUpDisplay(self)
diff -r ae9f5383f5b1 -r 987307d12235 demos/shooter/settings-dist.xml
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/demos/shooter/settings-dist.xml Wed May 12 16:09:46 2010 +0000
@@ -0,0 +1,24 @@
+
+ 0
+ 1
+ OpenGL
+ 1024
+ 768
+ 0
+ 5.0
+ 1
+ FIFE - Shooter Demo
+
+
+ maps/shrine.xml
+ fonts/FreeSans.ttf
+ abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789.,!?-+/():;%&`'*#=[]\"
+ 16
+ controller
+ False
+ 1
+ 0
+ False
+ False
+ 256
+
diff -r ae9f5383f5b1 -r 987307d12235 engine/python/fife/extensions/fifelog.py
--- a/engine/python/fife/extensions/fifelog.py Tue May 11 21:30:55 2010 +0000
+++ b/engine/python/fife/extensions/fifelog.py Wed May 12 16:09:46 2010 +0000
@@ -102,7 +102,14 @@
def setLevelFilter(self, fltr):
"""
Sets the minimum log level to view.
+
@param fltr: The filter level
+
+ Valid values:
+ fife.LogManager.LEVEL_DEBUG
+ fife.LogManager.LEVEL_LOG
+ fife.LogManager.LEVEL_WARN
+ fife.LogManager.LEVEL_ERROR
"""
self.lm.setLevelFilter(fltr)