Mercurial > fife-parpg
diff clients/pychan_demo/pychan_test.py @ 0:4a0efb7baf70
* Datasets becomes the new trunk and retires after that :-)
author | mvbarracuda@33b003aa-7bff-0310-803a-e67f0ece8222 |
---|---|
date | Sun, 29 Jun 2008 18:44:17 +0000 |
parents | |
children | 97d6946bd917 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/clients/pychan_demo/pychan_test.py Sun Jun 29 18:44:17 2008 +0000 @@ -0,0 +1,99 @@ +#!/usr/bin/env python +# coding: utf-8 +# This is the pychan demo client for FIFE. + +import sys, os, re + +def _jp(path): + return os.path.sep.join(path.split('/')) + +_paths = ('../../engine/swigwrappers/python', '../../engine/extensions') +for p in _paths: + if p not in sys.path: + sys.path.append(_jp(p)) + +import fife +import fifelog +import basicapplication +import pychan + +class PyChanExample(object): + def __init__(self,xmlFile): + self.xmlFile = xmlFile + self.widget = None + + def start(self): + self.widget = pychan.loadXML(self.xmlFile) + eventMap = { + 'closeButton':self.stop, + 'okButton' :self.stop + } + self.widget.mapEvents(eventMap, ignoreMissing = True) + self.widget.show() + + def stop(self): + if self.widget: + self.widget.hide() + self.widget = None + +class DemoApplication(basicapplication.ApplicationBase): + def __init__(self): + super(DemoApplication,self).__init__() + + pychan.init(self.engine,debug=True) + pychan.setupModalExecution(self.mainLoop,self.breakFromMainLoop) + + self.gui = pychan.loadXML('content/gui/demoapp.xml') + + eventMap = { + 'creditsLink' : self.showCredits, + 'closeButton' : self.quit, + 'demoList' : self.selectExample + } + self.gui.mapEvents(eventMap) + + from dynamic import DynamicExample + from styling import StylingExample + + self.examples = { + 'Absolute Positioning' : PyChanExample('content/gui/absolute.xml'), + 'Basic Styling' : StylingExample(), + 'All Widgets' : PyChanExample('content/gui/all_widgets.xml'), + 'Dynamic Widgets' : DynamicExample(), + } + self.demoList = self.gui.findChild(name='demoList') + self.demoList.items += self.examples.keys() + self.gui.show() + + self.currentExample = None + self.creditsWidget = None + + def selectExample(self): + if self.demoList.selected_item is None: return + print "selected",self.demoList.selected_item + if self.currentExample: self.currentExample.stop() + self.currentExample = self.examples[self.demoList.selected_item] + self.gui.findChild(name="xmlSource").text = open(self.currentExample.xmlFile).read() + self.currentExample.start() + + def showCredits(self): + print pychan.loadXML('content/gui/credits.xml').execute({ 'okButton' : "Yay!" }) + +class TestXMLApplication(basicapplication.ApplicationBase): + """ + Test Application. Run the pychan_test.py file + with the XML file you want to load as argument. + """ + def __init__(self,xmlfile): + super(TestXMLApplication,self).__init__() + pychan.init(self.engine,debug=True) + self.widget = pychan.loadXML(xmlfile) + self.widget.show() + +if __name__ == '__main__': + import sys + if len(sys.argv) == 2: + app = TestXMLApplication(sys.argv[1]) + else: + app = DemoApplication() + app.run()