Mon, 18 Mar 2019 19:15:57 +0100
EditorHighlightingStylesPage: added a button to reset the sub-styles of a base style to its default values.
--- 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.