pymoul-svn Mailing List for pyMoul (Page 7)
Status: Alpha
Brought to you by:
tiran
You can subscribe to this list here.
| 2007 |
Jan
(89) |
Feb
(108) |
Mar
(62) |
Apr
(8) |
May
(9) |
Jun
(2) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
|---|
|
From: <ti...@us...> - 2007-02-06 17:15:55
|
Revision: 149
http://pymoul.svn.sourceforge.net/pymoul/?rev=149&view=rev
Author: tiran
Date: 2007-02-06 09:15:50 -0800 (Tue, 06 Feb 2007)
Log Message:
-----------
Updated translations
Modified Paths:
--------------
pymoul/trunk/doc/XXXreport.html
pymoul/trunk/src/moul/qt/i18n/pymoul_de.qm
pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
Modified: pymoul/trunk/doc/XXXreport.html
===================================================================
--- pymoul/trunk/doc/XXXreport.html 2007-02-06 16:53:36 UTC (rev 148)
+++ pymoul/trunk/doc/XXXreport.html 2007-02-06 17:15:50 UTC (rev 149)
@@ -3,11 +3,11 @@
<body>
<h1>pyMoul - Developer report tools: XXX/TODO/FIXME comments</h1>
-<p>Generated on Mon, 05 Feb 2007 03:58:55 CET, based on Zope 3's XXX report</p>
+<p>Generated on Tue, 06 Feb 2007 18:05:35 CET, based on Zope 3's XXX report</p>
<hr>
<h3>Summary</h3>
<p>
- There are currently 94 XXX/TODO/FIXME comments.
+ There are currently 88 XXX/TODO/FIXME comments.
</p>
<hr/>
<h3>Listing</h3>
@@ -27,8 +27,10 @@
base-691- from zope.tales.tales import TALESTracebackSupplement
base-692- from zope.pagetemplate.pagetemplate \
base-693- import PageTemplateTracebackSupplement
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
-base-281- return iter(self._fd)
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:208</b><br/><pre> # TODO: inefficient, compare list with directory content
+base-209- if not os.path.isdir(self._logdir):
+base-210- LOG.warning("%s is not a directory" % logdir)
+base-211- return
</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre> # XXX use struct
base-113- if header is None:
base-114- fd = self._fd
@@ -38,21 +40,21 @@
base-129- size = self.getFileSize()
base-130- leading = 4* [None]
</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:267</b><br/><pre> # XXX: move checks to copy method!
-base-268- if os.path.isfile(fixed):
-base-269- if fixedNewer(ki, fixed):
-base-270- LOG.debug("File %s exists but was changed." % name)
+base-268- if not os.path.isfile(fixed):
+base-269- self._tocheck.append((ki, fixed))
+base-270- continue
</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:157</b><br/><pre> # TODO: write me
base-158- pass
base-159-
base-160-class Constrain(object):
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:541</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-542- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-543- # microphon missing -> OS mixer
-base-544- }
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:629</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-630-
-base-631-class GraphicsIni(ConfFile):
-base-632- _filename = 'graphics.ini'
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:554</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-555- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-556- # microphon missing -> OS mixer
+base-557- }
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:642</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-643-
+base-644-class GraphicsIni(ConfFile):
+base-645- _filename = 'graphics.ini'
</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:59</b><br/><pre> # TODO: fnmatch
base-60- return len([name for name in os.listdir(path)
base-61- if os.path.isfile(os.path.join(path, name))])
@@ -89,8 +91,10 @@
fd = open(os.path.join(path, fname), 'wb')
fd.write('dummy')
fd.close()
-</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
- return iter(self._fd)
+</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:208</b><br/><pre> # TODO: inefficient, compare list with directory content
+ if not os.path.isdir(self._logdir):
+ LOG.warning("%s is not a directory" % logdir)
+ return
</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre> # XXX use struct
if header is None:
fd = self._fd
@@ -100,18 +104,18 @@
size = self.getFileSize()
leading = 4* [None]
</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre> # XXX: move checks to copy method!
- if os.path.isfile(fixed):
- if fixedNewer(ki, fixed):
- LOG.debug("File %s exists but was changed." % name)
+ if not os.path.isfile(fixed):
+ self._tocheck.append((ki, fixed))
+ continue
</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:157</b><br/><pre> # TODO: write me
pass
class Constrain(object):
-</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:541</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:554</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
# microphon missing -> OS mixer
}
-</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:629</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:642</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
class GraphicsIni(ConfFile):
_filename = 'graphics.ini'
@@ -124,23 +128,25 @@
size = self.getFileSize()
leading = 4* [None]
</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:267</b><br/><pre> # XXX: move checks to copy method!
- if os.path.isfile(fixed):
- if fixedNewer(ki, fixed):
- LOG.debug("File %s exists but was changed." % name)
-</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
- return iter(self._fd)
-</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:156</b><br/><pre> # TODO: write me
+ if not os.path.isfile(fixed):
+ self._tocheck.append((ki, fixed))
+ else:
+</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:157</b><br/><pre> # TODO: write me
pass
class Constrain(object):
-</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:540</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:554</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
# microphon missing -> OS mixer
}
-</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:628</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:642</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
class GraphicsIni(ConfFile):
_filename = 'graphics.ini'
+</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:208</b><br/><pre> # TODO: inefficient, compare list with directory content
+ if not os.path.isdir(logdir):
+ LOG.warning("%s is not a directory" % logdir)
+ return
</pre></li><li><b>File: utilities/../src/moul/file/directory.py:59</b><br/><pre> # TODO: fnmatch
return len([name for name in os.listdir(path)
if os.path.isfile(os.path.join(path, name))])
@@ -173,103 +179,86 @@
raise NotImplementedError
def decipher(crypt, size, key):
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:151</b><br/><pre> # FIXME: signal doesn't do anything
-base-152- self.emit(SIGNAL("close()"))
-base-153- event.accept()
-base-154- event.ignore()
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:222</b><br/><pre> # TODO: msg
-base-223- return
-base-224-
-base-225- self.pb_kiimage_repair.setEnabled(False)
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:248</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
-base-249- del self._kiimage_progressbar
-base-250- self.pb_kiimage_repair.setEnabled(True)
-base:251: # TODO: msg
-base-252-
-base-253- # ************************************************************************
-base-254- # system tray
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:281</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
-base-282- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base-283- timer.start()
-base-284-
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:375</b><br/><pre> # TODO: thread safety!
-base-376- self.servers = servers
-base-377- if not self.isRunning():
-base-378- self.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:381</b><br/><pre> # TODO: thread safety!
-base-382- # emit a list of names first
-base-383- for server in self.servers:
-base-384- self.emit(SIGNAL("server(const QString&)"), server.name)
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:417</b><br/><pre> # TODO check this
-base-418- self._running = False
-base-419- self.condition.wakeAll()
-base-420-
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:149</b><br/><pre> # FIXME: signal doesn't do anything
+base-150- self.emit(SIGNAL("close()"))
+base-151- event.accept()
+base-152- event.ignore()
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:250</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
+base-251- del self._kiimage_progressbar
+base-252- self.pb_kiimage_repair.setEnabled(True)
+base-253- mb = qtutils.infoMB(self,
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:345</b><br/><pre> # TODO: change timer from every second to every minute
+base-346- self._timezone_timer = timer = QtCore.QTimer(self)
+base-347- timer.setInterval(1000) # 1 sec
+base:348: # TODO: needs optimization? run only when timer tab is active
+base-349- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
+base-350- timer.start()
+base-351-
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:442</b><br/><pre> # TODO: thread safety!
+base-443- self.servers = servers
+base-444- if not self.isRunning():
+base-445- self.start()
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:448</b><br/><pre> # TODO: thread safety!
+base-449- # emit a list of names first
+base-450- for server in self.servers:
+base-451- self.emit(SIGNAL("server(const QString&)"), server.name)
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:484</b><br/><pre> # TODO check this
+base-485- self._running = False
+base-486- self.condition.wakeAll()
+base-487-
</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:46</b><br/><pre> # TODO: translation aware
base-47- LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
base-48- if not getattr(sys, 'frozen', False):
base-49- return
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/wdysini.py.svn-base:67</b><br/><pre> self.context.emit(SIGNAL("audioini_load()")) # XXX: hard coded emit
-base:68: self.context.emit(SIGNAL("graphicsini_load()")) # XXX: hard coded emit
-base-69-
-base-70- @pyqtSignature("bool")
-base-71- def on_graphicsChanged(self, boolean):
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:143</b><br/><pre> # FIXME: signal doesn't do anything
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:149</b><br/><pre> # FIXME: signal doesn't do anything
self.emit(SIGNAL("close()"))
event.accept()
event.ignore()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:214</b><br/><pre> # TODO: msg
- return
-
- self.pb_kiimage_repair.setEnabled(False)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:241</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:250</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
del self._kiimage_progressbar
self.pb_kiimage_repair.setEnabled(True)
-
- @pyqtSignature("")
- def on_pb_log_archive_clicked(self):
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:288</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
+ mb = qtutils.infoMB(self,
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:345</b><br/><pre> # TODO: change timer from every second to every minute
+ self._timezone_timer = timer = QtCore.QTimer(self)
+ timer.setInterval(1000) # 1 sec
self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
timer.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:382</b><br/><pre> # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:442</b><br/><pre> # TODO: thread safety!
self.servers = servers
if not self.isRunning():
self.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:388</b><br/><pre> # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:448</b><br/><pre> # TODO: thread safety!
# emit a list of names first
for server in self.servers:
self.emit(SIGNAL("server(const QString&)"), server.name)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:424</b><br/><pre> # TODO check this
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:484</b><br/><pre> # TODO check this
self._running = False
self.condition.wakeAll()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:143</b><br/><pre> # FIXME: signal doesn't do anything
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:149</b><br/><pre> # FIXME: signal doesn't do anything
self.emit(SIGNAL("close()"))
event.accept()
event.ignore()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:214</b><br/><pre> # TODO: msg
- return
-
- self.pb_kiimage_repair.setEnabled(False)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:241</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:250</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
del self._kiimage_progressbar
self.pb_kiimage_repair.setEnabled(True)
-
- @pyqtSignature("")
- def on_pb_log_archive_clicked(self):
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:288</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
+ mb = qtutils.infoMB(self,
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:345</b><br/><pre> # TODO: change timer from every second to every minute
+ self._timezone_timer = timer = QtCore.QTimer(self)
+ timer.setInterval(1000) # 1 sec
self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
timer.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:382</b><br/><pre> # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:442</b><br/><pre> # TODO: thread safety!
self.servers = servers
if not self.isRunning():
self.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:388</b><br/><pre> # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:448</b><br/><pre> # TODO: thread safety!
# emit a list of names first
for server in self.servers:
self.emit(SIGNAL("server(const QString&)"), server.name)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:424</b><br/><pre> # TODO check this
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:484</b><br/><pre> # TODO check this
self._running = False
self.condition.wakeAll()
@@ -277,143 +266,131 @@
LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
if not getattr(sys, 'frozen', False):
return
-</pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py~:46</b><br/><pre> # TODO: translation aware
- LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
- if not getattr(sys, 'frozen', False):
- return
-</pre></li><li><b>File: utilities/../src/moul/qt/wdysini.py~:68</b><br/><pre> self.context.emit(SIGNAL("audioini_load()")) # XXX: hard coded emit
-
- @signalLogDecorator(LOG)
- @pyqtSignature("bool")
-</pre></li><li><b>File: utilities/../src/moul/qt/wdysini.py:67</b><br/><pre> self.context.emit(SIGNAL("audioini_load()")) # XXX: hard coded emit
-
- @pyqtSignature("bool")
- def on_graphicsChanged(self, boolean):
-</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:117</b><br/><pre># XXX: what about cygwin, bsd and others?
+</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:120</b><br/><pre># XXX: what about cygwin, bsd and others?
_thismodule = sys.modules[__name__]
if __WIN32__:
from moul.osdependent import win32 as osdep_win32
-</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:117</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-118-_thismodule = sys.modules[__name__]
-base-119-if __WIN32__:
-base-120- from moul.osdependent import win32 as osdep_win32
-</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:14</b><br/><pre><ol><li><b>File: utilities/../.svn/text-base/ez_setup.py.svn-base:92</b><br/><pre> # XXX could we install in a subprocess here?
-base-15-base-93- print >>sys.stderr, (
-base-16-base-94- "The required version of setuptools (>=%s) is not available, and\n"
-base-17-base-95- "can't be installed while this script is running. Please install\n"
-base:18:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:548</b><br/><pre> # XXX bug: doctest may report several failures in one test, they are
-base-19-base-549- # separated by a horizontal dash line. Only the first one of
-base-20-base-550- # them is now colorized properly.
-base-21-base-551- header = lines[0]
-base:22:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:603</b><br/><pre> # TODO: Scrape and colorize the traceback.
-base-23-base-604- result.append(self.colorize('doctest_got', line))
-base-24-base-605- elif remaining[0] == 'Differences (ndiff with -expected +actual):':
-base-25-base-606- result.append(self.colorize('doctest_title', remaining.pop(0))) # E. raised:
-base:26:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:623</b><br/><pre> # TODO: We only deal with the output from Zope 3's doctest module.
-base-27-base-624- # A colorizer for the Python's doctest module would be nice too.
-base-28-base-625- if doctest:
-base-29-base-626- # If we have a doctest, we do not care about this header. All the
-base:30:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:690</b><br/><pre> # TODO these should be hookable
-base-31-base-691- from zope.tales.tales import TALESTracebackSupplement
-base-32-base-692- from zope.pagetemplate.pagetemplate \
-base-33-base-693- import PageTemplateTracebackSupplement
-base:34:</pre></li><li><b>File: utilities/../.svn/text-base/setup_win32.py.svn-base:84</b><br/><pre> pexe['innosetup'] = os.environ.get('INNOSETUP') # TODO:
-base-35-base-85- pexe['inno_templates'] = "template.iss"
-base-36-base-86- pexe['app_name'] = 'pyMoul'
-base-37-base-87- pexe['includes'].extend(findPyTz())
-base:38:</pre></li><li><b>File: utilities/../.svn/text-base/distutils_upx.py.svn-base:117</b><br/><pre> sys.exit(retcode) # XXX
-base-39-base-118-
-base-40-base-119- def _upxAvailable(self):
-base-41-base-120- """Search for UPX in search path
-base:42:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
-base-43-base-269- return iter(self._fd)
-base:44:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre> # XXX use struct
-base-45-base-113- if header is None:
-base-46-base-114- fd = self._fd
-base-47-base-115- fd.seek(0)
-base:48:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:127</b><br/><pre> # XXX use struct
-base-49-base-128- if size is None:
-base-50-base-129- size = self.getFileSize()
-base-51-base-130- leading = 4* [None]
-base:52:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:156</b><br/><pre> # TODO: write me
-base-53-base-157- pass
-base-54-base-158-
-base-55-base-159-class Constrain(object):
-base:56:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:540</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-57-base-541- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-58-base-542- # microphon missing -> OS mixer
-base-59-base-543- }
-base:60:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:628</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-61-base-629-
-base-62-base-630-class GraphicsIni(ConfFile):
-base-63-base-631- _filename = 'graphics.ini'
-base:64:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:58</b><br/><pre> # TODO: fnmatch
-base-65-base-59- return len([name for name in os.listdir(path)
-base-66-base-60- if os.path.isfile(os.path.join(path, name))])
-base-67-base-61-
-base:68:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:104</b><br/><pre> # TODO: more
-base-69-base-105-
-base-70-base-106- def test_publicapi_create(self):
-base-71-base-107- inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:72:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:115</b><br/><pre> # TODO: more
-base-73-base-116-
-base-74-base-117-class AudioIniTest(GenericIniTest):
-base-75-base-118- enc = aud_enc
-base:76:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:153</b><br/><pre> #XXX self.failIf(p.isChanged())
-base-77-base-154-
-base-78-base-155- p.screenres = 0
-base-79-base-156- eq(p._get('Graphics.Width'), 800)
-base:80:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:79</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-81-base-80- fd = open(os.path.join(path, fname), 'wb')
-base-82-base-81- fd.write('dummy')
-base-83-base-82- fd.close()
-base:84:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:104</b><br/><pre> # TODO: more
-base-85-
-base-86- def test_publicapi_create(self):
-base-87- inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-base:88:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:115</b><br/><pre> # TODO: more
-base-89-
-base-90-class AudioIniTest(GenericIniTest):
-base-91- enc = aud_enc
-base:92:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:153</b><br/><pre> #XXX self.failIf(p.isChanged())
-base-93-
-base-94- p.screenres = 0
-base-95- eq(p._get('Graphics.Width'), 800)
-base:96:</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:79</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-97- fd = open(os.path.join(path, fname), 'wb')
-base-98- fd.write('dummy')
-base-99- fd.close()
-base:100:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
-base-101- return iter(self._fd)
-base:102:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre> # XXX use struct
-base-103- if header is None:
-base-104- fd = self._fd
-base-105- fd.seek(0)
-base:106:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:127</b><br/><pre> # XXX use struct
-base-107- if size is None:
-base-108- size = self.getFileSize()
-base-109- leading = 4* [None]
-base:110:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:156</b><br/><pre> # TODO: write me
-base-111- pass
-base-112-
-base-113-class Constrain(object):
-base:114:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:540</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-115- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-116- # microphon missing -> OS mixer
-base-117- }
-base:118:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:628</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-119-
-base-120-class GraphicsIni(ConfFile):
-base-121- _filename = 'graphics.ini'
-base:122:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:112</b><br/><pre> # XXX use struct
-base-123- if header is None:
-base-124- fd = self._fd
-base-125- fd.seek(0)
-base:126:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:127</b><br/><pre> # XXX use struct
-base-127- if size is None:
-base-128- size = self.getFileSize()
-base-129- leading = 4* [None]
-base:130:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:120</b><br/><pre># XXX: what about cygwin, bsd and others?
+base-121-_thismodule = sys.modules[__name__]
+base-122-if __WIN32__:
+base-123- from moul.osdependent import win32 as osdep_win32
+</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:14</b><br/><pre><ol><li><b>File: utilities/../.svn/text-base/test.py.svn-base:548</b><br/><pre> # XXX bug: doctest may report several failures in one test, they are
+base-15-base-549- # separated by a horizontal dash line. Only the first one of
+base-16-base-550- # them is now colorized properly.
+base-17-base-551- header = lines[0]
+base:18:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:603</b><br/><pre> # TODO: Scrape and colorize the traceback.
+base-19-base-604- result.append(self.colorize('doctest_got', line))
+base-20-base-605- elif remaining[0] == 'Differences (ndiff with -expected +actual):':
+base-21-base-606- result.append(self.colorize('doctest_title', remaining.pop(0))) # E. raised:
+base:22:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:623</b><br/><pre> # TODO: We only deal with the output from Zope 3's doctest module.
+base-23-base-624- # A colorizer for the Python's doctest module would be nice too.
+base-24-base-625- if doctest:
+base-25-base-626- # If we have a doctest, we do not care about this header. All the
+base:26:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:690</b><br/><pre> # TODO these should be hookable
+base-27-base-691- from zope.tales.tales import TALESTracebackSupplement
+base-28-base-692- from zope.pagetemplate.pagetemplate \
+base-29-base-693- import PageTemplateTracebackSupplement
+base:30:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+base-31-base-281- return iter(self._fd)
+base:32:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre> # XXX use struct
+base-33-base-113- if header is None:
+base-34-base-114- fd = self._fd
+base-35-base-115- fd.seek(0)
+base:36:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:127</b><br/><pre> # XXX use struct
+base-37-base-128- if size is None:
+base-38-base-129- size = self.getFileSize()
+base-39-base-130- leading = 4* [None]
+base:40:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:267</b><br/><pre> # XXX: move checks to copy method!
+base-41-base-268- if os.path.isfile(fixed):
+base-42-base-269- if fixedNewer(ki, fixed):
+base-43-base-270- LOG.debug("File %s exists but was changed." % name)
+base:44:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:157</b><br/><pre> # TODO: write me
+base-45-base-158- pass
+base-46-base-159-
+base-47-base-160-class Constrain(object):
+base:48:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:541</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-49-base-542- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-50-base-543- # microphon missing -> OS mixer
+base-51-base-544- }
+base:52:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:629</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-53-base-630-
+base-54-base-631-class GraphicsIni(ConfFile):
+base-55-base-632- _filename = 'graphics.ini'
+base:56:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:59</b><br/><pre> # TODO: fnmatch
+base-57-base-60- return len([name for name in os.listdir(path)
+base-58-base-61- if os.path.isfile(os.path.join(path, name))])
+base-59-base-62-
+base:60:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:105</b><br/><pre> # TODO: more
+base-61-base-106-
+base-62-base-107- def test_publicapi_create(self):
+base-63-base-108- inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
+base:64:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:116</b><br/><pre> # TODO: more
+base-65-base-117-
+base-66-base-118-class AudioIniTest(GenericIniTest):
+base-67-base-119- enc = aud_enc
+base:68:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:154</b><br/><pre> #XXX self.failIf(p.isChanged())
+base-69-base-155-
+base-70-base-156- p.screenres = 0
+base-71-base-157- eq(p._get('Graphics.Width'), 800)
+base:72:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:80</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
+base-73-base-81- fd = open(os.path.join(path, fname), 'wb')
+base-74-base-82- fd.write('dummy')
+base-75-base-83- fd.close()
+base:76:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:105</b><br/><pre> # TODO: more
+base-77-
+base-78- def test_publicapi_create(self):
+base-79- inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
+base:80:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:116</b><br/><pre> # TODO: more
+base-81-
+base-82-class AudioIniTest(GenericIniTest):
+base-83- enc = aud_enc
+base:84:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:154</b><br/><pre> #XXX self.failIf(p.isChanged())
+base-85-
+base-86- p.screenres = 0
+base-87- eq(p._get('Graphics.Width'), 800)
+base:88:</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:80</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
+base-89- fd = open(os.path.join(path, fname), 'wb')
+base-90- fd.write('dummy')
+base-91- fd.close()
+base:92:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+base-93- return iter(self._fd)
+base:94:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre> # XXX use struct
+base-95- if header is None:
+base-96- fd = self._fd
+base-97- fd.seek(0)
+base:98:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:127</b><br/><pre> # XXX use struct
+base-99- if size is None:
+base-100- size = self.getFileSize()
+base-101- leading = 4* [None]
+base:102:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre> # XXX: move checks to copy method!
+base-103- if os.path.isfile(fixed):
+base-104- if fixedNewer(ki, fixed):
+base-105- LOG.debug("File %s exists but was changed." % name)
+base:106:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:157</b><br/><pre> # TODO: write me
+base-107- pass
+base-108-
+base-109-class Constrain(object):
+base:110:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:541</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-111- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-112- # microphon missing -> OS mixer
+base-113- }
+base:114:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:629</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-115-
+base-116-class GraphicsIni(ConfFile):
+base-117- _filename = 'graphics.ini'
+base:118:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:112</b><br/><pre> # XXX use struct
+base-119- if header is None:
+base-120- fd = self._fd
+base-121- fd.seek(0)
+base:122:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:127</b><br/><pre> # XXX use struct
+base-123- if size is None:
+base-124- size = self.getFileSize()
+base-125- leading = 4* [None]
+base:126:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:267</b><br/><pre> # XXX: move checks to copy method!
+base-127- if os.path.isfile(fixed):
+base-128- if fixedNewer(ki, fixed):
+base-129- LOG.debug("File %s exists but was changed." % name)
+base:130:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
base-131- return iter(self._fd)
base:132:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:156</b><br/><pre> # TODO: write me
base-133- pass
@@ -427,272 +404,638 @@
base-141-
base-142-class GraphicsIni(ConfFile):
base-143- _filename = 'graphics.ini'
-base:144:</pre></li><li><b>File: utilities/../src/moul/file/directory.py:58</b><br/><pre> # TODO: fnmatch
+base:144:</pre></li><li><b>File: utilities/../src/moul/file/directory.py:59</b><br/><pre> # TODO: fnmatch
base-145- return len([name for name in os.listdir(path)
base-146- if os.path.isfile(os.path.join(path, name))])
base-147-
-base:148:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:76</b><br/><pre> # XXX: dos format
-base-149-base-77- return data.replace("\r\n", "\n")
-base-150-base-78-
-base-151-base-79-def encryptWDYS(instr, fout):
-base:152:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:86</b><br/><pre> # XXX: dos format
-base-153-base-87- instr = instr.replace("\n", "\r\n")
-base-154-base-88- fout.seek(0)
-base-155-base-89- fout.write(HEADER)
-base:156:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:70</b><br/><pre> # XXX NotImplemented
-base-157-base-71- raise NotImplementedError
-base-158-base-72-
-base-159-base-73-def decipher(crypt, size, key):
-base:160:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:76</b><br/><pre> # XXX: dos format
-base-161- return data.replace("\r\n", "\n")
-base-162-
-base-163-def encryptWDYS(instr, fout):
-base:164:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:86</b><br/><pre> # XXX: dos format
-base-165- instr = instr.replace("\n", "\r\n")
-base-166- fout.seek(0)
-base-167- fout.write(HEADER)
-base:168:</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:70</b><br/><pre> # XXX NotImplemented
-base-169- raise NotImplementedError
-base-170-
-base-171-def decipher(crypt, size, key):
-base:172:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/localization.py.svn-base:78</b><br/><pre> # TODO: other message box
-base-173-base-79- self._journal_progressbar = SimpleProgressbar(self)
-base-174-base-80- self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
-base-175-base-81- self._journal_progressbar.setProgressbar(0, 1, 0)
-base:176:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:76</b><br/><pre> # TODO: checks
-base-177-base-77- self.urudatadir.initializeFactories()
-base-178-base-78-
-base-179-base-79- # init handlers
-base:180:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:152</b><br/><pre> # FIXME: signal doesn't do anything
-base-181-base-153- self.emit(SIGNAL("close()"))
-base-182-base-154- event.accept()
-base-183-base-155- event.ignore()
-base:184:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:189</b><br/><pre> # TODO: msg
-base-185-base-190- return
-base-186-base-191-
-base-187-base-192- self.pb_kiimage_repair.setEnabled(False)
-base:188:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:219</b><br/><pre> # TODO: msg
-base-189-base-220-
-base-190-base-221- # ************************************************************************
-base-191-base-222- # graphics settings
-base:192:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:237</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
-base-193-base-238-
-base-194-base-239- @signalLogDecorator(LOG)
-base-195-base-240- def on_graphicsini_loaded(self):
-base:196:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:297</b><br/><pre> # XXX: fixme
-base-197-base-298- txt = videoModes.getVidModeHuman(idx)
-base-198-base-299- self.lb_screenres.setText(QtCore.QString(txt))
-base-199-base-300- self._graphics_ini.screenres = idx
-base:200:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:387</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
-base-201-base-388-
-base-202-base-389- @signalLogDecorator(LOG)
-base-203-base-390- def on_audioini_loaded(self):
-base:204:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:506</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
-base-205-base-507- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base-206-base-508- timer.start()
-base-207-base-509-
-base:208:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:602</b><br/><pre> # TODO: thread safety!
-base-209-base-603- self.servers = servers
-base-210-base-604- if not self.isRunning():
-base-211-base-605- self.start()
-base:212:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:608</b><br/><pre> # TODO: thread safety!
-base-213-base-609- # emit a list of names first
-base-214-base-610- for server in self.servers:
-base-215-base-611- self.emit(SIGNAL("server(const QString&)"), server.name)
-base:216:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:644</b><br/><pre> # TODO check this
-base-217-base-645- self._running = False
-base-218-base-646- self.condition.wakeAll()
-base-219-base-647-
-base:220:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:46</b><br/><pre> # TODO: translation aware
-base-221-base-47- LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base:222:base:48: return # XXX: remove
-base-223-base-49- try:
-base-224-base-50- title= QtGui.QApplication.translate("excepthook",
-base-225-base-51- "An unhandled error has occured",
-base:226:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:76</b><br/><pre> # TODO: checks
-base-227- self.urudatadir.initializeFactories()
-base-228-
-base-229- # init handlers
-base:230:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:152</b><br/><pre> # FIXME: signal doesn't do anything
-base-231- self.emit(SIGNAL("close()"))
-base-232- event.accept()
-base-233- event.ignore()
-base:234:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:189</b><br/><pre> # TODO: msg
-base-235- return
-base-236-
-base-237- self.pb_kiimage_repair.setEnabled(False)
-base:238:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:236</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
-base-239-
-base-240- @signalLogDecorator(LOG)
-base-241- def on_graphicsini_loaded(self):
-base:242:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:296</b><br/><pre> # XXX: fixme
-base-243- txt = videoModes.getVidModeHuman(idx)
-base-244- self.lb_screenres.setText(QtCore.QString(txt))
-base-245- self._graphics_ini.screenres = idx
-base:246:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:386</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
-base-247-
-base-248- @signalLogDecorator(LOG)
-base-249- def on_audioini_loaded(self):
-base:250:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:505</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
-base-251- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base-252- timer.start()
-base-253-
-base:254:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:601</b><br/><pre> # TODO: thread safety!
-base-255- self.servers = servers
-base-256- if not self.isRunning():
-base-257- self.start()
-base:258:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:607</b><br/><pre> # TODO: thread safety!
-base-259- # emit a list of names first
-base-260- for server in self.servers:
-base-261- self.emit(SIGNAL("server(const QString&)"), server.name)
-base:262:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:643</b><br/><pre> # TODO check this
-base-263- self._running = False
-base-264- self.condition.wakeAll()
-base-265-
-base:266:</pre></li><li><b>File: utilities/../src/moul/qt/localization.py:78</b><br/><pre> # TODO: other message box
-base-267- self._journal_progressbar = SimpleProgressbar(self)
-base-268- self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
-base-269- self._journal_progressbar.setProgressbar(0, 1, 0)
-base:270:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:76</b><br/><pre> # TODO: checks
-base-271- self.urudatadir.initializeFactories()
-base-272-
-base-273- # init handlers
-base:274:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:152</b><br/><pre> # FIXME: signal doesn't do anything
-base-275- self.emit(SIGNAL("close()"))
-base-276- event.accept()
-base-277- event.ignore()
-base:278:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:189</b><br/><pre> # TODO: msg
-base-279- return
-base-280-
-base-281- self.pb_kiimage_repair.setEnabled(False)
-base:282:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:219</b><br/><pre> # TODO: msg
-base-283-
-base-284- # ************************************************************************
-base-285- # graphics settings
-base:286:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:237</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
-base-287-
-base-288- @signalLogDecorator(LOG)
-base-289- def on_graphicsini_loaded(self):
-base:290:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:297</b><br/><pre> # XXX: fixme
-base-291- txt = videoModes.getVidModeHuman(idx)
-base-292- self.lb_screenres.setText(QtCore.QString(txt))
-base-293- self._graphics_ini.screenres = idx
-base:294:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:387</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
-base-295-
-base-296- @signalLogDecorator(LOG)
-base-297- def on_audioini_loaded(self):
-base:298:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:506</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
-base-299- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base-300- timer.start()
-base-301-
-base:302:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:602</b><br/><pre> # TODO: thread safety!
-base-303- self.servers = servers
-base-304- if not self.isRunning():
-base-305- self.start()
-base:306:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:608</b><br/><pre> # TODO: thread safety!
-base-307- # emit a list of names first
-base-308- for server in self.servers:
-base-309- self.emit(SIGNAL("server(const QString&)"), server.name)
-base:310:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:644</b><br/><pre> # TODO check this
-base-311- self._running = False
-base-312- self.condition.wakeAll()
-base-313-
-base:314:</pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py:46</b><br/><pre> # TODO: translation aware
-base-315- LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base-316- try:
-base-317- title= QtGui.QApplication.translate("excepthook",
-</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:319</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:116</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-320-_thismodule = sys.modules[__name__]
-base-321-if __WIN32__:
-base-322- from moul.osdependent import win32 as osdep_win32
-base:323:</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:116</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-324-base-117-_thismodule = sys.modules[__name__]
-base-325-base-118-if __WIN32__:
-base-326-base-119- from moul.osdependent import win32 as osdep_win32
-base:327:</pre></li><li><b>File: utilities/../test.py:548</b><br/><pre> # XXX bug: doctest may report several failures in one test, they are
-base-328- # separated by a horizontal dash line. Only the first one of
-base-329- # them is now colorized properly.
-base-330- header = lines[0]
-base:331:</pre></li><li><b>File: utilities/../test.py:603</b><br/><pre> # TODO: Scrape and colorize the traceback.
-base-332- result.append(self.colorize('doctest_got', line))
-base-333- elif remaining[0] == 'Differences (ndiff with -expected +actual):':
-base-334- result.append(self.colorize('doctest_title', remaining.pop(0))) # E. raised:
-base:335:</pre></li><li><b>File: utilities/../test.py:623</b><br/><pre> # TODO: We only deal with the output from Zope 3's doctest module.
-base-336- # A colorizer for the Python's doctest module would be nice too.
-base-337- if doctest:
-base-338- # If we have a doctest, we do not care about this header. All the
-base:339:</pre></li><li><b>File: utilities/../test.py:690</b><br/><pre> # TODO these should be hookable
-base-340- from zope.tales.tales import TALESTracebackSupplement
-base-341- from zope.pagetemplate.pagetemplate \
-base-342- import PageTemplateTracebackSupplement
-base:343:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:6</b><br/><pre># Todo:
-base-344-base-7-#
-base-345-base-8-# Make 'unbuffered' a per-target option
-base-346-base-9-
-base:347:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:357</b><br/><pre>## extra_path = ["."] # XXX
-base-348-base-358- extra_path = []
-base-349-base-359- dlls, unfriendly_dlls, other_depends = \
-base-350-base-360- self.find_dependend_dlls(dlls,
-base:351:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:403</b><br/><pre> # XXX all dlls are copied into the same directory - a flat name space.
-base-352-base-404- # sooner or later that will give conflicts.
-base-353-base-405- dst = os.path.join(self.lib_dir, os.path.basename(item.__file__))
-base-354-base-406- self.copy_file(src, dst, preserve_mode=0)
-base:355:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:919</b><br/><pre> # XXX On Windows NT, the SYSTEM directory is also searched
-base-356-base-920- exedir = os.path.dirname(sys.executable)
-base-357-base-921- syspath = os.environ['PATH']
-base-358-base-922- loadpath = ';'.join([exedir, sysdir, windir, syspath])
-base:359:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:1329</b><br/><pre># XXX This list is NOT complete (it cannot be)
-base-360-base-1330-# Note: ALL ENTRIES MUST BE IN LOWER CASE!
-base-361-base-1331-EXCLUDED_DLLS = (
-base-362-base-1332- "advapi32.dll",
-base:363:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:1362</b><br/><pre># XXX Perhaps it would be better to assume dlls from the systemdir are system dlls,
-base-364-base-1363-# and make some exceptions for known dlls, like msvcr71, pythonXY.dll, and so on?
-base-365-base-1364-def isSystemDLL(pathname):
-base-366-base-1365- if os.path.basename(pathname).lower() in ("msvcr71.dll", "msvcr71d.dll"):
-base:367:</pre></li><li><b>File: utilities/../contrib/build_exe.py:6</b><br/><pre># Todo:
-base-368-#
-base-369-# Make 'unbuffered' a per-target option
-base-370-
-base:371:</pre></li><li><b>File: utilities/../contrib/build_exe.py:357</b><br/><pre>## extra_path = ["."] # XXX
-base-372- extra_path = []
-base-373- dlls, unfriendly_dlls, other_depends = \
-base-374- self.find_dependend_dlls(dlls,
-base:375:</pre></li><li><b>File: utilities/../contrib/build_exe.py:403</b><br/><pre> # XXX all dlls are copied into the same directory - a flat name space.
-base-376- # sooner or later that will give conflicts.
-base-377- dst = os.path.join(self.lib_dir, os.path.basename(item.__file__))
-base-378- self.copy_file(src, dst, preserve_mode=0)
-base:379:</pre></li><li><b>File: utilities/../contrib/build_exe.py:919</b><br/><pre> # XXX On Windows NT, the SYSTEM directory is also searched
-base-380- exedir = os.path.dirname(sys.executable)
-base-381- syspath = os.environ['PATH']
-base-382- loadpath = ';'.join([exedir, sysdir, windir, syspath])
-base:383:</pre></li><li><b>File: utilities/../contrib/build_exe.py:1329</b><br/><pre># XXX This list is NOT complete (it cannot be)
-base-384-# Note: ALL ENTRIES MUST BE IN LOWER CASE!
-base-385-EXCLUDED_DLLS = (
-base-386- "advapi32.dll",
-base:387:</pre></li><li><b>File: utilities/../contrib/build_exe.py:1362</b><br/><pre># XXX Perhaps it would be better to assume dlls from the systemdir are system dlls,
-base-388-# and make some exceptions for known dlls, like msvcr71, pythonXY.dll, and so on?
-base-389-def isSystemDLL(pathname):
-base-390- if os.path.basename(pathname).lower() in ("msvcr71.dll", "msvcr71d.dll"):
-base:391:</pre></li><li><b>File: utilities/../utilities/.svn/text-base/setup_win32.py.svn-base:84</b><br/><pre> pexe['innosetup'] = os.environ.get('INNOSETUP') # TODO:
-base-392-base-85- pexe['inno_templates'] = "template.iss"
-base-393-base-86- pexe['app_name'] = 'pyMoul'
-base-394-base-87- pexe['includes'].extend(findPyTz())
-base:395:</pre></li><li><b>File: utilities/../utilities/.svn/text-base/distutils_upx.py.svn-base:117</b><br/><pre> sys.exit(retcode) # XXX
-base-396-base-118-
-base-397-base-119- def _upxAvailable(self):
-base-398-base-120- """Search for UPX in search path
-base:399:</pre></li><li><b>File: utilities/../utilities/.svn/text-base/ez_setup.py.svn-base:92</b><br/><pre> # XXX could we install in a subprocess here?
-base-400-base-93- print >>sys.stderr, (
-base-401-base-94- "The required version of setuptools (>=%s) is not available, and\n"
-base-402-base-95- "can't be installed while this script is running. Please install\n"
-base:403:</pre></li><li><b>File: utilities/../utilities/setup_win32.py:84</b><br/><pre> pexe['innosetup'] = os.environ.get('INNOSETUP') # TODO:
-base-404- pexe['inno_templates'] = "template.iss"
-base-405- pexe['app_name'] = 'pyMoul'
-base-406- pexe['includes'].extend(findPyTz())
-base:407:</pre></li><li><b>File: utilities/../utilities/distutils_upx.py:117</b><br/><pre> sys.exit(retcode) # XXX
-base-408-
-base-409- def _upxAvailable(self):
-base-410- """Search for UPX in search path
+base:148:</pre></li><li><b>File: utilities/../src/moul/file/directory.py~:59</b><br/><pre> # TODO: fnmatch
+base-149- return len([name for name in os.listdir(path)
+base-150- if os.path.isfile(os.path.join(path, name))])
+base-151-
+base:152:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:77</b><br/><pre> # XXX: dos format
+base-153-base-78- return data.replace("\r\n", "\n")
+base-154-base-79-
+base-155-base-80-def encryptWDYS(instr, fout):
+base:156:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:87</b><br/><pre> # XXX: dos format
+base-157-base-88- instr = instr.replace("\n", "\r\n")
+base-158-base-89- fout.seek(0)
+base-159-base-90- fout.write(HEADER)
+base:160:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:71</b><br/><pre> # XXX NotImplemented
+base-161-base-72- raise NotImplementedError
+base-162-base-73-
+base-163-base-74-def decipher(crypt, size, key):
+base:164:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:77</b><br/><pre> # XXX: dos format
+base-165- return data.replace("\r\n", "\n")
+base-166-
+base-167-def encryptWDYS(instr, fout):
+base:168:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:87</b><br/><pre> # XXX: dos format
+base-169- instr = instr.replace("\n", "\r\n")
+base-170- fout.seek(0)
+base-171- fout.write(HEADER)
+base:172:</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:71</b><br/><pre> # XXX NotImplemented
+base-173- raise NotImplementedError
+base-174-
+base-175-def decipher(crypt, size, key):
+base:176:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:151</b><br/><pre> # FIXME: signal doesn't do anything
+base-177-base-152- self.emit(SIGNAL("close()"))
+base-178-base-153- event.accept()
+base-179-base-154- event.ignore()
+base:180:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:222</b><br/><pre> # TODO: msg
+base-181-base-223- return
+base-182-base-224-
+base-183-base-225- self.pb_kiimage_repair.setEnabled(False)
+base:184:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:248</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
+base-185-base-249- del self._kiimage_progressbar
+base-186-base-250- self.pb_kiim...
[truncated message content] |
|
From: <ti...@us...> - 2007-02-06 16:53:38
|
Revision: 148
http://pymoul.svn.sourceforge.net/pymoul/?rev=148&view=rev
Author: tiran
Date: 2007-02-06 08:53:36 -0800 (Tue, 06 Feb 2007)
Log Message:
-----------
Do not remove build dir
Fixed some typos in i18n code
Modified Paths:
--------------
pymoul/trunk/build.bat
pymoul/trunk/installer.bat
pymoul/trunk/setup.py
pymoul/trunk/src/moul/qt/i18n/__init__.py
Modified: pymoul/trunk/build.bat
===================================================================
--- pymoul/trunk/build.bat 2007-02-06 16:48:27 UTC (rev 147)
+++ pymoul/trunk/build.bat 2007-02-06 16:53:36 UTC (rev 148)
@@ -1,5 +1,4 @@
@echo off
-rd /S /Q build
cls
set PYTHONPATH=src
python setup.py py2exe
Modified: pymoul/trunk/installer.bat
===================================================================
--- pymoul/trunk/installer.bat 2007-02-06 16:48:27 UTC (rev 147)
+++ pymoul/trunk/installer.bat 2007-02-06 16:53:36 UTC (rev 148)
@@ -1,5 +1,4 @@
@echo off
-rd /S /Q build
cls
set PYTHONPATH=src
set INNOSETUP=yes
Modified: pymoul/trunk/setup.py
===================================================================
--- pymoul/trunk/setup.py 2007-02-06 16:48:27 UTC (rev 147)
+++ pymoul/trunk/setup.py 2007-02-06 16:53:36 UTC (rev 148)
@@ -60,7 +60,7 @@
install_requires = ["pytz>=2006p",],
data_files = [
('docs', list(glob('*.txt'))),
- ('i18', list(glob('src/moul/qt/i18n/pymoul_*.*'))),
+ ('i18n', list(glob('src/moul/qt/i18n/pymoul_*.qm'))),
],
package_dir = {'' : 'src'},
packages = find_packages('src', exclude="moul.qt"),
Modified: pymoul/trunk/src/moul/qt/i18n/__init__.py
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 16:48:27 UTC (rev 147)
+++ pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 16:53:36 UTC (rev 148)
@@ -56,12 +56,11 @@
@rtype: str or None
"""
if __FROZEN__:
- basedir = os.path.dirname(sys.prefix)
- qm = os.path.join(basedir, 'i18n', '%s.qm')
+ qm = os.path.join(sys.prefix, 'i18n', '%s.qm' % name)
if os.path.isfile(qm):
return open(qm, 'rb').read()
else:
- return None
+ LOG.debug("QM file not found: %s" % qm)
else:
return TRANSLATIONS.get(name, None)
@@ -92,5 +91,6 @@
LOG.info("Loading translation %s" % longname)
if qm is not None:
+ #LOG.debug("len(qm) %i" % len(qm))
translator.load(qm, len(qm))
app.installTranslator(translator)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-06 16:48:49
|
Revision: 147
http://pymoul.svn.sourceforge.net/pymoul/?rev=147&view=rev
Author: tiran
Date: 2007-02-06 08:48:27 -0800 (Tue, 06 Feb 2007)
Log Message:
-----------
Fixed import errors
Fixed already running msg
Modified Paths:
--------------
pymoul/trunk/src/moul/file/chatlog.py
pymoul/trunk/src/moul/qt/i18n/__init__.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/moulqt.py
Property Changed:
----------------
pymoul/trunk/src/moul/qt/i18n/__init__.py
Modified: pymoul/trunk/src/moul/file/chatlog.py
===================================================================
--- pymoul/trunk/src/moul/file/chatlog.py 2007-02-06 15:58:25 UTC (rev 146)
+++ pymoul/trunk/src/moul/file/chatlog.py 2007-02-06 16:48:27 UTC (rev 147)
@@ -73,9 +73,6 @@
r"(?P<ch>\d{2})(?P<cm>\d{2})_(?P<sh>\d{2})(?P<sm>\d{2})\.txt", # hhmm_hhmm.txt
RE_FLAGS
)
-#CHATLOG_FNAME_RE = re.compile(
-# r"[cC]hat.*\.log", # chat*.log
-# RE_FLAGS)
LOG = getLogger('moul.chat')
@@ -203,9 +200,16 @@
def __init__(self, logdir):
self._logdir = logdir
self._logfiles = [] # list of ChatlogViews
+ self.refresh()
- if not os.path.isdir(logdir):
+ def refresh(self):
+ """Refresh list
+ """
+ # TODO: inefficient, compare list with directory content
+ if not os.path.isdir(self._logdir):
LOG.warning("%s is not a directory" % logdir)
+ return
+ self._logfiles[:] = []
self._findChatlogs()
def _findChatlogs(self):
@@ -218,10 +222,12 @@
chatlog = ChatlogView(fname)
if chatlog.date is not None:
self._logfiles.append(chatlog)
+ self._logfiles.sort(key=lambda element:(element.date, element.name))
- @property
- def names(self):
- return [clv.name for clv in self]
+ def __len__(self):
+ """len() support
+ """
+ return len(self._logfiles)
def __iter__(self):
return iter(self._logfiles)
@@ -281,8 +287,8 @@
def view(self):
"""View the file
- Returns an iterator which iterates over the lines of the file
+ @return: file content
+ @rtype: str
"""
self.open()
- # TODO: add parser, currently simply iterates over the file
- return iter(self._fd)
+ self._fd.read()
Modified: pymoul/trunk/src/moul/qt/i18n/__init__.py
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 15:58:25 UTC (rev 146)
+++ pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 16:48:27 UTC (rev 147)
@@ -20,8 +20,8 @@
moul.qt.i18n
"""
__author__ = "Christian Heimes"
-__version__ = "$Id: __init__.py 108 2007-01-31 14:46:54Z tiran $"
-__revision__ = "$Revision: 108 $"
+__version__ = "$Id$"
+__revision__ = "$Revision$"
import sys
Property changes on: pymoul/trunk/src/moul/qt/i18n/__init__.py
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-06 15:58:25 UTC (rev 146)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-06 16:48:27 UTC (rev 147)
@@ -24,12 +24,13 @@
__version__ = "$Id$"
__revision__ = "$Revision$"
-import sys
+import os
from PyQt4 import QtCore
from PyQt4 import QtGui
from PyQt4.QtCore import Qt
from PyQt4.QtCore import SIGNAL
from PyQt4.QtCore import pyqtSignature
+import sys
from moul import metadata
from moul.config import lookupDir
@@ -96,32 +97,6 @@
self.on_moulIsRunning)
self._moulrunning_thread.startChecker(5.0) # check now and every 5 seconds
- about = self.trUtf8("""
-<center>
-<h3>Tool for Myst Online : Uru Live</h3>
-
-<p>(c) 2007 Christian Heimes</p>
-
-<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
-</center>
-
-<h4>Bug reporting</h4>
-<p align="justify">If you encountered a bug please <a href="http://sourceforge.net/tracker/?group_id=186624&atid=918033l">
-create a bug report</a> with description of your actions along with the log file. You can find the log file at:</p>
-
-<tt align="center">%1/pymoul.log</tt>
-
-<h4>Donation</h4>
-<p align="justify">If you like the tool please consider to <a href="%2">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my <a href="%2">PayPal account</a> using your PayPal account, credit card or bank account. You can also use the SourceForget.net <a href="%3">donate page</a>. Your money will be used to found my MOUL account and new hardware for my 4 years old computer.</p>
-
-<p>sincerely yours<br>
-Tiran [KI: #00025784]</p>
- """)
- paypal_url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&bus...@ch...&item_name=Donate for Tiran's open source activities&page_style=PayPal&no_shipping=0&cn=Your note for me&tax=0¤cy_code=EUR&lc=DE&bn=PP-DonationsBF&charset=UTF-8"
- sfdonate_url = "https://sourceforge.net/donate/index.php?user_id=560817"
- self.tb_abouttext.setHtml(about.arg(lookupDir('pymouldir'), paypal_url,
- sfdonate_url))
-
def on_moulIsRunning(self, boolean):
"""
@qtslot moulIsRunning(bool): notify if moul is running
@@ -329,7 +304,34 @@
def _about_init(self):
self.tb_license.setHtml('<pre style="font-size:7pt;">' +
metadata.LICENSE + '</pre>')
+ about = self.trUtf8("""
+<center>
+<h3>Tool for Myst Online : Uru Live</h3>
+<p>(c) 2007 Christian Heimes</p>
+
+<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
+</center>
+
+<h4>Bug reporting</h4>
+<p align="justify">If you encountered a bug please <a href="http://sourceforge.net/tracker/?group_id=186624&atid=918033l">
+create a bug report</a> with description of your actions along with the log file. You can find the log file at:</p>
+
+<tt align="center">%1</tt>
+
+<h4>Donation</h4>
+<p align="justify">If you like the tool please consider to <a href="%2">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my <a href="%2">PayPal account</a> using your PayPal account, credit card or bank account. You can also use the SourceForget.net <a href="%3">donate page</a>. Your money will be used to found my MOUL account and new hardware for my 4 years old computer.</p>
+
+<p>sincerely yours<br>
+Tiran [KI: #00025784]</p>
+ """)
+ paypal_url = "https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&bus...@ch...&item_name=Donate for Tiran's open source activities&page_style=PayPal&no_shipping=0&cn=Your note for me&tax=0¤cy_code=EUR&lc=DE&bn=PP-DonationsBF&charset=UTF-8"
+ sfdonate_url = "https://sourceforge.net/donate/index.php?user_id=560817"
+ self.tb_abouttext.setHtml(about.arg(
+ os.path.join(lookupDir('pymouldir'),'pymoul.log'),
+ paypal_url,
+ sfdonate_url))
+
# ************************************************************************
# time zones
def _timezone_init(self):
@@ -340,6 +342,7 @@
self._timezone_update()
# create a timer to update the display every second
+ # TODO: change timer from every second to every minute
self._timezone_timer = timer = QtCore.QTimer(self)
timer.setInterval(1000) # 1 sec
# TODO: needs optimization? run only when timer tab is active
Modified: pymoul/trunk/src/moul/qt/moulqt.py
===================================================================
--- pymoul/trunk/src/moul/qt/moulqt.py 2007-02-06 15:58:25 UTC (rev 146)
+++ pymoul/trunk/src/moul/qt/moulqt.py 2007-02-06 16:48:27 UTC (rev 147)
@@ -58,15 +58,15 @@
singleapp = SimpleSingleApp('pymoulqt', path=getPyMoulDataDir(check=True))
try:
singleapp.acquire()
+ createLogfile()
except OSError:
- mb = criticalMB(app,
+ mb = criticalMB(None,
app.trUtf8("pyMoul QT already running"),
app.trUtf8("""An instance of pyMoul QT is already running!""")
)
mb.exec_()
sys.exit(1)
- createLogfile()
setupQtExceptHook()
installTranslator(app)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-06 15:58:24
|
Revision: 146
http://pymoul.svn.sourceforge.net/pymoul/?rev=146&view=rev
Author: tiran
Date: 2007-02-06 07:58:25 -0800 (Tue, 06 Feb 2007)
Log Message:
-----------
py2exe doesn't support pkg_resources :(
Modified Paths:
--------------
pymoul/trunk/src/moul/qt/i18n/__init__.py
Modified: pymoul/trunk/src/moul/qt/i18n/__init__.py
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 15:15:30 UTC (rev 145)
+++ pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 15:58:25 UTC (rev 146)
@@ -23,7 +23,9 @@
__version__ = "$Id: __init__.py 108 2007-01-31 14:46:54Z tiran $"
__revision__ = "$Revision: 108 $"
-import pkg_resources
+
+import sys
+import os
from PyQt4 import QtCore
from moul.osdependent import __FROZEN__
@@ -31,17 +33,39 @@
LOG = getLogger('moul.qt.i18n')
+# pkg_resources is incompatible with os.listdir()
LANGS = ('de', 'es', 'fr', 'it', 'nl')
-TRANSLATIONS = {}
+PREFIX = "pymoul"
-# cannot use os.listdir here!
+if not __FROZEN__:
+ # pkg_resources don't work under py2exe yet
+ import pkg_resources
+ TRANSLATIONS = {}
+ for lang in LANGS:
+ name = "%s_%s" % (PREFIX, lang)
+ qm = pkg_resources.resource_string(__name__, "%s.qm" % name)
+ TRANSLATIONS[name] = qm
-for lang in LANGS:
- name = "pymoul_%s" % lang
- qm = pkg_resources.resource_string(__name__, "%s.qm" % name)
- TRANSLATIONS[name] = qm
+def loadTranslationFile(name):
+ """
+ Load a translation file from disk
+
+ @param name: name of the file e.g. pymoul_de for pymoul_de.qm
+ @type name: str
+ @return: binary file data or None
+ @rtype: str or None
+ """
+ if __FROZEN__:
+ basedir = os.path.dirname(sys.prefix)
+ qm = os.path.join(basedir, 'i18n', '%s.qm')
+ if os.path.isfile(qm):
+ return open(qm, 'rb').read()
+ else:
+ return None
+ else:
+ return TRANSLATIONS.get(name, None)
-def installTranslator(app, prefix="pymoul"):
+def installTranslator(app):
"""
Installs a translator for the ap
"""
@@ -53,19 +77,20 @@
except:
lang, country = locale, ''
- longname = "%s_%s" % (prefix, locale)
- shortname = "%s_%s" % (prefix, lang)
- qm = None
- if longname in TRANSLATIONS:
+ longname = "%s_%s" % (PREFIX, locale)
+ shortname = "%s_%s" % (PREFIX, lang)
+
+ qm = loadTranslationFile(longname)
+ if qm is None:
+ qm = loadTranslationFile(shortname)
+ if qm is None:
+ if lang != 'en':
+ LOG.warning("No translation found!")
+ else:
+ LOG.info("Loading translation %s" % shortname)
+ else:
LOG.info("Loading translation %s" % longname)
- qm = TRANSLATIONS[longname]
- elif shortname in TRANSLATIONS:
- LOG.info("Loading translation %s" % shortname)
- qm = TRANSLATIONS[shortname]
if qm is not None:
translator.load(qm, len(qm))
app.installTranslator(translator)
- else:
- if shortname != 'en':
- LOG.warning("No translation found!")
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-06 15:15:33
|
Revision: 145
http://pymoul.svn.sourceforge.net/pymoul/?rev=145&view=rev
Author: tiran
Date: 2007-02-06 07:15:30 -0800 (Tue, 06 Feb 2007)
Log Message:
-----------
Use pkg_resources for qm files
py2exe support for name space packages
some vars renamed to keep naming consistent
Modified Paths:
--------------
pymoul/trunk/Makefile.in
pymoul/trunk/src/moul/__init__.py
pymoul/trunk/src/moul/file/chatlog.py
pymoul/trunk/src/moul/file/directory.py
pymoul/trunk/src/moul/file/plasmalog.py
pymoul/trunk/src/moul/qt/i18n/__init__.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/moulqt.py
pymoul/trunk/src/moul/qt/utils.py
Removed Paths:
-------------
pymoul/trunk/src/moul/qt/i18n/translations.qrc
pymoul/trunk/src/moul/qt/i18n/translations_rc.py
Modified: pymoul/trunk/Makefile.in
===================================================================
--- pymoul/trunk/Makefile.in 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/Makefile.in 2007-02-06 15:15:30 UTC (rev 145)
@@ -85,10 +85,6 @@
pylupdate4 `$(FINDQT)` -ts src/moul/qt/i18n/pymoul_$${L}.ts;\
lrelease src/moul/qt/i18n/pymoul_$${L}.ts; \
done
- rm src/moul/qt/i18n/translations_rc.py
- # do not compress qm files so the translator can load it
- pyrcc4 -no-compress -o ./src/moul/qt/i18n/translations_rc.py \
- ./src/moul/qt/i18n/translations.qrc
hash:
cd dist && $(FINDHASH) | xargs md5sum >md5.txt
Modified: pymoul/trunk/src/moul/__init__.py
===================================================================
--- pymoul/trunk/src/moul/__init__.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/__init__.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -6,3 +6,9 @@
from pkgutil import extend_path
__path__ = extend_path(__path__, __name__)
+# py2exe support for namespace packages
+try:
+ import modulefinder
+except ImportError:
+ for p in __path__:
+ modulefinder.AddPackagePath(__name__, p)
Modified: pymoul/trunk/src/moul/file/chatlog.py
===================================================================
--- pymoul/trunk/src/moul/file/chatlog.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/file/chatlog.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -87,27 +87,33 @@
_filename = "chatlog_%(sY)02i%(sM)02i%(sD)02i_%(ch)02i%(cm)02i_%(sh)02i%(sm)02i.txt"
def __init__(self, srcdir, destdir):
- self._path = srcdir
- self._dest = destdir
+ self._srcdir = srcdir
+ self._destdir = destdir
+ LOG.debug("ChatlogMover: %s -> %s" % (srcdir, destdir))
+ self.clear()
+
+ def clear(self):
+ """
+ """
self._logs = []
- LOG.debug("ChatlogMover: %s -> %s" % (srcdir, destdir))
- if not os.path.isdir(srcdir):
- LOG.warning("%s is not a directory" % srcdir)
- if not os.path.isdir(destdir):
- LOG.info("Creating chatlog directory %s" % destdir)
+ if not os.path.isdir(self._srcdir):
+ LOG.warning("%s is not a directory" % self._srcdir)
+ if not os.path.isdir(self._destdir):
+ LOG.info("Creating chatlog directory %s" % self._destdir)
os.mkdir(destdir)
def findLogs(self):
- """Find log files in self._path
+ """Find log files in self._srcdir
Also calls and stores _findCreated(), modtime() and _makeFile()
for the file.
"""
- for file in os.listdir(self._path):
+ self.clear()
+ for file in os.listdir(self._srcdir):
if not fnmatch(file.lower(), self._pat):
continue
- fpath = os.path.join(self._path, file)
+ fpath = os.path.join(self._srcdir, file)
if not os.path.isfile(fpath):
continue
LOG.debug("Found chatlog %s" % fpath)
@@ -121,10 +127,11 @@
'modtime' : mtime,
'created' : created,
'newname' : newname,
- 'newpath' : os.path.join(self._dest, newname),
+ 'newpath' : os.path.join(self._destdirt, newname),
}
self._logs.append(details)
+ return self._logs
def _findCreated(self, fpath):
"""Parse chatlog to find "started" date
@@ -170,8 +177,8 @@
def moveChatlogs(self):
"""Move all chatlogs
"""
- for details in self._logs:
- self.moveChatlog(details)
+ for name in iter(self):
+ pass
def __len__(self):
"""len() suppor
Modified: pymoul/trunk/src/moul/file/directory.py
===================================================================
--- pymoul/trunk/src/moul/file/directory.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/file/directory.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -168,13 +168,13 @@
}
_factories = {
- 'logchat' : (ChatlogMover, ('logs', 'chatlogs')),
- 'logzip' : (PlasmalogZipper, ('logs', 'zipped')),
+ 'logzipper' : (PlasmalogZipper, ('logs', 'zipped')),
'kiimages' : (KIImageFixer, ('kiimages', 'fixed')),
'avatars' : (KIImageFixer, ('avatars', 'fixed')),
'graphicsini' : (GraphicsIni, ('ini',)),
'audioini' : (AudioIni, ('ini',)),
- 'chatlogs' : (ChatlogDirectoryView, ('chatlogs',)),
+ 'chatmover' : (ChatlogMover, ('logs', 'chatlogs')),
+ 'chatview' : (ChatlogDirectoryView, ('chatlogs',)),
'zipped' : (DirectoryCount, ('zipped',)),
'fixed' : (DirectoryCount, ('fixed',)),
}
Modified: pymoul/trunk/src/moul/file/plasmalog.py
===================================================================
--- pymoul/trunk/src/moul/file/plasmalog.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/file/plasmalog.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -47,19 +47,22 @@
self._destdir = destdir
self._doremove = True
self._dozip = True
+ LOG.debug("PlasmalogZipper: %s -> %s" % (srcdir, destdir))
- LOG.debug("PlasmalogZipper: %s -> %s" % (srcdir, destdir))
+ def clear(self):
+ """Clear state
+ """
self._zipped_dirs = {} # dirname -> zipfile
self._not_removed = [] # files with full path
- if not os.path.isdir(srcdir):
+ if not os.path.isdir(self._srcdir):
LOG.warning("%s is not a directory" % srcdir)
if not self.isPlasmaLogDir():
self._ispldir = False
LOG.warning("%s is not a plasma log directory" % srcdir)
else:
self._ispldir = True
- if not os.path.isdir(destdir):
+ if not os.path.isdir(self._destdir):
LOG.info("Creating chatlog directory %s" % destdir)
os.mkdir(destdir)
@@ -91,6 +94,7 @@
This function also zips subdirectories.
"""
+ self.clear()
for root, dirs, files in os.walk(self._srcdir):
stamp = self.isPlasmaLogDir(root)
if not stamp:
Modified: pymoul/trunk/src/moul/qt/i18n/__init__.py
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -23,3 +23,49 @@
__version__ = "$Id: __init__.py 108 2007-01-31 14:46:54Z tiran $"
__revision__ = "$Revision: 108 $"
+import pkg_resources
+from PyQt4 import QtCore
+
+from moul.osdependent import __FROZEN__
+from moul.log import getLogger
+
+
+LOG = getLogger('moul.qt.i18n')
+LANGS = ('de', 'es', 'fr', 'it', 'nl')
+TRANSLATIONS = {}
+
+# cannot use os.listdir here!
+
+for lang in LANGS:
+ name = "pymoul_%s" % lang
+ qm = pkg_resources.resource_string(__name__, "%s.qm" % name)
+ TRANSLATIONS[name] = qm
+
+def installTranslator(app, prefix="pymoul"):
+ """
+ Installs a translator for the ap
+ """
+ translator = QtCore.QTranslator(app)
+ locale = str(QtCore.QLocale.system().name())
+ LOG.info("QTranslation using locale %s" % locale)
+ try:
+ lang, country = locale.split('_')
+ except:
+ lang, country = locale, ''
+
+ longname = "%s_%s" % (prefix, locale)
+ shortname = "%s_%s" % (prefix, lang)
+ qm = None
+ if longname in TRANSLATIONS:
+ LOG.info("Loading translation %s" % longname)
+ qm = TRANSLATIONS[longname]
+ elif shortname in TRANSLATIONS:
+ LOG.info("Loading translation %s" % shortname)
+ qm = TRANSLATIONS[shortname]
+
+ if qm is not None:
+ translator.load(qm, len(qm))
+ app.installTranslator(translator)
+ else:
+ if shortname != 'en':
+ LOG.warning("No translation found!")
Deleted: pymoul/trunk/src/moul/qt/i18n/translations.qrc
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/translations.qrc 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/qt/i18n/translations.qrc 2007-02-06 15:15:30 UTC (rev 145)
@@ -1,10 +0,0 @@
-<RCC>
- <qresource prefix="/translations" >
- <file>pymoul_de.qm</file>
- <file>pymoul_es.qm</file>
- <file>pymoul_fr.qm</file>
- <file>pymoul_it.qm</file>
- <file>pymoul_nl.qm</file>
- </qresource>
-</RCC>
-
Deleted: pymoul/trunk/src/moul/qt/i18n/translations_rc.py
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/translations_rc.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/qt/i18n/translations_rc.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -1,414 +0,0 @@
-# -*- coding: utf-8 -*-
-
-# Resource object code
-#
-# Created: Mo Feb 5 21:44:11 2007
-# by: The Resource Compiler for PyQt (Qt v4.2.0)
-#
-# WARNING! All changes made in this file will be lost!
-
-from PyQt4 import QtCore
-
-qt_resource_data = "\
-\x00\x00\x01\x51\
-\x3c\
-\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
-\x00\x00\x00\x00\x69\x00\x00\x00\x00\x2f\x00\x00\x01\x32\x00\x97\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\
-\x00\x00\x01\x51\
-\x3c\
-\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
-\x00\x00\x00\x00\x69\x00\x00\x00\x00\x2f\x00\x00\x01\x32\x00\x97\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\
-\x00\x00\x01\x51\
-\x3c\
-\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
-\x00\x00\x00\x00\x69\x00\x00\x00\x00\x2f\x00\x00\x01\x32\x00\x97\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\
-\x00\x00\x01\x51\
-\x3c\
-\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
-\x00\x00\x00\x00\x69\x00\x00\x00\x00\x2f\x00\x00\x01\x32\x00\x97\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\
-\x00\x00\x10\x19\
-\x3c\
-\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
-\x00\x00\x02\x70\x00\x00\x47\xd5\x00\x00\x00\x00\x00\x00\x53\x67\
-\x00\x00\x00\x1d\x00\x00\x59\xc4\x00\x00\x00\x36\x00\x04\xef\xd8\
-\x00\x00\x00\x47\x00\x05\x24\x9c\x00\x00\x00\x5a\x00\x05\x3b\x6e\
-\x00\x00\x00\x6d\x00\x05\x70\x47\x00\x00\x00\x80\x00\x47\x96\xc4\
-\x00\x00\x00\x93\x00\x48\xba\xff\x00\x00\x00\xa6\x00\x4b\x68\x54\
-\x00\x00\x00\xbb\x00\x52\xcc\xbc\x00\x00\x00\xda\x00\x54\xc9\xf3\
-\x00\x00\x00\xef\x00\x56\xae\xc2\x00\x00\x01\x04\x00\x5a\x8a\x23\
-\x00\x00\x01\x1d\x00\x5b\x0b\x25\x00\x00\x01\x38\x00\x5b\xb0\x43\
-\x00\x00\x01\x4d\x00\x5c\x3b\x81\x00\x00\x01\x62\x00\x64\x19\x77\
-\x00\x00\x01\x77\x00\x7e\x6c\x0a\x00\x00\x01\x96\x01\x93\x37\x13\
-\x00\x00\x01\xb5\x01\xab\x5c\xb3\x00\x00\x01\xfc\x02\x8f\x56\xc2\
-\x00\x00\x02\x27\x02\xe9\x8e\x3e\x00\x00\x02\x58\x02\xf9\xc5\xc5\
-\x00\x00\x02\x91\x03\x05\x6a\xdc\x00\x00\x02\xa8\x03\x92\xfa\x97\
-\x00\x00\x02\xc9\x03\x95\x76\xb3\x00\x00\x02\xfe\x04\x99\x6e\x95\
-\x00\x00\x03\x25\x04\xd7\xac\x54\x00\x00\x03\x38\x04\xe2\x4f\x1a\
-\x00\x00\x03\x6b\x05\x8c\x46\xc5\x00\x00\x03\x8c\x05\x8c\x68\x02\
-\x00\x00\x03\xa7\x05\xa0\x21\x53\x00\x00\x03\xc6\x05\xd0\xcd\x93\
-\x00\x00\x03\xeb\x05\xf8\x63\x97\x00\x00\x04\x0c\x06\x19\xf8\x33\
-\x00\x00\x04\x43\x06\x3e\x53\x23\x00\x00\x04\x76\x06\x80\x0f\x99\
-\x00\x00\x04\x9b\x06\x93\xd5\xd9\x00\x00\x04\xec\x06\xc9\x43\x23\
-\x00\x00\x05\x37\x06\xca\x7f\x51\x00\x00\x05\x52\x06\xcd\x5c\x79\
-\x00\x00\x05\x91\x07\x0d\x0d\x29\x00\x00\x05\xbc\x07\x7e\x46\xbc\
-\x00\x00\x05\xe5\x07\x86\xf4\xf3\x00\x00\x05\xfc\x07\xe0\x1a\x4f\
-\x00\x00\x06\x19\x08\x4e\xb2\xf5\x00\x00\x06\x6c\x08\x62\xc8\x91\
-\x00\x00\x06\x85\x08\x67\x7c\x03\x00\x00\x06\xec\x08\x6c\x74\x43\
-\x00\x00\x07\x07\x08\x86\xeb\x43\x00\x00\x07\x3e\x08\x89\xf0\x85\
-\x00\x00\x07\x55\x08\x8b\xdc\x65\x00\x00\x07\x74\x08\xb8\x30\xe9\
-\x00\x00\x07\x8f\x09\x23\x8d\x18\x00\x00\x07\xaa\x09\x73\x4b\x74\
-\x00\x00\x07\xcd\x09\xc9\xcc\xc3\x00\x00\x07\xec\x0a\x60\x8c\x6e\
-\x00\x00\x08\x03\x0a\xa2\x5f\x07\x00\x00\x08\x20\x0b\x4d\x0c\xe4\
-\x00\x00\x08\x3f\x0b\x5d\x62\x2e\x00\x00\x08\x72\x0b\xb1\x98\x63\
-\x00\x00\x08\xbb\x0c\x14\x88\xde\x00\x00\x08\xe4\x0c\x2c\x3c\x14\
-\x00\x00\x09\x11\x0c\x8b\x22\x33\x00\x00\x09\x2a\x0c\xa7\x63\x6c\
-\x00\x00\x09\x85\x0c\xb9\x85\xe3\x00\x00\x09\xa6\x0c\xbb\x01\x73\
-\x00\x00\x09\xcf\x0c\xd3\x7d\x01\x00\x00\x09\xf4\x0d\xca\xe4\xb3\
-\x00\x00\x0a\x51\x0e\x42\xf2\x69\x00\x00\x0a\x76\x0e\x4c\x4e\xf4\
-\x00\x00\x0a\x99\x0e\x5d\x7d\x69\x00\x00\x0a\xca\x0e\x6c\x4e\xf4\
-\x00\x00\x0a\xf1\x0e\x8c\xb2\xa3\x00\x00\x0b\x22\x0e\x9b\xcf\x67\
-\x00\x00\x0b\x53\x0f\x02\x2c\x83\x00\x00\x0b\x7e\x0f\x33\xb6\x5e\
-\x00\x00\x0b\xc3\x69\x00\x00\x0b\xfe\x03\x00\x00\x00\x12\x00\x5a\
-\x00\x65\x00\x69\x00\x74\x00\x61\x00\x6c\x00\x74\x00\x65\x00\x72\
-\x05\x00\x00\x47\xd5\x01\x03\x00\x00\x00\x0e\x00\x4e\x00\x69\x00\
-\x65\x00\x64\x00\x72\x00\x69\x00\x67\x05\x00\x00\x53\x67\x01\x03\
-\x00\x00\x00\x06\x00\x53\x00\x65\x00\x74\x05\x00\x00\x59\xc4\x01\
-\x03\x00\x00\x00\x08\x00\x48\x00\x6f\x00\x63\x00\x68\x05\x00\x04\
-\xef\xd8\x01\x03\x00\x00\x00\x08\x00\x4d\x00\x4f\x00\x55\x00\x4c\
-\x05\x00\x05\x24\x9c\x01\x03\x00\x00\x00\x08\x00\x4d\x00\x65\x00\
-\x64\x00\x2e\x05\x00\x05\x3b\x6e\x01\x03\x00\x00\x00\x08\x00\x50\
-\x00\x69\x00\x6e\x00\x67\x05\x00\x05\x70\x47\x01\x03\x00\x00\x00\
-\x08\x00\xdc\x00\x62\x00\x65\x00\x72\x05\x00\x47\x96\xc4\x01\x03\
-\x00\x00\x00\x0a\x00\x41\x00\x75\x00\x64\x00\x69\x00\x6f\x05\x00\
-\x48\xba\xff\x01\x03\x00\x00\x00\x14\x00\x49\x00\x6d\x00\x20\x00\
-\x46\x00\x65\x00\x6e\x00\x73\x00\x74\x00\x65\x00\x72\x05\x00\x4b\
-\x68\x54\x01\x03\x00\x00\x00\x0a\x00\x4c\x00\x65\x00\x76\x00\x65\
-\x00\x6c\x05\x00\x52\xcc\xbc\x01\x03\x00\x00\x00\x0a\x00\x4d\x00\
-\x75\x00\x73\x00\x69\x00\x6b\x05\x00\x54\xc9\xf3\x01\x03\x00\x00\
-\x00\x0e\x00\x41\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x65\x00\x73\
-\x05\x00\x56\xae\xc2\x01\x03\x00\x00\x00\x10\x00\x41\x00\x75\x00\
-\x66\x00\x67\x00\x61\x00\x62\x00\x65\x00\x6e\x05\x00\x5a\x8a\x23\
-\x01\x03\x00\x00\x00\x0a\x00\x54\x00\x69\x00\x74\x00\x65\x00\x6c\
-\x05\x00\x5b\x0b\x25\x01\x03\x00\x00\x00\x0a\x00\x56\x00\x53\x00\
-\x79\x00\x6e\x00\x63\x05\x00\x5b\xb0\x43\x01\x03\x00\x00\x00\x0a\
-\x00\x55\x00\x6c\x00\x74\x00\x72\x00\x61\x05\x00\x5c\x3b\x81\x01\
-\x03\x00\x00\x00\x14\x00\x4d\x00\x4f\x00\x55\x00\x4c\x00\x20\x00\
-\x6c\x00\xe4\x00\x75\x00\x66\x00\x74\x05\x00\x64\x19\x77\x01\x03\
-\x00\x00\x00\x14\x00\x43\x00\x79\x00\x61\x00\x6e\x00\x20\x00\x5a\
-\x00\x65\x00\x69\x00\x74\x00\x3a\x05\x00\x7e\x6c\x0a\x01\x03\x00\
-\x00\x00\x3c\x00\x52\x00\x65\x00\x70\x00\x61\x00\x72\x00\x69\x00\
-\x65\x00\x72\x00\x74\x00\x20\x00\x4b\x00\x49\x00\x2d\x00\x20\x00\
-\x75\x00\x6e\x00\x64\x00\x20\x00\x41\x00\x76\x00\x61\x00\x74\x00\
-\x61\x00\x72\x00\x62\x00\x69\x00\x6c\x00\x64\x00\x65\x00\x72\x05\
-\x01\x93\x37\x13\x01\x03\x00\x00\x00\x20\x00\x4c\x00\xf6\x00\x73\
-\x00\x63\x00\x68\x00\x65\x00\x20\x00\x44\x00\x65\x00\x62\x00\x75\
-\x00\x67\x00\x6c\x00\x6f\x00\x67\x00\x73\x05\x01\xab\x5c\xb3\x01\
-\x03\x00\x00\x00\x26\x00\x52\x00\x65\x00\x70\x00\x61\x00\x72\x00\
-\x69\x00\x65\x00\x72\x00\x65\x00\x20\x00\x4b\x00\x49\x00\x20\x00\
-\x42\x00\x69\x00\x6c\x00\x64\x00\x65\x00\x72\x05\x02\x8f\x56\xc2\
-\x01\x03\x00\x00\x00\x2e\x00\x4a\x00\x6f\x00\x75\x00\x72\x00\x6e\
-\x00\x61\x00\x6c\x00\x65\x00\x20\x00\x6e\x00\x69\x00\x63\x00\x68\
-\x00\x74\x00\x20\x00\x67\x00\x65\x00\x6c\x00\x61\x00\x64\x00\x65\
-\x00\x6e\x00\x2e\x05\x02\xe9\x8e\x3e\x01\x03\x00\x00\x00\x0c\x00\
-\x4c\x00\x69\x00\x7a\x00\x65\x00\x6e\x00\x7a\x05\x02\xf9\xc5\xc5\
-\x01\x03\x00\x00\x00\x16\x00\xdc\x00\x62\x00\x65\x00\x72\x00\x20\
-\x00\x70\x00\x79\x00\x4d\x00\x6f\x00\x75\x00\x6c\x05\x03\x05\x6a\
-\xdc\x01\x03\x00\x00\x00\x2a\x00\x70\x00\x79\x00\x4d\x00\x6f\x00\
-\x75\x00\x6c\x00\x20\x00\x51\x00\x54\x00\x20\x00\x6c\x00\xe4\x00\
-\x75\x00\x66\x00\x74\x00\x20\x00\x73\x00\x63\x00\x68\x00\x6f\x00\
-\x6e\x05\x03\x92\xfa\x97\x01\x03\x00\x00\x00\x1c\x00\x5a\x00\x65\
-\x00\x69\x00\x67\x00\x65\x00\x20\x00\x53\x00\x63\x00\x68\x00\x61\
-\x00\x74\x00\x74\x00\x65\x00\x6e\x05\x03\x95\x76\xb3\x01\x03\x00\
-\x00\x00\x08\x00\x4c\x00\x65\x00\x73\x00\x65\x05\x04\x99\x6e\x95\
-\x01\x03\x00\x00\x00\x28\x00\x48\x00\x69\x00\x6e\x00\x74\x00\x65\
-\x00\x72\x00\x67\x00\x72\x00\x75\x00\x6e\x00\x64\x00\x67\x00\x65\
-\x00\x72\x00\xe4\x00\x75\x00\x73\x00\x63\x00\x68\x00\x65\x05\x04\
-\xd7\xac\x54\x01\x03\x00\x00\x00\x16\x00\x48\x00\xf6\x00\x68\x00\
-\x6c\x00\x65\x00\x6e\x00\x7a\x00\x65\x00\x69\x00\x74\x00\x3a\x05\
-\x04\xe2\x4f\x1a\x01\x03\x00\x00\x00\x10\x00\x45\x00\x6e\x00\x74\
-\x00\x66\x00\x65\x00\x72\x00\x6e\x00\x65\x05\x05\x8c\x46\xc5\x01\
-\x03\x00\x00\x00\x14\x00\x52\x00\x65\x00\x70\x00\x61\x00\x72\x00\
-\x65\x00\x69\x00\x65\x00\x72\x00\x65\x05\x05\x8c\x68\x02\x01\x03\
-\x00\x00\x00\x1a\x00\x4c\x00\x61\x00\x64\x00\x65\x00\x20\x00\x4a\
-\x00\x6f\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\x00\x65\x05\x05\
-\xa0\x21\x53\x01\x03\x00\x00\x00\x16\x00\x4e\x00\x53\x00\x43\x00\
-\x20\x00\x53\x00\x74\x00\x69\x00\x6d\x00\x6d\x00\x65\x00\x6e\x05\
-\x05\xd0\xcd\x93\x01\x03\x00\x00\x00\x2c\x00\x41\x00\x6e\x00\x69\
-\x00\x73\x00\x6f\x00\x74\x00\x72\x00\x6f\x00\x70\x00\x69\x00\x73\
-\x00\x63\x00\x68\x00\x65\x00\x72\x00\x20\x00\x46\x00\x69\x00\x6c\
-\x00\x74\x00\x65\x00\x72\x05\x05\xf8\x63\x97\x01\x03\x00\x00\x00\
-\x28\x00\x43\x00\x68\x00\x61\x00\x74\x00\x2d\x00\x20\x00\x75\x00\
-\x6e\x00\x64\x00\x20\x00\x46\x00\x65\x00\x68\x00\x6c\x00\x65\x00\
-\x72\x00\x6c\x00\x6f\x00\x67\x00\x73\x05\x06\x19\xf8\x33\x01\x03\
-\x00\x00\x00\x1a\x00\x4c\x00\x65\x00\x73\x00\x65\x00\x20\x00\x43\
-\x00\x68\x00\x61\x00\x74\x00\x6c\x00\x6f\x00\x67\x00\x73\x05\x06\
-\x3e\x53\x23\x01\x03\x00\x00\x00\x46\x00\x46\x00\x65\x00\x68\x00\
-\x6c\x00\x65\x00\x72\x00\x20\x00\x62\x00\x65\x00\x69\x00\x6d\x00\
-\x20\x00\xd6\x00\x66\x00\x66\x00\x6e\x00\x65\x00\x6e\x00\x20\x00\
-\x76\x00\x6f\x00\x6e\x00\x20\x00\x67\x00\x72\x00\x61\x00\x70\x00\
-\x68\x00\x69\x00\x63\x00\x73\x00\x2e\x00\x69\x00\x6e\x00\x69\x05\
-\x06\x80\x0f\x99\x01\x03\x00\x00\x00\x40\x00\x46\x00\x65\x00\x68\
-\x00\x6c\x00\x65\x00\x72\x00\x20\x00\x62\x00\x65\x00\x69\x00\x6d\
-\x00\x20\x00\xd6\x00\x66\x00\x66\x00\x6e\x00\x65\x00\x6e\x00\x20\
-\x00\x76\x00\x6f\x00\x6e\x00\x20\x00\x61\x00\x75\x00\x64\x00\x69\
-\x00\x6f\x00\x2e\x00\x69\x00\x6e\x00\x69\x05\x06\x93\xd5\xd9\x01\
-\x03\x00\x00\x00\x10\x00\x4a\x00\x6f\x00\x75\x00\x72\x00\x6e\x00\
-\x61\x00\x6c\x00\x65\x05\x06\xc9\x43\x23\x01\x03\x00\x00\x00\x34\
-\x00\x55\x00\x6e\x00\x67\x00\x65\x00\x73\x00\x70\x00\x65\x00\x69\
-\x00\x63\x00\x68\x00\x65\x00\x72\x00\x74\x00\x65\x00\x20\x00\xc4\
-\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x75\x00\x6e\x00\x67\x00\x65\
-\x00\x6e\x00\x21\x05\x06\xca\x7f\x51\x01\x03\x00\x00\x00\x20\x00\
-\x53\x00\x63\x00\x68\x00\x61\x00\x74\x00\x74\x00\x65\x00\x6e\x00\
-\x71\x00\x75\x00\x61\x00\x6c\x00\x69\x00\x74\x00\xe4\x00\x74\x05\
-\x06\xcd\x5c\x79\x01\x03\x00\x00\x00\x1e\x00\x54\x00\x65\x00\x78\
-\x00\x74\x00\x75\x00\x72\x00\x65\x00\x71\x00\x75\x00\x61\x00\x6c\
-\x00\x69\x00\x74\x00\xe4\x00\x74\x05\x07\x0d\x0d\x29\x01\x03\x00\
-\x00\x00\x0c\x00\x70\x00\x79\x00\x4d\x00\x6f\x00\x75\x00\x6c\x05\
-\x07\x7e\x46\xbc\x01\x03\x00\x00\x00\x12\x00\x5a\x00\x65\x00\x69\
-\x00\x74\x00\x7a\x00\x6f\x00\x6e\x00\x65\x00\x6e\x05\x07\x86\xf4\
-\xf3\x01\x03\x00\x00\x00\x48\x00\x57\x00\x6f\x00\x6c\x00\x6c\x00\
-\x65\x00\x6e\x00\x20\x00\x73\x00\x69\x00\x65\x00\x20\x00\x64\x00\
-\x69\x00\x65\x00\x20\x00\xc4\x00\x6e\x00\x64\x00\x65\x00\x72\x00\
-\x75\x00\x6e\x00\x67\x00\x65\x00\x6e\x00\x20\x00\x73\x00\x70\x00\
-\x65\x00\x69\x00\x63\x00\x68\x00\x65\x00\x72\x00\x6e\x00\x3f\x05\
-\x07\xe0\x1a\x4f\x01\x03\x00\x00\x00\x0e\x00\x53\x00\x70\x00\x72\
-\x00\x61\x00\x63\x00\x68\x00\x65\x05\x08\x4e\xb2\xf5\x01\x03\x00\
-\x00\x00\x5c\x00\x44\x00\x69\x00\x65\x00\x73\x00\x65\x00\x73\x00\
-\x20\x00\x46\x00\x65\x00\x61\x00\x74\x00\x75\x00\x72\x00\x65\x00\
-\x20\x00\x77\x00\x75\x00\x72\x00\x64\x00\x65\x00\x20\x00\x6e\x00\
-\x6f\x00\x63\x00\x68\x00\x20\x00\x6e\x00\x69\x00\x63\x00\x68\x00\
-\x74\x00\x20\x00\x69\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x6d\x00\
-\x65\x00\x6e\x00\x74\x00\x69\x00\x65\x00\x72\x00\x74\x00\x21\x05\
-\x08\x62\xc8\x91\x01\x03\x00\x00\x00\x10\x00\x43\x00\x68\x00\x61\
-\x00\x74\x00\x6c\x00\x6f\x00\x67\x00\x73\x05\x08\x67\x7c\x03\x01\
-\x03\x00\x00\x00\x2c\x00\x45\x00\x6e\x00\x74\x00\x66\x00\x65\x00\
-\x72\x00\x6e\x00\x65\x00\x20\x00\x67\x00\x65\x00\x70\x00\x61\x00\
-\x63\x00\x6b\x00\x74\x00\x65\x00\x20\x00\x4c\x00\x6f\x00\x67\x00\
-\x73\x05\x08\x6c\x74\x43\x01\x03\x00\x00\x00\x0c\x00\x47\x00\x72\
-\x00\x61\x00\x66\x00\x69\x00\x6b\x05\x08\x86\xeb\x43\x01\x03\x00\
-\x00\x00\x14\x00\x41\x00\x72\x00\x63\x00\x68\x00\x69\x00\x76\x00\
-\x69\x00\x65\x00\x72\x00\x65\x05\x08\x89\xf0\x85\x01\x03\x00\x00\
-\x00\x10\x00\x48\x00\x61\x00\x72\x00\x64\x00\x77\x00\x61\x00\x72\
-\x00\x65\x05\x08\x8b\xdc\x65\x01\x03\x00\x00\x00\x10\x00\x51\x00\
-\x75\x00\x61\x00\x6c\x00\x69\x00\x74\x00\xe4\x00\x74\x05\x08\xb8\
-\x30\xe9\x01\x03\x00\x00\x00\x18\x00\x41\x00\x6b\x00\x74\x00\x69\
-\x00\x76\x00\x69\x00\x65\x00\x72\x00\x20\x00\x45\x00\x41\x00\x58\
-\x05\x09\x23\x8d\x18\x01\x03\x00\x00\x00\x14\x00\x56\x00\x6f\x00\
-\x69\x00\x63\x00\x65\x00\x20\x00\x43\x00\x68\x00\x61\x00\x74\x05\
-\x09\x73\x4b\x74\x01\x03\x00\x00\x00\x0c\x00\x53\x00\x65\x00\x72\
-\x00\x76\x00\x65\x00\x72\x05\x09\xc9\xcc\xc3\x01\x03\x00\x00\x00\
-\x12\x00\x41\x00\x75\x00\x66\x00\x6c\x00\xf6\x00\x73\x00\x75\x00\
-\x6e\x00\x67\x05\x0a\x60\x8c\x6e\x01\x03\x00\x00\x00\x14\x00\x41\
-\x00\x6e\x00\x74\x00\x69\x00\x20\x00\x41\x00\x6c\x00\x69\x00\x61\
-\x00\x73\x05\x0a\xa2\x5f\x07\x01\x03\x00\x00\x00\x28\x00\x41\x00\
-\x6b\x00\x74\x00\x69\x00\x76\x00\x69\x00\x65\x00\x72\x00\x65\x00\
-\x20\x00\x56\x00\x6f\x00\x69\x00\x63\x00\x65\x00\x20\x00\x43\x00\
-\x68\x00\x61\x00\x74\x05\x0b\x4d\x0c\xe4\x01\x03\x00\x00\x00\x3e\
-\x00\x46\x00\x65\x00\x68\x00\x6c\x00\x65\x00\x72\x00\x20\x00\x62\
-\x00\x65\x00\x69\x00\x6d\x00\x20\x00\x4c\x00\x61\x00\x64\x00\x65\
-\x00\x6e\x00\x20\x00\x64\x00\x65\x00\x72\x00\x20\x00\x4a\x00\x6f\
-\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\x00\x65\x00\x2e\x05\x0b\
-\x5d\x62\x2e\x01\x03\x00\x00\x00\x1e\x00\x50\x00\x61\x00\x63\x00\
-\x6b\x00\x65\x00\x20\x00\x44\x00\x65\x00\x62\x00\x75\x00\x67\x00\
-\x6c\x00\x6f\x00\x67\x00\x73\x05\x0b\xb1\x98\x63\x01\x03\x00\x00\
-\x00\x22\x00\x4a\x00\x6f\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\
-\x00\x65\x00\x20\x00\x67\x00\x65\x00\x6c\x00\x61\x00\x64\x00\x65\
-\x00\x6e\x00\x2e\x05\x0c\x14\x88\xde\x01\x03\x00\x00\x00\x0e\x00\
-\x45\x00\x6c\x00\x65\x00\x6d\x00\x65\x00\x6e\x00\x74\x05\x0c\x2c\
-\x3c\x14\x01\x03\x00\x00\x00\x50\x00\x41\x00\x72\x00\x63\x00\x68\
-\x00\x69\x00\x76\x00\x69\x00\x65\x00\x72\x00\x65\x00\x20\x00\x43\
-\x00\x68\x00\x61\x00\x74\x00\x6c\x00\x6f\x00\x67\x00\x73\x00\x20\
-\x00\x75\x00\x6e\x00\x64\x00\x20\x00\x70\x00\x61\x00\x63\x00\x6b\
-\x00\x65\x00\x20\x00\x4c\x00\x6f\x00\x67\x00\x64\x00\x61\x00\x74\
-\x00\x65\x00\x69\x00\x65\x00\x6e\x05\x0c\x8b\x22\x33\x01\x03\x00\
-\x00\x00\x16\x00\x41\x00\x6c\x00\x6c\x00\x65\x00\x73\x00\x20\x00\
-\x73\x00\x74\x00\x75\x00\x6d\x00\x6d\x05\x0c\xa7\x63\x6c\x01\x03\
-\x00\x00\x00\x1e\x00\x53\x00\x65\x00\x72\x00\x76\x00\x65\x00\x72\
-\x00\x20\x00\x61\x00\x6e\x00\x70\x00\x69\x00\x6e\x00\x67\x00\x65\
-\x00\x6e\x05\x0c\xb9\x85\xe3\x01\x03\x00\x00\x00\x1a\x00\x45\x00\
-\x69\x00\x6e\x00\x73\x00\x74\x00\x65\x00\x6c\x00\x6c\x00\x75\x00\
-\x6e\x00\x67\x00\x65\x00\x6e\x05\x0c\xbb\x01\x73\x01\x03\x00\x00\
-\x00\x52\x00\x45\x00\x69\x00\x6e\x00\x65\x00\x20\x00\x49\x00\x6e\
-\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x7a\x00\x20\x00\x76\x00\x6f\
-\x00\x6e\x00\x20\x00\x70\x00\x79\x00\x4d\x00\x6f\x00\x75\x00\x6c\
-\x00\x20\x00\x51\x00\x54\x00\x20\x00\x6c\x00\xe4\x00\x75\x00\x66\
-\x00\x74\x00\x20\x00\x62\x00\x65\x00\x72\x00\x65\x00\x69\x00\x74\
-\x00\x73\x00\x21\x05\x0c\xd3\x7d\x01\x01\x03\x00\x00\x00\x1a\x00\
-\x4c\x00\x61\x00\x64\x00\x65\x00\x20\x00\x4a\x00\x6f\x00\x75\x00\
-\x72\x00\x6e\x00\x61\x00\x6c\x00\x65\x05\x0d\xca\xe4\xb3\x01\x03\
-\x00\x00\x00\x18\x00\x54\x00\x6f\x00\x6e\x00\x70\x00\x72\x00\x69\
-\x00\x6f\x00\x72\x00\x69\x00\x74\x00\xe4\x00\x74\x05\x0e\x42\xf2\
-\x69\x01\x03\x00\x00\x00\x26\x00\x4e\x00\x69\x00\x63\x00\x68\x00\
-\x74\x00\x20\x00\x69\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x6d\x00\
-\x65\x00\x6e\x00\x74\x00\x69\x00\x65\x00\x72\x00\x74\x05\x0e\x4c\
-\x4e\xf4\x01\x03\x00\x00\x00\x1c\x00\x47\x00\x72\x00\x61\x00\x66\
-\x00\x69\x00\x6b\x00\x71\x00\x75\x00\x61\x00\x6c\x00\x69\x00\x74\
-\x00\xe4\x00\x74\x05\x0e\x5d\x7d\x69\x01\x03\x00\x00\x00\x26\x00\
-\x4e\x00\x69\x00\x63\x00\x68\x00\x74\x00\x20\x00\x69\x00\x6d\x00\
-\x70\x00\x6c\x00\x65\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x69\x00\
-\x65\x00\x72\x00\x74\x05\x0e\x6c\x4e\xf4\x01\x03\x00\x00\x00\x26\
-\x00\x52\x00\x65\x00\x70\x00\x61\x00\x72\x00\x69\x00\x65\x00\x72\
-\x00\x65\x00\x20\x00\x4b\x00\x49\x00\x20\x00\x42\x00\x69\x00\x6c\
-\x00\x64\x00\x65\x00\x72\x05\x0e\x8c\xb2\xa3\x01\x03\x00\x00\x00\
-\x20\x00\x4d\x00\x4f\x00\x55\x00\x4c\x00\x20\x00\x6c\x00\xe4\x00\
-\x75\x00\x66\x00\x74\x00\x20\x00\x6e\x00\x69\x00\x63\x00\x68\x00\
-\x74\x05\x0e\x9b\xcf\x67\x01\x03\x00\x00\x00\x3a\x00\x4c\x00\x65\
-\x00\x73\x00\x65\x00\x20\x00\x4a\x00\x6f\x00\x75\x00\x72\x00\x6e\
-\x00\x61\x00\x6c\x00\x65\x00\x20\x00\x75\x00\x6e\x00\x64\x00\x20\
-\x00\x4e\x00\x61\x00\x63\x00\x68\x00\x72\x00\x69\x00\x63\x00\x68\
-\x00\x74\x00\x65\x00\x6e\x05\x0f\x02\x2c\x83\x01\x03\x00\x00\x00\
-\x30\x00\x4b\x00\x65\x00\x69\x00\x6e\x00\x65\x00\x20\x00\x4a\x00\
-\x6f\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\x00\x65\x00\x20\x00\
-\x67\x00\x65\x00\x66\x00\x75\x00\x6e\x00\x64\x00\x65\x00\x6e\x00\
-\x2e\x05\x0f\x33\xb6\x5e\x01\x2f\x00\x00\x01\x8c\x00\x97\x00\x00\
-\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
-\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x53\
-\x69\x6d\x70\x6c\x65\x50\x72\x6f\x67\x72\x65\x73\x73\x62\x61\x72\
-\x00\x00\x03\x61\x70\x70\x00\x00\x15\x4c\x6f\x63\x61\x6c\x69\x7a\
-\x61\x74\x69\x6f\x6e\x43\x6f\x6e\x74\x61\x69\x6e\x65\x72\x00\x00\
-\x10\x49\x6e\x69\x46\x69\x6c\x65\x43\x6f\x6e\x74\x61\x69\x6e\x65\
-\x72\x00\x0a\x4d\x61\x69\x6e\x57\x69\x6e\x64\x6f\x77\x00\x07\x63\
-\x6f\x6e\x74\x65\x78\x74\x00\x00\
-"
-
-qt_resource_name = "\
-\x00\x0c\
-\x0d\xfc\x11\x13\
-\x00\x74\
-\x00\x72\x00\x61\x00\x6e\x00\x73\x00\x6c\x00\x61\x00\x74\x00\x69\x00\x6f\x00\x6e\x00\x73\
-\x00\x0c\
-\x01\x64\x78\xdd\
-\x00\x70\
-\x00\x79\x00\x6d\x00\x6f\x00\x75\x00\x6c\x00\x5f\x00\x6e\x00\x6c\x00\x2e\x00\x71\x00\x6d\
-\x00\x0c\
-\x01\x5c\xe8\xdd\
-\x00\x70\
-\x00\x79\x00\x6d\x00\x6f\x00\x75\x00\x6c\x00\x5f\x00\x65\x00\x73\x00\x2e\x00\x71\x00\x6d\
-\x00\x0c\
-\x01\x5d\xd8\xdd\
-\x00\x70\
-\x00\x79\x00\x6d\x00\x6f\x00\x75\x00\x6c\x00\x5f\x00\x66\x00\x72\x00\x2e\x00\x71\x00\x6d\
-\x00\x0c\
-\x01\x60\xf8\xdd\
-\x00\x70\
-\x00\x79\x00\x6d\x00\x6f\x00\x75\x00\x6c\x00\x5f\x00\x69\x00\x74\x00\x2e\x00\x71\x00\x6d\
-\x00\x0c\
-\x01\x5b\x08\xdd\
-\x00\x70\
-\x00\x79\x00\x6d\x00\x6f\x00\x75\x00\x6c\x00\x5f\x00\x64\x00\x65\x00\x2e\x00\x71\x00\x6d\
-"
-
-qt_resource_struct = "\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x01\x00\x00\x00\x01\
-\x00\x00\x00\x00\x00\x02\x00\x00\x00\x05\x00\x00\x00\x02\
-\x00\x00\x00\x96\x00\x00\x00\x00\x00\x01\x00\x00\x05\x54\
-\x00\x00\x00\x3c\x00\x00\x00\x00\x00\x01\x00\x00\x01\x55\
-\x00\x00\x00\x5a\x00\x00\x00\x00\x00\x01\x00\x00\x02\xaa\
-\x00\x00\x00\x78\x00\x00\x00\x00\x00\x01\x00\x00\x03\xff\
-\x00\x00\x00\x1e\x00\x00\x00\x00\x00\x01\x00\x00\x00\x00\
-"
-
-def qInitResources():
- QtCore.qRegisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-def qCleanupResources():
- QtCore.qUnregisterResourceData(0x01, qt_resource_struct, qt_resource_name, qt_resource_data)
-
-qInitResources()
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -287,8 +287,24 @@
def on_pb_log_archive_clicked(self):
"""
"""
- mb = qtutils.notImplementedMB(self)
- mb.exec_()
+ chatmover = self.urupersonaldir.chatmover
+ logzipper = self.urupersonaldir.logzipper
+ if chatmover.findLogs():
+ chatmover.moveChatlogs()
+ mb = qtutils.infoMB(self,
+ self.trUtf8("Chatlog archive"),
+ self.trUtf8("%1 chatlog(s) were moved to the archive.").arg(
+ len(chatmover))
+ )
+ mb.exec_()
+ else:
+ mb = qtutils.infoMB(self,
+ self.trUtf8("Chatlog archive"),
+ self.trUtf8("No chatlog(s) to archive")
+ )
+ mb.exec_()
+ #mb = qtutils.notImplementedMB(self)
+ #mb.exec_()
@pyqtSignature("")
def on_pb_log_remove_clicked(self):
@@ -311,7 +327,8 @@
# ************************************************************************
# about tab
def _about_init(self):
- self.tb_license.setPlainText(metadata.LICENSE)
+ self.tb_license.setHtml('<pre style="font-size:7pt;">' +
+ metadata.LICENSE + '</pre>')
# ************************************************************************
# time zones
Modified: pymoul/trunk/src/moul/qt/moulqt.py
===================================================================
--- pymoul/trunk/src/moul/qt/moulqt.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/qt/moulqt.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -36,7 +36,7 @@
from moul.qt.errorhandler import removeQtExceptHook
from moul.qt.errorhandler import setupQtExceptHook
from moul.qt.mainwindow import MainWindow
-from moul.qt.utils import installTranslator
+from moul.qt.i18n import installTranslator
LOG = getLogger('moul.qt')
@@ -68,7 +68,6 @@
createLogfile()
setupQtExceptHook()
-
installTranslator(app)
LOG.info("Invoking PyMoul QT MainWindow")
Modified: pymoul/trunk/src/moul/qt/utils.py
===================================================================
--- pymoul/trunk/src/moul/qt/utils.py 2007-02-06 03:51:21 UTC (rev 144)
+++ pymoul/trunk/src/moul/qt/utils.py 2007-02-06 15:15:30 UTC (rev 145)
@@ -38,8 +38,6 @@
from moul.osdependent import __FROZEN__
from moul.log import getLogger
-import moul.qt.i18n.translations_rc
-
LOG = getLogger('moul.qt.utils')
_marker=object()
@@ -321,36 +319,3 @@
if text is None:
text = context.trUtf8("Sorry, this feature is not implemented yet!")
return infoMB(context, title, text)
-
-def installTranslator(app, prefix="pymoul"):
- """
- Installs a translator for the ap
- """
- return # XXX: doesn't work
- translator = QtCore.QTranslator(app)
- directory = QtCore.QDir(":/translations")
- locale = str(QtCore.QLocale.system().name())
- LOG.info("QTranslation using locale %s" % locale)
- try:
- lang, country = locale.split('_')
- except:
- lang, country = locale, ''
- longname = "%s_%s.qm" % (prefix, locale)
- shortname = "%s_%s.qm" % (prefix, lang)
- match = None
- for qfinfo in directory.entryInfoList():
- fname = str(qfinfo.fileName())
- if fname == longname:
- match = qfinfo.absoluteFilePath()
- LOG.info("Loading translation file %s" % fname)
- break
- if fname == shortname:
- match = qfinfo.absoluteFilePath()
- LOG.info("Loading translation file %s" % fname)
- break
- if match is None:
- LOG.info("No translation file found!")
- return False
- qfile = QtCore.QFile(match)
- translator.load(qfile.read(qfile.size()), qfile.size())
- app.installTranslator(translator)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-06 03:51:22
|
Revision: 144
http://pymoul.svn.sourceforge.net/pymoul/?rev=144&view=rev
Author: tiran
Date: 2007-02-05 19:51:21 -0800 (Mon, 05 Feb 2007)
Log Message:
-----------
Added translation resource
added more messages to KI image and ini configurator
Modified Paths:
--------------
pymoul/trunk/Makefile.in
pymoul/trunk/src/moul/file/kiimage.py
pymoul/trunk/src/moul/file/wdysini.py
pymoul/trunk/src/moul/qt/i18n/pymoul_de.qm
pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/moulqt.py
pymoul/trunk/src/moul/qt/ui/mainwindow.py
pymoul/trunk/src/moul/qt/ui/mainwindow.ui
pymoul/trunk/src/moul/qt/utils.py
pymoul/trunk/src/moul/qt/wdysini.py
Added Paths:
-----------
pymoul/trunk/src/moul/qt/i18n/__init__.py
pymoul/trunk/src/moul/qt/i18n/translations.qrc
pymoul/trunk/src/moul/qt/i18n/translations_rc.py
Modified: pymoul/trunk/Makefile.in
===================================================================
--- pymoul/trunk/Makefile.in 2007-02-05 16:48:00 UTC (rev 143)
+++ pymoul/trunk/Makefile.in 2007-02-06 03:51:21 UTC (rev 144)
@@ -84,7 +84,11 @@
for L in $(LANGS); do \
pylupdate4 `$(FINDQT)` -ts src/moul/qt/i18n/pymoul_$${L}.ts;\
lrelease src/moul/qt/i18n/pymoul_$${L}.ts; \
- done
+ done
+ rm src/moul/qt/i18n/translations_rc.py
+ # do not compress qm files so the translator can load it
+ pyrcc4 -no-compress -o ./src/moul/qt/i18n/translations_rc.py \
+ ./src/moul/qt/i18n/translations.qrc
hash:
cd dist && $(FINDHASH) | xargs md5sum >md5.txt
Modified: pymoul/trunk/src/moul/file/kiimage.py
===================================================================
--- pymoul/trunk/src/moul/file/kiimage.py 2007-02-05 16:48:00 UTC (rev 143)
+++ pymoul/trunk/src/moul/file/kiimage.py 2007-02-06 03:51:21 UTC (rev 144)
@@ -265,14 +265,17 @@
fixed = self.mkFixedName(root, name, self._destdir)
self._found.append(ki)
# XXX: move checks to copy method!
- if os.path.isfile(fixed):
+ if not os.path.isfile(fixed):
+ self._tocheck.append((ki, fixed))
+ continue
+ else:
if fixedNewer(ki, fixed):
LOG.debug("File %s exists but was changed." % name)
self._tocheck.append((ki, fixed))
+ continue
else:
LOG.debug("File %s exists and is fixed." % name)
- else:
- self._tocheck.append((ki, fixed))
+ continue
return self._tocheck
def checkAndCopyFile(self, kiname, fixedname):
Modified: pymoul/trunk/src/moul/file/wdysini.py
===================================================================
--- pymoul/trunk/src/moul/file/wdysini.py 2007-02-05 16:48:00 UTC (rev 143)
+++ pymoul/trunk/src/moul/file/wdysini.py 2007-02-06 03:51:21 UTC (rev 144)
@@ -370,15 +370,25 @@
dirname = os.path.dirname(self._fpath)
if not os.path.isdir(dirname):
LOG.info("Creating directory %s" % dirname)
- os.mkdir(dirname)
+ os.makedirs(dirname)
# Create a dummy file
fd = open(self._fpath, 'w')
fd.write("Created by pyMoul")
fd.close()
self._opened = True
+ self.clear()
for key, value in self._defaults.items():
+ self._order.append(key)
self._filedata[key] = value
- self.reset()
+ self._newdata[key] = value
+ self.write()
+ self.close()
+
+ def close(self):
+ """Close file and clear data
+ """
+ self._opened = False
+ self.clear()
def write(self):
"""Write data to file
@@ -453,8 +463,11 @@
self._filedata[newkey] = value
break
if not found:
- raise ValueError(line)
+ raise ValueError("Unknown line %s" % line)
+ for key in self._options:
+ if key not in self._filedata:
+ raise ValueError("Key is missing in file %s" % key)
self.reset()
self._parserDoneHook()
@@ -531,7 +544,7 @@
_options = {
'Audio.Initialize' : (BoolString, Constrain()), # true/false, no ui
'Audio.UseEAX' : (BoolString, Constrain()), # true/false
- 'Audio.SetPriorityCutoff' : (int, Constrain()), # ???
+ 'Audio.SetPriorityCutoff' : (int, MinMax(0, 100)), # ???
'Audio.MuteAll' : (int, MinMax(0, 1)), # 0, 1
'Audio.SetChannelVolume SoundFX' : (FloatString, MinMax(0.0, 1.0)), # 0-100%
'Audio.SetChannelVolume BgndMusic' : (FloatString, MinMax(0.0, 1.0)), # 0-100%
@@ -545,7 +558,7 @@
_defaults = {
'Audio.Initialize' : BoolString(True),
'Audio.UseEAX' : BoolString(False),
- 'Audio.SetPriorityCutoff' : 6,
+ 'Audio.SetPriorityCutoff' : 80,
'Audio.MuteAll' : 0, # 0, 1
'Audio.SetChannelVolume SoundFX' : FloatString(1.0),
'Audio.SetChannelVolume BgndMusic' : FloatString(1.0),
Added: pymoul/trunk/src/moul/qt/i18n/__init__.py
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/__init__.py (rev 0)
+++ pymoul/trunk/src/moul/qt/i18n/__init__.py 2007-02-06 03:51:21 UTC (rev 144)
@@ -0,0 +1,25 @@
+# pyMoul - Python interface to Myst Online URU Live
+# Copyright (C) 2007 Christian Heimes <christian (at) cheimes (dot) de>
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program 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 General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc., 59
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+"""
+moul.qt.i18n
+"""
+__author__ = "Christian Heimes"
+__version__ = "$Id: __init__.py 108 2007-01-31 14:46:54Z tiran $"
+__revision__ = "$Revision: 108 $"
+
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_de.qm
===================================================================
(Binary files differ)
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts 2007-02-05 16:48:00 UTC (rev 143)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts 2007-02-06 03:51:21 UTC (rev 144)
@@ -37,15 +37,15 @@
<name>MainWindow</name>
<message>
<source>Windowed</source>
- <translation type="unfinished">Im Fenster</translation>
+ <translation>Im Fenster</translation>
</message>
<message>
<source>Display Shadows</source>
- <translation type="unfinished">Zeige Schatten</translation>
+ <translation>Zeige Schatten</translation>
</message>
<message>
<source>Screen Resolution</source>
- <translation type="unfinished">Auflösung</translation>
+ <translation>Auflösung</translation>
</message>
<message>
<source>800x600 (4:3)</source>
@@ -53,107 +53,107 @@
</message>
<message>
<source>Quality</source>
- <translation type="unfinished">Qualität</translation>
+ <translation>Qualität</translation>
</message>
<message>
<source>Texture Quality</source>
- <translation type="unfinished">Texturequalität</translation>
+ <translation>Texturequalität</translation>
</message>
<message>
<source>Low</source>
- <translation type="unfinished">Niedrig</translation>
+ <translation>Niedrig</translation>
</message>
<message>
<source>High</source>
- <translation type="unfinished">Hoch</translation>
+ <translation>Hoch</translation>
</message>
<message>
<source>Anti-Aliasing</source>
- <translation type="unfinished">Anti Alias</translation>
+ <translation>Anti Alias</translation>
</message>
<message>
<source>Graphics Quality</source>
- <translation type="unfinished">Grafikqualität</translation>
+ <translation>Grafikqualität</translation>
</message>
<message>
<source>Med.</source>
- <translation type="unfinished">Med.</translation>
+ <translation>Med.</translation>
</message>
<message>
<source>Ultra</source>
- <translation type="unfinished">Ultra</translation>
+ <translation>Ultra</translation>
</message>
<message>
<source>Shadow Quality</source>
- <translation type="unfinished">Schattenqualität</translation>
+ <translation>Schattenqualität</translation>
</message>
<message>
<source>Anisotropic-Filtering</source>
- <translation type="unfinished">Anisotropischer Filter</translation>
+ <translation>Anisotropischer Filter</translation>
</message>
<message>
<source>Graphics</source>
- <translation type="unfinished">Grafik</translation>
+ <translation>Grafik</translation>
</message>
<message>
<source>Level</source>
- <translation type="unfinished">Level</translation>
+ <translation>Level</translation>
</message>
<message>
<source>NPC Voices</source>
- <translation type="unfinished">NSC Stimmen</translation>
+ <translation>NSC Stimmen</translation>
</message>
<message>
<source>Sound FX</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Ambience Sound</source>
- <translation type="unfinished">Hintergrundgeräusche</translation>
+ <translation>Hintergrundgeräusche</translation>
</message>
<message>
<source>Music</source>
- <translation type="unfinished">Musik</translation>
+ <translation>Musik</translation>
</message>
<message>
<source>Mute all</source>
- <translation type="unfinished">Alles stumm</translation>
+ <translation>Alles stumm</translation>
</message>
<message>
<source>Hardware</source>
- <translation type="unfinished">Hardware</translation>
+ <translation>Hardware</translation>
</message>
<message>
<source>Generic Software</source>
- <translation type="unfinished"></translation>
+ <translation></translation>
</message>
<message>
<source>Enable EAX</source>
- <translation type="unfinished">Aktivier EAX</translation>
+ <translation>Aktivier EAX</translation>
</message>
<message>
<source>Voice chat</source>
- <translation type="unfinished">Voice Chat</translation>
+ <translation>Voice Chat</translation>
</message>
<message>
<source>Enable Voice Chat</source>
- <translation type="unfinished">Aktiviere Voice Chat</translation>
+ <translation>Aktiviere Voice Chat</translation>
</message>
<message>
<source>Audio</source>
- <translation type="unfinished">Audio</translation>
+ <translation>Audio</translation>
</message>
<message>
<source>Time zones</source>
- <translation type="unfinished">Zeitzonen</translation>
+ <translation>Zeitzonen</translation>
</message>
<message>
<source>Cavern time:</source>
- <translation type="unfinished">Höhlenzeit</translation>
+ <translation>Höhlenzeit:</translation>
</message>
<message>
<source>Cyan time:</source>
- <translation type="unfinished">Cyan Zeit</translation>
+ <translation>Cyan Zeit:</translation>
</message>
<message>
<source>UTC -0</source>
@@ -161,166 +161,151 @@
</message>
<message>
<source>Ping servers</source>
- <translation type="unfinished">Server anpingen</translation>
+ <translation>Server anpingen</translation>
</message>
<message>
<source>Ping</source>
- <translation type="unfinished">Ping</translation>
+ <translation>Ping</translation>
</message>
<message>
<source>Servers</source>
- <translation type="unfinished">Server</translation>
+ <translation>Server</translation>
</message>
<message>
<source>Age</source>
- <translation type="unfinished">Zeitalter</translation>
+ <translation>Zeitalter</translation>
</message>
<message>
<source>Element</source>
- <translation type="unfinished">Element</translation>
+ <translation>Element</translation>
</message>
<message>
<source>Language</source>
- <translation type="unfinished">Sprache</translation>
+ <translation>Sprache</translation>
</message>
<message>
<source>Set</source>
- <translation type="unfinished">Set</translation>
+ <translation>Set</translation>
</message>
<message>
<source>About</source>
- <translation type="unfinished">Über</translation>
+ <translation>Über</translation>
</message>
<message>
<source>MOUL is running</source>
- <translation type="unfinished">MOUL läuft</translation>
+ <translation>MOUL läuft</translation>
</message>
<message>
<source>MOUL</source>
- <translation type="unfinished">MOUL</translation>
+ <translation>MOUL</translation>
</message>
<message>
<source>MOUL is not running</source>
- <translation type="unfinished">MOUL läuft nicht</translation>
+ <translation>MOUL läuft nicht</translation>
</message>
<message>
<source>Chat and debug logs</source>
- <translation type="unfinished">Chat- und Fehlerlogs</translation>
+ <translation>Chat- und Fehlerlogs</translation>
</message>
<message>
<source>Archive chatlogs and zip log files</source>
- <translation type="unfinished">Archiviere Chatlogs und packe Logdateien</translation>
+ <translation>Archiviere Chatlogs und packe Logdateien</translation>
</message>
<message>
<source>Remove zipped logs</source>
- <translation type="unfinished">Entferne gepackte Logs</translation>
+ <translation>Entferne gepackte Logs</translation>
</message>
<message>
<source>Remove</source>
- <translation type="unfinished">Entferne</translation>
+ <translation>Entferne</translation>
</message>
<message>
<source>Archive</source>
- <translation type="unfinished">Archiviere</translation>
+ <translation>Archiviere</translation>
</message>
<message>
<source>Zip debug logs</source>
- <translation type="unfinished">Packe Debuglogs</translation>
+ <translation>Packe Debuglogs</translation>
</message>
<message>
<source>Delete debug logs</source>
- <translation type="unfinished">Lösche Debuglogs</translation>
+ <translation>Lösche Debuglogs</translation>
</message>
<message>
<source>KI Image repair</source>
- <translation type="unfinished">Repariere KI Bilder</translation>
+ <translation>Repariere KI Bilder</translation>
</message>
<message>
<source>Repair</source>
- <translation type="unfinished">Repareiere</translation>
+ <translation>Repareiere</translation>
</message>
<message>
<source>Fix KI and avatar images</source>
- <translation type="unfinished">Repariert KI- und Avatarbilder</translation>
+ <translation>Repariert KI- und Avatarbilder</translation>
</message>
<message>
<source>Tasks</source>
- <translation type="unfinished">Aufgaben</translation>
+ <translation>Aufgaben</translation>
</message>
<message>
<source>Other</source>
- <translation type="unfinished">Anderes</translation>
+ <translation>Anderes</translation>
</message>
<message>
<source>VSync</source>
- <translation type="unfinished">VSync</translation>
+ <translation>VSync</translation>
</message>
<message>
<source>pyMoul</source>
- <translation type="unfinished">pyMoul</translation>
+ <translation>pyMoul</translation>
</message>
<message>
<source>Settings</source>
- <translation type="unfinished">Einstellungen</translation>
+ <translation>Einstellungen</translation>
</message>
<message>
- <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Read chatlogs</source>
- <translation type="unfinished">Lese Chatlogs</translation>
+ <translation>Lese Chatlogs</translation>
</message>
<message>
<source>Chat logs</source>
- <translation type="unfinished">Chatlogs</translation>
+ <translation>Chatlogs</translation>
</message>
<message>
<source>Browse journals and notes</source>
- <translation type="unfinished">Lese Journale und Nachrichten</translation>
+ <translation>Lese Journale und Nachrichten</translation>
</message>
<message>
<source>Journals</source>
- <translation type="unfinished">Journale</translation>
+ <translation>Journale</translation>
</message>
<message>
<source>Browse</source>
- <translation type="unfinished">Lese</translation>
+ <translation>Lese</translation>
</message>
<message>
<source>About pyMoul</source>
- <translation type="unfinished">Über pyMoul</translation>
+ <translation>Über pyMoul</translation>
</message>
<message>
<source>License</source>
- <translation type="unfinished">Lizenz</translation>
+ <translation>Lizenz</translation>
</message>
<message>
<source>Load journals</source>
- <translation type="unfinished">Lade Journale</translation>
+ <translation>Lade Journale</translation>
</message>
<message>
<source>TextLabel</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tool for Myst Online : Uru Live
-
-(c) 2007 by Christian Heimes
-
-http://pymoul.sourceforge.net/</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Repairing KI images</source>
- <translation type="unfinished">Repariere KI Bilder</translation>
+ <translation>Repariere KI Bilder</translation>
</message>
<message>
<source>Sound priority</source>
- <translation type="unfinished">Tonpriorität</translation>
+ <translation>Tonpriorität</translation>
</message>
<message>
<source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -331,16 +316,40 @@
</message>
<message>
<source>Not implemented</source>
- <translation type="unfinished">Nicht implementiert</translation>
+ <translation>Nicht implementiert</translation>
</message>
<message>
<source>Unsaved changes!</source>
- <translation type="unfinished">Ungespeicherte Änderungen</translation>
+ <translation>Ungespeicherte Änderungen!</translation>
</message>
<message>
<source>Do you want to save your changes?</source>
- <translation type="unfinished">Wollen sie die Änderungen speichern?</translation>
+ <translation>Wollen sie die Änderungen speichern?</translation>
</message>
+ <message>
+ <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>
+<center>
+<h3>Tool for Myst Online : Uru Live</h3>
+
+<p>(c) 2007 Christian Heimes</p>
+
+<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
+</center>
+
+<p align="justify">If you like the tool please consider to <a href="%1">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my <a href="%2">PayPal account</a> using your PayPal account, credit card or bank account. You can also use the SourceForget.net <a href="%3">donate page</a>. Your money will be used to found my MOUL account and new hardware for my 4 years old computer.</p>
+
+<p>sincerely yours<br>
+Tiran [KI: #00025784]</p>
+ </source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts 2007-02-05 16:48:00 UTC (rev 143)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts 2007-02-06 03:51:21 UTC (rev 144)
@@ -264,13 +264,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Read chatlogs</source>
<translation type="unfinished"></translation>
</message>
@@ -307,14 +300,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tool for Myst Online : Uru Live
-
-(c) 2007 by Christian Heimes
-
-http://pymoul.sourceforge.net/</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Repairing KI images</source>
<translation type="unfinished"></translation>
</message>
@@ -341,6 +326,30 @@
<source>Do you want to save your changes?</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>
+<center>
+<h3>Tool for Myst Online : Uru Live</h3>
+
+<p>(c) 2007 Christian Heimes</p>
+
+<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
+</center>
+
+<p align="justify">If you like the tool please consider to <a href="%1">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my <a href="%2">PayPal account</a> using your PayPal account, credit card or bank account. You can also use the SourceForget.net <a href="%3">donate page</a>. Your money will be used to found my MOUL account and new hardware for my 4 years old computer.</p>
+
+<p>sincerely yours<br>
+Tiran [KI: #00025784]</p>
+ </source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts 2007-02-05 16:48:00 UTC (rev 143)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts 2007-02-06 03:51:21 UTC (rev 144)
@@ -264,13 +264,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Read chatlogs</source>
<translation type="unfinished"></translation>
</message>
@@ -307,14 +300,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tool for Myst Online : Uru Live
-
-(c) 2007 by Christian Heimes
-
-http://pymoul.sourceforge.net/</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Repairing KI images</source>
<translation type="unfinished"></translation>
</message>
@@ -341,6 +326,30 @@
<source>Do you want to save your changes?</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>
+<center>
+<h3>Tool for Myst Online : Uru Live</h3>
+
+<p>(c) 2007 Christian Heimes</p>
+
+<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
+</center>
+
+<p align="justify">If you like the tool please consider to <a href="%1">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my <a href="%2">PayPal account</a> using your PayPal account, credit card or bank account. You can also use the SourceForget.net <a href="%3">donate page</a>. Your money will be used to found my MOUL account and new hardware for my 4 years old computer.</p>
+
+<p>sincerely yours<br>
+Tiran [KI: #00025784]</p>
+ </source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts 2007-02-05 16:48:00 UTC (rev 143)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts 2007-02-06 03:51:21 UTC (rev 144)
@@ -264,13 +264,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Read chatlogs</source>
<translation type="unfinished"></translation>
</message>
@@ -307,14 +300,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tool for Myst Online : Uru Live
-
-(c) 2007 by Christian Heimes
-
-http://pymoul.sourceforge.net/</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Repairing KI images</source>
<translation type="unfinished"></translation>
</message>
@@ -341,6 +326,30 @@
<source>Do you want to save your changes?</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>
+<center>
+<h3>Tool for Myst Online : Uru Live</h3>
+
+<p>(c) 2007 Christian Heimes</p>
+
+<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
+</center>
+
+<p align="justify">If you like the tool please consider to <a href="%1">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my <a href="%2">PayPal account</a> using your PayPal account, credit card or bank account. You can also use the SourceForget.net <a href="%3">donate page</a>. Your money will be used to found my MOUL account and new hardware for my 4 years old computer.</p>
+
+<p>sincerely yours<br>
+Tiran [KI: #00025784]</p>
+ </source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SimpleProgressbar</name>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts 2007-02-05 16:48:00 UTC (rev 143)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts 2007-02-06 03:51:21 UTC (rev 144)
@@ -264,13 +264,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html></source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Read chatlogs</source>
<translation type="unfinished"></translation>
</message>
@@ -307,14 +300,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Tool for Myst Online : Uru Live
-
-(c) 2007 by Christian Heimes
-
-http://pymoul.sourceforge.net/</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>Repairing KI images</source>
<translation type="unfinished"></translation>
</message>
@@ -341,6 +326,30 @@
<source>Do you want to save your changes?</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>
+<center>
+<h3>Tool for Myst Online : Uru Live</h3>
+
+<p>(c) 2007 Christian Heimes</p>
+
+<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
+</center>
+
+<p align="justify">If you like the tool please consider to <a href="%1">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my <a href="%2">PayPal account</a> using your PayPal account, credit card or bank account. You can also use the SourceForget.net <a href="%3">donate page</a>. Your money will be used to found my MOUL account and new hardware for my 4 years old computer.</p>
+
+<p>sincerely yours<br>
+Tiran [KI: #00025784]</p>
+ </source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
<name>SimpleProgressbar</name>
Added: pymoul/trunk/src/moul/qt/i18n/translations.qrc
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/translations.qrc (rev 0)
+++ pymoul/trunk/src/moul/qt/i18n/translations.qrc 2007-02-06 03:51:21 UTC (rev 144)
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/translations" >
+ <file>pymoul_de.qm</file>
+ <file>pymoul_es.qm</file>
+ <file>pymoul_fr.qm</file>
+ <file>pymoul_it.qm</file>
+ <file>pymoul_nl.qm</file>
+ </qresource>
+</RCC>
+
Added: pymoul/trunk/src/moul/qt/i18n/translations_rc.py
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/translations_rc.py (rev 0)
+++ pymoul/trunk/src/moul/qt/i18n/translations_rc.py 2007-02-06 03:51:21 UTC (rev 144)
@@ -0,0 +1,414 @@
+# -*- coding: utf-8 -*-
+
+# Resource object code
+#
+# Created: Mo Feb 5 21:44:11 2007
+# by: The Resource Compiler for PyQt (Qt v4.2.0)
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore
+
+qt_resource_data = "\
+\x00\x00\x01\x51\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x00\x69\x00\x00\x00\x00\x2f\x00\x00\x01\x32\x00\x97\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\
+\x00\x00\x01\x51\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x00\x69\x00\x00\x00\x00\x2f\x00\x00\x01\x32\x00\x97\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\
+\x00\x00\x01\x51\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x00\x69\x00\x00\x00\x00\x2f\x00\x00\x01\x32\x00\x97\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\
+\x00\x00\x01\x51\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x00\x00\x69\x00\x00\x00\x00\x2f\x00\x00\x01\x32\x00\x97\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\
+\x00\x00\x10\x19\
+\x3c\
+\xb8\x64\x18\xca\xef\x9c\x95\xcd\x21\x1c\xbf\x60\xa1\xbd\xdd\x42\
+\x00\x00\x02\x70\x00\x00\x47\xd5\x00\x00\x00\x00\x00\x00\x53\x67\
+\x00\x00\x00\x1d\x00\x00\x59\xc4\x00\x00\x00\x36\x00\x04\xef\xd8\
+\x00\x00\x00\x47\x00\x05\x24\x9c\x00\x00\x00\x5a\x00\x05\x3b\x6e\
+\x00\x00\x00\x6d\x00\x05\x70\x47\x00\x00\x00\x80\x00\x47\x96\xc4\
+\x00\x00\x00\x93\x00\x48\xba\xff\x00\x00\x00\xa6\x00\x4b\x68\x54\
+\x00\x00\x00\xbb\x00\x52\xcc\xbc\x00\x00\x00\xda\x00\x54\xc9\xf3\
+\x00\x00\x00\xef\x00\x56\xae\xc2\x00\x00\x01\x04\x00\x5a\x8a\x23\
+\x00\x00\x01\x1d\x00\x5b\x0b\x25\x00\x00\x01\x38\x00\x5b\xb0\x43\
+\x00\x00\x01\x4d\x00\x5c\x3b\x81\x00\x00\x01\x62\x00\x64\x19\x77\
+\x00\x00\x01\x77\x00\x7e\x6c\x0a\x00\x00\x01\x96\x01\x93\x37\x13\
+\x00\x00\x01\xb5\x01\xab\x5c\xb3\x00\x00\x01\xfc\x02\x8f\x56\xc2\
+\x00\x00\x02\x27\x02\xe9\x8e\x3e\x00\x00\x02\x58\x02\xf9\xc5\xc5\
+\x00\x00\x02\x91\x03\x05\x6a\xdc\x00\x00\x02\xa8\x03\x92\xfa\x97\
+\x00\x00\x02\xc9\x03\x95\x76\xb3\x00\x00\x02\xfe\x04\x99\x6e\x95\
+\x00\x00\x03\x25\x04\xd7\xac\x54\x00\x00\x03\x38\x04\xe2\x4f\x1a\
+\x00\x00\x03\x6b\x05\x8c\x46\xc5\x00\x00\x03\x8c\x05\x8c\x68\x02\
+\x00\x00\x03\xa7\x05\xa0\x21\x53\x00\x00\x03\xc6\x05\xd0\xcd\x93\
+\x00\x00\x03\xeb\x05\xf8\x63\x97\x00\x00\x04\x0c\x06\x19\xf8\x33\
+\x00\x00\x04\x43\x06\x3e\x53\x23\x00\x00\x04\x76\x06\x80\x0f\x99\
+\x00\x00\x04\x9b\x06\x93\xd5\xd9\x00\x00\x04\xec\x06\xc9\x43\x23\
+\x00\x00\x05\x37\x06\xca\x7f\x51\x00\x00\x05\x52\x06\xcd\x5c\x79\
+\x00\x00\x05\x91\x07\x0d\x0d\x29\x00\x00\x05\xbc\x07\x7e\x46\xbc\
+\x00\x00\x05\xe5\x07\x86\xf4\xf3\x00\x00\x05\xfc\x07\xe0\x1a\x4f\
+\x00\x00\x06\x19\x08\x4e\xb2\xf5\x00\x00\x06\x6c\x08\x62\xc8\x91\
+\x00\x00\x06\x85\x08\x67\x7c\x03\x00\x00\x06\xec\x08\x6c\x74\x43\
+\x00\x00\x07\x07\x08\x86\xeb\x43\x00\x00\x07\x3e\x08\x89\xf0\x85\
+\x00\x00\x07\x55\x08\x8b\xdc\x65\x00\x00\x07\x74\x08\xb8\x30\xe9\
+\x00\x00\x07\x8f\x09\x23\x8d\x18\x00\x00\x07\xaa\x09\x73\x4b\x74\
+\x00\x00\x07\xcd\x09\xc9\xcc\xc3\x00\x00\x07\xec\x0a\x60\x8c\x6e\
+\x00\x00\x08\x03\x0a\xa2\x5f\x07\x00\x00\x08\x20\x0b\x4d\x0c\xe4\
+\x00\x00\x08\x3f\x0b\x5d\x62\x2e\x00\x00\x08\x72\x0b\xb1\x98\x63\
+\x00\x00\x08\xbb\x0c\x14\x88\xde\x00\x00\x08\xe4\x0c\x2c\x3c\x14\
+\x00\x00\x09\x11\x0c\x8b\x22\x33\x00\x00\x09\x2a\x0c\xa7\x63\x6c\
+\x00\x00\x09\x85\x0c\xb9\x85\xe3\x00\x00\x09\xa6\x0c\xbb\x01\x73\
+\x00\x00\x09\xcf\x0c\xd3\x7d\x01\x00\x00\x09\xf4\x0d\xca\xe4\xb3\
+\x00\x00\x0a\x51\x0e\x42\xf2\x69\x00\x00\x0a\x76\x0e\x4c\x4e\xf4\
+\x00\x00\x0a\x99\x0e\x5d\x7d\x69\x00\x00\x0a\xca\x0e\x6c\x4e\xf4\
+\x00\x00\x0a\xf1\x0e\x8c\xb2\xa3\x00\x00\x0b\x22\x0e\x9b\xcf\x67\
+\x00\x00\x0b\x53\x0f\x02\x2c\x83\x00\x00\x0b\x7e\x0f\x33\xb6\x5e\
+\x00\x00\x0b\xc3\x69\x00\x00\x0b\xfe\x03\x00\x00\x00\x12\x00\x5a\
+\x00\x65\x00\x69\x00\x74\x00\x61\x00\x6c\x00\x74\x00\x65\x00\x72\
+\x05\x00\x00\x47\xd5\x01\x03\x00\x00\x00\x0e\x00\x4e\x00\x69\x00\
+\x65\x00\x64\x00\x72\x00\x69\x00\x67\x05\x00\x00\x53\x67\x01\x03\
+\x00\x00\x00\x06\x00\x53\x00\x65\x00\x74\x05\x00\x00\x59\xc4\x01\
+\x03\x00\x00\x00\x08\x00\x48\x00\x6f\x00\x63\x00\x68\x05\x00\x04\
+\xef\xd8\x01\x03\x00\x00\x00\x08\x00\x4d\x00\x4f\x00\x55\x00\x4c\
+\x05\x00\x05\x24\x9c\x01\x03\x00\x00\x00\x08\x00\x4d\x00\x65\x00\
+\x64\x00\x2e\x05\x00\x05\x3b\x6e\x01\x03\x00\x00\x00\x08\x00\x50\
+\x00\x69\x00\x6e\x00\x67\x05\x00\x05\x70\x47\x01\x03\x00\x00\x00\
+\x08\x00\xdc\x00\x62\x00\x65\x00\x72\x05\x00\x47\x96\xc4\x01\x03\
+\x00\x00\x00\x0a\x00\x41\x00\x75\x00\x64\x00\x69\x00\x6f\x05\x00\
+\x48\xba\xff\x01\x03\x00\x00\x00\x14\x00\x49\x00\x6d\x00\x20\x00\
+\x46\x00\x65\x00\x6e\x00\x73\x00\x74\x00\x65\x00\x72\x05\x00\x4b\
+\x68\x54\x01\x03\x00\x00\x00\x0a\x00\x4c\x00\x65\x00\x76\x00\x65\
+\x00\x6c\x05\x00\x52\xcc\xbc\x01\x03\x00\x00\x00\x0a\x00\x4d\x00\
+\x75\x00\x73\x00\x69\x00\x6b\x05\x00\x54\xc9\xf3\x01\x03\x00\x00\
+\x00\x0e\x00\x41\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x65\x00\x73\
+\x05\x00\x56\xae\xc2\x01\x03\x00\x00\x00\x10\x00\x41\x00\x75\x00\
+\x66\x00\x67\x00\x61\x00\x62\x00\x65\x00\x6e\x05\x00\x5a\x8a\x23\
+\x01\x03\x00\x00\x00\x0a\x00\x54\x00\x69\x00\x74\x00\x65\x00\x6c\
+\x05\x00\x5b\x0b\x25\x01\x03\x00\x00\x00\x0a\x00\x56\x00\x53\x00\
+\x79\x00\x6e\x00\x63\x05\x00\x5b\xb0\x43\x01\x03\x00\x00\x00\x0a\
+\x00\x55\x00\x6c\x00\x74\x00\x72\x00\x61\x05\x00\x5c\x3b\x81\x01\
+\x03\x00\x00\x00\x14\x00\x4d\x00\x4f\x00\x55\x00\x4c\x00\x20\x00\
+\x6c\x00\xe4\x00\x75\x00\x66\x00\x74\x05\x00\x64\x19\x77\x01\x03\
+\x00\x00\x00\x14\x00\x43\x00\x79\x00\x61\x00\x6e\x00\x20\x00\x5a\
+\x00\x65\x00\x69\x00\x74\x00\x3a\x05\x00\x7e\x6c\x0a\x01\x03\x00\
+\x00\x00\x3c\x00\x52\x00\x65\x00\x70\x00\x61\x00\x72\x00\x69\x00\
+\x65\x00\x72\x00\x74\x00\x20\x00\x4b\x00\x49\x00\x2d\x00\x20\x00\
+\x75\x00\x6e\x00\x64\x00\x20\x00\x41\x00\x76\x00\x61\x00\x74\x00\
+\x61\x00\x72\x00\x62\x00\x69\x00\x6c\x00\x64\x00\x65\x00\x72\x05\
+\x01\x93\x37\x13\x01\x03\x00\x00\x00\x20\x00\x4c\x00\xf6\x00\x73\
+\x00\x63\x00\x68\x00\x65\x00\x20\x00\x44\x00\x65\x00\x62\x00\x75\
+\x00\x67\x00\x6c\x00\x6f\x00\x67\x00\x73\x05\x01\xab\x5c\xb3\x01\
+\x03\x00\x00\x00\x26\x00\x52\x00\x65\x00\x70\x00\x61\x00\x72\x00\
+\x69\x00\x65\x00\x72\x00\x65\x00\x20\x00\x4b\x00\x49\x00\x20\x00\
+\x42\x00\x69\x00\x6c\x00\x64\x00\x65\x00\x72\x05\x02\x8f\x56\xc2\
+\x01\x03\x00\x00\x00\x2e\x00\x4a\x00\x6f\x00\x75\x00\x72\x00\x6e\
+\x00\x61\x00\x6c\x00\x65\x00\x20\x00\x6e\x00\x69\x00\x63\x00\x68\
+\x00\x74\x00\x20\x00\x67\x00\x65\x00\x6c\x00\x61\x00\x64\x00\x65\
+\x00\x6e\x00\x2e\x05\x02\xe9\x8e\x3e\x01\x03\x00\x00\x00\x0c\x00\
+\x4c\x00\x69\x00\x7a\x00\x65\x00\x6e\x00\x7a\x05\x02\xf9\xc5\xc5\
+\x01\x03\x00\x00\x00\x16\x00\xdc\x00\x62\x00\x65\x00\x72\x00\x20\
+\x00\x70\x00\x79\x00\x4d\x00\x6f\x00\x75\x00\x6c\x05\x03\x05\x6a\
+\xdc\x01\x03\x00\x00\x00\x2a\x00\x70\x00\x79\x00\x4d\x00\x6f\x00\
+\x75\x00\x6c\x00\x20\x00\x51\x00\x54\x00\x20\x00\x6c\x00\xe4\x00\
+\x75\x00\x66\x00\x74\x00\x20\x00\x73\x00\x63\x00\x68\x00\x6f\x00\
+\x6e\x05\x03\x92\xfa\x97\x01\x03\x00\x00\x00\x1c\x00\x5a\x00\x65\
+\x00\x69\x00\x67\x00\x65\x00\x20\x00\x53\x00\x63\x00\x68\x00\x61\
+\x00\x74\x00\x74\x00\x65\x00\x6e\x05\x03\x95\x76\xb3\x01\x03\x00\
+\x00\x00\x08\x00\x4c\x00\x65\x00\x73\x00\x65\x05\x04\x99\x6e\x95\
+\x01\x03\x00\x00\x00\x28\x00\x48\x00\x69\x00\x6e\x00\x74\x00\x65\
+\x00\x72\x00\x67\x00\x72\x00\x75\x00\x6e\x00\x64\x00\x67\x00\x65\
+\x00\x72\x00\xe4\x00\x75\x00\x73\x00\x63\x00\x68\x00\x65\x05\x04\
+\xd7\xac\x54\x01\x03\x00\x00\x00\x16\x00\x48\x00\xf6\x00\x68\x00\
+\x6c\x00\x65\x00\x6e\x00\x7a\x00\x65\x00\x69\x00\x74\x00\x3a\x05\
+\x04\xe2\x4f\x1a\x01\x03\x00\x00\x00\x10\x00\x45\x00\x6e\x00\x74\
+\x00\x66\x00\x65\x00\x72\x00\x6e\x00\x65\x05\x05\x8c\x46\xc5\x01\
+\x03\x00\x00\x00\x14\x00\x52\x00\x65\x00\x70\x00\x61\x00\x72\x00\
+\x65\x00\x69\x00\x65\x00\x72\x00\x65\x05\x05\x8c\x68\x02\x01\x03\
+\x00\x00\x00\x1a\x00\x4c\x00\x61\x00\x64\x00\x65\x00\x20\x00\x4a\
+\x00\x6f\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\x00\x65\x05\x05\
+\xa0\x21\x53\x01\x03\x00\x00\x00\x16\x00\x4e\x00\x53\x00\x43\x00\
+\x20\x00\x53\x00\x74\x00\x69\x00\x6d\x00\x6d\x00\x65\x00\x6e\x05\
+\x05\xd0\xcd\x93\x01\x03\x00\x00\x00\x2c\x00\x41\x00\x6e\x00\x69\
+\x00\x73\x00\x6f\x00\x74\x00\x72\x00\x6f\x00\x70\x00\x69\x00\x73\
+\x00\x63\x00\x68\x00\x65\x00\x72\x00\x20\x00\x46\x00\x69\x00\x6c\
+\x00\x74\x00\x65\x00\x72\x05\x05\xf8\x63\x97\x01\x03\x00\x00\x00\
+\x28\x00\x43\x00\x68\x00\x61\x00\x74\x00\x2d\x00\x20\x00\x75\x00\
+\x6e\x00\x64\x00\x20\x00\x46\x00\x65\x00\x68\x00\x6c\x00\x65\x00\
+\x72\x00\x6c\x00\x6f\x00\x67\x00\x73\x05\x06\x19\xf8\x33\x01\x03\
+\x00\x00\x00\x1a\x00\x4c\x00\x65\x00\x73\x00\x65\x00\x20\x00\x43\
+\x00\x68\x00\x61\x00\x74\x00\x6c\x00\x6f\x00\x67\x00\x73\x05\x06\
+\x3e\x53\x23\x01\x03\x00\x00\x00\x46\x00\x46\x00\x65\x00\x68\x00\
+\x6c\x00\x65\x00\x72\x00\x20\x00\x62\x00\x65\x00\x69\x00\x6d\x00\
+\x20\x00\xd6\x00\x66\x00\x66\x00\x6e\x00\x65\x00\x6e\x00\x20\x00\
+\x76\x00\x6f\x00\x6e\x00\x20\x00\x67\x00\x72\x00\x61\x00\x70\x00\
+\x68\x00\x69\x00\x63\x00\x73\x00\x2e\x00\x69\x00\x6e\x00\x69\x05\
+\x06\x80\x0f\x99\x01\x03\x00\x00\x00\x40\x00\x46\x00\x65\x00\x68\
+\x00\x6c\x00\x65\x00\x72\x00\x20\x00\x62\x00\x65\x00\x69\x00\x6d\
+\x00\x20\x00\xd6\x00\x66\x00\x66\x00\x6e\x00\x65\x00\x6e\x00\x20\
+\x00\x76\x00\x6f\x00\x6e\x00\x20\x00\x61\x00\x75\x00\x64\x00\x69\
+\x00\x6f\x00\x2e\x00\x69\x00\x6e\x00\x69\x05\x06\x93\xd5\xd9\x01\
+\x03\x00\x00\x00\x10\x00\x4a\x00\x6f\x00\x75\x00\x72\x00\x6e\x00\
+\x61\x00\x6c\x00\x65\x05\x06\xc9\x43\x23\x01\x03\x00\x00\x00\x34\
+\x00\x55\x00\x6e\x00\x67\x00\x65\x00\x73\x00\x70\x00\x65\x00\x69\
+\x00\x63\x00\x68\x00\x65\x00\x72\x00\x74\x00\x65\x00\x20\x00\xc4\
+\x00\x6e\x00\x64\x00\x65\x00\x72\x00\x75\x00\x6e\x00\x67\x00\x65\
+\x00\x6e\x00\x21\x05\x06\xca\x7f\x51\x01\x03\x00\x00\x00\x20\x00\
+\x53\x00\x63\x00\x68\x00\x61\x00\x74\x00\x74\x00\x65\x00\x6e\x00\
+\x71\x00\x75\x00\x61\x00\x6c\x00\x69\x00\x74\x00\xe4\x00\x74\x05\
+\x06\xcd\x5c\x79\x01\x03\x00\x00\x00\x1e\x00\x54\x00\x65\x00\x78\
+\x00\x74\x00\x75\x00\x72\x00\x65\x00\x71\x00\x75\x00\x61\x00\x6c\
+\x00\x69\x00\x74\x00\xe4\x00\x74\x05\x07\x0d\x0d\x29\x01\x03\x00\
+\x00\x00\x0c\x00\x70\x00\x79\x00\x4d\x00\x6f\x00\x75\x00\x6c\x05\
+\x07\x7e\x46\xbc\x01\x03\x00\x00\x00\x12\x00\x5a\x00\x65\x00\x69\
+\x00\x74\x00\x7a\x00\x6f\x00\x6e\x00\x65\x00\x6e\x05\x07\x86\xf4\
+\xf3\x01\x03\x00\x00\x00\x48\x00\x57\x00\x6f\x00\x6c\x00\x6c\x00\
+\x65\x00\x6e\x00\x20\x00\x73\x00\x69\x00\x65\x00\x20\x00\x64\x00\
+\x69\x00\x65\x00\x20\x00\xc4\x00\x6e\x00\x64\x00\x65\x00\x72\x00\
+\x75\x00\x6e\x00\x67\x00\x65\x00\x6e\x00\x20\x00\x73\x00\x70\x00\
+\x65\x00\x69\x00\x63\x00\x68\x00\x65\x00\x72\x00\x6e\x00\x3f\x05\
+\x07\xe0\x1a\x4f\x01\x03\x00\x00\x00\x0e\x00\x53\x00\x70\x00\x72\
+\x00\x61\x00\x63\x00\x68\x00\x65\x05\x08\x4e\xb2\xf5\x01\x03\x00\
+\x00\x00\x5c\x00\x44\x00\x69\x00\x65\x00\x73\x00\x65\x00\x73\x00\
+\x20\x00\x46\x00\x65\x00\x61\x00\x74\x00\x75\x00\x72\x00\x65\x00\
+\x20\x00\x77\x00\x75\x00\x72\x00\x64\x00\x65\x00\x20\x00\x6e\x00\
+\x6f\x00\x63\x00\x68\x00\x20\x00\x6e\x00\x69\x00\x63\x00\x68\x00\
+\x74\x00\x20\x00\x69\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x6d\x00\
+\x65\x00\x6e\x00\x74\x00\x69\x00\x65\x00\x72\x00\x74\x00\x21\x05\
+\x08\x62\xc8\x91\x01\x03\x00\x00\x00\x10\x00\x43\x00\x68\x00\x61\
+\x00\x74\x00\x6c\x00\x6f\x00\x67\x00\x73\x05\x08\x67\x7c\x03\x01\
+\x03\x00\x00\x00\x2c\x00\x45\x00\x6e\x00\x74\x00\x66\x00\x65\x00\
+\x72\x00\x6e\x00\x65\x00\x20\x00\x67\x00\x65\x00\x70\x00\x61\x00\
+\x63\x00\x6b\x00\x74\x00\x65\x00\x20\x00\x4c\x00\x6f\x00\x67\x00\
+\x73\x05\x08\x6c\x74\x43\x01\x03\x00\x00\x00\x0c\x00\x47\x00\x72\
+\x00\x61\x00\x66\x00\x69\x00\x6b\x05\x08\x86\xeb\x43\x01\x03\x00\
+\x00\x00\x14\x00\x41\x00\x72\x00\x63\x00\x68\x00\x69\x00\x76\x00\
+\x69\x00\x65\x00\x72\x00\x65\x05\x08\x89\xf0\x85\x01\x03\x00\x00\
+\x00\x10\x00\x48\x00\x61\x00\x72\x00\x64\x00\x77\x00\x61\x00\x72\
+\x00\x65\x05\x08\x8b\xdc\x65\x01\x03\x00\x00\x00\x10\x00\x51\x00\
+\x75\x00\x61\x00\x6c\x00\x69\x00\x74\x00\xe4\x00\x74\x05\x08\xb8\
+\x30\xe9\x01\x03\x00\x00\x00\x18\x00\x41\x00\x6b\x00\x74\x00\x69\
+\x00\x76\x00\x69\x00\x65\x00\x72\x00\x20\x00\x45\x00\x41\x00\x58\
+\x05\x09\x23\x8d\x18\x01\x03\x00\x00\x00\x14\x00\x56\x00\x6f\x00\
+\x69\x00\x63\x00\x65\x00\x20\x00\x43\x00\x68\x00\x61\x00\x74\x05\
+\x09\x73\x4b\x74\x01\x03\x00\x00\x00\x0c\x00\x53\x00\x65\x00\x72\
+\x00\x76\x00\x65\x00\x72\x05\x09\xc9\xcc\xc3\x01\x03\x00\x00\x00\
+\x12\x00\x41\x00\x75\x00\x66\x00\x6c\x00\xf6\x00\x73\x00\x75\x00\
+\x6e\x00\x67\x05\x0a\x60\x8c\x6e\x01\x03\x00\x00\x00\x14\x00\x41\
+\x00\x6e\x00\x74\x00\x69\x00\x20\x00\x41\x00\x6c\x00\x69\x00\x61\
+\x00\x73\x05\x0a\xa2\x5f\x07\x01\x03\x00\x00\x00\x28\x00\x41\x00\
+\x6b\x00\x74\x00\x69\x00\x76\x00\x69\x00\x65\x00\x72\x00\x65\x00\
+\x20\x00\x56\x00\x6f\x00\x69\x00\x63\x00\x65\x00\x20\x00\x43\x00\
+\x68\x00\x61\x00\x74\x05\x0b\x4d\x0c\xe4\x01\x03\x00\x00\x00\x3e\
+\x00\x46\x00\x65\x00\x68\x00\x6c\x00\x65\x00\x72\x00\x20\x00\x62\
+\x00\x65\x00\x69\x00\x6d\x00\x20\x00\x4c\x00\x61\x00\x64\x00\x65\
+\x00\x6e\x00\x20\x00\x64\x00\x65\x00\x72\x00\x20\x00\x4a\x00\x6f\
+\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\x00\x65\x00\x2e\x05\x0b\
+\x5d\x62\x2e\x01\x03\x00\x00\x00\x1e\x00\x50\x00\x61\x00\x63\x00\
+\x6b\x00\x65\x00\x20\x00\x44\x00\x65\x00\x62\x00\x75\x00\x67\x00\
+\x6c\x00\x6f\x00\x67\x00\x73\x05\x0b\xb1\x98\x63\x01\x03\x00\x00\
+\x00\x22\x00\x4a\x00\x6f\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\
+\x00\x65\x00\x20\x00\x67\x00\x65\x00\x6c\x00\x61\x00\x64\x00\x65\
+\x00\x6e\x00\x2e\x05\x0c\x14\x88\xde\x01\x03\x00\x00\x00\x0e\x00\
+\x45\x00\x6c\x00\x65\x00\x6d\x00\x65\x00\x6e\x00\x74\x05\x0c\x2c\
+\x3c\x14\x01\x03\x00\x00\x00\x50\x00\x41\x00\x72\x00\x63\x00\x68\
+\x00\x69\x00\x76\x00\x69\x00\x65\x00\x72\x00\x65\x00\x20\x00\x43\
+\x00\x68\x00\x61\x00\x74\x00\x6c\x00\x6f\x00\x67\x00\x73\x00\x20\
+\x00\x75\x00\x6e\x00\x64\x00\x20\x00\x70\x00\x61\x00\x63\x00\x6b\
+\x00\x65\x00\x20\x00\x4c\x00\x6f\x00\x67\x00\x64\x00\x61\x00\x74\
+\x00\x65\x00\x69\x00\x65\x00\x6e\x05\x0c\x8b\x22\x33\x01\x03\x00\
+\x00\x00\x16\x00\x41\x00\x6c\x00\x6c\x00\x65\x00\x73\x00\x20\x00\
+\x73\x00\x74\x00\x75\x00\x6d\x00\x6d\x05\x0c\xa7\x63\x6c\x01\x03\
+\x00\x00\x00\x1e\x00\x53\x00\x65\x00\x72\x00\x76\x00\x65\x00\x72\
+\x00\x20\x00\x61\x00\x6e\x00\x70\x00\x69\x00\x6e\x00\x67\x00\x65\
+\x00\x6e\x05\x0c\xb9\x85\xe3\x01\x03\x00\x00\x00\x1a\x00\x45\x00\
+\x69\x00\x6e\x00\x73\x00\x74\x00\x65\x00\x6c\x00\x6c\x00\x75\x00\
+\x6e\x00\x67\x00\x65\x00\x6e\x05\x0c\xbb\x01\x73\x01\x03\x00\x00\
+\x00\x52\x00\x45\x00\x69\x00\x6e\x00\x65\x00\x20\x00\x49\x00\x6e\
+\x00\x73\x00\x74\x00\x61\x00\x6e\x00\x7a\x00\x20\x00\x76\x00\x6f\
+\x00\x6e\x00\x20\x00\x70\x00\x79\x00\x4d\x00\x6f\x00\x75\x00\x6c\
+\x00\x20\x00\x51\x00\x54\x00\x20\x00\x6c\x00\xe4\x00\x75\x00\x66\
+\x00\x74\x00\x20\x00\x62\x00\x65\x00\x72\x00\x65\x00\x69\x00\x74\
+\x00\x73\x00\x21\x05\x0c\xd3\x7d\x01\x01\x03\x00\x00\x00\x1a\x00\
+\x4c\x00\x61\x00\x64\x00\x65\x00\x20\x00\x4a\x00\x6f\x00\x75\x00\
+\x72\x00\x6e\x00\x61\x00\x6c\x00\x65\x05\x0d\xca\xe4\xb3\x01\x03\
+\x00\x00\x00\x18\x00\x54\x00\x6f\x00\x6e\x00\x70\x00\x72\x00\x69\
+\x00\x6f\x00\x72\x00\x69\x00\x74\x00\xe4\x00\x74\x05\x0e\x42\xf2\
+\x69\x01\x03\x00\x00\x00\x26\x00\x4e\x00\x69\x00\x63\x00\x68\x00\
+\x74\x00\x20\x00\x69\x00\x6d\x00\x70\x00\x6c\x00\x65\x00\x6d\x00\
+\x65\x00\x6e\x00\x74\x00\x69\x00\x65\x00\x72\x00\x74\x05\x0e\x4c\
+\x4e\xf4\x01\x03\x00\x00\x00\x1c\x00\x47\x00\x72\x00\x61\x00\x66\
+\x00\x69\x00\x6b\x00\x71\x00\x75\x00\x61\x00\x6c\x00\x69\x00\x74\
+\x00\xe4\x00\x74\x05\x0e\x5d\x7d\x69\x01\x03\x00\x00\x00\x26\x00\
+\x4e\x00\x69\x00\x63\x00\x68\x00\x74\x00\x20\x00\x69\x00\x6d\x00\
+\x70\x00\x6c\x00\x65\x00\x6d\x00\x65\x00\x6e\x00\x74\x00\x69\x00\
+\x65\x00\x72\x00\x74\x05\x0e\x6c\x4e\xf4\x01\x03\x00\x00\x00\x26\
+\x00\x52\x00\x65\x00\x70\x00\x61\x00\x72\x00\x69\x00\x65\x00\x72\
+\x00\x65\x00\x20\x00\x4b\x00\x49\x00\x20\x00\x42\x00\x69\x00\x6c\
+\x00\x64\x00\x65\x00\x72\x05\x0e\x8c\xb2\xa3\x01\x03\x00\x00\x00\
+\x20\x00\x4d\x00\x4f\x00\x55\x00\x4c\x00\x20\x00\x6c\x00\xe4\x00\
+\x75\x00\x66\x00\x74\x00\x20\x00\x6e\x00\x69\x00\x63\x00\x68\x00\
+\x74\x05\x0e\x9b\xcf\x67\x01\x03\x00\x00\x00\x3a\x00\x4c\x00\x65\
+\x00\x73\x00\x65\x00\x20\x00\x4a\x00\x6f\x00\x75\x00\x72\x00\x6e\
+\x00\x61\x00\x6c\x00\x65\x00\x20\x00\x75\x00\x6e\x00\x64\x00\x20\
+\x00\x4e\x00\x61\x00\x63\x00\x68\x00\x72\x00\x69\x00\x63\x00\x68\
+\x00\x74\x00\x65\x00\x6e\x05\x0f\x02\x2c\x83\x01\x03\x00\x00\x00\
+\x30\x00\x4b\x00\x65\x00\x69\x00\x6e\x00\x65\x00\x20\x00\x4a\x00\
+\x6f\x00\x75\x00\x72\x00\x6e\x00\x61\x00\x6c\x00\x65\x00\x20\x00\
+\x67\x00\x65\x00\x66\x00\x75\x00\x6e\x00\x64\x00\x65\x00\x6e\x00\
+\x2e\x05\x0f\x33\xb6\x5e\x01\x2f\x00\x00\x01\x8c\x00\x97\x00\x00\
+\x00\x00\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x0b\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x0e\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x1a\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x23\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x29\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\
+\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x11\x53\
+\x69\x6d\x70\x6c\x65\x50\x72\x6f\x67\x72\x65\x73\x73\x62\x61\x72\
+\x00\x00\x03\x61\x70\x70\x00\x00\x15\x4c\x...
[truncated message content] |
|
From: <ti...@us...> - 2007-02-05 16:49:39
|
Revision: 143
http://pymoul.svn.sourceforge.net/pymoul/?rev=143&view=rev
Author: tiran
Date: 2007-02-05 08:48:00 -0800 (Mon, 05 Feb 2007)
Log Message:
-----------
ISS fixes
Modified Paths:
--------------
pymoul/trunk/utilities/distutils_iss.py
pymoul/trunk/utilities/setup_win32.py
Modified: pymoul/trunk/utilities/distutils_iss.py
===================================================================
--- pymoul/trunk/utilities/distutils_iss.py 2007-02-05 16:33:44 UTC (rev 142)
+++ pymoul/trunk/utilities/distutils_iss.py 2007-02-05 16:48:00 UTC (rev 143)
@@ -327,7 +327,8 @@
templates = self.inno_templates,
interpolation = self.inno_interpolation,
sections = self.inno_sections,
- languages = self.inno_languages)
+ languages = self.inno_languages,
+ version = self.inno_version)
print "*** creating the inno setup script***"
self._inno_script.create()
Modified: pymoul/trunk/utilities/setup_win32.py
===================================================================
--- pymoul/trunk/utilities/setup_win32.py 2007-02-05 16:33:44 UTC (rev 142)
+++ pymoul/trunk/utilities/setup_win32.py 2007-02-05 16:48:00 UTC (rev 143)
@@ -83,6 +83,7 @@
# InnoSetup
pexe['innosetup'] = os.environ.get('INNOSETUP') # TODO:
pexe['inno_templates'] = "template.iss"
+ pexe['inno_version'] = kw['version']
pexe['app_name'] = 'pyMoul'
pexe['includes'].extend(findPyTz())
kw['zipfile'] = 'library.zip'
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-05 16:49:31
|
Revision: 142
http://pymoul.svn.sourceforge.net/pymoul/?rev=142&view=rev
Author: tiran
Date: 2007-02-05 08:33:44 -0800 (Mon, 05 Feb 2007)
Log Message:
-----------
Fixed quotes in paypal link
Modified Paths:
--------------
pymoul/trunk/src/moul/qt/mainwindow.py
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-05 16:16:28 UTC (rev 141)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-05 16:33:44 UTC (rev 142)
@@ -105,12 +105,11 @@
<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
</center>
-<p align="justify">If you like the tool please consider to <a href="%1">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my PayPal account using your PayPal account, credit card or bank account.</p>
+<p align="justify">If you like the tool please consider to <a href="https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&bus...@ch...&item_name=Donate for Tiran's open source activities&page_style=PayPal&no_shipping=2&cn=Your note for me&tax=0¤cy_code=EUR&lc=DE&bn=PP-DonationsBF&charset=UTF-8">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my PayPal account using your PayPal account, credit card or bank account.</p>
<p>sincerely yours<br>
Tiran [KI: #00025784]</p>
""")
- about.arg("https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=christian%40cheimes%2ede&item_name=Donate%20for%20Tiran%27s%20open%20source%20activities&page_style=PayPal&no_shipping=2&cn=Your%20note%20for%20me&tax=0¤cy_code=EUR&lc=DE&bn=PP%2dDonationsBF&charset=UTF%2d8")
self.tb_abouttext.setHtml(about)
def on_moulIsRunning(self, boolean):
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-05 16:17:10
|
Revision: 141
http://pymoul.svn.sourceforge.net/pymoul/?rev=141&view=rev
Author: tiran
Date: 2007-02-05 08:16:28 -0800 (Mon, 05 Feb 2007)
Log Message:
-----------
Use text browser instead of text edit to display text.
More about text
Modified Paths:
--------------
pymoul/trunk/src/moul/qt/localization.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/ui/mainwindow.py
pymoul/trunk/src/moul/qt/ui/mainwindow.ui
Modified: pymoul/trunk/src/moul/qt/localization.py
===================================================================
--- pymoul/trunk/src/moul/qt/localization.py 2007-02-05 14:51:30 UTC (rev 140)
+++ pymoul/trunk/src/moul/qt/localization.py 2007-02-05 16:16:28 UTC (rev 141)
@@ -137,7 +137,7 @@
names = ['language', 'age', 'set', 'element', 'doc']
for name in names[names.index(name):]:
if name == 'doc':
- qobj = self.te_doc_view
+ qobj = self.tb_journal_view
else:
qobj = getattr(self.context, 'cb_doc_%s' % name)
qobj.clear()
@@ -190,5 +190,5 @@
element = self._documents_state['elements'][idx-1]
translation = tr[(lang, age, set, element)]
qstr = QtCore.QString(translation)
- self.te_doc_view.setPlainText(qstr)
- self.te_doc_view.setEnabled(True)
+ self.tb_journal_view.setPlainText(qstr)
+ self.tb_journal_view.setEnabled(True)
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-05 14:51:30 UTC (rev 140)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-05 16:16:28 UTC (rev 141)
@@ -96,6 +96,23 @@
self.on_moulIsRunning)
self._moulrunning_thread.startChecker(5.0) # check now and every 5 seconds
+ about = self.trUtf8("""
+<center>
+<h3>Tool for Myst Online : Uru Live</h3>
+
+<p>(c) 2007 Christian Heimes</p>
+
+<p><a href="http://pymoul.sourceforge.net">http://pymoul.sourceforge.net</a></p>
+</center>
+
+<p align="justify">If you like the tool please consider to <a href="%1">donate</a> some money to sponsor my work. The tool is created in my free time as an open source project. You can sent money to my PayPal account using your PayPal account, credit card or bank account.</p>
+
+<p>sincerely yours<br>
+Tiran [KI: #00025784]</p>
+ """)
+ about.arg("https://www.paypal.com/cgi-bin/webscr?cmd=_xclick&business=christian%40cheimes%2ede&item_name=Donate%20for%20Tiran%27s%20open%20source%20activities&page_style=PayPal&no_shipping=2&cn=Your%20note%20for%20me&tax=0¤cy_code=EUR&lc=DE&bn=PP%2dDonationsBF&charset=UTF%2d8")
+ self.tb_abouttext.setHtml(about)
+
def on_moulIsRunning(self, boolean):
"""
@qtslot moulIsRunning(bool): notify if moul is running
@@ -274,7 +291,7 @@
# ************************************************************************
# about tab
def _about_init(self):
- self.te_license.setPlainText(metadata.LICENSE)
+ self.tb_license.setPlainText(metadata.LICENSE)
# ************************************************************************
# time zones
@@ -344,28 +361,28 @@
def on_pingthread_started(self):
self.button_ping.setEnabled(False)
- self.text_ping.clear()
+ self.tb_ping_view.clear()
def on_pingthread_done(self):
self.button_ping.setEnabled(True)
def on_pingthread_server(self, name):
pass
- #self.text_ping.insertPlainText("%s ... " % name)
+ #self.tb_ping_view.insertPlainText("%s ... " % name)
def on_pingthread_dns(self, name, time):
- self.text_ping.insertPlainText("%s ... DNS: %0.3f " % (name, time))
+ self.tb_ping_view.insertPlainText("%s ... DNS: %0.3f " % (name, time))
def on_pingthread_ping(self, name, time):
- self.text_ping.insertPlainText("PING: %0.3f\n" % time)
+ self.tb_ping_view.insertPlainText("PING: %0.3f\n" % time)
def on_pingthread_dnserror(self, name, errcode, errmsg):
LOG.error('dns error: %s, %i, %s' % (name, errcode, errmsg))
- self.text_ping.insertPlainText("%s ... DNS error: %s\n" % (name, errmsg))
+ self.tb_ping_view.insertPlainText("%s ... DNS error: %s\n" % (name, errmsg))
def on_pingthread_pingerror(self, name, errcode, errmsg):
LOG.error('ping error: %s, %i, %s' % (name, errcode, errmsg))
- self.text_ping.insertPlainText("PING error: %s\n" % errmsg)
+ self.tb_ping_view.insertPlainText("PING error: %s\n" % errmsg)
@pyqtSignature("bool")
def on_button_ping_clicked(self, ignore=False):
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.py 2007-02-05 14:51:30 UTC (rev 140)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.py 2007-02-05 16:16:28 UTC (rev 141)
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file './src/moul/qt/ui/mainwindow.ui'
#
-# Created: Mon Feb 5 15:25:54 2007
+# Created: Mon Feb 5 17:13:00 2007
# by: PyQt4 UI code generator 4.1.1
#
# WARNING! All changes made in this file will be lost!
@@ -738,16 +738,15 @@
self.gb_servers.setGeometry(QtCore.QRect(10,0,451,401))
self.gb_servers.setObjectName("gb_servers")
- self.text_ping = QtGui.QTextEdit(self.gb_servers)
- self.text_ping.setGeometry(QtCore.QRect(10,20,431,341))
- self.text_ping.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAsNeeded)
- self.text_ping.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
- self.text_ping.setReadOnly(True)
- self.text_ping.setObjectName("text_ping")
-
self.button_ping = QtGui.QPushButton(self.gb_servers)
self.button_ping.setGeometry(QtCore.QRect(370,370,75,24))
self.button_ping.setObjectName("button_ping")
+
+ self.tb_ping_view = QtGui.QTextBrowser(self.gb_servers)
+ self.tb_ping_view.setGeometry(QtCore.QRect(10,20,431,341))
+ self.tb_ping_view.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
+ self.tb_ping_view.setOpenExternalLinks(True)
+ self.tb_ping_view.setObjectName("tb_ping_view")
self.tabwidget.addTab(self.tab_ping,"")
self.tab_browse = QtGui.QWidget()
@@ -765,14 +764,6 @@
self.groupBox_5.setGeometry(QtCore.QRect(10,0,451,371))
self.groupBox_5.setObjectName("groupBox_5")
- self.te_chatlog_view = QtGui.QTextEdit(self.groupBox_5)
- self.te_chatlog_view.setGeometry(QtCore.QRect(10,50,431,311))
- self.te_chatlog_view.setUndoRedoEnabled(False)
- self.te_chatlog_view.setReadOnly(True)
- self.te_chatlog_view.setAcceptRichText(False)
- self.te_chatlog_view.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
- self.te_chatlog_view.setObjectName("te_chatlog_view")
-
self.cb_chatlog = QtGui.QComboBox(self.groupBox_5)
self.cb_chatlog.setGeometry(QtCore.QRect(70,20,323,22))
@@ -782,6 +773,12 @@
sizePolicy.setHeightForWidth(self.cb_chatlog.sizePolicy().hasHeightForWidth())
self.cb_chatlog.setSizePolicy(sizePolicy)
self.cb_chatlog.setObjectName("cb_chatlog")
+
+ self.tb_chatlog_view = QtGui.QTextBrowser(self.groupBox_5)
+ self.tb_chatlog_view.setGeometry(QtCore.QRect(10,50,431,311))
+ self.tb_chatlog_view.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
+ self.tb_chatlog_view.setOpenExternalLinks(True)
+ self.tb_chatlog_view.setObjectName("tb_chatlog_view")
self.tabWidget.addTab(self.tab_sub_chatlogs,"")
self.tab_sub_journals = QtGui.QWidget()
@@ -853,12 +850,11 @@
self.lb_doc_status.setObjectName("lb_doc_status")
self.gridlayout2.addWidget(self.lb_doc_status,1,2,3,1)
- self.te_doc_view = QtGui.QTextEdit(self.gb_documents)
- self.te_doc_view.setGeometry(QtCore.QRect(10,140,431,221))
- self.te_doc_view.setUndoRedoEnabled(False)
- self.te_doc_view.setReadOnly(True)
- self.te_doc_view.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
- self.te_doc_view.setObjectName("te_doc_view")
+ self.tb_journal_view = QtGui.QTextBrowser(self.gb_documents)
+ self.tb_journal_view.setGeometry(QtCore.QRect(10,140,431,221))
+ self.tb_journal_view.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
+ self.tb_journal_view.setOpenExternalLinks(True)
+ self.tb_journal_view.setObjectName("tb_journal_view")
self.tabWidget.addTab(self.tab_sub_journals,"")
self.tabwidget.addTab(self.tab_browse,"")
@@ -872,28 +868,21 @@
self.tab_sub_about = QtGui.QWidget()
self.tab_sub_about.setObjectName("tab_sub_about")
- self.label_6 = QtGui.QLabel(self.tab_sub_about)
- self.label_6.setGeometry(QtCore.QRect(20,10,431,351))
- self.label_6.setTextFormat(QtCore.Qt.PlainText)
- self.label_6.setAlignment(QtCore.Qt.AlignCenter)
- self.label_6.setObjectName("label_6")
+ self.tb_abouttext = QtGui.QTextBrowser(self.tab_sub_about)
+ self.tb_abouttext.setGeometry(QtCore.QRect(10,10,451,361))
+ self.tb_abouttext.setTextInteractionFlags(QtCore.Qt.TextBrowserInteraction)
+ self.tb_abouttext.setOpenExternalLinks(True)
+ self.tb_abouttext.setObjectName("tb_abouttext")
self.tabwidget_about.addTab(self.tab_sub_about,"")
self.tab_sub_license = QtGui.QWidget()
self.tab_sub_license.setObjectName("tab_sub_license")
- self.te_license = QtGui.QTextEdit(self.tab_sub_license)
- self.te_license.setGeometry(QtCore.QRect(10,10,446,361))
-
- font = QtGui.QFont(self.te_license.font())
- font.setPointSize(7)
- self.te_license.setFont(font)
- self.te_license.setAcceptDrops(False)
- self.te_license.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
- self.te_license.setUndoRedoEnabled(False)
- self.te_license.setReadOnly(True)
- self.te_license.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
- self.te_license.setObjectName("te_license")
+ self.tb_license = QtGui.QTextBrowser(self.tab_sub_license)
+ self.tb_license.setGeometry(QtCore.QRect(10,10,451,361))
+ self.tb_license.setTextInteractionFlags(QtCore.Qt.TextSelectableByMouse)
+ self.tb_license.setOpenExternalLinks(True)
+ self.tb_license.setObjectName("tb_license")
self.tabwidget_about.addTab(self.tab_sub_license,"")
self.tabwidget.addTab(self.tab_about,"")
@@ -978,18 +967,14 @@
self.tab_sub_settings.setTabText(self.tab_sub_settings.indexOf(self.tab_audio), QtGui.QApplication.translate("MainWindow", "Audio", None, QtGui.QApplication.UnicodeUTF8))
self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_settings), QtGui.QApplication.translate("MainWindow", "Settings", None, QtGui.QApplication.UnicodeUTF8))
self.gb_servers.setTitle(QtGui.QApplication.translate("MainWindow", "Ping servers", None, QtGui.QApplication.UnicodeUTF8))
- self.text_ping.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
- "p, li { white-space: pre-wrap; }\n"
- "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
- "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:\'MS Shell Dlg 2\'; font-size:8pt;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.button_ping.setText(QtGui.QApplication.translate("MainWindow", "Ping", None, QtGui.QApplication.UnicodeUTF8))
self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_ping), QtGui.QApplication.translate("MainWindow", "Servers", None, QtGui.QApplication.UnicodeUTF8))
self.groupBox_5.setTitle(QtGui.QApplication.translate("MainWindow", "Read chatlogs", None, QtGui.QApplication.UnicodeUTF8))
- self.te_chatlog_view.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+ self.cb_chatlog.addItem(QtGui.QApplication.translate("MainWindow", "Not implemented", None, QtGui.QApplication.UnicodeUTF8))
+ self.tb_chatlog_view.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
"p, li { white-space: pre-wrap; }\n"
"</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\">Not implemented</p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
- self.cb_chatlog.addItem(QtGui.QApplication.translate("MainWindow", "Not implemented", None, QtGui.QApplication.UnicodeUTF8))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_sub_chatlogs), QtGui.QApplication.translate("MainWindow", "Chat logs", None, QtGui.QApplication.UnicodeUTF8))
self.gb_documents.setTitle(QtGui.QApplication.translate("MainWindow", "Browse journals and notes", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("MainWindow", "Language", None, QtGui.QApplication.UnicodeUTF8))
@@ -1000,12 +985,15 @@
self.lb_doc_status.setText(QtGui.QApplication.translate("MainWindow", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_sub_journals), QtGui.QApplication.translate("MainWindow", "Journals", None, QtGui.QApplication.UnicodeUTF8))
self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_browse), QtGui.QApplication.translate("MainWindow", "Browse", None, QtGui.QApplication.UnicodeUTF8))
- self.label_6.setText(QtGui.QApplication.translate("MainWindow", "Tool for Myst Online : Uru Live\n"
- "\n"
- "(c) 2007 by Christian Heimes\n"
- "\n"
- "http://pymoul.sourceforge.net/", None, QtGui.QApplication.UnicodeUTF8))
+ self.tb_abouttext.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+ "p, li { white-space: pre-wrap; }\n"
+ "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
+ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.tabwidget_about.setTabText(self.tabwidget_about.indexOf(self.tab_sub_about), QtGui.QApplication.translate("MainWindow", "About pyMoul", None, QtGui.QApplication.UnicodeUTF8))
+ self.tb_license.setHtml(QtGui.QApplication.translate("MainWindow", "<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">\n"
+ "p, li { white-space: pre-wrap; }\n"
+ "</style></head><body style=\" font-family:\'Sans Serif\'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;\">\n"
+ "<p style=\"-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"></p></body></html>", None, QtGui.QApplication.UnicodeUTF8))
self.tabwidget_about.setTabText(self.tabwidget_about.indexOf(self.tab_sub_license), QtGui.QApplication.translate("MainWindow", "License", None, QtGui.QApplication.UnicodeUTF8))
self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_about), QtGui.QApplication.translate("MainWindow", "About", None, QtGui.QApplication.UnicodeUTF8))
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.ui
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.ui 2007-02-05 14:51:30 UTC (rev 140)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.ui 2007-02-05 16:16:28 UTC (rev 141)
@@ -1574,31 +1574,6 @@
<property name="title" >
<string>Ping servers</string>
</property>
- <widget class="QTextEdit" name="text_ping" >
- <property name="geometry" >
- <rect>
- <x>10</x>
- <y>20</y>
- <width>431</width>
- <height>341</height>
- </rect>
- </property>
- <property name="verticalScrollBarPolicy" >
- <enum>Qt::ScrollBarAsNeeded</enum>
- </property>
- <property name="horizontalScrollBarPolicy" >
- <enum>Qt::ScrollBarAlwaysOff</enum>
- </property>
- <property name="readOnly" >
- <bool>true</bool>
- </property>
- <property name="html" >
- <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px; font-family:'MS Shell Dlg 2'; font-size:8pt;"></p></body></html></string>
- </property>
- </widget>
<widget class="QPushButton" name="button_ping" >
<property name="geometry" >
<rect>
@@ -1612,6 +1587,22 @@
<string>Ping</string>
</property>
</widget>
+ <widget class="QTextBrowser" name="tb_ping_view" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>20</y>
+ <width>431</width>
+ <height>341</height>
+ </rect>
+ </property>
+ <property name="textInteractionFlags" >
+ <enum>Qt::TextSelectableByMouse</enum>
+ </property>
+ <property name="openExternalLinks" >
+ <bool>true</bool>
+ </property>
+ </widget>
</widget>
</widget>
<widget class="QWidget" name="tab_browse" >
@@ -1649,34 +1640,6 @@
<property name="title" >
<string>Read chatlogs</string>
</property>
- <widget class="QTextEdit" name="te_chatlog_view" >
- <property name="geometry" >
- <rect>
- <x>10</x>
- <y>50</y>
- <width>431</width>
- <height>311</height>
- </rect>
- </property>
- <property name="undoRedoEnabled" >
- <bool>false</bool>
- </property>
- <property name="readOnly" >
- <bool>true</bool>
- </property>
- <property name="html" >
- <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
-p, li { white-space: pre-wrap; }
-</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
-<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Not implemented</p></body></html></string>
- </property>
- <property name="acceptRichText" >
- <bool>false</bool>
- </property>
- <property name="textInteractionFlags" >
- <enum>Qt::TextSelectableByMouse</enum>
- </property>
- </widget>
<widget class="QComboBox" name="cb_chatlog" >
<property name="geometry" >
<rect>
@@ -1700,6 +1663,28 @@
</property>
</item>
</widget>
+ <widget class="QTextBrowser" name="tb_chatlog_view" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>50</y>
+ <width>431</width>
+ <height>311</height>
+ </rect>
+ </property>
+ <property name="html" >
+ <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style=" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;">Not implemented</p></body></html></string>
+ </property>
+ <property name="textInteractionFlags" >
+ <enum>Qt::TextSelectableByMouse</enum>
+ </property>
+ <property name="openExternalLinks" >
+ <bool>true</bool>
+ </property>
+ </widget>
</widget>
</widget>
<widget class="QWidget" name="tab_sub_journals" >
@@ -1838,7 +1823,7 @@
</item>
</layout>
</widget>
- <widget class="QTextEdit" name="te_doc_view" >
+ <widget class="QTextBrowser" name="tb_journal_view" >
<property name="geometry" >
<rect>
<x>10</x>
@@ -1847,15 +1832,12 @@
<height>221</height>
</rect>
</property>
- <property name="undoRedoEnabled" >
- <bool>false</bool>
- </property>
- <property name="readOnly" >
- <bool>true</bool>
- </property>
<property name="textInteractionFlags" >
<enum>Qt::TextSelectableByMouse</enum>
</property>
+ <property name="openExternalLinks" >
+ <bool>true</bool>
+ </property>
</widget>
</widget>
</widget>
@@ -1881,27 +1863,26 @@
<attribute name="title" >
<string>About pyMoul</string>
</attribute>
- <widget class="QLabel" name="label_6" >
+ <widget class="QTextBrowser" name="tb_abouttext" >
<property name="geometry" >
<rect>
- <x>20</x>
+ <x>10</x>
<y>10</y>
- <width>431</width>
- <height>351</height>
+ <width>451</width>
+ <height>361</height>
</rect>
</property>
- <property name="text" >
- <string>Tool for Myst Online : Uru Live
-
-(c) 2007 by Christian Heimes
-
-http://pymoul.sourceforge.net/</string>
+ <property name="html" >
+ <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></string>
</property>
- <property name="textFormat" >
- <enum>Qt::PlainText</enum>
+ <property name="textInteractionFlags" >
+ <enum>Qt::TextBrowserInteraction</enum>
</property>
- <property name="alignment" >
- <set>Qt::AlignCenter</set>
+ <property name="openExternalLinks" >
+ <bool>true</bool>
</property>
</widget>
</widget>
@@ -1909,35 +1890,27 @@
<attribute name="title" >
<string>License</string>
</attribute>
- <widget class="QTextEdit" name="te_license" >
+ <widget class="QTextBrowser" name="tb_license" >
<property name="geometry" >
<rect>
<x>10</x>
<y>10</y>
- <width>446</width>
+ <width>451</width>
<height>361</height>
</rect>
</property>
- <property name="font" >
- <font>
- <pointsize>7</pointsize>
- </font>
+ <property name="html" >
+ <string><html><head><meta name="qrichtext" content="1" /><style type="text/css">
+p, li { white-space: pre-wrap; }
+</style></head><body style=" font-family:'Sans Serif'; font-size:9pt; font-weight:400; font-style:normal; text-decoration:none;">
+<p style="-qt-paragraph-type:empty; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;"></p></body></html></string>
</property>
- <property name="acceptDrops" >
- <bool>false</bool>
- </property>
- <property name="horizontalScrollBarPolicy" >
- <enum>Qt::ScrollBarAlwaysOff</enum>
- </property>
- <property name="undoRedoEnabled" >
- <bool>false</bool>
- </property>
- <property name="readOnly" >
- <bool>true</bool>
- </property>
<property name="textInteractionFlags" >
<enum>Qt::TextSelectableByMouse</enum>
</property>
+ <property name="openExternalLinks" >
+ <bool>true</bool>
+ </property>
</widget>
</widget>
</widget>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-05 14:51:31
|
Revision: 140
http://pymoul.svn.sourceforge.net/pymoul/?rev=140&view=rev
Author: tiran
Date: 2007-02-05 06:51:30 -0800 (Mon, 05 Feb 2007)
Log Message:
-----------
Fixed some unit tests
Manually set tab order
Modified Paths:
--------------
pymoul/trunk/src/moul/config/__init__.py
pymoul/trunk/src/moul/file/chatlog.py
pymoul/trunk/src/moul/file/tests/test_plasmalog.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/ui/mainwindow.py
pymoul/trunk/src/moul/qt/ui/mainwindow.ui
Modified: pymoul/trunk/src/moul/config/__init__.py
===================================================================
--- pymoul/trunk/src/moul/config/__init__.py 2007-02-05 14:03:09 UTC (rev 139)
+++ pymoul/trunk/src/moul/config/__init__.py 2007-02-05 14:51:30 UTC (rev 140)
@@ -93,7 +93,7 @@
"""List
>>> cfg = listConfig()
- >>> len(cfg) > 0
+ >>> len(cfg) == 0
True
>>> type(cfg)
<type 'dict'>
Modified: pymoul/trunk/src/moul/file/chatlog.py
===================================================================
--- pymoul/trunk/src/moul/file/chatlog.py 2007-02-05 14:03:09 UTC (rev 139)
+++ pymoul/trunk/src/moul/file/chatlog.py 2007-02-05 14:51:30 UTC (rev 140)
@@ -121,7 +121,7 @@
'modtime' : mtime,
'created' : created,
'newname' : newname,
- 'v' : os.path.join(self._dest, newname),
+ 'newpath' : os.path.join(self._dest, newname),
}
self._logs.append(details)
Modified: pymoul/trunk/src/moul/file/tests/test_plasmalog.py
===================================================================
--- pymoul/trunk/src/moul/file/tests/test_plasmalog.py 2007-02-05 14:03:09 UTC (rev 139)
+++ pymoul/trunk/src/moul/file/tests/test_plasmalog.py 2007-02-05 14:51:30 UTC (rev 140)
@@ -109,10 +109,11 @@
pass
content = os.listdir(self._kidest)
self.failUnlessEqual(len(content), 1, content)
- self.failUnlessEqual(content, ["KIimage001.jpg"])
+ self.failUnless(content[0].startswith("KIimage_200"))
+ self.failUnless(content[0].endswith("_0001.jpg"))
cleandata = open(os.path.join(base, 'avatar_clean.jpg'), 'rb').read()
- newdata = open(os.path.join(self._kidest, "KIimage001.jpg"), 'rb').read()
+ newdata = open(os.path.join(self._kidest, content[0]), 'rb').read()
self.failUnlessEqual(len(cleandata), len(newdata))
self.failUnlessEqual(cleandata, newdata)
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-05 14:03:09 UTC (rev 139)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-05 14:51:30 UTC (rev 140)
@@ -58,7 +58,12 @@
QtGui.QMainWindow.__init__(self)
# Set up the user interface from Designer.
self.setupUi(self)
-
+
+ #self.lb_top_image.setPixmap(QtGui.QPixmap(":/resources/moul_logo.png"))
+ self.tabWidget.setCurrentIndex(0)
+ self.tab_sub_settings.setCurrentIndex(0)
+ self.tabwidget_about.setCurrentIndex(0)
+
# hook up main buttonbox
but = self.main_buttonbox.button
self.main_buttonbox_reset = but(QtGui.QDialogButtonBox.Reset)
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.py 2007-02-05 14:03:09 UTC (rev 139)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.py 2007-02-05 14:51:30 UTC (rev 140)
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file './src/moul/qt/ui/mainwindow.ui'
#
-# Created: Mon Feb 5 03:59:23 2007
+# Created: Mon Feb 5 15:25:54 2007
# by: PyQt4 UI code generator 4.1.1
#
# WARNING! All changes made in this file will be lost!
@@ -38,7 +38,6 @@
self.lb_top_image.setMaximumSize(QtCore.QSize(434,61))
self.lb_top_image.setFrameShape(QtGui.QFrame.StyledPanel)
self.lb_top_image.setFrameShadow(QtGui.QFrame.Sunken)
- self.lb_top_image.setPixmap(QtGui.QPixmap(":/resources/moul_logo.png"))
self.lb_top_image.setObjectName("lb_top_image")
self.hboxlayout.addWidget(self.lb_top_image)
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.ui
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.ui 2007-02-05 14:03:09 UTC (rev 139)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.ui 2007-02-05 14:51:30 UTC (rev 140)
@@ -80,9 +80,6 @@
<property name="text" >
<string/>
</property>
- <property name="pixmap" >
- <pixmap resource="moulqt.qrc" >:/resources/moul_logo.png</pixmap>
- </property>
</widget>
</item>
<item>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-05 14:03:10
|
Revision: 139
http://pymoul.svn.sourceforge.net/pymoul/?rev=139&view=rev
Author: tiran
Date: 2007-02-05 06:03:09 -0800 (Mon, 05 Feb 2007)
Log Message:
-----------
Added make serverlist command
Updated serverlist: removed bogus tests
Modified Paths:
--------------
pymoul/trunk/Makefile.in
pymoul/trunk/src/moul/server/ping.py
pymoul/trunk/src/moul/server/serverlist.py
Modified: pymoul/trunk/Makefile.in
===================================================================
--- pymoul/trunk/Makefile.in 2007-02-05 04:14:41 UTC (rev 138)
+++ pymoul/trunk/Makefile.in 2007-02-05 14:03:09 UTC (rev 139)
@@ -97,3 +97,6 @@
importchecker:
$(PYTHON) utilities/importchecker.py ./src/moul/
+serverlist:
+ PYTHONPATH="src" $(PYTHON) src/moul/server/serverlist.py
+
Modified: pymoul/trunk/src/moul/server/ping.py
===================================================================
--- pymoul/trunk/src/moul/server/ping.py 2007-02-05 04:14:41 UTC (rev 138)
+++ pymoul/trunk/src/moul/server/ping.py 2007-02-05 14:03:09 UTC (rev 139)
@@ -32,7 +32,7 @@
"""A server object
"""
- def __init__(self, name, port, timeout=3.0):
+ def __init__(self, name, port=PORT, timeout=3.0):
self._name = name
self._port = int(port)
self._timeout = float(timeout)
Modified: pymoul/trunk/src/moul/server/serverlist.py
===================================================================
--- pymoul/trunk/src/moul/server/serverlist.py 2007-02-05 04:14:41 UTC (rev 138)
+++ pymoul/trunk/src/moul/server/serverlist.py 2007-02-05 14:03:09 UTC (rev 139)
@@ -43,8 +43,6 @@
'uruapp-cw15.ibs.aol.com',
'uruapp-cw16.ibs.aol.com',
'uruapp-cw17.ibs.aol.com',
- 'bogus.test.example', # no DNS
- 'www.urulive.com', # no PING
## The servers below are available via ICMP ping but have no running game
## server (2006-01-17)
#'uruapp-cw18.ibs.aol.com',
@@ -53,3 +51,24 @@
#'uruapp-cw21.ibs.aol.com',
#'uruapp-cw22.ibs.aol.com',
]
+
+def _ping():
+ """Search for new servers
+ """
+ from moul.server.ping import Server
+ new = []
+ for i in range(1, 25):
+ name = 'uruapp-cw%02i.ibs.aol.com' % i
+ srv = Server(name)
+ dns = srv.dns()
+ pp = srv.portping()
+ print name, dns, pp
+ if isinstance(dns, float) and isinstance(pp, float) and \
+ name not in SERVER_LIST:
+ new.append(name)
+ print "\nNew servers found:\n"
+ for name in new:
+ print " '%s'," % name
+
+if __name__ == '__main__':
+ _ping()
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-05 04:14:41
|
Revision: 138
http://pymoul.svn.sourceforge.net/pymoul/?rev=138&view=rev
Author: tiran
Date: 2007-02-04 20:14:41 -0800 (Sun, 04 Feb 2007)
Log Message:
-----------
Fixed typo
Modified Paths:
--------------
pymoul/trunk/src/moul/osdependent/win32/__init__.py
Modified: pymoul/trunk/src/moul/osdependent/win32/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/win32/__init__.py 2007-02-05 04:09:41 UTC (rev 137)
+++ pymoul/trunk/src/moul/osdependent/win32/__init__.py 2007-02-05 04:14:41 UTC (rev 138)
@@ -40,7 +40,7 @@
MYAPPDATA = winpath.getAppdata()
PROGRAMFILES = winpath.getProgramFiles()
HOME = winpath.getHome()
-DESKTOP = winpath.getHome()
+DESKTOP = winpath.getDesktop()
LOCATIONS = [
# my location
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-05 04:09:42
|
Revision: 137
http://pymoul.svn.sourceforge.net/pymoul/?rev=137&view=rev
Author: tiran
Date: 2007-02-04 20:09:41 -0800 (Sun, 04 Feb 2007)
Log Message:
-----------
Removed second implemenation of procesinfo stuff
Added getMoulInstallDir() function and a list of locations for Win32 and Linux
Modified Paths:
--------------
pymoul/trunk/src/moul/config/__init__.py
pymoul/trunk/src/moul/osdependent/__init__.py
pymoul/trunk/src/moul/osdependent/linux/__init__.py
pymoul/trunk/src/moul/osdependent/win32/__init__.py
pymoul/trunk/src/moul/osdependent/win32/winpath.py
Modified: pymoul/trunk/src/moul/config/__init__.py
===================================================================
--- pymoul/trunk/src/moul/config/__init__.py 2007-02-05 03:19:59 UTC (rev 136)
+++ pymoul/trunk/src/moul/config/__init__.py 2007-02-05 04:09:41 UTC (rev 137)
@@ -45,8 +45,8 @@
from moul.osdependent import getMoulUserDataDir
from moul.osdependent import getPyMoulDataDir
+from moul.osdependent import getMoulInstallDir
-
_marker=object()
# configuration
@@ -111,9 +111,7 @@
addSection = _configuration.addSection
listConfig = _configuration.listConfig
-# hard coded for my system
-#setOption('moul', 'installdir', 'D:\\games\\MystOnline')
-setOption('moul', 'installdir', '/home/heimes/dev/pymoul/MystOnline')
+#setOption('moul', 'installdir', '')
## directories
class Directories(object):
@@ -124,7 +122,7 @@
self._config = config
def getMoulInstallDir(self):
- return self._config.getOption('moul.installdir')
+ return getMoulInstallDir()
def getMoulUserDataDir(self):
return getMoulUserDataDir()
Modified: pymoul/trunk/src/moul/osdependent/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/__init__.py 2007-02-05 03:19:59 UTC (rev 136)
+++ pymoul/trunk/src/moul/osdependent/__init__.py 2007-02-05 04:09:41 UTC (rev 137)
@@ -59,10 +59,13 @@
__POSIX__, __NT__)
# names to import: from moul.osdependent.ID import NAME (as NAME)
-NAMES = ('getMoulUserDataDir',
- ('getPyMoulDataDir', '_getPyMoulDataDir'), # as
- 'startMoul', 'isMoulRunning',
- )
+NAMES = (
+ 'getMoulUserDataDir',
+ 'getMoulInstallDir',
+ ('getPyMoulDataDir', '_getPyMoulDataDir'), # as
+ 'startMoul',
+ 'isMoulRunning',
+ )
_marker = object()
Modified: pymoul/trunk/src/moul/osdependent/linux/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/linux/__init__.py 2007-02-05 03:19:59 UTC (rev 136)
+++ pymoul/trunk/src/moul/osdependent/linux/__init__.py 2007-02-05 04:09:41 UTC (rev 137)
@@ -23,6 +23,7 @@
import os
from subprocess import Popen
+from moul.osdependent.processinfo import getPidNames
from moul.log import getLogger
@@ -35,6 +36,11 @@
EXEC_NAME = "UruLauncher"
HOME = os.environ['HOME']
PROCESSES = ('urulauncher', 'uruexplorer')
+LOCATIONS = [
+ "%s/dev/pymoul/MystOnline" % HOME,
+ "/media/d/games/MystOnline",
+ "/usr/local/games/MystOnline"
+ ]
def getMoulUserDataDir():
"""Get path of MOUL data directory
@@ -50,6 +56,17 @@
inidir= os.path.join(HOME, '.pymoul')
return inidir
+def getMoulInstallDir():
+ """Get path to MOUL install dir
+ """
+ for path in LOCATIONS:
+ if os.path.isfile(os.path.join(path, EXEC_NAME)):
+ LOG.info("Uru directory found: %s" % path)
+ return path
+ LOG.warning("Uru directory NOT found! Search path was: \n %s" %
+ repr(LOCATIONS))
+ return 'INVALID'
+
def startMoul(installdir, *args, **kwargs):
"""Start MOUL - returns a Popen instance
@@ -63,55 +80,7 @@
def isMoulRunning():
"""Test if MOUL or the launcher is running
"""
- for pid, name in getCurrentPidNames().items():
+ for pid, name in getPidNames().items():
if name.lower() in PROCESSES:
- return name.lower()
+ return pid
return False
-
-# process info
-# based on http://gelb.bcom.at/trac/misc/browser/processinfo
-def getCurrentPids():
- """Returns current process ids
- """
- pids = []
- for fname in os.listdir("/proc"):
- if os.path.isdir(os.path.join("/proc", fname)):
- try:
- pids.append(int(fname))
- except ValueError:
- continue
- return pids
-
-def getCurrentPidDetails():
- """Returns mapping pid -> detailed informations
- """
- mapping = {}
- for pid in getCurrentPids():
- try:
- try:
- # read entiry file to avoid race condition bugs
- fd = open('/proc/%i/status' % pid, 'rb')
- status = fd.read().split('\n')
- finally:
- if fd:
- fd.close()
- except IOError:
- continue
- details = {}
- for line in status:
- try:
- key, value = line.split(':\t')
- except ValueError:
- continue
- details[key.lower()] = value.strip()
- mapping[pid] = details
-
- return mapping
-
-def getCurrentPidNames():
- """Returns mapping pid -> name
- """
- mapping = {}
- for pid, details in getCurrentPidDetails().items():
- mapping[pid] = details.get('name', None)
- return mapping
Modified: pymoul/trunk/src/moul/osdependent/win32/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/win32/__init__.py 2007-02-05 03:19:59 UTC (rev 136)
+++ pymoul/trunk/src/moul/osdependent/win32/__init__.py 2007-02-05 04:09:41 UTC (rev 137)
@@ -26,8 +26,7 @@
from moul.log import getLogger
from moul.osdependent.processinfo import getPidNames
-from moul.osdependent.win32.winpath import get_appdata as getAppdata
-from moul.osdependent.win32.winpath import get_homedir as getMyDocuments
+from moul.osdependent.win32 import winpath
LOG = getLogger('moul.win')
@@ -37,9 +36,21 @@
# lower case
PROCESSES = ("urulauncher.exe", "uruexplorer.exe")
-MYDOCS = getMyDocuments()
-MYAPPDATA = getAppdata()
+MYDOCS = winpath.getMyDocuments()
+MYAPPDATA = winpath.getAppdata()
+PROGRAMFILES = winpath.getProgramFiles()
+HOME = winpath.getHome()
+DESKTOP = winpath.getHome()
+LOCATIONS = [
+ # my location
+ r"D:\games\MystOnline",
+ r"%s\moul\MystOnline" % DESKTOP,
+ # generic locations
+ r"%s\Myst Online" % PROGRAMFILES,
+ r"%s\GameTap\volumes\games\140000150\data" % PROGRAMFILES,
+ ]
+
def getMoulUserDataDir():
"""Get path of MOUL data directory
@@ -55,6 +66,17 @@
inidir = os.path.join(MYAPPDATA , 'pyMoul')
return inidir
+def getMoulInstallDir():
+ """Get path to MOUL install dir
+ """
+ for path in LOCATIONS:
+ if os.path.isfile(os.path.join(path, EXEC_NAME)):
+ LOG.info("Uru directory found: %s" % path)
+ return path
+ LOG.warning("Uru directory NOT found! Search path was: \n %s" %
+ repr(LOCATIONS))
+ return 'INVALID'
+
def startMoul(installdir, *args, **kwargs):
"""Start MOUL - returns a Popen instance
@@ -70,6 +92,5 @@
"""
for pid, name in getPidNames().items():
if name.lower() in PROCESSES:
- return pid, name.lower()
+ return pid
return False
-
Modified: pymoul/trunk/src/moul/osdependent/win32/winpath.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/win32/winpath.py 2007-02-05 03:19:59 UTC (rev 136)
+++ pymoul/trunk/src/moul/osdependent/win32/winpath.py 2007-02-05 04:09:41 UTC (rev 137)
@@ -27,9 +27,10 @@
__copyright__ = "Python license"
# standard library modules
-import _winreg, os
+import _winreg
+import os
+import re
-
SHELL_FOLDERS = \
r'Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders'
USER_SHELL_FOLDERS = \
@@ -41,20 +42,14 @@
def _substenv(m):
return os.environ.get(m.group(1), m.group(0))
-_env_rx = None
+_env_rx = re.compile(r'%([^|<>=^%]+)%')
def expandvars(s):
"""Expand environment variables of form %var%.
Unknown variables are left unchanged.
"""
-
- global _env_rx
-
if '%' not in s:
return s
- if _env_rx is None:
- import re
- _env_rx = re.compile(r'%([^|<>=^%]+)%')
return _env_rx.sub(_substenv, s)
def _get_reg_value(key, subkey, name):
@@ -63,7 +58,6 @@
Environment variables in values of type REG_EXPAND_SZ are expanded
if possible.
"""
-
key = _winreg.OpenKey(key, subkey)
try:
ret = _winreg.QueryValueEx(key, name)
@@ -78,46 +72,47 @@
def _get_reg_user_value(key, name):
"""Return a windows registry value from the CURRENT_USER branch."""
-
return _get_reg_value(HKCU, key, name)
def _get_reg_machine_value(key, name):
"""Return a windows registry value from the LOCAL_MACHINE branch."""
-
return _get_reg_value(HKLM, key, name)
# public functions
-def get_appdata():
- """Return path of directory where apps should store user specific data."""
-
+def getAppdata():
+ """Return path of directory where apps should store user specific data.
+ """
return _get_reg_user_value(SHELL_FOLDERS, 'AppData')
-def get_common_shellfolders():
- """Return mapping of shell folder names (all users) to paths."""
+def getCommonShellfolders():
+ """Return mapping of shell folder names (all users) to paths.
+ """
+ return getShellfolders(branch=HKLM)
- return get_shellfolders(branch=HKLM)
+def getMyDocuments():
+ """Return path to user home directory, i.e. 'My Files'.
+ """
+ return _get_reg_user_value(SHELL_FOLDERS, 'Personal')
-def get_homedir():
- """Return path to user home directory, i.e. 'My Files'."""
+def getDesktop():
+ """Return path to desktop.
+ """
+ return _get_reg_user_value(SHELL_FOLDERS, 'Desktop')
- return _get_reg_user_value(SHELL_FOLDERS, 'Personal')
-
-def get_sharedconf(prog, *args):
+def getSharedconf(prog, *args):
"""Return path to shared configuration data for 'prog' from 'vendor'.
Additional arguments are appended via os.path.join().
See also: get_user_conf()
"""
-
return os.path.join(
_get_reg_machine_value(SHELL_FOLDERS, 'Common AppData'),
vendor, prog, *args
)
-def get_shellfolders(branch=HKCU, key=SHELL_FOLDERS):
+def getShellfolders(branch=HKCU, key=SHELL_FOLDERS):
"""Return mapping of shell folder names (current user) to paths."""
-
key = _winreg.OpenKey(branch, key)
folders = {}
i = 0
@@ -134,7 +129,7 @@
key.Close()
return folders
-def get_userconf(vendor, prog, *args):
+def getUserconf(vendor, prog, *args):
"""Return path to user configuration data for 'prog' from 'vendor'.
Additional arguments are appended via os.path.join(), e.g.
@@ -142,10 +137,19 @@
optionsfn = get_userconf("ACME Soft", "Exploder", "Options.xml")
"""
+ return os.path.join(getAppdata(), vendor, prog, *args)
- return os.path.join(get_appdata(), vendor, prog, *args)
+def getWindir():
+ """Convenience function to get path to windows installation directory.
+ """
+ return unicode(os.environ["WINDIR"])
-def get_windir():
- """Convenience function to get path to windows installation directory."""
+def getProgramFiles():
+ """Convenience function to get path to program files directory.
+ """
+ return unicode(os.environ["PROGRAMFILES"])
- return unicode(os.environ["WINDIR"])
+def getHome():
+ """Convenience function to get path to home directory.
+ """
+ return unicode(os.path.expanduser("~"))
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-05 03:20:00
|
Revision: 136
http://pymoul.svn.sourceforge.net/pymoul/?rev=136&view=rev
Author: tiran
Date: 2007-02-04 19:19:59 -0800 (Sun, 04 Feb 2007)
Log Message:
-----------
German translation (very rough)
Modified Paths:
--------------
pymoul/trunk/src/moul/qt/i18n/pymoul_de.qm
pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_de.qm
===================================================================
(Binary files differ)
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts 2007-02-05 03:04:23 UTC (rev 135)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts 2007-02-05 03:19:59 UTC (rev 136)
@@ -3,49 +3,49 @@
<name>IniFileContainer</name>
<message>
<source>Error opening graphics.ini</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Fehler beim Öffnen von graphics.ini</translation>
</message>
<message>
<source>Error opening audio.ini</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Fehler beim Öffnen von audio.ini</translation>
</message>
</context>
<context>
<name>LocalizationContainer</name>
<message>
<source>Unable to load journals.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Fehler beim Laden der Journale.</translation>
</message>
<message>
<source>No journals found.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Keine Journale gefunden.</translation>
</message>
<message>
<source>Loading journals</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Lade Journale</translation>
</message>
<message>
<source>Journals loaded.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Journale geladen.</translation>
</message>
<message>
<source>Journals not loaded.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Journale nicht geladen.</translation>
</message>
</context>
<context>
<name>MainWindow</name>
<message>
<source>Windowed</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Im Fenster</translation>
</message>
<message>
<source>Display Shadows</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Zeige Schatten</translation>
</message>
<message>
<source>Screen Resolution</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Auflösung</translation>
</message>
<message>
<source>800x600 (4:3)</source>
@@ -53,55 +53,55 @@
</message>
<message>
<source>Quality</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Qualität</translation>
</message>
<message>
<source>Texture Quality</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Texturequalität</translation>
</message>
<message>
<source>Low</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Niedrig</translation>
</message>
<message>
<source>High</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Hoch</translation>
</message>
<message>
<source>Anti-Aliasing</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Anti Alias</translation>
</message>
<message>
<source>Graphics Quality</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Grafikqualität</translation>
</message>
<message>
<source>Med.</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Med.</translation>
</message>
<message>
<source>Ultra</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Ultra</translation>
</message>
<message>
<source>Shadow Quality</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Schattenqualität</translation>
</message>
<message>
<source>Anisotropic-Filtering</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Anisotropischer Filter</translation>
</message>
<message>
<source>Graphics</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Grafik</translation>
</message>
<message>
<source>Level</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Level</translation>
</message>
<message>
<source>NPC Voices</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">NSC Stimmen</translation>
</message>
<message>
<source>Sound FX</source>
@@ -109,19 +109,19 @@
</message>
<message>
<source>Ambience Sound</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Hintergrundgeräusche</translation>
</message>
<message>
<source>Music</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Musik</translation>
</message>
<message>
<source>Mute all</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Alles stumm</translation>
</message>
<message>
<source>Hardware</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Hardware</translation>
</message>
<message>
<source>Generic Software</source>
@@ -129,31 +129,31 @@
</message>
<message>
<source>Enable EAX</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Aktivier EAX</translation>
</message>
<message>
<source>Voice chat</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Voice Chat</translation>
</message>
<message>
<source>Enable Voice Chat</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Aktiviere Voice Chat</translation>
</message>
<message>
<source>Audio</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Audio</translation>
</message>
<message>
<source>Time zones</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Zeitzonen</translation>
</message>
<message>
<source>Cavern time:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Höhlenzeit</translation>
</message>
<message>
<source>Cyan time:</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Cyan Zeit</translation>
</message>
<message>
<source>UTC -0</source>
@@ -161,107 +161,107 @@
</message>
<message>
<source>Ping servers</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Server anpingen</translation>
</message>
<message>
<source>Ping</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Ping</translation>
</message>
<message>
<source>Servers</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Server</translation>
</message>
<message>
<source>Age</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Zeitalter</translation>
</message>
<message>
<source>Element</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Element</translation>
</message>
<message>
<source>Language</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Sprache</translation>
</message>
<message>
<source>Set</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Set</translation>
</message>
<message>
<source>About</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Über</translation>
</message>
<message>
<source>MOUL is running</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">MOUL läuft</translation>
</message>
<message>
<source>MOUL</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">MOUL</translation>
</message>
<message>
<source>MOUL is not running</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">MOUL läuft nicht</translation>
</message>
<message>
<source>Chat and debug logs</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Chat- und Fehlerlogs</translation>
</message>
<message>
<source>Archive chatlogs and zip log files</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Archiviere Chatlogs und packe Logdateien</translation>
</message>
<message>
<source>Remove zipped logs</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Entferne gepackte Logs</translation>
</message>
<message>
<source>Remove</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Entferne</translation>
</message>
<message>
<source>Archive</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Archiviere</translation>
</message>
<message>
<source>Zip debug logs</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Packe Debuglogs</translation>
</message>
<message>
<source>Delete debug logs</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Lösche Debuglogs</translation>
</message>
<message>
<source>KI Image repair</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Repariere KI Bilder</translation>
</message>
<message>
<source>Repair</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Repareiere</translation>
</message>
<message>
<source>Fix KI and avatar images</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Repariert KI- und Avatarbilder</translation>
</message>
<message>
<source>Tasks</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Aufgaben</translation>
</message>
<message>
<source>Other</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Anderes</translation>
</message>
<message>
<source>VSync</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">VSync</translation>
</message>
<message>
<source>pyMoul</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">pyMoul</translation>
</message>
<message>
<source>Settings</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Einstellungen</translation>
</message>
<message>
<source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -272,35 +272,35 @@
</message>
<message>
<source>Read chatlogs</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Lese Chatlogs</translation>
</message>
<message>
<source>Chat logs</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Chatlogs</translation>
</message>
<message>
<source>Browse journals and notes</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Lese Journale und Nachrichten</translation>
</message>
<message>
<source>Journals</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Journale</translation>
</message>
<message>
<source>Browse</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Lese</translation>
</message>
<message>
<source>About pyMoul</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Über pyMoul</translation>
</message>
<message>
<source>License</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Lizenz</translation>
</message>
<message>
<source>Load journals</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Lade Journale</translation>
</message>
<message>
<source>TextLabel</source>
@@ -316,11 +316,11 @@
</message>
<message>
<source>Repairing KI images</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Repariere KI Bilder</translation>
</message>
<message>
<source>Sound priority</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Tonpriorität</translation>
</message>
<message>
<source><html><head><meta name="qrichtext" content="1" /><style type="text/css">
@@ -331,44 +331,44 @@
</message>
<message>
<source>Not implemented</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Nicht implementiert</translation>
</message>
<message>
<source>Unsaved changes!</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Ungespeicherte Änderungen</translation>
</message>
<message>
<source>Do you want to save your changes?</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Wollen sie die Änderungen speichern?</translation>
</message>
</context>
<context>
<name>SimpleProgressbar</name>
<message>
<source>Title</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Titel</translation>
</message>
</context>
<context>
<name>app</name>
<message>
<source>pyMoul QT already running</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">pyMoul QT läuft schon</translation>
</message>
<message>
<source>An instance of pyMoul QT is already running!</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Eine Instanz von pyMoul QT läuft bereits!</translation>
</message>
</context>
<context>
<name>context</name>
<message>
<source>Not Implemented</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Nicht implementiert</translation>
</message>
<message>
<source>Sorry, this feature is not implemented yet!</source>
- <translation type="unfinished"></translation>
+ <translation type="unfinished">Dieses Feature wurde noch nicht implementiert!</translation>
</message>
</context>
</TS>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-05 03:04:22
|
Revision: 135
http://pymoul.svn.sourceforge.net/pymoul/?rev=135&view=rev
Author: tiran
Date: 2007-02-04 19:04:23 -0800 (Sun, 04 Feb 2007)
Log Message:
-----------
UI reneval
updates languages
added not implemented infos
Modified Paths:
--------------
pymoul/trunk/doc/XXXreport.html
pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
pymoul/trunk/src/moul/qt/localization.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/ui/mainwindow.py
pymoul/trunk/src/moul/qt/ui/mainwindow.ui
pymoul/trunk/src/moul/qt/utils.py
Modified: pymoul/trunk/doc/XXXreport.html
===================================================================
--- pymoul/trunk/doc/XXXreport.html 2007-02-05 00:33:55 UTC (rev 134)
+++ pymoul/trunk/doc/XXXreport.html 2007-02-05 03:04:23 UTC (rev 135)
@@ -3,19 +3,15 @@
<body>
<h1>pyMoul - Developer report tools: XXX/TODO/FIXME comments</h1>
-<p>Generated on Fri, 02 Feb 2007 18:18:36 CET, based on Zope 3's XXX report</p>
+<p>Generated on Mon, 05 Feb 2007 03:58:55 CET, based on Zope 3's XXX report</p>
<hr>
<h3>Summary</h3>
<p>
- There are currently 100 XXX/TODO/FIXME comments.
+ There are currently 94 XXX/TODO/FIXME comments.
</p>
<hr/>
<h3>Listing</h3>
-<ol><li><b>File: utilities/../.svn/text-base/ez_setup.py.svn-base:92</b><br/><pre> # XXX could we install in a subprocess here?
-base-93- print >>sys.stderr, (
-base-94- "The required version of setuptools (>=%s) is not available, and\n"
-base-95- "can't be installed while this script is running. Please install\n"
-</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:548</b><br/><pre> # XXX bug: doctest may report several failures in one test, they are
+<ol><li><b>File: utilities/../.svn/text-base/test.py.svn-base:548</b><br/><pre> # XXX bug: doctest may report several failures in one test, they are
base-549- # separated by a horizontal dash line. Only the first one of
base-550- # them is now colorized properly.
base-551- header = lines[0]
@@ -31,16 +27,8 @@
base-691- from zope.tales.tales import TALESTracebackSupplement
base-692- from zope.pagetemplate.pagetemplate \
base-693- import PageTemplateTracebackSupplement
-</pre></li><li><b>File: utilities/../.svn/text-base/setup_win32.py.svn-base:84</b><br/><pre> pexe['innosetup'] = os.environ.get('INNOSETUP') # TODO:
-base-85- pexe['inno_templates'] = "template.iss"
-base-86- pexe['app_name'] = 'pyMoul'
-base-87- pexe['includes'].extend(findPyTz())
-</pre></li><li><b>File: utilities/../.svn/text-base/distutils_upx.py.svn-base:117</b><br/><pre> sys.exit(retcode) # XXX
-base-118-
-base-119- def _upxAvailable(self):
-base-120- """Search for UPX in search path
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
-base-269- return iter(self._fd)
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+base-281- return iter(self._fd)
</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre> # XXX use struct
base-113- if header is None:
base-114- fd = self._fd
@@ -49,55 +37,59 @@
base-128- if size is None:
base-129- size = self.getFileSize()
base-130- leading = 4* [None]
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:156</b><br/><pre> # TODO: write me
-base-157- pass
-base-158-
-base-159-class Constrain(object):
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:540</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
-base-541- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
-base-542- # microphon missing -> OS mixer
-base-543- }
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:628</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
-base-629-
-base-630-class GraphicsIni(ConfFile):
-base-631- _filename = 'graphics.ini'
-</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:58</b><br/><pre> # TODO: fnmatch
-base-59- return len([name for name in os.listdir(path)
-base-60- if os.path.isfile(os.path.join(path, name))])
-base-61-
-</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:104</b><br/><pre> # TODO: more
-base-105-
-base-106- def test_publicapi_create(self):
-base-107- inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:115</b><br/><pre> # TODO: more
-base-116-
-base-117-class AudioIniTest(GenericIniTest):
-base-118- enc = aud_enc
-</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:153</b><br/><pre> #XXX self.failIf(p.isChanged())
-base-154-
-base-155- p.screenres = 0
-base-156- eq(p._get('Graphics.Width'), 800)
-</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:79</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
-base-80- fd = open(os.path.join(path, fname), 'wb')
-base-81- fd.write('dummy')
-base-82- fd.close()
-</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:104</b><br/><pre> # TODO: more
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:267</b><br/><pre> # XXX: move checks to copy method!
+base-268- if os.path.isfile(fixed):
+base-269- if fixedNewer(ki, fixed):
+base-270- LOG.debug("File %s exists but was changed." % name)
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:157</b><br/><pre> # TODO: write me
+base-158- pass
+base-159-
+base-160-class Constrain(object):
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:541</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-542- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-543- # microphon missing -> OS mixer
+base-544- }
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:629</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-630-
+base-631-class GraphicsIni(ConfFile):
+base-632- _filename = 'graphics.ini'
+</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:59</b><br/><pre> # TODO: fnmatch
+base-60- return len([name for name in os.listdir(path)
+base-61- if os.path.isfile(os.path.join(path, name))])
+base-62-
+</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:105</b><br/><pre> # TODO: more
+base-106-
+base-107- def test_publicapi_create(self):
+base-108- inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
+</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:116</b><br/><pre> # TODO: more
+base-117-
+base-118-class AudioIniTest(GenericIniTest):
+base-119- enc = aud_enc
+</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:154</b><br/><pre> #XXX self.failIf(p.isChanged())
+base-155-
+base-156- p.screenres = 0
+base-157- eq(p._get('Graphics.Width'), 800)
+</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:80</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
+base-81- fd = open(os.path.join(path, fname), 'wb')
+base-82- fd.write('dummy')
+base-83- fd.close()
+</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:105</b><br/><pre> # TODO: more
def test_publicapi_create(self):
inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
-</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:115</b><br/><pre> # TODO: more
+</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:116</b><br/><pre> # TODO: more
class AudioIniTest(GenericIniTest):
enc = aud_enc
-</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:153</b><br/><pre> #XXX self.failIf(p.isChanged())
+</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:154</b><br/><pre> #XXX self.failIf(p.isChanged())
p.screenres = 0
eq(p._get('Graphics.Width'), 800)
-</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:79</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
+</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:80</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
fd = open(os.path.join(path, fname), 'wb')
fd.write('dummy')
fd.close()
-</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
return iter(self._fd)
</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre> # XXX use struct
if header is None:
@@ -107,15 +99,19 @@
if size is None:
size = self.getFileSize()
leading = 4* [None]
-</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:156</b><br/><pre> # TODO: write me
+</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:267</b><br/><pre> # XXX: move checks to copy method!
+ if os.path.isfile(fixed):
+ if fixedNewer(ki, fixed):
+ LOG.debug("File %s exists but was changed." % name)
+</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:157</b><br/><pre> # TODO: write me
pass
class Constrain(object):
-</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:540</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:541</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
# microphon missing -> OS mixer
}
-</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:628</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:629</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
class GraphicsIni(ConfFile):
_filename = 'graphics.ini'
@@ -127,7 +123,11 @@
if size is None:
size = self.getFileSize()
leading = 4* [None]
-</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:267</b><br/><pre> # XXX: move checks to copy method!
+ if os.path.isfile(fixed):
+ if fixedNewer(ki, fixed):
+ LOG.debug("File %s exists but was changed." % name)
+</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:280</b><br/><pre> # TODO: add parser, currently simply iterates over the file
return iter(self._fd)
</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:156</b><br/><pre> # TODO: write me
pass
@@ -141,189 +141,558 @@
class GraphicsIni(ConfFile):
_filename = 'graphics.ini'
-</pre></li><li><b>File: utilities/../src/moul/file/directory.py:58</b><br/><pre> # TODO: fnmatch
+</pre></li><li><b>File: utilities/../src/moul/file/directory.py:59</b><br/><pre> # TODO: fnmatch
return len([name for name in os.listdir(path)
if os.path.isfile(os.path.join(path, name))])
-</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:76</b><br/><pre> # XXX: dos format
-base-77- return data.replace("\r\n", "\n")
-base-78-
-base-79-def encryptWDYS(instr, fout):
-</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:86</b><br/><pre> # XXX: dos format
-base-87- instr = instr.replace("\n", "\r\n")
-base-88- fout.seek(0)
-base-89- fout.write(HEADER)
-</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:70</b><br/><pre> # XXX NotImplemented
-base-71- raise NotImplementedError
-base-72-
-base-73-def decipher(crypt, size, key):
-</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:76</b><br/><pre> # XXX: dos format
+</pre></li><li><b>File: utilities/../src/moul/file/directory.py~:59</b><br/><pre> # TODO: fnmatch
+ return len([name for name in os.listdir(path)
+ if os.path.isfile(os.path.join(path, name))])
+
+</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:77</b><br/><pre> # XXX: dos format
+base-78- return data.replace("\r\n", "\n")
+base-79-
+base-80-def encryptWDYS(instr, fout):
+</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:87</b><br/><pre> # XXX: dos format
+base-88- instr = instr.replace("\n", "\r\n")
+base-89- fout.seek(0)
+base-90- fout.write(HEADER)
+</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:71</b><br/><pre> # XXX NotImplemented
+base-72- raise NotImplementedError
+base-73-
+base-74-def decipher(crypt, size, key):
+</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:77</b><br/><pre> # XXX: dos format
return data.replace("\r\n", "\n")
def encryptWDYS(instr, fout):
-</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:86</b><br/><pre> # XXX: dos format
+</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:87</b><br/><pre> # XXX: dos format
instr = instr.replace("\n", "\r\n")
fout.seek(0)
fout.write(HEADER)
-</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:70</b><br/><pre> # XXX NotImplemented
+</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:71</b><br/><pre> # XXX NotImplemented
raise NotImplementedError
def decipher(crypt, size, key):
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/localization.py.svn-base:78</b><br/><pre> # TODO: other message box
-base-79- self._journal_progressbar = SimpleProgressbar(self)
-base-80- self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
-base-81- self._journal_progressbar.setProgressbar(0, 1, 0)
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:76</b><br/><pre> # TODO: checks
-base-77- self.urudatadir.initializeFactories()
-base-78-
-base-79- # init handlers
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:152</b><br/><pre> # FIXME: signal doesn't do anything
-base-153- self.emit(SIGNAL("close()"))
-base-154- event.accept()
-base-155- event.ignore()
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:189</b><br/><pre> # TODO: msg
-base-190- return
-base-191-
-base-192- self.pb_kiimage_repair.setEnabled(False)
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:219</b><br/><pre> # TODO: msg
-base-220-
-base-221- # ************************************************************************
-base-222- # graphics settings
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:237</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
-base-238-
-base-239- @signalLogDecorator(LOG)
-base-240- def on_graphicsini_loaded(self):
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:297</b><br/><pre> # XXX: fixme
-base-298- txt = videoModes.getVidModeHuman(idx)
-base-299- self.lb_screenres.setText(QtCore.QString(txt))
-base-300- self._graphics_ini.screenres = idx
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:387</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
-base-388-
-base-389- @signalLogDecorator(LOG)
-base-390- def on_audioini_loaded(self):
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:506</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
-base-507- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
-base-508- timer.start()
-base-509-
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:602</b><br/><pre> # TODO: thread safety!
-base-603- self.servers = servers
-base-604- if not self.isRunning():
-base-605- self.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:608</b><br/><pre> # TODO: thread safety!
-base-609- # emit a list of names first
-base-610- for server in self.servers:
-base-611- self.emit(SIGNAL("server(const QString&)"), server.name)
-</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:644</b><br/><pre> # TODO check this
-base-645- self._running = False
-base-646- self.condition.wakeAll()
-base-647-
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:151</b><br/><pre> # FIXME: signal doesn't do anything
+base-152- self.emit(SIGNAL("close()"))
+base-153- event.accept()
+base-154- event.ignore()
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:222</b><br/><pre> # TODO: msg
+base-223- return
+base-224-
+base-225- self.pb_kiimage_repair.setEnabled(False)
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:248</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
+base-249- del self._kiimage_progressbar
+base-250- self.pb_kiimage_repair.setEnabled(True)
+base:251: # TODO: msg
+base-252-
+base-253- # ************************************************************************
+base-254- # system tray
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:281</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
+base-282- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
+base-283- timer.start()
+base-284-
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:375</b><br/><pre> # TODO: thread safety!
+base-376- self.servers = servers
+base-377- if not self.isRunning():
+base-378- self.start()
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:381</b><br/><pre> # TODO: thread safety!
+base-382- # emit a list of names first
+base-383- for server in self.servers:
+base-384- self.emit(SIGNAL("server(const QString&)"), server.name)
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:417</b><br/><pre> # TODO check this
+base-418- self._running = False
+base-419- self.condition.wakeAll()
+base-420-
</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:46</b><br/><pre> # TODO: translation aware
base-47- LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
-base:48: return # XXX: remove
-base-49- try:
-base-50- title= QtGui.QApplication.translate("excepthook",
-base-51- "An unhandled error has occured",
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:76</b><br/><pre> # TODO: checks
- self.urudatadir.initializeFactories()
-
- # init handlers
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:152</b><br/><pre> # FIXME: signal doesn't do anything
+base-48- if not getattr(sys, 'frozen', False):
+base-49- return
+</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/wdysini.py.svn-base:67</b><br/><pre> self.context.emit(SIGNAL("audioini_load()")) # XXX: hard coded emit
+base:68: self.context.emit(SIGNAL("graphicsini_load()")) # XXX: hard coded emit
+base-69-
+base-70- @pyqtSignature("bool")
+base-71- def on_graphicsChanged(self, boolean):
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:143</b><br/><pre> # FIXME: signal doesn't do anything
self.emit(SIGNAL("close()"))
event.accept()
event.ignore()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:189</b><br/><pre> # TODO: msg
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:214</b><br/><pre> # TODO: msg
return
self.pb_kiimage_repair.setEnabled(False)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:236</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:241</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
+ del self._kiimage_progressbar
+ self.pb_kiimage_repair.setEnabled(True)
- @signalLogDecorator(LOG)
- def on_graphicsini_loaded(self):
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:296</b><br/><pre> # XXX: fixme
- txt = videoModes.getVidModeHuman(idx)
- self.lb_screenres.setText(QtCore.QString(txt))
- self._graphics_ini.screenres = idx
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:386</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
-
- @signalLogDecorator(LOG)
- def on_audioini_loaded(self):
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:505</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
+ @pyqtSignature("")
+ def on_pb_log_archive_clicked(self):
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:288</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
timer.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:601</b><br/><pre> # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:382</b><br/><pre> # TODO: thread safety!
self.servers = servers
if not self.isRunning():
self.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:607</b><br/><pre> # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:388</b><br/><pre> # TODO: thread safety!
# emit a list of names first
for server in self.servers:
self.emit(SIGNAL("server(const QString&)"), server.name)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:643</b><br/><pre> # TODO check this
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:424</b><br/><pre> # TODO check this
self._running = False
self.condition.wakeAll()
-</pre></li><li><b>File: utilities/../src/moul/qt/localization.py:78</b><br/><pre> # TODO: other message box
- self._journal_progressbar = SimpleProgressbar(self)
- self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
- self._journal_progressbar.setProgressbar(0, 1, 0)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:76</b><br/><pre> # TODO: checks
- self.urudatadir.initializeFactories()
-
- # init handlers
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:152</b><br/><pre> # FIXME: signal doesn't do anything
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:143</b><br/><pre> # FIXME: signal doesn't do anything
self.emit(SIGNAL("close()"))
event.accept()
event.ignore()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:189</b><br/><pre> # TODO: msg
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:214</b><br/><pre> # TODO: msg
return
self.pb_kiimage_repair.setEnabled(False)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:219</b><br/><pre> # TODO: msg
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:241</b><br/><pre> del self._kiimage_threadlet# TODO: other message box
+ del self._kiimage_progressbar
+ self.pb_kiimage_repair.setEnabled(True)
- # ************************************************************************
- # graphics settings
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:237</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
-
- @signalLogDecorator(LOG)
- def on_graphicsini_loaded(self):
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:297</b><br/><pre> # XXX: fixme
- txt = videoModes.getVidModeHuman(idx)
- self.lb_screenres.setText(QtCore.QString(txt))
- self._graphics_ini.screenres = idx
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:387</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
-
- @signalLogDecorator(LOG)
- def on_audioini_loaded(self):
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:506</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
+ @pyqtSignature("")
+ def on_pb_log_archive_clicked(self):
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:288</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
timer.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:602</b><br/><pre> # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:382</b><br/><pre> # TODO: thread safety!
self.servers = servers
if not self.isRunning():
self.start()
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:608</b><br/><pre> # TODO: thread safety!
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:388</b><br/><pre> # TODO: thread safety!
# emit a list of names first
for server in self.servers:
self.emit(SIGNAL("server(const QString&)"), server.name)
-</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:644</b><br/><pre> # TODO check this
+</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:424</b><br/><pre> # TODO check this
self._running = False
self.condition.wakeAll()
</pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py:46</b><br/><pre> # TODO: translation aware
LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
- try:
- title= QtGui.QApplication.translate("excepthook",
- "An unhandled error has occured",
-</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:116</b><br/><pre># XXX: what about cygwin, bsd and others?
+ if not getattr(sys, 'frozen', False):
+ return
+</pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py~:46</b><br/><pre> # TODO: translation aware
+ LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
+ if not getattr(sys, 'frozen', False):
+ return
+</pre></li><li><b>File: utilities/../src/moul/qt/wdysini.py~:68</b><br/><pre> self.context.emit(SIGNAL("audioini_load()")) # XXX: hard coded emit
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("bool")
+</pre></li><li><b>File: utilities/../src/moul/qt/wdysini.py:67</b><br/><pre> self.context.emit(SIGNAL("audioini_load()")) # XXX: hard coded emit
+
+ @pyqtSignature("bool")
+ def on_graphicsChanged(self, boolean):
+</pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:117</b><br/><pre># XXX: what about cygwin, bsd and others?
_thismodule = sys.modules[__name__]
if __WIN32__:
from moul.osdependent import win32 as osdep_win32
-</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:116</b><br/><pre># XXX: what about cygwin, bsd and others?
-base-117-_thismodule = sys.modules[__name__]
-base-118-if __WIN32__:
-base-119- from moul.osdependent import win32 as osdep_win32
+</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:117</b><br/><pre># XXX: what about cygwin, bsd and others?
+base-118-_thismodule = sys.modules[__name__]
+base-119-if __WIN32__:
+base-120- from moul.osdependent import win32 as osdep_win32
+</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:14</b><br/><pre><ol><li><b>File: utilities/../.svn/text-base/ez_setup.py.svn-base:92</b><br/><pre> # XXX could we install in a subprocess here?
+base-15-base-93- print >>sys.stderr, (
+base-16-base-94- "The required version of setuptools (>=%s) is not available, and\n"
+base-17-base-95- "can't be installed while this script is running. Please install\n"
+base:18:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:548</b><br/><pre> # XXX bug: doctest may report several failures in one test, they are
+base-19-base-549- # separated by a horizontal dash line. Only the first one of
+base-20-base-550- # them is now colorized properly.
+base-21-base-551- header = lines[0]
+base:22:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:603</b><br/><pre> # TODO: Scrape and colorize the traceback.
+base-23-base-604- result.append(self.colorize('doctest_got', line))
+base-24-base-605- elif remaining[0] == 'Differences (ndiff with -expected +actual):':
+base-25-base-606- result.append(self.colorize('doctest_title', remaining.pop(0))) # E. raised:
+base:26:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:623</b><br/><pre> # TODO: We only deal with the output from Zope 3's doctest module.
+base-27-base-624- # A colorizer for the Python's doctest module would be nice too.
+base-28-base-625- if doctest:
+base-29-base-626- # If we have a doctest, we do not care about this header. All the
+base:30:</pre></li><li><b>File: utilities/../.svn/text-base/test.py.svn-base:690</b><br/><pre> # TODO these should be hookable
+base-31-base-691- from zope.tales.tales import TALESTracebackSupplement
+base-32-base-692- from zope.pagetemplate.pagetemplate \
+base-33-base-693- import PageTemplateTracebackSupplement
+base:34:</pre></li><li><b>File: utilities/../.svn/text-base/setup_win32.py.svn-base:84</b><br/><pre> pexe['innosetup'] = os.environ.get('INNOSETUP') # TODO:
+base-35-base-85- pexe['inno_templates'] = "template.iss"
+base-36-base-86- pexe['app_name'] = 'pyMoul'
+base-37-base-87- pexe['includes'].extend(findPyTz())
+base:38:</pre></li><li><b>File: utilities/../.svn/text-base/distutils_upx.py.svn-base:117</b><br/><pre> sys.exit(retcode) # XXX
+base-39-base-118-
+base-40-base-119- def _upxAvailable(self):
+base-41-base-120- """Search for UPX in search path
+base:42:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/chatlog.py.svn-base:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+base-43-base-269- return iter(self._fd)
+base:44:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:112</b><br/><pre> # XXX use struct
+base-45-base-113- if header is None:
+base-46-base-114- fd = self._fd
+base-47-base-115- fd.seek(0)
+base:48:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/kiimage.py.svn-base:127</b><br/><pre> # XXX use struct
+base-49-base-128- if size is None:
+base-50-base-129- size = self.getFileSize()
+base-51-base-130- leading = 4* [None]
+base:52:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:156</b><br/><pre> # TODO: write me
+base-53-base-157- pass
+base-54-base-158-
+base-55-base-159-class Constrain(object):
+base:56:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:540</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-57-base-541- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-58-base-542- # microphon missing -> OS mixer
+base-59-base-543- }
+base:60:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/wdysini.py.svn-base:628</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-61-base-629-
+base-62-base-630-class GraphicsIni(ConfFile):
+base-63-base-631- _filename = 'graphics.ini'
+base:64:</pre></li><li><b>File: utilities/../src/moul/file/.svn/text-base/directory.py.svn-base:58</b><br/><pre> # TODO: fnmatch
+base-65-base-59- return len([name for name in os.listdir(path)
+base-66-base-60- if os.path.isfile(os.path.join(path, name))])
+base-67-base-61-
+base:68:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:104</b><br/><pre> # TODO: more
+base-69-base-105-
+base-70-base-106- def test_publicapi_create(self):
+base-71-base-107- inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
+base:72:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:115</b><br/><pre> # TODO: more
+base-73-base-116-
+base-74-base-117-class AudioIniTest(GenericIniTest):
+base-75-base-118- enc = aud_enc
+base:76:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/test_wdysini.py.svn-base:153</b><br/><pre> #XXX self.failIf(p.isChanged())
+base-77-base-154-
+base-78-base-155- p.screenres = 0
+base-79-base-156- eq(p._get('Graphics.Width'), 800)
+base:80:</pre></li><li><b>File: utilities/../src/moul/file/tests/.svn/text-base/utils.py.svn-base:79</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
+base-81-base-80- fd = open(os.path.join(path, fname), 'wb')
+base-82-base-81- fd.write('dummy')
+base-83-base-82- fd.close()
+base:84:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:104</b><br/><pre> # TODO: more
+base-85-
+base-86- def test_publicapi_create(self):
+base-87- inipath = os.path.join(self.tmpdir, os.path.basename(self.enc))
+base:88:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:115</b><br/><pre> # TODO: more
+base-89-
+base-90-class AudioIniTest(GenericIniTest):
+base-91- enc = aud_enc
+base:92:</pre></li><li><b>File: utilities/../src/moul/file/tests/test_wdysini.py:153</b><br/><pre> #XXX self.failIf(p.isChanged())
+base-93-
+base-94- p.screenres = 0
+base-95- eq(p._get('Graphics.Width'), 800)
+base:96:</pre></li><li><b>File: utilities/../src/moul/file/tests/utils.py:79</b><br/><pre> for fname in ('UruLauncher.exe', 'UruExplorer.exe'): # XXX: win32
+base-97- fd = open(os.path.join(path, fname), 'wb')
+base-98- fd.write('dummy')
+base-99- fd.close()
+base:100:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+base-101- return iter(self._fd)
+base:102:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:112</b><br/><pre> # XXX use struct
+base-103- if header is None:
+base-104- fd = self._fd
+base-105- fd.seek(0)
+base:106:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py:127</b><br/><pre> # XXX use struct
+base-107- if size is None:
+base-108- size = self.getFileSize()
+base-109- leading = 4* [None]
+base:110:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:156</b><br/><pre> # TODO: write me
+base-111- pass
+base-112-
+base-113-class Constrain(object):
+base:114:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:540</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-115- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-116- # microphon missing -> OS mixer
+base-117- }
+base:118:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py:628</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-119-
+base-120-class GraphicsIni(ConfFile):
+base-121- _filename = 'graphics.ini'
+base:122:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:112</b><br/><pre> # XXX use struct
+base-123- if header is None:
+base-124- fd = self._fd
+base-125- fd.seek(0)
+base:126:</pre></li><li><b>File: utilities/../src/moul/file/kiimage.py~:127</b><br/><pre> # XXX use struct
+base-127- if size is None:
+base-128- size = self.getFileSize()
+base-129- leading = 4* [None]
+base:130:</pre></li><li><b>File: utilities/../src/moul/file/chatlog.py~:268</b><br/><pre> # TODO: add parser, currently simply iterates over the file
+base-131- return iter(self._fd)
+base:132:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:156</b><br/><pre> # TODO: write me
+base-133- pass
+base-134-
+base-135-class Constrain(object):
+base:136:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:540</b><br/><pre> 'Audio.SetDeviceName' : (QuotedString, Constrain()), # TODO: add check
+base-137- 'Audio.SetChannelVolume GUI' : (FloatString, MinMax(0.0, 1.0)), # 0-100%, no ui
+base-138- # microphon missing -> OS mixer
+base-139- }
+base:140:</pre></li><li><b>File: utilities/../src/moul/file/wdysini.py~:628</b><br/><pre> # TODO: microphon needs an extra handler. The mic slider changes the OS mixer.
+base-141-
+base-142-class GraphicsIni(ConfFile):
+base-143- _filename = 'graphics.ini'
+base:144:</pre></li><li><b>File: utilities/../src/moul/file/directory.py:58</b><br/><pre> # TODO: fnmatch
+base-145- return len([name for name in os.listdir(path)
+base-146- if os.path.isfile(os.path.join(path, name))])
+base-147-
+base:148:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:76</b><br/><pre> # XXX: dos format
+base-149-base-77- return data.replace("\r\n", "\n")
+base-150-base-78-
+base-151-base-79-def encryptWDYS(instr, fout):
+base:152:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/whatdoyousee.py.svn-base:86</b><br/><pre> # XXX: dos format
+base-153-base-87- instr = instr.replace("\n", "\r\n")
+base-154-base-88- fout.seek(0)
+base-155-base-89- fout.write(HEADER)
+base:156:</pre></li><li><b>File: utilities/../src/moul/crypt/.svn/text-base/elf.py.svn-base:70</b><br/><pre> # XXX NotImplemented
+base-157-base-71- raise NotImplementedError
+base-158-base-72-
+base-159-base-73-def decipher(crypt, size, key):
+base:160:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:76</b><br/><pre> # XXX: dos format
+base-161- return data.replace("\r\n", "\n")
+base-162-
+base-163-def encryptWDYS(instr, fout):
+base:164:</pre></li><li><b>File: utilities/../src/moul/crypt/whatdoyousee.py:86</b><br/><pre> # XXX: dos format
+base-165- instr = instr.replace("\n", "\r\n")
+base-166- fout.seek(0)
+base-167- fout.write(HEADER)
+base:168:</pre></li><li><b>File: utilities/../src/moul/crypt/elf.py:70</b><br/><pre> # XXX NotImplemented
+base-169- raise NotImplementedError
+base-170-
+base-171-def decipher(crypt, size, key):
+base:172:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/localization.py.svn-base:78</b><br/><pre> # TODO: other message box
+base-173-base-79- self._journal_progressbar = SimpleProgressbar(self)
+base-174-base-80- self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
+base-175-base-81- self._journal_progressbar.setProgressbar(0, 1, 0)
+base:176:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:76</b><br/><pre> # TODO: checks
+base-177-base-77- self.urudatadir.initializeFactories()
+base-178-base-78-
+base-179-base-79- # init handlers
+base:180:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:152</b><br/><pre> # FIXME: signal doesn't do anything
+base-181-base-153- self.emit(SIGNAL("close()"))
+base-182-base-154- event.accept()
+base-183-base-155- event.ignore()
+base:184:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:189</b><br/><pre> # TODO: msg
+base-185-base-190- return
+base-186-base-191-
+base-187-base-192- self.pb_kiimage_repair.setEnabled(False)
+base:188:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:219</b><br/><pre> # TODO: msg
+base-189-base-220-
+base-190-base-221- # ************************************************************************
+base-191-base-222- # graphics settings
+base:192:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:237</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
+base-193-base-238-
+base-194-base-239- @signalLogDecorator(LOG)
+base-195-base-240- def on_graphicsini_loaded(self):
+base:196:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:297</b><br/><pre> # XXX: fixme
+base-197-base-298- txt = videoModes.getVidModeHuman(idx)
+base-198-base-299- self.lb_screenres.setText(QtCore.QString(txt))
+base-199-base-300- self._graphics_ini.screenres = idx
+base:200:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:387</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
+base-201-base-388-
+base-202-base-389- @signalLogDecorator(LOG)
+base-203-base-390- def on_audioini_loaded(self):
+base:204:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:506</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
+base-205-base-507- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
+base-206-base-508- timer.start()
+base-207-base-509-
+base:208:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:602</b><br/><pre> # TODO: thread safety!
+base-209-base-603- self.servers = servers
+base-210-base-604- if not self.isRunning():
+base-211-base-605- self.start()
+base:212:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:608</b><br/><pre> # TODO: thread safety!
+base-213-base-609- # emit a list of names first
+base-214-base-610- for server in self.servers:
+base-215-base-611- self.emit(SIGNAL("server(const QString&)"), server.name)
+base:216:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/mainwindow.py.svn-base:644</b><br/><pre> # TODO check this
+base-217-base-645- self._running = False
+base-218-base-646- self.condition.wakeAll()
+base-219-base-647-
+base:220:</pre></li><li><b>File: utilities/../src/moul/qt/.svn/text-base/errorhandler.py.svn-base:46</b><br/><pre> # TODO: translation aware
+base-221-base-47- LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
+base:222:base:48: return # XXX: remove
+base-223-base-49- try:
+base-224-base-50- title= QtGui.QApplication.translate("excepthook",
+base-225-base-51- "An unhandled error has occured",
+base:226:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:76</b><br/><pre> # TODO: checks
+base-227- self.urudatadir.initializeFactories()
+base-228-
+base-229- # init handlers
+base:230:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:152</b><br/><pre> # FIXME: signal doesn't do anything
+base-231- self.emit(SIGNAL("close()"))
+base-232- event.accept()
+base-233- event.ignore()
+base:234:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:189</b><br/><pre> # TODO: msg
+base-235- return
+base-236-
+base-237- self.pb_kiimage_repair.setEnabled(False)
+base:238:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:236</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
+base-239-
+base-240- @signalLogDecorator(LOG)
+base-241- def on_graphicsini_loaded(self):
+base:242:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:296</b><br/><pre> # XXX: fixme
+base-243- txt = videoModes.getVidModeHuman(idx)
+base-244- self.lb_screenres.setText(QtCore.QString(txt))
+base-245- self._graphics_ini.screenres = idx
+base:246:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:386</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
+base-247-
+base-248- @signalLogDecorator(LOG)
+base-249- def on_audioini_loaded(self):
+base:250:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:505</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
+base-251- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
+base-252- timer.start()
+base-253-
+base:254:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:601</b><br/><pre> # TODO: thread safety!
+base-255- self.servers = servers
+base-256- if not self.isRunning():
+base-257- self.start()
+base:258:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:607</b><br/><pre> # TODO: thread safety!
+base-259- # emit a list of names first
+base-260- for server in self.servers:
+base-261- self.emit(SIGNAL("server(const QString&)"), server.name)
+base:262:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py~:643</b><br/><pre> # TODO check this
+base-263- self._running = False
+base-264- self.condition.wakeAll()
+base-265-
+base:266:</pre></li><li><b>File: utilities/../src/moul/qt/localization.py:78</b><br/><pre> # TODO: other message box
+base-267- self._journal_progressbar = SimpleProgressbar(self)
+base-268- self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
+base-269- self._journal_progressbar.setProgressbar(0, 1, 0)
+base:270:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:76</b><br/><pre> # TODO: checks
+base-271- self.urudatadir.initializeFactories()
+base-272-
+base-273- # init handlers
+base:274:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:152</b><br/><pre> # FIXME: signal doesn't do anything
+base-275- self.emit(SIGNAL("close()"))
+base-276- event.accept()
+base-277- event.ignore()
+base:278:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:189</b><br/><pre> # TODO: msg
+base-279- return
+base-280-
+base-281- self.pb_kiimage_repair.setEnabled(False)
+base:282:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:219</b><br/><pre> # TODO: msg
+base-283-
+base-284- # ************************************************************************
+base-285- # graphics settings
+base:286:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:237</b><br/><pre> self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
+base-287-
+base-288- @signalLogDecorator(LOG)
+base-289- def on_graphicsini_loaded(self):
+base:290:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:297</b><br/><pre> # XXX: fixme
+base-291- txt = videoModes.getVidModeHuman(idx)
+base-292- self.lb_screenres.setText(QtCore.QString(txt))
+base-293- self._graphics_ini.screenres = idx
+base:294:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:387</b><br/><pre> self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
+base-295-
+base-296- @signalLogDecorator(LOG)
+base-297- def on_audioini_loaded(self):
+base:298:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:506</b><br/><pre> # TODO: needs optimization? run only when timer tab is active
+base-299- self.connect(timer, SIGNAL('timeout()'), self.on_timezone_timer_timeout)
+base-300- timer.start()
+base-301-
+base:302:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:602</b><br/><pre> # TODO: thread safety!
+base-303- self.servers = servers
+base-304- if not self.isRunning():
+base-305- self.start()
+base:306:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:608</b><br/><pre> # TODO: thread safety!
+base-307- # emit a list of names first
+base-308- for server in self.servers:
+base-309- self.emit(SIGNAL("server(const QString&)"), server.name)
+base:310:</pre></li><li><b>File: utilities/../src/moul/qt/mainwindow.py:644</b><br/><pre> # TODO check this
+base-311- self._running = False
+base-312- self.condition.wakeAll()
+base-313-
+base:314:</pre></li><li><b>File: utilities/../src/moul/qt/errorhandler.py:46</b><br/><pre> # TODO: translation aware
+base-315- LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
+base-316- try:
+base-317- title= QtGui.QApplication.translate("excepthook",
+</pre></li><li><b>File: utilities/../doc/.svn/text-base/XXXreport.html.svn-base:319</b><br/><pre></pre></li><li><b>File: utilities/../src/moul/osdependent/__init__.py:116</b><br/><pre># XXX: what about cygwin, bsd and others?
+base-320-_thismodule = sys.modules[__name__]
+base-321-if __WIN32__:
+base-322- from moul.osdependent import win32 as osdep_win32
+base:323:</pre></li><li><b>File: utilities/../src/moul/osdependent/.svn/text-base/__init__.py.svn-base:116</b><br/><pre># XXX: what about cygwin, bsd and others?
+base-324-base-117-_thismodule = sys.modules[__name__]
+base-325-base-118-if __WIN32__:
+base-326-base-119- from moul.osdependent import win32 as osdep_win32
+base:327:</pre></li><li><b>File: utilities/../test.py:548</b><br/><pre> # XXX bug: doctest may report several failures in one test, they are
+base-328- # separated by a horizontal dash line. Only the first one of
+base-329- # them is now colorized properly.
+base-330- header = lines[0]
+base:331:</pre></li><li><b>File: utilities/../test.py:603</b><br/><pre> # TODO: Scrape and colorize the traceback.
+base-332- result.append(self.colorize('doctest_got', line))
+base-333- elif remaining[0] == 'Differences (ndiff with -expected +actual):':
+base-334- result.append(self.colorize('doctest_title', remaining.pop(0))) # E. raised:
+base:335:</pre></li><li><b>File: utilities/../test.py:623</b><br/><pre> # TODO: We only deal with the output from Zope 3's doctest module.
+base-336- # A colorizer for the Python's doctest module would be nice too.
+base-337- if doctest:
+base-338- # If we have a doctest, we do not care about this header. All the
+base:339:</pre></li><li><b>File: utilities/../test.py:690</b><br/><pre> # TODO these should be hookable
+base-340- from zope.tales.tales import TALESTracebackSupplement
+base-341- from zope.pagetemplate.pagetemplate \
+base-342- import PageTemplateTracebackSupplement
+base:343:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:6</b><br/><pre># Todo:
+base-344-base-7-#
+base-345-base-8-# Make 'unbuffered' a per-target option
+base-346-base-9-
+base:347:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:357</b><br/><pre>## extra_path = ["."] # XXX
+base-348-base-358- extra_path = []
+base-349-base-359- dlls, unfriendly_dlls, other_depends = \
+base-350-base-360- self.find_dependend_dlls(dlls,
+base:351:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:403</b><br/><pre> # XXX all dlls are copied into the same directory - a flat name space.
+base-352-base-404- # sooner or later that will give conflicts.
+base-353-base-405- dst = os.path.join(self.lib_dir, os.path.basename(item.__file__))
+base-354-base-406- self.copy_file(src, dst, preserve_mode=0)
+base:355:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:919</b><br/><pre> # XXX On Windows NT, the SYSTEM directory is also searched
+base-356-base-920- exedir = os.path.dirname(sys.executable)
+base-357-base-921- syspath = os.environ['PATH']
+base-358-base-922- loadpath = ';'.join([exedir, sysdir, windir, syspath])
+base:359:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:1329</b><br/><pre># XXX This list is NOT complete (it cannot be)
+base-360-base-1330-# Note: ALL ENTRIES MUST BE IN LOWER CASE!
+base-361-base-1331-EXCLUDED_DLLS = (
+base-362-base-1332- "advapi32.dll",
+base:363:</pre></li><li><b>File: utilities/../contrib/.svn/text-base/build_exe.py.svn-base:1362</b><br/><pre># XXX Perhaps it would be better to assume dlls from the systemdir are system dlls,
+base-364-base-1363-# and make some exceptions for known dlls, like msvcr71, pythonXY.dll, and so on?
+base-365-base-1364-def isSystemDLL(pathname):
+base-366-base-1365- if os.path.basename(pathname).lower() in ("msvcr71.dll", "msvcr71d.dll"):
+base:367:</pre></li><li><b>File: utilities/../contrib/build_exe.py:6</b><br/><pre># Todo:
+base-368-#
+base-369-# Make 'unbuffered' a per-target option
+base-370-
+base:371:</pre></li><li><b>File: utilities/../contrib/build_exe.py:357</b><br/><pre>## extra_path = ["."] # XXX
+base-372- extra_path = []
+base-373- dlls, unfriendly_dlls, other_depends = \
+base-374- self.find_dependend_dlls(dlls,
+base:375:</pre></li><li><b>File: utilities/../contrib/build_exe.py:403</b><br/><pre> # XXX all dlls are copied into the same directory - a flat name space.
+base-376- # sooner or later that will give conflicts.
+base-377- dst = os.path.join(self.lib_dir, os.path.basename(item.__file__))
+base-378- self.copy_file(src, dst, preserve_mode=0)
+base:379:</pre></li><li><b>File: utilities/../contrib/build_exe.py:919</b><br/><pre> # XXX On Windows NT, the SYSTEM directory is also searched
+base-380- exedir = os.path.dirname(sys.executable)
+base-381- syspath = os.environ['PATH']
+base-382- loadpath = ';'.join([exedir, sysdir, windir, syspath])
+base:383:</pre></li><li><b>File: utilities/../contrib/build_exe.py:1329</b><br/><pre># XXX This list is NOT complete (it cannot be)
+base-384-# Note: ALL ENTRIES MUST BE IN LOWER CASE!
+base-385-EXCLUDED_DLLS = (
+base-386- "advapi32.dll",
+base:387:</pre></li><li><b>File: utilities/../contrib/build_exe.py:1362</b><br/><pre># XXX Perhaps it would be better to assume dlls from the systemdir are system dlls,
+base-388-# and make some exceptions for known dlls, like msvcr71, pythonXY.dll, and so on?
+base-389-def isSystemDLL(pathname):
+base-390- if os.path.basename(pathname).lower() in ("msvcr71.dll", "msvcr71d.dll"):
+base:391:</pre></li><li><b>File: utilities/../utilities/.svn/text-base/setup_win32.py.svn-base:84</b><br/><pre> pexe['innosetup'] = os.environ.get('INNOSETUP') # TODO:
+base-392-base-85- pexe['inno_templates'] = "template.iss"
+base-393-base-86- pexe['app_name'] = 'pyMoul'
+base-394-base-87- pexe['includes'].extend(findPyTz())
+base:395:</pre></li><li><b>File: utilities/../utilities/.svn/text-base/distutils_upx.py.svn-base:117</b><br/><pre> sys.exit(retcode) # XXX
+base-396-base-118-
+base-397-base-119- def _upxAvailable(self):
+base-398-base-120- """Search for UPX in search path
+base:399:</pre></li><li><b>File: utilities/../utilities/.svn/text-base/ez_setup.py.svn-base:92</b><br/><pre> # XXX could we install in a subprocess here?
+base-400-base-93- print >>sys.stderr, (
+base-401-base-94- "The required version of setuptools (>=%s) is not available, and\n"
+base-402-base-95- "can't be installed while this script is running. Please install\n"
+base:403:</pre></li><li><b>File: utilities/../utilities/setup_win32.py:84</b><br/><pre> pexe['innosetup'] = os.environ.get('INNOSETUP') # TODO:
+base-404- pexe['inno_templates'] = "template.iss"
+base-405- pexe['app_name'] = 'pyMoul'
+base-406- pexe['includes'].extend(findPyTz())
+base:407:</pre></li><li><b>File: utilities/../utilities/distutils_upx.py:117</b><br/><pre> sys.exit(retcode) # XXX
+base-408-
+base-409- def _upxAvailable(self):
+base-410- """Search for UPX in search path
</pre></li><li><b>File: utilities/../test.py:548</b><br/><pre> # XXX bug: doctest may report several failures in one test, they are
# separated by a horizontal dash line. Only the first one of
# them is now colorized properly.
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts 2007-02-05 00:33:55 UTC (rev 134)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts 2007-02-05 03:04:23 UTC (rev 135)
@@ -1,8 +1,5 @@
<!DOCTYPE TS><TS>
<context>
- <name>@default</name>
-</context>
-<context>
<name>IniFileContainer</name>
<message>
<source>Error opening graphics.ini</source>
@@ -31,6 +28,10 @@
<source>Journals loaded.</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Journals not loaded.</source>
+ <translation type="unfinished"></translation...
[truncated message content] |
|
From: <ti...@us...> - 2007-02-05 00:33:59
|
Revision: 134
http://pymoul.svn.sourceforge.net/pymoul/?rev=134&view=rev
Author: tiran
Date: 2007-02-04 16:33:55 -0800 (Sun, 04 Feb 2007)
Log Message:
-----------
Added logging meta class
Added save question message box
Modified Paths:
--------------
pymoul/trunk/src/moul/file/utils.py
pymoul/trunk/src/moul/log.py
pymoul/trunk/src/moul/qt/localization.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/utils.py
pymoul/trunk/src/moul/qt/wdysini.py
Property Changed:
----------------
pymoul/trunk/src/moul/file/utils.py
Modified: pymoul/trunk/src/moul/file/utils.py
===================================================================
--- pymoul/trunk/src/moul/file/utils.py 2007-02-04 15:41:40 UTC (rev 133)
+++ pymoul/trunk/src/moul/file/utils.py 2007-02-05 00:33:55 UTC (rev 134)
@@ -20,8 +20,8 @@
from __future__ import absolute_import
__author__ = "Christian Heimes"
-__version__ = "$Id: kiimage.py 129 2007-02-03 18:41:23Z tiran $"
-__revision__ = "$Revision: 129 $"
+__version__ = "$Id$"
+__revision__ = "$Revision$"
import os
import time
Property changes on: pymoul/trunk/src/moul/file/utils.py
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Modified: pymoul/trunk/src/moul/log.py
===================================================================
--- pymoul/trunk/src/moul/log.py 2007-02-04 15:41:40 UTC (rev 133)
+++ pymoul/trunk/src/moul/log.py 2007-02-05 00:33:55 UTC (rev 134)
@@ -130,26 +130,3 @@
# Redirect stdout and stderr to logger when running as frozen app
#sys.stdout = LoggingStdout(getLogger('stdout').info)
#sys.stderr = LoggingStdout(getLogger('stderr').error)
-
-__LOG_SIGNALS__ = not __FROZEN__
-def signalLogDecorator(__logger__):
- """Decorator to log signals
-
- Logs signal methods to __logger__.debug() including func name, args
- and kwargs.
-
- signalLogDecorator() is a NOOP when running as a sys.frozen program.
- """
- def wrapper(func):
- if __LOG_SIGNALS__:
- def logwrapper(*args, **kwargs):
- __logger__.debug("%s(*%s, **%s)" % (func.__name__,
- repr(args[1:]), repr(kwargs)))
- return func(*args, **kwargs)
- logwrapper._signature = getattr(func, '_signature', None)
- logwrapper.__name__ = func.__name__
- logwrapper.__doc__ = func.__doc__
- return logwrapper
- else:
- return func
- return wrapper
Modified: pymoul/trunk/src/moul/qt/localization.py
===================================================================
--- pymoul/trunk/src/moul/qt/localization.py 2007-02-04 15:41:40 UTC (rev 133)
+++ pymoul/trunk/src/moul/qt/localization.py 2007-02-05 00:33:55 UTC (rev 134)
@@ -32,19 +32,21 @@
from moul.file.localization import translationRegistry as tr
from moul.log import getLogger
-from moul.log import signalLogDecorator
from moul.qt.simpleprogressbar import SimpleProgressbar
from moul.qt.threadlet import YieldingThreadlet
from moul.qt.utils import QNamespaceContainer
+from moul.qt.utils import QSignalLoggerMetaclass
-
LOG = getLogger('moul.loc')
class LocalizationContainer(QNamespaceContainer):
"""
Mixin for documentation tab
"""
+ __metaclass__ = QSignalLoggerMetaclass
+ __logger__ = LOG.debug
+
def initialize(self):
"""
@qtsignal loadLocalization(): load loc data
@@ -53,12 +55,6 @@
self._documents_clear('language')
self.connect(self.context, SIGNAL('loadLocalization()'),
self.on_localization_doload)
- self.connect(self.cb_doc_language, SIGNAL("currentIndexChanged(int)"),
- self.on_cb_doc_language_currentIndexChanged)
- self.connect(self.cb_doc_age, SIGNAL("currentIndexChanged(int)"),
- self.on_cb_doc_age_currentIndexChanged)
- self.connect(self.cb_doc_set, SIGNAL("currentIndexChanged(int)"),
- self.on_cb_doc_set_currentIndexChanged)
@staticmethod
def insertDummyQ(lst):
@@ -66,7 +62,6 @@
return QtCore.QStringList(dummy+lst)
@pyqtSignature("")
- @signalLogDecorator(LOG)
def on_localization_doload(self):
"""
@qtslot loadLocalization(): Load localization
@@ -101,7 +96,6 @@
self.threadlet.detach(loc)
@pyqtSignature("")
- @signalLogDecorator(LOG)
def on_localization_loaded(self):
"""
@qtslot finished(): self._journal_threadlet
@@ -130,7 +124,6 @@
self.cb_doc_language.setEnabled(True)
@pyqtSignature("")
- @signalLogDecorator(LOG)
def on_pb_doc_loadjournals_clicked(self):
"""
L{LocalizationContainer}
@@ -151,7 +144,6 @@
qobj.setEnabled(False)
@pyqtSignature("int")
- @signalLogDecorator(LOG)
def on_cb_doc_language_currentIndexChanged(self, idx):
self._documents_clear('age')
if idx <= 0:
@@ -164,7 +156,6 @@
self.cb_doc_age.setEnabled(True)
@pyqtSignature("int")
- @signalLogDecorator(LOG)
def on_cb_doc_age_currentIndexChanged(self, idx):
self._documents_clear('set')
if idx <= 0:
@@ -178,7 +169,6 @@
self.cb_doc_set.setEnabled(True)
@pyqtSignature("int")
- @signalLogDecorator(LOG)
def on_cb_doc_set_currentIndexChanged(self, idx):
self._documents_clear('element')
if idx <= 0:
@@ -192,7 +182,6 @@
self.cb_doc_element.setEnabled(True)
@pyqtSignature("int")
- @signalLogDecorator(LOG)
def on_cb_doc_element_currentIndexChanged(self, idx):
self._documents_clear('doc')
if idx <= 0:
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-04 15:41:40 UTC (rev 133)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-05 00:33:55 UTC (rev 134)
@@ -36,7 +36,6 @@
from moul.file.directory import UruGameDataDirectory
from moul.file.directory import UruPersonalDataDirectory
from moul.log import getLogger
-from moul.log import signalLogDecorator
from moul.osdependent import isMoulRunning
from moul.server.ping import ServerList
from moul.server.ping import isSocketError
@@ -47,10 +46,14 @@
from moul.qt.simpleprogressbar import SimpleProgressbar
from moul.qt.threadlet import YieldingThreadlet
from moul.qt.ui.mainwindow import Ui_MainWindow
+from moul.qt import utils as qtutils
LOG = getLogger('moul.qt')
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
+ __metaclass__ = qtutils.QSignalLoggerMetaclass
+ __logger__ = LOG.debug
+
def __init__(self):
QtGui.QMainWindow.__init__(self)
# Set up the user interface from Designer.
@@ -88,7 +91,6 @@
self.on_moulIsRunning)
self._moulrunning_thread.startChecker(5.0) # check now and every 5 seconds
- @signalLogDecorator(LOG)
def on_moulIsRunning(self, boolean):
"""
@qtslot moulIsRunning(bool): notify if moul is running
@@ -127,12 +129,13 @@
@param event: close event
@type event: QCloseEvent instance
"""
- #if self._dirty:
- # event.reject()
- # return False
-
- self._systray_close()
- event.accept()
+ accept = self.handleDirtyOnClose()
+ if accept:
+ self._systray_close()
+ self._moulrunning_thread.terminate()
+ event.accept()
+ else:
+ event.ignore()
def keyPressEvent(self, event):
"""
@@ -179,10 +182,37 @@
self.main_buttonbox_save.setEnabled(False)
self.main_buttonbox_reset.setEnabled(False)
+ def handleDirtyOnClose(self):
+ """
+ Handle dirty status on close
+
+ @return: Accept event?
+ @rtype: bool
+ """
+ if not self.isDirty():
+ return True
+
+ mb = qtutils.saveMB(
+ self,
+ self.trUtf8("Quit"),
+ self.trUtf8("Do you want to save your changes or discard "
+ "them ?")
+ )
+ button = mb.exec_()
+ if button == QtGui.QMessageBox.Save:
+ self.main_buttonbox_save.click()
+ return True
+ elif button == QtGui.QMessageBox.Cancel:
+ return False
+ elif button == QtGui.QMessageBox.Discard:
+ return True
+ else:
+ LOG.critical("Unknow button %s" % button)
+ return False
+
# ************************************************************************
# tasks
@pyqtSignature("")
- @signalLogDecorator(LOG)
def on_pb_kiimage_repair_clicked(self):
"""
Clicked repair button
@@ -206,7 +236,6 @@
self._kiimage_progressbar.show()
self._kiimage_threadlet.detach(kimover)
- @signalLogDecorator(LOG)
def on_pb_kiimage_repair_done(self):
"""
Repair threadlet done
@@ -271,6 +300,7 @@
self.lb_pacific_utc.setText(QtCore.QString(txt))
@pyqtSignature("")
+ @qtutils.skipLogging
def on_timezone_timer_timeout(self):
"""
SIGNAL: QTimer timeout
@@ -302,12 +332,10 @@
self.connect(thread, SIGNAL("ping(const QString&, float)"),
self.on_pingthread_ping)
- @signalLogDecorator(LOG)
def on_pingthread_started(self):
self.button_ping.setEnabled(False)
self.text_ping.clear()
- @signalLogDecorator(LOG)
def on_pingthread_done(self):
self.button_ping.setEnabled(True)
@@ -330,7 +358,6 @@
self.text_ping.insertPlainText("PING error: %s\n" % errmsg)
@pyqtSignature("bool")
- @signalLogDecorator(LOG)
def on_button_ping_clicked(self, ignore=False):
thread = self._ping_thread
if not thread.isRunning():
Modified: pymoul/trunk/src/moul/qt/utils.py
===================================================================
--- pymoul/trunk/src/moul/qt/utils.py 2007-02-04 15:41:40 UTC (rev 133)
+++ pymoul/trunk/src/moul/qt/utils.py 2007-02-05 00:33:55 UTC (rev 134)
@@ -14,7 +14,7 @@
#
# You should have received a copy of the GNU General Public License along
# with this program; if not, write to the Free Software Foundation, Inc., 59
-# Temple Place, Suite 330, Boston, MA 02111-1307 USA
+# Temple Place, Suitel 330, Boston, MA 02111-1307 USA
#
"""Misc utilities
@@ -27,15 +27,81 @@
import logging
import re
+import sip
import warnings
from PyQt4.QtCore import QObject
from PyQt4.QtCore import SIGNAL
from PyQt4 import QtGui
-from types import UnboundMethodType as UnboundMethod
+from types import UnboundMethodType
+from types import FunctionType
_marker=object()
SLOT_RE = re.compile('^on_(.+)_([^_]+)$')
+def skipLogging(func):
+ """Decorator to skip logging
+
+ @param func: a function object
+ @type func: FunctionType
+ """
+ func.__qsignallogger__ = False
+ return func
+
+def logDecorator(func, logger=None):
+ """
+ Log decorator for QSignalLoggerMetaclass
+
+ @param logger: a callable or None
+ @param func: a function object
+ @type func: FunctionType
+ """
+ if logger is None:
+ logger = logging.debug
+ def logwrapper(*args, **kwargs):
+ name = func.__name__
+ logger("Call: %s(%s %s)" % (name,
+ repr(args[1:]) if len(args) > 1 else '',
+ repr(kwargs) if kwargs else ''))
+ return func(*args, **kwargs)
+
+ logwrapper.__name__ = func.__name__
+ logwrapper.__doc__ = func.__doc__
+ signature = getattr(func, '_signature', None)
+ if signature is not None:
+ logwrapper._signature = signature
+ return logwrapper
+
+class QSignalLoggerMetaclass(sip.wrappertype):
+ """
+ QSignal logger meta class
+
+ Example:
+ >>> class MyClass:
+ ... __metaclass__ = QSignalLogger
+ ... __logger__ = aCallableLoggerFunction
+ ...
+ ... @pyqtSignature("bool")
+ ... def on_mybutton_clicked(self, boolean):
+ ... pass
+ ...
+ ... @pyqtSignature("")
+ ... @skipLogging
+ ... def on_notinteresting_clicked(self, boolean):
+ ... pass
+
+ """
+ def __new__(cls, name, bases, dict):
+ logger = dict.get('__logger__', None)
+ for key, value in dict.items():
+ # on_*_*
+ if not isinstance(value, FunctionType):
+ continue
+ if getattr(value, '__qsignallogger__', None) is not None:
+ continue
+ if (key.startswith('on_') and key.find('_', 4) > 0):
+ dict[key] = logDecorator(value, logger)
+ return sip.wrappertype.__new__(cls, name, bases, dict)
+
class QNamespaceContainer(QObject):
"""
Base class to assemble methods and logic in its own class.
@@ -159,7 +225,7 @@
# (container, callobj))
for name in dir(callobj):
method = getattr(callobj, name)
- if not isinstance(method, UnboundMethod):
+ if not isinstance(method, UnboundMethodType):
continue
mo = SLOT_RE.match(name)
@@ -185,7 +251,7 @@
#logging.debug('Connecting: %s to %s: %s' % (widget, signature, method))
QObject.connect(widget, SIGNAL(signature), method)
-def _mkMessageBox(context, icon='Information'):
+def _mkMessageBox(context, title, text, icon='Information'):
"""
Create a message box
"""
@@ -197,33 +263,35 @@
mb.setWindowIcon(QtGui.QIcon(":/resources/uru_icon_32x32.png"))
mb.setIcon(getattr(QtGui.QMessageBox, icon))
mb.setStandardButtons(QtGui.QMessageBox.Close)
+ mb.setWindowTitle(title)
+ mb.setText(text)
return mb
-
def criticalMB(context, title, text):
"""
Critical message box
"""
- mb = _mkMessageBox(context, icon='Critical')
- mb.setWindowTitle(title)
- mb.setText(text)
- return mb
+ return _mkMessageBox(context, title, text, icon='Critical')
def warningMB(context, title, text):
"""
warning message box
"""
- mb = _mkMessageBox(context, icon='Warning')
- mb.setWindowTitle(title)
- mb.setText(text)
- return mb
+ return _mkMessageBox(context, title, text, icon='Warning')
def infoMB(context, title, text):
"""
Info message box
"""
- mb = _mkMessageBox(context, icon='Information')
+ mb = _mkMessageBox(context, title, text, icon='Information')
mb.setStandardButtons(QtGui.QMessageBox.Ok)
- mb.setWindowTitle(title)
- mb.setText(text)
return mb
+
+def saveMB(context, title, text):
+ """
+ A question box with save discard cancel
+ """
+ mb = _mkMessageBox(context, title, text, icon='Question')
+ mb.setStandardButtons(QtGui.QMessageBox.Save | QtGui.QMessageBox.Discard
+ | QtGui.QMessageBox.Cancel)
+ return mb
Modified: pymoul/trunk/src/moul/qt/wdysini.py
===================================================================
--- pymoul/trunk/src/moul/qt/wdysini.py 2007-02-04 15:41:40 UTC (rev 133)
+++ pymoul/trunk/src/moul/qt/wdysini.py 2007-02-05 00:33:55 UTC (rev 134)
@@ -37,32 +37,36 @@
from moul.file.directory import UruPersonalDataDirectory
from moul.file.wdysini import videoModes
from moul.log import getLogger
-from moul.log import signalLogDecorator
from moul.qt.utils import QNamespaceContainer
+from moul.qt.utils import QSignalLoggerMetaclass
LOG = getLogger('moul.qt')
class IniFileContainer(QNamespaceContainer):
+ __metaclass__ = QSignalLoggerMetaclass
+ __logger__ = LOG.debug
+
def initialize(self):
# graphics.ini
+ gini = self.urupersonaldir.graphicsini
self.connect(self.context, SIGNAL("graphicsChanged(bool)"), self.on_graphicsChanged)
- self.connect(self.context, SIGNAL("graphicsini_loaded()"), self.on_graphicsini_loaded)
+ self.connect(self.context, SIGNAL("graphicsini_load()"), self.on_graphicsini_load)
self.connect(self.context, SIGNAL("graphicsini_reset()"), self.on_graphicsini_reset)
self.connect(self.context, SIGNAL("graphicsini_save()"), self.on_graphicsini_save)
self.connect(self.main_buttonbox_reset, SIGNAL("clicked()"), self.on_graphicsini_reset)
self.connect(self.main_buttonbox_save, SIGNAL("clicked()"), self.on_graphicsini_save)
# audio.ini
+ aini = self.urupersonaldir.audioini
self.connect(self.context, SIGNAL("audioChanged(bool)"), self.on_audioChanged)
- self.connect(self.context, SIGNAL("audioini_loaded()"), self.on_audioini_loaded)
+ self.connect(self.context, SIGNAL("audioini_load()"), self.on_audioini_load)
self.connect(self.context, SIGNAL("audiini_reset()"), self.on_audioini_reset)
self.connect(self.context, SIGNAL("audiini_save()"), self.on_audioini_save)
self.connect(self.main_buttonbox_reset, SIGNAL("clicked()"), self.on_audioini_reset)
self.connect(self.main_buttonbox_save, SIGNAL("clicked()"), self.on_audioini_save)
+ # emit load
+ self.context.emit(SIGNAL("audioini_load()")) # XXX: hard coded emit
+ self.context.emit(SIGNAL("graphicsini_load()")) # XXX: hard coded emit
- self.context.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
- self.context.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
-
- @signalLogDecorator(LOG)
@pyqtSignature("bool")
def on_graphicsChanged(self, boolean):
"""
@@ -70,7 +74,6 @@
"""
self.context.notifyDirty('graphicsini', boolean)
- @signalLogDecorator(LOG)
@pyqtSignature("bool")
def on_audioChanged(self, boolean):
"""
@@ -78,11 +81,10 @@
"""
self.context.notifyDirty('audioini', boolean)
- @signalLogDecorator(LOG)
@pyqtSignature("")
- def on_graphicsini_loaded(self):
+ def on_graphicsini_load(self):
"""
- @qtslot graphicsini_loaded(): notify when a graphics.ini is loaded
+ @qtslot graphicsini_load(): load ini
"""
gini = self.urupersonaldir.graphicsini
try:
@@ -96,7 +98,6 @@
self._graphicsini_setstate()
self.emit(SIGNAL("graphicsChanged(bool)"), False)
- @signalLogDecorator(LOG)
@pyqtSignature("")
def on_graphicsini_reset(self):
"""
@@ -106,7 +107,6 @@
self.urupersonaldir.graphicsini.reset()
self._graphicsini_setstate()
- @signalLogDecorator(LOG)
@pyqtSignature("")
def on_graphicsini_save(self):
"""
@@ -136,7 +136,6 @@
self.cb_gra_vsync.setChecked(gini.vsync)
self.cb_gra_shadow.setChecked(gini.shadow_enabled)
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_gra_screenres_valueChanged(self, idx):
"""
@@ -145,7 +144,6 @@
self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.screenres = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_gra_screenres_sliderMoved(self, idx):
"""
@@ -155,7 +153,6 @@
txt = videoModes.getVidModeHuman(idx)
self.lb_screenres.setText(QtCore.QString(txt))
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_gra_quality_valueChanged(self, idx):
"""
@@ -164,7 +161,6 @@
self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.quality = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_gra_texture_valueChanged(self, idx):
"""
@@ -173,7 +169,6 @@
self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.texture = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_gra_antialias_valueChanged(self, idx):
"""
@@ -182,7 +177,6 @@
self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.antialias = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_gra_anisotropic_valueChanged(self, idx):
"""
@@ -191,7 +185,6 @@
self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.anisotropic = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_gra_shadow_valueChanged(self, idx):
"""
@@ -200,7 +193,6 @@
self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.shadow = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_gra_windowed_stateChanged(self, state):
"""
@@ -209,7 +201,6 @@
self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.windowed = state
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_gra_vsync_stateChanged (self, state):
"""
@@ -218,7 +209,6 @@
self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.vsync = state
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_gra_shadow_stateChanged (self, state):
"""
@@ -230,10 +220,9 @@
# ************************************************************************
# audio settings
- @signalLogDecorator(LOG)
- def on_audioini_loaded(self):
+ def on_audioini_load(self):
"""
- SIGNAL: audioini_loaded()
+ SIGNAL: audioini_load()
"""
aini = self.urupersonaldir.audioini
try:
@@ -247,7 +236,6 @@
self._audioini_setstate()
self.emit(SIGNAL("audioChanged(bool)"), False)
- @signalLogDecorator(LOG)
def on_audioini_reset(self):
"""
SIGNAL audioini_reset()
@@ -256,7 +244,6 @@
self.urupersonaldir.audioini.reset()
self._audioini_setstate()
- @signalLogDecorator(LOG)
def on_audioini_save(self):
"""
SIGNAL audioini_save()
@@ -284,61 +271,51 @@
self.cb_aud_mute.setChecked(aini.mute)
self.cb_aud_voicechat.setChecked(aini.enablevoice)
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_device_valueChanged(self, idx):
self.urupersonaldir.audioini.device = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_device_sliderMoved(self, idx):
self.emit(SIGNAL("audioChanged(bool)"), True)
txt = self.urupersonaldir.audioini.getDeviceName(idx)
self.lb_aud_device.setText(QtCore.QString(txt[1:-1]))
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_npc_valueChanged(self, idx):
self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.npc = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_music_valueChanged(self, idx):
self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.music = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_fx_valueChanged(self, idx):
self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.fx = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_ambience_valueChanged(self, idx):
self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.ambience = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_priority_valueChanged(self, idx):
self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.priority = idx
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_eax_stateChanged (self, state):
self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.eax = state
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_mute_stateChanged (self, state):
self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.mute = state
- @signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_voicechat_stateChanged (self, state):
self.emit(SIGNAL("audioChanged(bool)"), True)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-04 15:41:45
|
Revision: 133
http://pymoul.svn.sourceforge.net/pymoul/?rev=133&view=rev
Author: tiran
Date: 2007-02-04 07:41:40 -0800 (Sun, 04 Feb 2007)
Log Message:
-----------
Changed fixed KI image name
Enhanced chatlog and plasmalog code for UI integration
Added utils module
Modified Paths:
--------------
pymoul/trunk/src/moul/file/chatlog.py
pymoul/trunk/src/moul/file/kiimage.py
pymoul/trunk/src/moul/file/plasmalog.py
Added Paths:
-----------
pymoul/trunk/src/moul/file/utils.py
Modified: pymoul/trunk/src/moul/file/chatlog.py
===================================================================
--- pymoul/trunk/src/moul/file/chatlog.py 2007-02-03 21:56:56 UTC (rev 132)
+++ pymoul/trunk/src/moul/file/chatlog.py 2007-02-04 15:41:40 UTC (rev 133)
@@ -36,9 +36,9 @@
import re
from fnmatch import fnmatch
from shutil import move
-from stat import ST_MTIME
from time import localtime
+from moul.file.utils import fileModTime
from moul.log import getLogger
@@ -79,10 +79,6 @@
LOG = getLogger('moul.chat')
-def modtime(pathname):
- """Modification time
- """
- return os.stat(pathname)[ST_MTIME]
class ChatlogMover(object):
"""
@@ -116,38 +112,37 @@
continue
LOG.debug("Found chatlog %s" % fpath)
fd = open(fpath, 'r')
- created = self._findCreated(fd)
- if not created:
- LOG.warning("Failed to parse chatlog %s" % fpath)
- mtime = localtime(modtime(fpath))
+ created = self._findCreated(fpath)
+ mtime = fileModTime(fpath)
newname = self._makeFilename(created, mtime)
-
details = {
'fpath' : fpath,
'filename' : file,
'modtime' : mtime,
'created' : created,
'newname' : newname,
- 'newpath' : os.path.join(self._dest, newname),
+ 'v' : os.path.join(self._dest, newname),
}
self._logs.append(details)
- def _findCreated(self, fd):
+ def _findCreated(self, fpath):
"""Parse chatlog to find "started" date
"""
+ fd = open(fpath, 'r')
+ line = fd.readline()
+ mo = CHAT_RE.match(line)
created = None
- while True:
- line = fd.readline()
- if not line:
- break
- mo = CHAT_RE.match(line)
- if mo:
- data = mo.groupdict()
- if data['msg'].startswith(CHATLOG_STARTED):
- d = mo.groupdict()
- created = (None, int(d['M']), int(d['D']), int(d['h']),
- int(d['m']), int(d['s']), None, None, None)
+ if mo:
+ data = mo.groupdict()
+ if data['msg'].startswith(CHATLOG_STARTED):
+ d = mo.groupdict()
+ created = (None, int(d['M']), int(d['D']), int(d['h']),
+ int(d['m']), int(d['s']), None, None, None)
+ if created is None:
+ LOG.warning("Failed to parse chatlog %s" % fpath)
+ created = (None, 0, 0, 0,
+ 0, 0, None, None, None)
return created
def _makeFilename(self, created, stopped):
@@ -162,21 +157,37 @@
}
return self._filename % mapping
+ def moveChatlog(self, details):
+ """Move a chatlogs from old to new location
+ """
+ old = details['fpath']
+ new = details['newpath']
+ if os.path.isfile(new):
+ LOG.warning("%s exists - overwriting" % new)
+ LOG.info("Move chatlog %s to %s" % (old, new))
+ move(old, new)
+
def moveChatlogs(self):
- """Move chatlogs from old to new location and name
+ """Move all chatlogs
"""
for details in self._logs:
- old = details['fpath']
- new = details['newpath']
- if os.path.isfile(new):
- LOG.warning("%s exists - overwriting" % new)
- LOG.info("Move chatlog %s to %s" % (old, new))
- move(old, new)
+ self.moveChatlog(details)
- def __call__(self):
- self.findLogs()
- self.moveChatlogs()
+ def __len__(self):
+ """len() suppor
+ """
+ return len(self._logs)
+ def __iter__(self):
+ """Iterate over the files to move
+
+ Calls moveChatlog() for each element. This method is used to
+ update a progress bar in the UI.
+ """
+ for details in self._logs:
+ yield details['newname']
+ self.moveChatlog(details)
+
class ChatlogDirectoryView(object):
"""A view of a chat log directory
Modified: pymoul/trunk/src/moul/file/kiimage.py
===================================================================
--- pymoul/trunk/src/moul/file/kiimage.py 2007-02-03 21:56:56 UTC (rev 132)
+++ pymoul/trunk/src/moul/file/kiimage.py 2007-02-04 15:41:40 UTC (rev 133)
@@ -22,15 +22,16 @@
__revision__ = "$Revision$"
import os
+import re
import struct
import tempfile
from fnmatch import fnmatch
-from stat import ST_MTIME
-from stat import ST_SIZE
+from moul.file.utils import fileModTime
+from moul.file.utils import fileSize
from moul.log import getLogger
-
+KINUMBER_RE = re.compile("(\d+)\.jpg$", re.IGNORECASE)
JPEG_HEADER = "\377\330\377"
LOG = getLogger("moul.kiimage")
@@ -41,11 +42,9 @@
def fixedNewer(ki, fixed):
"""Check file size and mod date to see if the fixed image is newer
"""
- kistat = os.stat(ki)
- fixedstat = os.stat(fixed)
- if kistat[ST_SIZE] +4 == fixedstat[ST_SIZE]:
+ if fileSize(ki) +4 == fileSize(fixed):
# ok, KI is 4 bytes larger
- if fixed[ST_MTIME] > ki[ST_MTIME]:
+ if fileModTime(fixed) > fileModTime(ki):
# ok, fixed is newer
return True
else:
@@ -230,7 +229,27 @@
if not os.path.isdir(destdir):
LOG.info("Creating fixed images directory %s" % destdir)
os.mkdir(destdir)
-
+
+ @staticmethod
+ def mkFixedName(path, name, dest):
+ """Make new new based on the name of the KI image
+
+ @param path: directory where the file lives
+ @type path: str
+ @param name: name of the image w/o path
+ @type name: str
+ @return: KIimage_moddate_number.ext
+ """
+ fpath = os.path.join(path, name)
+ date = fileModTime(fpath, format="%Y%m%d_%H%M%S")
+ _, ext = os.path.splitext(name) # "kiimage0001" , ".jpg"
+ mo = KINUMBER_RE.search(name.lower())
+ if mo is not None:
+ number = int(mo.group(1))
+ else:
+ number = 0
+ return os.path.join(dest, "KIimage_%s_%04i.%s" % (date, number, ext[1:]))
+
def findFiles(self):
"""Find files
"""
@@ -243,8 +262,9 @@
if fnmatch(name, pat)]
if matches:
ki = os.path.join(root, name)
- fixed = os.path.join(self._destdir, name)
+ fixed = self.mkFixedName(root, name, self._destdir)
self._found.append(ki)
+ # XXX: move checks to copy method!
if os.path.isfile(fixed):
if fixedNewer(ki, fixed):
LOG.debug("File %s exists but was changed." % name)
@@ -285,9 +305,7 @@
Calls checkAndCopyFiles() for each element. This method is used to
update a progress bar in the UI.
-
- Yields a NULL seperated string containing "kiname\x00fixedname"
"""
for kiname, fixedname in self._tocheck:
- yield fixedname # "%s"x00%s" % (kiname, fixedname)
+ yield kiname
self.checkAndCopyFile(kiname, fixedname)
Modified: pymoul/trunk/src/moul/file/plasmalog.py
===================================================================
--- pymoul/trunk/src/moul/file/plasmalog.py 2007-02-03 21:56:56 UTC (rev 132)
+++ pymoul/trunk/src/moul/file/plasmalog.py 2007-02-04 15:41:40 UTC (rev 133)
@@ -28,6 +28,7 @@
from stat import ST_MTIME
from moul.crypt.elf import decryptElf
+from moul.file.utils import fileModTime
from moul.log import getLogger
@@ -44,6 +45,9 @@
def __init__(self, srcdir, destdir):
self._srcdir = srcdir
self._destdir = destdir
+ self._doremove = True
+ self._dozip = True
+
LOG.debug("PlasmalogZipper: %s -> %s" % (srcdir, destdir))
self._zipped_dirs = {} # dirname -> zipfile
self._not_removed = [] # files with full path
@@ -59,13 +63,16 @@
LOG.info("Creating chatlog directory %s" % destdir)
os.mkdir(destdir)
- @staticmethod
- def getTimeStamp(path):
- """Get time stamp yyyymmdd_hhmm based in the modification time
+ def setZip(self, boolean):
+ """Set ZIP flag
"""
- sec = os.stat(path)[ST_MTIME]
- return time.strftime("%Y%m%d_%H%M", time.localtime(sec))
+ self._dozip = bool(boolean)
+ def setRemoe(self, boolean):
+ """Set remoe flag
+ """
+ self._doremove = bool(boolean)
+
def isPlasmaLogDir(self, path=None):
"""Check if a path is a valid plasma log directory
@@ -77,7 +84,7 @@
pl = os.path.join(path, PLASMA_LOG)
if not os.path.isfile(pl):
return False
- return self.getTimeStamp(pl)
+ return fileModTime(pl, format="%Y%m%d_%H%M")
def zipLogDir(self):
"""Zip all log files
@@ -133,6 +140,17 @@
else:
return True
- def __call__(self):
- self.zipLogDir()
- self.removeLogs()
+ def __len__(self):
+ """TODO: implementation
+ """
+ return 1
+
+ def __iter__(self):
+ """TODO: implementation
+ """
+ for logdir in ("dummy",):
+ yield logdir
+ if self._dozip:
+ self.zipLogDir()
+ if self._doremove:
+ self.removeLogs()
Added: pymoul/trunk/src/moul/file/utils.py
===================================================================
--- pymoul/trunk/src/moul/file/utils.py (rev 0)
+++ pymoul/trunk/src/moul/file/utils.py 2007-02-04 15:41:40 UTC (rev 133)
@@ -0,0 +1,52 @@
+# pyMoul - Python interface to Myst Online URU Live
+# Copyright (C) 2007 Christian Heimes <christian (at) cheimes (dot) de>
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program 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 General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc., 59
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+"""misc utils functions
+"""
+from __future__ import absolute_import
+
+__author__ = "Christian Heimes"
+__version__ = "$Id: kiimage.py 129 2007-02-03 18:41:23Z tiran $"
+__revision__ = "$Revision: 129 $"
+
+import os
+import time
+from stat import ST_MTIME
+from stat import ST_SIZE
+
+def fileModTime(path, format=None):
+ """Get modification time of file
+
+ @param path: path to file or directory
+ @type path: string
+ @param format: strftime string ("%Y%m%d_%H%M")
+ @type format: str or None for time struct
+ @return: str or time struct
+ """
+ sec = os.stat(path)[ST_MTIME]
+ if not format:
+ return time.localtime(sec)
+ else:
+ return time.strftime(format, time.localtime(sec))
+
+def fileSize(path):
+ """Get size of file
+
+ @param path: path to file
+ @type path: string
+ """
+ return os.stat(path)[ST_SIZE]
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-03 21:56:57
|
Revision: 132
http://pymoul.svn.sourceforge.net/pymoul/?rev=132&view=rev
Author: tiran
Date: 2007-02-03 13:56:56 -0800 (Sat, 03 Feb 2007)
Log Message:
-----------
Another language update
Modified Paths:
--------------
pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts 2007-02-03 21:55:59 UTC (rev 131)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_de.ts 2007-02-03 21:56:56 UTC (rev 132)
@@ -1,18 +1,38 @@
<!DOCTYPE TS><TS>
<context>
<name>@default</name>
+</context>
+<context>
+ <name>IniFileContainer</name>
<message>
- <source>An unhandled error has occured</source>
+ <source>Error opening graphics.ini</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please report the error:
-
-</source>
+ <source>Error opening audio.ini</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>LocalizationContainer</name>
+ <message>
+ <source>Unable to load journals.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No journals found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Journals loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>MainWindow</name>
<message>
<source>Windowed</source>
@@ -211,14 +231,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error opening graphics.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error opening audio.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>MainWindow</source>
<translation type="unfinished"></translation>
</message>
@@ -321,8 +333,35 @@
<source>License</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Load journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tool for Myst Online : Uru Live
+
+(c) 2007 by Christian Heimes
+
+http://pymoul.sourceforge.net/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Repairing KI images</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
+ <name>SimpleProgressbar</name>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>app</name>
<message>
<source>pyMoul QT already running</source>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts 2007-02-03 21:55:59 UTC (rev 131)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_es.ts 2007-02-03 21:56:56 UTC (rev 132)
@@ -1,18 +1,38 @@
<!DOCTYPE TS><TS>
<context>
<name>@default</name>
+</context>
+<context>
+ <name>IniFileContainer</name>
<message>
- <source>An unhandled error has occured</source>
+ <source>Error opening graphics.ini</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please report the error:
-
-</source>
+ <source>Error opening audio.ini</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>LocalizationContainer</name>
+ <message>
+ <source>Unable to load journals.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No journals found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Journals loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>MainWindow</name>
<message>
<source>Windowed</source>
@@ -211,14 +231,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error opening graphics.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error opening audio.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>MainWindow</source>
<translation type="unfinished"></translation>
</message>
@@ -321,8 +333,35 @@
<source>License</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Load journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tool for Myst Online : Uru Live
+
+(c) 2007 by Christian Heimes
+
+http://pymoul.sourceforge.net/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Repairing KI images</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
+ <name>SimpleProgressbar</name>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>app</name>
<message>
<source>pyMoul QT already running</source>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts 2007-02-03 21:55:59 UTC (rev 131)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_fr.ts 2007-02-03 21:56:56 UTC (rev 132)
@@ -1,18 +1,38 @@
<!DOCTYPE TS><TS>
<context>
<name>@default</name>
+</context>
+<context>
+ <name>IniFileContainer</name>
<message>
- <source>An unhandled error has occured</source>
+ <source>Error opening graphics.ini</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please report the error:
-
-</source>
+ <source>Error opening audio.ini</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>LocalizationContainer</name>
+ <message>
+ <source>Unable to load journals.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No journals found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Journals loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>MainWindow</name>
<message>
<source>Windowed</source>
@@ -211,14 +231,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error opening graphics.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error opening audio.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>MainWindow</source>
<translation type="unfinished"></translation>
</message>
@@ -321,8 +333,35 @@
<source>License</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Load journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tool for Myst Online : Uru Live
+
+(c) 2007 by Christian Heimes
+
+http://pymoul.sourceforge.net/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Repairing KI images</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
+ <name>SimpleProgressbar</name>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>app</name>
<message>
<source>pyMoul QT already running</source>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts 2007-02-03 21:55:59 UTC (rev 131)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_it.ts 2007-02-03 21:56:56 UTC (rev 132)
@@ -1,18 +1,38 @@
<!DOCTYPE TS><TS>
<context>
<name>@default</name>
+</context>
+<context>
+ <name>IniFileContainer</name>
<message>
- <source>An unhandled error has occured</source>
+ <source>Error opening graphics.ini</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please report the error:
-
-</source>
+ <source>Error opening audio.ini</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>LocalizationContainer</name>
+ <message>
+ <source>Unable to load journals.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No journals found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Journals loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>MainWindow</name>
<message>
<source>Windowed</source>
@@ -211,14 +231,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error opening graphics.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error opening audio.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>MainWindow</source>
<translation type="unfinished"></translation>
</message>
@@ -321,8 +333,35 @@
<source>License</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Load journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tool for Myst Online : Uru Live
+
+(c) 2007 by Christian Heimes
+
+http://pymoul.sourceforge.net/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Repairing KI images</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
+ <name>SimpleProgressbar</name>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>app</name>
<message>
<source>pyMoul QT already running</source>
Modified: pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts
===================================================================
--- pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts 2007-02-03 21:55:59 UTC (rev 131)
+++ pymoul/trunk/src/moul/qt/i18n/pymoul_nl.ts 2007-02-03 21:56:56 UTC (rev 132)
@@ -1,18 +1,38 @@
<!DOCTYPE TS><TS>
<context>
<name>@default</name>
+</context>
+<context>
+ <name>IniFileContainer</name>
<message>
- <source>An unhandled error has occured</source>
+ <source>Error opening graphics.ini</source>
<translation type="unfinished"></translation>
</message>
<message>
- <source>Please report the error:
-
-</source>
+ <source>Error opening audio.ini</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
+ <name>LocalizationContainer</name>
+ <message>
+ <source>Unable to load journals.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>No journals found.</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Loading journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Journals loaded.</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>MainWindow</name>
<message>
<source>Windowed</source>
@@ -211,14 +231,6 @@
<translation type="unfinished"></translation>
</message>
<message>
- <source>Error opening graphics.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
- <source>Error opening audio.ini</source>
- <translation type="unfinished"></translation>
- </message>
- <message>
<source>MainWindow</source>
<translation type="unfinished"></translation>
</message>
@@ -321,8 +333,35 @@
<source>License</source>
<translation type="unfinished"></translation>
</message>
+ <message>
+ <source>Load journals</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>TextLabel</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Tool for Myst Online : Uru Live
+
+(c) 2007 by Christian Heimes
+
+http://pymoul.sourceforge.net/</source>
+ <translation type="unfinished"></translation>
+ </message>
+ <message>
+ <source>Repairing KI images</source>
+ <translation type="unfinished"></translation>
+ </message>
</context>
<context>
+ <name>SimpleProgressbar</name>
+ <message>
+ <source>Title</source>
+ <translation type="unfinished"></translation>
+ </message>
+</context>
+<context>
<name>app</name>
<message>
<source>pyMoul QT already running</source>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-03 21:56:02
|
Revision: 131
http://pymoul.svn.sourceforge.net/pymoul/?rev=131&view=rev
Author: tiran
Date: 2007-02-03 13:55:59 -0800 (Sat, 03 Feb 2007)
Log Message:
-----------
Added dirty handler
Modified Paths:
--------------
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/simpleprogressbar.py
pymoul/trunk/src/moul/qt/threadlet.py
pymoul/trunk/src/moul/qt/wdysini.py
Property Changed:
----------------
pymoul/trunk/src/moul/qt/errorhandler.py
pymoul/trunk/src/moul/qt/simpleprogressbar.py
pymoul/trunk/src/moul/qt/threadlet.py
pymoul/trunk/src/moul/qt/ui/simpleprogressbar.py
pymoul/trunk/src/moul/qt/ui/simpleprogressbar.ui
pymoul/trunk/src/moul/qt/utils.py
Property changes on: pymoul/trunk/src/moul/qt/errorhandler.py
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-03 19:26:53 UTC (rev 130)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-03 21:55:59 UTC (rev 131)
@@ -35,7 +35,6 @@
from moul.config import lookupDir
from moul.file.directory import UruGameDataDirectory
from moul.file.directory import UruPersonalDataDirectory
-from moul.file.wdysini import videoModes
from moul.log import getLogger
from moul.log import signalLogDecorator
from moul.osdependent import isMoulRunning
@@ -62,11 +61,12 @@
self.main_buttonbox_reset = but(QtGui.QDialogButtonBox.Reset)
self.main_buttonbox_save = but(QtGui.QDialogButtonBox.Save)
self.main_buttonbox_close = but(QtGui.QDialogButtonBox.Close)
-
+ self.main_buttonbox_save.setEnabled(False)
+ self.main_buttonbox_reset.setEnabled(False)
+
# dirty flag: unsaved changes
- self._dirty = False
- self.setDirty(False)
-
+ self._dirty = {}
+
# set directory handlers
self.urugamedir = UruGameDataDirectory(lookupDir('install'))
self.urugamedir.initializeFactories()
@@ -150,15 +150,34 @@
event.accept()
event.ignore()
- def setDirty(self, boolean):
+ def isDirty(self):
"""
+ Check if we have unsaved changes
+ """
+ if any(self._dirty.values()):
+ return True
+ else:
+ return False
+
+ def clearDirty(self):
+ """
+ Clear dirty state
+ """
+ self._dirty.clear()
+ self.main_buttonbox_save.setEnabled(False)
+ self.main_buttonbox_reset.setEnabled(False)
+
+ def notifyDirty(self, name, boolean):
+ """
Sets the save state
"""
- self._dirty = bool(boolean)
- #self.main_buttonbox_reset.setEnabled(boolean)
- #self.main_buttonbox_save.setEnabled(boolean)
- self.main_buttonbox_save.setEnabled(True)
- self.main_buttonbox_reset.setEnabled(True)
+ self._dirty[name] = boolean
+ if self.isDirty():
+ self.main_buttonbox_save.setEnabled(True)
+ self.main_buttonbox_reset.setEnabled(True)
+ else:
+ self.main_buttonbox_save.setEnabled(False)
+ self.main_buttonbox_reset.setEnabled(False)
# ************************************************************************
# tasks
Modified: pymoul/trunk/src/moul/qt/simpleprogressbar.py
===================================================================
--- pymoul/trunk/src/moul/qt/simpleprogressbar.py 2007-02-03 19:26:53 UTC (rev 130)
+++ pymoul/trunk/src/moul/qt/simpleprogressbar.py 2007-02-03 21:55:59 UTC (rev 131)
@@ -19,8 +19,8 @@
"""Moul QT GUI main windows
"""
__author__ = "Christian Heimes"
-__version__ = "$Id: mainwindow.py 116 2007-02-02 03:32:28Z tiran $"
-__revision__ = "$Revision: 116 $"
+__version__ = "$Id$"
+__revision__ = "$Revision$"
__all__ = ['SimpleProgressbar']
Property changes on: pymoul/trunk/src/moul/qt/simpleprogressbar.py
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Modified: pymoul/trunk/src/moul/qt/threadlet.py
===================================================================
--- pymoul/trunk/src/moul/qt/threadlet.py 2007-02-03 19:26:53 UTC (rev 130)
+++ pymoul/trunk/src/moul/qt/threadlet.py 2007-02-03 21:55:59 UTC (rev 131)
@@ -20,8 +20,8 @@
"""Threadlet - execute a function in a seperate thread
"""
__author__ = "Christian Heimes"
-__version__ = "$Id: moulqt.py 110 2007-01-31 15:40:51Z tiran $"
-__revision__ = "$Revision: 110 $"
+__version__ = "$Id$"
+__revision__ = "$Revision$"
import sys
from PyQt4 import QtCore
Property changes on: pymoul/trunk/src/moul/qt/threadlet.py
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Property changes on: pymoul/trunk/src/moul/qt/ui/simpleprogressbar.py
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Property changes on: pymoul/trunk/src/moul/qt/ui/simpleprogressbar.ui
___________________________________________________________________
Name: svn:eol-style
+ native
Property changes on: pymoul/trunk/src/moul/qt/utils.py
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ native
Modified: pymoul/trunk/src/moul/qt/wdysini.py
===================================================================
--- pymoul/trunk/src/moul/qt/wdysini.py 2007-02-03 19:26:53 UTC (rev 130)
+++ pymoul/trunk/src/moul/qt/wdysini.py 2007-02-03 21:55:59 UTC (rev 131)
@@ -45,21 +45,40 @@
class IniFileContainer(QNamespaceContainer):
def initialize(self):
# graphics.ini
+ self.connect(self.context, SIGNAL("graphicsChanged(bool)"), self.on_graphicsChanged)
self.connect(self.context, SIGNAL("graphicsini_loaded()"), self.on_graphicsini_loaded)
self.connect(self.context, SIGNAL("graphicsini_reset()"), self.on_graphicsini_reset)
self.connect(self.context, SIGNAL("graphicsini_save()"), self.on_graphicsini_save)
self.connect(self.main_buttonbox_reset, SIGNAL("clicked()"), self.on_graphicsini_reset)
self.connect(self.main_buttonbox_save, SIGNAL("clicked()"), self.on_graphicsini_save)
- self.context.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
# audio.ini
+ self.connect(self.context, SIGNAL("audioChanged(bool)"), self.on_audioChanged)
self.connect(self.context, SIGNAL("audioini_loaded()"), self.on_audioini_loaded)
self.connect(self.context, SIGNAL("audiini_reset()"), self.on_audioini_reset)
self.connect(self.context, SIGNAL("audiini_save()"), self.on_audioini_save)
self.connect(self.main_buttonbox_reset, SIGNAL("clicked()"), self.on_audioini_reset)
self.connect(self.main_buttonbox_save, SIGNAL("clicked()"), self.on_audioini_save)
+
self.context.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
+ self.context.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
@signalLogDecorator(LOG)
+ @pyqtSignature("bool")
+ def on_graphicsChanged(self, boolean):
+ """
+ @qtslot on_graphicsChanged(bool): notify when graphics settings are changed
+ """
+ self.context.notifyDirty('graphicsini', boolean)
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("bool")
+ def on_audioChanged(self, boolean):
+ """
+ @qtslot on_audioChanged(bool): notify when audio settings are changed
+ """
+ self.context.notifyDirty('audioini', boolean)
+
+ @signalLogDecorator(LOG)
@pyqtSignature("")
def on_graphicsini_loaded(self):
"""
@@ -75,6 +94,7 @@
self.trUtf8("""Something bad happend while opening the graphics.ini\n%s""" % msg))
return
self._graphicsini_setstate()
+ self.emit(SIGNAL("graphicsChanged(bool)"), False)
@signalLogDecorator(LOG)
@pyqtSignature("")
@@ -82,6 +102,7 @@
"""
SIGNAL graphicsini_reset()
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), False)
self.urupersonaldir.graphicsini.reset()
self._graphicsini_setstate()
@@ -91,7 +112,7 @@
"""
SIGNAL graphicsini_save()
"""
- #self._notimplemented()
+ self.emit(SIGNAL("graphicsChanged(bool)"), False)
self.urupersonaldir.graphicsini.write()
self.setDirty(False)
@@ -121,6 +142,7 @@
"""
SIGNAL: valueChanged (int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.screenres = idx
@signalLogDecorator(LOG)
@@ -129,6 +151,7 @@
"""
SIGNAL: sliderMoved(int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
txt = videoModes.getVidModeHuman(idx)
self.lb_screenres.setText(QtCore.QString(txt))
@@ -138,6 +161,7 @@
"""
SIGNAL: valueChanged (int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.quality = idx
@signalLogDecorator(LOG)
@@ -146,6 +170,7 @@
"""
SIGNAL: valueChanged (int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.texture = idx
@signalLogDecorator(LOG)
@@ -154,6 +179,7 @@
"""
SIGNAL: valueChanged (int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.antialias = idx
@signalLogDecorator(LOG)
@@ -162,6 +188,7 @@
"""
SIGNAL: valueChanged (int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.anisotropic = idx
@signalLogDecorator(LOG)
@@ -170,6 +197,7 @@
"""
SIGNAL: valueChanged (int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.shadow = idx
@signalLogDecorator(LOG)
@@ -178,6 +206,7 @@
"""
SIGNAL: stateChanged(int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.windowed = state
@signalLogDecorator(LOG)
@@ -186,6 +215,7 @@
"""
SIGNAL: stateChanged(int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.vsync = state
@signalLogDecorator(LOG)
@@ -194,6 +224,7 @@
"""
SIGNAL: stateChanged(int)
"""
+ self.emit(SIGNAL("graphicsChanged(bool)"), True)
self.urupersonaldir.graphicsini.shadow_enabled = state
# ************************************************************************
@@ -214,12 +245,14 @@
self.trUtf8("""Something bad happend while opening the audio.ini\n%s""" % msg))
return
self._audioini_setstate()
+ self.emit(SIGNAL("audioChanged(bool)"), False)
@signalLogDecorator(LOG)
def on_audioini_reset(self):
"""
SIGNAL audioini_reset()
"""
+ self.emit(SIGNAL("audioChanged(bool)"), False)
self.urupersonaldir.audioini.reset()
self._audioini_setstate()
@@ -228,7 +261,7 @@
"""
SIGNAL audioini_save()
"""
- #self._notimplemented()
+ self.emit(SIGNAL("audioChanged(bool)"), False)
self.urupersonaldir.audioini.write()
self.setDirty(False) # urks
@@ -259,45 +292,54 @@
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_device_sliderMoved(self, idx):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
txt = self.urupersonaldir.audioini.getDeviceName(idx)
self.lb_aud_device.setText(QtCore.QString(txt[1:-1]))
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_npc_valueChanged(self, idx):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.npc = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_music_valueChanged(self, idx):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.music = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_fx_valueChanged(self, idx):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.fx = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_ambience_valueChanged(self, idx):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.ambience = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_priority_valueChanged(self, idx):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.priority = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_eax_stateChanged (self, state):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.eax = state
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_mute_stateChanged (self, state):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.mute = state
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_voicechat_stateChanged (self, state):
+ self.emit(SIGNAL("audioChanged(bool)"), True)
self.urupersonaldir.audioini.voicechat = state
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-03 19:27:04
|
Revision: 130
http://pymoul.svn.sourceforge.net/pymoul/?rev=130&view=rev
Author: tiran
Date: 2007-02-03 11:26:53 -0800 (Sat, 03 Feb 2007)
Log Message:
-----------
Completely moved loc and wdysini gui code to seperate containers.
Fixed signal loc decorator to forward pyqtSignature
Modified Paths:
--------------
pymoul/trunk/src/moul/log.py
pymoul/trunk/src/moul/qt/localization.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/utils.py
Added Paths:
-----------
pymoul/trunk/src/moul/qt/wdysini.py
Modified: pymoul/trunk/src/moul/log.py
===================================================================
--- pymoul/trunk/src/moul/log.py 2007-02-03 18:41:23 UTC (rev 129)
+++ pymoul/trunk/src/moul/log.py 2007-02-03 19:26:53 UTC (rev 130)
@@ -146,6 +146,7 @@
__logger__.debug("%s(*%s, **%s)" % (func.__name__,
repr(args[1:]), repr(kwargs)))
return func(*args, **kwargs)
+ logwrapper._signature = getattr(func, '_signature', None)
logwrapper.__name__ = func.__name__
logwrapper.__doc__ = func.__doc__
return logwrapper
Modified: pymoul/trunk/src/moul/qt/localization.py
===================================================================
--- pymoul/trunk/src/moul/qt/localization.py 2007-02-03 18:41:23 UTC (rev 129)
+++ pymoul/trunk/src/moul/qt/localization.py 2007-02-03 19:26:53 UTC (rev 130)
@@ -41,10 +41,6 @@
LOG = getLogger('moul.loc')
-def insertDummyQ(lst):
- dummy = type(lst)(["<choose>"])
- return QtCore.QStringList(dummy+lst)
-
class LocalizationContainer(QNamespaceContainer):
"""
Mixin for documentation tab
@@ -64,6 +60,12 @@
self.connect(self.cb_doc_set, SIGNAL("currentIndexChanged(int)"),
self.on_cb_doc_set_currentIndexChanged)
+ @staticmethod
+ def insertDummyQ(lst):
+ dummy = type(lst)(["<choose>"])
+ return QtCore.QStringList(dummy+lst)
+
+ @pyqtSignature("")
@signalLogDecorator(LOG)
def on_localization_doload(self):
"""
@@ -79,7 +81,7 @@
self.lb_doc_status.setText(
self.trUtf8("Unable to load journals."))
return
-
+
loc.findLocs()
if not len(loc):
self.lb_doc_status.setText(
@@ -98,6 +100,7 @@
self.progressbar.increase)
self.threadlet.detach(loc)
+ @pyqtSignature("")
@signalLogDecorator(LOG)
def on_localization_loaded(self):
"""
@@ -122,7 +125,7 @@
languages = sorted(tr.languages())
self._documents_state['languages'] = languages
self.cb_doc_language.clear()
- self.cb_doc_language.addItems(insertDummyQ(languages))
+ self.cb_doc_language.addItems(self.insertDummyQ(languages))
self.cb_doc_language.setCurrentIndex(0)
self.cb_doc_language.setEnabled(True)
@@ -157,7 +160,7 @@
ages = sorted(tr._tree[lang].keys())
self._documents_state['curlanguage'] = lang
self._documents_state['ages'] = ages
- self.cb_doc_age.addItems(insertDummyQ(ages))
+ self.cb_doc_age.addItems(self.insertDummyQ(ages))
self.cb_doc_age.setEnabled(True)
@pyqtSignature("int")
@@ -171,7 +174,7 @@
sets = sorted(tr._tree[lang][age].keys())
self._documents_state['curage'] = (lang, age)
self._documents_state['sets'] = sets
- self.cb_doc_set.addItems(insertDummyQ(sets))
+ self.cb_doc_set.addItems(self.insertDummyQ(sets))
self.cb_doc_set.setEnabled(True)
@pyqtSignature("int")
@@ -185,7 +188,7 @@
elements = sorted(tr._tree[lang][age][set].keys())
self._documents_state['curset'] = (lang, age, set)
self._documents_state['elements'] = elements
- self.cb_doc_element.addItems(insertDummyQ(elements))
+ self.cb_doc_element.addItems(self.insertDummyQ(elements))
self.cb_doc_element.setEnabled(True)
@pyqtSignature("int")
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-03 18:41:23 UTC (rev 129)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-03 19:26:53 UTC (rev 130)
@@ -44,11 +44,11 @@
from moul.time.cavern import CavernTime
from moul.qt.localization import LocalizationContainer
+from moul.qt.wdysini import IniFileContainer
from moul.qt.simpleprogressbar import SimpleProgressbar
from moul.qt.threadlet import YieldingThreadlet
from moul.qt.ui.mainwindow import Ui_MainWindow
-
LOG = getLogger('moul.qt')
class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
@@ -75,16 +75,12 @@
# init handlers
self._timezone_init()
- self._graphics_init()
- self._audio_init()
self._ping_init()
self._systray_init()
self._about_init()
self.qcLocalization = LocalizationContainer(self)
+ self.qcIniFile = IniFileContainer(self)
- # connect additional
- QtCore.QMetaObject.connectSlotsByName(self)
-
# run checker
self._moulrunning = None
self._moulrunning_thread = MoulRunningThread()
@@ -165,19 +161,7 @@
self.main_buttonbox_reset.setEnabled(True)
# ************************************************************************
- # system tray
- def _systray_init(self):
- self.systemtray = QtGui.QSystemTrayIcon()
- self.systemtray.setIcon(QtGui.QIcon(":/resources/uru_icon_32x32.png"))
- self.systemtray.setVisible(True)
- self.systemtray.setToolTip(QtCore.QString('pyMoul'))
-
- def _systray_close(self):
- self.systemtray.setVisible(False)
-
- # ************************************************************************
# tasks
-
@pyqtSignature("")
@signalLogDecorator(LOG)
def on_pb_kiimage_repair_clicked(self):
@@ -219,278 +203,23 @@
# TODO: msg
# ************************************************************************
- # graphics settings
- def _about_init(self):
- self.te_license.setPlainText(metadata.LICENSE)
+ # system tray
+ def _systray_init(self):
+ self.systemtray = QtGui.QSystemTrayIcon()
+ self.systemtray.setIcon(QtGui.QIcon(":/resources/uru_icon_32x32.png"))
+ self.systemtray.setVisible(True)
+ self.systemtray.setToolTip(QtCore.QString('pyMoul'))
- # ************************************************************************
- # graphics settings
- def _graphics_init(self):
- """
- init graphics tab
- """
- self.connect(self, SIGNAL("graphicsini_loaded()"), self.on_graphicsini_loaded)
- self.connect(self, SIGNAL("graphicsini_reset()"), self.on_graphicsini_reset)
- self.connect(self, SIGNAL("graphicsini_save()"), self.on_graphicsini_save)
- self.connect(self.main_buttonbox_reset, SIGNAL("clicked()"), self.on_graphicsini_reset)
- self.connect(self.main_buttonbox_save, SIGNAL("clicked()"), self.on_graphicsini_save)
- self.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
+ def _systray_close(self):
+ self.systemtray.setVisible(False)
- @signalLogDecorator(LOG)
- def on_graphicsini_loaded(self):
- """
- @qtslot graphicsini_loaded(): notify when a graphics.ini is loaded
- """
- gini = self.urupersonaldir.graphicsini
- try:
- gini.read()
- except Exception, msg:
- LOG.exception("Something bad happened while parsing the graphics.ini file")
- QtGui.QMessageBox.critical(None,
- self.trUtf8("Error opening graphics.ini"),
- self.trUtf8("""Something bad happend while opening the graphics.ini\n%s""" % msg))
- return
- self._graphicsini_setstate()
-
- @signalLogDecorator(LOG)
- def on_graphicsini_reset(self):
- """
- SIGNAL graphicsini_reset()
- """
- self.urupersonaldir.graphicsini.reset()
- self._graphicsini_setstate()
-
- @signalLogDecorator(LOG)
- def on_graphicsini_save(self):
- """
- SIGNAL graphicsini_save()
- """
- #self._notimplemented()
- self.urupersonaldir.graphicsini.write()
- self.setDirty(False)
-
- def _graphicsini_setstate(self):
- """
- Set sliders according to graphics ini settings
- """
- gini = self.urupersonaldir.graphicsini
- length = len(videoModes) - 1
- self.sl_gra_screenres.setMaximum(length)
-
- self.sl_gra_screenres.setValue(gini.screenres)
- self.sl_gra_quality.setValue(gini.quality)
- self.sl_gra_texture.setValue(gini.texture)
- self.sl_gra_antialias.setValue(gini.antialias)
- self.sl_gra_anisotropic.setValue(gini.anisotropic)
- self.sl_gra_shadow.setValue(gini.shadow)
- self.cb_gra_windowed.setChecked(gini.windowed)
- self.cb_gra_vsync.setChecked(gini.vsync)
- self.cb_gra_shadow.setChecked(gini.shadow_enabled)
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_gra_screenres_valueChanged(self, idx):
- """
- SIGNAL: valueChanged (int)
- """
- # XXX: fixme
- txt = videoModes.getVidModeHuman(idx)
- self.lb_screenres.setText(QtCore.QString(txt))
- self.urupersonaldir.graphicsini.screenres = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_gra_screenres_sliderMoved(self, idx):
- """
- SIGNAL: sliderMoved(int)
- """
- txt = videoModes.getVidModeHuman(idx)
- self.lb_screenres.setText(QtCore.QString(txt))
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_gra_quality_valueChanged(self, idx):
- """
- SIGNAL: valueChanged (int)
- """
- self.urupersonaldir.graphicsini.quality = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_gra_texture_valueChanged(self, idx):
- """
- SIGNAL: valueChanged (int)
- """
- self.urupersonaldir.graphicsini.texture = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_gra_antialias_valueChanged(self, idx):
- """
- SIGNAL: valueChanged (int)
- """
- self.urupersonaldir.graphicsini.antialias = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_gra_anisotropic_valueChanged(self, idx):
- """
- SIGNAL: valueChanged (int)
- """
- self.urupersonaldir.graphicsini.anisotropic = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_gra_shadow_valueChanged(self, idx):
- """
- SIGNAL: valueChanged (int)
- """
- self.urupersonaldir.graphicsini.shadow = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_cb_gra_windowed_stateChanged(self, state):
- """
- SIGNAL: stateChanged(int)
- """
- self.urupersonaldir.graphicsini.windowed = state
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_cb_gra_vsync_stateChanged (self, state):
- """
- SIGNAL: stateChanged(int)
- """
- self.urupersonaldir.graphicsini.vsync = state
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_cb_gra_shadow_stateChanged (self, state):
- """
- SIGNAL: stateChanged(int)
- """
- self.urupersonaldir.graphicsini.shadow_enabled = state
-
# ************************************************************************
- # audio settings
+ # about tab
+ def _about_init(self):
+ self.te_license.setPlainText(metadata.LICENSE)
- def _audio_init(self):
- """
- init graphics tab
- """
- self.connect(self, SIGNAL("audioini_loaded()"), self.on_audioini_loaded)
- self.connect(self, SIGNAL("audiini_reset()"), self.on_audioini_reset)
- self.connect(self, SIGNAL("audiini_save()"), self.on_audioini_save)
- self.connect(self.main_buttonbox_reset, SIGNAL("clicked()"), self.on_audioini_reset)
- self.connect(self.main_buttonbox_save, SIGNAL("clicked()"), self.on_audioini_save)
- self.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
-
- @signalLogDecorator(LOG)
- def on_audioini_loaded(self):
- """
- SIGNAL: audioini_loaded()
- """
- aini = self.urupersonaldir.audioini
- try:
- aini.read()
- except Exception, msg:
- LOG.exception("Something bad happened while parsing the audio.ini file")
- QtGui.QMessageBox.critical(None,
- self.trUtf8("Error opening audio.ini"),
- self.trUtf8("""Something bad happend while opening the audio.ini\n%s""" % msg))
- return
- self._audioini_setstate()
-
- @signalLogDecorator(LOG)
- def on_audioini_reset(self):
- """
- SIGNAL audioini_reset()
- """
- self.urupersonaldir.audioini.reset()
- self._audioini_setstate()
-
- @signalLogDecorator(LOG)
- def on_audioini_save(self):
- """
- SIGNAL audioini_save()
- """
- #self._notimplemented()
- self.urupersonaldir.audioini.write()
- self.setDirty(False) # urks
-
- def _audioini_setstate(self):
- """
- Set sliders according to audio ini settings
- """
- aini = self.urupersonaldir.audioini
- self.sl_aud_device.setMaximum(aini.numberOfDevices()-1)
-
- self.sl_aud_npc.setValue(aini.npc)
- self.sl_aud_music.setValue(aini.music)
- self.sl_aud_fx.setValue(aini.fx)
- self.sl_aud_ambience.setValue(aini.ambience)
- self.sl_aud_priority.setValue(aini.priority)
- self.sl_aud_device.setValue(aini.device)
- self.cb_aud_eax.setChecked(aini.eax)
- self.cb_aud_mute.setChecked(aini.mute)
- self.cb_aud_voicechat.setChecked(aini.enablevoice)
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_aud_device_valueChanged(self, idx):
- self.urupersonaldir.audioini.device = idx
- txt = self.urupersonaldir.audioini.getDeviceName(idx)
- self.lb_aud_device.setText(QtCore.QString(txt[1:-1]))
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_aud_device_sliderMoved(self, idx):
- txt = self.urupersonaldir.audioini.getDeviceName(idx)
- self.lb_aud_device.setText(QtCore.QString(txt[1:-1]))
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_aud_npc_valueChanged(self, idx):
- self.urupersonaldir.audioini.npc = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_aud_music_valueChanged(self, idx):
- self.urupersonaldir.audioini.music = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_aud_fx_valueChanged(self, idx):
- self.urupersonaldir.audioini.fx = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_aud_ambience_valueChanged(self, idx):
- self.urupersonaldir.audioini.ambience = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_sl_aud_priority_valueChanged(self, idx):
- self.urupersonaldir.audioini.priority = idx
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_cb_aud_eax_stateChanged (self, state):
- self.urupersonaldir.audioini.eax = state
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_cb_aud_mute_stateChanged (self, state):
- self.urupersonaldir.audioini.mute = state
-
- @signalLogDecorator(LOG)
- @pyqtSignature("int")
- def on_cb_aud_voicechat_stateChanged (self, state):
- self.urupersonaldir.audioini.voicechat = state
-
# ************************************************************************
# time zones
-
def _timezone_init(self):
"""
Init time zone tab"""
Modified: pymoul/trunk/src/moul/qt/utils.py
===================================================================
--- pymoul/trunk/src/moul/qt/utils.py 2007-02-03 18:41:23 UTC (rev 129)
+++ pymoul/trunk/src/moul/qt/utils.py 2007-02-03 19:26:53 UTC (rev 130)
@@ -25,6 +25,7 @@
__version__ = "$Id"
__revision__ = "$Revision$"
+import logging
import re
import warnings
from PyQt4.QtCore import QObject
@@ -32,10 +33,6 @@
from PyQt4 import QtGui
from types import UnboundMethodType as UnboundMethod
-from moul.log import getLogger
-
-
-LOG = getLogger('moul.qt.utils')
_marker=object()
SLOT_RE = re.compile('^on_(.+)_([^_]+)$')
@@ -95,8 +92,8 @@
Shortcut for self.parent().connect(*args)
"""
if args[0] is self:
- warnings.warn("You used self as first argument but should use "
- "self.context!", SyntaxWarning, stacklevel=2)
+ warnings.warn("You are using self as first argument but should "
+ "use self.context!", SyntaxWarning, stacklevel=2)
self.parent().connect(*args)
def disconnect(self, *args):
@@ -104,8 +101,8 @@
Shortcut for self.parent().disconnect(*args)
"""
if args[0] is self:
- warnings.warn("You used self as first argument but should use "
- "self.context!", SyntaxWarning, stacklevel=2)
+ warnings.warn("You used self as first argument but should "
+ "use self.context!", SyntaxWarning, stacklevel=2)
self.parent().disconnect(*args)
def emit(self, *args):
@@ -178,7 +175,13 @@
continue
# Support the QtCore.pyqtSignature decorator.
- signature = '%s(%s)' % (nsignal, getattr(method, '_signature', ''))
+ qtsig = getattr(method, '_signature', _marker)
+ if qtsig is _marker:
+ warnings.warn("No signature found for %s.%s. use @pyqtSignature()!"
+ % (callobj.__class__.__name__, method.__name__),
+ stacklevel=3)
+ qtsig = ''
+ signature = '%s(%s)' % (nsignal, qtsig)
#logging.debug('Connecting: %s to %s: %s' % (widget, signature, method))
QObject.connect(widget, SIGNAL(signature), method)
Copied: pymoul/trunk/src/moul/qt/wdysini.py (from rev 129, pymoul/trunk/src/moul/qt/mainwindow.py)
===================================================================
--- pymoul/trunk/src/moul/qt/wdysini.py (rev 0)
+++ pymoul/trunk/src/moul/qt/wdysini.py 2007-02-03 19:26:53 UTC (rev 130)
@@ -0,0 +1,303 @@
+# pyMoul - Python interface to Myst Online URU Live
+# Copyright (C) 2007 Christian Heimes <christian (at) cheimes (dot) de>
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program 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 General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc., 59
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+"""Moul QT GUI main windows
+"""
+from __future__ import with_statement
+
+__author__ = "Christian Heimes"
+__version__ = "$Id$"
+__revision__ = "$Revision$"
+
+import sys
+from PyQt4 import QtCore
+from PyQt4 import QtGui
+from PyQt4.QtCore import Qt
+from PyQt4.QtCore import SIGNAL
+from PyQt4.QtCore import pyqtSignature
+
+from moul import metadata
+from moul.config import lookupDir
+from moul.file.directory import UruGameDataDirectory
+from moul.file.directory import UruPersonalDataDirectory
+from moul.file.wdysini import videoModes
+from moul.log import getLogger
+from moul.log import signalLogDecorator
+from moul.qt.utils import QNamespaceContainer
+
+LOG = getLogger('moul.qt')
+
+class IniFileContainer(QNamespaceContainer):
+ def initialize(self):
+ # graphics.ini
+ self.connect(self.context, SIGNAL("graphicsini_loaded()"), self.on_graphicsini_loaded)
+ self.connect(self.context, SIGNAL("graphicsini_reset()"), self.on_graphicsini_reset)
+ self.connect(self.context, SIGNAL("graphicsini_save()"), self.on_graphicsini_save)
+ self.connect(self.main_buttonbox_reset, SIGNAL("clicked()"), self.on_graphicsini_reset)
+ self.connect(self.main_buttonbox_save, SIGNAL("clicked()"), self.on_graphicsini_save)
+ self.context.emit(SIGNAL("graphicsini_loaded()")) # XXX: hard coded emit
+ # audio.ini
+ self.connect(self.context, SIGNAL("audioini_loaded()"), self.on_audioini_loaded)
+ self.connect(self.context, SIGNAL("audiini_reset()"), self.on_audioini_reset)
+ self.connect(self.context, SIGNAL("audiini_save()"), self.on_audioini_save)
+ self.connect(self.main_buttonbox_reset, SIGNAL("clicked()"), self.on_audioini_reset)
+ self.connect(self.main_buttonbox_save, SIGNAL("clicked()"), self.on_audioini_save)
+ self.context.emit(SIGNAL("audioini_loaded()")) # XXX: hard coded emit
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("")
+ def on_graphicsini_loaded(self):
+ """
+ @qtslot graphicsini_loaded(): notify when a graphics.ini is loaded
+ """
+ gini = self.urupersonaldir.graphicsini
+ try:
+ gini.read()
+ except Exception, msg:
+ LOG.exception("Something bad happened while parsing the graphics.ini file")
+ QtGui.QMessageBox.critical(None,
+ self.trUtf8("Error opening graphics.ini"),
+ self.trUtf8("""Something bad happend while opening the graphics.ini\n%s""" % msg))
+ return
+ self._graphicsini_setstate()
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("")
+ def on_graphicsini_reset(self):
+ """
+ SIGNAL graphicsini_reset()
+ """
+ self.urupersonaldir.graphicsini.reset()
+ self._graphicsini_setstate()
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("")
+ def on_graphicsini_save(self):
+ """
+ SIGNAL graphicsini_save()
+ """
+ #self._notimplemented()
+ self.urupersonaldir.graphicsini.write()
+ self.setDirty(False)
+
+ def _graphicsini_setstate(self):
+ """
+ Set sliders according to graphics ini settings
+ """
+ gini = self.urupersonaldir.graphicsini
+ length = len(videoModes) - 1
+ txt = videoModes.getVidModeHuman(gini.screenres)
+
+ self.sl_gra_screenres.setMaximum(length)
+ self.sl_gra_screenres.setValue(gini.screenres)
+ self.lb_screenres.setText(QtCore.QString(txt))
+ self.sl_gra_quality.setValue(gini.quality)
+ self.sl_gra_texture.setValue(gini.texture)
+ self.sl_gra_antialias.setValue(gini.antialias)
+ self.sl_gra_anisotropic.setValue(gini.anisotropic)
+ self.sl_gra_shadow.setValue(gini.shadow)
+ self.cb_gra_windowed.setChecked(gini.windowed)
+ self.cb_gra_vsync.setChecked(gini.vsync)
+ self.cb_gra_shadow.setChecked(gini.shadow_enabled)
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_gra_screenres_valueChanged(self, idx):
+ """
+ SIGNAL: valueChanged (int)
+ """
+ self.urupersonaldir.graphicsini.screenres = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_gra_screenres_sliderMoved(self, idx):
+ """
+ SIGNAL: sliderMoved(int)
+ """
+ txt = videoModes.getVidModeHuman(idx)
+ self.lb_screenres.setText(QtCore.QString(txt))
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_gra_quality_valueChanged(self, idx):
+ """
+ SIGNAL: valueChanged (int)
+ """
+ self.urupersonaldir.graphicsini.quality = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_gra_texture_valueChanged(self, idx):
+ """
+ SIGNAL: valueChanged (int)
+ """
+ self.urupersonaldir.graphicsini.texture = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_gra_antialias_valueChanged(self, idx):
+ """
+ SIGNAL: valueChanged (int)
+ """
+ self.urupersonaldir.graphicsini.antialias = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_gra_anisotropic_valueChanged(self, idx):
+ """
+ SIGNAL: valueChanged (int)
+ """
+ self.urupersonaldir.graphicsini.anisotropic = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_gra_shadow_valueChanged(self, idx):
+ """
+ SIGNAL: valueChanged (int)
+ """
+ self.urupersonaldir.graphicsini.shadow = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_cb_gra_windowed_stateChanged(self, state):
+ """
+ SIGNAL: stateChanged(int)
+ """
+ self.urupersonaldir.graphicsini.windowed = state
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_cb_gra_vsync_stateChanged (self, state):
+ """
+ SIGNAL: stateChanged(int)
+ """
+ self.urupersonaldir.graphicsini.vsync = state
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_cb_gra_shadow_stateChanged (self, state):
+ """
+ SIGNAL: stateChanged(int)
+ """
+ self.urupersonaldir.graphicsini.shadow_enabled = state
+
+ # ************************************************************************
+ # audio settings
+
+ @signalLogDecorator(LOG)
+ def on_audioini_loaded(self):
+ """
+ SIGNAL: audioini_loaded()
+ """
+ aini = self.urupersonaldir.audioini
+ try:
+ aini.read()
+ except Exception, msg:
+ LOG.exception("Something bad happened while parsing the audio.ini file")
+ QtGui.QMessageBox.critical(None,
+ self.trUtf8("Error opening audio.ini"),
+ self.trUtf8("""Something bad happend while opening the audio.ini\n%s""" % msg))
+ return
+ self._audioini_setstate()
+
+ @signalLogDecorator(LOG)
+ def on_audioini_reset(self):
+ """
+ SIGNAL audioini_reset()
+ """
+ self.urupersonaldir.audioini.reset()
+ self._audioini_setstate()
+
+ @signalLogDecorator(LOG)
+ def on_audioini_save(self):
+ """
+ SIGNAL audioini_save()
+ """
+ #self._notimplemented()
+ self.urupersonaldir.audioini.write()
+ self.setDirty(False) # urks
+
+ def _audioini_setstate(self):
+ """
+ Set sliders according to audio ini settings
+ """
+ aini = self.urupersonaldir.audioini
+ txt = self.urupersonaldir.audioini.getDeviceName(aini.device)
+
+ self.sl_aud_device.setMaximum(aini.numberOfDevices()-1)
+ self.sl_aud_npc.setValue(aini.npc)
+ self.sl_aud_music.setValue(aini.music)
+ self.sl_aud_fx.setValue(aini.fx)
+ self.sl_aud_ambience.setValue(aini.ambience)
+ self.sl_aud_priority.setValue(aini.priority)
+ self.sl_aud_device.setValue(aini.device)
+ self.lb_aud_device.setText(QtCore.QString(txt[1:-1]))
+ self.cb_aud_eax.setChecked(aini.eax)
+ self.cb_aud_mute.setChecked(aini.mute)
+ self.cb_aud_voicechat.setChecked(aini.enablevoice)
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_aud_device_valueChanged(self, idx):
+ self.urupersonaldir.audioini.device = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_aud_device_sliderMoved(self, idx):
+ txt = self.urupersonaldir.audioini.getDeviceName(idx)
+ self.lb_aud_device.setText(QtCore.QString(txt[1:-1]))
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_aud_npc_valueChanged(self, idx):
+ self.urupersonaldir.audioini.npc = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_aud_music_valueChanged(self, idx):
+ self.urupersonaldir.audioini.music = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_aud_fx_valueChanged(self, idx):
+ self.urupersonaldir.audioini.fx = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_aud_ambience_valueChanged(self, idx):
+ self.urupersonaldir.audioini.ambience = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_sl_aud_priority_valueChanged(self, idx):
+ self.urupersonaldir.audioini.priority = idx
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_cb_aud_eax_stateChanged (self, state):
+ self.urupersonaldir.audioini.eax = state
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_cb_aud_mute_stateChanged (self, state):
+ self.urupersonaldir.audioini.mute = state
+
+ @signalLogDecorator(LOG)
+ @pyqtSignature("int")
+ def on_cb_aud_voicechat_stateChanged (self, state):
+ self.urupersonaldir.audioini.voicechat = state
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-03 18:42:22
|
Revision: 129
http://pymoul.svn.sourceforge.net/pymoul/?rev=129&view=rev
Author: tiran
Date: 2007-02-03 10:41:23 -0800 (Sat, 03 Feb 2007)
Log Message:
-----------
Added QNamespaceContainer()
Fixed unit tests
Modified Paths:
--------------
pymoul/trunk/src/moul/file/kiimage.py
pymoul/trunk/src/moul/file/localization.py
pymoul/trunk/src/moul/file/tests/test_directory.py
pymoul/trunk/src/moul/file/tests/test_plasmalog.py
pymoul/trunk/src/moul/qt/errorhandler.py
pymoul/trunk/src/moul/qt/localization.py
pymoul/trunk/src/moul/qt/mainwindow.py
Added Paths:
-----------
pymoul/trunk/src/moul/qt/utils.py
Modified: pymoul/trunk/src/moul/file/kiimage.py
===================================================================
--- pymoul/trunk/src/moul/file/kiimage.py 2007-02-03 02:12:36 UTC (rev 128)
+++ pymoul/trunk/src/moul/file/kiimage.py 2007-02-03 18:41:23 UTC (rev 129)
@@ -274,7 +274,7 @@
fixed.close()
tmp.close()
ki.close()
-
+
def __len__(self):
"""len() support - returns number of images to check
"""
Modified: pymoul/trunk/src/moul/file/localization.py
===================================================================
--- pymoul/trunk/src/moul/file/localization.py 2007-02-03 02:12:36 UTC (rev 128)
+++ pymoul/trunk/src/moul/file/localization.py 2007-02-03 18:41:23 UTC (rev 129)
@@ -316,7 +316,7 @@
def parseLocDir(self):
"""Parse all loc files at once
"""
- if self._loc is None:
+ if self._locs is None:
self.findLocs()
for loc in iter(self):
pass
@@ -324,7 +324,10 @@
def __len__(self):
"""len() support
"""
- return len(self._locs)
+ if self._locs is None:
+ return 0
+ else:
+ return len(self._locs)
def __iter__(self):
"""Iterator support for GUI progress bar
Modified: pymoul/trunk/src/moul/file/tests/test_directory.py
===================================================================
--- pymoul/trunk/src/moul/file/tests/test_directory.py 2007-02-03 02:12:36 UTC (rev 128)
+++ pymoul/trunk/src/moul/file/tests/test_directory.py 2007-02-03 18:41:23 UTC (rev 129)
@@ -53,7 +53,7 @@
def test_dumbfactorycreate(self):
for name in self.urudir._factories:
f = self.urudir.factory(name)
- self.failUnless(f, str((type(f), repr(f), name)))
+ self.failUnless(f is not None, str((type(f), repr(f), name)))
class UruPersonalDirTest(AbstractTest):
klass = UruPersonalDataDirectory
Modified: pymoul/trunk/src/moul/file/tests/test_plasmalog.py
===================================================================
--- pymoul/trunk/src/moul/file/tests/test_plasmalog.py 2007-02-03 02:12:36 UTC (rev 128)
+++ pymoul/trunk/src/moul/file/tests/test_plasmalog.py 2007-02-03 18:41:23 UTC (rev 129)
@@ -104,7 +104,9 @@
self.failUnless(os.path.isdir(self._kidest), self._kidest)
kif.findFiles()
- kif.checkAndCopyFiles()
+ # check and copy files
+ for f in iter(kif):
+ pass
content = os.listdir(self._kidest)
self.failUnlessEqual(len(content), 1, content)
self.failUnlessEqual(content, ["KIimage001.jpg"])
Modified: pymoul/trunk/src/moul/qt/errorhandler.py
===================================================================
--- pymoul/trunk/src/moul/qt/errorhandler.py 2007-02-03 02:12:36 UTC (rev 128)
+++ pymoul/trunk/src/moul/qt/errorhandler.py 2007-02-03 18:41:23 UTC (rev 129)
@@ -20,7 +20,7 @@
"""Error handling for moul qt
The module installs a custom exception hook that shows unhandled traceback in
-the ui. It also contains several functions to create message boxes.
+the ui.
"""
__author__ = "Christian Heimes"
__version__ = "$Id"
@@ -28,14 +28,14 @@
import os
import sys
-from PyQt4 import QtCore
-from PyQt4 import QtGui
-from PyQt4.QtCore import Qt
+from PyQt4.QtGui import QApplication
from traceback import format_exception
from moul.log import getLogger
+from moul.qt.utils import criticalMB
+
LOG = getLogger('moul.qt.error')
@@ -48,9 +48,9 @@
if not getattr(sys, 'frozen', False):
return
try:
- title= QtGui.QApplication.translate("excepthook",
+ title= QApplication.translate("excepthook",
"An unhandled error has occured",
- None, QtGui.QApplication.UnicodeUTF8)
+ None, QQApplication.UnicodeUTF8)
msg = ("Please report the error:\n\n" +
'\n'.join([line.strip() for line in
format_exception(typ, value, traceback)])
@@ -74,46 +74,3 @@
"""
LOG.info("Qt exception hook removed")
sys.excepthook = sys.__excepthook__
-
-def _mkMessageBox(context, icon='Information'):
- """
- Create a message box
- """
- assert icon in ('Question', 'Information', 'Warning', 'Critical')
- if context:
- mb = QtGui.QMessageBox(context)
- else:
- mb = QtGui.QMessageBox()
- mb.setWindowIcon(QtGui.QIcon(":/resources/uru_icon_32x32.png"))
- mb.setIcon(getattr(QtGui.QMessageBox, icon))
- mb.setStandardButtons(QtGui.QMessageBox.Close)
- return mb
-
-
-def criticalMB(context, title, text):
- """
- Critical message box
- """
- mb = _mkMessageBox(context, icon='Critical')
- mb.setWindowTitle(title)
- mb.setText(text)
- return mb
-
-def warningMB(context, title, text):
- """
- warning message box
- """
- mb = _mkMessageBox(context, icon='Warning')
- mb.setWindowTitle(title)
- mb.setText(text)
- return mb
-
-def infoMB(context, title, text):
- """
- Info message box
- """
- mb = _mkMessageBox(context, icon='Information')
- mb.setStandardButtons(QtGui.QMessageBox.Ok)
- mb.setWindowTitle(title)
- mb.setText(text)
- return mb
Modified: pymoul/trunk/src/moul/qt/localization.py
===================================================================
--- pymoul/trunk/src/moul/qt/localization.py 2007-02-03 02:12:36 UTC (rev 128)
+++ pymoul/trunk/src/moul/qt/localization.py 2007-02-03 18:41:23 UTC (rev 129)
@@ -36,6 +36,7 @@
from moul.qt.simpleprogressbar import SimpleProgressbar
from moul.qt.threadlet import YieldingThreadlet
+from moul.qt.utils import QNamespaceContainer
LOG = getLogger('moul.loc')
@@ -44,17 +45,17 @@
dummy = type(lst)(["<choose>"])
return QtCore.QStringList(dummy+lst)
-class LocalizationMixin(object):
+class LocalizationContainer(QNamespaceContainer):
"""
Mixin for documentation tab
"""
- def _documents_init(self):
+ def initialize(self):
"""
@qtsignal loadLocalization(): load loc data
"""
- self._journals_loaded = False
+ self.loaded = False
self._documents_clear('language')
- self.connect(self, SIGNAL('loadLocalization()'),
+ self.connect(self.context, SIGNAL('loadLocalization()'),
self.on_localization_doload)
self.connect(self.cb_doc_language, SIGNAL("currentIndexChanged(int)"),
self.on_cb_doc_language_currentIndexChanged)
@@ -69,7 +70,7 @@
@qtslot loadLocalization(): Load localization
@qtsignal finished(): self._journal_threadlet
"""
- if self._journals_loaded:
+ if self.loaded:
return
loc = self.urugamedir.loc
@@ -85,17 +86,17 @@
self.trUtf8("No journals found."))
return
- self._journal_progressbar = SimpleProgressbar(self)
- self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
- self._journal_progressbar.setProgressbar(0, len(loc), 0)
- self._journal_progressbar.show()
+ self.progressbar = SimpleProgressbar(self.context)
+ self.progressbar.setWindowTitle(self.trUtf8("Loading journals"))
+ self.progressbar.setProgressbar(0, len(loc), 0)
+ self.progressbar.show()
- self._journal_threadlet = YieldingThreadlet(self)
- self.connect(self._journal_threadlet, SIGNAL('finished()'),
+ self.threadlet = YieldingThreadlet(self.context)
+ self.connect(self.threadlet, SIGNAL('finished()'),
self.on_localization_loaded)
- self.connect(self._journal_threadlet, SIGNAL("yield(const QString&)"),
- self._journal_progressbar.increase)
- self._journal_threadlet.detach(loc)
+ self.connect(self.threadlet, SIGNAL("yield(const QString&)"),
+ self.progressbar.increase)
+ self.threadlet.detach(loc)
@signalLogDecorator(LOG)
def on_localization_loaded(self):
@@ -103,17 +104,17 @@
@qtslot finished(): self._journal_threadlet
"""
# remove thread
- self.disconnect(self._journal_threadlet, SIGNAL('finished()'),
+ self.disconnect(self.threadlet, SIGNAL('finished()'),
self.on_localization_loaded)
- self.disconnect(self._journal_threadlet, SIGNAL("yield(const QString&)"),
- self._journal_progressbar.increase)
- del self._journal_threadlet
+ self.disconnect(self.threadlet, SIGNAL("yield(const QString&)"),
+ self.progressbar.increase)
+ del self.threadlet
# close and remove info message box
- self._journal_progressbar.close()
- del self._journal_progressbar
+ self.progressbar.close()
+ del self.progressbar
- self._journals_loaded = True
+ self.loaded = True
self.lb_doc_status.setText(
self.trUtf8("Journals loaded."))
@@ -129,6 +130,9 @@
@signalLogDecorator(LOG)
def on_pb_doc_loadjournals_clicked(self):
"""
+ L{LocalizationContainer}
+
+ @slot clicked(): clicked pb_doc_loadjournals
"""
self.pb_doc_loadjournals.setEnabled(False)
self.emit(SIGNAL("loadLocalization()"))
@@ -139,7 +143,7 @@
if name == 'doc':
qobj = self.te_doc_view
else:
- qobj = getattr(self, 'cb_doc_%s' % name)
+ qobj = getattr(self.context, 'cb_doc_%s' % name)
qobj.clear()
qobj.setEnabled(False)
@@ -196,16 +200,3 @@
qstr = QtCore.QString(translation)
self.te_doc_view.setPlainText(qstr)
self.te_doc_view.setEnabled(True)
-
-#class LocalizationLoadEventFilter(QtCore.QObject):
- #"""Event filter to load localization
- #"""
- #def eventFilter(self, target, event):
- #"""
- #Event filter
- #"""
- #if event.type() in (QtCore.QEvent.MouseButtonPress,
- #QtCore.QEvent.FocusIn):
- #self.parent().emit(SIGNAL('loadLocalization()'))
-
- #return QtCore.QObject.eventFilter(self, target, event)
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-03 02:12:36 UTC (rev 128)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-03 18:41:23 UTC (rev 129)
@@ -43,7 +43,7 @@
from moul.server.ping import isSocketError
from moul.time.cavern import CavernTime
-from moul.qt.localization import LocalizationMixin
+from moul.qt.localization import LocalizationContainer
from moul.qt.simpleprogressbar import SimpleProgressbar
from moul.qt.threadlet import YieldingThreadlet
from moul.qt.ui.mainwindow import Ui_MainWindow
@@ -51,7 +51,7 @@
LOG = getLogger('moul.qt')
-class MainWindow(QtGui.QMainWindow, Ui_MainWindow, LocalizationMixin):
+class MainWindow(QtGui.QMainWindow, Ui_MainWindow):
def __init__(self):
QtGui.QMainWindow.__init__(self)
# Set up the user interface from Designer.
@@ -80,8 +80,11 @@
self._ping_init()
self._systray_init()
self._about_init()
- self._documents_init()
+ self.qcLocalization = LocalizationContainer(self)
+ # connect additional
+ QtCore.QMetaObject.connectSlotsByName(self)
+
# run checker
self._moulrunning = None
self._moulrunning_thread = MoulRunningThread()
Copied: pymoul/trunk/src/moul/qt/utils.py (from rev 126, pymoul/trunk/src/moul/qt/errorhandler.py)
===================================================================
--- pymoul/trunk/src/moul/qt/utils.py (rev 0)
+++ pymoul/trunk/src/moul/qt/utils.py 2007-02-03 18:41:23 UTC (rev 129)
@@ -0,0 +1,226 @@
+#!/usr/bin/env python2.5
+# pyMoul - Python interface to Myst Online URU Live
+# Copyright (C) 2007 Christian Heimes <christian (at) cheimes (dot) de>
+
+# This program is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License as published by the
+# Free Software Foundation; either version 2 of the License, or (at your
+# option) any later version.
+#
+# This program 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 General Public License for
+# more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc., 59
+# Temple Place, Suite 330, Boston, MA 02111-1307 USA
+#
+
+"""Misc utilities
+
+It also contains several functions to create message boxes.
+"""
+__author__ = "Christian Heimes"
+__version__ = "$Id"
+__revision__ = "$Revision$"
+
+import re
+import warnings
+from PyQt4.QtCore import QObject
+from PyQt4.QtCore import SIGNAL
+from PyQt4 import QtGui
+from types import UnboundMethodType as UnboundMethod
+
+from moul.log import getLogger
+
+
+LOG = getLogger('moul.qt.utils')
+_marker=object()
+SLOT_RE = re.compile('^on_(.+)_([^_]+)$')
+
+class QNamespaceContainer(QObject):
+ """
+ Base class to assemble methods and logic in its own class.
+
+ Slot methods (on_method_event()) are automatically connected to widgets of
+ the parent. If the methods takes an argument you *must* apply a
+ @pyqtSignature() decorator!
+
+ connect(), disconnect(), emit() and attribute access are forwarded to the
+ parent class (like Zope2 implicit acquisition wrapper) but you *must* use
+ self.context instead self as argument.
+
+ >>> class MyStuff(QNamespaceContainer):
+ ... def initialize(self):
+ ... self.connect(self.context, SIGNAL("foo()"), bar)
+ ...
+ ... @pyqtSignature("int")
+ ... def on_button_clicked(self, boolean):
+
+ Now add the container to your class
+ >>> class MainWindow(QtCore.QObject):
+ ... def __init__(self, parent=None):
+ ... QtCore.QObject.__init__(self, parent=None)
+ ... self.qcMystuff = MyStuff(parent)
+
+ @warning: If you are creating new QObject based instances you should
+ bind them to self.context and *not* to self. This is especially true
+ for QWidget based objects.
+ """
+
+ def __init__(self, parent):
+ """
+ Constructor
+
+ Calls initialize() and auto connects slot methods with parent's
+ widgets.
+
+ @param parent: the Qt parent object
+ @type parent: a QObject based instance
+ """
+ QObject.__init__(self, parent)
+ self.initialize()
+ connectSlotsByName(container=parent, callobj=self)
+
+ @property
+ def context(self):
+ """
+ Shortcut for self.parent()
+ """
+ return self.parent()
+
+ def connect(self, *args):
+ """
+ Shortcut for self.parent().connect(*args)
+ """
+ if args[0] is self:
+ warnings.warn("You used self as first argument but should use "
+ "self.context!", SyntaxWarning, stacklevel=2)
+ self.parent().connect(*args)
+
+ def disconnect(self, *args):
+ """
+ Shortcut for self.parent().disconnect(*args)
+ """
+ if args[0] is self:
+ warnings.warn("You used self as first argument but should use "
+ "self.context!", SyntaxWarning, stacklevel=2)
+ self.parent().disconnect(*args)
+
+ def emit(self, *args):
+ """
+ Shortcut for self.parent().emit(*args)
+ """
+ self.parent().emit(*args)
+
+ def __getattr__(self, name, default=_marker):
+ """
+ Get attributes form parent.
+
+ Works similar to Zope 2's Implicit Acquisition wrapper.
+ """
+ try:
+ return getattr(self.parent(), name)
+ except AttributeError:
+ if default is not _marker:
+ return default
+ else:
+ raise AttributeError(name)
+
+ def initialize(self):
+ """
+ Initialize method
+
+ Must be implement in the subclass
+ """
+ raise NotImplementedError
+
+def connectSlotsByName(container, callobj):
+ """
+ A version of connectSlotsByName() that uses a potentially different object
+ to search for widget instances and to search for callbacks. This is more
+ flexible than the version that is provided with Qt because it allows you to
+ bind to callbacks on any object, not just on the widget container class
+ itself. You can also call this with a number of combinations of container
+ and callback objects.
+
+ See QtCore.QMetaObject.connectSlotsByName() for some background info.
+
+ Based on U{http://www.diotavelli.net/PyQtWiki/AutoConnectingSlots}
+
+ @param container: an instance whose attributes will be inspected to find
+ Qt widgets.
+ @type container: instance of a QObject subclass
+ @param callobj: an object which will be inspect for appropriately named methods
+ to be used as callbacks for widgets on 'container'.
+ @type callobj: instance of a QObject subclass
+
+ @note: You *must* use @pyqtSignature() if the method takes an argument!
+ """
+ #logging.debug('connectSlotsByName container=%s callobj=%s' %
+ # (container, callobj))
+ for name in dir(callobj):
+ method = getattr(callobj, name)
+ if not isinstance(method, UnboundMethod):
+ continue
+
+ mo = SLOT_RE.match(name)
+ if mo is None:
+ continue
+
+ nwidget, nsignal = mo.groups()
+ try:
+ widget = getattr(container, nwidget)
+ except AttributeError:
+ #logging.debug("Widget '%s' not found; method '%s' will not be "
+ # "bound." % (nwidget, name))
+ continue
+
+ # Support the QtCore.pyqtSignature decorator.
+ signature = '%s(%s)' % (nsignal, getattr(method, '_signature', ''))
+ #logging.debug('Connecting: %s to %s: %s' % (widget, signature, method))
+ QObject.connect(widget, SIGNAL(signature), method)
+
+def _mkMessageBox(context, icon='Information'):
+ """
+ Create a message box
+ """
+ assert icon in ('Question', 'Information', 'Warning', 'Critical')
+ if context:
+ mb = QtGui.QMessageBox(context)
+ else:
+ mb = QtGui.QMessageBox()
+ mb.setWindowIcon(QtGui.QIcon(":/resources/uru_icon_32x32.png"))
+ mb.setIcon(getattr(QtGui.QMessageBox, icon))
+ mb.setStandardButtons(QtGui.QMessageBox.Close)
+ return mb
+
+
+def criticalMB(context, title, text):
+ """
+ Critical message box
+ """
+ mb = _mkMessageBox(context, icon='Critical')
+ mb.setWindowTitle(title)
+ mb.setText(text)
+ return mb
+
+def warningMB(context, title, text):
+ """
+ warning message box
+ """
+ mb = _mkMessageBox(context, icon='Warning')
+ mb.setWindowTitle(title)
+ mb.setText(text)
+ return mb
+
+def infoMB(context, title, text):
+ """
+ Info message box
+ """
+ mb = _mkMessageBox(context, icon='Information')
+ mb.setStandardButtons(QtGui.QMessageBox.Ok)
+ mb.setWindowTitle(title)
+ mb.setText(text)
+ return mb
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-03 02:12:43
|
Revision: 128
http://pymoul.svn.sourceforge.net/pymoul/?rev=128&view=rev
Author: tiran
Date: 2007-02-02 18:12:36 -0800 (Fri, 02 Feb 2007)
Log Message:
-----------
More fixes for the journal sub tab. A button was added to manually load the journals.
Added progressbar's close event and window modal handling
Modified Paths:
--------------
pymoul/trunk/src/moul/file/localization.py
pymoul/trunk/src/moul/qt/localization.py
pymoul/trunk/src/moul/qt/mainwindow.py
pymoul/trunk/src/moul/qt/simpleprogressbar.py
pymoul/trunk/src/moul/qt/ui/mainwindow.py
pymoul/trunk/src/moul/qt/ui/mainwindow.ui
pymoul/trunk/src/moul/qt/ui/simpleprogressbar.py
pymoul/trunk/src/moul/qt/ui/simpleprogressbar.ui
Modified: pymoul/trunk/src/moul/file/localization.py
===================================================================
--- pymoul/trunk/src/moul/file/localization.py 2007-02-02 21:05:40 UTC (rev 127)
+++ pymoul/trunk/src/moul/file/localization.py 2007-02-03 02:12:36 UTC (rev 128)
@@ -40,10 +40,10 @@
IGNORE_ELEMENTS = []
class TranslationRegistry(dict):
- """Registry for Translation objects"""
-
+ """Registry for Translation objects
+ """
__slot__ = ('_bylanguage', '_byage', '_byset', '_byelement', '_tree')
-
+
def __new__(cls, *args, **kwargs):
self = dict.__new__(cls, *args, **kwargs)
self._bylanguage = {}
@@ -54,6 +54,14 @@
return self
def register(self, translation):
+ """Register a translation instance
+
+ Translations are stored by their key. During the registration the
+ translations are also inserted in multiple lookup tables and a tree.
+
+ @param translation: a translation object
+ @type translation: Translation instance
+ """
key = translation.key()
if key in self:
msg = ("File %s, %s already registered" %
@@ -75,6 +83,8 @@
self[key] = translation
def __setitem__(self, key, translation):
+ """obj[] hook
+ """
assert key == translation.key()
dict.__setitem__(self, key, translation)
@@ -83,25 +93,50 @@
id(self), len(self))
def clear(self):
+ """Clear the translation registry.
+
+ Removes every translation from the registry and its lookup tables.
+ """
dict.clear(self)
self._bylanguage.clear()
self._byage.clear()
self._byset.clear()
self._byelement.clear()
+
+ def languages(self):
+ """Get sorted list of all registered languages
- def languages(self):
+ @rtype: list
+ """
return sorted(self._bylanguage.keys())
def ages(self):
+ """Get sorted list of all registered ages
+
+ @rtype: list
+ """
return sorted(self._byage.keys())
def sets(self):
+ """Get sorted list of all registered sets
+
+ @rtype: list
+ """
return sorted(self._byset.keys())
def elements(self):
+ """Get sorted list of all registered elements
+
+ @rtype: list
+ """
return sorted(self._byelement.keys())
def tree(self):
+ """Get a tree
+
+ @return: tree with languages -> age -> set -> element -> key
+ @rtype: dict
+ """
return self._tree
translationRegistry = TranslationRegistry()
Modified: pymoul/trunk/src/moul/qt/localization.py
===================================================================
--- pymoul/trunk/src/moul/qt/localization.py 2007-02-02 21:05:40 UTC (rev 127)
+++ pymoul/trunk/src/moul/qt/localization.py 2007-02-03 02:12:36 UTC (rev 128)
@@ -53,11 +53,15 @@
@qtsignal loadLocalization(): load loc data
"""
self._journals_loaded = False
+ self._documents_clear('language')
self.connect(self, SIGNAL('loadLocalization()'),
self.on_localization_doload)
- self.cb_doc_language.addItems(insertDummyQ([]))
- self.cb_doc_language_eventFilter = LocalizationLoadEventFilter(self)
- self.cb_doc_language.installEventFilter(self.cb_doc_language_eventFilter)
+ self.connect(self.cb_doc_language, SIGNAL("currentIndexChanged(int)"),
+ self.on_cb_doc_language_currentIndexChanged)
+ self.connect(self.cb_doc_age, SIGNAL("currentIndexChanged(int)"),
+ self.on_cb_doc_age_currentIndexChanged)
+ self.connect(self.cb_doc_set, SIGNAL("currentIndexChanged(int)"),
+ self.on_cb_doc_set_currentIndexChanged)
@signalLogDecorator(LOG)
def on_localization_doload(self):
@@ -65,29 +69,25 @@
@qtslot loadLocalization(): Load localization
@qtsignal finished(): self._journal_threadlet
"""
- if self.cb_doc_language_eventFilter:
- self.cb_doc_language.removeEventFilter(
- self.cb_doc_language_eventFilter
- )
- self.cb_doc_language_eventFilter = None
-
if self._journals_loaded:
return
- ldh = self.urugamedir.factory('loc')
- if not ldh.exists():
+ loc = self.urugamedir.loc
+ if not loc.exists():
self.tab_sub_journals.setEnabled(False)
- # TODO: message
+ self.lb_doc_status.setText(
+ self.trUtf8("Unable to load journals."))
return
- ldh.findLocs()
- if not len(ldh):
- # TODO: message
+ loc.findLocs()
+ if not len(loc):
+ self.lb_doc_status.setText(
+ self.trUtf8("No journals found."))
return
self._journal_progressbar = SimpleProgressbar(self)
self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
- self._journal_progressbar.setProgressbar(0, len(ldh), 0)
+ self._journal_progressbar.setProgressbar(0, len(loc), 0)
self._journal_progressbar.show()
self._journal_threadlet = YieldingThreadlet(self)
@@ -95,7 +95,7 @@
self.on_localization_loaded)
self.connect(self._journal_threadlet, SIGNAL("yield(const QString&)"),
self._journal_progressbar.increase)
- self._journal_threadlet.detach(ldh)
+ self._journal_threadlet.detach(loc)
@signalLogDecorator(LOG)
def on_localization_loaded(self):
@@ -112,24 +112,27 @@
# close and remove info message box
self._journal_progressbar.close()
del self._journal_progressbar
+
self._journals_loaded = True
+ self.lb_doc_status.setText(
+ self.trUtf8("Journals loaded."))
self._documents_state = {}
-
- self.connect(self.cb_doc_language, SIGNAL("currentIndexChanged(int)"),
- self.on_cb_doc_language_currentIndexChanged)
- self.connect(self.cb_doc_age, SIGNAL("currentIndexChanged(int)"),
- self.on_cb_doc_age_currentIndexChanged)
- self.connect(self.cb_doc_set, SIGNAL("currentIndexChanged(int)"),
- self.on_cb_doc_set_currentIndexChanged)
- #self.connect(self.cb_doc_element, SIGNAL("currentIndexChanged(int)"),
- # self.on_cb_doc_element_currentIndexChanged)
languages = sorted(tr.languages())
self._documents_state['languages'] = languages
self.cb_doc_language.clear()
self.cb_doc_language.addItems(insertDummyQ(languages))
self.cb_doc_language.setCurrentIndex(0)
+ self.cb_doc_language.setEnabled(True)
+ @pyqtSignature("")
+ @signalLogDecorator(LOG)
+ def on_pb_doc_loadjournals_clicked(self):
+ """
+ """
+ self.pb_doc_loadjournals.setEnabled(False)
+ self.emit(SIGNAL("loadLocalization()"))
+
def _documents_clear(self, name):
names = ['language', 'age', 'set', 'element', 'doc']
for name in names[names.index(name):]:
@@ -194,15 +197,15 @@
self.te_doc_view.setPlainText(qstr)
self.te_doc_view.setEnabled(True)
-class LocalizationLoadEventFilter(QtCore.QObject):
- """Event filter to load localization
- """
- def eventFilter(self, target, event):
- """
- Event filter
- """
- if event.type() in (QtCore.QEvent.MouseButtonPress,
- QtCore.QEvent.FocusIn):
- self.parent().emit(SIGNAL('loadLocalization()'))
+#class LocalizationLoadEventFilter(QtCore.QObject):
+ #"""Event filter to load localization
+ #"""
+ #def eventFilter(self, target, event):
+ #"""
+ #Event filter
+ #"""
+ #if event.type() in (QtCore.QEvent.MouseButtonPress,
+ #QtCore.QEvent.FocusIn):
+ #self.parent().emit(SIGNAL('loadLocalization()'))
- return QtCore.QObject.eventFilter(self, target, event)
+ #return QtCore.QObject.eventFilter(self, target, event)
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-02 21:05:40 UTC (rev 127)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-03 02:12:36 UTC (rev 128)
@@ -69,8 +69,8 @@
# set directory handlers
self.urugamedir = UruGameDataDirectory(lookupDir('install'))
+ self.urugamedir.initializeFactories()
self.urupersonaldir = UruPersonalDataDirectory(lookupDir('userdata'))
- # TODO: checks
self.urupersonaldir.initializeFactories()
# init handlers
Modified: pymoul/trunk/src/moul/qt/simpleprogressbar.py
===================================================================
--- pymoul/trunk/src/moul/qt/simpleprogressbar.py 2007-02-02 21:05:40 UTC (rev 127)
+++ pymoul/trunk/src/moul/qt/simpleprogressbar.py 2007-02-03 02:12:36 UTC (rev 128)
@@ -31,8 +31,11 @@
class SimpleProgressbar(QtGui.QDialog, Ui_SimpleProgressbar):
- """A simple progress bar dialog
+ """A simple progress bar dialog.
+ A SimpleProgressbar is QT::ApplicationModal and can't be closed unless
+ canClose is set to True or close() is called manually.
+
>>> bar = SimpleProgressbar()
>>> bar.setWindowTitle(bar.trUtf8('a bar'))
>>> bar.setProgressbar(0, 100, 20)
@@ -42,7 +45,26 @@
def __init__(self, parent=None):
QtGui.QDialog.__init__(self, parent)
self.setupUi(self)
+ self.canClose = False
+
+ def closeEvent(self, event):
+ """
+ Event handler for QCloseEvent
+
+ @type event: QCloseEvent
+ """
+ if self.canClose:
+ event.accept()
+ else:
+ event.ignore()
+ def close(self):
+ """
+ Overwrite close() to set canClose to True
+ """
+ self.canClose = True
+ return QtGui.QDialog.close(self)
+
def setProgressbar(self, minval, maxval, value=None):
"""Set progress bar min, max and initial value
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.py 2007-02-02 21:05:40 UTC (rev 127)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.py 2007-02-03 02:12:36 UTC (rev 128)
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file './src/moul/qt/ui/mainwindow.ui'
#
-# Created: Fri Feb 2 18:43:30 2007
+# Created: Sat Feb 3 00:25:54 2007
# by: PyQt4 UI code generator 4.1.1
#
# WARNING! All changes made in this file will be lost!
@@ -858,13 +858,8 @@
self.gb_documents.setGeometry(QtCore.QRect(10,0,451,371))
self.gb_documents.setObjectName("gb_documents")
- self.te_doc_view = QtGui.QTextEdit(self.gb_documents)
- self.te_doc_view.setGeometry(QtCore.QRect(10,130,431,231))
- self.te_doc_view.setReadOnly(True)
- self.te_doc_view.setObjectName("te_doc_view")
-
self.gridLayout_2 = QtGui.QWidget(self.gb_documents)
- self.gridLayout_2.setGeometry(QtCore.QRect(10,20,291,108))
+ self.gridLayout_2.setGeometry(QtCore.QRect(10,20,431,113))
self.gridLayout_2.setObjectName("gridLayout_2")
self.gridlayout2 = QtGui.QGridLayout(self.gridLayout_2)
@@ -872,23 +867,10 @@
self.gridlayout2.setSpacing(6)
self.gridlayout2.setObjectName("gridlayout2")
- self.label_2 = QtGui.QLabel(self.gridLayout_2)
- self.label_2.setObjectName("label_2")
- self.gridlayout2.addWidget(self.label_2,1,0,1,1)
+ self.cb_doc_element = QtGui.QComboBox(self.gridLayout_2)
+ self.cb_doc_element.setObjectName("cb_doc_element")
+ self.gridlayout2.addWidget(self.cb_doc_element,3,1,1,1)
- self.label_7 = QtGui.QLabel(self.gridLayout_2)
- self.label_7.setObjectName("label_7")
- self.gridlayout2.addWidget(self.label_7,3,0,1,1)
-
- self.label = QtGui.QLabel(self.gridLayout_2)
- self.label.setMinimumSize(QtCore.QSize(80,0))
- self.label.setObjectName("label")
- self.gridlayout2.addWidget(self.label,0,0,1,1)
-
- self.label_3 = QtGui.QLabel(self.gridLayout_2)
- self.label_3.setObjectName("label_3")
- self.gridlayout2.addWidget(self.label_3,2,0,1,1)
-
self.cb_doc_language = QtGui.QComboBox(self.gridLayout_2)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Policy(7),QtGui.QSizePolicy.Policy(0))
@@ -899,17 +881,46 @@
self.cb_doc_language.setObjectName("cb_doc_language")
self.gridlayout2.addWidget(self.cb_doc_language,0,1,1,1)
- self.cb_doc_age = QtGui.QComboBox(self.gridLayout_2)
- self.cb_doc_age.setObjectName("cb_doc_age")
- self.gridlayout2.addWidget(self.cb_doc_age,1,1,1,1)
+ self.label = QtGui.QLabel(self.gridLayout_2)
+ self.label.setMinimumSize(QtCore.QSize(80,0))
+ self.label.setObjectName("label")
+ self.gridlayout2.addWidget(self.label,0,0,1,1)
self.cb_doc_set = QtGui.QComboBox(self.gridLayout_2)
self.cb_doc_set.setObjectName("cb_doc_set")
self.gridlayout2.addWidget(self.cb_doc_set,2,1,1,1)
- self.cb_doc_element = QtGui.QComboBox(self.gridLayout_2)
- self.cb_doc_element.setObjectName("cb_doc_element")
- self.gridlayout2.addWidget(self.cb_doc_element,3,1,1,1)
+ self.label_7 = QtGui.QLabel(self.gridLayout_2)
+ self.label_7.setObjectName("label_7")
+ self.gridlayout2.addWidget(self.label_7,3,0,1,1)
+
+ self.label_2 = QtGui.QLabel(self.gridLayout_2)
+ self.label_2.setObjectName("label_2")
+ self.gridlayout2.addWidget(self.label_2,1,0,1,1)
+
+ self.label_3 = QtGui.QLabel(self.gridLayout_2)
+ self.label_3.setObjectName("label_3")
+ self.gridlayout2.addWidget(self.label_3,2,0,1,1)
+
+ self.cb_doc_age = QtGui.QComboBox(self.gridLayout_2)
+ self.cb_doc_age.setObjectName("cb_doc_age")
+ self.gridlayout2.addWidget(self.cb_doc_age,1,1,1,1)
+
+ self.pb_doc_loadjournals = QtGui.QPushButton(self.gridLayout_2)
+ self.pb_doc_loadjournals.setMinimumSize(QtCore.QSize(0,22))
+ self.pb_doc_loadjournals.setMaximumSize(QtCore.QSize(16777215,22))
+ self.pb_doc_loadjournals.setObjectName("pb_doc_loadjournals")
+ self.gridlayout2.addWidget(self.pb_doc_loadjournals,0,2,1,1)
+
+ self.lb_doc_status = QtGui.QLabel(self.gridLayout_2)
+ self.lb_doc_status.setAlignment(QtCore.Qt.AlignHCenter|QtCore.Qt.AlignTop)
+ self.lb_doc_status.setObjectName("lb_doc_status")
+ self.gridlayout2.addWidget(self.lb_doc_status,1,2,2,1)
+
+ self.te_doc_view = QtGui.QTextEdit(self.gb_documents)
+ self.te_doc_view.setGeometry(QtCore.QRect(10,140,431,221))
+ self.te_doc_view.setReadOnly(True)
+ self.te_doc_view.setObjectName("te_doc_view")
self.tabWidget.addTab(self.tab_sub_journals,"")
self.tabwidget.addTab(self.tab_browse,"")
@@ -952,9 +963,9 @@
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
- self.tabwidget.setCurrentIndex(0)
+ self.tabwidget.setCurrentIndex(4)
self.tab_sub_settings.setCurrentIndex(0)
- self.tabWidget.setCurrentIndex(0)
+ self.tabWidget.setCurrentIndex(1)
self.tabwidget_about.setCurrentIndex(0)
QtCore.QObject.connect(self.main_buttonbox,QtCore.SIGNAL("rejected()"),MainWindow.close)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
@@ -1032,10 +1043,12 @@
self.groupBox_5.setTitle(QtGui.QApplication.translate("MainWindow", "Read chatlogs", None, QtGui.QApplication.UnicodeUTF8))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_sub_chatlogs), QtGui.QApplication.translate("MainWindow", "Chat logs", None, QtGui.QApplication.UnicodeUTF8))
self.gb_documents.setTitle(QtGui.QApplication.translate("MainWindow", "Browse journals and notes", None, QtGui.QApplication.UnicodeUTF8))
+ self.label.setText(QtGui.QApplication.translate("MainWindow", "Language", None, QtGui.QApplication.UnicodeUTF8))
+ self.label_7.setText(QtGui.QApplication.translate("MainWindow", "Element", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("MainWindow", "Age", None, QtGui.QApplication.UnicodeUTF8))
- self.label_7.setText(QtGui.QApplication.translate("MainWindow", "Element", None, QtGui.QApplication.UnicodeUTF8))
- self.label.setText(QtGui.QApplication.translate("MainWindow", "Language", None, QtGui.QApplication.UnicodeUTF8))
self.label_3.setText(QtGui.QApplication.translate("MainWindow", "Set", None, QtGui.QApplication.UnicodeUTF8))
+ self.pb_doc_loadjournals.setText(QtGui.QApplication.translate("MainWindow", "Load journals", None, QtGui.QApplication.UnicodeUTF8))
+ self.lb_doc_status.setText(QtGui.QApplication.translate("MainWindow", "TextLabel", None, QtGui.QApplication.UnicodeUTF8))
self.tabWidget.setTabText(self.tabWidget.indexOf(self.tab_sub_journals), QtGui.QApplication.translate("MainWindow", "Journals", None, QtGui.QApplication.UnicodeUTF8))
self.tabwidget.setTabText(self.tabwidget.indexOf(self.tab_browse), QtGui.QApplication.translate("MainWindow", "Browse", None, QtGui.QApplication.UnicodeUTF8))
self.label_6.setText(QtGui.QApplication.translate("MainWindow", "Tool for Myst Online : Uru Live\n"
Modified: pymoul/trunk/src/moul/qt/ui/mainwindow.ui
===================================================================
--- pymoul/trunk/src/moul/qt/ui/mainwindow.ui 2007-02-02 21:05:40 UTC (rev 127)
+++ pymoul/trunk/src/moul/qt/ui/mainwindow.ui 2007-02-03 02:12:36 UTC (rev 128)
@@ -156,7 +156,7 @@
<enum>QTabWidget::North</enum>
</property>
<property name="currentIndex" >
- <number>0</number>
+ <number>4</number>
</property>
<widget class="QWidget" name="tab_tasks" >
<attribute name="title" >
@@ -1751,7 +1751,7 @@
</rect>
</property>
<property name="currentIndex" >
- <number>0</number>
+ <number>1</number>
</property>
<widget class="QWidget" name="tab_sub_chatlogs" >
<attribute name="title" >
@@ -1821,26 +1821,13 @@
<property name="title" >
<string>Browse journals and notes</string>
</property>
- <widget class="QTextEdit" name="te_doc_view" >
- <property name="geometry" >
- <rect>
- <x>10</x>
- <y>130</y>
- <width>431</width>
- <height>231</height>
- </rect>
- </property>
- <property name="readOnly" >
- <bool>true</bool>
- </property>
- </widget>
<widget class="QWidget" name="gridLayout_2" >
<property name="geometry" >
<rect>
<x>10</x>
<y>20</y>
- <width>291</width>
- <height>108</height>
+ <width>431</width>
+ <height>113</height>
</rect>
</property>
<layout class="QGridLayout" >
@@ -1850,17 +1837,18 @@
<property name="spacing" >
<number>6</number>
</property>
- <item row="1" column="0" >
- <widget class="QLabel" name="label_2" >
- <property name="text" >
- <string>Age</string>
- </property>
- </widget>
+ <item row="3" column="1" >
+ <widget class="QComboBox" name="cb_doc_element" />
</item>
- <item row="3" column="0" >
- <widget class="QLabel" name="label_7" >
- <property name="text" >
- <string>Element</string>
+ <item row="0" column="1" >
+ <widget class="QComboBox" name="cb_doc_language" >
+ <property name="sizePolicy" >
+ <sizepolicy>
+ <hsizetype>7</hsizetype>
+ <vsizetype>0</vsizetype>
+ <horstretch>0</horstretch>
+ <verstretch>0</verstretch>
+ </sizepolicy>
</property>
</widget>
</item>
@@ -1877,6 +1865,23 @@
</property>
</widget>
</item>
+ <item row="2" column="1" >
+ <widget class="QComboBox" name="cb_doc_set" />
+ </item>
+ <item row="3" column="0" >
+ <widget class="QLabel" name="label_7" >
+ <property name="text" >
+ <string>Element</string>
+ </property>
+ </widget>
+ </item>
+ <item row="1" column="0" >
+ <widget class="QLabel" name="label_2" >
+ <property name="text" >
+ <string>Age</string>
+ </property>
+ </widget>
+ </item>
<item row="2" column="0" >
<widget class="QLabel" name="label_3" >
<property name="text" >
@@ -1884,29 +1889,53 @@
</property>
</widget>
</item>
- <item row="0" column="1" >
- <widget class="QComboBox" name="cb_doc_language" >
- <property name="sizePolicy" >
- <sizepolicy>
- <hsizetype>7</hsizetype>
- <vsizetype>0</vsizetype>
- <horstretch>0</horstretch>
- <verstretch>0</verstretch>
- </sizepolicy>
- </property>
- </widget>
- </item>
<item row="1" column="1" >
<widget class="QComboBox" name="cb_doc_age" />
</item>
- <item row="2" column="1" >
- <widget class="QComboBox" name="cb_doc_set" />
+ <item row="0" column="2" >
+ <widget class="QPushButton" name="pb_doc_loadjournals" >
+ <property name="minimumSize" >
+ <size>
+ <width>0</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="maximumSize" >
+ <size>
+ <width>16777215</width>
+ <height>22</height>
+ </size>
+ </property>
+ <property name="text" >
+ <string>Load journals</string>
+ </property>
+ </widget>
</item>
- <item row="3" column="1" >
- <widget class="QComboBox" name="cb_doc_element" />
+ <item rowspan="2" row="1" column="2" >
+ <widget class="QLabel" name="lb_doc_status" >
+ <property name="text" >
+ <string>TextLabel</string>
+ </property>
+ <property name="alignment" >
+ <set>Qt::AlignHCenter|Qt::AlignTop</set>
+ </property>
+ </widget>
</item>
</layout>
</widget>
+ <widget class="QTextEdit" name="te_doc_view" >
+ <property name="geometry" >
+ <rect>
+ <x>10</x>
+ <y>140</y>
+ <width>431</width>
+ <height>221</height>
+ </rect>
+ </property>
+ <property name="readOnly" >
+ <bool>true</bool>
+ </property>
+ </widget>
</widget>
</widget>
</widget>
Modified: pymoul/trunk/src/moul/qt/ui/simpleprogressbar.py
===================================================================
--- pymoul/trunk/src/moul/qt/ui/simpleprogressbar.py 2007-02-02 21:05:40 UTC (rev 127)
+++ pymoul/trunk/src/moul/qt/ui/simpleprogressbar.py 2007-02-03 02:12:36 UTC (rev 128)
@@ -2,7 +2,7 @@
# Form implementation generated from reading ui file './src/moul/qt/ui/simpleprogressbar.ui'
#
-# Created: Fri Feb 2 18:43:31 2007
+# Created: Sat Feb 3 03:07:49 2007
# by: PyQt4 UI code generator 4.1.1
#
# WARNING! All changes made in this file will be lost!
@@ -13,6 +13,7 @@
class Ui_SimpleProgressbar(object):
def setupUi(self, SimpleProgressbar):
SimpleProgressbar.setObjectName("SimpleProgressbar")
+ SimpleProgressbar.setWindowModality(QtCore.Qt.ApplicationModal)
SimpleProgressbar.resize(QtCore.QSize(QtCore.QRect(0,0,203,38).size()).expandedTo(SimpleProgressbar.minimumSizeHint()))
SimpleProgressbar.setMinimumSize(QtCore.QSize(203,38))
SimpleProgressbar.setMaximumSize(QtCore.QSize(203,38))
Modified: pymoul/trunk/src/moul/qt/ui/simpleprogressbar.ui
===================================================================
--- pymoul/trunk/src/moul/qt/ui/simpleprogressbar.ui 2007-02-02 21:05:40 UTC (rev 127)
+++ pymoul/trunk/src/moul/qt/ui/simpleprogressbar.ui 2007-02-03 02:12:36 UTC (rev 128)
@@ -1,6 +1,9 @@
<ui version="4.0" >
<class>SimpleProgressbar</class>
<widget class="QDialog" name="SimpleProgressbar" >
+ <property name="windowModality" >
+ <enum>Qt::ApplicationModal</enum>
+ </property>
<property name="geometry" >
<rect>
<x>0</x>
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-02 21:05:51
|
Revision: 127
http://pymoul.svn.sourceforge.net/pymoul/?rev=127&view=rev
Author: tiran
Date: 2007-02-02 13:05:40 -0800 (Fri, 02 Feb 2007)
Log Message:
-----------
Progress bar for LOC loader
Modified Paths:
--------------
pymoul/trunk/src/moul/file/directory.py
pymoul/trunk/src/moul/file/localization.py
pymoul/trunk/src/moul/file/tests/test_localization.py
pymoul/trunk/src/moul/log.py
pymoul/trunk/src/moul/qt/localization.py
pymoul/trunk/src/moul/qt/mainwindow.py
Modified: pymoul/trunk/src/moul/file/directory.py
===================================================================
--- pymoul/trunk/src/moul/file/directory.py 2007-02-02 18:11:58 UTC (rev 126)
+++ pymoul/trunk/src/moul/file/directory.py 2007-02-02 21:05:40 UTC (rev 127)
@@ -26,7 +26,7 @@
from moul.file.chatlog import ChatlogDirectoryView
from moul.file.chatlog import ChatlogMover
from moul.file.kiimage import KIImageFixer
-from moul.file.localization import parseLocDirectory
+from moul.file.localization import LocDirParser
from moul.file.plasmalog import PlasmalogZipper
from moul.file.wdysini import AudioIni
from moul.file.wdysini import GraphicsIni
@@ -147,7 +147,7 @@
'video' : 'avi',
}
_factories = {
- 'loc' : (parseLocDirectory, ('loc',)),
+ 'loc' : (LocDirParser, ('loc',)),
}
class UruPersonalDataDirectory(AbstractUruDirectory):
Modified: pymoul/trunk/src/moul/file/localization.py
===================================================================
--- pymoul/trunk/src/moul/file/localization.py 2007-02-02 18:11:58 UTC (rev 126)
+++ pymoul/trunk/src/moul/file/localization.py 2007-02-02 21:05:40 UTC (rev 127)
@@ -121,7 +121,6 @@
dset = dage.setdefault(setname, {})
dset[element] = key
-
class Translation(unicode):
"""Translation object
@@ -168,6 +167,7 @@
def __init__(self, fname=''):
self._fname = fname
+ self.translations = []
def startDocument(self):
self._age = None
@@ -202,70 +202,101 @@
elif name == u"element":
self._element = None
elif name == u"translation":
- content = self._content
- content = u''.join(content)
- tl = Translation(age = self._age,
- set = self._set,
- element = self._element,
- language = self._language,
- content = content,
- fname = self._fname)
- registerTranslation(tl)
+ self.translationFound()
self._language = None
self._content = []
+ def translationFound(self):
+ """</translation> handler
+ """
+ content = u''.join(self._content)
+ tl = Translation(age = self._age,
+ set = self._set,
+ element = self._element,
+ language = self._language,
+ content = content,
+ fname = self._fname)
+ self.translations.append(tl)
-def parseLoc(fd, fname=''):
- """Parse a loc file
+class LocDirParser(object):
+ """Parse translation LOC files
"""
- parser = make_parser()
- parser.setFeature(feature_namespaces, False)
- dh = MoulLocHandler(fname=fname)
- parser.setContentHandler(dh)
- parser.parse(fd)
+ contentHandler = MoulLocHandler
+
+ def __init__(self, srcdir, registry=translationRegistry, clear=False):
+ """Constructor
+
+ @param srcdir: directory containing loc files to parse
+ @type srcdir: string
+ @param registry: a translation registry instance
+ @type registry: TranslationRegistry
+ @param clear: clear the registry before parsing files?
+ @type clear: bool
+ """
+ self._srcdir = srcdir
+ self._tr = registry
+ self._locs = None
+ if clear:
+ self._tr.clear()
-def parseLocDirectory(path, clear=False):
- """Parse all loc files in a directory
- """
- files = []
- errors = []
+ def exists(self):
+ """Test if directory exists
+ """
+ return os.path.isdir(self._srcdir)
- if clear:
- translationRegistry.clear()
+ def parseLoc(self, fd, fname=''):
+ """Parse a loc file
+
+ @param fd: file to handler
+ @type fd: file descriptor
+ @param fname: file name
+ @type fname: str
+ @return: a list of translations
+ @rtype: list
+ """
+ parser = make_parser()
+ parser.setFeature(feature_namespaces, False)
+ ch = self.contentHandler(fname=fname)
+ parser.setContentHandler(ch)
+ parser.parse(fd)
+ return ch.translations
- if not os.path.isdir(path):
- raise IOError("invalid path %s" % path)
+ def findLocs(self):
+ """Find loc files in the directory
+ """
+ if self._locs is not None:
+ LOG.info("findLocs() called twice")
+ return
- globpat = os.path.join(path, '*.loc')
- locs = glob.glob(globpat)
+ if not os.path.isdir(self._srcdir):
+ LOG.warning("%s is not a directory" % self._srcdir)
+ return False
- if not locs:
- raise ValueError("no localizations found in %s" % path)
+ globpat = os.path.join(self._srcdir, '*.loc')
+ locs = glob.glob(globpat)
+ self._locs = locs
+ return locs
+
+ def parseLocDir(self):
+ """Parse all loc files at once
+ """
+ if self._loc is None:
+ self.findLocs()
+ for loc in iter(self):
+ pass
- for loc in locs:
- fname = os.path.basename(loc)
- if not os.access(loc, os.R_OK):
- errors.append(fname)
- LOG.debug("parseLogDirectory: unable to read file %s" % loc)
- continue
- with open(loc, 'r') as fd:
- parseLoc(fd, fname=fname)
- files.append(fname)
-
- return {'files' : files, 'errors' : errors }
-
-def _test(path="D:/games/MystOnline/dat", out=False):
- from pprint import pprint
- files, errors = parseLocDirectory(path, clear=True)
- if out:
- print errors
- tr = translationRegistry
- print tr.languages()
- print tr.ages()
- print tr.sets()
- print tr.elements()
- pprint(tr.tree())
-
-if __name__ == '__main__':
- _test(out=True)
+ def __len__(self):
+ """len() support
+ """
+ return len(self._locs)
+
+ def __iter__(self):
+ """Iterator support for GUI progress bar
+ """
+ for loc in self._locs:
+ with open(loc, 'r') as fd:
+ yield loc
+ translations = self.parseLoc(fd, loc)
+ for tl in translations:
+ self._tr.register(tl)
Modified: pymoul/trunk/src/moul/file/tests/test_localization.py
===================================================================
--- pymoul/trunk/src/moul/file/tests/test_localization.py 2007-02-02 18:11:58 UTC (rev 126)
+++ pymoul/trunk/src/moul/file/tests/test_localization.py 2007-02-02 21:05:40 UTC (rev 127)
@@ -25,8 +25,7 @@
import unittest
from doctest import DocTestSuite
-from moul.file.localization import parseLoc
-from moul.file.localization import parseLocDirectory
+from moul.file.localization import LocDirParser
from moul.file.localization import translationRegistry
@@ -41,17 +40,12 @@
pass
def test_parseLocDir(self):
- parseLocDirectory(base)
+ ldp = LocDirParser(base)
+ ldp.parseLocDir()
key = (u'english', u'testage', u'testset', u'testelement')
self.failUnless(key in translationRegistry, translationRegistry.keys())
self.failUnlessEqual(len(translationRegistry), 1)
- def test_parseLoc(self):
- parseLoc(os.path.join(base, 'test.loc'))
- key = (u'english', u'testage', u'testset', u'testelement')
- self.failUnless(key in translationRegistry, translationRegistry.keys())
- self.failUnlessEqual(len(translationRegistry), 1)
-
def test_suite():
return unittest.TestSuite((
unittest.makeSuite(LocalizationTest),
Modified: pymoul/trunk/src/moul/log.py
===================================================================
--- pymoul/trunk/src/moul/log.py 2007-02-02 18:11:58 UTC (rev 126)
+++ pymoul/trunk/src/moul/log.py 2007-02-02 21:05:40 UTC (rev 127)
@@ -17,6 +17,8 @@
#
"""pyMoul logger
"""
+from __future__ import absolute_import
+
__author__ = "Christian Heimes"
__version__ = "$Id$"
__revision__ = "$Revision$"
@@ -27,6 +29,7 @@
import os
import platform
import sys
+import time # absolute import!
from logging import Formatter
from logging import handlers
@@ -39,7 +42,7 @@
format = Formatter('%(asctime)s %(name)-8s %(levelname)-7s %(message)s',
#'%a, %d %b %Y %H:%M:%S'
- '%m-%d %H:%M:%S')
+ '%H:%M:%S')
root = getLogger()
root.setLevel(logging.DEBUG)
LOG = getLogger('pyMoul')
@@ -94,6 +97,7 @@
def _systemInfo():
from moul.osdependent import __INFO__
+ LOG.info("time: " + time.strftime("%a, %d %b %Y %H:%M:%S +0000", time.gmtime()))
LOG.info("pyMoul version: %s" % moul_version)
LOG.info("Python: %s" % repr(sys.version_info))
LOG.info("Python: %s" % sys.version.replace('\n', ' '))
@@ -113,7 +117,7 @@
shdlr = logging.StreamHandler(sys.stderr)
shdlr.setFormatter(format)
root.addHandler(shdlr)
- #_systemInfo()
+ _systemInfo()
else:
_installMemoryHdlr()
_systemInfo()
Modified: pymoul/trunk/src/moul/qt/localization.py
===================================================================
--- pymoul/trunk/src/moul/qt/localization.py 2007-02-02 18:11:58 UTC (rev 126)
+++ pymoul/trunk/src/moul/qt/localization.py 2007-02-02 21:05:40 UTC (rev 127)
@@ -30,14 +30,12 @@
from PyQt4.QtCore import SIGNAL
from PyQt4.QtCore import pyqtSignature
-from moul.config import lookupDir
-from moul.file.directory import UruGameDataDirectory
from moul.file.localization import translationRegistry as tr
from moul.log import getLogger
from moul.log import signalLogDecorator
from moul.qt.simpleprogressbar import SimpleProgressbar
-from moul.qt.threadlet import Threadlet
+from moul.qt.threadlet import YieldingThreadlet
LOG = getLogger('moul.loc')
@@ -76,22 +74,28 @@
if self._journals_loaded:
return
- # TODO: other message box
+ ldh = self.urugamedir.factory('loc')
+ if not ldh.exists():
+ self.tab_sub_journals.setEnabled(False)
+ # TODO: message
+ return
+
+ ldh.findLocs()
+ if not len(ldh):
+ # TODO: message
+ return
+
self._journal_progressbar = SimpleProgressbar(self)
self._journal_progressbar.setWindowTitle(self.trUtf8("Loading journals"))
- self._journal_progressbar.setProgressbar(0, 1, 0)
+ self._journal_progressbar.setProgressbar(0, len(ldh), 0)
self._journal_progressbar.show()
- installDir = lookupDir('install')
- self._gamedir = UruGameDataDirectory(installDir)
- if not self._gamedir.exists('loc'):
- self.tab_sub_journals.setEnabled(False)
- return
-
- self._journal_threadlet = Threadlet()
+ self._journal_threadlet = YieldingThreadlet(self)
self.connect(self._journal_threadlet, SIGNAL('finished()'),
self.on_localization_loaded)
- self._journal_threadlet.detach(self._gamedir.factory, 'loc')
+ self.connect(self._journal_threadlet, SIGNAL("yield(const QString&)"),
+ self._journal_progressbar.increase)
+ self._journal_threadlet.detach(ldh)
@signalLogDecorator(LOG)
def on_localization_loaded(self):
@@ -100,11 +104,12 @@
"""
# remove thread
self.disconnect(self._journal_threadlet, SIGNAL('finished()'),
- self.on_localization_loaded)
+ self.on_localization_loaded)
+ self.disconnect(self._journal_threadlet, SIGNAL("yield(const QString&)"),
+ self._journal_progressbar.increase)
del self._journal_threadlet
# close and remove info message box
- self._journal_progressbar.setValue(1)
self._journal_progressbar.close()
del self._journal_progressbar
self._journals_loaded = True
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-02 18:11:58 UTC (rev 126)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-02 21:05:40 UTC (rev 127)
@@ -20,6 +20,10 @@
"""
from __future__ import with_statement
+__author__ = "Christian Heimes"
+__version__ = "$Id$"
+__revision__ = "$Revision$"
+
import sys
from PyQt4 import QtCore
from PyQt4 import QtGui
@@ -31,8 +35,6 @@
from moul.config import lookupDir
from moul.file.directory import UruGameDataDirectory
from moul.file.directory import UruPersonalDataDirectory
-from moul.file.wdysini import AudioIni
-from moul.file.wdysini import GraphicsIni
from moul.file.wdysini import videoModes
from moul.log import getLogger
from moul.log import signalLogDecorator
@@ -46,16 +48,7 @@
from moul.qt.threadlet import YieldingThreadlet
from moul.qt.ui.mainwindow import Ui_MainWindow
-__author__ = "Christian Heimes"
-__version__ = "$Id$"
-__revision__ = "$Revision$"
-
-
-
-# TBR
-
-
LOG = getLogger('moul.qt')
class MainWindow(QtGui.QMainWindow, Ui_MainWindow, LocalizationMixin):
@@ -76,9 +69,9 @@
# set directory handlers
self.urugamedir = UruGameDataDirectory(lookupDir('install'))
- self.urudatadir = UruPersonalDataDirectory(lookupDir('userdata'))
+ self.urupersonaldir = UruPersonalDataDirectory(lookupDir('userdata'))
# TODO: checks
- self.urudatadir.initializeFactories()
+ self.urupersonaldir.initializeFactories()
# init handlers
self._timezone_init()
@@ -188,7 +181,7 @@
"""
Clicked repair button
"""
- kimover = self.urudatadir.kiimages
+ kimover = self.urupersonaldir.kiimages
if not kimover.findFiles():
# TODO: msg
return
@@ -217,7 +210,7 @@
self._kiimage_progressbar.increase)
self.disconnect(self._kiimage_threadlet, SIGNAL("finished()"),
self.on_pb_kiimage_repair_done)
- del self._kiimage_threadlet
+ del self._kiimage_threadlet# TODO: other message box
del self._kiimage_progressbar
self.pb_kiimage_repair.setEnabled(True)
# TODO: msg
@@ -245,8 +238,7 @@
"""
@qtslot graphicsini_loaded(): notify when a graphics.ini is loaded
"""
- inipath = lookupDir('ini')
- self._graphics_ini = gini = GraphicsIni(inipath)
+ gini = self.urupersonaldir.graphicsini
try:
gini.read()
except Exception, msg:
@@ -262,7 +254,7 @@
"""
SIGNAL graphicsini_reset()
"""
- self._graphics_ini.reset()
+ self.urupersonaldir.graphicsini.reset()
self._graphicsini_setstate()
@signalLogDecorator(LOG)
@@ -271,14 +263,14 @@
SIGNAL graphicsini_save()
"""
#self._notimplemented()
- self._graphics_ini.write()
+ self.urupersonaldir.graphicsini.write()
self.setDirty(False)
def _graphicsini_setstate(self):
"""
Set sliders according to graphics ini settings
"""
- gini = self._graphics_ini
+ gini = self.urupersonaldir.graphicsini
length = len(videoModes) - 1
self.sl_gra_screenres.setMaximum(length)
@@ -301,7 +293,7 @@
# XXX: fixme
txt = videoModes.getVidModeHuman(idx)
self.lb_screenres.setText(QtCore.QString(txt))
- self._graphics_ini.screenres = idx
+ self.urupersonaldir.graphicsini.screenres = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
@@ -318,7 +310,7 @@
"""
SIGNAL: valueChanged (int)
"""
- self._graphics_ini.quality = idx
+ self.urupersonaldir.graphicsini.quality = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
@@ -326,7 +318,7 @@
"""
SIGNAL: valueChanged (int)
"""
- self._graphics_ini.texture = idx
+ self.urupersonaldir.graphicsini.texture = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
@@ -334,7 +326,7 @@
"""
SIGNAL: valueChanged (int)
"""
- self._graphics_ini.antialias = idx
+ self.urupersonaldir.graphicsini.antialias = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
@@ -342,7 +334,7 @@
"""
SIGNAL: valueChanged (int)
"""
- self._graphics_ini.anisotropic = idx
+ self.urupersonaldir.graphicsini.anisotropic = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
@@ -350,7 +342,7 @@
"""
SIGNAL: valueChanged (int)
"""
- self._graphics_ini.shadow = idx
+ self.urupersonaldir.graphicsini.shadow = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
@@ -358,7 +350,7 @@
"""
SIGNAL: stateChanged(int)
"""
- self._graphics_ini.windowed = state
+ self.urupersonaldir.graphicsini.windowed = state
@signalLogDecorator(LOG)
@pyqtSignature("int")
@@ -366,7 +358,7 @@
"""
SIGNAL: stateChanged(int)
"""
- self._graphics_ini.vsync = state
+ self.urupersonaldir.graphicsini.vsync = state
@signalLogDecorator(LOG)
@pyqtSignature("int")
@@ -374,7 +366,7 @@
"""
SIGNAL: stateChanged(int)
"""
- self._graphics_ini.shadow_enabled = state
+ self.urupersonaldir.graphicsini.shadow_enabled = state
# ************************************************************************
# audio settings
@@ -395,8 +387,7 @@
"""
SIGNAL: audioini_loaded()
"""
- inipath = lookupDir('ini')
- self._audio_ini = aini = AudioIni(inipath)
+ aini = self.urupersonaldir.audioini
try:
aini.read()
except Exception, msg:
@@ -412,7 +403,7 @@
"""
SIGNAL audioini_reset()
"""
- self._audio_ini.reset()
+ self.urupersonaldir.audioini.reset()
self._audioini_setstate()
@signalLogDecorator(LOG)
@@ -421,14 +412,14 @@
SIGNAL audioini_save()
"""
#self._notimplemented()
- self._audio_ini.write()
+ self.urupersonaldir.audioini.write()
self.setDirty(False) # urks
def _audioini_setstate(self):
"""
Set sliders according to audio ini settings
"""
- aini = self._audio_ini
+ aini = self.urupersonaldir.audioini
self.sl_aud_device.setMaximum(aini.numberOfDevices()-1)
self.sl_aud_npc.setValue(aini.npc)
@@ -444,55 +435,55 @@
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_device_valueChanged(self, idx):
- self._audio_ini.device = idx
- txt = self._audio_ini.getDeviceName(idx)
+ self.urupersonaldir.audioini.device = idx
+ txt = self.urupersonaldir.audioini.getDeviceName(idx)
self.lb_aud_device.setText(QtCore.QString(txt[1:-1]))
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_device_sliderMoved(self, idx):
- txt = self._audio_ini.getDeviceName(idx)
+ txt = self.urupersonaldir.audioini.getDeviceName(idx)
self.lb_aud_device.setText(QtCore.QString(txt[1:-1]))
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_npc_valueChanged(self, idx):
- self._audio_ini.npc = idx
+ self.urupersonaldir.audioini.npc = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_music_valueChanged(self, idx):
- self._audio_ini.music = idx
+ self.urupersonaldir.audioini.music = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_fx_valueChanged(self, idx):
- self._audio_ini.fx = idx
+ self.urupersonaldir.audioini.fx = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_ambience_valueChanged(self, idx):
- self._audio_ini.ambience = idx
+ self.urupersonaldir.audioini.ambience = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_sl_aud_priority_valueChanged(self, idx):
- self._audio_ini.priority = idx
+ self.urupersonaldir.audioini.priority = idx
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_eax_stateChanged (self, state):
- self._audio_ini.eax = state
+ self.urupersonaldir.audioini.eax = state
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_mute_stateChanged (self, state):
- self._audio_ini.mute = state
+ self.urupersonaldir.audioini.mute = state
@signalLogDecorator(LOG)
@pyqtSignature("int")
def on_cb_aud_voicechat_stateChanged (self, state):
- self._audio_ini.voicechat = state
+ self.urupersonaldir.audioini.voicechat = state
# ************************************************************************
# time zones
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-02 18:11:59
|
Revision: 126
http://pymoul.svn.sourceforge.net/pymoul/?rev=126&view=rev
Author: tiran
Date: 2007-02-02 10:11:58 -0800 (Fri, 02 Feb 2007)
Log Message:
-----------
More fixes for windows and sys.frozen apps
Modified Paths:
--------------
pymoul/trunk/src/moul/qt/errorhandler.py
pymoul/trunk/src/moul/qt/mainwindow.py
Modified: pymoul/trunk/src/moul/qt/errorhandler.py
===================================================================
--- pymoul/trunk/src/moul/qt/errorhandler.py 2007-02-02 17:59:04 UTC (rev 125)
+++ pymoul/trunk/src/moul/qt/errorhandler.py 2007-02-02 18:11:58 UTC (rev 126)
@@ -45,7 +45,8 @@
"""
# TODO: translation aware
LOG.critical("UNHANDLED ERROR", exc_info=(typ, value, traceback))
- return # XXX: remove
+ if not getattr(sys, 'frozen', False):
+ return
try:
title= QtGui.QApplication.translate("excepthook",
"An unhandled error has occured",
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-02 17:59:04 UTC (rev 125)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-02 18:11:58 UTC (rev 126)
@@ -619,14 +619,14 @@
dns = server.dns()
if isSocketError(dns):
self.emit(SIGNAL("dnserror(const QString&, int, const QString&)"),
- name, dns[0], dns[1])
+ name, dns.args[0], dns.args[1])
continue
self.emit(SIGNAL("dns(const QString&, float)"), name, dns)
ping = server.portping()
if isSocketError(ping):
self.emit(SIGNAL("pingerror(const QString&, int, const QString&)"),
- name, ping[0], (len(ping) == 2) and ping[1] or "unknown")
+ name, ping.args[0], ping.args[1])
continue
self.emit(SIGNAL("ping(const QString&, float)"), name, ping)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <ti...@us...> - 2007-02-02 17:59:03
|
Revision: 125
http://pymoul.svn.sourceforge.net/pymoul/?rev=125&view=rev
Author: tiran
Date: 2007-02-02 09:59:04 -0800 (Fri, 02 Feb 2007)
Log Message:
-----------
Fixes for windows issues
Modified Paths:
--------------
pymoul/trunk/src/moul/osdependent/__init__.py
pymoul/trunk/src/moul/osdependent/processinfo.py
pymoul/trunk/src/moul/qt/mainwindow.py
Modified: pymoul/trunk/src/moul/osdependent/__init__.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/__init__.py 2007-02-02 17:45:42 UTC (rev 124)
+++ pymoul/trunk/src/moul/osdependent/__init__.py 2007-02-02 17:59:04 UTC (rev 125)
@@ -33,11 +33,11 @@
__version__ = "$Id$"
__revision__ = "$Revision$"
+from logging import getLogger
import os
import sys
from types import ModuleType
-from moul.log import getLogger
from moul.osdependent.processinfo import getPidNames
from moul.osdependent.processinfo import getPids
Modified: pymoul/trunk/src/moul/osdependent/processinfo.py
===================================================================
--- pymoul/trunk/src/moul/osdependent/processinfo.py 2007-02-02 17:45:42 UTC (rev 124)
+++ pymoul/trunk/src/moul/osdependent/processinfo.py 2007-02-02 17:59:04 UTC (rev 125)
@@ -51,7 +51,11 @@
import os
import sys
+from logging import getLogger
+
+LOG = getLogger("processinfo")
+
_plat = sys.platform.startswith
if _plat('linux'):
PLAT = 'linux'
@@ -195,7 +199,10 @@
sizeof(hModule), byref(count))
PSAPI.GetModuleBaseNameA(hProcess, hModule.value, modname,
sizeof(modname))
- name = u"".join([c for c in modname if c != NULL])
+ try:
+ name = u"".join([c for c in modname if c != NULL])
+ except UnicodeError, msg:
+ LOG.exception("Can't decode name of pid %i" % pid)
modname[:] = sizeof(modname) * NULL
KERNEL.CloseHandle(hProcess)
mapping[pid] = name
Modified: pymoul/trunk/src/moul/qt/mainwindow.py
===================================================================
--- pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-02 17:45:42 UTC (rev 124)
+++ pymoul/trunk/src/moul/qt/mainwindow.py 2007-02-02 17:59:04 UTC (rev 125)
@@ -626,7 +626,7 @@
ping = server.portping()
if isSocketError(ping):
self.emit(SIGNAL("pingerror(const QString&, int, const QString&)"),
- name, ping[0], ping[1])
+ name, ping[0], (len(ping) == 2) and ping[1] or "unknown")
continue
self.emit(SIGNAL("ping(const QString&, float)"), name, ping)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|