From 8c4663f3446ad9c27c89a770b192ac8cd975fa6a Mon Sep 17 00:00:00 2001 From: Marius Stanciu Date: Sat, 23 Nov 2019 18:20:37 +0200 Subject: [PATCH] - fixed the line numbers in the TextPlainEdit to fit all digits of the line number; activated the line numbers for FlatCAMScript objects too --- FlatCAMObj.py | 27 +++++++------------ README.md | 1 + flatcamGUI/GUIElements.py | 56 ++++++++++++++++++++++----------------- 3 files changed, 41 insertions(+), 43 deletions(-) diff --git a/FlatCAMObj.py b/FlatCAMObj.py index 23f2b4df..e3afec24 100644 --- a/FlatCAMObj.py +++ b/FlatCAMObj.py @@ -4780,7 +4780,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): # count the tools tool_cnt = 0 - dia_cnc_dict = {} + dia_cnc_dict = dict() # this turn on the FlatCAMCNCJob plot for multiple tools job_obj.multitool = True @@ -4881,7 +4881,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): else: dia_cnc_dict['gcode'] = res - app_obj.progress.emit(50) # tell gcode_parse from which point to start drawing the lines depending on what kind of # object is the source of gcode job_obj.toolchange_xy_type = "geometry" @@ -4900,8 +4899,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): except Exception as e: self.app.inform.emit('[ERROR] %s: %s' % (_("G-Code processing failed with error"), str(e))) - app_obj.progress.emit(80) - job_obj.cnc_tools.update({ tooluid_key: deepcopy(dia_cnc_dict) }) @@ -4924,7 +4921,7 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): # count the tools tool_cnt = 0 - dia_cnc_dict = {} + dia_cnc_dict = dict() # this turn on the FlatCAMCNCJob plot for multiple tools job_obj.multitool = True @@ -5056,8 +5053,6 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): # object is the source of gcode job_obj.toolchange_xy_type = "geometry" - app_obj.progress.emit(80) - job_obj.cnc_tools.update({ tooluid_key: deepcopy(dia_cnc_dict) }) @@ -5071,15 +5066,11 @@ class FlatCAMGeometry(FlatCAMObj, Geometry): if self.solid_geometry: with self.app.proc_container.new(_("Generating CNC Code")): if app_obj.new_object("cncjob", outname, job_init_single_geometry, plot=plot) != 'fail': - app_obj.inform.emit('[success] %s: %s' % - (_("CNCjob created"), outname)) - app_obj.progress.emit(100) + app_obj.inform.emit('[success] %s: %s' % (_("CNCjob created"), outname)) else: with self.app.proc_container.new(_("Generating CNC Code")): if app_obj.new_object("cncjob", outname, job_init_multi_geometry) != 'fail': - app_obj.inform.emit('[success] %s: %s' % - (_("CNCjob created"), outname)) - app_obj.progress.emit(100) + app_obj.inform.emit('[success] %s: %s' % (_("CNCjob created"), outname)) # Create a promise with the name self.app.collection.promise(outname) @@ -6650,7 +6641,7 @@ class FlatCAMScript(FlatCAMObj): self.script_code = '' # self.script_editor_tab = TextEditor(app=self.app, plain_text=True) - self.script_editor_tab = TextEditor(app=self.app) + self.script_editor_tab = TextEditor(app=self.app, plain_text=True) def set_ui(self, ui): FlatCAMObj.set_ui(self, ui) @@ -6722,10 +6713,10 @@ class FlatCAMScript(FlatCAMObj): self.script_editor_tab.t_frame.hide() try: - # self.script_editor_tab.code_editor.setPlainText(self.source_file) - for line in self.source_file.splitlines(): - QtWidgets.QApplication.processEvents() - self.script_editor_tab.code_editor.append(line) + self.script_editor_tab.code_editor.setPlainText(self.source_file) + # for line in self.source_file.splitlines(): + # QtWidgets.QApplication.processEvents() + # self.script_editor_tab.code_editor.append(line) except Exception as e: log.debug("FlatCAMScript.set_ui() --> %s" % str(e)) diff --git a/README.md b/README.md index 0e70d489..16936ffc 100644 --- a/README.md +++ b/README.md @@ -13,6 +13,7 @@ CAD program, and create G-Code for Isolation routing. - in Tool Fiducials added a new fiducial type: chess pattern - work in Calibrate Excellon Tool +- fixed the line numbers in the TextPlainEdit to fit all digits of the line number; activated the line numbers for FlatCAMScript objects too 22.11.2019 diff --git a/flatcamGUI/GUIElements.py b/flatcamGUI/GUIElements.py index a40b420d..5899f3f5 100644 --- a/flatcamGUI/GUIElements.py +++ b/flatcamGUI/GUIElements.py @@ -2357,7 +2357,8 @@ class FCTextAreaLineNumber(QtWidgets.QFrame): QtWidgets.QWidget.paintEvent(self, event) def adjustWidth(self, count): - width = self.fontMetrics().width(str(count)) + # three spaces added to the width to make up for the space added in the line number + width = self.fontMetrics().width(str(count) + ' ') if self.width() != width: self.setFixedWidth(width) @@ -2376,15 +2377,16 @@ class FCTextAreaLineNumber(QtWidgets.QFrame): """ TextEdit with line numbers and highlight From here: https://nachtimwald.com/2009/08/19/better-qplaintextedit-with-line-numbers/ + and from here: https://doc.qt.io/qt-5/qtwidgets-widgets-codeeditor-example.html """ def __init__(self, *args): FCPlainTextAreaExtended.__init__(self, *args) - #self.setFrameStyle(QFrame.NoFrame) + # self.setFrameStyle(QFrame.NoFrame) self.setFrameStyle(QtWidgets.QFrame.NoFrame) self.highlight() - #self.setLineWrapMode(QPlainTextEdit.NoWrap) + # self.setLineWrapMode(QPlainTextEdit.NoWrap) self.cursorPositionChanged.connect(self.highlight) def highlight(self): @@ -2401,39 +2403,43 @@ class FCTextAreaLineNumber(QtWidgets.QFrame): font_metrics = self.fontMetrics() current_line = self.document().findBlock(self.textCursor().position()).blockNumber() + 1 - block = self.firstVisibleBlock() - line_count = block.blockNumber() - painter = QtGui.QPainter(number_bar) - painter.fillRect(event.rect(), self.palette().base()) + painter.fillRect(event.rect(), QtCore.Qt.lightGray) + + block = self.firstVisibleBlock() + line_count = int(block.blockNumber()) + block_top = int(self.blockBoundingGeometry(block).translated(self.contentOffset()).top()) + block_bottom = block_top + int(self.blockBoundingRect(block).height()) # Iterate over all visible text blocks in the document. - while block.isValid(): + while block.isValid() and block_top <= event.rect().bottom(): line_count += 1 - block_top = self.blockBoundingGeometry(block).translated(self.contentOffset()).top() # Check if the position of the block is out side of the visible # area. - if not block.isVisible() or block_top >= event.rect().bottom(): - break + if block.isVisible() and block_bottom >= event.rect().top(): - # We want the line number for the selected line to be bold. - if line_count == current_line: - font = painter.font() - # font.setBold(True) - painter.setPen(QtCore.Qt.blue) - painter.setFont(font) - else: - font = painter.font() - # font.setBold(False) - painter.setPen(QtCore.Qt.lightGray) - painter.setFont(font) + # We want the line number for the selected line to be bold. + if line_count == current_line: + font = painter.font() + # font.setBold(True) + painter.setPen(QtCore.Qt.blue) + painter.setFont(font) + else: + font = painter.font() + # font.setBold(False) + painter.setPen(self.palette().base().color()) + painter.setFont(font) - # Draw the line number right justified at the position of the line. - paint_rect = QtCore.QRect(0, block_top, number_bar.width(), font_metrics.height()) - painter.drawText(paint_rect, Qt.AlignRight, ' ' + str(line_count) + ' ') + # Draw the line number right justified at the position of the line. + paint_rect = QtCore.QRect(0, block_top, number_bar.width(), font_metrics.height()) + # I add some spaces to the line_count to prettify; make sure to remember adjust the width in the + # NumberBar() class above + painter.drawText(paint_rect, Qt.AlignRight, ' ' + str(line_count) + ' ') block = block.next() + block_top = block_bottom + block_bottom = block_top + self.blockBoundingRect(block).height() painter.end()