Index: third_party/twisted_8_1/twisted/manhole/ui/pywidgets.py |
diff --git a/third_party/twisted_8_1/twisted/manhole/ui/pywidgets.py b/third_party/twisted_8_1/twisted/manhole/ui/pywidgets.py |
deleted file mode 100644 |
index 5f8a6ab7cf714f78175f68edf20b4656f5ed4058..0000000000000000000000000000000000000000 |
--- a/third_party/twisted_8_1/twisted/manhole/ui/pywidgets.py |
+++ /dev/null |
@@ -1,250 +0,0 @@ |
- |
-# System Imports |
-import code, string, sys, traceback |
-import gtk |
-True = 1 |
-False = 0 |
- |
-# Twisted Imports |
-from twisted.spread.ui import gtkutil |
-from twisted.python import util |
-rcfile = util.sibpath(__file__, 'gtkrc') |
-gtk.rc_parse(rcfile) |
- |
- |
-def isCursorOnFirstLine(entry): |
- firstnewline = string.find(entry.get_chars(0,-1), '\n') |
- if entry.get_point() <= firstnewline or firstnewline == -1: |
- return 1 |
- |
-def isCursorOnLastLine(entry): |
- if entry.get_point() >= string.rfind(string.rstrip(entry.get_chars(0,-1)), '\n'): |
- return 1 |
- |
- |
-class InputText(gtk.GtkText): |
- linemode = 0 |
- blockcount = 0 |
- |
- def __init__(self, toplevel=None): |
- gtk.GtkText.__init__(self) |
- self['name'] = 'Input' |
- self.set_editable(gtk.TRUE) |
- self.connect("key_press_event", self.processKey) |
- #self.set_word_wrap(gtk.TRUE) |
- |
- self.history = [] |
- self.histpos = 0 |
- |
- if toplevel: |
- self.toplevel = toplevel |
- |
- def historyUp(self): |
- if self.histpos > 0: |
- self.histpos = self.histpos - 1 |
- self.delete_text(0, -1) |
- self.insert_defaults(self.history[self.histpos]) |
- self.set_position(0) |
- |
- def historyDown(self): |
- if self.histpos < len(self.history) - 1: |
- self.histpos = self.histpos + 1 |
- self.delete_text(0, -1) |
- self.insert_defaults(self.history[self.histpos]) |
- elif self.histpos == len(self.history) - 1: |
- self.histpos = self.histpos + 1 |
- self.delete_text(0, -1) |
- |
- def processKey(self, entry, event): |
- # TODO: make key bindings easier to customize. |
- |
- stopSignal = False |
- # ASSUMPTION: Assume Meta == mod4 |
- isMeta = event.state & gtk.GDK.MOD4_MASK |
- if event.keyval == gtk.GDK.Return: |
- isShift = event.state & gtk.GDK.SHIFT_MASK |
- if isShift: |
- self.linemode = True |
- self.insert_defaults('\n') |
- else: |
- stopSignal = True |
- text = self.get_chars(0,-1) |
- if not text: return |
- try: |
- if text[0] == '/': |
- # It's a local-command, don't evaluate it as |
- # Python. |
- c = True |
- else: |
- # This will tell us it's a complete expression. |
- c = code.compile_command(text) |
- except SyntaxError, e: |
- # Ding! |
- self.set_positionLineOffset(e.lineno, e.offset) |
- print "offset", e.offset |
- errmsg = {'traceback': [], |
- 'exception': [str(e) + '\n']} |
- self.toplevel.output.console([('exception', errmsg)]) |
- except OverflowError, e: |
- e = traceback.format_exception_only(OverflowError, e) |
- errmsg = {'traceback': [], |
- 'exception': e} |
- self.toplevel.output.console([('exception', errmsg)]) |
- else: |
- if c is None: |
- self.linemode = True |
- stopSignal = False |
- else: |
- self.sendMessage(entry) |
- self.clear() |
- |
- elif ((event.keyval == gtk.GDK.Up and isCursorOnFirstLine(self)) |
- or (isMeta and event.string == 'p')): |
- self.historyUp() |
- stopSignal = True |
- elif ((event.keyval == gtk.GDK.Down and isCursorOnLastLine(self)) |
- or (isMeta and event.string == 'n')): |
- self.historyDown() |
- stopSignal = True |
- |
- if stopSignal: |
- self.emit_stop_by_name("key_press_event") |
- return True |
- |
- def clear(self): |
- self.delete_text(0, -1) |
- self.linemode = False |
- |
- def set_positionLineOffset(self, line, offset): |
- text = self.get_chars(0, -1) |
- pos = 0 |
- for l in xrange(line - 1): |
- pos = string.index(text, '\n', pos) + 1 |
- pos = pos + offset - 1 |
- self.set_position(pos) |
- |
- def sendMessage(self, unused_data=None): |
- text = self.get_chars(0,-1) |
- if self.linemode: |
- self.blockcount = self.blockcount + 1 |
- fmt = ">>> # begin %s\n%%s\n#end %s\n" % ( |
- self.blockcount, self.blockcount) |
- else: |
- fmt = ">>> %s\n" |
- self.history.append(text) |
- self.histpos = len(self.history) |
- self.toplevel.output.console([['command',fmt % text]]) |
- self.toplevel.codeInput(text) |
- |
- |
- def readHistoryFile(self, filename=None): |
- if filename is None: |
- filename = self.historyfile |
- |
- f = open(filename, 'r', 1) |
- self.history.extend(f.readlines()) |
- f.close() |
- self.histpos = len(self.history) |
- |
- def writeHistoryFile(self, filename=None): |
- if filename is None: |
- filename = self.historyfile |
- |
- f = open(filename, 'a', 1) |
- f.writelines(self.history) |
- f.close() |
- |
- |
-class Interaction(gtk.GtkWindow): |
- titleText = "Abstract Python Console" |
- |
- def __init__(self): |
- gtk.GtkWindow.__init__(self, gtk.WINDOW_TOPLEVEL) |
- self.set_title(self.titleText) |
- self.set_default_size(300, 300) |
- self.set_name("Manhole") |
- |
- vbox = gtk.GtkVBox() |
- pane = gtk.GtkVPaned() |
- |
- self.output = OutputConsole(toplevel=self) |
- pane.pack1(gtkutil.scrollify(self.output), gtk.TRUE, gtk.FALSE) |
- |
- self.input = InputText(toplevel=self) |
- pane.pack2(gtkutil.scrollify(self.input), gtk.FALSE, gtk.TRUE) |
- vbox.pack_start(pane, 1,1,0) |
- |
- self.add(vbox) |
- self.input.grab_focus() |
- |
- def codeInput(self, text): |
- raise NotImplementedError("Bleh.") |
- |
- |
-class LocalInteraction(Interaction): |
- titleText = "Local Python Console" |
- def __init__(self): |
- Interaction.__init__(self) |
- self.globalNS = {} |
- self.localNS = {} |
- self.filename = "<gtk console>" |
- |
- def codeInput(self, text): |
- from twisted.manhole.service import runInConsole |
- val = runInConsole(text, self.output.console, |
- self.globalNS, self.localNS, self.filename) |
- if val is not None: |
- self.localNS["_"] = val |
- self.output.console([("result", repr(val) + "\n")]) |
- |
-class OutputConsole(gtk.GtkText): |
- maxBufSz = 10000 |
- |
- def __init__(self, toplevel=None): |
- gtk.GtkText.__init__(self) |
- self['name'] = "Console" |
- gtkutil.defocusify(self) |
- #self.set_word_wrap(gtk.TRUE) |
- |
- if toplevel: |
- self.toplevel = toplevel |
- |
- def console(self, message): |
- self.set_point(self.get_length()) |
- self.freeze() |
- previous_kind = None |
- style = self.get_style() |
- style_cache = {} |
- try: |
- for element in message: |
- if element[0] == 'exception': |
- s = traceback.format_list(element[1]['traceback']) |
- s.extend(element[1]['exception']) |
- s = string.join(s, '') |
- else: |
- s = element[1] |
- |
- if element[0] != previous_kind: |
- style = style_cache.get(element[0], None) |
- if style is None: |
- gtk.rc_parse_string( |
- 'widget \"Manhole.*.Console\" ' |
- 'style \"Console_%s\"\n' |
- % (element[0])) |
- self.set_rc_style() |
- style_cache[element[0]] = style = self.get_style() |
- # XXX: You'd think we'd use style.bg instead of 'None' |
- # here, but that doesn't seem to match the color of |
- # the backdrop. |
- self.insert(style.font, style.fg[gtk.STATE_NORMAL], |
- None, s) |
- previous_kind = element[0] |
- l = self.get_length() |
- diff = self.maxBufSz - l |
- if diff < 0: |
- diff = - diff |
- self.delete_text(0,diff) |
- finally: |
- self.thaw() |
- a = self.get_vadjustment() |
- a.set_value(a.upper - a.page_size) |