eric6/MicroPython/MicroPythonReplWidget.py

branch
micropython
changeset 7066
e3d034e65afc
parent 7065
e3d04faced34
child 7067
3fc4082fc6ba
diff -r e3d04faced34 -r e3d034e65afc eric6/MicroPython/MicroPythonReplWidget.py
--- a/eric6/MicroPython/MicroPythonReplWidget.py	Tue Jul 16 20:12:53 2019 +0200
+++ b/eric6/MicroPython/MicroPythonReplWidget.py	Wed Jul 17 20:31:47 2019 +0200
@@ -14,7 +14,7 @@
 from PyQt5.QtCore import (
     pyqtSlot, pyqtSignal, Qt, QPoint, QEvent, QIODevice, QTimer
 )
-from PyQt5.QtGui import QColor, QKeySequence, QTextCursor
+from PyQt5.QtGui import QColor, QKeySequence, QTextCursor, QBrush
 from PyQt5.QtWidgets import (
     QWidget, QMenu, QApplication, QHBoxLayout, QSpacerItem, QSizePolicy)
 try:
@@ -55,6 +55,26 @@
     
     dataReceived = pyqtSignal(bytes)
     
+    # ANSI Colors
+    AnsiColors = {
+        (1, 30): QBrush(Qt.darkGray),
+        (1, 31): QBrush(Qt.red),
+        (1, 32): QBrush(Qt.green),
+        (1, 33): QBrush(Qt.yellow),
+        (1, 34): QBrush(Qt.blue),
+        (1, 35): QBrush(Qt.magenta),
+        (1, 36): QBrush(Qt.cyan),
+        (1, 37): QBrush(Qt.white),
+        (2, 30): QBrush(Qt.black),
+        (2, 31): QBrush(Qt.darkRed),
+        (2, 32): QBrush(Qt.darkGreen),
+        (2, 33): QBrush(Qt.darkYellow),
+        (2, 34): QBrush(Qt.darkBlue),
+        (2, 35): QBrush(Qt.darkMagenta),
+        (2, 36): QBrush(Qt.darkCyan),
+        (2, 37): QBrush(Qt.lightGray),
+    }
+    
     def __init__(self, parent=None):
         """
         Constructor
@@ -115,7 +135,7 @@
             return
         
         self.__vt100Re = re.compile(
-            r'(?P<count>[\d]*)(;?[\d]*)*(?P<action>[ABCDKm])')
+            r'(?P<count>\d*);?(?P<color>\d*)(?P<action>[ABCDKm])')
         
         self.__populateDeviceTypeComboBox()
         
@@ -127,6 +147,10 @@
         
         self.replEdit.customContextMenuRequested.connect(
             self.__showContextMenu)
+        
+        defaultCharFormat = self.replEdit.textCursor().charFormat()
+        self.DefaultForeground = defaultCharFormat.foreground()
+        self.DefaultBackground = defaultCharFormat.background()
     
     def __populateDeviceTypeComboBox(self):
         """
@@ -218,6 +242,7 @@
         menu = QMenu(self)
         menu.addAction(self.tr("Copy"), self.replEdit.copy, copyKeys)
         menu.addAction(self.tr("Paste"), self.__paste, pasteKeys)
+        menu.addSeparator()
         menu.exec_(self.replEdit.mapToGlobal(pos))
     
     def setConnected(self, connected):
@@ -310,18 +335,6 @@
         self.__closeSerialLink()
         self.setConnected(False)
     
-    def __activatePlotter(self):
-        """
-        Private method to activate a data plotter widget.
-        """
-        # TODO: not implemented yet
-    
-    def __deactivatePlotter(self):
-        """
-        Private method to deactivate the plotter widget.
-        """
-        # TODO: not implemented yet
-    
     @pyqtSlot()
     def __paste(self):
         """
@@ -441,7 +454,26 @@
                                             mode=QTextCursor.KeepAnchor)
                             tc.removeSelectedText()
                             self.replEdit.setTextCursor(tc)
-                    # TODO: add handling of 'm' (colors)
+                    elif action == "m":
+                        print(match.group("count"), match.group("color"))
+                        charFormat = tc.charFormat()
+                        if count == 0 and match.group("color") == "":
+                            # reset color
+                            charFormat.setForeground(self.DefaultForeground)
+                            charFormat.setBackground(self.DefaultBackground)
+                        elif count in (0, 1, 2):
+                            if match.group("color") != "":
+                                color = int(match.group("color"))
+                                if count == 0:
+                                    count = 1
+                                if 30 <= color <= 37:
+                                    charFormat.setForeground(
+                                        self.AnsiColors[(count, color)])
+                                elif 40 <= color <= 47:
+                                    charFormat.setBackground(
+                                        self.AnsiColors[(count, color - 10)])
+                        tc.setCharFormat(charFormat)
+                        self.replEdit.setTextCursor(tc)
             elif data[index] == 10:     # \n
                 tc.movePosition(QTextCursor.End)
                 self.replEdit.setTextCursor(tc)
@@ -633,7 +665,7 @@
             self.__ui = e5App().getObject("UserInterface")
         
         if self.__plotterRunning:
-            if self.__chartWidget.hasData():
+            if self.__chartWidget.isDirty():
                 res = E5MessageBox.okToClearData(
                     self,
                     self.tr("Unsaved Chart Data"),
@@ -668,7 +700,7 @@
             
             self.__ui.addSideWidget(self.__ui.BottomSide, self.__chartWidget,
                                     UI.PixmapCache.getIcon("chart"),
-                                    self.tr("Chart"))
+                                    self.tr("μPy Chart"))
             self.__ui.showSideWidget(self.__chartWidget)
             
             if not self.__serial:

eric ide

mercurial