Source code for mantidimaging.gui.windows.settings.view
# Copyright (C) 2021 ISIS Rutherford Appleton Laboratory UKRI
# SPDX - License - Identifier: GPL-3.0-or-later
from __future__ import annotations
from logging import getLogger
from typing import TYPE_CHECKING
from PyQt5.QtCore import QSettings, QSignalBlocker
from PyQt5.QtWidgets import QTabWidget, QWidget, QComboBox, QLabel, QCheckBox, QSpinBox
from mantidimaging.gui.mvp_base import BaseMainWindowView
from qt_material import list_themes, QtStyleTools
from mantidimaging.gui.windows.settings.presenter import SettingsWindowPresenter
if TYPE_CHECKING:
from mantidimaging.gui.windows.main import MainWindowView # noqa:F401 # pragma: no cover
LOG = getLogger(__name__)
settings = QSettings('mantidproject', 'Mantid Imaging')
[docs]
class SettingsWindowView(BaseMainWindowView, QtStyleTools):
settingsTabWidget: QTabWidget
appearanceTab: QWidget
themeName: QComboBox
themeLabel: QLabel
menuFontSizeLabel: QLabel
menuFontSizeChoice: QComboBox
darkModeCheckBox: QCheckBox
osDefaultsCheckBox: QCheckBox
processesLabel: QLabel
processesSpinBox: QSpinBox
def __init__(self, main_window: MainWindowView):
super().__init__(None, 'gui/ui/settings_window.ui')
self.setWindowTitle('Settings')
self.main_window = main_window
self.presenter = SettingsWindowPresenter(self, main_window)
self.themeName.addItem('Fusion')
self.themeName.addItems(list_themes())
self.themeName.setCurrentText(self.presenter.current_theme)
self.menuFontSizeChoice.addItems([str(font_size) for font_size in range(4, 21)])
self.menuFontSizeChoice.setCurrentText(self.presenter.current_menu_font_size.replace('px', ''))
self.themeName.currentTextChanged.connect(self.presenter.set_theme)
self.menuFontSizeChoice.currentTextChanged.connect(self.presenter.set_extra_style)
self.darkModeCheckBox.stateChanged.connect(self.presenter.set_dark_mode)
self.osDefaultsCheckBox.stateChanged.connect(self.presenter.set_to_os_defaults)
if self.current_theme != 'Fusion':
self.darkModeCheckBox.setEnabled(False)
with (QSignalBlocker(self.darkModeCheckBox)):
if settings.value('use_dark_mode') == 'True' or (settings.value('os_theme') == 'Dark'
and settings.value('override_os_theme') == 'False'):
self.darkModeCheckBox.setChecked(True)
else:
self.darkModeCheckBox.setChecked(False)
if settings.value('use_os_defaults') == 'True' or settings.value('use_os_defaults') is None:
self.osDefaultsCheckBox.setChecked(True)
self.processesSpinBox.setMinimum(1)
self.processesSpinBox.setMaximum(128)
self.processesSpinBox.setValue(settings.value("multiprocessing/process_count", 8, type=int))
self.processesSpinBox.valueChanged.connect(self.presenter.set_processes_value)
@property
def current_theme(self) -> str:
return self.themeName.currentText()
@property
def current_menu_font_size(self) -> str:
return self.menuFontSizeChoice.currentText()
@property
def current_processes_value(self) -> int:
return self.processesSpinBox.value()