--- a/src/eric7/Preferences/ConfigurationPages/EditorFilePage.py Wed Jul 13 11:16:20 2022 +0200 +++ b/src/eric7/Preferences/ConfigurationPages/EditorFilePage.py Wed Jul 13 14:55:47 2022 +0200 @@ -28,6 +28,7 @@ """ Class implementing the Editor File Handling configuration page. """ + def __init__(self): """ Constructor @@ -35,52 +36,57 @@ super().__init__() self.setupUi(self) self.setObjectName("EditorFilePage") - + self.__showsOpenFilters = True - self.openFileFilters = Preferences.getEditor( - "AdditionalOpenFilters")[:] - self.saveFileFilters = Preferences.getEditor( - "AdditionalSaveFilters")[:] + self.openFileFilters = Preferences.getEditor("AdditionalOpenFilters")[:] + self.saveFileFilters = Preferences.getEditor("AdditionalSaveFilters")[:] self.fileFiltersList.addItems(self.openFileFilters) - + self.__setDefaultFiltersLists() - + self.defaultEncodingComboBox.addItems(sorted(supportedCodecs)) - - self.previewMarkdownHTMLFormatComboBox.addItems( - ["XHTML1", "HTML4", "HTML5"]) - self.previewRestDocutilsHTMLFormatComboBox.addItems( - ["HTML4", "HTML5"]) - + + self.previewMarkdownHTMLFormatComboBox.addItems(["XHTML1", "HTML4", "HTML5"]) + self.previewRestDocutilsHTMLFormatComboBox.addItems(["HTML4", "HTML5"]) + # set initial values - self.autosaveSlider.setValue( - Preferences.getEditor("AutosaveInterval")) + self.autosaveSlider.setValue(Preferences.getEditor("AutosaveInterval")) self.createBackupFileCheckBox.setChecked( - Preferences.getEditor("CreateBackupFile")) + Preferences.getEditor("CreateBackupFile") + ) self.defaultEncodingComboBox.setCurrentIndex( self.defaultEncodingComboBox.findText( - Preferences.getEditor("DefaultEncoding"))) + Preferences.getEditor("DefaultEncoding") + ) + ) self.advEncodingCheckBox.setChecked( - Preferences.getEditor("AdvancedEncodingDetection")) - self.warnFilesizeSpinBox.setValue( - Preferences.getEditor("WarnFilesize")) + Preferences.getEditor("AdvancedEncodingDetection") + ) + self.warnFilesizeSpinBox.setValue(Preferences.getEditor("WarnFilesize")) self.clearBreakpointsCheckBox.setChecked( - Preferences.getEditor("ClearBreaksOnClose")) - self.automaticReopenCheckBox.setChecked( - Preferences.getEditor("AutoReopen")) + Preferences.getEditor("ClearBreaksOnClose") + ) + self.automaticReopenCheckBox.setChecked(Preferences.getEditor("AutoReopen")) self.stripWhitespaceCheckBox.setChecked( - Preferences.getEditor("StripTrailingWhitespace")) + Preferences.getEditor("StripTrailingWhitespace") + ) self.openFilesFilterComboBox.setCurrentIndex( self.openFilesFilterComboBox.findText( - Preferences.getEditor("DefaultOpenFilter"))) + Preferences.getEditor("DefaultOpenFilter") + ) + ) self.saveFilesFilterComboBox.setCurrentIndex( self.saveFilesFilterComboBox.findText( - Preferences.getEditor("DefaultSaveFilter"))) + Preferences.getEditor("DefaultSaveFilter") + ) + ) self.automaticEolConversionCheckBox.setChecked( - Preferences.getEditor("AutomaticEOLConversion")) + Preferences.getEditor("AutomaticEOLConversion") + ) self.insertFinalNewlineCheckBox.setChecked( - Preferences.getEditor("InsertFinalNewline")) - + Preferences.getEditor("InsertFinalNewline") + ) + eolMode = Preferences.getEditor("EOLMode") if eolMode == QsciScintilla.EolMode.EolWindows: self.crlfRadioButton.setChecked(True) @@ -88,166 +94,181 @@ self.crRadioButton.setChecked(True) elif eolMode == QsciScintilla.EolMode.EolUnix: self.lfRadioButton.setChecked(True) - + self.previewRefreshTimeoutSpinBox.setValue( - Preferences.getEditor("PreviewRefreshWaitTimer")) - + Preferences.getEditor("PreviewRefreshWaitTimer") + ) + self.previewHtmlExtensionsEdit.setText( - " ".join(Preferences.getEditor("PreviewHtmlFileNameExtensions"))) - + " ".join(Preferences.getEditor("PreviewHtmlFileNameExtensions")) + ) + self.previewMarkdownExtensionsEdit.setText( - " ".join( - Preferences.getEditor("PreviewMarkdownFileNameExtensions"))) + " ".join(Preferences.getEditor("PreviewMarkdownFileNameExtensions")) + ) self.previewRestSphinxCheckBox.setChecked( - Preferences.getEditor("PreviewRestUseSphinx")) + Preferences.getEditor("PreviewRestUseSphinx") + ) self.previewMarkdownNLtoBreakCheckBox.setChecked( - Preferences.getEditor("PreviewMarkdownNLtoBR")) + Preferences.getEditor("PreviewMarkdownNLtoBR") + ) self.previewMarkdownPyMdownCheckBox.setChecked( - Preferences.getEditor("PreviewMarkdownUsePyMdownExtensions")) + Preferences.getEditor("PreviewMarkdownUsePyMdownExtensions") + ) self.previewMarkdownMathJaxCheckBox.setChecked( - Preferences.getEditor("PreviewMarkdownMathJax")) + Preferences.getEditor("PreviewMarkdownMathJax") + ) self.previewMarkdownMermaidCheckBox.setChecked( - Preferences.getEditor("PreviewMarkdownMermaid")) + Preferences.getEditor("PreviewMarkdownMermaid") + ) index = self.previewMarkdownHTMLFormatComboBox.findText( - Preferences.getEditor("PreviewMarkdownHTMLFormat")) + Preferences.getEditor("PreviewMarkdownHTMLFormat") + ) self.previewMarkdownHTMLFormatComboBox.setCurrentIndex(index) - + self.previewRestExtensionsEdit.setText( - " ".join(Preferences.getEditor("PreviewRestFileNameExtensions"))) + " ".join(Preferences.getEditor("PreviewRestFileNameExtensions")) + ) index = self.previewRestDocutilsHTMLFormatComboBox.findText( - Preferences.getEditor("PreviewRestDocutilsHTMLFormat")) + Preferences.getEditor("PreviewRestDocutilsHTMLFormat") + ) self.previewRestDocutilsHTMLFormatComboBox.setCurrentIndex(index) - + self.previewQssExtensionsEdit.setText( - " ".join(Preferences.getEditor("PreviewQssFileNameExtensions"))) - + " ".join(Preferences.getEditor("PreviewQssFileNameExtensions")) + ) + def save(self): """ Public slot to save the Editor File Handling configuration. """ + Preferences.setEditor("AutosaveInterval", self.autosaveSlider.value()) Preferences.setEditor( - "AutosaveInterval", - self.autosaveSlider.value()) - Preferences.setEditor( - "CreateBackupFile", - self.createBackupFileCheckBox.isChecked()) + "CreateBackupFile", self.createBackupFileCheckBox.isChecked() + ) enc = self.defaultEncodingComboBox.currentText() if not enc: enc = "utf-8" Preferences.setEditor("DefaultEncoding", enc) Preferences.setEditor( - "AdvancedEncodingDetection", - self.advEncodingCheckBox.isChecked()) - Preferences.setEditor( - "WarnFilesize", - self.warnFilesizeSpinBox.value()) + "AdvancedEncodingDetection", self.advEncodingCheckBox.isChecked() + ) + Preferences.setEditor("WarnFilesize", self.warnFilesizeSpinBox.value()) Preferences.setEditor( - "ClearBreaksOnClose", - self.clearBreakpointsCheckBox.isChecked()) + "ClearBreaksOnClose", self.clearBreakpointsCheckBox.isChecked() + ) + Preferences.setEditor("AutoReopen", self.automaticReopenCheckBox.isChecked()) Preferences.setEditor( - "AutoReopen", - self.automaticReopenCheckBox.isChecked()) + "StripTrailingWhitespace", self.stripWhitespaceCheckBox.isChecked() + ) Preferences.setEditor( - "StripTrailingWhitespace", - self.stripWhitespaceCheckBox.isChecked()) + "DefaultOpenFilter", self.openFilesFilterComboBox.currentText() + ) Preferences.setEditor( - "DefaultOpenFilter", - self.openFilesFilterComboBox.currentText()) + "DefaultSaveFilter", self.saveFilesFilterComboBox.currentText() + ) Preferences.setEditor( - "DefaultSaveFilter", - self.saveFilesFilterComboBox.currentText()) + "AutomaticEOLConversion", self.automaticEolConversionCheckBox.isChecked() + ) Preferences.setEditor( - "AutomaticEOLConversion", - self.automaticEolConversionCheckBox.isChecked()) - Preferences.setEditor( - "InsertFinalNewline", - self.insertFinalNewlineCheckBox.isChecked()) - + "InsertFinalNewline", self.insertFinalNewlineCheckBox.isChecked() + ) + if self.crlfRadioButton.isChecked(): Preferences.setEditor("EOLMode", QsciScintilla.EolMode.EolWindows) elif self.crRadioButton.isChecked(): Preferences.setEditor("EOLMode", QsciScintilla.EolMode.EolMac) elif self.lfRadioButton.isChecked(): Preferences.setEditor("EOLMode", QsciScintilla.EolMode.EolUnix) - + self.__extractFileFilters() Preferences.setEditor("AdditionalOpenFilters", self.openFileFilters) Preferences.setEditor("AdditionalSaveFilters", self.saveFileFilters) - + Preferences.setEditor( - "PreviewRefreshWaitTimer", - self.previewRefreshTimeoutSpinBox.value()) - + "PreviewRefreshWaitTimer", self.previewRefreshTimeoutSpinBox.value() + ) + Preferences.setEditor( "PreviewHtmlFileNameExtensions", - [ext.strip() for ext in - self.previewHtmlExtensionsEdit.text().split()]) - + [ext.strip() for ext in self.previewHtmlExtensionsEdit.text().split()], + ) + Preferences.setEditor( "PreviewMarkdownFileNameExtensions", - [ext.strip() for ext in - self.previewMarkdownExtensionsEdit.text().split()]) + [ext.strip() for ext in self.previewMarkdownExtensionsEdit.text().split()], + ) Preferences.setEditor( - "PreviewRestUseSphinx", - self.previewRestSphinxCheckBox.isChecked()) + "PreviewRestUseSphinx", self.previewRestSphinxCheckBox.isChecked() + ) Preferences.setEditor( - "PreviewMarkdownNLtoBR", - self.previewMarkdownNLtoBreakCheckBox.isChecked()) + "PreviewMarkdownNLtoBR", self.previewMarkdownNLtoBreakCheckBox.isChecked() + ) Preferences.setEditor( "PreviewMarkdownUsePyMdownExtensions", - self.previewMarkdownPyMdownCheckBox.isChecked()) + self.previewMarkdownPyMdownCheckBox.isChecked(), + ) Preferences.setEditor( - "PreviewMarkdownMathJax", - self.previewMarkdownMathJaxCheckBox.isChecked()) + "PreviewMarkdownMathJax", self.previewMarkdownMathJaxCheckBox.isChecked() + ) Preferences.setEditor( - "PreviewMarkdownMermaid", - self.previewMarkdownMermaidCheckBox.isChecked()) + "PreviewMarkdownMermaid", self.previewMarkdownMermaidCheckBox.isChecked() + ) Preferences.setEditor( "PreviewMarkdownHTMLFormat", - self.previewMarkdownHTMLFormatComboBox.currentText()) - + self.previewMarkdownHTMLFormatComboBox.currentText(), + ) + Preferences.setEditor( "PreviewRestFileNameExtensions", - [ext.strip() for ext in - self.previewRestExtensionsEdit.text().split()]) + [ext.strip() for ext in self.previewRestExtensionsEdit.text().split()], + ) Preferences.setEditor( "PreviewRestDocutilsHTMLFormat", - self.previewRestDocutilsHTMLFormatComboBox.currentText()) - + self.previewRestDocutilsHTMLFormatComboBox.currentText(), + ) + Preferences.setEditor( "PreviewQssFileNameExtensions", - [ext.strip() for ext in - self.previewQssExtensionsEdit.text().split()]) - + [ext.strip() for ext in self.previewQssExtensionsEdit.text().split()], + ) + def __setDefaultFiltersLists(self, keepSelection=False): """ Private slot to set the default file filter combo boxes. - + @param keepSelection flag indicating to keep the current selection if possible (boolean) """ if keepSelection: selectedOpenFilter = self.openFilesFilterComboBox.currentText() selectedSaveFilter = self.saveFilesFilterComboBox.currentText() - + import QScintilla.Lexers - openFileFiltersList = QScintilla.Lexers.getOpenFileFiltersList( - False, withAdditional=False) + self.openFileFilters + + openFileFiltersList = ( + QScintilla.Lexers.getOpenFileFiltersList(False, withAdditional=False) + + self.openFileFilters + ) openFileFiltersList.sort() self.openFilesFilterComboBox.clear() self.openFilesFilterComboBox.addItems(openFileFiltersList) - saveFileFiltersList = QScintilla.Lexers.getSaveFileFiltersList( - False, withAdditional=False) + self.saveFileFilters + saveFileFiltersList = ( + QScintilla.Lexers.getSaveFileFiltersList(False, withAdditional=False) + + self.saveFileFilters + ) saveFileFiltersList.sort() self.saveFilesFilterComboBox.clear() self.saveFilesFilterComboBox.addItems(saveFileFiltersList) - + if keepSelection: self.openFilesFilterComboBox.setCurrentIndex( - self.openFilesFilterComboBox.findText(selectedOpenFilter)) + self.openFilesFilterComboBox.findText(selectedOpenFilter) + ) self.saveFilesFilterComboBox.setCurrentIndex( - self.saveFilesFilterComboBox.findText(selectedSaveFilter)) - + self.saveFilesFilterComboBox.findText(selectedSaveFilter) + ) + def __extractFileFilters(self): """ Private method to extract the file filters. @@ -259,36 +280,38 @@ self.openFileFilters = filters else: self.saveFileFilters = filters - + def __checkFileFilter(self, fileFilter): """ Private method to check a file filter for validity. - + @param fileFilter file filter pattern to check (string) @return flag indicating validity (boolean) """ - if ( - not self.__showsOpenFilters and - fileFilter.count("*") != 1 - ): + if not self.__showsOpenFilters and fileFilter.count("*") != 1: EricMessageBox.critical( self, self.tr("Add File Filter"), - self.tr("""A Save File Filter must contain exactly one""" - """ wildcard pattern. Yours contains {0}.""") - .format(fileFilter.count("*"))) + self.tr( + """A Save File Filter must contain exactly one""" + """ wildcard pattern. Yours contains {0}.""" + ).format(fileFilter.count("*")), + ) return False - + if fileFilter.count("*") == 0: EricMessageBox.critical( self, self.tr("Add File Filter"), - self.tr("""A File Filter must contain at least one""" - """ wildcard pattern.""")) + self.tr( + """A File Filter must contain at least one""" + """ wildcard pattern.""" + ), + ) return False - + return True - + @pyqtSlot() def on_addFileFilterButton_clicked(self): """ @@ -298,12 +321,13 @@ self, self.tr("Add File Filter"), self.tr("Enter the file filter entry:"), - QLineEdit.EchoMode.Normal) + QLineEdit.EchoMode.Normal, + ) if ok and fileFilter and self.__checkFileFilter(fileFilter): self.fileFiltersList.addItem(fileFilter) self.__extractFileFilters() self.__setDefaultFiltersLists(keepSelection=True) - + @pyqtSlot() def on_editFileFilterButton_clicked(self): """ @@ -315,12 +339,13 @@ self.tr("Add File Filter"), self.tr("Enter the file filter entry:"), QLineEdit.EchoMode.Normal, - fileFilter) + fileFilter, + ) if ok and fileFilter and self.__checkFileFilter(fileFilter): self.fileFiltersList.currentItem().setText(fileFilter) self.__extractFileFilters() self.__setDefaultFiltersLists(keepSelection=True) - + @pyqtSlot() def on_deleteFileFilterButton_clicked(self): """ @@ -329,12 +354,12 @@ self.fileFiltersList.takeItem(self.fileFiltersList.currentRow()) self.__extractFileFilters() self.__setDefaultFiltersLists(keepSelection=True) - + @pyqtSlot(bool) def on_openFiltersButton_toggled(self, checked): """ Private slot to switch the list of file filters. - + @param checked flag indicating the check state of the button (boolean) """ self.__extractFileFilters() @@ -344,34 +369,36 @@ self.fileFiltersList.addItems(self.openFileFilters) else: self.fileFiltersList.addItems(self.saveFileFilters) - + @pyqtSlot(QListWidgetItem, QListWidgetItem) def on_fileFiltersList_currentItemChanged(self, current, previous): """ Private slot to set the state of the edit and delete buttons. - + @param current new current item (QListWidgetItem) @param previous previous current item (QListWidgetItem) """ self.editFileFilterButton.setEnabled(current is not None) self.deleteFileFilterButton.setEnabled(current is not None) - + @pyqtSlot() def on_previewMarkdownPyMdownInstallPushButton_clicked(self): """ Private slot to install the pymdown extensions package via pip. """ pip = ericApp().getObject("Pip") - pip.installPackages(["pymdown-extensions"], - interpreter=Globals.getPythonExecutable()) + pip.installPackages( + ["pymdown-extensions"], interpreter=Globals.getPythonExecutable() + ) self.polishPage() - + def polishPage(self): """ Public slot to perform some polishing actions. """ try: - import pymdownx # __IGNORE_WARNING__ + import pymdownx # __IGNORE_WARNING__ + self.previewMarkdownPyMdownInstallPushButton.setEnabled(False) del sys.modules["pymdownx"] except ImportError: @@ -381,7 +408,7 @@ def create(dlg): """ Module function to create the configuration page. - + @param dlg reference to the configuration dialog @return reference to the instantiated page (ConfigurationPageBase) """