mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-01 04:16:26 +00:00
wip: refactor
This commit is contained in:
@ -4,3 +4,4 @@ from .elidedLabel import ElidedLabel
|
||||
from .fileSelector import FileSelector
|
||||
from .ratingClassRadioButton import RatingClassRadioButton
|
||||
from .scoreEditor import ScoreEditor
|
||||
from .ocrQueue import OcrQueue
|
||||
|
@ -1,4 +1,4 @@
|
||||
from arcaea_offline_ocr.device import Device
|
||||
from arcaea_offline_ocr.device.v1.definition import DeviceV1
|
||||
from PySide6.QtCore import Qt
|
||||
from PySide6.QtWidgets import QComboBox
|
||||
|
||||
@ -13,7 +13,7 @@ class DevicesComboBox(QComboBox):
|
||||
super().__init__(parent)
|
||||
self.setItemDelegate(DescriptionDelegate(self))
|
||||
|
||||
def setDevices(self, devices: list[Device]):
|
||||
def setDevices(self, devices: list[DeviceV1]):
|
||||
self.clear()
|
||||
for device in devices:
|
||||
self.addItem(f"{device.name} ({device.uuid})", device)
|
||||
|
133
ui/implements/components/ocrQueue.py
Normal file
133
ui/implements/components/ocrQueue.py
Normal file
@ -0,0 +1,133 @@
|
||||
from typing import Optional
|
||||
|
||||
from PySide6.QtCore import Qt, QTimer, Slot
|
||||
from PySide6.QtGui import QColor, QPalette
|
||||
from PySide6.QtWidgets import QWidget
|
||||
|
||||
from ui.designer.components.ocrQueue_ui import Ui_OcrQueue
|
||||
from ui.extends.components.ocrQueue import (
|
||||
OcrChartDelegate,
|
||||
OcrImageDelegate,
|
||||
OcrQueueModel,
|
||||
OcrQueueTableProxyModel,
|
||||
OcrScoreDelegate,
|
||||
)
|
||||
|
||||
|
||||
class OcrQueue(Ui_OcrQueue, QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
self.__model: Optional[OcrQueueModel] = None
|
||||
self.__tableProxyModel: Optional[OcrQueueTableProxyModel] = None
|
||||
|
||||
self.__firstResizeDone = False
|
||||
self.resizeTimer = QTimer(self)
|
||||
self.resizeTimer.timeout.connect(self.tableView.resizeRowsToContents)
|
||||
self.resizeTimer.timeout.connect(self.tableView.resizeColumnsToContents)
|
||||
|
||||
self.tableView.setItemDelegateForColumn(1, OcrImageDelegate(self.tableView))
|
||||
self.tableView.setItemDelegateForColumn(2, OcrChartDelegate(self.tableView))
|
||||
self.tableView.setItemDelegateForColumn(3, OcrScoreDelegate(self.tableView))
|
||||
|
||||
tableViewPalette = QPalette(self.tableView.palette())
|
||||
highlightColor = QColor(tableViewPalette.color(QPalette.ColorRole.Highlight))
|
||||
highlightColor.setAlpha(25)
|
||||
tableViewPalette.setColor(QPalette.ColorRole.Highlight, highlightColor)
|
||||
self.tableView.setPalette(tableViewPalette)
|
||||
|
||||
def model(self):
|
||||
return self.__model
|
||||
|
||||
def setModel(self, model: OcrQueueModel):
|
||||
model.dataChanged.connect(self.resizeViewWhenDataChanged)
|
||||
model.started.connect(self.ocrStarted)
|
||||
model.progress.connect(self.ocrProgress)
|
||||
model.finished.connect(self.ocrFinished)
|
||||
model.rowsInserted.connect(self.updateProgressBarMaximum)
|
||||
model.rowsRemoved.connect(self.updateProgressBarMaximum)
|
||||
model.modelReset.connect(self.modelReseted)
|
||||
proxyModel = OcrQueueTableProxyModel(self)
|
||||
proxyModel.setSourceModel(model)
|
||||
self.tableView.setModel(proxyModel)
|
||||
|
||||
if self.__model:
|
||||
self.__model.dataChanged.disconnect(self.resizeViewWhenDataChanged)
|
||||
self.__model.started.disconnect(self.ocrStarted)
|
||||
self.__model.progress.disconnect(self.ocrProgress)
|
||||
self.__model.finished.disconnect(self.ocrFinished)
|
||||
self.__model.rowsInserted.disconnect(self.updateProgressBarMaximum)
|
||||
self.__model.rowsRemoved.disconnect(self.updateProgressBarMaximum)
|
||||
self.__model.modelReset.disconnect(self.modelReseted)
|
||||
if self.__tableProxyModel:
|
||||
self.__tableProxyModel.deleteLater()
|
||||
|
||||
self.__model = model
|
||||
self.__tableProxyModel = proxyModel
|
||||
|
||||
def tableProxyModel(self):
|
||||
return self.__tableProxyModel
|
||||
|
||||
def setOcrButtonsEnabled(self, __bool: bool):
|
||||
self.ocr_addImageButton.setEnabled(__bool)
|
||||
self.ocr_removeSelectedButton.setEnabled(__bool)
|
||||
self.ocr_removeAllButton.setEnabled(__bool)
|
||||
self.ocr_startButton.setEnabled(__bool)
|
||||
self.ocr_acceptSelectedButton.setEnabled(__bool)
|
||||
self.ocr_acceptAllButton.setEnabled(__bool)
|
||||
self.ocr_ignoreValidateCheckBox.setEnabled(__bool)
|
||||
|
||||
def resizeTableView(self):
|
||||
self.tableView.resizeRowsToContents()
|
||||
self.tableView.resizeColumnsToContents()
|
||||
|
||||
def resizeViewWhenDataChanged(self):
|
||||
if not self.__firstResizeDone:
|
||||
self.resizeTableView()
|
||||
self.__firstResizeDone = True
|
||||
|
||||
def ocrStarted(self):
|
||||
self.setOcrButtonsEnabled(False)
|
||||
|
||||
def updateProgressBarMaximum(self):
|
||||
self.progressBar.setMaximum(self.model().rowCount())
|
||||
|
||||
@Slot(int)
|
||||
def ocrProgress(self, progress: int):
|
||||
self.progressBar.setValue(progress)
|
||||
|
||||
def ocrFinished(self):
|
||||
self.resizeTableView()
|
||||
self.setOcrButtonsEnabled(True)
|
||||
|
||||
def modelReseted(self):
|
||||
self.progressBar.setMaximum(0)
|
||||
|
||||
@Slot()
|
||||
def on_ocr_removeSelectedButton_clicked(self):
|
||||
if self.model():
|
||||
rows = [
|
||||
modelIndex.row()
|
||||
for modelIndex in self.tableView.selectionModel().selectedRows(0)
|
||||
]
|
||||
self.model().removeItems(rows)
|
||||
|
||||
@Slot()
|
||||
def on_ocr_acceptSelectedButton_clicked(self):
|
||||
if self.model():
|
||||
ignoreValidate = (
|
||||
self.ocr_ignoreValidateCheckBox.checkState() == Qt.CheckState.Checked
|
||||
)
|
||||
rows = [
|
||||
modelIndex.row()
|
||||
for modelIndex in self.tableView.selectionModel().selectedRows(0)
|
||||
]
|
||||
self.model().acceptItems(rows, ignoreValidate)
|
||||
|
||||
@Slot()
|
||||
def on_ocr_acceptAllButton_clicked(self):
|
||||
if self.model():
|
||||
ignoreValidate = (
|
||||
self.ocr_ignoreValidateCheckBox.checkState() == Qt.CheckState.Checked
|
||||
)
|
||||
self.model().acceptAllItems(ignoreValidate)
|
Reference in New Issue
Block a user