eric6/Preferences/ConfigurationPages/EditorLanguageTabIndentOverrideDialog.py

changeset 7731
8ec83a027a21
parent 7360
9190402e4505
child 7732
4c9cf117acf6
equal deleted inserted replaced
7730:20b05e846148 7731:8ec83a027a21
5 5
6 """ 6 """
7 Module implementing a dialog to set the tab and indentation width override for 7 Module implementing a dialog to set the tab and indentation width override for
8 a language. 8 a language.
9 """ 9 """
10
11 from pygments.lexers import get_all_lexers
10 12
11 from PyQt5.QtCore import pyqtSlot 13 from PyQt5.QtCore import pyqtSlot
12 from PyQt5.QtWidgets import QDialog, QDialogButtonBox 14 from PyQt5.QtWidgets import QDialog, QDialogButtonBox
13 15
14 from .Ui_EditorLanguageTabIndentOverrideDialog import ( 16 from .Ui_EditorLanguageTabIndentOverrideDialog import (
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()

eric ide

mercurial