You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

86 lines
2.7 KiB

# coding:utf-8
from typing import Union
from PySide6.QtCore import Signal
from PySide6.QtGui import QIcon
from PySide6.QtWidgets import QButtonGroup, QLabel
from ...common.config import OptionsConfigItem, qconfig
from ...common.icon import FluentIconBase
from ..widgets.button import RadioButton
from .expand_setting_card import ExpandSettingCard
class OptionsSettingCard(ExpandSettingCard):
""" setting card with a group of options """
optionChanged = Signal(OptionsConfigItem)
def __init__(self, configItem, icon: Union[str, QIcon, FluentIconBase], title, content=None, texts=None, parent=None):
"""
Parameters
----------
configItem: OptionsConfigItem
options config item
icon: str | QIcon | FluentIconBase
the icon to be drawn
title: str
the title of setting card
content: str
the content of setting card
texts: List[str]
the texts of radio buttons
parent: QWidget
parent window
"""
super().__init__(icon, title, content, parent)
self.texts = texts or []
self.configItem = configItem
self.configName = configItem.name
self.choiceLabel = QLabel(self)
self.buttonGroup = QButtonGroup(self)
self.addWidget(self.choiceLabel)
# create buttons
self.viewLayout.setSpacing(19)
self.viewLayout.setContentsMargins(48, 18, 0, 18)
for text, option in zip(texts, configItem.options):
button = RadioButton(text, self.view)
self.buttonGroup.addButton(button)
self.viewLayout.addWidget(button)
button.setProperty(self.configName, option)
self._adjustViewSize()
self.setValue(qconfig.get(self.configItem))
configItem.valueChanged.connect(self.setValue)
self.buttonGroup.buttonClicked.connect(self.__onButtonClicked)
def __onButtonClicked(self, button: RadioButton):
""" button clicked slot """
if button.text() == self.choiceLabel.text():
return
value = button.property(self.configName)
qconfig.set(self.configItem, value)
self.choiceLabel.setText(button.text())
self.choiceLabel.adjustSize()
self.optionChanged.emit(self.configItem)
def setValue(self, value):
""" select button according to the value """
qconfig.set(self.configItem, value)
for button in self.viewLayout.widgets:
isChecked = button.property(self.configName) == value
button.setChecked(isChecked)
if isChecked:
self.choiceLabel.setText(button.text())
self.choiceLabel.adjustSize()