15 from .Ui_EditorKeywordsPage import Ui_EditorKeywordsPage |
15 from .Ui_EditorKeywordsPage import Ui_EditorKeywordsPage |
16 |
16 |
17 import Preferences |
17 import Preferences |
18 |
18 |
19 |
19 |
|
20 # TODO: add set to Default button to load the default kw set |
20 class EditorKeywordsPage(ConfigurationPageBase, Ui_EditorKeywordsPage): |
21 class EditorKeywordsPage(ConfigurationPageBase, Ui_EditorKeywordsPage): |
21 """ |
22 """ |
22 Class implementing the editor highlighter keywords configuration page. |
23 Class implementing the editor highlighter keywords configuration page. |
23 """ |
24 """ |
|
25 MaxKeywordSets = 8 # max. 8 sets are allowed |
|
26 |
24 def __init__(self): |
27 def __init__(self): |
25 """ |
28 """ |
26 Constructor |
29 Constructor |
27 """ |
30 """ |
28 super(EditorKeywordsPage, self).__init__() |
31 super(EditorKeywordsPage, self).__init__() |
32 # set initial values |
35 # set initial values |
33 import QScintilla.Lexers |
36 import QScintilla.Lexers |
34 from QScintilla.Lexers.LexerContainer import LexerContainer |
37 from QScintilla.Lexers.LexerContainer import LexerContainer |
35 |
38 |
36 self.__keywords = { |
39 self.__keywords = { |
37 "": ["", "", "", "", "", "", "", "", "", ""] |
40 "": { |
38 } |
41 "Sets": [""] * (self.MaxKeywordSets + 1), |
39 self.__maxKeywordSets = { |
42 "Descriptions": [""] * (self.MaxKeywordSets + 1), |
40 "": 0 |
43 "MaxSets": 0, |
|
44 } |
41 } |
45 } |
42 |
46 |
43 languages = sorted( |
47 languages = sorted( |
44 [''] + list(QScintilla.Lexers.getSupportedLanguages().keys())) |
48 [''] + list(QScintilla.Lexers.getSupportedLanguages().keys())) |
45 for lang in languages: |
49 for lang in languages: |
48 if isinstance(lex, LexerContainer): |
52 if isinstance(lex, LexerContainer): |
49 continue |
53 continue |
50 keywords = Preferences.getEditorKeywords(lang)[:] |
54 keywords = Preferences.getEditorKeywords(lang)[:] |
51 if not keywords: |
55 if not keywords: |
52 keywords = [""] |
56 keywords = [""] |
53 for kwSet in range(1, 10): |
57 descriptions = [""] |
|
58 for kwSet in range(1, self.MaxKeywordSets + 1): |
54 kw = lex.keywords(kwSet) |
59 kw = lex.keywords(kwSet) |
55 if kw is None: |
60 if kw is None: |
56 kw = "" |
61 kw = "" |
57 keywords.append(kw) |
62 keywords.append(kw) |
58 self.__keywords[lang] = keywords |
63 descriptions = [""] |
59 self.__maxKeywordSets[lang] = lex.maximumKeywordSet() |
64 for kwSet in range(1, self.MaxKeywordSets + 1): |
|
65 desc = lex.keywordsDescription(kwSet) |
|
66 descriptions.append(desc) |
|
67 self.__keywords[lang] = { |
|
68 "Sets": keywords, |
|
69 "Descriptions": descriptions, |
|
70 "MaxSets": lex.maximumKeywordSet(), |
|
71 } |
60 self.languageCombo.addItem( |
72 self.languageCombo.addItem( |
61 QScintilla.Lexers.getLanguageIcon(lang, False), |
73 QScintilla.Lexers.getLanguageIcon(lang, False), |
62 lang) |
74 lang) |
63 |
75 |
64 self.currentLanguage = '' |
76 self.currentLanguage = '' |
69 """ |
81 """ |
70 Public slot to save the editor highlighter keywords configuration. |
82 Public slot to save the editor highlighter keywords configuration. |
71 """ |
83 """ |
72 lang = self.languageCombo.currentText() |
84 lang = self.languageCombo.currentText() |
73 kwSet = self.setSpinBox.value() |
85 kwSet = self.setSpinBox.value() |
74 self.__keywords[lang][kwSet] = self.keywordsEdit.toPlainText() |
86 self.__keywords[lang]["Sets"][kwSet] = self.keywordsEdit.toPlainText() |
75 |
87 |
76 for lang, keywords in self.__keywords.items(): |
88 for lang, keywords in self.__keywords.items(): |
77 Preferences.setEditorKeywords(lang, keywords) |
89 Preferences.setEditorKeywords(lang, keywords["Sets"]) |
78 |
90 |
79 @pyqtSlot(str) |
91 @pyqtSlot(str) |
80 def on_languageCombo_activated(self, language): |
92 def on_languageCombo_activated(self, language): |
81 """ |
93 """ |
82 Private slot to fill the keywords edit. |
94 Private slot to fill the keywords edit. |
86 if self.currentLanguage == language: |
98 if self.currentLanguage == language: |
87 return |
99 return |
88 |
100 |
89 if self.setSpinBox.value() == 1: |
101 if self.setSpinBox.value() == 1: |
90 self.on_setSpinBox_valueChanged(1) |
102 self.on_setSpinBox_valueChanged(1) |
91 if self.__maxKeywordSets[language]: |
103 if self.__keywords[language]["MaxSets"]: |
92 first = 1 |
104 first = 1 |
93 last = self.__maxKeywordSets[language] |
105 last = self.__keywords[language]["MaxSets"] |
94 else: |
106 else: |
95 first, last = 10, 0 |
107 first, last = self.MaxKeywordSets + 1, 0 |
96 for kwSet in range(1, 10): |
108 for kwSet in range(1, self.MaxKeywordSets + 1): |
97 if self.__keywords[language][kwSet] != "": |
109 if self.__keywords[language]["Descriptions"][kwSet] != "": |
98 first = min(first, kwSet) |
110 first = min(first, kwSet) |
99 last = max(last, kwSet) |
111 last = max(last, kwSet) |
100 self.setSpinBox.setEnabled(language != "" and first < 10) |
112 self.setSpinBox.setEnabled(language != "" and |
101 self.keywordsEdit.setEnabled(language != "" and first < 10) |
113 first <= self.MaxKeywordSets) |
102 if first < 10: |
114 self.keywordsEdit.setEnabled(language != "" and |
|
115 first <= self.MaxKeywordSets) |
|
116 if first <= self.MaxKeywordSets: |
103 self.setSpinBox.setMinimum(first) |
117 self.setSpinBox.setMinimum(first) |
104 self.setSpinBox.setMaximum(last) |
118 self.setSpinBox.setMaximum(last) |
105 self.setSpinBox.setValue(first) |
119 self.setSpinBox.setValue(first) |
106 else: |
120 else: |
107 self.setSpinBox.setMinimum(0) |
121 self.setSpinBox.setMinimum(0) |
117 """ |
131 """ |
118 language = self.languageCombo.currentText() |
132 language = self.languageCombo.currentText() |
119 if self.currentLanguage == language and self.currentSet == kwSet: |
133 if self.currentLanguage == language and self.currentSet == kwSet: |
120 return |
134 return |
121 |
135 |
122 self.__keywords[self.currentLanguage][self.currentSet] = \ |
136 self.__keywords[self.currentLanguage]["Sets"][self.currentSet] = \ |
123 self.keywordsEdit.toPlainText() |
137 self.keywordsEdit.toPlainText() |
124 |
138 |
125 self.currentLanguage = language |
139 self.currentLanguage = language |
126 self.currentSet = kwSet |
140 self.currentSet = kwSet |
127 self.keywordsEdit.setPlainText(self.__keywords[language][kwSet]) |
141 self.setDescriptionLabel.setText( |
|
142 self.__keywords[language]["Descriptions"][kwSet]) |
|
143 self.keywordsEdit.setPlainText( |
|
144 self.__keywords[language]["Sets"][kwSet]) |
128 |
145 |
129 |
146 |
130 def create(dlg): |
147 def create(dlg): |
131 """ |
148 """ |
132 Module function to create the configuration page. |
149 Module function to create the configuration page. |