Continued implementing the VCS status widget for the left side. eric7

Mon, 20 Sep 2021 19:47:18 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 20 Sep 2021 19:47:18 +0200
branch
eric7
changeset 8620
84f7f7867b5f
parent 8619
2dc55ddafc68
child 8621
8c9f41115c04

Continued implementing the VCS status widget for the left side.

eric7/Plugins/VcsPlugins/vcsGit/GitStatusMonitorThread.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsMercurial/HgStatusMonitorThread.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py file | annotate | diff | comparison | revisions
eric7/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py file | annotate | diff | comparison | revisions
eric7/Project/Project.py file | annotate | diff | comparison | revisions
eric7/VCS/StatusMonitorThread.py file | annotate | diff | comparison | revisions
eric7/VCS/StatusWidget.py file | annotate | diff | comparison | revisions
eric7/VCS/VersionControl.py file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/check.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/vcs-added.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/vcs-conflicting.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/vcs-missing.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/vcs-modified.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/vcs-removed.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/vcs-renamed.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/vcs-untracked.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-dark/vcs-update-required.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/check.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/vcs-added.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/vcs-conflicting.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/vcs-missing.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/vcs-modified.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/vcs-removed.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/vcs-renamed.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/vcs-untracked.svg file | annotate | diff | comparison | revisions
eric7/icons/breeze-light/vcs-update-required.svg file | annotate | diff | comparison | revisions
eric7/icons/oxygen/check.png file | annotate | diff | comparison | revisions
eric7/icons/oxygen/vcs-added.png file | annotate | diff | comparison | revisions
eric7/icons/oxygen/vcs-conflicting.png file | annotate | diff | comparison | revisions
eric7/icons/oxygen/vcs-missing.png file | annotate | diff | comparison | revisions
eric7/icons/oxygen/vcs-modified.png file | annotate | diff | comparison | revisions
eric7/icons/oxygen/vcs-removed.png file | annotate | diff | comparison | revisions
eric7/icons/oxygen/vcs-renamed.png file | annotate | diff | comparison | revisions
eric7/icons/oxygen/vcs-untracked.png file | annotate | diff | comparison | revisions
eric7/icons/oxygen/vcs-update-required.png file | annotate | diff | comparison | revisions
--- a/eric7/Plugins/VcsPlugins/vcsGit/GitStatusMonitorThread.py	Mon Sep 20 07:29:27 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsGit/GitStatusMonitorThread.py	Mon Sep 20 19:47:18 2021 +0200
@@ -51,6 +51,8 @@
             <li>"R" path was deleted and then re-added</li>
             <li>"U" path needs an update</li>
             <li>"Z" path contains a conflict</li>
+            <li>"?" path is not tracked</li>
+            <li>"!" path is missing</li>
             <li>" " path is back at normal</li>
         </ul>
         
@@ -107,6 +109,8 @@
                 else:
                     status = flags[1]
                 states[name] = status
+            elif flags == "??":
+                states[name] = "?"
         
         # step 2: collect the status to be reported back
         for name in states:
--- a/eric7/Plugins/VcsPlugins/vcsMercurial/HgStatusMonitorThread.py	Mon Sep 20 07:29:27 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsMercurial/HgStatusMonitorThread.py	Mon Sep 20 19:47:18 2021 +0200
@@ -42,6 +42,8 @@
             <li>"R" path was deleted and then re-added</li>
             <li>"U" path needs an update</li>
             <li>"Z" path contains a conflict</li>
+            <li>"?" path is not tracked</li>
+            <li>"!" path is missing</li>
             <li>" " path is back at normal</li>
         </ul>
         
@@ -59,6 +61,8 @@
         args = self.vcs.initCommand("status")
         args.append('--noninteractive')
         args.append('--all')
+        if self.vcs.hasSubrepositories():
+            args.append("--subrepos")
         
         output, error = self.__client.runcommand(args)
         
@@ -69,7 +73,7 @@
         for line in output.splitlines():
             if not line.startswith("  "):
                 flag, name = line.split(" ", 1)
-                if flag in "AMR":
+                if flag in "AMR?!":
                     if flag == "R":
                         status = "O"
                     else:
--- a/eric7/Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py	Mon Sep 20 07:29:27 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsPySvn/SvnStatusMonitorThread.py	Mon Sep 20 19:47:18 2021 +0200
@@ -46,6 +46,8 @@
             <li>"R" path was deleted and then re-added</li>
             <li>"U" path needs an update</li>
             <li>"Z" path contains a conflict</li>
+            <li>"?" path is not tracked</li>
+            <li>"!" path is missing</li>
             <li>" " path is back at normal</li>
         </ul>
         
@@ -110,6 +112,16 @@
                     file.prop_status == pysvn.wc_status_kind.replaced
                 ):
                     status = "R"
+                elif (
+                    file.text_status == pysvn.wc_status_kind.unversioned or
+                    file.prop_status == pysvn.wc_status_kind.unversioned
+                ):
+                    status = "?"
+                elif (
+                    file.text_status == pysvn.wc_status_kind.missing or
+                    file.prop_status == pysvn.wc_status_kind.missing
+                ):
+                    status = "!"
                 if status:
                     states[file.path] = status
                     try:
--- a/eric7/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py	Mon Sep 20 07:29:27 2021 +0200
+++ b/eric7/Plugins/VcsPlugins/vcsSubversion/SvnStatusMonitorThread.py	Mon Sep 20 19:47:18 2021 +0200
@@ -52,6 +52,8 @@
             <li>"R" path was deleted and then re-added</li>
             <li>"U" path needs an update</li>
             <li>"Z" path contains a conflict</li>
+            <li>"?" path is not tracked</li>
+            <li>"!" path is missing</li>
             <li>" " path is back at normal</li>
         </ul>
         
@@ -90,19 +92,22 @@
                         flags = match.group(1)
                         path = match.group(5).strip()
                     if (
-                        flags[0] in "ACDMR" or
-                        (flags[0] == " " and flags[-1] == "*")
+                        flags[0] in "ACDMR?!" or
+                        (flags[0] == " " and flags[-1] == "*") or
+                        flags[1] in "CM"
                     ):
                         if flags[-1] == "*":
                             status = "U"
                         else:
                             status = flags[0]
-                        if status == "C":
+                        if status == "C" or flags[1] == "C":
                             status = "Z"    # give it highest priority
                         elif status == "D":
                             status = "O"
                         if status == "U":
                             self.shouldUpdate = True
+                        if status == " " and flags[1] == "M":
+                            status = "M"
                         name = path
                         states[name] = status
                         try:
--- a/eric7/Project/Project.py	Mon Sep 20 07:29:27 2021 +0200
+++ b/eric7/Project/Project.py	Mon Sep 20 19:47:18 2021 +0200
@@ -103,10 +103,13 @@
     @signal completeRepopulateItem(str) emitted after an item of the model was
         repopulated
     @signal vcsStatusMonitorData(list) emitted to signal the VCS status data
+    @signal vcsStatusMonitorAllData(dict) emitted to signal all VCS status
+        (key is project relative file name, value is status)
     @signal vcsStatusMonitorStatus(str, str) emitted to signal the status of
         the monitoring thread (ok, nok, op, off) and a status message
     @signal vcsStatusMonitorInfo(str) emitted to signal some info of the
         monitoring thread
+    @signal vcsCommitted() emitted to indicate a completed commit action
     @signal reinitVCS() emitted after the VCS has been reinitialized
     @signal showMenu(str, QMenu) emitted when a menu is about to be shown. The
         name of the menu and a reference to the menu are given.
@@ -151,8 +154,10 @@
     prepareRepopulateItem = pyqtSignal(str)
     completeRepopulateItem = pyqtSignal(str)
     vcsStatusMonitorData = pyqtSignal(list)
+    vcsStatusMonitorAllData = pyqtSignal(dict)
     vcsStatusMonitorStatus = pyqtSignal(str, str)
     vcsStatusMonitorInfo = pyqtSignal(str)
+    vcsCommitted = pyqtSignal()
     reinitVCS = pyqtSignal()
     showMenu = pyqtSignal(str, QMenu)
     lexerAssociationsChanged = pyqtSignal()
@@ -2826,15 +2831,7 @@
                 # reinit VCS
                 self.vcs = self.initVCS()
                 # start the VCS monitor thread
-                if self.vcs is not None:
-                    self.vcs.startStatusMonitor(self)
-                    self.vcs.vcsStatusMonitorData.connect(
-                        self.__model.changeVCSStates)
-                    self.vcs.vcsStatusMonitorStatus.connect(
-                        self.__statusMonitorStatus)
-                    self.vcs.vcsStatusMonitorInfo.connect(
-                        self.vcsStatusMonitorInfo)
-                    self.vcs.vcsStatusChanged.connect(self.__vcsStatusChanged)
+                self.__vcsConnectStatusMonitor()
                 self.reinitVCS.emit()
             
             if self.pudata["VCSSTATUSMONITORINTERVAL"]:
@@ -3074,18 +3071,7 @@
                         self.__readSession(quiet=True)
                 
                 # start the VCS monitor thread
-                if self.vcs is not None:
-                    self.vcs.startStatusMonitor(self)
-                    self.vcs.vcsStatusMonitorData.connect(
-                        self.__model.changeVCSStates)
-                    self.vcs.vcsStatusMonitorData.connect(
-                        self.vcsStatusMonitorData)
-                    self.vcs.vcsStatusMonitorStatus.connect(
-                        self.vcsStatusMonitorStatus)
-                    self.vcs.vcsStatusMonitorInfo.connect(
-                        self.vcsStatusMonitorInfo)
-                    self.vcs.vcsStatusChanged.connect(
-                        self.__vcsStatusChanged)
+                self.__vcsConnectStatusMonitor()
         
     def reopenProject(self):
         """
@@ -4925,6 +4911,27 @@
         """
         self.projectChanged.emit()
     
+    def __vcsConnectStatusMonitor(self):
+        """
+        Private method to start the VCS monitor and connect its signals.
+        """
+        if self.vcs is not None:
+            self.vcs.committed.connect(self.vcsCommitted)
+            
+            self.vcs.startStatusMonitor(self)
+            self.vcs.vcsStatusMonitorData.connect(
+                self.__model.changeVCSStates)
+            self.vcs.vcsStatusMonitorData.connect(
+                self.vcsStatusMonitorData)
+            self.vcs.vcsStatusMonitorAllData.connect(
+                self.vcsStatusMonitorAllData)
+            self.vcs.vcsStatusMonitorStatus.connect(
+                self.vcsStatusMonitorStatus)
+            self.vcs.vcsStatusMonitorInfo.connect(
+                self.vcsStatusMonitorInfo)
+            self.vcs.vcsStatusChanged.connect(
+                self.__vcsStatusChanged)
+    
     #########################################################################
     ## Below is the interface to the checker tools
     #########################################################################
--- a/eric7/VCS/StatusMonitorThread.py	Mon Sep 20 07:29:27 2021 +0200
+++ b/eric7/VCS/StatusMonitorThread.py	Mon Sep 20 19:47:18 2021 +0200
@@ -19,12 +19,15 @@
     Class implementing the VCS status monitor thread base class.
     
     @signal vcsStatusMonitorData(list of str) emitted to update the VCS status
+    @signal vcsStatusMonitorAllData(dict) emitted to signal all VCS status
+        (key is project relative file name, value is status)
     @signal vcsStatusMonitorStatus(str, str) emitted to signal the status of
         the monitoring thread (ok, nok, op) and a status message
     @signal vcsStatusMonitorInfo(str) emitted to signal some info of the
         monitoring thread
     """
     vcsStatusMonitorData = pyqtSignal(list)
+    vcsStatusMonitorAllData = pyqtSignal(dict)
     vcsStatusMonitorStatus = pyqtSignal(str, str)
     vcsStatusMonitorInfo = pyqtSignal(str)
     
@@ -89,6 +92,7 @@
                     "send", QCoreApplication.translate(
                         "VcsStatusMonitorThread", "Sending data"))
                 self.vcsStatusMonitorData.emit(self.statusList)
+                self.vcsStatusMonitorAllData.emit(self.reportedStates)
                 self.vcsStatusMonitorStatus.emit(status, statusMsg)
                 self.vcsStatusMonitorInfo.emit(infoMsg)
             else:
@@ -193,6 +197,8 @@
             <li>"R" path was deleted and then re-added</li>
             <li>"U" path needs an update</li>
             <li>"Z" path contains a conflict</li>
+            <li>"?" path is not tracked</li>
+            <li>"!" path is missing</li>
             <li>" " path is back at normal</li>
         </ul>
         
--- a/eric7/VCS/StatusWidget.py	Mon Sep 20 07:29:27 2021 +0200
+++ b/eric7/VCS/StatusWidget.py	Mon Sep 20 19:47:18 2021 +0200
@@ -7,12 +7,19 @@
 Module implementing a VCS Status widget for the sidebar/toolbar.
 """
 
+import contextlib
+import os
+
 from PyQt6.QtCore import pyqtSlot, Qt
 from PyQt6.QtWidgets import (
     QWidget, QVBoxLayout, QHBoxLayout, QLabel, QSizePolicy, QListView,
-    QListWidget, QListWidgetItem, QToolButton
+    QListWidget, QListWidgetItem, QToolButton, QAbstractItemView
 )
 
+from EricWidgets.EricApplication import ericApp
+from EricWidgets import EricMessageBox
+
+import Preferences
 import UI.PixmapCache
 
 
@@ -20,6 +27,8 @@
     """
     Class implementing a VCS Status widget for the sidebar/toolbox.
     """
+    StatusDataRole = Qt.ItemDataRole.UserRole + 1
+    
     def __init__(self, project, parent=None):
         """
         Constructor
@@ -46,8 +55,31 @@
             QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred)
         self.__topLayout.addWidget(self.__infoLabel)
         
+        self.__commitToggleButton = QToolButton(self)
+        self.__commitToggleButton.setIcon(UI.PixmapCache.getIcon("check"))
+        self.__commitToggleButton.setToolTip(
+            self.tr("Press to toggle the commit markers"))
+        self.__commitToggleButton.clicked.connect(self.__toggleCheckMark)
+        self.__topLayout.addWidget(self.__commitToggleButton)
+        
+        self.__commitButton = QToolButton(self)
+        self.__commitButton.setIcon(UI.PixmapCache.getIcon("vcsCommit"))
+        self.__commitButton.setToolTip(
+            self.tr("Press to commit the marked entries"))
+        self.__commitButton.clicked.connect(self.__commit)
+        self.__topLayout.addWidget(self.__commitButton)
+        
+        self.__addButton = QToolButton(self)
+        self.__addButton.setIcon(UI.PixmapCache.getIcon("vcsAdd"))
+        self.__addButton.setToolTip(
+            self.tr("Press to add the selected, untracked entries"))
+        self.__addButton.clicked.connect(self.__addUntracked)
+        self.__topLayout.addWidget(self.__addButton)
+        
         self.__reloadButton = QToolButton(self)
         self.__reloadButton.setIcon(UI.PixmapCache.getIcon("reload"))
+        self.__reloadButton.setToolTip(
+            self.tr("Press to reload the status list"))
         self.__reloadButton.clicked.connect(self.__reload)
         self.__topLayout.addWidget(self.__reloadButton)
         
@@ -58,10 +90,33 @@
         self.__statusList.setSortingEnabled(True)
         self.__statusList.setViewMode(QListView.ViewMode.ListMode)
         self.__statusList.setTextElideMode(Qt.TextElideMode.ElideLeft)
+        self.__statusList.setSelectionMode(
+            QAbstractItemView.SelectionMode.ExtendedSelection)
         self.__layout.addWidget(self.__statusList)
         
         self.setLayout(self.__layout)
         
+        self.__statusIcons = {
+            "A": "vcs-added",    # added
+            "M": "vcs-modified",    # modified
+            "O": "vcs-removed",    # removed
+            "R": "vcs-renamed",    # renamed
+            "U": "vcs-update-required",    # update needed
+            "Z": "vcs-conflicting",    # conflict
+            "?": "vcs-untracked",    # not tracked
+            "!": "vcs-missing",    # missing
+        }
+        self.__statusTexts = {
+            "A": self.tr("added"),
+            "M": self.tr("modified"),
+            "O": self.tr("removed"),
+            "R": self.tr("renamed"),
+            "U": self.tr("needs update"),
+            "Z": self.tr("conflict"),
+            "?": self.tr("not tracked"),
+            "!": self.tr("missing"),
+        }
+        
         if self.__project.isOpen():
             self.__projectOpened()
         else:
@@ -69,8 +124,10 @@
         
         self.__project.projectOpened.connect(self.__projectOpened)
         self.__project.projectClosed.connect(self.__projectClosed)
+        self.__project.vcsCommitted.connect(self.__committed)
         self.__project.vcsStatusMonitorInfo.connect(self.__setInfoText)
-        self.__project.vcsStatusMonitorData.connect(self.__processStatusData)
+        self.__project.vcsStatusMonitorAllData.connect(
+            self.__processStatusData)
     
     @pyqtSlot()
     def __projectOpened(self):
@@ -107,7 +164,7 @@
         """
         self.__project.checkVCSStatus()
     
-    @pyqtSlot(list)
+    @pyqtSlot(dict)
     def __processStatusData(self, data):
         """
         Private slot to process the status data emitted by the project.
@@ -122,14 +179,106 @@
             <li>"R" path was deleted and then re-added</li>
             <li>"U" path needs an update</li>
             <li>"Z" path contains a conflict</li>
+            <li>"?" path is not tracked</li>
+            <li>"!" path is missing</li>
             <li>" " path is back at normal</li>
         </ul>
         
-        @param data list of VCS status data
-        @type list of str
+        @param data dictionary containing the status data
+        @type dict
         """
         self.__statusList.clear()
         
-        for entry in data:
-            QListWidgetItem(entry, self.__statusList)
+        for name, status in data.items():
+            if status:
+                itm = QListWidgetItem(name, self.__statusList)
+                with contextlib.suppress(KeyError):
+                    itm.setToolTip(self.__statusTexts[status])
+                    itm.setIcon(UI.PixmapCache.getIcon(
+                        self.__statusIcons[status]))
+                    itm.setData(self.StatusDataRole, status)
+                if status in "AMOR":
+                    itm.setFlags(
+                        itm.flags() | Qt.ItemFlag.ItemIsUserCheckable)
+                    itm.setCheckState(Qt.CheckState.Checked)
+                else:
+                    itm.setFlags(
+                        itm.flags() & ~Qt.ItemFlag.ItemIsUserCheckable)
+        
         self.__statusList.sortItems(Qt.SortOrder.AscendingOrder)
+    
+    @pyqtSlot()
+    def __toggleCheckMark(self):
+        """
+        Private slot to toggle the check marks.
+        """
+        for row in range(self.__statusList.count()):
+            itm = self.__statusList.item(row)
+            if (
+                itm.flags() & Qt.ItemFlag.ItemIsUserCheckable ==
+                Qt.ItemFlag.ItemIsUserCheckable
+            ):
+                if itm.checkState() == Qt.CheckState.Unchecked:
+                    itm.setCheckState(Qt.CheckState.Checked)
+                else:
+                    itm.setCheckState(Qt.CheckState.Unchecked)
+    
+    @pyqtSlot()
+    def __commit(self):
+        """
+        Private slot to handle the commit button.
+        """
+        projectPath = self.__project.getProjectPath()
+        names = []
+        
+        for row in range(self.__statusList.count()):
+            itm = self.__statusList.item(row)
+            if itm.checkState() == Qt.CheckState.Checked:
+                names.append(os.path.join(projectPath, itm.text()))
+        
+        if not names:
+            EricMessageBox.information(
+                self,
+                self.tr("Commit"),
+                self.tr("""There are no entries selected to be"""
+                        """ committed."""))
+            return
+        
+        if Preferences.getVCS("AutoSaveFiles"):
+            vm = ericApp().getObject("ViewManager")
+            for name in names:
+                vm.saveEditor(name)
+        vcs = self.__project.getVcs()
+        vcs and vcs.vcsCommit(names, '')
+    
+    @pyqtSlot()
+    def __committed(self):
+        """
+        Private slot called after the commit has been completed.
+        """
+        self.__reload()
+    
+    @pyqtSlot()
+    def __addUntracked(self):
+        """
+        Private slot to add the selected untracked entries.
+        """
+        projectPath = self.__project.getProjectPath()
+        
+        names = [
+            os.path.join(projectPath, itm.text())
+            for itm in self.__statusList.selectedItems()
+            if itm.data(self.StatusDataRole) == "?"
+        ]
+        
+        if not names:
+            EricMessageBox.information(
+                self,
+                self.tr("Add"),
+                self.tr("""There are no unversioned entries"""
+                        """ available/selected."""))
+            return
+        
+        vcs = self.__project.getVcs()
+        vcs and vcs.vcsAdd(names)
+        self.__reload()
--- a/eric7/VCS/VersionControl.py	Mon Sep 20 07:29:27 2021 +0200
+++ b/eric7/VCS/VersionControl.py	Mon Sep 20 19:47:18 2021 +0200
@@ -29,7 +29,10 @@
     It defines the vcs interface to be implemented by subclasses
     and the common methods.
     
+    @signal committed() emitted after the commit action has completed
     @signal vcsStatusMonitorData(list of str) emitted to update the VCS status
+    @signal vcsStatusMonitorAllData(dict) emitted to signal all VCS status
+        (key is project relative file name, value is status)
     @signal vcsStatusMonitorStatus(str, str) emitted to signal the status of
         the monitoring thread (ok, nok, op, off) and a status message
     @signal vcsStatusMonitorInfo(str) emitted to signal some info of the
@@ -37,7 +40,9 @@
     @signal vcsStatusChanged() emitted to indicate a change of the overall
         VCS status
     """
+    committed = pyqtSignal()
     vcsStatusMonitorData = pyqtSignal(list)
+    vcsStatusMonitorAllData = pyqtSignal(dict)
     vcsStatusMonitorStatus = pyqtSignal(str, str)
     vcsStatusMonitorInfo = pyqtSignal(str)
     vcsStatusChanged = pyqtSignal()
@@ -685,7 +690,7 @@
 
     def __statusMonitorData(self, statusList):
         """
-        Private method to receive the status monitor status.
+        Private method to receive the status monitor data update.
         
         It simply re-emits the received status list.
         
@@ -695,6 +700,18 @@
         self.vcsStatusMonitorData.emit(statusList)
         QCoreApplication.processEvents()
     
+    def __statusMonitorAllData(self, statusDict):
+        """
+        Private method to receive all status monitor data.
+        
+        It simply re-emits the received status list.
+        
+        @param statusDict dictionary of status records
+        @type dict
+        """
+        self.vcsStatusMonitorAllData.emit(statusDict)
+        QCoreApplication.processEvents()
+    
     def __statusMonitorInfo(self, info):
         """
         Private slot to receive the status monitor info message.
@@ -726,6 +743,9 @@
                 self.statusMonitorThread.vcsStatusMonitorData.connect(
                     self.__statusMonitorData,
                     Qt.ConnectionType.QueuedConnection)
+                self.statusMonitorThread.vcsStatusMonitorAllData.connect(
+                    self.__statusMonitorAllData,
+                    Qt.ConnectionType.QueuedConnection)
                 self.statusMonitorThread.vcsStatusMonitorStatus.connect(
                     self.__statusMonitorStatus,
                     Qt.ConnectionType.QueuedConnection)
@@ -747,6 +767,8 @@
             self.__statusMonitorData(["--RESET--"])
             self.statusMonitorThread.vcsStatusMonitorData.disconnect(
                 self.__statusMonitorData)
+            self.statusMonitorThread.vcsStatusMonitorAllData.disconnect(
+                self.__statusMonitorAllData)
             self.statusMonitorThread.vcsStatusMonitorStatus.disconnect(
                 self.__statusMonitorStatus)
             self.statusMonitorThread.vcsStatusMonitorInfo.disconnect(
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/check.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   viewBox="0 0 22 22"
+   id="svg8"
+   sodipodi:docname="check.svg"
+   inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+  <metadata
+     id="metadata12">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1592"
+     inkscape:window-height="896"
+     id="namedview10"
+     showgrid="false"
+     inkscape:zoom="32.5"
+     inkscape:cx="11"
+     inkscape:cy="11"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg8" />
+  <defs
+     id="defs4">
+    <style
+       type="text/css"
+       id="style2">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style>
+  </defs>
+  <path
+     class="ColorScheme-Text"
+     d="m19.216 3.9646-11.784 12.357-4.6814-4.9089-0.79824 0.83705 4.6814 4.9089-0.00226 0.0024 0.79826 0.83704 0.00226-0.0024 0.00226 0.0024 0.79823-0.83704-0.00226-0.0024 11.784-12.357-0.79824-0.83703z"
+     color="#eff0f1"
+     fill="#eff0f1"
+     stroke="#eff0f1"
+     stroke-width="1.3788"
+     id="path6" />
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/vcs-added.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-Highlight {
+            color:#3daee9;
+        }
+        .ColorScheme-Text {
+            color:#eff0f1;
+        }
+    </style>
+    <path style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-Highlight" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8z"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M7 2v5H2v2h5v5h2V9h5V7H9V2z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/vcs-conflicting.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-NeutralText {
+            color:#f67400;
+        }
+        .ColorScheme-Text {
+            color:#eff0f1;
+        }
+    </style>
+    <circle style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-NeutralText" cx="8" cy="8" r="8"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M7 2v9h2V2zm0 10v2h2v-2z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/vcs-missing.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-NeutralText {
+            color:#f67400;
+        }
+        .ColorScheme-Text {
+            color:#eff0f1;
+        }
+    </style>
+    <path style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-NeutralText" d="M8.008 0a1 1 0 0 0-.903.553l-7 14A1 1 0 0 0 1 16h14a1 1 0 0 0 .895-1.447l-7-14A1 1 0 0 0 8.008 0z"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8.008 0a1 1 0 0 0-.903.553l-7 14A1 1 0 0 0 1 16h14a1 1 0 0 0 .895-1.447l-7-14A1 1 0 0 0 8.008 0zM8 1l7 14H1z"/>
+    <path d="M7 3v9h2V3zm0 10v2h2v-2z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/vcs-modified.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-Highlight {
+            color:#3daee9;
+        }
+        .ColorScheme-Text {
+            color:#eff0f1;
+        }
+    </style>
+    <circle style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-Highlight" cx="8" cy="8" r="8"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M10 5v2H4a2 2 0 0 0-2 2v2.59a7 7 0 0 0 2 2.152V10a1 1 0 0 1 1-1h5v2l4-3z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/vcs-removed.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-NegativeText {
+            color:#da4453;
+        }
+        .ColorScheme-Text {
+            color:#eff0f1;
+        }
+    </style>
+    <path style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-NegativeText" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8z"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M2 7v2h12V7z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/vcs-renamed.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-Highlight {
+            color:#3daee9;
+        }
+        .ColorScheme-Text {
+            color:#eff0f1;
+        }
+    </style>
+    <rect style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-Highlight" height="16" rx="2" width="16"/>
+    <path d="M2 0C.892 0 0 .892 0 2v12c0 1.108.892 2 2 2h12c1.108 0 2-.892 2-2V2c0-1.108-.892-2-2-2zm0 1h12c.554 0 1 .446 1 1v12c0 .554-.446 1-1 1H2c-.554 0-1-.446-1-1V2c0-.554.446-1 1-1z" style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text"/>
+    <path d="M8 1v2a5 5 0 0 0-5 5 5 5 0 0 0 5 5 5 5 0 0 0 5-5h-2a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3v2l4-3z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/vcs-untracked.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,11 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-Text {
+            color:#eff0f1;
+        }
+    </style>
+    <path d="m2 0c-1.108 0-2 .892-2 2v12c0 1.108.892 2 2 2h12c1.108 0 2-.892 2-2v-12c0-1.108-.892-2-2-2zm0 1h12c.554 0 1 .446 1 1v12c0 .554-.446 1-1 1h-12c-.554 0-1-.446-1-1v-12c0-.554.446-1 1-1z" style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text"/>
+    <path d="m8 2 1.1480503 3.2283614 3.0945907-1.4710021-1.471002 3.0945905 3.228361 1.1480502-3.228361 1.1480503 1.471002 3.0945907-3.0945908-1.471002-1.1480502 3.228361-1.1480503-3.228361-3.0945904 1.471002 1.4710021-3.0945908-3.2283614-1.1480502 3.2283614-1.1480503-1.4710021-3.0945904 3.0945905 1.4710021z" fill="#fdbc4b"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-dark/vcs-update-required.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-NeutralText {
+            color:#f67400;
+        }
+        .ColorScheme-Text {
+            color:#eff0f1;
+        }
+    </style>
+    <circle style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-NeutralText" cx="8" cy="8" r="8"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M8 1v2a5 5 0 0 0-5 5 5 5 0 0 0 5 5 5 5 0 0 0 5-5h-2a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3v2l4-3z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/check.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,63 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   version="1.1"
+   viewBox="0 0 22 22"
+   id="svg8"
+   sodipodi:docname="check.svg"
+   inkscape:version="1.0.2 (e86c870879, 2021-01-15)">
+  <metadata
+     id="metadata12">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1574"
+     inkscape:window-height="756"
+     id="namedview10"
+     showgrid="false"
+     inkscape:zoom="32.5"
+     inkscape:cx="11"
+     inkscape:cy="11"
+     inkscape:window-x="0"
+     inkscape:window-y="0"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg8" />
+  <defs
+     id="defs4">
+    <style
+       type="text/css"
+       id="style2">.ColorScheme-Text {
+        color:#eff0f1;
+      }</style>
+  </defs>
+  <path
+     class="ColorScheme-Text"
+     d="m19.216 3.9646-11.784 12.357-4.6814-4.9089-0.79824 0.83705 4.6814 4.9089-0.00226 0.0024 0.79826 0.83704 0.00226-0.0024 0.00226 0.0024 0.79823-0.83704-0.00226-0.0024 11.784-12.357-0.79824-0.83703z"
+     color="#eff0f1"
+     fill="#232629"
+     stroke="#232629"
+     stroke-width="1.3788"
+     id="path6" />
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/vcs-added.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-Highlight {
+            color:#3daee9;
+        }
+        .ColorScheme-Text {
+            color:#232629;
+        }
+    </style>
+    <path style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-Highlight" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8z"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M7 2v5H2v2h5v5h2V9h5V7H9V2z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/vcs-conflicting.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-NeutralText {
+            color:#f67400;
+        }
+        .ColorScheme-Text {
+            color:#232629;
+        }
+    </style>
+    <circle style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-NeutralText" cx="8" cy="8" r="8"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M7 2v9h2V2zm0 10v2h2v-2z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/vcs-missing.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-NeutralText {
+            color:#f67400;
+        }
+        .ColorScheme-Text {
+            color:#232629;
+        }
+    </style>
+    <path style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-NeutralText" d="M8.008 0a1 1 0 0 0-.903.553l-7 14A1 1 0 0 0 1 16h14a1 1 0 0 0 .895-1.447l-7-14A1 1 0 0 0 8.008 0z"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8.008 0a1 1 0 0 0-.903.553l-7 14A1 1 0 0 0 1 16h14a1 1 0 0 0 .895-1.447l-7-14A1 1 0 0 0 8.008 0zM8 1l7 14H1z"/>
+    <path d="M7 3v9h2V3zm0 10v2h2v-2z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/vcs-modified.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-Highlight {
+            color:#3daee9;
+        }
+        .ColorScheme-Text {
+            color:#232629;
+        }
+    </style>
+    <circle style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-Highlight" cx="8" cy="8" r="8"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M10 5v2H4a2 2 0 0 0-2 2v2.59a7 7 0 0 0 2 2.152V10a1 1 0 0 1 1-1h5v2l4-3z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/vcs-removed.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-NegativeText {
+            color:#da4453;
+        }
+        .ColorScheme-Text {
+            color:#232629;
+        }
+    </style>
+    <path style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-NegativeText" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8z"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M2 7v2h12V7z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/vcs-renamed.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-Highlight {
+            color:#3daee9;
+        }
+        .ColorScheme-Text {
+            color:#232629;
+        }
+    </style>
+    <rect style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-Highlight" height="16" rx="2" width="16"/>
+    <path d="M2 0C.892 0 0 .892 0 2v12c0 1.108.892 2 2 2h12c1.108 0 2-.892 2-2V2c0-1.108-.892-2-2-2zm0 1h12c.554 0 1 .446 1 1v12c0 .554-.446 1-1 1H2c-.554 0-1-.446-1-1V2c0-.554.446-1 1-1z" style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text"/>
+    <path d="M8 1v2a5 5 0 0 0-5 5 5 5 0 0 0 5 5 5 5 0 0 0 5-5h-2a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3v2l4-3z" fill="#fff"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/vcs-untracked.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,11 @@
+<svg height="16" width="16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-Text {
+            color:#232629;
+        }
+    </style>
+    <path d="m2 0c-1.108 0-2 .892-2 2v12c0 1.108.892 2 2 2h12c1.108 0 2-.892 2-2v-12c0-1.108-.892-2-2-2zm0 1h12c.554 0 1 .446 1 1v12c0 .554-.446 1-1 1h-12c-.554 0-1-.446-1-1v-12c0-.554.446-1 1-1z" style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text"/>
+    <path d="m8 2 1.1480503 3.2283614 3.0945907-1.4710021-1.471002 3.0945905 3.228361 1.1480502-3.228361 1.1480503 1.471002 3.0945907-3.0945908-1.471002-1.1480502 3.228361-1.1480503-3.228361-3.0945904 1.471002 1.4710021-3.0945908-3.2283614-1.1480502 3.2283614-1.1480503-1.4710021-3.0945904 3.0945905 1.4710021z" fill="#fdbc4b"/>
+</svg>
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/eric7/icons/breeze-light/vcs-update-required.svg	Mon Sep 20 19:47:18 2021 +0200
@@ -0,0 +1,15 @@
+<svg viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg">
+    <style
+        type="text/css"
+        id="current-color-scheme">
+        .ColorScheme-NeutralText {
+            color:#f67400;
+        }
+        .ColorScheme-Text {
+            color:#232629;
+        }
+    </style>
+    <circle style="fill:currentColor;fill-opacity:1;stroke:none" class="ColorScheme-NeutralText" cx="8" cy="8" r="8"/>
+    <path style="fill:currentColor;fill-opacity:0.6;stroke:none" class="ColorScheme-Text" d="M8 0a8 8 0 0 0-8 8 8 8 0 0 0 8 8 8 8 0 0 0 8-8 8 8 0 0 0-8-8zm0 1a7 7 0 0 1 7 7 7 7 0 0 1-7 7 7 7 0 0 1-7-7 7 7 0 0 1 7-7z"/>
+    <path d="M8 1v2a5 5 0 0 0-5 5 5 5 0 0 0 5 5 5 5 0 0 0 5-5h-2a3 3 0 0 1-3 3 3 3 0 0 1-3-3 3 3 0 0 1 3-3v2l4-3z" fill="#fff"/>
+</svg>
Binary file eric7/icons/oxygen/check.png has changed
Binary file eric7/icons/oxygen/vcs-added.png has changed
Binary file eric7/icons/oxygen/vcs-conflicting.png has changed
Binary file eric7/icons/oxygen/vcs-missing.png has changed
Binary file eric7/icons/oxygen/vcs-modified.png has changed
Binary file eric7/icons/oxygen/vcs-removed.png has changed
Binary file eric7/icons/oxygen/vcs-renamed.png has changed
Binary file eric7/icons/oxygen/vcs-untracked.png has changed
Binary file eric7/icons/oxygen/vcs-update-required.png has changed

eric ide

mercurial