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 """ |