EditorKeywordsPage: added the "Default" and "All to Default" buttons to reset one or all keyword sets of a language lexer.

Tue, 19 Mar 2019 19:03:27 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Tue, 19 Mar 2019 19:03:27 +0100
changeset 6880
51f8a56f0b42
parent 6879
a862f60853f9
child 6881
054667c5c270

EditorKeywordsPage: added the "Default" and "All to Default" buttons to reset one or all keyword sets of a language lexer.

Preferences/ConfigurationPages/EditorKeywordsPage.py file | annotate | diff | comparison | revisions
Preferences/ConfigurationPages/EditorKeywordsPage.ui file | annotate | diff | comparison | revisions
changelog file | annotate | diff | comparison | revisions
--- a/Preferences/ConfigurationPages/EditorKeywordsPage.py	Mon Mar 18 19:44:37 2019 +0100
+++ b/Preferences/ConfigurationPages/EditorKeywordsPage.py	Tue Mar 19 19:03:27 2019 +0100
@@ -11,15 +11,14 @@
 
 from PyQt5.QtCore import pyqtSlot
 
+from E5Gui import E5MessageBox
+
 from .ConfigurationPageBase import ConfigurationPageBase
 from .Ui_EditorKeywordsPage import Ui_EditorKeywordsPage
 
 import Preferences
 
 
-# TODO: add set to Default button to load the default kw set
-#       "Default" loads default values for current keyword set
-#       "All to Default" loads default values for all keyword sets
 class EditorKeywordsPage(ConfigurationPageBase, Ui_EditorKeywordsPage):
     """
     Class implementing the editor highlighter keywords configuration page.
@@ -74,9 +73,16 @@
                 for kwSet in range(1, self.MaxKeywordSets + 1):
                     desc = lex.keywordsDescription(kwSet)
                     descriptions.append(desc)
+                defaults = [""]
+                for kwSet in range(1, self.MaxKeywordSets + 1):
+                    dkw = lex.defaultKeywords(kwSet)
+                    if dkw is None:
+                        dkw = ""
+                    defaults.append(dkw)
                 self.__keywords[lang] = {
                     "Sets": keywords,
                     "Descriptions": descriptions,
+                    "DefaultSets": defaults,
                     "MaxSets": lex.maximumKeywordSet(),
                 }
             self.languageCombo.addItem(
@@ -106,6 +112,9 @@
         @param language selected language
         @type str
         """
+        self.defaultButton.setEnabled(bool(language))
+        self.allDefaultButton.setEnabled(bool(language))
+        
         if self.currentLanguage == language:
             return
         
@@ -154,6 +163,46 @@
             self.__keywords[language]["Descriptions"][kwSet]))
         self.keywordsEdit.setPlainText(
             self.__keywords[language]["Sets"][kwSet])
+    
+    @pyqtSlot()
+    def on_defaultButton_clicked(self):
+        """
+        Private slot to set the current keyword set to default values.
+        """
+        if bool(self.keywordsEdit.toPlainText()):
+            ok = E5MessageBox.yesNo(
+                self,
+                self.tr("Reset to Default"),
+                self.tr("Shall the current keyword set really be reset to"
+                        " default values?"))
+        else:
+            ok = True
+        if ok:
+            language = self.languageCombo.currentText()
+            kwSet = self.setSpinBox.value()
+            self.__keywords[language]["Sets"][kwSet] = \
+                self.__keywords[language]["DefaultSets"][kwSet]
+            self.keywordsEdit.setPlainText(
+                self.__keywords[language]["Sets"][kwSet])
+    
+    @pyqtSlot()
+    def on_allDefaultButton_clicked(self):
+        """
+        Private slot to set all keyword sets of the current language to default
+        values.
+        """
+        ok = E5MessageBox.yesNo(
+            self,
+            self.tr("Reset All to Default"),
+            self.tr("Shall all keyword sets of the current language really be"
+                    " reset to default values?"))
+        if ok:
+            language = self.languageCombo.currentText()
+            kwSet = self.setSpinBox.value()
+            self.__keywords[language]["Sets"] = \
+                self.__keywords[language]["DefaultSets"][:]
+            self.keywordsEdit.setPlainText(
+                self.__keywords[language]["Sets"][kwSet])
 
 
 def create(dlg):
--- a/Preferences/ConfigurationPages/EditorKeywordsPage.ui	Mon Mar 18 19:44:37 2019 +0100
+++ b/Preferences/ConfigurationPages/EditorKeywordsPage.ui	Tue Mar 19 19:03:27 2019 +0100
@@ -92,6 +92,30 @@
      </property>
     </widget>
    </item>
+   <item>
+    <layout class="QHBoxLayout" name="horizontalLayout_2">
+     <item>
+      <widget class="QPushButton" name="defaultButton">
+       <property name="toolTip">
+        <string>Press to set the current keyword set to the default value</string>
+       </property>
+       <property name="text">
+        <string>Default</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="allDefaultButton">
+       <property name="toolTip">
+        <string>Press to set the all keyword sets of the selected language to default values</string>
+       </property>
+       <property name="text">
+        <string>All to Defaults</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
   </layout>
  </widget>
  <tabstops>
--- a/changelog	Mon Mar 18 19:44:37 2019 +0100
+++ b/changelog	Tue Mar 19 19:03:27 2019 +0100
@@ -11,6 +11,8 @@
   -- added support for sub-styling (user definable words and their style)
      (see Editor->Highlighters->Styles configuration page)
      (only C++ and Python2/3 lexers support this feature)
+  -- extended the support for keyword sets (see Editor->Highlighters->Keywords
+     configuration page)
 - Email
   -- changed the Google Mail interface to not use obsoleted packages anymore
 - Multi Project

eric ide

mercurial