##// END OF EJS Templates
Cleanup and minor UI fixes.
epatters -
Show More
@@ -22,7 +22,7 b' class ConsoleWidget(QtGui.QWidget):'
22 22 # The maximum number of lines of text before truncation.
23 23 buffer_size = 500
24 24
25 # Whether to use a CompletionWidget or plain text output for tab completion.
25 # Whether to use a list widget or plain text output for tab completion.
26 26 gui_completion = True
27 27
28 28 # Whether to override ShortcutEvents for the keybindings defined by this
@@ -64,8 +64,11 b' class ConsoleWidget(QtGui.QWidget):'
64 64 """
65 65 super(ConsoleWidget, self).__init__(parent)
66 66
67 # Create the underlying text widget.
67 # Create and set the underlying text widget.
68 layout = QtGui.QVBoxLayout(self)
69 layout.setMargin(0)
68 70 self._control = self._create_control(kind)
71 layout.addWidget(self._control)
69 72
70 73 # Initialize protected variables. Some variables contain useful state
71 74 # information for subclasses; they should be considered read-only.
@@ -88,9 +91,28 b' class ConsoleWidget(QtGui.QWidget):'
88 91 """ Reimplemented to ensure a console-like behavior in the underlying
89 92 text widget.
90 93 """
91 if obj == self._control:
92 etype = event.type()
94 # Re-map keys for all filtered widgets.
95 etype = event.type()
96 if etype == QtCore.QEvent.KeyPress and \
97 self._control_key_down(event.modifiers()) and \
98 event.key() in self._ctrl_down_remap:
99 new_event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress,
100 self._ctrl_down_remap[event.key()],
101 QtCore.Qt.NoModifier)
102 QtGui.qApp.sendEvent(obj, new_event)
103 return True
93 104
105 # Override shortucts for all filtered widgets. Note that on Mac OS it is
106 # always unnecessary to override shortcuts, hence the check below (users
107 # should just use the Control key instead of the Command key).
108 elif etype == QtCore.QEvent.ShortcutOverride and \
109 sys.platform != 'darwin' and \
110 self._control_key_down(event.modifiers()) and \
111 event.key() in self._shortcuts:
112 event.accept()
113 return False
114
115 elif obj == self._control:
94 116 # Disable moving text by drag and drop.
95 117 if etype == QtCore.QEvent.DragMove:
96 118 return True
@@ -98,16 +120,6 b' class ConsoleWidget(QtGui.QWidget):'
98 120 elif etype == QtCore.QEvent.KeyPress:
99 121 return self._event_filter_keypress(event)
100 122
101 # On Mac OS, it is always unnecessary to override shortcuts, hence
102 # the check below. Users should just use the Control key instead of
103 # the Command key.
104 elif etype == QtCore.QEvent.ShortcutOverride:
105 if sys.platform != 'darwin' and \
106 self._control_key_down(event.modifiers()) and \
107 event.key() in self._shortcuts:
108 event.accept()
109 return False
110
111 123 return super(ConsoleWidget, self).eventFilter(obj, event)
112 124
113 125 #---------------------------------------------------------------------------
@@ -448,10 +460,8 b' class ConsoleWidget(QtGui.QWidget):'
448 460 return down
449 461
450 462 def _create_control(self, kind):
451 """ Creates and sets the underlying text widget.
463 """ Creates and connects the underlying text widget.
452 464 """
453 layout = QtGui.QVBoxLayout(self)
454 layout.setMargin(0)
455 465 if kind == 'plain':
456 466 control = QtGui.QPlainTextEdit()
457 467 elif kind == 'rich':
@@ -459,36 +469,24 b' class ConsoleWidget(QtGui.QWidget):'
459 469 control.setAcceptRichText(False)
460 470 else:
461 471 raise ValueError("Kind %s unknown." % repr(kind))
462 layout.addWidget(control)
463
464 472 control.installEventFilter(self)
465 473 control.setContextMenuPolicy(QtCore.Qt.CustomContextMenu)
466 474 control.customContextMenuRequested.connect(self._show_context_menu)
467 475 control.copyAvailable.connect(self.copy_available)
468 476 control.redoAvailable.connect(self.redo_available)
469 477 control.undoAvailable.connect(self.undo_available)
470
478 control.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
471 479 return control
472 480
473 481 def _event_filter_keypress(self, event):
474 482 """ Filter key events for the underlying text widget to create a
475 483 console-like interface.
476 484 """
477 key = event.key()
478 ctrl_down = self._control_key_down(event.modifiers())
479
480 # If the key is remapped, return immediately.
481 if ctrl_down and key in self._ctrl_down_remap:
482 new_event = QtGui.QKeyEvent(QtCore.QEvent.KeyPress,
483 self._ctrl_down_remap[key],
484 QtCore.Qt.NoModifier)
485 QtGui.qApp.sendEvent(self._control, new_event)
486 return True
487
488 # Otherwise, proceed normally and do not return early.
489 485 intercepted = False
490 486 cursor = self._control.textCursor()
491 487 position = cursor.position()
488 key = event.key()
489 ctrl_down = self._control_key_down(event.modifiers())
492 490 alt_down = event.modifiers() & QtCore.Qt.AltModifier
493 491 shift_down = event.modifiers() & QtCore.Qt.ShiftModifier
494 492
@@ -632,8 +630,9 b' class ConsoleWidget(QtGui.QWidget):'
632 630 # Note: this code is adapted from columnize 0.3.2.
633 631 # See http://code.google.com/p/pycolumnize/
634 632
635 font_metrics = QtGui.QFontMetrics(self.font)
636 displaywidth = max(5, (self.width() / font_metrics.width(' ')) - 1)
633 width = self._control.viewport().width()
634 char_width = QtGui.QFontMetrics(self.font).width(' ')
635 displaywidth = max(5, width / char_width)
637 636
638 637 # Some degenerate cases.
639 638 size = len(items)
General Comments 0
You need to be logged in to leave comments. Login now