eric6/Preferences/ConfigurationPages/EditorFilePage.py

branch
maintenance
changeset 6989
8b8cadf8d7e9
parent 6942
2602857055c5
child 7229
53054eb5b15a
equal deleted inserted replaced
6938:7926553b7509 6989:8b8cadf8d7e9
1 # -*- coding: utf-8 -*-
2
3 # Copyright (c) 2006 - 2019 Detlev Offenbach <detlev@die-offenbachs.de>
4 #
5
6 """
7 Module implementing the Editor File Handling configuration page.
8 """
9
10 from __future__ import unicode_literals
11
12 from PyQt5.QtCore import pyqtSlot
13 from PyQt5.QtWidgets import QListWidgetItem, QInputDialog, QLineEdit
14 from PyQt5.Qsci import QsciScintilla
15
16 from E5Gui import E5MessageBox
17
18 from .ConfigurationPageBase import ConfigurationPageBase
19 from .Ui_EditorFilePage import Ui_EditorFilePage
20
21 from Utilities import supportedCodecs
22 import Preferences
23
24
25 class EditorFilePage(ConfigurationPageBase, Ui_EditorFilePage):
26 """
27 Class implementing the Editor File Handling configuration page.
28 """
29 def __init__(self):
30 """
31 Constructor
32 """
33 super(EditorFilePage, self).__init__()
34 self.setupUi(self)
35 self.setObjectName("EditorFilePage")
36
37 self.__showsOpenFilters = True
38 self.openFileFilters = \
39 Preferences.getEditor("AdditionalOpenFilters")[:]
40 self.saveFileFilters = \
41 Preferences.getEditor("AdditionalSaveFilters")[:]
42 self.fileFiltersList.addItems(self.openFileFilters)
43
44 self.__setDefaultFiltersLists()
45
46 self.defaultEncodingComboBox.addItems(sorted(supportedCodecs))
47
48 self.previewMarkdownHTMLFormatComboBox.addItems(
49 ["XHTML1", "HTML4", "HTML5"])
50 self.previewRestDocutilsHTMLFormatComboBox.addItems(
51 ["HTML4", "HTML5"])
52
53 # set initial values
54 self.autosaveSlider.setValue(
55 Preferences.getEditor("AutosaveInterval"))
56 self.createBackupFileCheckBox.setChecked(
57 Preferences.getEditor("CreateBackupFile"))
58 self.defaultEncodingComboBox.setCurrentIndex(
59 self.defaultEncodingComboBox.findText(
60 Preferences.getEditor("DefaultEncoding")))
61 self.advEncodingCheckBox.setChecked(
62 Preferences.getEditor("AdvancedEncodingDetection"))
63 self.warnFilesizeSpinBox.setValue(
64 Preferences.getEditor("WarnFilesize"))
65 self.clearBreakpointsCheckBox.setChecked(
66 Preferences.getEditor("ClearBreaksOnClose"))
67 self.automaticReopenCheckBox.setChecked(
68 Preferences.getEditor("AutoReopen"))
69 self.stripWhitespaceCheckBox.setChecked(
70 Preferences.getEditor("StripTrailingWhitespace"))
71 self.openFilesFilterComboBox.setCurrentIndex(
72 self.openFilesFilterComboBox.findText(
73 Preferences.getEditor("DefaultOpenFilter")))
74 self.saveFilesFilterComboBox.setCurrentIndex(
75 self.saveFilesFilterComboBox.findText(
76 Preferences.getEditor("DefaultSaveFilter")))
77 self.automaticEolConversionCheckBox.setChecked(
78 Preferences.getEditor("AutomaticEOLConversion"))
79 self.insertFinalNewlineCheckBox.setChecked(
80 Preferences.getEditor("InsertFinalNewline"))
81
82 eolMode = Preferences.getEditor("EOLMode")
83 if eolMode == QsciScintilla.EolWindows:
84 self.crlfRadioButton.setChecked(True)
85 elif eolMode == QsciScintilla.EolMac:
86 self.crRadioButton.setChecked(True)
87 elif eolMode == QsciScintilla.EolUnix:
88 self.lfRadioButton.setChecked(True)
89
90 self.previewHtmlExtensionsEdit.setText(
91 " ".join(Preferences.getEditor("PreviewHtmlFileNameExtensions")))
92 self.previewMarkdownExtensionsEdit.setText(
93 " ".join(
94 Preferences.getEditor("PreviewMarkdownFileNameExtensions")))
95 self.previewRestExtensionsEdit.setText(
96 " ".join(Preferences.getEditor("PreviewRestFileNameExtensions")))
97 self.previewQssExtensionsEdit.setText(
98 " ".join(Preferences.getEditor("PreviewQssFileNameExtensions")))
99 self.previewRestSphinxCheckBox.setChecked(
100 Preferences.getEditor("PreviewRestUseSphinx"))
101 self.previewMarkdownNLtoBreakCheckBox.setChecked(
102 Preferences.getEditor("PreviewMarkdownNLtoBR"))
103 index = self.previewMarkdownHTMLFormatComboBox.findText(
104 Preferences.getEditor("PreviewMarkdownHTMLFormat"))
105 self.previewMarkdownHTMLFormatComboBox.setCurrentIndex(index)
106 index = self.previewRestDocutilsHTMLFormatComboBox.findText(
107 Preferences.getEditor("PreviewRestDocutilsHTMLFormat"))
108 self.previewRestDocutilsHTMLFormatComboBox.setCurrentIndex(index)
109
110 def save(self):
111 """
112 Public slot to save the Editor File Handling configuration.
113 """
114 Preferences.setEditor(
115 "AutosaveInterval",
116 self.autosaveSlider.value())
117 Preferences.setEditor(
118 "CreateBackupFile",
119 self.createBackupFileCheckBox.isChecked())
120 enc = self.defaultEncodingComboBox.currentText()
121 if not enc:
122 enc = "utf-8"
123 Preferences.setEditor("DefaultEncoding", enc)
124 Preferences.setEditor(
125 "AdvancedEncodingDetection",
126 self.advEncodingCheckBox.isChecked())
127 Preferences.setEditor(
128 "WarnFilesize",
129 self.warnFilesizeSpinBox.value())
130 Preferences.setEditor(
131 "ClearBreaksOnClose",
132 self.clearBreakpointsCheckBox.isChecked())
133 Preferences.setEditor(
134 "AutoReopen",
135 self.automaticReopenCheckBox.isChecked())
136 Preferences.setEditor(
137 "StripTrailingWhitespace",
138 self.stripWhitespaceCheckBox.isChecked())
139 Preferences.setEditor(
140 "DefaultOpenFilter",
141 self.openFilesFilterComboBox.currentText())
142 Preferences.setEditor(
143 "DefaultSaveFilter",
144 self.saveFilesFilterComboBox.currentText())
145 Preferences.setEditor(
146 "AutomaticEOLConversion",
147 self.automaticEolConversionCheckBox.isChecked())
148 Preferences.setEditor(
149 "InsertFinalNewline",
150 self.insertFinalNewlineCheckBox.isChecked())
151
152 if self.crlfRadioButton.isChecked():
153 Preferences.setEditor("EOLMode", QsciScintilla.EolWindows)
154 elif self.crRadioButton.isChecked():
155 Preferences.setEditor("EOLMode", QsciScintilla.EolMac)
156 elif self.lfRadioButton.isChecked():
157 Preferences.setEditor("EOLMode", QsciScintilla.EolUnix)
158
159 self.__extractFileFilters()
160 Preferences.setEditor("AdditionalOpenFilters", self.openFileFilters)
161 Preferences.setEditor("AdditionalSaveFilters", self.saveFileFilters)
162
163 Preferences.setEditor(
164 "PreviewHtmlFileNameExtensions",
165 [ext.strip() for ext in
166 self.previewHtmlExtensionsEdit.text().split()])
167 Preferences.setEditor(
168 "PreviewMarkdownFileNameExtensions",
169 [ext.strip() for ext in
170 self.previewMarkdownExtensionsEdit.text().split()])
171 Preferences.setEditor(
172 "PreviewRestFileNameExtensions",
173 [ext.strip() for ext in
174 self.previewRestExtensionsEdit.text().split()])
175 Preferences.setEditor(
176 "PreviewQssFileNameExtensions",
177 [ext.strip() for ext in
178 self.previewQssExtensionsEdit.text().split()])
179 Preferences.setEditor(
180 "PreviewRestUseSphinx",
181 self.previewRestSphinxCheckBox.isChecked())
182 Preferences.setEditor(
183 "PreviewMarkdownNLtoBR",
184 self.previewMarkdownNLtoBreakCheckBox.isChecked())
185 Preferences.setEditor(
186 "PreviewMarkdownHTMLFormat",
187 self.previewMarkdownHTMLFormatComboBox.currentText())
188 Preferences.setEditor(
189 "PreviewRestDocutilsHTMLFormat",
190 self.previewRestDocutilsHTMLFormatComboBox.currentText())
191
192 def __setDefaultFiltersLists(self, keepSelection=False):
193 """
194 Private slot to set the default file filter combo boxes.
195
196 @param keepSelection flag indicating to keep the current selection
197 if possible (boolean)
198 """
199 if keepSelection:
200 selectedOpenFilter = self.openFilesFilterComboBox.currentText()
201 selectedSaveFilter = self.saveFilesFilterComboBox.currentText()
202
203 import QScintilla.Lexers
204 openFileFiltersList = QScintilla.Lexers.getOpenFileFiltersList(
205 False, withAdditional=False) + self.openFileFilters
206 openFileFiltersList.sort()
207 self.openFilesFilterComboBox.clear()
208 self.openFilesFilterComboBox.addItems(openFileFiltersList)
209 saveFileFiltersList = QScintilla.Lexers.getSaveFileFiltersList(
210 False, withAdditional=False) + self.saveFileFilters
211 saveFileFiltersList.sort()
212 self.saveFilesFilterComboBox.clear()
213 self.saveFilesFilterComboBox.addItems(saveFileFiltersList)
214
215 if keepSelection:
216 self.openFilesFilterComboBox.setCurrentIndex(
217 self.openFilesFilterComboBox.findText(selectedOpenFilter))
218 self.saveFilesFilterComboBox.setCurrentIndex(
219 self.saveFilesFilterComboBox.findText(selectedSaveFilter))
220
221 def __extractFileFilters(self):
222 """
223 Private method to extract the file filters.
224 """
225 filters = []
226 for row in range(self.fileFiltersList.count()):
227 filters.append(self.fileFiltersList.item(row).text())
228 if self.__showsOpenFilters:
229 self.openFileFilters = filters
230 else:
231 self.saveFileFilters = filters
232
233 def __checkFileFilter(self, fileFilter):
234 """
235 Private method to check a file filter for validity.
236
237 @param fileFilter file filter pattern to check (string)
238 @return flag indicating validity (boolean)
239 """
240 if not self.__showsOpenFilters and \
241 fileFilter.count("*") != 1:
242 E5MessageBox.critical(
243 self,
244 self.tr("Add File Filter"),
245 self.tr("""A Save File Filter must contain exactly one"""
246 """ wildcard pattern. Yours contains {0}.""")
247 .format(fileFilter.count("*")))
248 return False
249
250 if fileFilter.count("*") == 0:
251 E5MessageBox.critical(
252 self,
253 self.tr("Add File Filter"),
254 self.tr("""A File Filter must contain at least one"""
255 """ wildcard pattern."""))
256 return False
257
258 return True
259
260 @pyqtSlot()
261 def on_addFileFilterButton_clicked(self):
262 """
263 Private slot to add a file filter to the list.
264 """
265 fileFilter, ok = QInputDialog.getText(
266 self,
267 self.tr("Add File Filter"),
268 self.tr("Enter the file filter entry:"),
269 QLineEdit.Normal)
270 if ok and fileFilter:
271 if self.__checkFileFilter(fileFilter):
272 self.fileFiltersList.addItem(fileFilter)
273 self.__extractFileFilters()
274 self.__setDefaultFiltersLists(keepSelection=True)
275
276 @pyqtSlot()
277 def on_editFileFilterButton_clicked(self):
278 """
279 Private slot called to edit a file filter entry.
280 """
281 fileFilter = self.fileFiltersList.currentItem().text()
282 fileFilter, ok = QInputDialog.getText(
283 self,
284 self.tr("Add File Filter"),
285 self.tr("Enter the file filter entry:"),
286 QLineEdit.Normal,
287 fileFilter)
288 if ok and fileFilter:
289 if self.__checkFileFilter(fileFilter):
290 self.fileFiltersList.currentItem().setText(fileFilter)
291 self.__extractFileFilters()
292 self.__setDefaultFiltersLists(keepSelection=True)
293
294 @pyqtSlot()
295 def on_deleteFileFilterButton_clicked(self):
296 """
297 Private slot called to delete a file filter entry.
298 """
299 self.fileFiltersList.takeItem(self.fileFiltersList.currentRow())
300 self.__extractFileFilters()
301 self.__setDefaultFiltersLists(keepSelection=True)
302
303 @pyqtSlot(bool)
304 def on_openFiltersButton_toggled(self, checked):
305 """
306 Private slot to switch the list of file filters.
307
308 @param checked flag indicating the check state of the button (boolean)
309 """
310 self.__extractFileFilters()
311 self.__showsOpenFilters = checked
312 self.fileFiltersList.clear()
313 if checked:
314 self.fileFiltersList.addItems(self.openFileFilters)
315 else:
316 self.fileFiltersList.addItems(self.saveFileFilters)
317
318 @pyqtSlot(QListWidgetItem, QListWidgetItem)
319 def on_fileFiltersList_currentItemChanged(self, current, previous):
320 """
321 Private slot to set the state of the edit and delete buttons.
322
323 @param current new current item (QListWidgetItem)
324 @param previous previous current item (QListWidgetItem)
325 """
326 self.editFileFilterButton.setEnabled(current is not None)
327 self.deleteFileFilterButton.setEnabled(current is not None)
328
329
330 def create(dlg):
331 """
332 Module function to create the configuration page.
333
334 @param dlg reference to the configuration dialog
335 @return reference to the instantiated page (ConfigurationPageBase)
336 """
337 page = EditorFilePage()
338 return page

eric ide

mercurial