src/eric7/Preferences/ConfigurationPages/EditorKeywordsPage.py

branch
eric7
changeset 9221
bf71ee032bb4
parent 9209
b99e7fd55fd3
child 9413
80c06d472826
equal deleted inserted replaced
9220:e9e7eca7efee 9221:bf71ee032bb4
19 19
20 class EditorKeywordsPage(ConfigurationPageBase, Ui_EditorKeywordsPage): 20 class EditorKeywordsPage(ConfigurationPageBase, Ui_EditorKeywordsPage):
21 """ 21 """
22 Class implementing the editor highlighter keywords configuration page. 22 Class implementing the editor highlighter keywords configuration page.
23 """ 23 """
24 MaxKeywordSets = 8 # max. 8 sets are allowed 24
25 25 MaxKeywordSets = 8 # max. 8 sets are allowed
26
26 def __init__(self): 27 def __init__(self):
27 """ 28 """
28 Constructor 29 Constructor
29 """ 30 """
30 super().__init__() 31 super().__init__()
31 self.setupUi(self) 32 self.setupUi(self)
32 self.setObjectName("EditorKeywordsPage") 33 self.setObjectName("EditorKeywordsPage")
33 34
34 # set initial values 35 # set initial values
35 import QScintilla.Lexers 36 import QScintilla.Lexers
36 from QScintilla.Lexers.LexerContainer import LexerContainer 37 from QScintilla.Lexers.LexerContainer import LexerContainer
37 38
38 self.__keywords = { 39 self.__keywords = {
39 "": { 40 "": {
40 "Sets": [""] * (self.MaxKeywordSets + 1), 41 "Sets": [""] * (self.MaxKeywordSets + 1),
41 "Descriptions": [""] * (self.MaxKeywordSets + 1), 42 "Descriptions": [""] * (self.MaxKeywordSets + 1),
42 "MaxSets": 0, 43 "MaxSets": 0,
43 } 44 }
44 } 45 }
45 46
46 languages = sorted( 47 languages = sorted(
47 [''] + list(QScintilla.Lexers.getSupportedLanguages().keys())) 48 [""] + list(QScintilla.Lexers.getSupportedLanguages().keys())
49 )
48 for lang in languages: 50 for lang in languages:
49 if lang: 51 if lang:
50 lex = QScintilla.Lexers.getLexer(lang) 52 lex = QScintilla.Lexers.getLexer(lang)
51 if isinstance(lex, LexerContainer): 53 if isinstance(lex, LexerContainer):
52 continue 54 continue
82 "Descriptions": descriptions, 84 "Descriptions": descriptions,
83 "DefaultSets": defaults, 85 "DefaultSets": defaults,
84 "MaxSets": lex.maximumKeywordSet(), 86 "MaxSets": lex.maximumKeywordSet(),
85 } 87 }
86 self.languageCombo.addItem( 88 self.languageCombo.addItem(
87 QScintilla.Lexers.getLanguageIcon(lang, False), 89 QScintilla.Lexers.getLanguageIcon(lang, False), lang
88 lang) 90 )
89 91
90 self.currentLanguage = '' 92 self.currentLanguage = ""
91 self.currentSet = 1 93 self.currentSet = 1
92 self.on_languageCombo_activated(0) 94 self.on_languageCombo_activated(0)
93 95
94 def save(self): 96 def save(self):
95 """ 97 """
96 Public slot to save the editor highlighter keywords configuration. 98 Public slot to save the editor highlighter keywords configuration.
97 """ 99 """
98 lang = self.languageCombo.currentText() 100 lang = self.languageCombo.currentText()
99 kwSet = self.setSpinBox.value() 101 kwSet = self.setSpinBox.value()
100 self.__keywords[lang]["Sets"][kwSet] = self.keywordsEdit.toPlainText() 102 self.__keywords[lang]["Sets"][kwSet] = self.keywordsEdit.toPlainText()
101 103
102 for lang, keywords in self.__keywords.items(): 104 for lang, keywords in self.__keywords.items():
103 Preferences.setEditorKeywords(lang, keywords["Sets"]) 105 Preferences.setEditorKeywords(lang, keywords["Sets"])
104 106
105 @pyqtSlot(int) 107 @pyqtSlot(int)
106 def on_languageCombo_activated(self, index): 108 def on_languageCombo_activated(self, index):
107 """ 109 """
108 Private slot to fill the keywords edit. 110 Private slot to fill the keywords edit.
109 111
110 @param index index of the selected entry 112 @param index index of the selected entry
111 @type int 113 @type int
112 """ 114 """
113 language = self.languageCombo.itemText(index) 115 language = self.languageCombo.itemText(index)
114 116
115 self.defaultButton.setEnabled(bool(language)) 117 self.defaultButton.setEnabled(bool(language))
116 self.allDefaultButton.setEnabled(bool(language)) 118 self.allDefaultButton.setEnabled(bool(language))
117 119
118 if self.currentLanguage == language: 120 if self.currentLanguage == language:
119 return 121 return
120 122
121 if self.setSpinBox.value() == 1: 123 if self.setSpinBox.value() == 1:
122 self.on_setSpinBox_valueChanged(1) 124 self.on_setSpinBox_valueChanged(1)
123 if self.__keywords[language]["MaxSets"]: 125 if self.__keywords[language]["MaxSets"]:
124 first = 1 126 first = 1
125 last = self.__keywords[language]["MaxSets"] 127 last = self.__keywords[language]["MaxSets"]
127 first, last = self.MaxKeywordSets + 1, 0 129 first, last = self.MaxKeywordSets + 1, 0
128 for kwSet in range(1, self.MaxKeywordSets + 1): 130 for kwSet in range(1, self.MaxKeywordSets + 1):
129 if self.__keywords[language]["Descriptions"][kwSet] != "": 131 if self.__keywords[language]["Descriptions"][kwSet] != "":
130 first = min(first, kwSet) 132 first = min(first, kwSet)
131 last = max(last, kwSet) 133 last = max(last, kwSet)
132 self.setSpinBox.setEnabled(language != "" and 134 self.setSpinBox.setEnabled(language != "" and first <= self.MaxKeywordSets)
133 first <= self.MaxKeywordSets) 135 self.keywordsEdit.setEnabled(language != "" and first <= self.MaxKeywordSets)
134 self.keywordsEdit.setEnabled(language != "" and
135 first <= self.MaxKeywordSets)
136 if first <= self.MaxKeywordSets: 136 if first <= self.MaxKeywordSets:
137 self.setSpinBox.setMinimum(first) 137 self.setSpinBox.setMinimum(first)
138 self.setSpinBox.setMaximum(last) 138 self.setSpinBox.setMaximum(last)
139 self.setSpinBox.setValue(first) 139 self.setSpinBox.setValue(first)
140 else: 140 else:
141 self.setSpinBox.setMinimum(0) 141 self.setSpinBox.setMinimum(0)
142 self.setSpinBox.setMaximum(0) 142 self.setSpinBox.setMaximum(0)
143 self.setSpinBox.setValue(0) 143 self.setSpinBox.setValue(0)
144 144
145 @pyqtSlot(int) 145 @pyqtSlot(int)
146 def on_setSpinBox_valueChanged(self, kwSet): 146 def on_setSpinBox_valueChanged(self, kwSet):
147 """ 147 """
148 Private slot to fill the keywords edit. 148 Private slot to fill the keywords edit.
149 149
150 @param kwSet number of the selected keyword set 150 @param kwSet number of the selected keyword set
151 @type int 151 @type int
152 """ 152 """
153 language = self.languageCombo.currentText() 153 language = self.languageCombo.currentText()
154 if self.currentLanguage == language and self.currentSet == kwSet: 154 if self.currentLanguage == language and self.currentSet == kwSet:
155 return 155 return
156 156
157 self.__keywords[self.currentLanguage]["Sets"][self.currentSet] = ( 157 self.__keywords[self.currentLanguage]["Sets"][
158 self.keywordsEdit.toPlainText() 158 self.currentSet
159 ) 159 ] = self.keywordsEdit.toPlainText()
160 160
161 self.currentLanguage = language 161 self.currentLanguage = language
162 self.currentSet = kwSet 162 self.currentSet = kwSet
163 self.setDescriptionLabel.setText("<b>{0}</b>".format( 163 self.setDescriptionLabel.setText(
164 self.__keywords[language]["Descriptions"][kwSet])) 164 "<b>{0}</b>".format(self.__keywords[language]["Descriptions"][kwSet])
165 self.keywordsEdit.setPlainText( 165 )
166 self.__keywords[language]["Sets"][kwSet]) 166 self.keywordsEdit.setPlainText(self.__keywords[language]["Sets"][kwSet])
167 167
168 @pyqtSlot() 168 @pyqtSlot()
169 def on_defaultButton_clicked(self): 169 def on_defaultButton_clicked(self):
170 """ 170 """
171 Private slot to set the current keyword set to default values. 171 Private slot to set the current keyword set to default values.
172 """ 172 """
173 ok = ( 173 ok = (
174 EricMessageBox.yesNo( 174 EricMessageBox.yesNo(
175 self, 175 self,
176 self.tr("Reset to Default"), 176 self.tr("Reset to Default"),
177 self.tr("Shall the current keyword set really be reset to" 177 self.tr(
178 " default values?")) 178 "Shall the current keyword set really be reset to"
179 if bool(self.keywordsEdit.toPlainText()) else 179 " default values?"
180 True 180 ),
181 )
182 if bool(self.keywordsEdit.toPlainText())
183 else True
181 ) 184 )
182 if ok: 185 if ok:
183 language = self.languageCombo.currentText() 186 language = self.languageCombo.currentText()
184 kwSet = self.setSpinBox.value() 187 kwSet = self.setSpinBox.value()
185 self.__keywords[language]["Sets"][kwSet] = ( 188 self.__keywords[language]["Sets"][kwSet] = self.__keywords[language][
186 self.__keywords[language]["DefaultSets"][kwSet] 189 "DefaultSets"
187 ) 190 ][kwSet]
188 self.keywordsEdit.setPlainText( 191 self.keywordsEdit.setPlainText(self.__keywords[language]["Sets"][kwSet])
189 self.__keywords[language]["Sets"][kwSet]) 192
190
191 @pyqtSlot() 193 @pyqtSlot()
192 def on_allDefaultButton_clicked(self): 194 def on_allDefaultButton_clicked(self):
193 """ 195 """
194 Private slot to set all keyword sets of the current language to default 196 Private slot to set all keyword sets of the current language to default
195 values. 197 values.
196 """ 198 """
197 ok = EricMessageBox.yesNo( 199 ok = EricMessageBox.yesNo(
198 self, 200 self,
199 self.tr("Reset All to Default"), 201 self.tr("Reset All to Default"),
200 self.tr("Shall all keyword sets of the current language really be" 202 self.tr(
201 " reset to default values?")) 203 "Shall all keyword sets of the current language really be"
204 " reset to default values?"
205 ),
206 )
202 if ok: 207 if ok:
203 language = self.languageCombo.currentText() 208 language = self.languageCombo.currentText()
204 kwSet = self.setSpinBox.value() 209 kwSet = self.setSpinBox.value()
205 self.__keywords[language]["Sets"] = ( 210 self.__keywords[language]["Sets"] = self.__keywords[language][
206 self.__keywords[language]["DefaultSets"][:] 211 "DefaultSets"
207 ) 212 ][:]
208 self.keywordsEdit.setPlainText( 213 self.keywordsEdit.setPlainText(self.__keywords[language]["Sets"][kwSet])
209 self.__keywords[language]["Sets"][kwSet])
210 214
211 215
212 def create(dlg): 216 def create(dlg):
213 """ 217 """
214 Module function to create the configuration page. 218 Module function to create the configuration page.
215 219
216 @param dlg reference to the configuration dialog 220 @param dlg reference to the configuration dialog
217 @type ConfigurationWidget 221 @type ConfigurationWidget
218 @return reference to the instantiated page 222 @return reference to the instantiated page
219 @rtype ConfigurationPageBase 223 @rtype ConfigurationPageBase
220 """ 224 """

eric ide

mercurial