|
1 # -*- coding: utf-8 -*- |
|
2 |
|
3 # Copyright (c) 2006 - 2019 Detlev Offenbach <detlev@die-offenbachs.de> |
|
4 # |
|
5 |
|
6 """ |
|
7 Module implementing the Interface configuration page. |
|
8 """ |
|
9 |
|
10 from __future__ import unicode_literals |
|
11 |
|
12 import glob |
|
13 import os |
|
14 |
|
15 from PyQt5.QtCore import pyqtSlot, QTranslator |
|
16 from PyQt5.QtWidgets import QStyleFactory |
|
17 |
|
18 from E5Gui.E5PathPicker import E5PathPickerModes |
|
19 |
|
20 from .ConfigurationPageBase import ConfigurationPageBase |
|
21 from .Ui_InterfacePage import Ui_InterfacePage |
|
22 |
|
23 import Preferences |
|
24 import Utilities |
|
25 |
|
26 from eric6config import getConfig |
|
27 |
|
28 |
|
29 class InterfacePage(ConfigurationPageBase, Ui_InterfacePage): |
|
30 """ |
|
31 Class implementing the Interface configuration page. |
|
32 """ |
|
33 def __init__(self): |
|
34 """ |
|
35 Constructor |
|
36 """ |
|
37 super(InterfacePage, self).__init__() |
|
38 self.setupUi(self) |
|
39 self.setObjectName("InterfacePage") |
|
40 |
|
41 self.styleSheetPicker.setMode(E5PathPickerModes.OpenFileMode) |
|
42 self.styleSheetPicker.setFilters(self.tr( |
|
43 "Qt Style Sheets (*.qss);;Cascading Style Sheets (*.css);;" |
|
44 "All files (*)")) |
|
45 self.styleSheetPicker.setDefaultDirectory(getConfig("ericStylesDir")) |
|
46 |
|
47 # set initial values |
|
48 self.__populateStyleCombo() |
|
49 self.__populateLanguageCombo() |
|
50 |
|
51 self.uiBrowsersListFoldersFirstCheckBox.setChecked( |
|
52 Preferences.getUI("BrowsersListFoldersFirst")) |
|
53 self.uiBrowsersHideNonPublicCheckBox.setChecked( |
|
54 Preferences.getUI("BrowsersHideNonPublic")) |
|
55 self.uiBrowsersSortByOccurrenceCheckBox.setChecked( |
|
56 Preferences.getUI("BrowsersListContentsByOccurrence")) |
|
57 self.uiBrowsersShowHiddenCheckBox.setChecked( |
|
58 Preferences.getUI("BrowsersListHiddenFiles")) |
|
59 self.fileFiltersEdit.setText( |
|
60 Preferences.getUI("BrowsersFileFilters")) |
|
61 |
|
62 self.uiCaptionShowsFilenameGroupBox.setChecked( |
|
63 Preferences.getUI("CaptionShowsFilename")) |
|
64 self.filenameLengthSpinBox.setValue( |
|
65 Preferences.getUI("CaptionFilenameLength")) |
|
66 self.styleSheetPicker.setText(Preferences.getUI("StyleSheet")) |
|
67 |
|
68 if Preferences.getUI("TopLeftByLeft"): |
|
69 self.tlLeftButton.setChecked(True) |
|
70 else: |
|
71 self.tlTopButton.setChecked(True) |
|
72 if Preferences.getUI("BottomLeftByLeft"): |
|
73 self.blLeftButton.setChecked(True) |
|
74 else: |
|
75 self.blBottomButton.setChecked(True) |
|
76 if Preferences.getUI("TopRightByRight"): |
|
77 self.trRightButton.setChecked(True) |
|
78 else: |
|
79 self.trTopButton.setChecked(True) |
|
80 if Preferences.getUI("BottomRightByRight"): |
|
81 self.brRightButton.setChecked(True) |
|
82 else: |
|
83 self.brTopButton.setChecked(True) |
|
84 |
|
85 layoutType = Preferences.getUI("LayoutType") |
|
86 if layoutType == "Sidebars": |
|
87 index = 0 |
|
88 elif layoutType == "Toolboxes": |
|
89 index = 1 |
|
90 else: |
|
91 index = 0 # default for bad values |
|
92 self.layoutComboBox.setCurrentIndex(index) |
|
93 |
|
94 # integrated tools activation |
|
95 # left side |
|
96 self.templateViewerCheckBox.setChecked( |
|
97 Preferences.getUI("ShowTemplateViewer")) |
|
98 self.fileBrowserCheckBox.setChecked( |
|
99 Preferences.getUI("ShowFileBrowser")) |
|
100 self.symbolsCheckBox.setChecked( |
|
101 Preferences.getUI("ShowSymbolsViewer")) |
|
102 # right side |
|
103 self.codeDocumentationViewerCheckBox.setChecked( |
|
104 Preferences.getUI("ShowCodeDocumentationViewer")) |
|
105 self.pypiCheckBox.setChecked( |
|
106 Preferences.getUI("ShowPyPIPackageManager")) |
|
107 self.condaCheckBox.setChecked( |
|
108 Preferences.getUI("ShowCondaPackageManager")) |
|
109 self.cooperationCheckBox.setChecked( |
|
110 Preferences.getUI("ShowCooperation")) |
|
111 self.ircCheckBox.setChecked( |
|
112 Preferences.getUI("ShowIrc")) |
|
113 # bottom side |
|
114 self.numbersCheckBox.setChecked( |
|
115 Preferences.getUI("ShowNumbersViewer")) |
|
116 |
|
117 self.tabsGroupBox.setEnabled(True) |
|
118 self.tabsCloseButtonCheckBox.setChecked( |
|
119 Preferences.getUI("SingleCloseButton")) |
|
120 |
|
121 self.delaySpinBox.setValue(Preferences.getUI("SidebarDelay")) |
|
122 |
|
123 def save(self): |
|
124 """ |
|
125 Public slot to save the Interface configuration. |
|
126 """ |
|
127 # save the style settings |
|
128 styleIndex = self.styleComboBox.currentIndex() |
|
129 style = self.styleComboBox.itemData(styleIndex) |
|
130 Preferences.setUI("Style", style) |
|
131 |
|
132 # save the other UI related settings |
|
133 Preferences.setUI( |
|
134 "BrowsersListFoldersFirst", |
|
135 self.uiBrowsersListFoldersFirstCheckBox.isChecked()) |
|
136 Preferences.setUI( |
|
137 "BrowsersHideNonPublic", |
|
138 self.uiBrowsersHideNonPublicCheckBox.isChecked()) |
|
139 Preferences.setUI( |
|
140 "BrowsersListContentsByOccurrence", |
|
141 self.uiBrowsersSortByOccurrenceCheckBox.isChecked()) |
|
142 Preferences.setUI( |
|
143 "BrowsersListHiddenFiles", |
|
144 self.uiBrowsersShowHiddenCheckBox.isChecked()) |
|
145 Preferences.setUI( |
|
146 "BrowsersFileFilters", |
|
147 self.fileFiltersEdit.text()) |
|
148 |
|
149 Preferences.setUI( |
|
150 "CaptionShowsFilename", |
|
151 self.uiCaptionShowsFilenameGroupBox.isChecked()) |
|
152 Preferences.setUI( |
|
153 "CaptionFilenameLength", |
|
154 self.filenameLengthSpinBox.value()) |
|
155 Preferences.setUI( |
|
156 "StyleSheet", |
|
157 self.styleSheetPicker.text()) |
|
158 |
|
159 # save the dockarea corner settings |
|
160 Preferences.setUI( |
|
161 "TopLeftByLeft", |
|
162 self.tlLeftButton.isChecked()) |
|
163 Preferences.setUI( |
|
164 "BottomLeftByLeft", |
|
165 self.blLeftButton.isChecked()) |
|
166 Preferences.setUI( |
|
167 "TopRightByRight", |
|
168 self.trRightButton.isChecked()) |
|
169 Preferences.setUI( |
|
170 "BottomRightByRight", |
|
171 self.brRightButton.isChecked()) |
|
172 |
|
173 # save the language settings |
|
174 uiLanguageIndex = self.languageComboBox.currentIndex() |
|
175 if uiLanguageIndex: |
|
176 uiLanguage = \ |
|
177 self.languageComboBox.itemData(uiLanguageIndex) |
|
178 else: |
|
179 uiLanguage = None |
|
180 Preferences.setUILanguage(uiLanguage) |
|
181 |
|
182 # save the interface layout settings |
|
183 if self.layoutComboBox.currentIndex() == 0: |
|
184 layoutType = "Sidebars" |
|
185 elif self.layoutComboBox.currentIndex() == 1: |
|
186 layoutType = "Toolboxes" |
|
187 else: |
|
188 layoutType = "Sidebars" # just in case |
|
189 Preferences.setUI("LayoutType", layoutType) |
|
190 |
|
191 # save the integrated tools activation |
|
192 # left side |
|
193 Preferences.setUI( |
|
194 "ShowTemplateViewer", |
|
195 self.templateViewerCheckBox.isChecked()) |
|
196 Preferences.setUI( |
|
197 "ShowFileBrowser", |
|
198 self.fileBrowserCheckBox.isChecked()) |
|
199 Preferences.setUI( |
|
200 "ShowSymbolsViewer", |
|
201 self.symbolsCheckBox.isChecked()) |
|
202 # right side |
|
203 Preferences.setUI( |
|
204 "ShowCodeDocumentationViewer", |
|
205 self.codeDocumentationViewerCheckBox.isChecked()) |
|
206 Preferences.setUI( |
|
207 "ShowPyPIPackageManager", |
|
208 self.pypiCheckBox.isChecked()) |
|
209 Preferences.setUI( |
|
210 "ShowCondaPackageManager", |
|
211 self.condaCheckBox.isChecked()) |
|
212 Preferences.setUI( |
|
213 "ShowCooperation", |
|
214 self.cooperationCheckBox.isChecked()) |
|
215 Preferences.setUI( |
|
216 "ShowIrc", |
|
217 self.ircCheckBox.isChecked()) |
|
218 # bottom side |
|
219 Preferences.setUI( |
|
220 "ShowNumbersViewer", |
|
221 self.numbersCheckBox.isChecked()) |
|
222 |
|
223 Preferences.setUI( |
|
224 "SingleCloseButton", |
|
225 self.tabsCloseButtonCheckBox.isChecked()) |
|
226 |
|
227 Preferences.setUI("SidebarDelay", self.delaySpinBox.value()) |
|
228 |
|
229 def __populateStyleCombo(self): |
|
230 """ |
|
231 Private method to populate the style combo box. |
|
232 """ |
|
233 curStyle = Preferences.getUI("Style") |
|
234 styles = sorted(list(QStyleFactory.keys())) |
|
235 self.styleComboBox.addItem(self.tr('System'), "System") |
|
236 for style in styles: |
|
237 self.styleComboBox.addItem(style, style) |
|
238 currentIndex = self.styleComboBox.findData(curStyle) |
|
239 if currentIndex == -1: |
|
240 currentIndex = 0 |
|
241 self.styleComboBox.setCurrentIndex(currentIndex) |
|
242 |
|
243 def __populateLanguageCombo(self): |
|
244 """ |
|
245 Private method to initialize the language combobox of the Interface |
|
246 configuration page. |
|
247 """ |
|
248 self.languageComboBox.clear() |
|
249 |
|
250 fnlist = glob.glob("eric6_*.qm") + \ |
|
251 glob.glob(os.path.join( |
|
252 getConfig('ericTranslationsDir'), "eric6_*.qm")) + \ |
|
253 glob.glob(os.path.join(Utilities.getConfigDir(), "eric6_*.qm")) |
|
254 locales = {} |
|
255 for fn in fnlist: |
|
256 locale = os.path.basename(fn)[6:-3] |
|
257 if locale not in locales: |
|
258 translator = QTranslator() |
|
259 translator.load(fn) |
|
260 locales[locale] = translator.translate( |
|
261 "InterfacePage", "English", |
|
262 "Translate this with your language") + \ |
|
263 " ({0})".format(locale) |
|
264 localeList = sorted(list(locales.keys())) |
|
265 try: |
|
266 uiLanguage = Preferences.getUILanguage() |
|
267 if uiLanguage == "None" or uiLanguage is None: |
|
268 currentIndex = 0 |
|
269 elif uiLanguage == "System": |
|
270 currentIndex = 1 |
|
271 else: |
|
272 currentIndex = localeList.index(uiLanguage) + 2 |
|
273 except ValueError: |
|
274 currentIndex = 0 |
|
275 self.languageComboBox.clear() |
|
276 |
|
277 self.languageComboBox.addItem("English (default)", "None") |
|
278 self.languageComboBox.addItem(self.tr('System'), "System") |
|
279 for locale in localeList: |
|
280 self.languageComboBox.addItem(locales[locale], locale) |
|
281 self.languageComboBox.setCurrentIndex(currentIndex) |
|
282 |
|
283 @pyqtSlot() |
|
284 def on_resetLayoutButton_clicked(self): |
|
285 """ |
|
286 Private method to reset layout to factory defaults. |
|
287 """ |
|
288 Preferences.resetLayout() |
|
289 |
|
290 |
|
291 def create(dlg): |
|
292 """ |
|
293 Module function to create the configuration page. |
|
294 |
|
295 @param dlg reference to the configuration dialog |
|
296 @return reference to the instantiated page (ConfigurationPageBase) |
|
297 """ |
|
298 page = InterfacePage() |
|
299 return page |