src/eric7/Preferences/ConfigurationPages/EditorLanguageTabIndentOverrideDialog.py

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

eric ide

mercurial