class INinjaConsole(plugin.Plugin): def initialize(self): # Init your plugin self.misc_s = self.locator.get_service('misc') explorer_container = self.locator.get_service('explorer') tree = explorer_container.get_tree_projects() kernel_manager = QtInProcessKernelManager() kernel_manager.start_kernel() kernel = kernel_manager.kernel kernel.gui = 'qt4' kernel_client = kernel_manager.client() kernel_client.start_channels() def stop(): kernel_client.stop_channels() kernel_manager.shutdown_kernel() self.ipython_console = RichIPythonWidget() self.ipython_console.kernel_manager = kernel_manager self.ipython_console.kernel_client = kernel_client self.ipython_console.exit_requested.connect(stop) self.ipython_console.show() self.misc_s.add_widget(self.ipython_console, IMAGES["console"], "IPython console") addp = SIGNAL("addProjectToConsole(QString)") delp = SIGNAL("removeProjectFromConsole(QString)") self.connect(tree, addp, self._add_project) self.connect(tree, delp, self._del_project) def _add_project(self, project_path): self.ipython_console.execute("import sys; sys.path += ['%s']" % project_path) def _del_project(self, project_path): """This is ugly, but I was in a hurry and copied form console widget""" self.ipython_console.execute("import sys; " "sys.path = [path for path in sys.path " "if path != '%s']" % project_path) def finish(self): # Shutdown your plugin pass def get_preferences_widget(self): # Return a widget for customize your plugin pass
class ipython_console(base_console, QtGui.QWidget): """ desc: An IPython-based debug window. """ def __init__(self, main_window): """ desc: Constructor. arguments: main_window: The main window object. """ super(ipython_console, self).__init__(main_window) kernel_manager = QtInProcessKernelManager() kernel_manager.start_kernel() self.kernel = kernel_manager.kernel self.kernel.gui = 'qt4' self.kernel.shell.banner1 = '' kernel_client = kernel_manager.client() kernel_client.start_channels() self.control = RichIPythonWidget() self.control.banner = self.banner() self.control.kernel_manager = kernel_manager self.control.kernel_client = kernel_client self.verticalLayout = QtGui.QVBoxLayout(self) self.verticalLayout.setContentsMargins(0,0,0,0) self.setLayout(self.verticalLayout) self.verticalLayout.addWidget(self.control) def clear(self): """See base_console.""" self.control.reset(clear=True) def focus(self): """See base_console.""" self.control._control.setFocus() def reset(self): """See base_console.""" self.kernel.shell.reset() self.kernel.shell.push(self.default_globals()) self.clear() super(ipython_console, self).reset() def show_prompt(self): """See base_console.""" self.control._show_interpreter_prompt() def get_workspace_globals(self): """See base_console.""" return self.kernel.shell.user_global_ns.copy() def set_workspace_globals(self, _globals={}): """See base_console.""" self.kernel.shell.push(_globals) def validTheme(self, cs): """ returns: desc: True if the colorscheme is valid, False otherwise. type: bool """ for key in [ u'Background', u'Default', u'Prompt in', u'Prompt out', u'Comment', u'Keyword', u'Identifier', u'Double-quoted string', u'Invalid', u'Number', u'Operator', ]: if key not in cs: return False return True def setTheme(self): """ desc: Sets the theme, based on the QProgEdit settings. """ from QProgEdit import QColorScheme if not hasattr(QColorScheme, cfg.qProgEditColorScheme): debug.msg(u'Failed to set debug-output colorscheme') return u'' cs = getattr(QColorScheme, cfg.qProgEditColorScheme) if not self.validTheme(cs): debug.msg(u'Invalid debug-output colorscheme') return u'' self.control._highlighter.set_style(pygments_style_factory(cs)) qss = u'''QPlainTextEdit, QTextEdit { background-color: %(Background)s; color: %(Default)s; } .in-prompt { color: %(Prompt in)s; } .in-prompt-number { font-weight: bold; } .out-prompt { color: %(Prompt out)s; } .out-prompt-number { font-weight: bold; } ''' % cs self.control.style_sheet = qss self.control._control.setFont(QtGui.QFont(cfg.qProgEditFontFamily, cfg.qProgEditFontSize)) def setup(self, main_window): """See base_subcomponent.""" super(ipython_console, self).setup(main_window) self.kernel.shell.push(self.default_globals()) def write(self, s): """See base_console.""" self.control._append_plain_text(str(s)) def execute(self, s): """See base_console.""" self.main_window.ui.dock_stdout.setVisible(True) self.control.execute(s) def focusInEvent(self, e): self.control.setFocus() e.accept()