##// END OF EJS Templates
* Fleshed out IPythonWidget's style control....
epatters -
Show More
@@ -576,15 +576,15 b' class ConsoleWidget(QtGui.QPlainTextEdit):'
576 576 if self.gui_completion:
577 577 self._completion_widget.show_items(cursor, items)
578 578 else:
579 text = self.format_as_columns(items)
579 text = self._format_as_columns(items)
580 580 self._append_plain_text_keeping_prompt(text)
581 581
582 def format_as_columns(self, items, separator=' '):
582 def _format_as_columns(self, items, separator=' '):
583 583 """ Transform a list of strings into a single string with columns.
584 584
585 585 Parameters
586 586 ----------
587 items : sequence [str]
587 items : sequence of strings
588 588 The strings to process.
589 589
590 590 separator : str, optional [default is two spaces]
@@ -600,10 +600,10 b' class ConsoleWidget(QtGui.QPlainTextEdit):'
600 600 font_metrics = QtGui.QFontMetrics(self.font)
601 601 displaywidth = max(5, (self.width() / font_metrics.width(' ')) - 1)
602 602
603 # Some degenerate cases
603 # Some degenerate cases.
604 604 size = len(items)
605 605 if size == 0:
606 return "\n"
606 return '\n'
607 607 elif size == 1:
608 608 return '%s\n' % str(items[0])
609 609
@@ -643,7 +643,7 b' class ConsoleWidget(QtGui.QPlainTextEdit):'
643 643 del texts[-1]
644 644 for col in range(len(texts)):
645 645 texts[col] = texts[col].ljust(colwidths[col])
646 string += "%s\n" % str(separator.join(texts))
646 string += '%s\n' % str(separator.join(texts))
647 647 return string
648 648
649 649 def _get_block_plain_text(self, block):
@@ -10,7 +10,7 b' class IPythonWidget(FrontendWidget):'
10 10 """ A FrontendWidget for an IPython kernel.
11 11 """
12 12
13 # The default stylesheet for prompts, colors, etc.
13 # The default stylesheet: black text on a white background.
14 14 default_stylesheet = """
15 15 .error { color: red; }
16 16 .in-prompt { color: navy; }
@@ -19,6 +19,17 b' class IPythonWidget(FrontendWidget):'
19 19 .out-prompt-number { font-weight: bold; }
20 20 """
21 21
22 # A dark stylesheet: white text on a black background.
23 dark_stylesheet = """
24 QPlainTextEdit { background-color: black; color: white }
25 QFrame { border: 1px solid grey; }
26 .error { color: red; }
27 .in-prompt { color: lime; }
28 .in-prompt-number { color: lime; font-weight: bold; }
29 .out-prompt { color: red; }
30 .out-prompt-number { color: red; font-weight: bold; }
31 """
32
22 33 #---------------------------------------------------------------------------
23 34 # 'QObject' interface
24 35 #---------------------------------------------------------------------------
@@ -27,34 +38,10 b' class IPythonWidget(FrontendWidget):'
27 38 super(IPythonWidget, self).__init__(parent)
28 39
29 40 # Initialize protected variables.
30 self._magic_overrides = {}
31 41 self._prompt_count = 0
32 42
33 43 # Set a default stylesheet.
34 self.set_style_sheet(self.default_stylesheet)
35
36 #---------------------------------------------------------------------------
37 # 'ConsoleWidget' abstract interface
38 #---------------------------------------------------------------------------
39
40 def _execute(self, source, hidden):
41 """ Reimplemented to override magic commands.
42 """
43 magic_source = source.strip()
44 if magic_source.startswith('%'):
45 magic_source = magic_source[1:]
46 magic, sep, arguments = magic_source.partition(' ')
47 if not magic:
48 magic = magic_source
49
50 callback = self._magic_overrides.get(magic)
51 if callback:
52 output = callback(arguments)
53 if output:
54 self.appendPlainText(output)
55 self._show_interpreter_prompt()
56 else:
57 super(IPythonWidget, self)._execute(source, hidden)
44 self.reset_style_sheet()
58 45
59 46 #---------------------------------------------------------------------------
60 47 # 'FrontendWidget' interface
@@ -119,26 +106,15 b' class IPythonWidget(FrontendWidget):'
119 106 # 'IPythonWidget' interface
120 107 #---------------------------------------------------------------------------
121 108
122 def set_magic_override(self, magic, callback):
123 """ Overrides an IPython magic command. This magic will be intercepted
124 by the frontend rather than passed on to the kernel and 'callback'
125 will be called with a single argument: a string of argument(s) for
126 the magic. The callback can (optionally) return text to print to the
127 console.
109 def reset_style_sheet(self):
110 """ Sets the style sheet to the default style sheet.
128 111 """
129 self._magic_overrides[magic] = callback
130
131 def remove_magic_override(self, magic):
132 """ Removes the override for the specified magic, if there is one.
133 """
134 try:
135 del self._magic_overrides[magic]
136 except KeyError:
137 pass
112 self.set_style_sheet(self.default_stylesheet)
138 113
139 114 def set_style_sheet(self, stylesheet):
140 115 """ Sets the style sheet.
141 116 """
117 self.setStyleSheet(stylesheet)
142 118 self.document().setDefaultStyleSheet(stylesheet)
143 119
144 120
@@ -66,7 +66,7 b" def get_tokens_unprocessed(self, text, stack=('root',)):"
66 66 RegexLexer.get_tokens_unprocessed = get_tokens_unprocessed
67 67
68 68
69 class BlockUserData(QtGui.QTextBlockUserData):
69 class PygmentsBlockUserData(QtGui.QTextBlockUserData):
70 70 """ Storage for the user data associated with each line.
71 71 """
72 72
@@ -81,7 +81,7 b' class BlockUserData(QtGui.QTextBlockUserData):'
81 81 attrs = ['syntax_stack']
82 82 kwds = ', '.join([ '%s=%r' % (attr, getattr(self, attr))
83 83 for attr in attrs ])
84 return 'BlockUserData(%s)' % kwds
84 return 'PygmentsBlockUserData(%s)' % kwds
85 85
86 86
87 87 class PygmentsHighlighter(QtGui.QSyntaxHighlighter):
@@ -117,7 +117,8 b' class PygmentsHighlighter(QtGui.QSyntaxHighlighter):'
117 117 index += l
118 118
119 119 if hasattr(self._lexer, '_saved_state_stack'):
120 data = BlockUserData(syntax_stack=self._lexer._saved_state_stack)
120 data = PygmentsBlockUserData(
121 syntax_stack=self._lexer._saved_state_stack)
121 122 self.currentBlock().setUserData(data)
122 123 # Clean up for the next go-round.
123 124 del self._lexer._saved_state_stack
@@ -174,6 +175,8 b' class PygmentsHighlighter(QtGui.QSyntaxHighlighter):'
174 175 return result
175 176
176 177 def _get_color(self, color):
178 """ Returns a QColor built from a Pygments color string.
179 """
177 180 qcolor = QtGui.QColor()
178 181 qcolor.setRgb(int(color[:2], base=16),
179 182 int(color[2:4], base=16),
General Comments 0
You need to be logged in to leave comments. Login now