feat: TabTools_Andreal

This commit is contained in:
283375 2023-09-21 23:02:02 +08:00
parent 44915f6d19
commit d29104744d
Signed by: 283375
SSH Key Fingerprint: SHA256:UcX0qg6ZOSDOeieKPGokA5h7soykG61nz2uxuQgVLSk
6 changed files with 514 additions and 283 deletions

View File

@ -62,7 +62,7 @@
<item> <item>
<widget class="QRadioButton" name="imageType_infoRadioButton"> <widget class="QRadioButton" name="imageType_infoRadioButton">
<property name="text"> <property name="text">
<string>/a</string> <string notr="true">/a</string>
</property> </property>
<property name="checked"> <property name="checked">
<bool>true</bool> <bool>true</bool>
@ -72,14 +72,14 @@
<item> <item>
<widget class="QRadioButton" name="imageType_best30RadioButton"> <widget class="QRadioButton" name="imageType_best30RadioButton">
<property name="text"> <property name="text">
<string>/a b30</string> <string notr="true">/a b30</string>
</property> </property>
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QRadioButton" name="imageType_bestRadioButton"> <widget class="QRadioButton" name="imageType_bestRadioButton">
<property name="text"> <property name="text">
<string>/a info</string> <string notr="true">/a info</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -113,6 +113,47 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="1">
<widget class="QWidget" name="chartHolderWidget" native="true">
<property name="enabled">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="chartSelectButton">
<property name="maximumSize">
<size>
<width>100</width>
<height>100</height>
</size>
</property>
<property name="text">
<string>chart.selectButton</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="chartSelectLabel">
<property name="text">
<string notr="true">...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="4" column="0"> <item row="4" column="0">
<widget class="QLabel" name="label_5"> <widget class="QLabel" name="label_5">
<property name="text"> <property name="text">
@ -137,6 +178,47 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="1">
<widget class="QWidget" name="horizontalWidget_2" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QRadioButton" name="imageFormat_jpgRadioButton">
<property name="text">
<string notr="true">JPG</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="imageFormat_pngRadioButton">
<property name="text">
<string notr="true">PNG</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="6" column="0"> <item row="6" column="0">
<widget class="QLabel" name="jpgQualityFormLabel"> <widget class="QLabel" name="jpgQualityFormLabel">
<property name="text"> <property name="text">
@ -144,6 +226,53 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="6" column="1">
<widget class="QWidget" name="jpgQualityHolderWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSlider" name="jpgQualitySlider">
<property name="minimum">
<number>10</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>90</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="jpgQualitySpinBox">
<property name="minimum">
<number>10</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>90</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="7" column="0" colspan="2"> <item row="7" column="0" colspan="2">
<layout class="QHBoxLayout" name="horizontalLayout_5"> <layout class="QHBoxLayout" name="horizontalLayout_5">
<item> <item>
@ -200,158 +329,6 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="5" column="1">
<widget class="QWidget" name="horizontalWidget_2" native="true">
<property name="sizePolicy">
<sizepolicy hsizetype="Maximum" vsizetype="Preferred">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QRadioButton" name="imageFormat_jpgRadioButton">
<property name="text">
<string notr="true">JPG</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QRadioButton" name="imageFormat_pngRadioButton">
<property name="text">
<string notr="true">PNG</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="8" column="0">
<widget class="QLabel" name="label_8">
<property name="text">
<string>preview</string>
</property>
</widget>
</item>
<item row="8" column="1">
<widget class="QLabel" name="previewLabel">
<property name="sizePolicy">
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="styleSheet">
<string notr="true">QLabel { color: red }</string>
</property>
<property name="text">
<string notr="true"/>
</property>
</widget>
</item>
<item row="6" column="1">
<widget class="QWidget" name="jpgQualityHolderWidget" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_3">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QSlider" name="jpgQualitySlider">
<property name="minimum">
<number>10</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>90</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item>
<widget class="QSpinBox" name="jpgQualitySpinBox">
<property name="minimum">
<number>10</number>
</property>
<property name="maximum">
<number>100</number>
</property>
<property name="value">
<number>90</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item row="3" column="1">
<widget class="QWidget" name="chartHolderWidget" native="true">
<property name="enabled">
<bool>false</bool>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_8">
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QPushButton" name="chartSelectButton">
<property name="maximumSize">
<size>
<width>100</width>
<height>100</height>
</size>
</property>
<property name="text">
<string>chart.selectButton</string>
</property>
</widget>
</item>
<item>
<widget class="QLabel" name="chartSelectLabel">
<property name="text">
<string notr="true">...</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>

View File

@ -62,17 +62,20 @@ class Ui_TabTools_Andreal(object):
self.horizontalLayout.setContentsMargins(0, 0, 0, 0) self.horizontalLayout.setContentsMargins(0, 0, 0, 0)
self.imageType_infoRadioButton = QRadioButton(self.horizontalWidget) self.imageType_infoRadioButton = QRadioButton(self.horizontalWidget)
self.imageType_infoRadioButton.setObjectName(u"imageType_infoRadioButton") self.imageType_infoRadioButton.setObjectName(u"imageType_infoRadioButton")
self.imageType_infoRadioButton.setText(u"/a")
self.imageType_infoRadioButton.setChecked(True) self.imageType_infoRadioButton.setChecked(True)
self.horizontalLayout.addWidget(self.imageType_infoRadioButton) self.horizontalLayout.addWidget(self.imageType_infoRadioButton)
self.imageType_best30RadioButton = QRadioButton(self.horizontalWidget) self.imageType_best30RadioButton = QRadioButton(self.horizontalWidget)
self.imageType_best30RadioButton.setObjectName(u"imageType_best30RadioButton") self.imageType_best30RadioButton.setObjectName(u"imageType_best30RadioButton")
self.imageType_best30RadioButton.setText(u"/a b30")
self.horizontalLayout.addWidget(self.imageType_best30RadioButton) self.horizontalLayout.addWidget(self.imageType_best30RadioButton)
self.imageType_bestRadioButton = QRadioButton(self.horizontalWidget) self.imageType_bestRadioButton = QRadioButton(self.horizontalWidget)
self.imageType_bestRadioButton.setObjectName(u"imageType_bestRadioButton") self.imageType_bestRadioButton.setObjectName(u"imageType_bestRadioButton")
self.imageType_bestRadioButton.setText(u"/a info")
self.horizontalLayout.addWidget(self.imageType_bestRadioButton) self.horizontalLayout.addWidget(self.imageType_bestRadioButton)
@ -93,6 +96,27 @@ class Ui_TabTools_Andreal(object):
self.formLayout.setWidget(3, QFormLayout.LabelRole, self.chartFormLabel) self.formLayout.setWidget(3, QFormLayout.LabelRole, self.chartFormLabel)
self.chartHolderWidget = QWidget(TabTools_Andreal)
self.chartHolderWidget.setObjectName(u"chartHolderWidget")
self.chartHolderWidget.setEnabled(False)
self.horizontalLayout_8 = QHBoxLayout(self.chartHolderWidget)
self.horizontalLayout_8.setObjectName(u"horizontalLayout_8")
self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0)
self.chartSelectButton = QPushButton(self.chartHolderWidget)
self.chartSelectButton.setObjectName(u"chartSelectButton")
self.chartSelectButton.setMaximumSize(QSize(100, 100))
self.horizontalLayout_8.addWidget(self.chartSelectButton)
self.chartSelectLabel = QLabel(self.chartHolderWidget)
self.chartSelectLabel.setObjectName(u"chartSelectLabel")
self.chartSelectLabel.setText(u"...")
self.horizontalLayout_8.addWidget(self.chartSelectLabel)
self.formLayout.setWidget(3, QFormLayout.FieldRole, self.chartHolderWidget)
self.label_5 = QLabel(TabTools_Andreal) self.label_5 = QLabel(TabTools_Andreal)
self.label_5.setObjectName(u"label_5") self.label_5.setObjectName(u"label_5")
@ -109,11 +133,62 @@ class Ui_TabTools_Andreal(object):
self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_6) self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_6)
self.horizontalWidget_2 = QWidget(TabTools_Andreal)
self.horizontalWidget_2.setObjectName(u"horizontalWidget_2")
sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.horizontalWidget_2.sizePolicy().hasHeightForWidth())
self.horizontalWidget_2.setSizePolicy(sizePolicy)
self.horizontalLayout_2 = QHBoxLayout(self.horizontalWidget_2)
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.imageFormat_jpgRadioButton = QRadioButton(self.horizontalWidget_2)
self.imageFormat_jpgRadioButton.setObjectName(u"imageFormat_jpgRadioButton")
self.imageFormat_jpgRadioButton.setText(u"JPG")
self.imageFormat_jpgRadioButton.setChecked(True)
self.horizontalLayout_2.addWidget(self.imageFormat_jpgRadioButton)
self.imageFormat_pngRadioButton = QRadioButton(self.horizontalWidget_2)
self.imageFormat_pngRadioButton.setObjectName(u"imageFormat_pngRadioButton")
self.imageFormat_pngRadioButton.setText(u"PNG")
self.horizontalLayout_2.addWidget(self.imageFormat_pngRadioButton)
self.formLayout.setWidget(5, QFormLayout.FieldRole, self.horizontalWidget_2)
self.jpgQualityFormLabel = QLabel(TabTools_Andreal) self.jpgQualityFormLabel = QLabel(TabTools_Andreal)
self.jpgQualityFormLabel.setObjectName(u"jpgQualityFormLabel") self.jpgQualityFormLabel.setObjectName(u"jpgQualityFormLabel")
self.formLayout.setWidget(6, QFormLayout.LabelRole, self.jpgQualityFormLabel) self.formLayout.setWidget(6, QFormLayout.LabelRole, self.jpgQualityFormLabel)
self.jpgQualityHolderWidget = QWidget(TabTools_Andreal)
self.jpgQualityHolderWidget.setObjectName(u"jpgQualityHolderWidget")
self.horizontalLayout_3 = QHBoxLayout(self.jpgQualityHolderWidget)
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
self.jpgQualitySlider = QSlider(self.jpgQualityHolderWidget)
self.jpgQualitySlider.setObjectName(u"jpgQualitySlider")
self.jpgQualitySlider.setMinimum(10)
self.jpgQualitySlider.setMaximum(100)
self.jpgQualitySlider.setValue(90)
self.jpgQualitySlider.setOrientation(Qt.Horizontal)
self.horizontalLayout_3.addWidget(self.jpgQualitySlider)
self.jpgQualitySpinBox = QSpinBox(self.jpgQualityHolderWidget)
self.jpgQualitySpinBox.setObjectName(u"jpgQualitySpinBox")
self.jpgQualitySpinBox.setMinimum(10)
self.jpgQualitySpinBox.setMaximum(100)
self.jpgQualitySpinBox.setValue(90)
self.horizontalLayout_3.addWidget(self.jpgQualitySpinBox)
self.formLayout.setWidget(6, QFormLayout.FieldRole, self.jpgQualityHolderWidget)
self.horizontalLayout_5 = QHBoxLayout() self.horizontalLayout_5 = QHBoxLayout()
self.horizontalLayout_5.setObjectName(u"horizontalLayout_5") self.horizontalLayout_5.setObjectName(u"horizontalLayout_5")
self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum) self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
@ -145,95 +220,6 @@ class Ui_TabTools_Andreal(object):
self.formLayout.setLayout(7, QFormLayout.SpanningRole, self.horizontalLayout_5) self.formLayout.setLayout(7, QFormLayout.SpanningRole, self.horizontalLayout_5)
self.horizontalWidget_2 = QWidget(TabTools_Andreal)
self.horizontalWidget_2.setObjectName(u"horizontalWidget_2")
sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Preferred)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.horizontalWidget_2.sizePolicy().hasHeightForWidth())
self.horizontalWidget_2.setSizePolicy(sizePolicy)
self.horizontalLayout_2 = QHBoxLayout(self.horizontalWidget_2)
self.horizontalLayout_2.setObjectName(u"horizontalLayout_2")
self.horizontalLayout_2.setContentsMargins(0, 0, 0, 0)
self.imageFormat_jpgRadioButton = QRadioButton(self.horizontalWidget_2)
self.imageFormat_jpgRadioButton.setObjectName(u"imageFormat_jpgRadioButton")
self.imageFormat_jpgRadioButton.setText(u"JPG")
self.imageFormat_jpgRadioButton.setChecked(True)
self.horizontalLayout_2.addWidget(self.imageFormat_jpgRadioButton)
self.imageFormat_pngRadioButton = QRadioButton(self.horizontalWidget_2)
self.imageFormat_pngRadioButton.setObjectName(u"imageFormat_pngRadioButton")
self.imageFormat_pngRadioButton.setText(u"PNG")
self.horizontalLayout_2.addWidget(self.imageFormat_pngRadioButton)
self.formLayout.setWidget(5, QFormLayout.FieldRole, self.horizontalWidget_2)
self.label_8 = QLabel(TabTools_Andreal)
self.label_8.setObjectName(u"label_8")
self.formLayout.setWidget(8, QFormLayout.LabelRole, self.label_8)
self.previewLabel = QLabel(TabTools_Andreal)
self.previewLabel.setObjectName(u"previewLabel")
sizePolicy1 = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
sizePolicy1.setHorizontalStretch(0)
sizePolicy1.setVerticalStretch(0)
sizePolicy1.setHeightForWidth(self.previewLabel.sizePolicy().hasHeightForWidth())
self.previewLabel.setSizePolicy(sizePolicy1)
self.previewLabel.setStyleSheet(u"QLabel { color: red }")
self.previewLabel.setText(u"")
self.formLayout.setWidget(8, QFormLayout.FieldRole, self.previewLabel)
self.jpgQualityHolderWidget = QWidget(TabTools_Andreal)
self.jpgQualityHolderWidget.setObjectName(u"jpgQualityHolderWidget")
self.horizontalLayout_3 = QHBoxLayout(self.jpgQualityHolderWidget)
self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
self.horizontalLayout_3.setContentsMargins(0, 0, 0, 0)
self.jpgQualitySlider = QSlider(self.jpgQualityHolderWidget)
self.jpgQualitySlider.setObjectName(u"jpgQualitySlider")
self.jpgQualitySlider.setMinimum(10)
self.jpgQualitySlider.setMaximum(100)
self.jpgQualitySlider.setValue(90)
self.jpgQualitySlider.setOrientation(Qt.Horizontal)
self.horizontalLayout_3.addWidget(self.jpgQualitySlider)
self.jpgQualitySpinBox = QSpinBox(self.jpgQualityHolderWidget)
self.jpgQualitySpinBox.setObjectName(u"jpgQualitySpinBox")
self.jpgQualitySpinBox.setMinimum(10)
self.jpgQualitySpinBox.setMaximum(100)
self.jpgQualitySpinBox.setValue(90)
self.horizontalLayout_3.addWidget(self.jpgQualitySpinBox)
self.formLayout.setWidget(6, QFormLayout.FieldRole, self.jpgQualityHolderWidget)
self.chartHolderWidget = QWidget(TabTools_Andreal)
self.chartHolderWidget.setObjectName(u"chartHolderWidget")
self.chartHolderWidget.setEnabled(False)
self.horizontalLayout_8 = QHBoxLayout(self.chartHolderWidget)
self.horizontalLayout_8.setObjectName(u"horizontalLayout_8")
self.horizontalLayout_8.setContentsMargins(0, 0, 0, 0)
self.chartSelectButton = QPushButton(self.chartHolderWidget)
self.chartSelectButton.setObjectName(u"chartSelectButton")
self.chartSelectButton.setMaximumSize(QSize(100, 100))
self.horizontalLayout_8.addWidget(self.chartSelectButton)
self.chartSelectLabel = QLabel(self.chartHolderWidget)
self.chartSelectLabel.setObjectName(u"chartSelectLabel")
self.chartSelectLabel.setText(u"...")
self.horizontalLayout_8.addWidget(self.chartSelectLabel)
self.formLayout.setWidget(3, QFormLayout.FieldRole, self.chartHolderWidget)
self.retranslateUi(TabTools_Andreal) self.retranslateUi(TabTools_Andreal)
self.imageFormat_jpgRadioButton.toggled.connect(self.jpgQualityHolderWidget.setEnabled) self.imageFormat_jpgRadioButton.toggled.connect(self.jpgQualityHolderWidget.setEnabled)
@ -246,19 +232,15 @@ class Ui_TabTools_Andreal(object):
self.label.setText(QCoreApplication.translate("TabTools_Andreal", u"andrealFolder", None)) self.label.setText(QCoreApplication.translate("TabTools_Andreal", u"andrealFolder", None))
self.label_2.setText(QCoreApplication.translate("TabTools_Andreal", u"andrealExecutable", None)) self.label_2.setText(QCoreApplication.translate("TabTools_Andreal", u"andrealExecutable", None))
self.label_3.setText(QCoreApplication.translate("TabTools_Andreal", u"imageType", None)) self.label_3.setText(QCoreApplication.translate("TabTools_Andreal", u"imageType", None))
self.imageType_infoRadioButton.setText(QCoreApplication.translate("TabTools_Andreal", u"/a", None))
self.imageType_best30RadioButton.setText(QCoreApplication.translate("TabTools_Andreal", u"/a b30", None))
self.imageType_bestRadioButton.setText(QCoreApplication.translate("TabTools_Andreal", u"/a info", None))
self.imageTypeWhatIsThisButton.setText(QCoreApplication.translate("TabTools_Andreal", u"imageTypeWhatIsThisButton", None)) self.imageTypeWhatIsThisButton.setText(QCoreApplication.translate("TabTools_Andreal", u"imageTypeWhatIsThisButton", None))
self.chartFormLabel.setText(QCoreApplication.translate("TabTools_Andreal", u"chart", None)) self.chartFormLabel.setText(QCoreApplication.translate("TabTools_Andreal", u"chart", None))
self.chartSelectButton.setText(QCoreApplication.translate("TabTools_Andreal", u"chart.selectButton", None))
self.label_5.setText(QCoreApplication.translate("TabTools_Andreal", u"imageVersion", None)) self.label_5.setText(QCoreApplication.translate("TabTools_Andreal", u"imageVersion", None))
self.label_6.setText(QCoreApplication.translate("TabTools_Andreal", u"imageFormat", None)) self.label_6.setText(QCoreApplication.translate("TabTools_Andreal", u"imageFormat", None))
self.jpgQualityFormLabel.setText(QCoreApplication.translate("TabTools_Andreal", u"jpgQuality", None)) self.jpgQualityFormLabel.setText(QCoreApplication.translate("TabTools_Andreal", u"jpgQuality", None))
self.exportJsonButton.setText(QCoreApplication.translate("TabTools_Andreal", u"exportJsonButton", None)) self.exportJsonButton.setText(QCoreApplication.translate("TabTools_Andreal", u"exportJsonButton", None))
self.generatePreviewButton.setText(QCoreApplication.translate("TabTools_Andreal", u"generatePreviewButton", None)) self.generatePreviewButton.setText(QCoreApplication.translate("TabTools_Andreal", u"generatePreviewButton", None))
self.generateImageButton.setText(QCoreApplication.translate("TabTools_Andreal", u"generateImageButton", None)) self.generateImageButton.setText(QCoreApplication.translate("TabTools_Andreal", u"generateImageButton", None))
self.label_8.setText(QCoreApplication.translate("TabTools_Andreal", u"preview", None))
self.chartSelectButton.setText(QCoreApplication.translate("TabTools_Andreal", u"chart.selectButton", None))
pass pass
# retranslateUi # retranslateUi

View File

@ -74,6 +74,9 @@ class AndrealHelper(QObject):
return base64.b64decode(b64result) return base64.b64decode(b64result)
def request(self, jsonPath: str, arguments: list[str]): def request(self, jsonPath: str, arguments: list[str]):
logger.debug(
f"{self.__class__.__name__} received request {jsonPath=} {arguments=}"
)
runnable = AndrealExecuteRunnable(self.andrealExecutable, jsonPath, arguments) runnable = AndrealExecuteRunnable(self.andrealExecutable, jsonPath, arguments)
runnable.signals.error.connect(self.error) runnable.signals.error.connect(self.error)
runnable.signals.completed.connect(self.ready) runnable.signals.completed.connect(self.ready)

View File

@ -7,10 +7,18 @@ from arcaea_offline.external.andreal.api_data import (
AndrealImageGeneratorApiDataConverter, AndrealImageGeneratorApiDataConverter,
) )
from arcaea_offline.models import Chart from arcaea_offline.models import Chart
from arcaea_offline.utils.rating import rating_class_to_short_text from PySide6.QtCore import QCoreApplication, QDir, QFileInfo, Qt, Slot
from PySide6.QtCore import QDir, QFileInfo, Qt, Slot from PySide6.QtGui import QGuiApplication, QImage, QPainter, QPaintEvent, QPixmap
from PySide6.QtGui import QImage from PySide6.QtWidgets import (
from PySide6.QtWidgets import QButtonGroup, QFileDialog, QLabel, QMessageBox, QWidget QButtonGroup,
QDialog,
QDialogButtonBox,
QFileDialog,
QLabel,
QMessageBox,
QVBoxLayout,
QWidget,
)
from ui.designer.tabs.tabTools.tabTools_Andreal_ui import Ui_TabTools_Andreal from ui.designer.tabs.tabTools.tabTools_Andreal_ui import Ui_TabTools_Andreal
from ui.extends.shared.settings import ANDREAL_EXECUTABLE, ANDREAL_FOLDER from ui.extends.shared.settings import ANDREAL_EXECUTABLE, ANDREAL_FOLDER
@ -22,7 +30,36 @@ logger = logging.getLogger(__name__)
class PreviewLabel(QLabel): class PreviewLabel(QLabel):
... def __init__(self, parent=None):
super().__init__(parent)
self.setWindowFlag(Qt.WindowType.Window, True)
def show(self):
super().show()
# center the window
width = self.width()
height = self.height()
screen = QGuiApplication.primaryScreen()
screenWidth = screen.size().width()
screenHeight = screen.size().height()
self.setGeometry(
max(0, screenWidth / 2 - width / 2),
max(0, screenHeight / 2 - height / 2),
min(width, screenWidth),
min(height, screenHeight),
)
def paintEvent(self, e: QPaintEvent) -> None:
size = self.size()
painter = QPainter(self)
scaledPixmap = self.pixmap().scaled(
size,
Qt.AspectRatioMode.KeepAspectRatio,
Qt.TransformationMode.SmoothTransformation,
)
x = (size.width() - scaledPixmap.width()) / 2
y = (size.height() - scaledPixmap.height()) / 2
painter.drawPixmap(x, y, scaledPixmap)
class ChartSelectorDialog(ChartSelector): class ChartSelectorDialog(ChartSelector):
@ -32,6 +69,27 @@ class ChartSelectorDialog(ChartSelector):
self.setSongIdSelectorMode(SongIdSelectorMode.Chart) self.setSongIdSelectorMode(SongIdSelectorMode.Chart)
class ImageTypeWhatIsThisDialog(QDialog):
def __init__(self, parent=None):
super().__init__(parent)
self.verticalLayout = QVBoxLayout(self)
self.label = QLabel(
# fmt: off
QCoreApplication.translate('TabTools_Andreal', 'imageWhatIsThisDialog.description')
# fmt: on
)
self.verticalLayout.addWidget(self.label)
self.buttonBox = QDialogButtonBox(Qt.Orientation.Horizontal)
self.buttonBox.addButton(QDialogButtonBox.StandardButton.Ok)
self.buttonBox.accepted.connect(self.close)
self.buttonBox.rejected.connect(self.close)
self.verticalLayout.addWidget(self.buttonBox)
class TabTools_Andreal(Ui_TabTools_Andreal, QWidget): class TabTools_Andreal(Ui_TabTools_Andreal, QWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
super().__init__(parent) super().__init__(parent)
@ -51,6 +109,7 @@ class TabTools_Andreal(Ui_TabTools_Andreal, QWidget):
self.andrealFolderSelector.connectSettings(ANDREAL_FOLDER) self.andrealFolderSelector.connectSettings(ANDREAL_FOLDER)
self.andrealExecutableSelector.connectSettings(ANDREAL_EXECUTABLE) self.andrealExecutableSelector.connectSettings(ANDREAL_EXECUTABLE)
self.generatePreviewButton.clicked.connect(self.requestPreview)
self.generateImageButton.clicked.connect(self.requestGenerate) self.generateImageButton.clicked.connect(self.requestGenerate)
self.infoChart: Chart | None = None self.infoChart: Chart | None = None
@ -59,10 +118,17 @@ class TabTools_Andreal(Ui_TabTools_Andreal, QWidget):
self.generateJsonPath = None self.generateJsonPath = None
self.generateImageFormat = None self.generateImageFormat = None
self.andrealHelper.error.connect(self.previewError)
self.andrealHelper.ready.connect(self.previewReady)
self.andrealHelper.finished.connect(self.previewFinished)
self.andrealHelper.error.connect(self.generateError) self.andrealHelper.error.connect(self.generateError)
self.andrealHelper.ready.connect(self.generateReady) self.andrealHelper.ready.connect(self.generateReady)
self.andrealHelper.finished.connect(self.generateFinished) self.andrealHelper.finished.connect(self.generateFinished)
self.imageTypeWhatIsThisButton.clicked.connect(
lambda: ImageTypeWhatIsThisDialog(self).show()
)
self.imageTypeButtonGroup = QButtonGroup(self) self.imageTypeButtonGroup = QButtonGroup(self)
self.imageTypeButtonGroup.addButton(self.imageType_infoRadioButton, 0) self.imageTypeButtonGroup.addButton(self.imageType_infoRadioButton, 0)
self.imageTypeButtonGroup.addButton(self.imageType_bestRadioButton, 1) self.imageTypeButtonGroup.addButton(self.imageType_bestRadioButton, 1)
@ -75,12 +141,24 @@ class TabTools_Andreal(Ui_TabTools_Andreal, QWidget):
self.imageTypeButtonGroup.idToggled.connect(self.fillImageVersionComboBox) self.imageTypeButtonGroup.idToggled.connect(self.fillImageVersionComboBox)
self.fillImageVersionComboBox() self.fillImageVersionComboBox()
self.chartSelectorDialog = ChartSelectorDialog(self)
self.chartSelectorDialog.valueChanged.connect(self.chartValueUpdated)
self.chartSelectButton.clicked.connect(self.chartSelectorDialog.show)
def setHelperPaths(self): def setHelperPaths(self):
if selectedFiles := self.andrealFolderSelector.selectedFiles(): if selectedFiles := self.andrealFolderSelector.selectedFiles():
self.andrealHelper.andrealFolder = selectedFiles[0] self.andrealHelper.andrealFolder = selectedFiles[0]
if selectedFiles := self.andrealExecutableSelector.selectedFiles(): if selectedFiles := self.andrealExecutableSelector.selectedFiles():
self.andrealHelper.andrealExecutable = selectedFiles[0] self.andrealHelper.andrealExecutable = selectedFiles[0]
def chartValueUpdated(self):
chart = self.chartSelectorDialog.value()
self.infoChart = chart
if chart:
self.chartSelectLabel.setText(
f"{chart.title}({chart.song_id}), {chart.rating_class}"
)
def imageFormat(self): def imageFormat(self):
buttonId = self.imageFormatButtonGroup.checkedId() buttonId = self.imageFormatButtonGroup.checkedId()
return ["jpg", "png"][buttonId] if buttonId > -1 else None return ["jpg", "png"][buttonId] if buttonId > -1 else None
@ -146,17 +224,23 @@ class TabTools_Andreal(Ui_TabTools_Andreal, QWidget):
return return
jsonContentDict = {} jsonContentDict = {}
with self.db.sessionmaker() as session: try:
converter = AndrealImageGeneratorApiDataConverter(session) with self.db.sessionmaker() as session:
if imageType == "info": converter = AndrealImageGeneratorApiDataConverter(session)
jsonContentDict = converter.user_info() if imageType == "info":
elif imageType == "best": jsonContentDict = converter.user_info()
jsonContentDict = converter.user_best( elif imageType == "best":
self.infoChart.song_id, self.infoChart.rating_class jsonContentDict = converter.user_best(
) self.infoChart.song_id, self.infoChart.rating_class
elif imageType == "best30": )
jsonContentDict = converter.user_best30() elif imageType == "best30":
return json.dumps(jsonContentDict, ensure_ascii=False) jsonContentDict = converter.user_best30()
except Exception as e:
logger.exception("getAndrealJsonContent error")
QMessageBox.critical(self, None, str(e))
return (
json.dumps(jsonContentDict, ensure_ascii=False) if jsonContentDict else None
)
def getAndrealJsonFileName(self): def getAndrealJsonFileName(self):
if not self.requestComplete(): if not self.requestComplete():
@ -167,12 +251,7 @@ class TabTools_Andreal(Ui_TabTools_Andreal, QWidget):
fileNameParts = ["andreal", imageType] fileNameParts = ["andreal", imageType]
if imageType == "best": if imageType == "best":
fileNameParts.extend( fileNameParts.extend([self.infoChart.song_id, self.infoChart.rating_class])
[
self.infoChart.song_id,
rating_class_to_short_text(self.infoChart.rating_class).lower(),
]
)
fileNameParts.append(timestamp) fileNameParts.append(timestamp)
fileNameParts = [str(i) for i in fileNameParts] fileNameParts = [str(i) for i in fileNameParts]
fileName = "-".join(fileNameParts) fileName = "-".join(fileNameParts)
@ -199,14 +278,15 @@ class TabTools_Andreal(Ui_TabTools_Andreal, QWidget):
def requestGenerate(self): def requestGenerate(self):
jsonPath = self.getTempAndrealJsonPath() jsonPath = self.getTempAndrealJsonPath()
if not jsonPath: jsonContent = self.getAndrealJsonContent()
if not jsonPath or not jsonContent:
return return
self.generateImageButton.setEnabled(False) self.generateImageButton.setEnabled(False)
self.generateJsonPath = jsonPath self.generateJsonPath = jsonPath
self.generateImageFormat = self.imageFormat() self.generateImageFormat = self.imageFormat()
with open(jsonPath, "w", encoding="utf-8") as jf: with open(jsonPath, "w", encoding="utf-8") as jf:
jf.write(self.getAndrealJsonContent()) jf.write(jsonContent)
self.andrealHelper.request(jsonPath, self.getAndrealArguments(jsonPath)) self.andrealHelper.request(jsonPath, self.getAndrealArguments(jsonPath))
@ -237,3 +317,46 @@ class TabTools_Andreal(Ui_TabTools_Andreal, QWidget):
if not saveFileName: if not saveFileName:
return return
qImage.save(saveFileName, self.generateImageFormat) qImage.save(saveFileName, self.generateImageFormat)
def requestPreview(self):
jsonPath = self.getTempAndrealJsonPath()
jsonContent = self.getAndrealJsonContent()
if not jsonPath or not jsonContent:
return
self.generatePreviewButton.setEnabled(False)
self.previewJsonPath = jsonPath
with open(jsonPath, "w", encoding="utf-8") as jf:
jf.write(jsonContent)
self.andrealHelper.request(
jsonPath, self.getAndrealArguments(jsonPath, preview=True)
)
def previewFinished(self):
self.generatePreviewButton.setEnabled(True)
def previewError(self, jsonPath: str, errorMsg: str):
if jsonPath != self.previewJsonPath:
return
QMessageBox.critical(self, "Preview Error", errorMsg)
def previewReady(self, jsonPath: str, imageBytes: bytes):
if jsonPath != self.previewJsonPath:
return
if not imageBytes:
QMessageBox.critical(self, "Preview Error", "Empty bytes received.")
return
qImage = QImage.fromData(imageBytes)
filePathParts = jsonPath.split(".")
filePathParts.pop()
filePath = ".".join(filePathParts)
fileName = QFileInfo(filePath).fileName()
previewLabel = PreviewLabel(self)
previewLabel.setPixmap(QPixmap.fromImage(qImage))
previewLabel.setWindowTitle(f"preview {fileName}")
previewLabel.show()

View File

@ -464,18 +464,18 @@ validation</translation>
<context> <context>
<name>Settings</name> <name>Settings</name>
<message> <message>
<location filename="../../implements/settings/settingsAndreal.py" line="76"/> <location filename="../../implements/settings/settingsAndreal.py" line="79"/>
<source>andreal.title</source> <source>andreal.title</source>
<translation>Andreal</translation> <translation>Andreal</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsAndreal.py" line="78"/> <location filename="../../implements/settings/settingsAndreal.py" line="81"/>
<source>andreal.andrealFolder.label</source> <source>andreal.andrealFolder.label</source>
<translation>Andreal folder</translation> <translation>Andreal data folder</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsAndreal.py" line="79"/>
<location filename="../../implements/settings/settingsAndreal.py" line="82"/> <location filename="../../implements/settings/settingsAndreal.py" line="82"/>
<location filename="../../implements/settings/settingsAndreal.py" line="85"/>
<location filename="../../implements/settings/settingsGeneral.py" line="107"/> <location filename="../../implements/settings/settingsGeneral.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="137"/> <location filename="../../implements/settings/settingsOcr.py" line="137"/>
<location filename="../../implements/settings/settingsOcr.py" line="140"/> <location filename="../../implements/settings/settingsOcr.py" line="140"/>
@ -485,7 +485,7 @@ validation</translation>
<translation>Reset</translation> <translation>Reset</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsAndreal.py" line="81"/> <location filename="../../implements/settings/settingsAndreal.py" line="84"/>
<source>andreal.andrealExecutable.label</source> <source>andreal.andrealExecutable.label</source>
<translation>Andreal executable</translation> <translation>Andreal executable</translation>
</message> </message>
@ -762,6 +762,79 @@ validation</translation>
<source>tab.stepCalculator</source> <source>tab.stepCalculator</source>
<translation>Step Calculator</translation> <translation>Step Calculator</translation>
</message> </message>
<message>
<location filename="../../designer/tabs/tabToolsEntry.ui" line="34"/>
<source>tab.andreal</source>
<translation>Andreal Image Generator</translation>
</message>
</context>
<context>
<name>TabTools_Andreal</name>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="23"/>
<source>andrealFolder</source>
<translation>Andreal data folder</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="33"/>
<source>andrealExecutable</source>
<translation>Andreal executable</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="43"/>
<source>imageType</source>
<translation>Image type</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="102"/>
<source>imageTypeWhatIsThisButton</source>
<translation>What is /a?</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="112"/>
<source>chart</source>
<translation>Select a Chart</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="143"/>
<source>chart.selectButton</source>
<translation>Select...</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="160"/>
<source>imageVersion</source>
<translation>Image version</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="177"/>
<source>imageFormat</source>
<translation>Image format</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="225"/>
<source>jpgQuality</source>
<translation>JPG quality</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="294"/>
<source>exportJsonButton</source>
<translation>Export Request Data to JSON</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="301"/>
<source>generatePreviewButton</source>
<translation>Generate Preview</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="313"/>
<source>generateImageButton</source>
<translation>Generate</translation>
</message>
<message>
<location filename="../../implements/tabs/tabTools/tabTools_Andreal.py" line="81"/>
<source>imageWhatIsThisDialog.description</source>
<translation>Generate image of...&lt;ul&gt;&lt;li&gt;/a - the most recent score&lt;/li&gt;&lt;li&gt;/a b30 - best30 image&lt;/li&gt;&lt;li&gt;/a info - best score of the selected chart&lt;/li&gt;&lt;/ul&gt;</translation>
</message>
</context> </context>
<context> <context>
<name>TabTools_InfoLookup</name> <name>TabTools_InfoLookup</name>

View File

@ -463,18 +463,18 @@
<context> <context>
<name>Settings</name> <name>Settings</name>
<message> <message>
<location filename="../../implements/settings/settingsAndreal.py" line="76"/> <location filename="../../implements/settings/settingsAndreal.py" line="79"/>
<source>andreal.title</source> <source>andreal.title</source>
<translation>Andreal</translation> <translation>Andreal</translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsAndreal.py" line="78"/> <location filename="../../implements/settings/settingsAndreal.py" line="81"/>
<source>andreal.andrealFolder.label</source> <source>andreal.andrealFolder.label</source>
<translation>Andreal </translation> <translation>Andreal </translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsAndreal.py" line="79"/>
<location filename="../../implements/settings/settingsAndreal.py" line="82"/> <location filename="../../implements/settings/settingsAndreal.py" line="82"/>
<location filename="../../implements/settings/settingsAndreal.py" line="85"/>
<location filename="../../implements/settings/settingsGeneral.py" line="107"/> <location filename="../../implements/settings/settingsGeneral.py" line="107"/>
<location filename="../../implements/settings/settingsOcr.py" line="137"/> <location filename="../../implements/settings/settingsOcr.py" line="137"/>
<location filename="../../implements/settings/settingsOcr.py" line="140"/> <location filename="../../implements/settings/settingsOcr.py" line="140"/>
@ -484,7 +484,7 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../implements/settings/settingsAndreal.py" line="81"/> <location filename="../../implements/settings/settingsAndreal.py" line="84"/>
<source>andreal.andrealExecutable.label</source> <source>andreal.andrealExecutable.label</source>
<translation>Andreal </translation> <translation>Andreal </translation>
</message> </message>
@ -761,6 +761,79 @@
<source>tab.stepCalculator</source> <source>tab.stepCalculator</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../../designer/tabs/tabToolsEntry.ui" line="34"/>
<source>tab.andreal</source>
<translation>Andreal </translation>
</message>
</context>
<context>
<name>TabTools_Andreal</name>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="23"/>
<source>andrealFolder</source>
<translation>Andreal </translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="33"/>
<source>andrealExecutable</source>
<translation>Andreal </translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="43"/>
<source>imageType</source>
<translation></translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="102"/>
<source>imageTypeWhatIsThisButton</source>
<translation>/a </translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="112"/>
<source>chart</source>
<translation></translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="143"/>
<source>chart.selectButton</source>
<translation></translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="160"/>
<source>imageVersion</source>
<translation></translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="177"/>
<source>imageFormat</source>
<translation></translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="225"/>
<source>jpgQuality</source>
<translation>JPG </translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="294"/>
<source>exportJsonButton</source>
<translation> JSON</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="301"/>
<source>generatePreviewButton</source>
<translation></translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="313"/>
<source>generateImageButton</source>
<translation></translation>
</message>
<message>
<location filename="../../implements/tabs/tabTools/tabTools_Andreal.py" line="81"/>
<source>imageWhatIsThisDialog.description</source>
<translation>&lt;ul&gt;&lt;li&gt;/a - &lt;/li&gt;&lt;li&gt;/a b30 - /a b30&lt;/li&gt;&lt;li&gt;/a info - &lt;/li&gt;&lt;/ul&gt;</translation>
</message>
</context> </context>
<context> <context>
<name>TabTools_InfoLookup</name> <name>TabTools_InfoLookup</name>