def test_readonly_replace_widget(self): acw = AdvancedCodeWidget(None) text = "Some\nText" acw.code.setPlainText(text) acw.show() # On some platforms, Find/Replace do not have default keybindings FindKey = QtGui.QKeySequence("Ctrl+F") ReplaceKey = QtGui.QKeySequence("Ctrl+H") patcher_find = mock.patch("pyface.qt.QtGui.QKeySequence.Find", FindKey) patcher_replace = mock.patch( "pyface.qt.QtGui.QKeySequence.Replace", ReplaceKey ) patcher_find.start() patcher_replace.start() self.addCleanup(patcher_find.stop) self.addCleanup(patcher_replace.stop) def click_key_seq(widget, key_seq): if not isinstance(key_seq, QtGui.QKeySequence): key_seq = QtGui.QKeySequence(key_seq) try: # QKeySequence on python3-pyside does not have `len` first_key = key_seq[0] except IndexError: return False key = QtCore.Qt.Key(first_key & ~QtCore.Qt.KeyboardModifierMask) modifier = QtCore.Qt.KeyboardModifier( first_key & QtCore.Qt.KeyboardModifierMask ) QTest.keyClick(widget, key, modifier) return True acw.code.setReadOnly(True) if click_key_seq(acw, FindKey): self.assertTrue(acw.find.isVisible()) acw.find.hide() acw.code.setReadOnly(False) if click_key_seq(acw, FindKey): self.assertTrue(acw.find.isVisible()) acw.find.hide() acw.code.setReadOnly(True) if click_key_seq(acw, ReplaceKey): self.assertFalse(acw.replace.isVisible()) acw.code.setReadOnly(False) if click_key_seq(acw, ReplaceKey): self.assertTrue(acw.replace.isVisible()) acw.replace.hide() self.assertFalse(acw.replace.isVisible())
def test_readonly_replace_widget(self): acw = AdvancedCodeWidget(None) text = 'Some\nText' acw.code.setPlainText(text) acw.show() # On some platforms, Find/Replace do not have default keybindings FindKey = QtGui.QKeySequence('Ctrl+F') ReplaceKey = QtGui.QKeySequence('Ctrl+H') patcher_find = mock.patch('pyface.qt.QtGui.QKeySequence.Find', FindKey) patcher_replace = mock.patch('pyface.qt.QtGui.QKeySequence.Replace', ReplaceKey) patcher_find.start() patcher_replace.start() self.addCleanup(patcher_find.stop) self.addCleanup(patcher_replace.stop) def click_key_seq(widget, key_seq): if not isinstance(key_seq, QtGui.QKeySequence): key_seq = QtGui.QKeySequence(key_seq) try: # QKeySequence on python3-pyside does not have `len` first_key = key_seq[0] except IndexError: return False key = QtCore.Qt.Key(first_key & ~QtCore.Qt.KeyboardModifierMask) modifier = QtCore.Qt.KeyboardModifier( first_key & QtCore.Qt.KeyboardModifierMask) QTest.keyClick(widget, key, modifier) return True acw.code.setReadOnly(True) if click_key_seq(acw, FindKey): self.assertTrue(acw.find.isVisible()) acw.find.hide() acw.code.setReadOnly(False) if click_key_seq(acw, FindKey): self.assertTrue(acw.find.isVisible()) acw.find.hide() acw.code.setReadOnly(True) if click_key_seq(acw, ReplaceKey): self.assertFalse(acw.replace.isVisible()) acw.code.setReadOnly(False) if click_key_seq(acw, ReplaceKey): self.assertTrue(acw.replace.isVisible()) acw.replace.hide() self.assertFalse(acw.replace.isVisible())
def _create_control(self, parent): """ Creates the toolkit-specific control for the widget. """ from pyface.ui.qt4.code_editor.code_widget import AdvancedCodeWidget self.control = control = AdvancedCodeWidget(parent) self._show_line_numbers_changed()
def init ( self, parent ): """ Finishes initializing the editor by creating the underlying toolkit widget. """ self.control = QtGui.QWidget() layout = QtGui.QVBoxLayout(self.control) layout.setContentsMargins(0, 0, 0, 0) self._widget = control = AdvancedCodeWidget(None, lexer=self.factory.lexer) layout.addWidget(control) factory = self.factory # Set up listeners for the signals we care about code_editor = self._widget.code if self.readonly: code_editor.setReadOnly(True) else: if factory.auto_set: code_editor.textChanged.connect(self.update_object) else: code_editor.focus_lost.connect(self.update_object) if factory.selected_text != '': code_editor.selectionChanged.connect(self._selection_changed) if (factory.line != '') or (factory.column != ''): code_editor.cursorPositionChanged.connect(self._position_changed) code_editor.line_number_widget.setVisible(factory.show_line_numbers) # Make sure the editor has been initialized: self.update_editor() # Set up any event listeners: self.sync_value( factory.mark_lines, 'mark_lines', 'from', is_list = True ) self.sync_value( factory.selected_line, 'selected_line', 'from' ) self.sync_value( factory.selected_text, 'selected_text', 'to' ) self.sync_value( factory.line, 'line' ) self.sync_value( factory.column, 'column' ) self.sync_value( factory.selected_start_pos, 'selected_start_pos', 'to') self.sync_value( factory.selected_end_pos, 'selected_end_pos', 'to') self.sync_value(factory.dim_lines, 'dim_lines', 'from', is_list=True) if self.factory.dim_color == '': self.dim_color = 'grey' else: self.sync_value(factory.dim_color, 'dim_color', 'from') self.sync_value(factory.squiggle_lines, 'squiggle_lines', 'from', is_list=True) if factory.squiggle_color == '': self.squiggle_color = 'red' else: self.sync_value(factory.squiggle_color, 'squiggle_color', 'from') # Set the control tooltip: self.set_tooltip()
def _create_control(self, parent): """ Creates the toolkit-specific control for the widget. """ self.control = control = AdvancedCodeWidget(parent) self._show_line_numbers_changed() # Load the editor's contents. self.load() return control
def _create_control(self, parent): """ Creates the toolkit-specific control for the widget. """ self.control = control = AdvancedCodeWidget(parent) self._show_line_numbers_changed() # Install event filter to trap key presses. event_filter = PythonEditorEventFilter(self, self.control) self.control.installEventFilter(event_filter) self.control.code.installEventFilter(event_filter) # Connect signals for text changes. control.code.modificationChanged.connect(self._on_dirty_changed) control.code.textChanged.connect(self._on_text_changed) # Load the editor's contents. self.load() return control
def _create_control(self, parent): """ Creates the toolkit-specific control for the widget. """ from pyface.ui.qt4.code_editor.code_widget import AdvancedCodeWidget self.control = control = AdvancedCodeWidget(parent) self._update_visible_lines() # Install event filter to trap key presses. event_filter = PythonEditorEventFilter(self, self.control) self.control.installEventFilter(event_filter) self.control.code.installEventFilter(event_filter) # Connect signals for text changes. control.code.modificationChanged.connect(self._toggle_dirty) control.code.textChanged.connect(self._toggle_changed_trait) # Load the editor's contents. self.load() return control