ProjectFlask/ConfigurationPage/FlaskPage.py

Sat, 23 Dec 2023 15:48:52 +0100

author
Detlev Offenbach <detlev@die-offenbachs.de>
date
Sat, 23 Dec 2023 15:48:52 +0100
branch
eric7
changeset 83
d8788dc3442f
parent 82
bb14c648099b
child 87
075f7667f69d
permissions
-rw-r--r--

Updated copyright for 2024.

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

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

"""
Module implementing the Flask configuration page.
"""

from PyQt6.QtCore import pyqtSlot

try:
    from eric7.EricGui import EricPixmapCache
except ImportError:
    from UI import PixmapCache as EricPixmapCache

from eric7.EricWidgets.EricApplication import ericApp
from eric7.EricWidgets.EricPathPicker import EricPathPickerModes
from eric7.Preferences.ConfigurationPages.ConfigurationPageBase import (
    ConfigurationPageBase,
)

try:
    from eric7.SystemUtilities.OSUtilities import isMacPlatform, isWindowsPlatform
except ImportError:
    # imports for eric < 23.1
    from eric7.Globals import isMacPlatform, isWindowsPlatform

from .. import AnsiTools
from .Ui_FlaskPage import Ui_FlaskPage


class FlaskPage(ConfigurationPageBase, Ui_FlaskPage):
    """
    Class implementing the Flask configuration page.
    """

    def __init__(self, plugin):
        """
        Constructor

        @param plugin reference to the plugin object
        @type ProjectFlaskPlugin
        """
        super().__init__()
        self.setupUi(self)
        self.setObjectName("FlaskPage")

        self.__plugin = plugin

        consoleList = []
        if isWindowsPlatform():
            consoleList.append("cmd.exe /c")
        elif isMacPlatform():
            consoleList.append("xterm -e")
            consoleList.append("/opt/X11/bin/xterm -e")
        else:
            consoleList.append("konsole -e")
            consoleList.append("gnome-terminal -e")
            consoleList.append("mate-terminal -e")
            consoleList.append("xfce4-terminal -e")
            consoleList.append("xterm -e")
        self.consoleCommandCombo.addItems(consoleList)

        self.colorSchemeComboBox.addItems(sorted(AnsiTools.getAvailableColorSchemes()))

        self.urlResetButton.setIcon(EricPixmapCache.getIcon("editUndo"))
        self.py3VenvNamesReloadButton.setIcon(EricPixmapCache.getIcon("reload"))

        venvManager = ericApp().getObject("VirtualEnvManager")
        self.py3VenvNameComboBox.addItems(
            [""] + sorted(venvManager.getVirtualenvNames())
        )

        self.translationsEditorPicker.setMode(EricPathPickerModes.OPEN_FILE_MODE)
        self.translationsEditorPicker.setFilters(self.tr("All Files (*)"))

        # set initial values
        self.consoleCommandCombo.setEditText(
            self.__plugin.getPreferences("ConsoleCommand")
        )

        self.externalBrowserCheckBox.setChecked(
            self.__plugin.getPreferences("UseExternalBrowser")
        )

        venvName = self.__plugin.getPreferences("VirtualEnvironmentNamePy3")
        if venvName:
            index = self.py3VenvNameComboBox.findText(venvName)
            if index < 0:
                index = 0
            self.py3VenvNameComboBox.setCurrentIndex(index)

        self.colorSchemeComboBox.setCurrentText(
            self.__plugin.getPreferences("AnsiColorScheme")
        )

        self.urlEdit.setText(self.__plugin.getPreferences("FlaskDocUrl"))

        self.translationsEditorPicker.setText(
            self.__plugin.getPreferences("TranslationsEditor")
        )

    def save(self):
        """
        Public slot to save the Flask configuration.
        """
        self.__plugin.setPreferences(
            "ConsoleCommand", self.consoleCommandCombo.currentText()
        )

        self.__plugin.setPreferences(
            "UseExternalBrowser", self.externalBrowserCheckBox.isChecked()
        )

        self.__plugin.setPreferences(
            "VirtualEnvironmentNamePy3", self.py3VenvNameComboBox.currentText()
        )

        self.__plugin.setPreferences(
            "AnsiColorScheme", self.colorSchemeComboBox.currentText()
        )

        self.__plugin.setPreferences("FlaskDocUrl", self.urlEdit.text())

        self.__plugin.setPreferences(
            "TranslationsEditor", self.translationsEditorPicker.text()
        )

    @pyqtSlot()
    def on_py3VenvNamesReloadButton_clicked(self):
        """
        Private slot to reload the virtual environment names.
        """
        currentVenvName = self.py3VenvNameComboBox.currentText()
        self.py3VenvNameComboBox.clear()
        venvManager = ericApp().getObject("VirtualEnvManager")
        self.py3VenvNameComboBox.addItems(
            [""] + sorted(venvManager.getVirtualenvNames())
        )
        if currentVenvName:
            index = self.py3VenvNameComboBox.findText(currentVenvName)
            if index < 0:
                index = 0
            self.py3VenvNameComboBox.setCurrentIndex(index)

    @pyqtSlot()
    def on_urlResetButton_clicked(self):
        """
        Private slot to reset the Flask documentation URL.
        """
        self.urlEdit.setText(self.__plugin.getDefaultPreference("FlaskDocUrl"))

eric ide

mercurial