12 |
12 |
13 from PyQt6.QtCore import pyqtSlot |
13 from PyQt6.QtCore import pyqtSlot |
14 from PyQt6.QtWidgets import QDialog, QDialogButtonBox |
14 from PyQt6.QtWidgets import QDialog, QDialogButtonBox |
15 |
15 |
16 from .Ui_EditorLanguageTabIndentOverrideDialog import ( |
16 from .Ui_EditorLanguageTabIndentOverrideDialog import ( |
17 Ui_EditorLanguageTabIndentOverrideDialog |
17 Ui_EditorLanguageTabIndentOverrideDialog, |
18 ) |
18 ) |
19 |
19 |
20 |
20 |
21 class EditorLanguageTabIndentOverrideDialog( |
21 class EditorLanguageTabIndentOverrideDialog( |
22 QDialog, Ui_EditorLanguageTabIndentOverrideDialog |
22 QDialog, Ui_EditorLanguageTabIndentOverrideDialog |
23 ): |
23 ): |
24 """ |
24 """ |
25 Class implementing a dialog to set the tab and indentation width override |
25 Class implementing a dialog to set the tab and indentation width override |
26 for a language. |
26 for a language. |
27 """ |
27 """ |
|
28 |
28 PygmentsMarker = "Pygments|" |
29 PygmentsMarker = "Pygments|" |
29 |
30 |
30 def __init__(self, *, editMode=False, languages=None, tabWidth=0, |
31 def __init__( |
31 indentWidth=0, parent=None): |
32 self, *, editMode=False, languages=None, tabWidth=0, indentWidth=0, parent=None |
|
33 ): |
32 """ |
34 """ |
33 Constructor |
35 Constructor |
34 |
36 |
35 @keyparam editMode flag indicating the edit mode (Note: in edit mode |
37 @keyparam editMode flag indicating the edit mode (Note: in edit mode |
36 the language is fixed) |
38 the language is fixed) |
37 @type bool |
39 @type bool |
38 @keyparam languages list of existing languages (if in add mode) or |
40 @keyparam languages list of existing languages (if in add mode) or |
39 a list containing the language to be edited |
41 a list containing the language to be edited |
45 @keyparam parent reference to the parent widget |
47 @keyparam parent reference to the parent widget |
46 @type QWidget |
48 @type QWidget |
47 """ |
49 """ |
48 super().__init__(parent) |
50 super().__init__(parent) |
49 self.setupUi(self) |
51 self.setupUi(self) |
50 |
52 |
51 self.__extras = ["-----------", self.tr("Alternative")] |
53 self.__extras = ["-----------", self.tr("Alternative")] |
52 |
54 |
53 if editMode: |
55 if editMode: |
54 self.languageComboBox.addItems(languages) |
56 self.languageComboBox.addItems(languages) |
55 else: |
57 else: |
56 self.__populateLanguages(languages) |
58 self.__populateLanguages(languages) |
57 self.tabWidthSpinBox.setValue(tabWidth) |
59 self.tabWidthSpinBox.setValue(tabWidth) |
58 self.indentWidthSpinBox.setValue(indentWidth) |
60 self.indentWidthSpinBox.setValue(indentWidth) |
59 |
61 |
60 def __populateLanguages(self, filterLanguages): |
62 def __populateLanguages(self, filterLanguages): |
61 """ |
63 """ |
62 Private method to populate the language combo boxes. |
64 Private method to populate the language combo boxes. |
63 |
65 |
64 @param filterLanguages list of languages to be filtered out |
66 @param filterLanguages list of languages to be filtered out |
65 @type list of str |
67 @type list of str |
66 """ |
68 """ |
67 import QScintilla.Lexers |
69 import QScintilla.Lexers |
68 languages = list( |
70 |
69 QScintilla.Lexers.getSupportedLanguages().keys()) |
71 languages = list(QScintilla.Lexers.getSupportedLanguages().keys()) |
70 for lang in filterLanguages: |
72 for lang in filterLanguages: |
71 if lang in languages: |
73 if lang in languages: |
72 languages.remove(lang) |
74 languages.remove(lang) |
73 self.languageComboBox.addItems( |
75 self.languageComboBox.addItems([""] + sorted(languages) + self.__extras) |
74 [""] + sorted(languages) + self.__extras) |
76 |
75 |
|
76 pygmentsLanguages = [lex[0] for lex in get_all_lexers()] |
77 pygmentsLanguages = [lex[0] for lex in get_all_lexers()] |
77 for lang in filterLanguages: |
78 for lang in filterLanguages: |
78 if lang.startswith(self.PygmentsMarker): |
79 if lang.startswith(self.PygmentsMarker): |
79 lang = lang.replace(self.PygmentsMarker, "") |
80 lang = lang.replace(self.PygmentsMarker, "") |
80 if lang in pygmentsLanguages: |
81 if lang in pygmentsLanguages: |
81 pygmentsLanguages.remove(lang) |
82 pygmentsLanguages.remove(lang) |
82 self.pygmentsLexerCombo.addItems([""] + sorted(pygmentsLanguages)) |
83 self.pygmentsLexerCombo.addItems([""] + sorted(pygmentsLanguages)) |
83 |
84 |
84 def getData(self): |
85 def getData(self): |
85 """ |
86 """ |
86 Public method to get the entered data. |
87 Public method to get the entered data. |
87 |
88 |
88 @return tuple containing the language, the tab width and the |
89 @return tuple containing the language, the tab width and the |
89 indentation width |
90 indentation width |
90 @rtype tuple of (str, int, int) |
91 @rtype tuple of (str, int, int) |
91 """ |
92 """ |
92 language = self.languageComboBox.currentText() |
93 language = self.languageComboBox.currentText() |
96 return ( |
97 return ( |
97 language, |
98 language, |
98 self.tabWidthSpinBox.value(), |
99 self.tabWidthSpinBox.value(), |
99 self.indentWidthSpinBox.value(), |
100 self.indentWidthSpinBox.value(), |
100 ) |
101 ) |
101 |
102 |
102 def __updateOkButton(self): |
103 def __updateOkButton(self): |
103 """ |
104 """ |
104 Private method to set the enabled status of the OK button. |
105 Private method to set the enabled status of the OK button. |
105 """ |
106 """ |
106 lang = self.languageComboBox.currentText() |
107 lang = self.languageComboBox.currentText() |
107 if lang in self.__extras: |
108 if lang in self.__extras: |
108 self.buttonBox.button( |
109 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
109 QDialogButtonBox.StandardButton.Ok).setEnabled( |
110 bool(self.pygmentsLexerCombo.currentText()) |
110 bool(self.pygmentsLexerCombo.currentText())) |
111 ) |
111 else: |
112 else: |
112 self.buttonBox.button( |
113 self.buttonBox.button(QDialogButtonBox.StandardButton.Ok).setEnabled( |
113 QDialogButtonBox.StandardButton.Ok).setEnabled( |
114 bool(lang) |
114 bool(lang)) |
115 ) |
115 |
116 |
116 @pyqtSlot(int) |
117 @pyqtSlot(int) |
117 def on_languageComboBox_currentIndexChanged(self, index): |
118 def on_languageComboBox_currentIndexChanged(self, index): |
118 """ |
119 """ |
119 Private slot to handle the selection of a language. |
120 Private slot to handle the selection of a language. |
120 |
121 |
121 @param index index of the current item |
122 @param index index of the current item |
122 @type int |
123 @type int |
123 """ |
124 """ |
124 lang = self.languageComboBox.itemText(index) |
125 lang = self.languageComboBox.itemText(index) |
125 if lang in self.__extras: |
126 if lang in self.__extras: |
126 self.pygmentsLexerCombo.setEnabled(True) |
127 self.pygmentsLexerCombo.setEnabled(True) |
127 self.pygmentsLabel.setEnabled(True) |
128 self.pygmentsLabel.setEnabled(True) |
128 else: |
129 else: |
129 self.pygmentsLexerCombo.setEnabled(False) |
130 self.pygmentsLexerCombo.setEnabled(False) |
130 self.pygmentsLabel.setEnabled(False) |
131 self.pygmentsLabel.setEnabled(False) |
131 |
132 |
132 self.__updateOkButton() |
133 self.__updateOkButton() |
133 |
134 |
134 @pyqtSlot(int) |
135 @pyqtSlot(int) |
135 def on_pygmentsLexerCombo_currentIndexChanged(self, index): |
136 def on_pygmentsLexerCombo_currentIndexChanged(self, index): |
136 """ |
137 """ |
137 Private slot to handle the selection of a language. |
138 Private slot to handle the selection of a language. |
138 |
139 |
139 @param index index of the current item |
140 @param index index of the current item |
140 @type int |
141 @type int |
141 """ |
142 """ |
142 self.__updateOkButton() |
143 self.__updateOkButton() |