EditorHighlightingStylesPage: added a button to reset the sub-styles of a base style to its default values.

Mon, 18 Mar 2019 19:15:57 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Mon, 18 Mar 2019 19:15:57 +0100
changeset 6878
79008f970902
parent 6877
da5d6c7d5348
child 6879
a862f60853f9

EditorHighlightingStylesPage: added a button to reset the sub-styles of a base style to its default values.

Preferences/ConfigurationPages/EditorHighlightingStylesPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui file | annotate | diff | comparison | revisions
Preferences/PreferencesLexer.py file | annotate | diff | comparison | revisions
QScintilla/Lexers/SubstyledLexer.py file | annotate | diff | comparison | revisions
--- a/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py	Mon Mar 18 19:07:10 2019 +0100
+++ b/Preferences/ConfigurationPages/EditorHighlightingStylesPage.py	Mon Mar 18 19:15:57 2019 +0100
@@ -54,6 +54,7 @@
         self.setupUi(self)
         self.setObjectName("EditorHighlightingStylesPage")
         
+        self.defaultSubstylesButton.setIcon(UI.PixmapCache.getIcon("editUndo"))
         self.addSubstyleButton.setIcon(UI.PixmapCache.getIcon("plus"))
         self.deleteSubstyleButton.setIcon(UI.PixmapCache.getIcon("minus"))
         self.editSubstyleButton.setIcon(UI.PixmapCache.getIcon("edit"))
@@ -239,6 +240,8 @@
         self.eolfillCheckBox.setChecked(eolfill)
         
         selectedOne = len(self.styleElementList.selectedItems()) == 1
+        self.defaultSubstylesButton.setEnabled(
+            selectedOne and substyle < 0 and self.lexer.isBaseStyle(style))
         self.addSubstyleButton.setEnabled(
             selectedOne and substyle < 0 and self.lexer.isBaseStyle(style))
         self.deleteSubstyleButton.setEnabled(selectedOne and substyle >= 0)
@@ -742,6 +745,35 @@
         itm.setData(0, self.StyleRole, style)
         itm.setData(0, self.SubstyleRole, newSubstyle)
         self.__styleOneItem(itm, style, newSubstyle)
+    
+    @pyqtSlot()
+    def on_defaultSubstylesButton_clicked(self):
+        """
+        Private slot to reset all substyles to default values.
+        """
+        style, substyle = self.__currentStyles()
+        ok = E5MessageBox.yesNo(
+            self,
+            self.tr("Reset Sub-Styles to Default"),
+            self.tr("<p>Do you really want to reset all defined sub-styles of"
+                    " <b>{0}</b> to the default values?</p>""").format(
+            self.lexer.description(style, substyle)))
+        if ok:
+            # 1. reset sub-styles
+            self.lexer.loadDefaultSubStyles(style)
+            
+            # 2. delete all existing sub-style items
+            parent = self.styleElementList.currentItem()
+            while parent.childCount() > 0:
+                itm = parent.takeChild(0)     # __IGNORE_WARNING__
+                del itm
+            
+            # 3. create the new list of sub-style items
+            for description, _, substyle in self.lexer.getSubStyles(style):
+                itm = QTreeWidgetItem(parent, [description])
+                itm.setData(0, self.StyleRole, style)
+                itm.setData(0, self.SubstyleRole, substyle)
+                self.__styleOneItem(itm, style, substyle)
 
 
 def create(dlg):
--- a/Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui	Mon Mar 18 19:07:10 2019 +0100
+++ b/Preferences/ConfigurationPages/EditorHighlightingStylesPage.ui	Mon Mar 18 19:15:57 2019 +0100
@@ -112,6 +112,13 @@
            </spacer>
           </item>
           <item>
+           <widget class="QToolButton" name="defaultSubstylesButton">
+            <property name="toolTip">
+             <string>Press to set all sub-styles to default values</string>
+            </property>
+           </widget>
+          </item>
+          <item>
            <widget class="QToolButton" name="addSubstyleButton">
             <property name="toolTip">
              <string>Press to add a sub-style to the selected style</string>
@@ -393,6 +400,7 @@
  <tabstops>
   <tabstop>lexerLanguageComboBox</tabstop>
   <tabstop>styleElementList</tabstop>
+  <tabstop>defaultSubstylesButton</tabstop>
   <tabstop>addSubstyleButton</tabstop>
   <tabstop>deleteSubstyleButton</tabstop>
   <tabstop>editSubstyleButton</tabstop>
--- a/Preferences/PreferencesLexer.py	Mon Mar 18 19:07:10 2019 +0100
+++ b/Preferences/PreferencesLexer.py	Mon Mar 18 19:15:57 2019 +0100
@@ -114,6 +114,7 @@
         
         @return list of tuples each containing the description of the style,
             style number and sub-style number (or -1 for no sub-style)
+        @rtype list of tuples of (str, int, int)
         """
         styles = []
         
@@ -129,6 +130,25 @@
         
         return styles
     
+    def getSubStyles(self, style):
+        """
+        Public method to get a list of all sub-styles of a style.
+        
+        @param style style number
+        @type int
+        @return list of tuples each containing the description of the style,
+            style number and sub-style number (or -1 for no sub-style)
+        @rtype list of tuples of (str, int, int)
+        """
+        styles = []
+        
+        if self.isBaseStyle(style):
+            for subStyle in range(self.__lex.substylesCount(style)):
+                desc = self.__lex.substyleDescription(style, subStyle)
+                styles.append((desc, style, subStyle))
+        
+        return styles
+    
     def defaultColor(self, style, substyle=-1):
         """
         Public method to get the default color of a style.
@@ -501,3 +521,12 @@
         @rtype bool
         """
         return self.__lex.delSubstyle(style, substyle)
+    
+    def loadDefaultSubStyles(self, style):
+        """
+        Public method to load the default sub-styles for a given base style.
+        
+        @param style style number
+        @type int
+        """
+        self.__lex.loadDefaultSubStyles(style)
--- a/QScintilla/Lexers/SubstyledLexer.py	Mon Mar 18 19:07:10 2019 +0100
+++ b/QScintilla/Lexers/SubstyledLexer.py	Mon Mar 18 19:15:57 2019 +0100
@@ -50,6 +50,25 @@
         self.__subStyles = {}
         self.__subStylesInitialized = False
     
+    def loadAllDefaultSubStyles(self):
+        """
+        Public method to load the default sub-style definitions.
+        """
+        self.__subStyles = copy.deepcopy(self.defaultSubStyles)
+        
+        self.__subStylesInitialized = True
+    
+    def loadDefaultSubStyles(self, style):
+        """
+        Public method to load the default sub-styles for a given base style.
+        
+        @param style style number
+        @type int
+        """
+        if style in self.defaultSubStyles:
+            self.__subStyles[style] = copy.deepcopy(
+                self.defaultSubStyles[style])
+    
     def loadSubstyles(self):
         """
         Public method to load the sub-styles from the settings file.
@@ -64,7 +83,7 @@
             subStylesDefined |= settings.contains(key)
         # Step 2.1: load default sub-styles, if none were defined
         if not subStylesDefined:
-            self.loadDefaultSubStyles()
+            self.loadAllDefaultSubStyles()
         
         # Step 2.2: load from settings file
         else:
@@ -131,12 +150,6 @@
         
         self.__subStylesInitialized = True
     
-    def loadDefaultSubStyles(self):
-        """
-        Public method to load the default sub-style definitions.
-        """
-        self.__subStyles = copy.deepcopy(self.defaultSubStyles)
-    
     def readSubstyles(self, editor):
         """
         Public method to load the sub-styles and configure the editor.

eric ide

mercurial