mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-01 12:26:26 +00:00
refactor: settings & language
This commit is contained in:
83
ui/implements/settings/settingsAndreal.py
Normal file
83
ui/implements/settings/settingsAndreal.py
Normal file
@ -0,0 +1,83 @@
|
||||
from PySide6.QtCore import QCoreApplication
|
||||
from PySide6.QtWidgets import QLabel, QPushButton
|
||||
|
||||
from ui.implements.components.fileSelector import FileSelector
|
||||
from ui.implements.settings.settingsBaseWidget import SettingsBaseWidget
|
||||
|
||||
|
||||
class SettingsAndreal(SettingsBaseWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.setupUi(self)
|
||||
|
||||
if self.settings.andrealFolder():
|
||||
self.andrealFolderValueWidget.selectFile(self.settings.andrealFolder())
|
||||
self.andrealFolderValueWidget.filesSelected.connect(self.setAndrealFolder)
|
||||
self.andrealFolderResetButton.clicked.connect(self.resetAndrealFolder)
|
||||
self.insertItem(
|
||||
"andrealFolder",
|
||||
self.andrealFolderLabel,
|
||||
self.andrealFolderValueWidget,
|
||||
self.andrealFolderResetButton,
|
||||
)
|
||||
|
||||
if self.settings.andrealExecutable():
|
||||
self.andrealExecutableValueWidget.selectFile(
|
||||
self.settings.andrealExecutable()
|
||||
)
|
||||
self.andrealExecutableValueWidget.filesSelected.connect(
|
||||
self.setAndrealExecutable
|
||||
)
|
||||
self.andrealExecutableResetButton.clicked.connect(self.resetAndrealExecutable)
|
||||
self.insertItem(
|
||||
"andrealExecutable",
|
||||
self.andrealExecutableLabel,
|
||||
self.andrealExecutableValueWidget,
|
||||
self.andrealExecutableResetButton,
|
||||
)
|
||||
|
||||
def setAndrealFolder(self):
|
||||
selectedFile = self.andrealFolderValueWidget.selectedFiles()
|
||||
if selectedFile and selectedFile[0]:
|
||||
file = selectedFile[0]
|
||||
self.settings.setAndrealFolder(file)
|
||||
|
||||
def resetAndrealFolder(self):
|
||||
self.andrealFolderValueWidget.reset()
|
||||
self.settings.resetAndrealFolder()
|
||||
|
||||
def setAndrealExecutable(self):
|
||||
selectedFile = self.andrealExecutableValueWidget.selectedFiles()
|
||||
if selectedFile and selectedFile[0]:
|
||||
file = selectedFile[0]
|
||||
self.settings.setAndrealExecutable(file)
|
||||
|
||||
def resetAndrealExecutable(self):
|
||||
self.andrealExecutableValueWidget.reset()
|
||||
self.settings.resetAndrealExecutable()
|
||||
|
||||
def setupUi(self, *args):
|
||||
self.andrealFolderLabel = QLabel(self)
|
||||
self.andrealFolderValueWidget = FileSelector(self)
|
||||
self.andrealFolderResetButton = QPushButton(self)
|
||||
|
||||
self.andrealExecutableLabel = QLabel(self)
|
||||
self.andrealExecutableValueWidget = FileSelector(self)
|
||||
self.andrealExecutableResetButton = QPushButton(self)
|
||||
|
||||
super().setupUi(self)
|
||||
self.retranslateUi()
|
||||
|
||||
def retranslateUi(self, *args):
|
||||
super().retranslateUi(self)
|
||||
|
||||
# fmt: off
|
||||
self.setTitle(QCoreApplication.translate("Settings", "andreal.title"))
|
||||
|
||||
self.andrealFolderLabel.setText(QCoreApplication.translate("Settings", "andreal.andrealFolder.label"))
|
||||
self.andrealFolderResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
|
||||
|
||||
self.andrealExecutableLabel.setText(QCoreApplication.translate("Settings", "andreal.andrealExecutable.label"))
|
||||
self.andrealExecutableResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
|
||||
# fmt: on
|
41
ui/implements/settings/settingsBaseWidget.py
Normal file
41
ui/implements/settings/settingsBaseWidget.py
Normal file
@ -0,0 +1,41 @@
|
||||
from PySide6.QtCore import QCoreApplication, Qt
|
||||
from PySide6.QtWidgets import QLabel, QPushButton, QWidget
|
||||
|
||||
from ui.designer.settings.settingsBaseWidget_ui import Ui_SettingsBaseWidget
|
||||
from ui.extends.shared.settings import Settings
|
||||
|
||||
|
||||
class SettingsBaseWidget(Ui_SettingsBaseWidget, QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.settings = Settings()
|
||||
|
||||
def setTitle(self, title: str):
|
||||
self.titleLabel.setText(title)
|
||||
|
||||
def insertItem(
|
||||
self,
|
||||
prefix: str,
|
||||
label: QLabel,
|
||||
valueWidget: QWidget,
|
||||
resetButton: QPushButton | None = None,
|
||||
):
|
||||
row = self.gridLayout.rowCount()
|
||||
|
||||
label.setObjectName(f"{prefix}Label")
|
||||
label.setAlignment(Qt.AlignmentFlag.AlignRight | Qt.AlignmentFlag.AlignCenter)
|
||||
self.gridLayout.addWidget(label, row, 0)
|
||||
|
||||
valueWidget.setObjectName(f"{prefix}ValueWidget")
|
||||
self.gridLayout.addWidget(valueWidget, row, 1)
|
||||
|
||||
if resetButton:
|
||||
resetButton.setObjectName(f"{prefix}ResetButton")
|
||||
self.gridLayout.addWidget(resetButton, row, 2)
|
||||
|
||||
def setupUi(self, widget):
|
||||
super().setupUi(widget)
|
||||
self.gridLayout.setColumnStretch(1, 1)
|
||||
|
||||
def retranslateUi(self, widget):
|
||||
super().retranslateUi(widget)
|
@ -1,98 +0,0 @@
|
||||
import logging
|
||||
|
||||
from PySide6.QtCore import Slot
|
||||
from PySide6.QtWidgets import QWidget
|
||||
|
||||
from ui.designer.settings.settingsDefault_ui import Ui_SettingsDefault
|
||||
from ui.extends.ocr import load_devices_json
|
||||
from ui.extends.shared.settings import *
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class SettingsDefault(Ui_SettingsDefault, QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.settings = Settings(self)
|
||||
|
||||
self.devicesJsonFileSelector.filesSelected.connect(self.fillDevicesComboBox)
|
||||
self.devicesJsonFileResetButton.clicked.connect(self.resetDevicesJsonFile)
|
||||
self.deviceUuidResetButton.clicked.connect(self.resetDeviceUuid)
|
||||
|
||||
devicesJsonPath = self.settings.devicesJsonFile()
|
||||
self.devicesJsonFileSelector.selectFile(devicesJsonPath)
|
||||
tesseractPath = self.settings.tesseractPath()
|
||||
self.tesseractFileSelector.selectFile(tesseractPath)
|
||||
self.knnModelFileSelector.selectFile(self.settings.knnModelFile())
|
||||
self.siftDatabaseFileSelector.selectFile(self.settings.siftDatabaseFile())
|
||||
|
||||
self.devicesJsonFileSelector.accepted.connect(
|
||||
self.on_devicesJsonFileSelector_accepted
|
||||
)
|
||||
self.tesseractFileSelector.accepted.connect(
|
||||
self.on_tesseractFileSelector_accepted
|
||||
)
|
||||
self.knnModelFileSelector.accepted.connect(
|
||||
self.on_knnModelFileSelector_accepted
|
||||
)
|
||||
self.siftDatabaseFileSelector.accepted.connect(
|
||||
self.on_siftDatabaseFileSelector_accepted
|
||||
)
|
||||
|
||||
def setDevicesJsonFile(self):
|
||||
try:
|
||||
filename = self.devicesJsonFileSelector.selectedFiles()[0]
|
||||
devices = load_devices_json(filename)
|
||||
assert isinstance(devices, list)
|
||||
self.settings.setDevicesJsonFile(filename)
|
||||
except Exception as e:
|
||||
logger.exception("set deviceJsonFile error")
|
||||
# QMessageBox
|
||||
return
|
||||
|
||||
def resetDevicesJsonFile(self):
|
||||
self.devicesJsonFileSelector.reset()
|
||||
self.settings.resetDevicesJsonFile()
|
||||
|
||||
def on_devicesJsonFileSelector_accepted(self):
|
||||
self.setDevicesJsonFile()
|
||||
|
||||
def fillDevicesComboBox(self):
|
||||
devicesJsonPath = self.devicesJsonFileSelector.selectedFiles()[0]
|
||||
self.devicesComboBox.loadDevicesJson(devicesJsonPath)
|
||||
|
||||
storedDeviceUuid = self.settings.deviceUuid()
|
||||
self.devicesComboBox.selectDevice(storedDeviceUuid)
|
||||
|
||||
@Slot()
|
||||
def on_devicesComboBox_activated(self):
|
||||
device = self.devicesComboBox.currentData()
|
||||
if device:
|
||||
self.settings.setDeviceUuid(device.uuid)
|
||||
|
||||
def resetDeviceUuid(self):
|
||||
self.devicesComboBox.setCurrentIndex(-1)
|
||||
self.settings.resetDeviceUuid()
|
||||
|
||||
def setTesseractFile(self):
|
||||
file = self.tesseractFileSelector.selectedFiles()[0]
|
||||
self.settings.setTesseractPath(file)
|
||||
|
||||
def on_tesseractFileSelector_accepted(self):
|
||||
self.setTesseractFile()
|
||||
|
||||
def setKnnModelFile(self):
|
||||
file = self.knnModelFileSelector.selectedFiles()[0]
|
||||
self.settings.setKnnModelFile(file)
|
||||
|
||||
def on_knnModelFileSelector_accepted(self):
|
||||
self.setKnnModelFile()
|
||||
|
||||
def setSiftDatabaseFile(self):
|
||||
file = self.siftDatabaseFileSelector.selectedFiles()[0]
|
||||
self.settings.setSiftDatabaseFile(file)
|
||||
|
||||
def on_siftDatabaseFileSelector_accepted(self):
|
||||
self.setSiftDatabaseFile()
|
106
ui/implements/settings/settingsGeneral.py
Normal file
106
ui/implements/settings/settingsGeneral.py
Normal file
@ -0,0 +1,106 @@
|
||||
import sys
|
||||
|
||||
from PySide6.QtCore import QCoreApplication, QDir, QLocale, QProcess
|
||||
from PySide6.QtWidgets import (
|
||||
QApplication,
|
||||
QCheckBox,
|
||||
QComboBox,
|
||||
QLabel,
|
||||
QMessageBox,
|
||||
QPushButton,
|
||||
)
|
||||
|
||||
from ui.extends.shared.language import changeAppLanguage, localeToCode, localeToFullName
|
||||
from ui.extends.shared.settings import DATABASE_URL, LANGUAGE
|
||||
from ui.implements.settings.settingsBaseWidget import SettingsBaseWidget
|
||||
|
||||
|
||||
class SettingsGeneral(SettingsBaseWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.setupUi(self)
|
||||
|
||||
availableLanguageFiles = QDir(":/lang").entryInfoList(QDir.Filter.Files)
|
||||
for fileInfo in availableLanguageFiles:
|
||||
languageCode = fileInfo.baseName()
|
||||
locale = QLocale(languageCode)
|
||||
self.languageValueWidget.addItem(localeToFullName(locale), locale)
|
||||
self.languageValueWidget.setCurrentIndex(-1)
|
||||
self.languageValueWidget.currentIndexChanged.connect(self.changeLanguage)
|
||||
self.languageFollowSystemCheckBox.toggled.connect(
|
||||
self.changeLanguageFollowSystem
|
||||
)
|
||||
if self.settings.language():
|
||||
locale = QLocale(self.settings.language())
|
||||
index = self.languageValueWidget.findData(locale)
|
||||
if index > -1:
|
||||
self.languageValueWidget.setCurrentIndex(index)
|
||||
else:
|
||||
self.languageFollowSystemCheckBox.setChecked(True)
|
||||
self.insertItem("language", self.languageLabel, self.languageValueWidget)
|
||||
self.gridLayout.addWidget(
|
||||
self.languageFollowSystemCheckBox,
|
||||
self.gridLayout.rowCount() - 1,
|
||||
self.gridLayout.columnCount(),
|
||||
)
|
||||
|
||||
self.dbUrlResetButton.clicked.connect(self.resetDbUrl)
|
||||
self.insertItem(
|
||||
"dbUrl",
|
||||
self.dbUrlLabel,
|
||||
QLabel(self.settings.databaseUrl()),
|
||||
self.dbUrlResetButton,
|
||||
)
|
||||
|
||||
def changeLanguage(self):
|
||||
locale = self.languageValueWidget.currentData()
|
||||
if locale:
|
||||
changeAppLanguage(locale)
|
||||
self.settings.setLanguage(localeToCode(locale))
|
||||
|
||||
def changeLanguageFollowSystem(self):
|
||||
followSystem = self.languageFollowSystemCheckBox.isChecked()
|
||||
self.languageValueWidget.setCurrentIndex(-1)
|
||||
if followSystem:
|
||||
self.settings.remove(LANGUAGE)
|
||||
changeAppLanguage(QLocale.system())
|
||||
self.languageValueWidget.setEnabled(False)
|
||||
else:
|
||||
self.languageValueWidget.setEnabled(True)
|
||||
|
||||
def resetDbUrl(self):
|
||||
userConfirm = QMessageBox.warning(
|
||||
self,
|
||||
None,
|
||||
QCoreApplication.translate("Settings", "general.dbUrlResetWarning"),
|
||||
QMessageBox.StandardButton.Yes,
|
||||
QMessageBox.StandardButton.No,
|
||||
)
|
||||
if userConfirm == QMessageBox.StandardButton.Yes:
|
||||
self.settings.remove(DATABASE_URL)
|
||||
QApplication.instance().quit()
|
||||
|
||||
def setupUi(self, *args):
|
||||
self.languageLabel = QLabel(self)
|
||||
self.languageValueWidget = QComboBox(self)
|
||||
self.languageFollowSystemCheckBox = QCheckBox(self)
|
||||
|
||||
self.dbUrlLabel = QLabel(self)
|
||||
self.dbUrlResetButton = QPushButton(self)
|
||||
|
||||
super().setupUi(self)
|
||||
self.retranslateUi()
|
||||
|
||||
def retranslateUi(self, *args):
|
||||
super().retranslateUi(self)
|
||||
|
||||
# fmt: off
|
||||
self.setTitle(QCoreApplication.translate("Settings", "general.title"))
|
||||
|
||||
self.languageLabel.setText(QCoreApplication.translate("Settings", "general.language.label"))
|
||||
self.languageFollowSystemCheckBox.setText(QCoreApplication.translate("Settings", "general.language.followSystem"))
|
||||
|
||||
self.dbUrlLabel.setText(QCoreApplication.translate("Settings", "general.dbUrl.label"))
|
||||
self.dbUrlResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
|
||||
# fmt: on
|
147
ui/implements/settings/settingsOcr.py
Normal file
147
ui/implements/settings/settingsOcr.py
Normal file
@ -0,0 +1,147 @@
|
||||
from PySide6.QtCore import QCoreApplication
|
||||
from PySide6.QtWidgets import QLabel, QPushButton
|
||||
|
||||
from ui.implements.components.devicesComboBox import DevicesComboBox
|
||||
from ui.implements.components.fileSelector import FileSelector
|
||||
from ui.implements.settings.settingsBaseWidget import SettingsBaseWidget
|
||||
|
||||
|
||||
class SettingsOcr(SettingsBaseWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.setupUi(self)
|
||||
|
||||
if self.settings.devicesJsonFile():
|
||||
self.devicesJsonValueWidget.selectFile(self.settings.devicesJsonFile())
|
||||
self.devicesJsonValueWidget.filesSelected.connect(self.setDevicesJson)
|
||||
self.devicesJsonResetButton.clicked.connect(self.resetDevicesJson)
|
||||
self.insertItem(
|
||||
"devicesJson",
|
||||
self.devicesJsonLabel,
|
||||
self.devicesJsonValueWidget,
|
||||
self.devicesJsonResetButton,
|
||||
)
|
||||
|
||||
if self.settings.deviceUuid():
|
||||
self.deviceUuidValueWidget.selectDevice(self.settings.deviceUuid())
|
||||
self.deviceUuidValueWidget.activated.connect(self.setDeviceUuid)
|
||||
self.deviceUuidResetButton.clicked.connect(self.resetDeviceUuid)
|
||||
self.insertItem(
|
||||
"deviceUuid",
|
||||
self.deviceUuidLabel,
|
||||
self.deviceUuidValueWidget,
|
||||
self.deviceUuidResetButton,
|
||||
)
|
||||
|
||||
if self.settings.knnModelFile():
|
||||
self.knnModelFileValueWidget.selectFile(self.settings.knnModelFile())
|
||||
self.knnModelFileValueWidget.filesSelected.connect(self.setKnnModelFile)
|
||||
self.knnModelFileResetButton.clicked.connect(self.resetKnnModelFile)
|
||||
self.insertItem(
|
||||
"knnModelFile",
|
||||
self.knnModelFileLabel,
|
||||
self.knnModelFileValueWidget,
|
||||
self.knnModelFileResetButton,
|
||||
)
|
||||
|
||||
if self.settings.siftDatabaseFile():
|
||||
self.siftDatabaseFileValueWidget.selectFile(
|
||||
self.settings.siftDatabaseFile()
|
||||
)
|
||||
self.siftDatabaseFileValueWidget.filesSelected.connect(self.setSiftDatabaseFile)
|
||||
self.siftDatabaseFileResetButton.clicked.connect(self.resetSiftDatabaseFile)
|
||||
self.insertItem(
|
||||
"siftDatabaseFile",
|
||||
self.siftDatabaseFileLabel,
|
||||
self.siftDatabaseFileValueWidget,
|
||||
self.siftDatabaseFileResetButton,
|
||||
)
|
||||
|
||||
def setDevicesJson(self):
|
||||
selectedFile = self.devicesJsonValueWidget.selectedFiles()
|
||||
if selectedFile and selectedFile[0]:
|
||||
file = selectedFile[0]
|
||||
self.settings.setDevicesJsonFile(file)
|
||||
self.fillDeviceUuidComboBox()
|
||||
|
||||
def fillDeviceUuidComboBox(self):
|
||||
devicesJsonPath = self.devicesJsonValueWidget.selectedFiles()[0]
|
||||
self.deviceUuidValueWidget.loadDevicesJson(devicesJsonPath)
|
||||
|
||||
storedDeviceUuid = self.settings.deviceUuid()
|
||||
self.deviceUuidValueWidget.selectDevice(storedDeviceUuid)
|
||||
|
||||
def resetDevicesJson(self):
|
||||
self.deviceUuidValueWidget.clear()
|
||||
self.devicesJsonValueWidget.reset()
|
||||
self.settings.resetDeviceUuid()
|
||||
self.settings.resetDevicesJsonFile()
|
||||
|
||||
def setDeviceUuid(self):
|
||||
device = self.deviceUuidValueWidget.currentData()
|
||||
if device:
|
||||
self.settings.setDeviceUuid(device.uuid)
|
||||
|
||||
def resetDeviceUuid(self):
|
||||
self.deviceUuidValueWidget.setCurrentIndex(-1)
|
||||
self.settings.resetDeviceUuid()
|
||||
|
||||
def setKnnModelFile(self):
|
||||
selectedFile = self.knnModelFileValueWidget.selectedFiles()
|
||||
if selectedFile and selectedFile[0]:
|
||||
file = selectedFile[0]
|
||||
self.settings.setKnnModelFile(file)
|
||||
|
||||
def resetKnnModelFile(self):
|
||||
self.knnModelFileValueWidget.reset()
|
||||
self.settings.resetKnnModelFile()
|
||||
|
||||
def setSiftDatabaseFile(self):
|
||||
selectedFile = self.siftDatabaseFileValueWidget.selectedFiles()
|
||||
if selectedFile and selectedFile[0]:
|
||||
file = selectedFile[0]
|
||||
self.settings.setSiftDatabaseFile(file)
|
||||
|
||||
def resetSiftDatabaseFile(self):
|
||||
self.siftDatabaseFileValueWidget.reset()
|
||||
self.settings.resetSiftDatabaseFile()
|
||||
|
||||
def setupUi(self, *args):
|
||||
self.devicesJsonLabel = QLabel(self)
|
||||
self.devicesJsonValueWidget = FileSelector(self)
|
||||
self.devicesJsonResetButton = QPushButton(self)
|
||||
|
||||
self.deviceUuidLabel = QLabel(self)
|
||||
self.deviceUuidValueWidget = DevicesComboBox(self)
|
||||
self.deviceUuidResetButton = QPushButton(self)
|
||||
|
||||
self.knnModelFileLabel = QLabel(self)
|
||||
self.knnModelFileValueWidget = FileSelector(self)
|
||||
self.knnModelFileResetButton = QPushButton(self)
|
||||
|
||||
self.siftDatabaseFileLabel = QLabel(self)
|
||||
self.siftDatabaseFileValueWidget = FileSelector(self)
|
||||
self.siftDatabaseFileResetButton = QPushButton(self)
|
||||
|
||||
super().setupUi(self)
|
||||
self.retranslateUi()
|
||||
|
||||
def retranslateUi(self, *args):
|
||||
super().retranslateUi(self)
|
||||
|
||||
# fmt: off
|
||||
self.setTitle(QCoreApplication.translate("Settings", "ocr.title"))
|
||||
|
||||
self.devicesJsonLabel.setText(QCoreApplication.translate("Settings", "ocr.devicesJson.label"))
|
||||
self.devicesJsonResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
|
||||
|
||||
self.deviceUuidLabel.setText(QCoreApplication.translate("Settings", "ocr.deviceUuid.label"))
|
||||
self.deviceUuidResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
|
||||
|
||||
self.knnModelFileLabel.setText(QCoreApplication.translate("Settings", "ocr.knnModelFile.label"))
|
||||
self.knnModelFileResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
|
||||
|
||||
self.siftDatabaseFileLabel.setText(QCoreApplication.translate("Settings", "ocr.siftDatabaseFile.label"))
|
||||
self.siftDatabaseFileResetButton.setText(QCoreApplication.translate("Settings", "resetButton"))
|
||||
# fmt: on
|
Reference in New Issue
Block a user