mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-01 04:16:26 +00:00
refactor: settings & language
This commit is contained in:
@ -8,6 +8,7 @@ from PySide6.QtGui import QShowEvent
|
||||
from PySide6.QtWidgets import QWidget
|
||||
|
||||
from ui.designer.components.chartSelector_ui import Ui_ChartSelector
|
||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -20,6 +21,9 @@ class ChartSelector(Ui_ChartSelector, QWidget):
|
||||
self.db = Database()
|
||||
self.setupUi(self)
|
||||
|
||||
self.languageChangeEventFilter = LanguageChangeEventFilter(self)
|
||||
self.installEventFilter(self.languageChangeEventFilter)
|
||||
|
||||
self.valueChanged.connect(self.updateResultLabel)
|
||||
self.songIdSelector.valueChanged.connect(self.updateRatingClassEnabled)
|
||||
|
||||
|
@ -2,6 +2,7 @@ from PySide6.QtCore import QDir, QFileInfo, QMetaObject, Qt, Signal, Slot
|
||||
from PySide6.QtWidgets import QFileDialog, QWidget
|
||||
|
||||
from ui.designer.components.fileSelector_ui import Ui_FileSelector
|
||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||
|
||||
|
||||
class FileSelector(Ui_FileSelector, QWidget):
|
||||
@ -13,6 +14,9 @@ class FileSelector(Ui_FileSelector, QWidget):
|
||||
self.setupUi(self)
|
||||
self.reset()
|
||||
|
||||
self.languageChangeEventFilter = LanguageChangeEventFilter(self)
|
||||
self.installEventFilter(self.languageChangeEventFilter)
|
||||
|
||||
self.elidedLabel.setElideMode(Qt.TextElideMode.ElideMiddle)
|
||||
|
||||
self.accepted.connect(self.filesSelected)
|
||||
|
@ -12,12 +12,17 @@ from ui.extends.components.ocrQueue import (
|
||||
OcrQueueTableProxyModel,
|
||||
OcrScoreDelegate,
|
||||
)
|
||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||
|
||||
|
||||
class OcrQueue(Ui_OcrQueue, QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.languageChangeEventFilter = LanguageChangeEventFilter(self)
|
||||
self.installEventFilter(self.languageChangeEventFilter)
|
||||
|
||||
self.__model: Optional[OcrQueueModel] = None
|
||||
self.__tableProxyModel: Optional[OcrQueueTableProxyModel] = None
|
||||
|
||||
|
@ -15,6 +15,7 @@ from PySide6.QtWidgets import (
|
||||
)
|
||||
|
||||
from ui.designer.components.scoreEditor_ui import Ui_ScoreEditor
|
||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||
|
||||
|
||||
class ScoreValidateResult(IntEnum):
|
||||
@ -33,6 +34,9 @@ class ScoreEditor(Ui_ScoreEditor, QWidget):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.languageChangeEventFilter = LanguageChangeEventFilter(self)
|
||||
self.installEventFilter(self.languageChangeEventFilter)
|
||||
|
||||
self.__validateBeforeAccept = True
|
||||
self.__chart = None
|
||||
self.__score_id = None
|
||||
|
@ -11,6 +11,7 @@ from PySide6.QtWidgets import QCompleter, QWidget
|
||||
from ui.designer.components.songIdSelector_ui import Ui_SongIdSelector
|
||||
from ui.extends.components.songIdSelector import SearchCompleterModel
|
||||
from ui.extends.shared.delegates.descriptionDelegate import DescriptionDelegate
|
||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
@ -23,6 +24,9 @@ class SongIdSelector(Ui_SongIdSelector, QWidget):
|
||||
self.db = Database()
|
||||
self.setupUi(self)
|
||||
|
||||
self.languageChangeEventFilter = LanguageChangeEventFilter(self)
|
||||
self.installEventFilter(self.languageChangeEventFilter)
|
||||
|
||||
self.previousPackageButton.clicked.connect(
|
||||
lambda: self.quickSwitchSelection("previous", "package")
|
||||
)
|
||||
|
@ -1,21 +1,7 @@
|
||||
from traceback import format_exception
|
||||
|
||||
from PySide6.QtWidgets import QMainWindow
|
||||
|
||||
from ui.designer.mainwindow_ui import Ui_MainWindow
|
||||
from ui.implements.tabs.tabOcrEntry import TabOcrEntry
|
||||
|
||||
# try:
|
||||
# import arcaea_offline_ocr
|
||||
|
||||
# from ui.implements.tabs.tabOcr import TabOcr
|
||||
|
||||
# OCR_ENABLED_FLAG = True
|
||||
# except Exception as e:
|
||||
# from ui.implements.tabs.tabOcrDisabled import TabOcrDisabled
|
||||
|
||||
# OCR_ENABLED_FLAG = False
|
||||
# OCR_ERROR_TEXT = "\n".join(format_exception(e))
|
||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||
|
||||
|
||||
class MainWindow(Ui_MainWindow, QMainWindow):
|
||||
@ -23,16 +9,5 @@ class MainWindow(Ui_MainWindow, QMainWindow):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
# currentIndex = self.tabWidget.currentIndex()
|
||||
# ocrTabIndex = self.tabWidget.indexOf(self.tab_ocr)
|
||||
# self.tabWidget.removeTab(ocrTabIndex)
|
||||
# self.tab_ocr.deleteLater()
|
||||
# if OCR_ENABLED_FLAG:
|
||||
# self.tab_ocr = TabOcr(self.tabWidget)
|
||||
# else:
|
||||
# self.tab_ocr = TabOcrDisabled(self.tabWidget)
|
||||
# self.tab_ocr.contentLabel.setText(OCR_ERROR_TEXT)
|
||||
# self.tab_ocr = TabOcrEntry(self.tabWidget)
|
||||
# self.tabWidget.insertTab(ocrTabIndex, self.tab_ocr, "")
|
||||
# self.tabWidget.setCurrentIndex(currentIndex)
|
||||
# self.retranslateUi(self)
|
||||
self.languageChangeEventFilter = LanguageChangeEventFilter(self)
|
||||
self.installEventFilter(self.languageChangeEventFilter)
|
||||
|
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
|
@ -1,11 +1,21 @@
|
||||
from PySide6.QtCore import QModelIndex, Slot
|
||||
from PySide6.QtCore import QCoreApplication, Slot
|
||||
from PySide6.QtWidgets import QListWidgetItem, QWidget
|
||||
|
||||
from ui.designer.tabs.tabSettings_ui import Ui_TabSettings
|
||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||
from ui.implements.settings.settingsAndreal import SettingsAndreal
|
||||
from ui.implements.settings.settingsGeneral import SettingsGeneral
|
||||
from ui.implements.settings.settingsOcr import SettingsOcr
|
||||
|
||||
|
||||
class SettingsEntryItem(QListWidgetItem):
|
||||
pass
|
||||
class SettingsLabelItem(QListWidgetItem):
|
||||
def __init__(self, translatorKey: str):
|
||||
super().__init__()
|
||||
self.translatorKey = translatorKey
|
||||
self.retranslateUi()
|
||||
|
||||
def retranslateUi(self):
|
||||
self.setText(QCoreApplication.translate("Settings", self.translatorKey))
|
||||
|
||||
|
||||
class TabSettings(Ui_TabSettings, QWidget):
|
||||
@ -13,11 +23,42 @@ class TabSettings(Ui_TabSettings, QWidget):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.listWidget.addItem("Default")
|
||||
self.listWidget.activated.connect(self.switchPage)
|
||||
self.languageChangeEventFilter = LanguageChangeEventFilter(self)
|
||||
self.installEventFilter(self.languageChangeEventFilter)
|
||||
|
||||
self.listWidget.itemClicked.connect(self.switchPage)
|
||||
|
||||
self.listWidget.addItem(self.settingsGeneralLabel)
|
||||
self.stackedWidget.addWidget(self.settingsGeneral)
|
||||
|
||||
self.listWidget.addItem(self.settingsOcrLabel)
|
||||
self.stackedWidget.addWidget(self.settingsOcr)
|
||||
|
||||
self.listWidget.addItem(self.settingsAndrealLabel)
|
||||
self.stackedWidget.addWidget(self.settingsAndreal)
|
||||
|
||||
self.listWidget.setCurrentRow(self.stackedWidget.currentIndex())
|
||||
|
||||
@Slot(QModelIndex)
|
||||
def switchPage(self, index: QModelIndex):
|
||||
self.stackedWidget.setCurrentIndex(index.row())
|
||||
@Slot(QListWidgetItem)
|
||||
def switchPage(self, item: QListWidgetItem):
|
||||
item.setSelected(True)
|
||||
self.stackedWidget.setCurrentIndex(self.listWidget.indexFromItem(item).row())
|
||||
|
||||
def setupUi(self, *args):
|
||||
self.settingsGeneralLabel = SettingsLabelItem("general.title")
|
||||
self.settingsGeneral = SettingsGeneral(self)
|
||||
self.settingsOcrLabel = SettingsLabelItem("ocr.title")
|
||||
self.settingsOcr = SettingsOcr(self)
|
||||
self.settingsAndrealLabel = SettingsLabelItem("andreal.title")
|
||||
self.settingsAndreal = SettingsAndreal(self)
|
||||
super().setupUi(self)
|
||||
|
||||
def retranslateUi(self, *args):
|
||||
super().retranslateUi(self)
|
||||
|
||||
self.settingsGeneralLabel.retranslateUi()
|
||||
self.settingsGeneral.retranslateUi()
|
||||
self.settingsOcrLabel.retranslateUi()
|
||||
self.settingsOcr.retranslateUi()
|
||||
self.settingsAndrealLabel.retranslateUi()
|
||||
self.settingsAndreal.retranslateUi()
|
||||
|
Reference in New Issue
Block a user