def __init__(self, viewer, snippets=None): self.model = None self.viewer = viewer QtWidgets.QWidget.__init__(self) self.layout = QtWidgets.QVBoxLayout(self) self.setLayout(self.layout) self.c = None self.tools = QtWidgets.QHBoxLayout(self) self.layout.addLayout(self.tools) self.runbutton = QtWidgets.QPushButton("Run") width = self.runbutton.fontMetrics().boundingRect("Run").width() + 20 self.runbutton.setMaximumWidth(width) self.tools.addWidget(self.runbutton) self.runbutton.clicked.connect(self.runCode) editor = CodeEdit() if has_pyqode: editor.backend.start(server.__file__) editor.panels.append(panels.FoldingPanel()) editor.panels.append(panels.LineNumberPanel()) editor.panels.append(panels.SearchAndReplacePanel(), panels.SearchAndReplacePanel.Position.BOTTOM) editor.panels.append(panels.EncodingPanel(), api.Panel.Position.TOP) editor.add_separator() editor.panels.append(pypanels.QuickDocPanel(), api.Panel.Position.BOTTOM) sh = editor.modes.append(PythonSH(editor.document())) editor.modes.append(modes.CaretLineHighlighterMode()) editor.modes.append(modes.CodeCompletionMode()) editor.modes.append(modes.ExtendedSelectionMode()) editor.modes.append(modes.FileWatcherMode()) editor.modes.append(modes.OccurrencesHighlighterMode()) editor.modes.append(modes.RightMarginMode()) editor.modes.append(modes.SmartBackSpaceMode()) editor.modes.append(modes.SymbolMatcherMode()) editor.modes.append(modes.ZoomMode()) editor.modes.append(pymodes.CommentsMode()) editor.modes.append(pymodes.CalltipsMode()) auto = pymodes.PyAutoCompleteMode() auto.logger.setLevel(logging.CRITICAL) editor.modes.append(auto) editor.modes.append(pymodes.PyAutoIndentMode()) editor.modes.append(pymodes.PyIndenterMode()) editor.show() else: editor.setStyleSheet("font-size: 10pt; font-family: Consolas, Courier;") self.editor = editor self.snippets = snippets if self.snippets: self.list = QtWidgets.QComboBox(self) self.replace_snippet(0) for snip_name in self.snippets.keys(): self.list.addItem(snip_name) self.tools.addWidget(self.list) self.list.currentIndexChanged[int].connect(self.replace_snippet) self.layout.addWidget(self.editor) self.output = QtWidgets.QTextEdit() self.output.setReadOnly(True) self.output.setStyleSheet("font-size: 10pt; font-family: Consolas, Courier; background-color: #444;") self.layout.addWidget(self.output)
def test_key_pressed(): # " -> "" editor = CodeEdit() editor.modes.append(modes.AutoCompleteMode()) editor.setPlainText('', '', 'utf-8') QTest.keyPress(editor, '"') assert editor.toPlainText() == '""' editor.clear() # if a " already exists, cursor should just move after " and a new " should # not be inserted editor.setPlainText('"', 'text/x-python', 'utf-8') TextHelper(editor).goto_line(0, 0) QTest.keyPress(editor, '"') assert editor.toPlainText() == '"' editor.clear() # if a ) already exists, cursor should just move after ) and a new ) should # not be inserted editor.setPlainText(')', 'text/x-python', 'utf-8') TextHelper(editor).goto_line(0, 0) QTest.keyPress(editor, ')') QTest.qWait(1000) assert editor.toPlainText() == ')' # ] should be inserted ")" -> "])" TextHelper(editor).goto_line(0, 0) QTest.keyPress(editor, ']') QTest.qWait(1000) assert editor.toPlainText() == '])'
def test_delay_job_runner(): print('test delay job runner') global editor editor = CodeEdit() job_runner = utils.DelayJobRunner() job_runner.request_job(job) QTest.qWait(1000) job_runner.request_job(job) QTest.qWait(1000)
def test_block_helper(): editor = CodeEdit() editor.file.open(__file__) block = editor.document().findBlockByNumber(0) assert block.userState() == -1 # # test user state # utils.TextBlockHelper.set_state(block, 0) assert block.userState() == 0 utils.TextBlockHelper.set_state(block, 26) assert utils.TextBlockHelper.get_state(block) == 26 # # test fold level # lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 0 utils.TextBlockHelper.set_fold_lvl(block, 5) lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 5 utils.TextBlockHelper.set_fold_lvl(block, 1024) lvl = utils.TextBlockHelper.get_fold_lvl(block) assert lvl == 1023 # ensure other values are intact assert utils.TextBlockHelper.get_state(block) == 26 # # Test fold trigger # assert utils.TextBlockHelper.is_fold_trigger(block) is False utils.TextBlockHelper.set_fold_trigger(block, True) assert utils.TextBlockHelper.is_fold_trigger(block) is True utils.TextBlockHelper.set_fold_trigger(block, False) assert utils.TextBlockHelper.is_fold_trigger(block) is False utils.TextBlockHelper.set_fold_trigger(block, True) # ensure other values are intact assert utils.TextBlockHelper.get_fold_lvl(block) == 1023 assert utils.TextBlockHelper.get_state(block) == 26 # # Test fold trigger state # assert utils.TextBlockHelper.is_collapsed(block) is False utils.TextBlockHelper.set_collapsed(block, True) assert utils.TextBlockHelper.is_collapsed(block) is True utils.TextBlockHelper.set_collapsed(block, False) assert utils.TextBlockHelper.is_collapsed(block) is False # ensure other values are intact assert utils.TextBlockHelper.is_fold_trigger(block) is True assert utils.TextBlockHelper.get_fold_lvl(block) == 1023 assert utils.TextBlockHelper.get_state(block) == 26
""" Minimal example showing the use of the ExtendedSelectionMode. """ import logging logging.basicConfig(level=logging.DEBUG) import sys import os os.environ['QT_API'] = 'pyside2' # os.environ['QT_API'] = 'pyqt5' from pyqode.qt import QtWidgets from pyqode.core.api import CodeEdit from pyqode.core.backend import server from pyqode.core.modes import ExtendedSelectionMode if __name__ == '__main__': app = QtWidgets.QApplication(sys.argv) editor = CodeEdit() editor.backend.start(server.__file__) editor.resize(800, 600) print(editor.modes.append(ExtendedSelectionMode())) editor.file.open(__file__) editor.show() app.exec_() editor.close() del editor del app
def setupUi(self, Form): Form.setObjectName("Form") Form.resize(753, 580) self.verticalLayout = QtWidgets.QVBoxLayout(Form) self.verticalLayout.setObjectName("verticalLayout") self.scrollArea = QtWidgets.QScrollArea(Form) self.scrollArea.setFrameShape(QtWidgets.QFrame.NoFrame) self.scrollArea.setWidgetResizable(True) self.scrollArea.setObjectName("scrollArea") self.scrollAreaWidgetContents = QtWidgets.QWidget() self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 741, 568)) self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents") self.verticalLayout_2 = QtWidgets.QVBoxLayout( self.scrollAreaWidgetContents) self.verticalLayout_2.setContentsMargins(0, 0, 0, 0) self.verticalLayout_2.setObjectName("verticalLayout_2") self.groupBox = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox.setObjectName("groupBox") self.horizontalLayout_2 = QtWidgets.QHBoxLayout(self.groupBox) self.horizontalLayout_2.setObjectName("horizontalLayout_2") self.label = QtWidgets.QLabel(self.groupBox) self.label.setObjectName("label") self.horizontalLayout_2.addWidget(self.label) self.fontComboBox = QtWidgets.QFontComboBox(self.groupBox) self.fontComboBox.setFontFilters( QtWidgets.QFontComboBox.MonospacedFonts) font = QtGui.QFont() font.setFamily("DejaVu Sans Mono") self.fontComboBox.setCurrentFont(font) self.fontComboBox.setObjectName("fontComboBox") self.horizontalLayout_2.addWidget(self.fontComboBox) self.label_3 = QtWidgets.QLabel(self.groupBox) self.label_3.setObjectName("label_3") self.horizontalLayout_2.addWidget(self.label_3) self.spinbox_font_size = QtWidgets.QSpinBox(self.groupBox) sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Preferred, QtWidgets.QSizePolicy.Fixed) sizePolicy.setHorizontalStretch(0) sizePolicy.setVerticalStretch(0) sizePolicy.setHeightForWidth( self.spinbox_font_size.sizePolicy().hasHeightForWidth()) self.spinbox_font_size.setSizePolicy(sizePolicy) self.spinbox_font_size.setMinimum(8) self.spinbox_font_size.setObjectName("spinbox_font_size") self.horizontalLayout_2.addWidget(self.spinbox_font_size) spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout_2.addItem(spacerItem) self.verticalLayout_2.addWidget(self.groupBox) self.groupBox_2 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox_2.setObjectName("groupBox_2") self.horizontalLayout = QtWidgets.QHBoxLayout(self.groupBox_2) self.horizontalLayout.setObjectName("horizontalLayout") self.label_4 = QtWidgets.QLabel(self.groupBox_2) self.label_4.setObjectName("label_4") self.horizontalLayout.addWidget(self.label_4) self.combo_color_schemes = QtWidgets.QComboBox(self.groupBox_2) self.combo_color_schemes.setObjectName("combo_color_schemes") self.horizontalLayout.addWidget(self.combo_color_schemes) spacerItem1 = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum) self.horizontalLayout.addItem(spacerItem1) self.verticalLayout_2.addWidget(self.groupBox_2) self.groupBox_3 = QtWidgets.QGroupBox(self.scrollAreaWidgetContents) self.groupBox_3.setObjectName("groupBox_3") self.gridLayout_2 = QtWidgets.QGridLayout(self.groupBox_3) self.gridLayout_2.setObjectName("gridLayout_2") self.edit_preview = CodeEdit(self.groupBox_3) self.edit_preview.setObjectName("edit_preview") self.gridLayout_2.addWidget(self.edit_preview, 0, 0, 1, 1) self.verticalLayout_2.addWidget(self.groupBox_3) self.scrollArea.setWidget(self.scrollAreaWidgetContents) self.verticalLayout.addWidget(self.scrollArea) self.retranslateUi(Form) QtCore.QMetaObject.connectSlotsByName(Form)
def clone_settings(self, original): self.color = original.color self.foreground = original.foreground if __name__ == '__main__': import locale import sys from pyqode.core.api import CodeEdit def simulate_open(): pnl.on_open_failed(__file__, locale.getpreferredencoding()) def simulate_save(): # pass # print(pnl) # print(pnl.on_save_failed) pnl.on_save_failed(__file__, locale.getpreferredencoding()) app = QtWidgets.QApplication(sys.argv) # app.setStyleSheet(qdarkstyle.load_stylesheet_pyqt5()) edit = CodeEdit() edit.setMinimumSize(800, 600) edit.file.open(__file__) pnl = EncodingPanel() edit.panels.append(pnl, pnl.Position.TOP) edit.show() simulate_open() QtCore.QTimer.singleShot(5000, simulate_save) app.exec_()