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