diff --git a/ui/designer/components/scoreEditor.ui b/ui/designer/components/scoreEditor.ui
index b10cb65..1567213 100644
--- a/ui/designer/components/scoreEditor.ui
+++ b/ui/designer/components/scoreEditor.ui
@@ -39,6 +39,9 @@
0
+
+ 0
+
0
@@ -206,6 +209,9 @@
0
+
+ 0
+
0
@@ -287,6 +293,9 @@
0
+
+ 0
+
0
@@ -336,6 +345,13 @@
+ -
+
+
+ warnIfIncomplete
+
+
+
diff --git a/ui/designer/components/scoreEditor_ui.py b/ui/designer/components/scoreEditor_ui.py
index c0662a4..935ae6a 100644
--- a/ui/designer/components/scoreEditor_ui.py
+++ b/ui/designer/components/scoreEditor_ui.py
@@ -1,284 +1,293 @@
-# -*- coding: utf-8 -*-
-
-################################################################################
-## Form generated from reading UI file 'scoreEditor.ui'
-##
-## Created by: Qt User Interface Compiler version 6.5.2
-##
-## WARNING! All changes made in this file will be lost when recompiling UI file!
-################################################################################
-
-from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
- QMetaObject, QObject, QPoint, QRect,
- QSize, QTime, QUrl, Qt)
-from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
- QFont, QFontDatabase, QGradient, QIcon,
- QImage, QKeySequence, QLinearGradient, QPainter,
- QPalette, QPixmap, QRadialGradient, QTransform)
-from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDateTimeEdit,
- QGridLayout, QLabel, QLineEdit, QPushButton,
- QSizePolicy, QSpacerItem, QSpinBox, QWidget)
-
-from ui.implements.components.focusSelectAllLineEdit import FocusSelectAllLineEdit
-
-class Ui_ScoreEditor(object):
- def setupUi(self, ScoreEditor):
- if not ScoreEditor.objectName():
- ScoreEditor.setObjectName(u"ScoreEditor")
- ScoreEditor.resize(450, 350)
- ScoreEditor.setWindowTitle(u"ScoreEditor")
- self.gridLayout = QGridLayout(ScoreEditor)
- self.gridLayout.setObjectName(u"gridLayout")
- self.pureNoneCheckBox = QCheckBox(ScoreEditor)
- self.pureNoneCheckBox.setObjectName(u"pureNoneCheckBox")
-
- self.gridLayout.addWidget(self.pureNoneCheckBox, 2, 2, 1, 1)
-
- self.label_7 = QLabel(ScoreEditor)
- self.label_7.setObjectName(u"label_7")
- self.label_7.setText(u"Modifier")
- self.label_7.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_7, 9, 0, 1, 1)
-
- self.pureSpinBox = QSpinBox(ScoreEditor)
- self.pureSpinBox.setObjectName(u"pureSpinBox")
- self.pureSpinBox.setMinimumSize(QSize(100, 0))
- self.pureSpinBox.setMaximum(0)
-
- self.gridLayout.addWidget(self.pureSpinBox, 2, 1, 1, 1)
-
- self.clearTypeNoneCheckBox = QCheckBox(ScoreEditor)
- self.clearTypeNoneCheckBox.setObjectName(u"clearTypeNoneCheckBox")
- self.clearTypeNoneCheckBox.setChecked(True)
-
- self.gridLayout.addWidget(self.clearTypeNoneCheckBox, 10, 2, 1, 1)
-
- self.label_2 = QLabel(ScoreEditor)
- self.label_2.setObjectName(u"label_2")
- self.label_2.setText(u"PURE")
- self.label_2.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
-
- self.label_4 = QLabel(ScoreEditor)
- self.label_4.setObjectName(u"label_4")
- self.label_4.setText(u"LOST")
- self.label_4.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1)
-
- self.dateNoneCheckBox = QCheckBox(ScoreEditor)
- self.dateNoneCheckBox.setObjectName(u"dateNoneCheckBox")
-
- self.gridLayout.addWidget(self.dateNoneCheckBox, 5, 2, 1, 1)
-
- self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
-
- self.gridLayout.addItem(self.verticalSpacer, 6, 1, 1, 1)
-
- self.validateLabel = QLabel(ScoreEditor)
- self.validateLabel.setObjectName(u"validateLabel")
- sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
- sizePolicy.setHorizontalStretch(0)
- sizePolicy.setVerticalStretch(0)
- sizePolicy.setHeightForWidth(self.validateLabel.sizePolicy().hasHeightForWidth())
- self.validateLabel.setSizePolicy(sizePolicy)
- self.validateLabel.setText(u"...")
- self.validateLabel.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.validateLabel, 12, 1, 1, 1)
-
- self.clearTypeComboBox = QComboBox(ScoreEditor)
- self.clearTypeComboBox.setObjectName(u"clearTypeComboBox")
- self.clearTypeComboBox.setEnabled(False)
- self.clearTypeComboBox.setMinimumSize(QSize(100, 0))
-
- self.gridLayout.addWidget(self.clearTypeComboBox, 10, 1, 1, 1)
-
- self.label_8 = QLabel(ScoreEditor)
- self.label_8.setObjectName(u"label_8")
- self.label_8.setText(u"Clear Type")
- self.label_8.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_8, 10, 0, 1, 1)
-
- self.label_3 = QLabel(ScoreEditor)
- self.label_3.setObjectName(u"label_3")
- self.label_3.setText(u"FAR")
- self.label_3.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
-
- self.label_6 = QLabel(ScoreEditor)
- self.label_6.setObjectName(u"label_6")
- self.label_6.setText(u"MAX RECALL")
- self.label_6.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_6, 8, 0, 1, 1)
-
- self.maxRecallSpinBox = QSpinBox(ScoreEditor)
- self.maxRecallSpinBox.setObjectName(u"maxRecallSpinBox")
- self.maxRecallSpinBox.setEnabled(False)
- self.maxRecallSpinBox.setMinimumSize(QSize(100, 0))
- self.maxRecallSpinBox.setMinimum(0)
- self.maxRecallSpinBox.setMaximum(0)
- self.maxRecallSpinBox.setValue(0)
-
- self.gridLayout.addWidget(self.maxRecallSpinBox, 8, 1, 1, 1)
-
- self.modifierComboBox = QComboBox(ScoreEditor)
- self.modifierComboBox.setObjectName(u"modifierComboBox")
- self.modifierComboBox.setEnabled(False)
-
- self.gridLayout.addWidget(self.modifierComboBox, 9, 1, 1, 1)
-
- self.dateTimeEdit = QDateTimeEdit(ScoreEditor)
- self.dateTimeEdit.setObjectName(u"dateTimeEdit")
- sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
- sizePolicy1.setHorizontalStretch(0)
- sizePolicy1.setVerticalStretch(0)
- sizePolicy1.setHeightForWidth(self.dateTimeEdit.sizePolicy().hasHeightForWidth())
- self.dateTimeEdit.setSizePolicy(sizePolicy1)
- self.dateTimeEdit.setDisplayFormat(u"yyyy/MM/dd HH:mm:ss")
- self.dateTimeEdit.setCalendarPopup(False)
-
- self.gridLayout.addWidget(self.dateTimeEdit, 5, 1, 1, 1)
-
- self.lostSpinBox = QSpinBox(ScoreEditor)
- self.lostSpinBox.setObjectName(u"lostSpinBox")
- self.lostSpinBox.setMinimumSize(QSize(100, 0))
- self.lostSpinBox.setMaximum(0)
-
- self.gridLayout.addWidget(self.lostSpinBox, 4, 1, 1, 1)
-
- self.lostNoneCheckBox = QCheckBox(ScoreEditor)
- self.lostNoneCheckBox.setObjectName(u"lostNoneCheckBox")
-
- self.gridLayout.addWidget(self.lostNoneCheckBox, 4, 2, 1, 1)
-
- self.commentLineEdit = QLineEdit(ScoreEditor)
- self.commentLineEdit.setObjectName(u"commentLineEdit")
- self.commentLineEdit.setEnabled(False)
-
- self.gridLayout.addWidget(self.commentLineEdit, 11, 1, 1, 1)
-
- self.modifierNoneCheckBox = QCheckBox(ScoreEditor)
- self.modifierNoneCheckBox.setObjectName(u"modifierNoneCheckBox")
- self.modifierNoneCheckBox.setChecked(True)
-
- self.gridLayout.addWidget(self.modifierNoneCheckBox, 9, 2, 1, 1)
-
- self.commentNoneCheckBox = QCheckBox(ScoreEditor)
- self.commentNoneCheckBox.setObjectName(u"commentNoneCheckBox")
- self.commentNoneCheckBox.setChecked(True)
-
- self.gridLayout.addWidget(self.commentNoneCheckBox, 11, 2, 1, 1)
-
- self.label_5 = QLabel(ScoreEditor)
- self.label_5.setObjectName(u"label_5")
- self.label_5.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_5, 5, 0, 1, 1)
-
- self.commitButton = QPushButton(ScoreEditor)
- self.commitButton.setObjectName(u"commitButton")
-
- self.gridLayout.addWidget(self.commitButton, 12, 2, 1, 1)
-
- self.scoreLineEdit = FocusSelectAllLineEdit(ScoreEditor)
- self.scoreLineEdit.setObjectName(u"scoreLineEdit")
- self.scoreLineEdit.setInputMask(u"B9'999'999;_")
-
- self.gridLayout.addWidget(self.scoreLineEdit, 1, 1, 1, 1)
-
- self.maxRecallNoneCheckBox = QCheckBox(ScoreEditor)
- self.maxRecallNoneCheckBox.setObjectName(u"maxRecallNoneCheckBox")
- self.maxRecallNoneCheckBox.setChecked(True)
-
- self.gridLayout.addWidget(self.maxRecallNoneCheckBox, 8, 2, 1, 1)
-
- self.farSpinBox = QSpinBox(ScoreEditor)
- self.farSpinBox.setObjectName(u"farSpinBox")
- self.farSpinBox.setMinimumSize(QSize(100, 0))
- self.farSpinBox.setMaximum(0)
-
- self.gridLayout.addWidget(self.farSpinBox, 3, 1, 1, 1)
-
- self.label_9 = QLabel(ScoreEditor)
- self.label_9.setObjectName(u"label_9")
- self.label_9.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_9, 11, 0, 1, 1)
-
- self.label = QLabel(ScoreEditor)
- self.label.setObjectName(u"label")
- self.label.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
-
- self.farNoneCheckBox = QCheckBox(ScoreEditor)
- self.farNoneCheckBox.setObjectName(u"farNoneCheckBox")
-
- self.gridLayout.addWidget(self.farNoneCheckBox, 3, 2, 1, 1)
-
- self.label_10 = QLabel(ScoreEditor)
- self.label_10.setObjectName(u"label_10")
- self.label_10.setText(u"ID")
- self.label_10.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
-
- self.gridLayout.addWidget(self.label_10, 0, 0, 1, 1)
-
- self.idLabel = QLabel(ScoreEditor)
- self.idLabel.setObjectName(u"idLabel")
-
- self.gridLayout.addWidget(self.idLabel, 0, 1, 1, 1)
-
- QWidget.setTabOrder(self.scoreLineEdit, self.pureSpinBox)
- QWidget.setTabOrder(self.pureSpinBox, self.pureNoneCheckBox)
- QWidget.setTabOrder(self.pureNoneCheckBox, self.farSpinBox)
- QWidget.setTabOrder(self.farSpinBox, self.farNoneCheckBox)
- QWidget.setTabOrder(self.farNoneCheckBox, self.lostSpinBox)
- QWidget.setTabOrder(self.lostSpinBox, self.lostNoneCheckBox)
- QWidget.setTabOrder(self.lostNoneCheckBox, self.dateTimeEdit)
- QWidget.setTabOrder(self.dateTimeEdit, self.dateNoneCheckBox)
- QWidget.setTabOrder(self.dateNoneCheckBox, self.maxRecallSpinBox)
- QWidget.setTabOrder(self.maxRecallSpinBox, self.maxRecallNoneCheckBox)
- QWidget.setTabOrder(self.maxRecallNoneCheckBox, self.modifierComboBox)
- QWidget.setTabOrder(self.modifierComboBox, self.modifierNoneCheckBox)
- QWidget.setTabOrder(self.modifierNoneCheckBox, self.clearTypeComboBox)
- QWidget.setTabOrder(self.clearTypeComboBox, self.clearTypeNoneCheckBox)
- QWidget.setTabOrder(self.clearTypeNoneCheckBox, self.commentLineEdit)
- QWidget.setTabOrder(self.commentLineEdit, self.commentNoneCheckBox)
- QWidget.setTabOrder(self.commentNoneCheckBox, self.commitButton)
-
- self.retranslateUi(ScoreEditor)
- self.pureNoneCheckBox.toggled.connect(self.pureSpinBox.setDisabled)
- self.clearTypeNoneCheckBox.toggled.connect(self.clearTypeComboBox.setDisabled)
- self.modifierNoneCheckBox.toggled.connect(self.modifierComboBox.setDisabled)
- self.maxRecallNoneCheckBox.toggled.connect(self.maxRecallSpinBox.setDisabled)
- self.dateNoneCheckBox.toggled.connect(self.dateTimeEdit.setDisabled)
- self.lostNoneCheckBox.toggled.connect(self.lostSpinBox.setDisabled)
- self.farNoneCheckBox.toggled.connect(self.farSpinBox.setDisabled)
- self.commentNoneCheckBox.toggled.connect(self.commentLineEdit.setDisabled)
-
- QMetaObject.connectSlotsByName(ScoreEditor)
- # setupUi
-
- def retranslateUi(self, ScoreEditor):
- self.pureNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
- self.clearTypeNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
- self.dateNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
- self.lostNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
- self.modifierNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
- self.commentNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
- self.label_5.setText(QCoreApplication.translate("ScoreEditor", u"formLabel.date", None))
- self.commitButton.setText(QCoreApplication.translate("ScoreEditor", u"commitButton", None))
- self.maxRecallNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
- self.label_9.setText(QCoreApplication.translate("ScoreEditor", u"formLabel.comment", None))
- self.label.setText(QCoreApplication.translate("ScoreEditor", u"formLabel.score", None))
- self.farNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
- self.idLabel.setText(QCoreApplication.translate("ScoreEditor", u"idAutoInsert", None))
- pass
- # retranslateUi
-
+# -*- coding: utf-8 -*-
+
+################################################################################
+## Form generated from reading UI file 'scoreEditor.ui'
+##
+## Created by: Qt User Interface Compiler version 6.5.2
+##
+## WARNING! All changes made in this file will be lost when recompiling UI file!
+################################################################################
+
+from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
+ QMetaObject, QObject, QPoint, QRect,
+ QSize, QTime, QUrl, Qt)
+from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
+ QFont, QFontDatabase, QGradient, QIcon,
+ QImage, QKeySequence, QLinearGradient, QPainter,
+ QPalette, QPixmap, QRadialGradient, QTransform)
+from PySide6.QtWidgets import (QApplication, QCheckBox, QComboBox, QDateTimeEdit,
+ QGridLayout, QLabel, QLineEdit, QPushButton,
+ QSizePolicy, QSpacerItem, QSpinBox, QWidget)
+
+from ui.implements.components.focusSelectAllLineEdit import FocusSelectAllLineEdit
+
+class Ui_ScoreEditor(object):
+ def setupUi(self, ScoreEditor):
+ if not ScoreEditor.objectName():
+ ScoreEditor.setObjectName(u"ScoreEditor")
+ ScoreEditor.resize(450, 350)
+ ScoreEditor.setWindowTitle(u"ScoreEditor")
+ self.gridLayout = QGridLayout(ScoreEditor)
+ self.gridLayout.setObjectName(u"gridLayout")
+ self.pureNoneCheckBox = QCheckBox(ScoreEditor)
+ self.pureNoneCheckBox.setObjectName(u"pureNoneCheckBox")
+
+ self.gridLayout.addWidget(self.pureNoneCheckBox, 2, 2, 1, 1)
+
+ self.label_7 = QLabel(ScoreEditor)
+ self.label_7.setObjectName(u"label_7")
+ self.label_7.setText(u"Modifier")
+ self.label_7.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_7, 9, 0, 1, 1)
+
+ self.pureSpinBox = QSpinBox(ScoreEditor)
+ self.pureSpinBox.setObjectName(u"pureSpinBox")
+ self.pureSpinBox.setMinimumSize(QSize(100, 0))
+ self.pureSpinBox.setMinimum(0)
+ self.pureSpinBox.setMaximum(0)
+
+ self.gridLayout.addWidget(self.pureSpinBox, 2, 1, 1, 1)
+
+ self.clearTypeNoneCheckBox = QCheckBox(ScoreEditor)
+ self.clearTypeNoneCheckBox.setObjectName(u"clearTypeNoneCheckBox")
+ self.clearTypeNoneCheckBox.setChecked(True)
+
+ self.gridLayout.addWidget(self.clearTypeNoneCheckBox, 10, 2, 1, 1)
+
+ self.label_2 = QLabel(ScoreEditor)
+ self.label_2.setObjectName(u"label_2")
+ self.label_2.setText(u"PURE")
+ self.label_2.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_2, 2, 0, 1, 1)
+
+ self.label_4 = QLabel(ScoreEditor)
+ self.label_4.setObjectName(u"label_4")
+ self.label_4.setText(u"LOST")
+ self.label_4.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_4, 4, 0, 1, 1)
+
+ self.dateNoneCheckBox = QCheckBox(ScoreEditor)
+ self.dateNoneCheckBox.setObjectName(u"dateNoneCheckBox")
+
+ self.gridLayout.addWidget(self.dateNoneCheckBox, 5, 2, 1, 1)
+
+ self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
+
+ self.gridLayout.addItem(self.verticalSpacer, 6, 1, 1, 1)
+
+ self.validateLabel = QLabel(ScoreEditor)
+ self.validateLabel.setObjectName(u"validateLabel")
+ sizePolicy = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Preferred)
+ sizePolicy.setHorizontalStretch(0)
+ sizePolicy.setVerticalStretch(0)
+ sizePolicy.setHeightForWidth(self.validateLabel.sizePolicy().hasHeightForWidth())
+ self.validateLabel.setSizePolicy(sizePolicy)
+ self.validateLabel.setText(u"...")
+ self.validateLabel.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.validateLabel, 12, 1, 1, 1)
+
+ self.clearTypeComboBox = QComboBox(ScoreEditor)
+ self.clearTypeComboBox.setObjectName(u"clearTypeComboBox")
+ self.clearTypeComboBox.setEnabled(False)
+ self.clearTypeComboBox.setMinimumSize(QSize(100, 0))
+
+ self.gridLayout.addWidget(self.clearTypeComboBox, 10, 1, 1, 1)
+
+ self.label_8 = QLabel(ScoreEditor)
+ self.label_8.setObjectName(u"label_8")
+ self.label_8.setText(u"Clear Type")
+ self.label_8.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_8, 10, 0, 1, 1)
+
+ self.label_3 = QLabel(ScoreEditor)
+ self.label_3.setObjectName(u"label_3")
+ self.label_3.setText(u"FAR")
+ self.label_3.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_3, 3, 0, 1, 1)
+
+ self.label_6 = QLabel(ScoreEditor)
+ self.label_6.setObjectName(u"label_6")
+ self.label_6.setText(u"MAX RECALL")
+ self.label_6.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_6, 8, 0, 1, 1)
+
+ self.maxRecallSpinBox = QSpinBox(ScoreEditor)
+ self.maxRecallSpinBox.setObjectName(u"maxRecallSpinBox")
+ self.maxRecallSpinBox.setEnabled(False)
+ self.maxRecallSpinBox.setMinimumSize(QSize(100, 0))
+ self.maxRecallSpinBox.setMinimum(0)
+ self.maxRecallSpinBox.setMaximum(0)
+ self.maxRecallSpinBox.setValue(0)
+
+ self.gridLayout.addWidget(self.maxRecallSpinBox, 8, 1, 1, 1)
+
+ self.modifierComboBox = QComboBox(ScoreEditor)
+ self.modifierComboBox.setObjectName(u"modifierComboBox")
+ self.modifierComboBox.setEnabled(False)
+
+ self.gridLayout.addWidget(self.modifierComboBox, 9, 1, 1, 1)
+
+ self.dateTimeEdit = QDateTimeEdit(ScoreEditor)
+ self.dateTimeEdit.setObjectName(u"dateTimeEdit")
+ sizePolicy1 = QSizePolicy(QSizePolicy.Expanding, QSizePolicy.Fixed)
+ sizePolicy1.setHorizontalStretch(0)
+ sizePolicy1.setVerticalStretch(0)
+ sizePolicy1.setHeightForWidth(self.dateTimeEdit.sizePolicy().hasHeightForWidth())
+ self.dateTimeEdit.setSizePolicy(sizePolicy1)
+ self.dateTimeEdit.setDisplayFormat(u"yyyy/MM/dd HH:mm:ss")
+ self.dateTimeEdit.setCalendarPopup(False)
+
+ self.gridLayout.addWidget(self.dateTimeEdit, 5, 1, 1, 1)
+
+ self.lostSpinBox = QSpinBox(ScoreEditor)
+ self.lostSpinBox.setObjectName(u"lostSpinBox")
+ self.lostSpinBox.setMinimumSize(QSize(100, 0))
+ self.lostSpinBox.setMinimum(0)
+ self.lostSpinBox.setMaximum(0)
+
+ self.gridLayout.addWidget(self.lostSpinBox, 4, 1, 1, 1)
+
+ self.lostNoneCheckBox = QCheckBox(ScoreEditor)
+ self.lostNoneCheckBox.setObjectName(u"lostNoneCheckBox")
+
+ self.gridLayout.addWidget(self.lostNoneCheckBox, 4, 2, 1, 1)
+
+ self.commentLineEdit = QLineEdit(ScoreEditor)
+ self.commentLineEdit.setObjectName(u"commentLineEdit")
+ self.commentLineEdit.setEnabled(False)
+
+ self.gridLayout.addWidget(self.commentLineEdit, 11, 1, 1, 1)
+
+ self.modifierNoneCheckBox = QCheckBox(ScoreEditor)
+ self.modifierNoneCheckBox.setObjectName(u"modifierNoneCheckBox")
+ self.modifierNoneCheckBox.setChecked(True)
+
+ self.gridLayout.addWidget(self.modifierNoneCheckBox, 9, 2, 1, 1)
+
+ self.commentNoneCheckBox = QCheckBox(ScoreEditor)
+ self.commentNoneCheckBox.setObjectName(u"commentNoneCheckBox")
+ self.commentNoneCheckBox.setChecked(True)
+
+ self.gridLayout.addWidget(self.commentNoneCheckBox, 11, 2, 1, 1)
+
+ self.label_5 = QLabel(ScoreEditor)
+ self.label_5.setObjectName(u"label_5")
+ self.label_5.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_5, 5, 0, 1, 1)
+
+ self.commitButton = QPushButton(ScoreEditor)
+ self.commitButton.setObjectName(u"commitButton")
+
+ self.gridLayout.addWidget(self.commitButton, 12, 2, 1, 1)
+
+ self.scoreLineEdit = FocusSelectAllLineEdit(ScoreEditor)
+ self.scoreLineEdit.setObjectName(u"scoreLineEdit")
+ self.scoreLineEdit.setInputMask(u"B9'999'999;_")
+
+ self.gridLayout.addWidget(self.scoreLineEdit, 1, 1, 1, 1)
+
+ self.maxRecallNoneCheckBox = QCheckBox(ScoreEditor)
+ self.maxRecallNoneCheckBox.setObjectName(u"maxRecallNoneCheckBox")
+ self.maxRecallNoneCheckBox.setChecked(True)
+
+ self.gridLayout.addWidget(self.maxRecallNoneCheckBox, 8, 2, 1, 1)
+
+ self.farSpinBox = QSpinBox(ScoreEditor)
+ self.farSpinBox.setObjectName(u"farSpinBox")
+ self.farSpinBox.setMinimumSize(QSize(100, 0))
+ self.farSpinBox.setMinimum(0)
+ self.farSpinBox.setMaximum(0)
+
+ self.gridLayout.addWidget(self.farSpinBox, 3, 1, 1, 1)
+
+ self.label_9 = QLabel(ScoreEditor)
+ self.label_9.setObjectName(u"label_9")
+ self.label_9.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_9, 11, 0, 1, 1)
+
+ self.label = QLabel(ScoreEditor)
+ self.label.setObjectName(u"label")
+ self.label.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label, 1, 0, 1, 1)
+
+ self.farNoneCheckBox = QCheckBox(ScoreEditor)
+ self.farNoneCheckBox.setObjectName(u"farNoneCheckBox")
+
+ self.gridLayout.addWidget(self.farNoneCheckBox, 3, 2, 1, 1)
+
+ self.label_10 = QLabel(ScoreEditor)
+ self.label_10.setObjectName(u"label_10")
+ self.label_10.setText(u"ID")
+ self.label_10.setAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
+
+ self.gridLayout.addWidget(self.label_10, 0, 0, 1, 1)
+
+ self.idLabel = QLabel(ScoreEditor)
+ self.idLabel.setObjectName(u"idLabel")
+
+ self.gridLayout.addWidget(self.idLabel, 0, 1, 1, 1)
+
+ self.warnIfIncompleteCheckBox = QCheckBox(ScoreEditor)
+ self.warnIfIncompleteCheckBox.setObjectName(u"warnIfIncompleteCheckBox")
+
+ self.gridLayout.addWidget(self.warnIfIncompleteCheckBox, 12, 0, 1, 1)
+
+ QWidget.setTabOrder(self.scoreLineEdit, self.pureSpinBox)
+ QWidget.setTabOrder(self.pureSpinBox, self.pureNoneCheckBox)
+ QWidget.setTabOrder(self.pureNoneCheckBox, self.farSpinBox)
+ QWidget.setTabOrder(self.farSpinBox, self.farNoneCheckBox)
+ QWidget.setTabOrder(self.farNoneCheckBox, self.lostSpinBox)
+ QWidget.setTabOrder(self.lostSpinBox, self.lostNoneCheckBox)
+ QWidget.setTabOrder(self.lostNoneCheckBox, self.dateTimeEdit)
+ QWidget.setTabOrder(self.dateTimeEdit, self.dateNoneCheckBox)
+ QWidget.setTabOrder(self.dateNoneCheckBox, self.maxRecallSpinBox)
+ QWidget.setTabOrder(self.maxRecallSpinBox, self.maxRecallNoneCheckBox)
+ QWidget.setTabOrder(self.maxRecallNoneCheckBox, self.modifierComboBox)
+ QWidget.setTabOrder(self.modifierComboBox, self.modifierNoneCheckBox)
+ QWidget.setTabOrder(self.modifierNoneCheckBox, self.clearTypeComboBox)
+ QWidget.setTabOrder(self.clearTypeComboBox, self.clearTypeNoneCheckBox)
+ QWidget.setTabOrder(self.clearTypeNoneCheckBox, self.commentLineEdit)
+ QWidget.setTabOrder(self.commentLineEdit, self.commentNoneCheckBox)
+ QWidget.setTabOrder(self.commentNoneCheckBox, self.commitButton)
+
+ self.retranslateUi(ScoreEditor)
+ self.pureNoneCheckBox.toggled.connect(self.pureSpinBox.setDisabled)
+ self.clearTypeNoneCheckBox.toggled.connect(self.clearTypeComboBox.setDisabled)
+ self.modifierNoneCheckBox.toggled.connect(self.modifierComboBox.setDisabled)
+ self.maxRecallNoneCheckBox.toggled.connect(self.maxRecallSpinBox.setDisabled)
+ self.dateNoneCheckBox.toggled.connect(self.dateTimeEdit.setDisabled)
+ self.lostNoneCheckBox.toggled.connect(self.lostSpinBox.setDisabled)
+ self.farNoneCheckBox.toggled.connect(self.farSpinBox.setDisabled)
+ self.commentNoneCheckBox.toggled.connect(self.commentLineEdit.setDisabled)
+
+ QMetaObject.connectSlotsByName(ScoreEditor)
+ # setupUi
+
+ def retranslateUi(self, ScoreEditor):
+ self.pureNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
+ self.clearTypeNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
+ self.dateNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
+ self.lostNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
+ self.modifierNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
+ self.commentNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
+ self.label_5.setText(QCoreApplication.translate("ScoreEditor", u"formLabel.date", None))
+ self.commitButton.setText(QCoreApplication.translate("ScoreEditor", u"commitButton", None))
+ self.maxRecallNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
+ self.label_9.setText(QCoreApplication.translate("ScoreEditor", u"formLabel.comment", None))
+ self.label.setText(QCoreApplication.translate("ScoreEditor", u"formLabel.score", None))
+ self.farNoneCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"setNone", None))
+ self.idLabel.setText(QCoreApplication.translate("ScoreEditor", u"idAutoInsert", None))
+ self.warnIfIncompleteCheckBox.setText(QCoreApplication.translate("ScoreEditor", u"warnIfIncomplete", None))
+ pass
+ # retranslateUi
+
diff --git a/ui/implements/components/chartSelector.py b/ui/implements/components/chartSelector.py
index 8a673fb..593a45d 100644
--- a/ui/implements/components/chartSelector.py
+++ b/ui/implements/components/chartSelector.py
@@ -45,7 +45,14 @@ class ChartSelector(Ui_ChartSelector, QWidget):
ratingClass = self.ratingClassSelector.value()
if songId and isinstance(ratingClass, int):
- return self.db.get_chart(songId, ratingClass)
+ result = self.db.get_chart(songId, ratingClass)
+ if result is None and self.songIdSelector.mode == SongIdSelectorMode.SongId:
+ return Chart(
+ song_id=songId,
+ rating_class=ratingClass,
+ set=self.songIdSelector.packId(),
+ )
+ return result
return None
def updateDatabase(self):
@@ -62,19 +69,23 @@ class ChartSelector(Ui_ChartSelector, QWidget):
def updateResultLabel(self):
chart = self.value()
if isinstance(chart, Chart):
- pack = self.db.get_pack(chart.set)
- texts = [
- [
- pack.name,
- chart.title,
- f"{rating_class_to_text(chart.rating_class)} "
- f"{chart.rating}{'+' if chart.rating_plus else ''}"
- f"({chart.constant / 10})",
- ],
- [pack.id, chart.song_id, str(chart.rating_class)],
- ]
- texts = [" | ".join(t) for t in texts]
- text = f'{texts[0]}
{texts[1]}'
+ if chart.constant is not None:
+ pack = self.db.get_pack(chart.set)
+
+ texts = [
+ [
+ pack.name,
+ chart.title,
+ f"{rating_class_to_text(chart.rating_class)} "
+ f"{chart.rating}{'+' if chart.rating_plus else ''}"
+ f"({chart.constant / 10})",
+ ],
+ [pack.id, chart.song_id, str(chart.rating_class)],
+ ]
+ texts = [" | ".join(t) for t in texts]
+ text = f'{texts[0]}
{texts[1]}'
+ else:
+ text = f'No chart data
{chart.set} | {chart.song_id} | {chart.rating_class}'
self.resultLabel.setText(text)
else:
self.resultLabel.setText("...")
diff --git a/ui/implements/components/scoreEditor.py b/ui/implements/components/scoreEditor.py
index bd1b69e..cbc9916 100644
--- a/ui/implements/components/scoreEditor.py
+++ b/ui/implements/components/scoreEditor.py
@@ -17,12 +17,13 @@ from PySide6.QtWidgets import (
from ui.designer.components.scoreEditor_ui import Ui_ScoreEditor
from ui.extends.shared.language import LanguageChangeEventFilter
-
+# TODO: use bit flags
class ScoreValidateResult(IntEnum):
Ok = 0
ScoreMismatch = 1
ScoreEmpty = 2
ChartInvalid = 50
+ ChartIncomplete = 51
ScoreIncomplete = 100
@@ -38,6 +39,10 @@ class ScoreEditor(Ui_ScoreEditor, QWidget):
self.installEventFilter(self.languageChangeEventFilter)
self.__validateBeforeAccept = True
+ self.__warnIfIncomplete = True
+ self.warnIfIncompleteCheckBox.setChecked(self.__warnIfIncomplete)
+ self.warnIfIncompleteCheckBox.toggled.connect(self.setWarnIfIncomplete)
+
self.__chart = None
self.__score_id = None
@@ -75,13 +80,24 @@ class ScoreEditor(Ui_ScoreEditor, QWidget):
self.dateTimeEdit.setDateTime(QDateTime.currentDateTime())
+ def validateBeforeAccept(self):
+ return self.__validateBeforeAccept
+
def setValidateBeforeAccept(self, __bool: bool):
self.__validateBeforeAccept = __bool
+ def warnIfIncomplete(self):
+ return self.__warnIfIncomplete
+
+ def setWarnIfIncomplete(self, __bool: bool):
+ if self.sender() != self.warnIfIncompleteCheckBox:
+ self.warnIfIncompleteCheckBox.setChecked(__bool)
+ self.__warnIfIncomplete = __bool
+
def triggerValidateMessageBox(self):
validate = self.validateScore()
- if validate in [ScoreValidateResult.Ok, ScoreValidateResult.ScoreIncomplete]:
+ if validate == ScoreValidateResult.Ok:
return True
if validate == ScoreValidateResult.ChartInvalid:
QMessageBox.critical(
@@ -92,6 +108,19 @@ class ScoreEditor(Ui_ScoreEditor, QWidget):
# fmt: on
)
return False
+ if validate == ScoreValidateResult.ChartIncomplete:
+ if not self.__warnIfIncomplete:
+ return True
+ result = QMessageBox.warning(
+ self,
+ # fmt: off
+ QCoreApplication.translate("ScoreEditor", "chartIncompleteDialog.title"),
+ QCoreApplication.translate("ScoreEditor", "chartIncompleteDialog.content"),
+ # fmt: on
+ QMessageBox.StandardButton.Yes,
+ QMessageBox.StandardButton.No,
+ )
+ return result == QMessageBox.StandardButton.Yes
if validate == ScoreValidateResult.ScoreMismatch:
result = QMessageBox.warning(
self,
@@ -114,6 +143,19 @@ class ScoreEditor(Ui_ScoreEditor, QWidget):
QMessageBox.StandardButton.No,
)
return result == QMessageBox.StandardButton.Yes
+ elif validate == ScoreValidateResult.ScoreIncomplete:
+ if not self.__warnIfIncomplete:
+ return True
+ result = QMessageBox.warning(
+ self,
+ # fmt: off
+ QCoreApplication.translate("ScoreEditor", "scoreIncompleteDialog.title"),
+ QCoreApplication.translate("ScoreEditor", "scoreIncompleteDialog.content"),
+ # fmt: on
+ QMessageBox.StandardButton.Yes,
+ QMessageBox.StandardButton.No,
+ )
+ return result == QMessageBox.StandardButton.Yes
else:
return False
@@ -130,25 +172,20 @@ class ScoreEditor(Ui_ScoreEditor, QWidget):
score_text = self.scoreLineEdit.text().replace("'", "")
return int(score_text) if score_text else 0
- def setMinimums(self):
- self.pureSpinBox.setMinimum(0)
- self.farSpinBox.setMinimum(0)
- self.lostSpinBox.setMinimum(0)
- self.maxRecallSpinBox.setMinimum(-1)
+ def setComboBoxMaximums(self, max: int):
+ self.pureSpinBox.setMaximum(max)
+ self.farSpinBox.setMaximum(max)
+ self.lostSpinBox.setMaximum(max)
+ self.maxRecallSpinBox.setMaximum(max)
def setLimits(self, chart: Chart):
- self.setMinimums()
- self.pureSpinBox.setMaximum(chart.notes)
- self.farSpinBox.setMaximum(chart.notes)
- self.lostSpinBox.setMaximum(chart.notes)
- self.maxRecallSpinBox.setMaximum(chart.notes)
+ if not isinstance(chart, Chart) or chart.notes is None:
+ self.setComboBoxMaximums(283375)
+ else:
+ self.setComboBoxMaximums(chart.notes)
def resetLimits(self):
- self.setMinimums()
- self.pureSpinBox.setMaximum(0)
- self.farSpinBox.setMaximum(0)
- self.lostSpinBox.setMaximum(0)
- self.maxRecallSpinBox.setMaximum(0)
+ self.setComboBoxMaximums(0)
def setChart(self, chart: Optional[Chart]):
if isinstance(chart, Chart):
@@ -163,6 +200,9 @@ class ScoreEditor(Ui_ScoreEditor, QWidget):
if not isinstance(self.__chart, Chart):
return ScoreValidateResult.ChartInvalid
+ if self.__chart.notes is None:
+ return ScoreValidateResult.ChartIncomplete
+
score = self.value()
if score.pure is None or score.far is None:
@@ -184,6 +224,8 @@ class ScoreEditor(Ui_ScoreEditor, QWidget):
text = QCoreApplication.translate("ScoreEditor", "validate.ok")
elif validate == ScoreValidateResult.ChartInvalid:
text = QCoreApplication.translate("ScoreEditor", "validate.chartInvalid")
+ elif validate == ScoreValidateResult.ChartIncomplete:
+ text = QCoreApplication.translate("ScoreEditor", "validate.chartIncomple")
elif validate == ScoreValidateResult.ScoreMismatch:
text = QCoreApplication.translate("ScoreEditor", "validate.scoreMismatch")
elif validate == ScoreValidateResult.ScoreEmpty: