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&business=chr...@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&business=chr...@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&business=chr...@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. |