Example #1
0
 def mousePressEvent(self, event):
     """
     Re-implemented to handle the mouse press event.
     event: the mouse press event (QMouseEvent)
     """
     if event.button() == Qt.MidButton:
         self.setFocus()
         self.paste()
         event.accept()
     else:
         ConsoleBaseWidget.mousePressEvent(self, event)
Example #2
0
 def mousePressEvent(self, event):
     """
     Re-implemented to handle the mouse press event.
     event: the mouse press event (QMouseEvent)
     """
     if event.button() == Qt.MidButton:
         self.setFocus()
         self.paste()
         event.accept()
     else:
         ConsoleBaseWidget.mousePressEvent(self, event)
Example #3
0
 def mouseMoveEvent(self, event):
     """Show Pointing Hand Cursor on error messages"""
     text = self.get_line_at(event.pos())
     if get_error_match(text):
         if not self.__cursor_changed:
             QApplication.setOverrideCursor(QCursor(Qt.PointingHandCursor))
             self.__cursor_changed = True
         event.accept()
         return
     if self.__cursor_changed:
         QApplication.restoreOverrideCursor()
         self.__cursor_changed = False
     ConsoleBaseWidget.mouseMoveEvent(self, event)
Example #4
0
 def mouseMoveEvent(self, event):
     """Show Pointing Hand Cursor on error messages"""
     text = self.get_line_at(event.pos())
     if get_error_match(text):
         if not self.__cursor_changed:
             QApplication.setOverrideCursor(QCursor(Qt.PointingHandCursor))
             self.__cursor_changed = True
         event.accept()
         return
     if self.__cursor_changed:
         QApplication.restoreOverrideCursor()
         self.__cursor_changed = False
     ConsoleBaseWidget.mouseMoveEvent(self, event)
Example #5
0
 def focusNextPrevChild(self, next):
     """
     Reimplemented to stop Tab moving to the next window
     """
     if next:
         return False
     return ConsoleBaseWidget.focusNextPrevChild(self, next)
Example #6
0
 def focusNextPrevChild(self, next):
     """
     Reimplemented to stop Tab moving to the next window
     """
     if next:
         return False
     return ConsoleBaseWidget.focusNextPrevChild(self, next)
Example #7
0
 def insert_text(self, text, at_end=False, error=False, prompt=False):
     """
     Insert text at the current cursor position
     or at the end of the command line
     """
     if self.isReadOnly():
         return
     if error and text.startswith('  File "<'):
         # Avoid printing 'File <console> [...]' which is related to the
         # code.InteractiveConsole Python interpreter emulation
         return
     if at_end:
         # Insert text at the end of the command line
         self.append_text_to_pythonshell(text, error, prompt)
     else:
         # Insert text at current cursor position
         ConsoleBaseWidget.insert_text(self, text)
Example #8
0
 def insert_text(self, text, at_end=False, error=False, prompt=False):
     """
     Insert text at the current cursor position
     or at the end of the command line
     """
     if self.isReadOnly():
         return
     if error and text.startswith('  File "<'):
         # Avoid printing 'File <console> [...]' which is related to the
         # code.InteractiveConsole Python interpreter emulation
         return
     if at_end:
         # Insert text at the end of the command line
         self.append_text_to_pythonshell(text, error, prompt)
     else:
         # Insert text at current cursor position
         ConsoleBaseWidget.insert_text(self, text)
Example #9
0
    def __init__(self, parent, history_filename, debug=False, profile=False):
        """
        parent : specifies the parent widget
        """
        ConsoleBaseWidget.__init__(self, parent)

        # Prompt position: tuple (line, index)
        self.current_prompt_pos = None
        self.new_input_line = True

        # History
        self.histidx = None
        self.hist_wholeline = False
        assert isinstance(history_filename, (str, unicode))
        self.history_filename = history_filename
        self.history = self.load_history()

        # Session
        self.historylog_filename = CONF.get('main', 'historylog_filename',
                                            get_conf_path('history.log'))

        # Context menu
        self.menu = None
        self.setup_context_menu()

        # Debug mode
        self.debug = debug

        # Simple profiling test
        self.profile = profile

        # write/flush
        self.__buffer = []
        self.__timestamp = 0.0

        # Give focus to widget
        self.setFocus()
Example #10
0
    def __init__(self, parent, history_filename, debug=False, profile=False):
        """
        parent : specifies the parent widget
        """
        ConsoleBaseWidget.__init__(self, parent)
        
        # Prompt position: tuple (line, index)
        self.current_prompt_pos = None
        self.new_input_line = True
        
        # History
        self.histidx = None
        self.hist_wholeline = False
        assert isinstance(history_filename, (str, unicode))
        self.history_filename = history_filename
        self.history = self.load_history()
        
        # Session
        self.historylog_filename = CONF.get('main', 'historylog_filename',
                                            get_conf_path('history.log'))
        
        # Context menu
        self.menu = None
        self.setup_context_menu()

        # Debug mode
        self.debug = debug

        # Simple profiling test
        self.profile = profile
        
        # write/flush
        self.__buffer = []
        self.__timestamp = 0.0

        # Give focus to widget
        self.setFocus()
Example #11
0
    def postprocess_keyevent(self, event):
        """Post-process keypress event:
        in InteractiveShell, this is method is called when shell is ready"""
        event, text, key, ctrl, shift = restore_keyevent(event)

        # Is cursor on the last line? and after prompt?
        if len(text):
            if self.hasSelectedText():
                self.check_selection()
            self.restrict_cursor_position(self.current_prompt_pos, 'eof')

        cursor_position = self.get_position('cursor')

        if key in (Qt.Key_Return, Qt.Key_Enter):
            if self.is_cursor_on_last_line():
                self._key_enter()
            # add and run selection
            else:
                text = self.selectedText()
                self.insert_text(text, at_end=True)
            event.accept()

        elif key == Qt.Key_Delete:
            if self.hasSelectedText():
                self.check_selection()
                self.removeSelectedText()
            elif self.is_cursor_on_last_line():
                self.stdkey_clear()
            event.accept()

        elif key == Qt.Key_Backspace:
            self._key_backspace(cursor_position)
            event.accept()

        elif key == Qt.Key_Tab:
            self._key_tab()
            event.accept()

        elif key == Qt.Key_Left:
            event.accept()
            if self.current_prompt_pos == cursor_position:
                # Avoid moving cursor on prompt
                return
            method = self.extend_selection_to_next if shift \
                     else self.move_cursor_to_next
            method('word' if ctrl else 'character', direction='left')

        elif key == Qt.Key_Right:
            event.accept()
            if self.is_cursor_at_end():
                return
            method = self.extend_selection_to_next if shift \
                     else self.move_cursor_to_next
            method('word' if ctrl else 'character', direction='right')

        elif (key == Qt.Key_Home) or ((key == Qt.Key_Up) and ctrl):
            self._key_home(shift)
            event.accept()

        elif (key == Qt.Key_End) or ((key == Qt.Key_Down) and ctrl):
            self._key_end(shift)
            event.accept()

        elif key == Qt.Key_Up:
            if not self.is_cursor_on_last_line():
                self.set_cursor_position('eof')
            y_cursor = self.get_coordinates(cursor_position)[1]
            y_prompt = self.get_coordinates(self.current_prompt_pos)[1]
            if self.is_completion_widget_visible() or y_cursor > y_prompt:
                self.stdkey_up(shift)
            else:
                self.browse_history(backward=True)
            event.accept()

        elif key == Qt.Key_Down:
            if not self.is_cursor_on_last_line():
                self.set_cursor_position('eof')
            y_cursor = self.get_coordinates(cursor_position)[1]
            y_end = self.get_coordinates('eol')[1]
            if self.is_completion_widget_visible() or y_cursor < y_end:
                self.stdkey_down(shift)
            else:
                self.browse_history(backward=False)
            event.accept()

        elif key in (Qt.Key_PageUp, Qt.Key_PageDown):
            #XXX: Find a way to do this programmatically instead of calling
            # widget keyhandler (this won't work if the *event* is coming from
            # the event queue - i.e. when the busy buffer will be implemented)
            ConsoleBaseWidget.keyPressEvent(self, event)

        elif key == Qt.Key_Escape:
            self._key_escape()
            event.accept()

        elif key == Qt.Key_V and ctrl:
            self.paste()
            event.accept()

        elif key == Qt.Key_X and ctrl:
            self.cut()
            event.accept()

        elif key == Qt.Key_Z and ctrl:
            self.undo()
            event.accept()

        elif key == Qt.Key_Y and ctrl:
            self.redo()
            event.accept()

        elif key == Qt.Key_Question and not self.hasSelectedText():
            self._key_question(text)
            event.accept()

        elif key == Qt.Key_ParenLeft and not self.hasSelectedText():
            self._key_parenleft(text)
            event.accept()

        elif key == Qt.Key_Period and not self.hasSelectedText():
            self._key_period(text)
            event.accept()

        elif ((key == Qt.Key_Plus) and ctrl) \
             or ((key==Qt.Key_Equal) and shift and ctrl):
            self.zoomIn()
            event.accept()

        elif (key == Qt.Key_Minus) and ctrl:
            self.zoomOut()
            event.accept()

        elif text.length():
            self.hist_wholeline = False
            self.insert_text(text)
            self._key_other(text)
            event.accept()

        else:
            # Let the parent widget handle the key press event
            event.ignore()
Example #12
0
 def paste(self):
     """Reimplemented slot to handle multiline paste action"""
     if self.new_input_line:
         self.on_new_line()
     ConsoleBaseWidget.paste(self)
Example #13
0
 def delete(self):
     """Remove selected text"""
     self.check_selection()
     if self.hasSelectedText():
         ConsoleBaseWidget.removeSelectedText(self)
Example #14
0
 def delete(self):
     """Remove selected text"""
     self.check_selection()
     if self.hasSelectedText():
         ConsoleBaseWidget.removeSelectedText(self)
Example #15
0
 def mouseReleaseEvent(self, event):
     """Go to error"""
     ConsoleBaseWidget.mouseReleaseEvent(self, event)
     text = self.get_line_at(event.pos())
     if get_error_match(text) and not self.hasSelectedText():
         self.emit(SIGNAL("go_to_error(QString)"), text)
Example #16
0
 def mouseReleaseEvent(self, event):
     """Go to error"""
     ConsoleBaseWidget.mouseReleaseEvent(self, event)            
     text = self.get_line_at(event.pos())
     if get_error_match(text) and not self.hasSelectedText():
         self.emit(SIGNAL("go_to_error(QString)"), text)
Example #17
0
 def paste(self):
     """Reimplemented slot to handle multiline paste action"""
     if self.new_input_line:
         self.on_new_line()
     ConsoleBaseWidget.paste(self)
Example #18
0
 def leaveEvent(self, event):
     """If cursor has not been restored yet, do it now"""
     if self.__cursor_changed:
         QApplication.restoreOverrideCursor()
         self.__cursor_changed = False
     ConsoleBaseWidget.leaveEvent(self, event)
Example #19
0
 def leaveEvent(self, event):
     """If cursor has not been restored yet, do it now"""
     if self.__cursor_changed:
         QApplication.restoreOverrideCursor()
         self.__cursor_changed = False
     ConsoleBaseWidget.leaveEvent(self, event)
Example #20
0
    def postprocess_keyevent(self, event):
        """Post-process keypress event:
        in InteractiveShell, this is method is called when shell is ready"""
        event, text, key, ctrl, shift = restore_keyevent(event)
        
        # Is cursor on the last line? and after prompt?
        if len(text):
            if self.hasSelectedText():
                self.check_selection()
            self.restrict_cursor_position(self.current_prompt_pos, 'eof')
            
        cursor_position = self.get_position('cursor')

        if key in (Qt.Key_Return, Qt.Key_Enter):
            if self.is_cursor_on_last_line():
                self._key_enter()
            # add and run selection
            else:
                text = self.selectedText()
                self.insert_text(text, at_end=True)
            event.accept()
            
        elif key == Qt.Key_Delete:
            if self.hasSelectedText():
                self.check_selection()
                self.removeSelectedText()
            elif self.is_cursor_on_last_line():
                self.stdkey_clear()
            event.accept()
            
        elif key == Qt.Key_Backspace:
            self._key_backspace(cursor_position)
            event.accept()
            
        elif key == Qt.Key_Tab:
            self._key_tab()
            event.accept()

        elif key == Qt.Key_Left:
            event.accept()
            if self.current_prompt_pos == cursor_position:
                # Avoid moving cursor on prompt
                return
            method = self.extend_selection_to_next if shift \
                     else self.move_cursor_to_next
            method('word' if ctrl else 'character', direction='left')
                
        elif key == Qt.Key_Right:
            event.accept()
            if self.is_cursor_at_end():
                return
            method = self.extend_selection_to_next if shift \
                     else self.move_cursor_to_next
            method('word' if ctrl else 'character', direction='right')

        elif (key == Qt.Key_Home) or ((key == Qt.Key_Up) and ctrl):
            self._key_home(shift)
            event.accept()

        elif (key == Qt.Key_End) or ((key == Qt.Key_Down) and ctrl):
            self._key_end(shift)
            event.accept()

        elif key == Qt.Key_Up:
            if not self.is_cursor_on_last_line():
                self.set_cursor_position('eof')
            y_cursor = self.get_coordinates(cursor_position)[1]
            y_prompt = self.get_coordinates(self.current_prompt_pos)[1]
            if self.is_completion_widget_visible() or y_cursor > y_prompt:
                self.stdkey_up(shift)
            else:
                self.browse_history(backward=True)
            event.accept()
                
        elif key == Qt.Key_Down:
            if not self.is_cursor_on_last_line():
                self.set_cursor_position('eof')
            y_cursor = self.get_coordinates(cursor_position)[1]
            y_end = self.get_coordinates('eol')[1]
            if self.is_completion_widget_visible() or y_cursor < y_end:
                self.stdkey_down(shift)
            else:
                self.browse_history(backward=False)
            event.accept()
            
        elif key in (Qt.Key_PageUp, Qt.Key_PageDown):
            #XXX: Find a way to do this programmatically instead of calling
            # widget keyhandler (this won't work if the *event* is coming from
            # the event queue - i.e. when the busy buffer will be implemented)
            ConsoleBaseWidget.keyPressEvent(self, event)

        elif key == Qt.Key_Escape:
            self._key_escape()
            event.accept()
                
        elif key == Qt.Key_V and ctrl:
            self.paste()
            event.accept()
            
        elif key == Qt.Key_X and ctrl:
            self.cut()
            event.accept()
            
        elif key == Qt.Key_Z and ctrl:
            self.undo()
            event.accept()
            
        elif key == Qt.Key_Y and ctrl:
            self.redo()
            event.accept()
                
        elif key == Qt.Key_Question and not self.hasSelectedText():
            self._key_question(text)
            event.accept()
            
        elif key == Qt.Key_ParenLeft and not self.hasSelectedText():
            self._key_parenleft(text)
            event.accept()
            
        elif key == Qt.Key_Period and not self.hasSelectedText():
            self._key_period(text)
            event.accept()

        elif ((key == Qt.Key_Plus) and ctrl) \
             or ((key==Qt.Key_Equal) and shift and ctrl):
            self.zoomIn()
            event.accept()

        elif (key == Qt.Key_Minus) and ctrl:
            self.zoomOut()
            event.accept()

        elif text.length():
            self.hist_wholeline = False
            self.insert_text(text)
            self._key_other(text)
            event.accept()
                
        else:
            # Let the parent widget handle the key press event
            event.ignore()
Example #21
0
 def setup(self):
     """Reimplement ConsoleBaseWidget method"""
     ConsoleBaseWidget.setup(self)
     self.set_caret(color=Qt.darkGray, width=2)
     self.remove_margins() # Suppressing Scintilla margins
Example #22
0
 def cut(self):
     """Cut text"""
     self.check_selection()
     if self.hasSelectedText():
         ConsoleBaseWidget.cut(self)
Example #23
0
 def setup(self):
     """Reimplement ConsoleBaseWidget method"""
     ConsoleBaseWidget.setup(self)
     self.set_caret(color=Qt.darkGray, width=2)
     self.remove_margins()  # Suppressing Scintilla margins
Example #24
0
 def cut(self):
     """Cut text"""
     self.check_selection()
     if self.hasSelectedText():
         ConsoleBaseWidget.cut(self)