src/eric7/Preferences/ConfigurationPages/EditorTypingPage.py

Sat, 09 Sep 2023 17:17:11 +0200

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 09 Sep 2023 17:17:11 +0200
branch
eric7
changeset 10199
2cd5ff8e0e0f
parent 10069
435cc5875135
child 10201
5beaa25bdfbe
permissions
-rw-r--r--

Extended the Typing Completers infrastructure to allow the addition of completers via plugins.

# -*- coding: utf-8 -*-

# Copyright (c) 2007 - 2023 Detlev Offenbach <detlev@die-offenbachs.de>
#

"""
Module implementing the Editor Typing configuration page.
"""

from PyQt6.QtCore import pyqtSlot

from eric7 import Preferences
from eric7.QScintilla.TypingCompleters import CompleterRegistry

from .ConfigurationPageBase import ConfigurationPageBase
from .Ui_EditorTypingPage import Ui_EditorTypingPage


class EditorTypingPage(ConfigurationPageBase, Ui_EditorTypingPage):
    """
    Class implementing the Editor Typing configuration page.
    """

    def __init__(self):
        """
        Constructor
        """
        super().__init__()
        self.setupUi(self)
        self.setObjectName("EditorTypingPage")

        self.__pageIds = {
            " ": self.stackedWidget.indexOf(self.emptyPage),
            "Python": self.stackedWidget.indexOf(self.pythonPage),
            "Ruby": self.stackedWidget.indexOf(self.rubyPage),
            "YAML": self.stackedWidget.indexOf(self.yamlPage),
        }

        self.__extensionPages = {}
        for language in CompleterRegistry:
            page = CompleterRegistry[language].createConfigPage()
            if page is not None:
                language = language.replace("Pygments|", "")  # more readable
                self.__extensionPages[language] = page
                self.__pageIds[language] = self.stackedWidget.addWidget(page)

        for language in sorted(self.__pageIds.keys()):
            self.languageCombo.addItem(language, self.__pageIds[language])

        # set initial values
        # Python
        self.pythonGroup.setChecked(
            Preferences.getEditorTyping("Python/EnabledTypingAids")
        )
        self.pythonInsertClosingBraceCheckBox.setChecked(
            Preferences.getEditorTyping("Python/InsertClosingBrace")
        )
        self.pythonSkipBraceCheckBox.setChecked(
            Preferences.getEditorTyping("Python/SkipBrace")
        )
        self.pythonIndentBraceCheckBox.setChecked(
            Preferences.getEditorTyping("Python/IndentBrace")
        )
        self.pythonInsertQuoteCheckBox.setChecked(
            Preferences.getEditorTyping("Python/InsertQuote")
        )
        self.pythonDedentElseCheckBox.setChecked(
            Preferences.getEditorTyping("Python/DedentElse")
        )
        self.pythonDedentExceptCheckBox.setChecked(
            Preferences.getEditorTyping("Python/DedentExcept")
        )
        self.pythonInsertImportCheckBox.setChecked(
            Preferences.getEditorTyping("Python/InsertImport")
        )
        self.pythonImportBraceTypeCheckBox.setChecked(
            Preferences.getEditorTyping("Python/ImportBraceType")
        )
        self.pythonInsertSelfCheckBox.setChecked(
            Preferences.getEditorTyping("Python/InsertSelf")
        )
        self.pythonInsertBlankCheckBox.setChecked(
            Preferences.getEditorTyping("Python/InsertBlank")
        )
        self.pythonColonDetectionCheckBox.setChecked(
            Preferences.getEditorTyping("Python/ColonDetection")
        )
        self.pythonDedentDefCheckBox.setChecked(
            Preferences.getEditorTyping("Python/DedentDef")
        )

        # Ruby
        self.rubyGroup.setChecked(Preferences.getEditorTyping("Ruby/EnabledTypingAids"))
        self.rubyInsertClosingBraceCheckBox.setChecked(
            Preferences.getEditorTyping("Ruby/InsertClosingBrace")
        )
        self.rubySkipBraceCheckBox.setChecked(
            Preferences.getEditorTyping("Ruby/SkipBrace")
        )
        self.rubyIndentBraceCheckBox.setChecked(
            Preferences.getEditorTyping("Ruby/IndentBrace")
        )
        self.rubyInsertQuoteCheckBox.setChecked(
            Preferences.getEditorTyping("Ruby/InsertQuote")
        )
        self.rubyInsertBlankCheckBox.setChecked(
            Preferences.getEditorTyping("Ruby/InsertBlank")
        )
        self.rubyInsertHereDocCheckBox.setChecked(
            Preferences.getEditorTyping("Ruby/InsertHereDoc")
        )
        self.rubyInsertInlineDocCheckBox.setChecked(
            Preferences.getEditorTyping("Ruby/InsertInlineDoc")
        )

        # YAML
        self.yamlGroup.setChecked(Preferences.getEditorTyping("Yaml/EnabledTypingAids"))
        self.yamlInsertClosingBraceCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/InsertClosingBrace")
        )
        self.yamlSkipBraceCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/SkipBrace")
        )
        self.yamlInsertQuoteCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/InsertQuote")
        )
        self.yamlAutoIndentationCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/AutoIndentation")
        )
        self.yamlColonDetectionCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/ColonDetection")
        )
        self.yamlInsertBlankDashCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/InsertBlankDash")
        )
        self.yamlInsertBlankColonCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/InsertBlankColon")
        )
        self.yamlInsertBlankQuestionCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/InsertBlankQuestion")
        )
        self.yamlInsertBlankCommaCheckBox.setChecked(
            Preferences.getEditorTyping("Yaml/InsertBlankComma")
        )

        self.on_languageCombo_activated(0)

    def save(self):
        """
        Public slot to save the Editor Typing configuration.
        """
        # Python
        Preferences.setEditorTyping(
            "Python/EnabledTypingAids", self.pythonGroup.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/InsertClosingBrace",
            self.pythonInsertClosingBraceCheckBox.isChecked(),
        )
        Preferences.setEditorTyping(
            "Python/SkipBrace", self.pythonSkipBraceCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/IndentBrace", self.pythonIndentBraceCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/InsertQuote", self.pythonInsertQuoteCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/DedentElse", self.pythonDedentElseCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/DedentExcept", self.pythonDedentExceptCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/InsertImport", self.pythonInsertImportCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/ImportBraceType", self.pythonImportBraceTypeCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/InsertSelf", self.pythonInsertSelfCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/InsertBlank", self.pythonInsertBlankCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/ColonDetection", self.pythonColonDetectionCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Python/DedentDef", self.pythonDedentDefCheckBox.isChecked()
        )

        # Ruby
        Preferences.setEditorTyping(
            "Ruby/EnabledTypingAids", self.rubyGroup.isChecked()
        )
        Preferences.setEditorTyping(
            "Ruby/InsertClosingBrace", self.rubyInsertClosingBraceCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Ruby/SkipBrace", self.rubySkipBraceCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Ruby/IndentBrace", self.rubyIndentBraceCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Ruby/InsertQuote", self.rubyInsertQuoteCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Ruby/InsertBlank", self.rubyInsertBlankCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Ruby/InsertHereDoc", self.rubyInsertHereDocCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Ruby/InsertInlineDoc", self.rubyInsertInlineDocCheckBox.isChecked()
        )

        # YAML
        Preferences.setEditorTyping(
            "Yaml/EnabledTypingAids", self.yamlGroup.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/InsertClosingBrace", self.yamlInsertClosingBraceCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/SkipBrace", self.yamlSkipBraceCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/InsertQuote", self.yamlInsertQuoteCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/AutoIndentation", self.yamlAutoIndentationCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/ColonDetection", self.yamlColonDetectionCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/InsertBlankDash", self.yamlInsertBlankDashCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/InsertBlankColon", self.yamlInsertBlankColonCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/InsertBlankQuestion", self.yamlInsertBlankQuestionCheckBox.isChecked()
        )
        Preferences.setEditorTyping(
            "Yaml/InsertBlankComma", self.yamlInsertBlankCommaCheckBox.isChecked()
        )

        for page in self.__extensionPages.values():
            page.save()

    @pyqtSlot(int)
    def on_languageCombo_activated(self, index):
        """
        Private slot to select the page related to the selected language.

        @param index index of the selected entry
        @type int
        """
        language = self.languageCombo.itemText(index)
        try:
            index = self.__pageIds[language]
        except KeyError:
            index = self.__pageIds[" "]
        self.stackedWidget.setCurrentIndex(index)


def create(dlg):  # noqa: U100
    """
    Module function to create the configuration page.

    @param dlg reference to the configuration dialog
    @return reference to the instantiated page (ConfigurationPageBase)
    """
    page = EditorTypingPage()
    return page

eric ide

mercurial