Repository URL to install this package:
|
Version:
15.1.0-1 ▾
|
# (c) Copyright 2009-2015. CodeWeavers, Inc.
import code
import sys
import gtk
import gobject
import cxlog
import cxguitools
class CheatConsole(gtk.Window):
def on_keypress(self, _widget, event):
if gtk.gdk.keyval_name(event.keyval) == 'Return':
line = self.input.get_text()
self.input.set_text('')
self.write('>>> %s\n' % line)
self.console.push(line)
return True
return False
def __init__(self):
gtk.Window.__init__(self)
self.vbox = gtk.VBox()
self.add(self.vbox)
self.output = gtk.TextView()
self.vbox.pack_start(self.output, expand=True)
self.output.set_size_request(0, 0) # size is set by parent
self.output.set_wrap_mode(gtk.WRAP_WORD_CHAR)
self.output.set_editable(False)
self.input = gtk.Entry()
self.vbox.pack_start(self.input, expand=False)
self.input.connect('key-press-event', self.on_keypress)
self.console = code.InteractiveConsole()
sys.stdout = self
sys.stderr = self
self.set_title("Cheat console")
self.set_default_size(800, 600)
self.show_all()
self.connect('destroy', self.on_destroy)
def on_destroy(self, _widget):
# pylint: disable=R0201
cxguitools.toplevel_quit()
def scroll_to_end(self):
buf = self.output.get_buffer()
end = buf.get_end_iter()
self.output.scroll_to_iter(end, 0.0)
def write(self, text):
buf = self.output.get_buffer()
end = buf.get_end_iter()
buf.insert(end, text)
gobject.idle_add(self.scroll_to_end)
def show_console():
# pylint: disable=W0601
global console
try:
# pylint: disable=W0104
console
except NameError:
console = CheatConsole()
_CHEAT_SEQUENCE = ('Up', 'Up', 'Down', 'Down', 'Left', 'Right', 'Left', 'Right', 'B', 'A')
_LAST_KEYS = []
# evil hack to get the appropriate keypress events
def _event_handler(event, *_args):
# pylint: disable=W0702
try:
if event.type == gtk.gdk.KEY_PRESS:
_LAST_KEYS.append(gtk.gdk.keyval_name(event.keyval))
while len(_LAST_KEYS) > len(_CHEAT_SEQUENCE):
_LAST_KEYS.pop(0)
if tuple(_LAST_KEYS) == _CHEAT_SEQUENCE:
try:
gobject.idle_add(show_console)
except:
import traceback
traceback.print_exc()
# pylint: disable=W0704
except:
pass
return gtk.main_do_event(event)
try:
gtk.gdk.event_handler_set(_event_handler)
except:
cxlog.log("could not install the gtk event handler")