diff -r e9e7eca7efee -r bf71ee032bb4 src/eric7/Preferences/ConfigurationPages/EditorAPIsPage.py --- a/src/eric7/Preferences/ConfigurationPages/EditorAPIsPage.py Wed Jul 13 11:16:20 2022 +0200 +++ b/src/eric7/Preferences/ConfigurationPages/EditorAPIsPage.py Wed Jul 13 14:55:47 2022 +0200 @@ -29,6 +29,7 @@ """ Class implementing the Editor APIs configuration page. """ + def __init__(self): """ Constructor @@ -36,37 +37,36 @@ super().__init__() self.setupUi(self) self.setObjectName("EditorAPIsPage") - + self.apiFilePicker.setMode(EricPathPickerModes.OPEN_FILE_MODE) - self.apiFilePicker.setToolTip(self.tr( - "Press to select an API file via a selection dialog")) - self.apiFilePicker.setFilters(self.tr( - "API File (*.api);;All Files (*)")) - + self.apiFilePicker.setToolTip( + self.tr("Press to select an API file via a selection dialog") + ) + self.apiFilePicker.setFilters(self.tr("API File (*.api);;All Files (*)")) + self.prepareApiButton.setText(self.tr("Compile APIs")) self.__currentAPI = None self.__inPreparation = False - + # set initial values self.pluginManager = ericApp().getObject("PluginManager") - self.apiAutoPrepareCheckBox.setChecked( - Preferences.getEditor("AutoPrepareAPIs")) - + self.apiAutoPrepareCheckBox.setChecked(Preferences.getEditor("AutoPrepareAPIs")) + import QScintilla.Lexers + self.apis = {} - apiLanguages = sorted( - [''] + list(QScintilla.Lexers.getSupportedApiLanguages())) + apiLanguages = sorted([""] + list(QScintilla.Lexers.getSupportedApiLanguages())) for lang in apiLanguages: self.apiLanguageComboBox.addItem( - QScintilla.Lexers.getLanguageIcon(lang, False), - lang) + QScintilla.Lexers.getLanguageIcon(lang, False), lang + ) self.__currentApiLanguage = "" self.on_apiLanguageComboBox_activated(0) - + def __apiKey(self, language, projectType): """ Private method to generate a key for the apis dictionary. - + @param language programming language of the API @type str @param projectType project type of the API @@ -76,143 +76,151 @@ """ key = (language, projectType) if projectType else (language, "") return key - + def save(self): """ Public slot to save the Editor APIs configuration. """ Preferences.setEditor( - "AutoPrepareAPIs", - self.apiAutoPrepareCheckBox.isChecked()) - + "AutoPrepareAPIs", self.apiAutoPrepareCheckBox.isChecked() + ) + language = self.apiLanguageComboBox.currentText() projectType = self.projectTypeComboBox.itemData( - self.projectTypeComboBox.currentIndex()) + self.projectTypeComboBox.currentIndex() + ) key = self.__apiKey(language, projectType) self.apis[key] = self.__editorGetApisFromApiList() - + for (language, projectType), apis in self.apis.items(): Preferences.setEditorAPI(language, projectType, apis) - + @pyqtSlot(int) def on_projectTypeComboBox_activated(self, index): """ Private slot to handle the selection of a project type. - + @param index index of the selected entry @type str """ if self.__currentApiProjectTypeIndex == index: return - + self.__currentApiProjectTypeIndex = index self.__fillApisList() - + @pyqtSlot(int) def on_apiLanguageComboBox_activated(self, index): """ Private slot to fill the api listbox of the api page. - + @param index index of the selected entry @type int """ language = self.apiLanguageComboBox.itemText(index) - + if self.__currentApiLanguage == language: return - + self.__fillProjectTypeComboBox(language) - + def __fillProjectTypeComboBox(self, language): """ Private slot to fill the selection of available project types for the given language. - + @param language selected API language @type str """ self.projectTypeComboBox.clear() - + apiProjectTypes = [("", "")] with contextlib.suppress(KeyError): apiProjectTypes += sorted( - (trans, ptype) for ptype, trans in - ericApp().getObject("Project").getProjectTypes(language).items() + (trans, ptype) + for ptype, trans in ericApp() + .getObject("Project") + .getProjectTypes(language) + .items() ) for projectTypeStr, projectType in apiProjectTypes: self.projectTypeComboBox.addItem(projectTypeStr, projectType) - + self.__currentApiProjectTypeIndex = -1 self.__currentApiProjectType = "" - + self.on_projectTypeComboBox_activated(0) - + def __fillApisList(self): """ Private slot to fill the list of API files. """ self.apis[ - self.__apiKey(self.__currentApiLanguage, - self.__currentApiProjectType) + self.__apiKey(self.__currentApiLanguage, self.__currentApiProjectType) ] = self.__editorGetApisFromApiList() - + self.__currentApiLanguage = self.apiLanguageComboBox.currentText() self.__currentApiProjectType = self.projectTypeComboBox.itemData( - self.projectTypeComboBox.currentIndex()) + self.projectTypeComboBox.currentIndex() + ) self.apiList.clear() - + if not self.__currentApiLanguage: self.apiGroup.setEnabled(False) return - + self.apiGroup.setEnabled(True) self.deleteApiFileButton.setEnabled(False) self.addApiFileButton.setEnabled(False) self.apiFilePicker.clear() - - key = self.__apiKey(self.__currentApiLanguage, - self.__currentApiProjectType) + + key = self.__apiKey(self.__currentApiLanguage, self.__currentApiProjectType) if key not in self.apis: # populate on demand self.apis[key] = Preferences.getEditorAPI( - self.__currentApiLanguage, - projectType=self.__currentApiProjectType)[:] + self.__currentApiLanguage, projectType=self.__currentApiProjectType + )[:] for api in self.apis[key]: if api: self.apiList.addItem(api) self.prepareApiButton.setEnabled(self.apiList.count() > 0) - + from QScintilla.APIsManager import APIsManager + self.__currentAPI = APIsManager().getAPIs( - self.__currentApiLanguage, - projectType=self.__currentApiProjectType) + self.__currentApiLanguage, projectType=self.__currentApiProjectType + ) if self.__currentAPI is not None: self.__currentAPI.apiPreparationFinished.connect( - self.__apiPreparationFinished) + self.__apiPreparationFinished + ) self.__currentAPI.apiPreparationCancelled.connect( - self.__apiPreparationCancelled) + self.__apiPreparationCancelled + ) self.__currentAPI.apiPreparationStarted.connect( - self.__apiPreparationStarted) + self.__apiPreparationStarted + ) self.addInstalledApiFileButton.setEnabled( - len(self.__currentAPI.installedAPIFiles()) > 0) + len(self.__currentAPI.installedAPIFiles()) > 0 + ) else: self.addInstalledApiFileButton.setEnabled(False) - + self.addPluginApiFileButton.setEnabled( - len(self.pluginManager.getPluginApiFiles( - self.__currentApiLanguage)) > 0) - + len(self.pluginManager.getPluginApiFiles(self.__currentApiLanguage)) > 0 + ) + def __editorGetApisFromApiList(self): """ Private slot to retrieve the api filenames from the list. - + @return list of api filenames (list of strings) """ apis = [] for row in range(self.apiList.count()): apis.append(self.apiList.item(row).text()) return apis - + @pyqtSlot() def on_addApiFileButton_clicked(self): """ @@ -223,7 +231,7 @@ self.apiList.addItem(Utilities.toNativeSeparators(file)) self.apiFilePicker.clear() self.prepareApiButton.setEnabled(self.apiList.count() > 0) - + @pyqtSlot() def on_deleteApiFileButton_clicked(self): """ @@ -231,10 +239,10 @@ """ crow = self.apiList.currentRow() if crow >= 0: - itm = self.apiList.takeItem(crow) # __IGNORE_WARNING__ + itm = self.apiList.takeItem(crow) # __IGNORE_WARNING__ del itm self.prepareApiButton.setEnabled(self.apiList.count() > 0) - + @pyqtSlot() def on_addInstalledApiFileButton_clicked(self): """ @@ -244,54 +252,53 @@ installedAPIFiles = self.__currentAPI.installedAPIFiles() if installedAPIFiles: installedAPIFilesPath = pathlib.Path(installedAPIFiles[0]).parent - installedAPIFilesShort = [ - pathlib.Path(f).name for f in installedAPIFiles - ] + installedAPIFilesShort = [pathlib.Path(f).name for f in installedAPIFiles] dlg = EricListSelectionDialog( sorted(installedAPIFilesShort), title=self.tr("Add from installed APIs"), message=self.tr("Select from the list of installed API files"), checkBoxSelection=True, - parent=self + parent=self, ) if dlg.exec() == QDialog.DialogCode.Accepted: - self.apiList.addItems([ - str(installedAPIFilesPath / s) for s in dlg.getSelection() - ]) + self.apiList.addItems( + [str(installedAPIFilesPath / s) for s in dlg.getSelection()] + ) else: EricMessageBox.warning( self, self.tr("Add from installed APIs"), - self.tr("""There are no APIs installed yet.""" - """ Selection is not available.""")) + self.tr( + """There are no APIs installed yet.""" + """ Selection is not available.""" + ), + ) self.addInstalledApiFileButton.setEnabled(False) self.prepareApiButton.setEnabled(self.apiList.count() > 0) - + @pyqtSlot() def on_addPluginApiFileButton_clicked(self): """ Private slot to add an API file from the list of API files installed by plugins for the selected lexer language. """ - pluginAPIFiles = self.pluginManager.getPluginApiFiles( - self.__currentApiLanguage) + pluginAPIFiles = self.pluginManager.getPluginApiFiles(self.__currentApiLanguage) pluginAPIFilesDict = { pathlib.Path(f).name: pathlib.Path(f) for f in pluginAPIFiles } dlg = EricListSelectionDialog( sorted(pluginAPIFilesDict.keys()), title=self.tr("Add from Plugin APIs"), - message=self.tr( - "Select from the list of API files installed by plugins"), + message=self.tr("Select from the list of API files installed by plugins"), checkBoxSelection=True, - parent=self + parent=self, ) if dlg.exec() == QDialog.DialogCode.Accepted: - self.apiList.addItems([ - str(pluginAPIFilesDict[s]) for s in dlg.getSelection() - ]) + self.apiList.addItems( + [str(pluginAPIFilesDict[s]) for s in dlg.getSelection()] + ) self.prepareApiButton.setEnabled(self.apiList.count() > 0) - + @pyqtSlot() def on_prepareApiButton_clicked(self): """ @@ -303,9 +310,9 @@ else: if self.__currentAPI is not None: self.__currentAPI.prepareAPIs( - ondemand=True, - rawList=self.__editorGetApisFromApiList()) - + ondemand=True, rawList=self.__editorGetApisFromApiList() + ) + def __apiPreparationFinished(self): """ Private method called after the API preparation has finished. @@ -315,13 +322,13 @@ self.prepareApiProgressBar.setValue(0) self.prepareApiButton.setText(self.tr("Compile APIs")) self.__inPreparation = False - + def __apiPreparationCancelled(self): """ Private slot called after the API preparation has been cancelled. """ self.__apiPreparationFinished() - + def __apiPreparationStarted(self): """ Private method called after the API preparation has started. @@ -330,64 +337,62 @@ self.prepareApiProgressBar.setValue(0) self.prepareApiButton.setText(self.tr("Cancel compilation")) self.__inPreparation = True - + def saveState(self): """ Public method to save the current state of the widget. - + @return tuple containing the index of the selected lexer language and the index of the selected project type @rtype tuple of int and int """ return ( self.apiLanguageComboBox.currentIndex(), - self.projectTypeComboBox.currentIndex() + self.projectTypeComboBox.currentIndex(), ) - + def setState(self, state): """ Public method to set the state of the widget. - + @param state state data generated by saveState """ self.apiLanguageComboBox.setCurrentIndex(state[0]) - self.on_apiLanguageComboBox_activated( - self.apiLanguageComboBox.currentIndex()) - + self.on_apiLanguageComboBox_activated(self.apiLanguageComboBox.currentIndex()) + self.projectTypeComboBox.setCurrentIndex(state[1]) self.on_projectTypeComboBox_activated(state[1]) - + @pyqtSlot() def on_apiList_itemSelectionChanged(self): """ Private slot to react on changes of API selections. """ - self.deleteApiFileButton.setEnabled( - len(self.apiList.selectedItems()) > 0) - + self.deleteApiFileButton.setEnabled(len(self.apiList.selectedItems()) > 0) + @pyqtSlot(str) def on_apiFilePicker_textChanged(self, txt): """ Private slot to handle the entering of an API file name. - + @param txt text of the line edit (string) """ enable = txt != "" - + if enable: # check for already added file for row in range(self.apiList.count()): if txt == self.apiList.item(row).text(): enable = False break - + self.addApiFileButton.setEnabled(enable) - + def create(dlg): """ Module function to create the configuration page. - + @param dlg reference to the configuration dialog @return reference to the instantiated page (ConfigurationPageBase) """