9 Commits

14 changed files with 405 additions and 247 deletions

View File

@ -329,6 +329,36 @@
</item> </item>
</layout> </layout>
</item> </item>
<item row="9" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>sourceCode</string>
</property>
</widget>
</item>
<item row="9" column="1">
<widget class="QLabel" name="label_7">
<property name="text">
<string>&lt;a href=&quot;https://github.com/283375/AndrealImageGenerator&quot;&gt;283375/AndrealImageGenerator&lt;/a&gt;&lt;br&gt;(forked from &lt;a href=&quot;https://github.com/Awbugl/AndrealImageGenerator&quot;&gt;Awbugl/AndrealImageGenerator&lt;/a&gt;)</string>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item row="8" column="0" colspan="2">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>

View File

@ -220,6 +220,21 @@ class Ui_TabTools_Andreal(object):
self.formLayout.setLayout(7, QFormLayout.SpanningRole, self.horizontalLayout_5) self.formLayout.setLayout(7, QFormLayout.SpanningRole, self.horizontalLayout_5)
self.label_4 = QLabel(TabTools_Andreal)
self.label_4.setObjectName(u"label_4")
self.formLayout.setWidget(9, QFormLayout.LabelRole, self.label_4)
self.label_7 = QLabel(TabTools_Andreal)
self.label_7.setObjectName(u"label_7")
self.label_7.setOpenExternalLinks(True)
self.formLayout.setWidget(9, QFormLayout.FieldRole, self.label_7)
self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
self.formLayout.setItem(8, QFormLayout.SpanningRole, self.verticalSpacer)
self.retranslateUi(TabTools_Andreal) self.retranslateUi(TabTools_Andreal)
self.imageFormat_jpgRadioButton.toggled.connect(self.jpgQualityHolderWidget.setEnabled) self.imageFormat_jpgRadioButton.toggled.connect(self.jpgQualityHolderWidget.setEnabled)
@ -241,6 +256,8 @@ class Ui_TabTools_Andreal(object):
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_4.setText(QCoreApplication.translate("TabTools_Andreal", u"sourceCode", None))
self.label_7.setText(QCoreApplication.translate("TabTools_Andreal", u"<a href=\"https://github.com/283375/AndrealImageGenerator\">283375/AndrealImageGenerator</a><br>(forked from <a href=\"https://github.com/Awbugl/AndrealImageGenerator\">Awbugl/AndrealImageGenerator</a>)", None))
pass pass
# retranslateUi # retranslateUi

View File

@ -82,6 +82,9 @@
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::NoSelection</enum> <enum>QAbstractItemView::NoSelection</enum>
</property> </property>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum>
</property>
<property name="verticalScrollMode"> <property name="verticalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum> <enum>QAbstractItemView::ScrollPerPixel</enum>
</property> </property>
@ -325,7 +328,7 @@
<set>QAbstractItemView::NoEditTriggers</set> <set>QAbstractItemView::NoEditTriggers</set>
</property> </property>
<property name="selectionMode"> <property name="selectionMode">
<enum>QAbstractItemView::SingleSelection</enum> <enum>QAbstractItemView::NoSelection</enum>
</property> </property>
<property name="selectionBehavior"> <property name="selectionBehavior">
<enum>QAbstractItemView::SelectRows</enum> <enum>QAbstractItemView::SelectRows</enum>

View File

@ -68,6 +68,7 @@ class Ui_TabTools_ChartRecommend(object):
self.chartsByConstant_modelView.setMinimumSize(QSize(150, 0)) self.chartsByConstant_modelView.setMinimumSize(QSize(150, 0))
self.chartsByConstant_modelView.setEditTriggers(QAbstractItemView.NoEditTriggers) self.chartsByConstant_modelView.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.chartsByConstant_modelView.setSelectionMode(QAbstractItemView.NoSelection) self.chartsByConstant_modelView.setSelectionMode(QAbstractItemView.NoSelection)
self.chartsByConstant_modelView.setSelectionBehavior(QAbstractItemView.SelectRows)
self.chartsByConstant_modelView.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel) self.chartsByConstant_modelView.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
self.chartsByConstant_modelView.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel) self.chartsByConstant_modelView.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel)
@ -228,7 +229,7 @@ class Ui_TabTools_ChartRecommend(object):
self.chartsRecommendFromPlayRating_modelView.setSizePolicy(sizePolicy2) self.chartsRecommendFromPlayRating_modelView.setSizePolicy(sizePolicy2)
self.chartsRecommendFromPlayRating_modelView.setMinimumSize(QSize(200, 0)) self.chartsRecommendFromPlayRating_modelView.setMinimumSize(QSize(200, 0))
self.chartsRecommendFromPlayRating_modelView.setEditTriggers(QAbstractItemView.NoEditTriggers) self.chartsRecommendFromPlayRating_modelView.setEditTriggers(QAbstractItemView.NoEditTriggers)
self.chartsRecommendFromPlayRating_modelView.setSelectionMode(QAbstractItemView.SingleSelection) self.chartsRecommendFromPlayRating_modelView.setSelectionMode(QAbstractItemView.NoSelection)
self.chartsRecommendFromPlayRating_modelView.setSelectionBehavior(QAbstractItemView.SelectRows) self.chartsRecommendFromPlayRating_modelView.setSelectionBehavior(QAbstractItemView.SelectRows)
self.chartsRecommendFromPlayRating_modelView.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel) self.chartsRecommendFromPlayRating_modelView.setVerticalScrollMode(QAbstractItemView.ScrollPerPixel)
self.chartsRecommendFromPlayRating_modelView.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel) self.chartsRecommendFromPlayRating_modelView.setHorizontalScrollMode(QAbstractItemView.ScrollPerPixel)

View File

@ -1,6 +1,5 @@
from arcaea_offline.models import Chart, Score, ScoreBest from arcaea_offline.models import Chart, Score, ScoreBest
from PySide6.QtCore import QCoreApplication, QModelIndex, QSortFilterProxyModel, Qt from PySide6.QtCore import QCoreApplication, QModelIndex, QSortFilterProxyModel, Qt
from sqlalchemy import select
from .base import DbTableModel from .base import DbTableModel
@ -18,50 +17,45 @@ class DbB30TableModel(DbTableModel):
def retranslateHeaders(self): def retranslateHeaders(self):
self._horizontalHeaders = [ self._horizontalHeaders = [
# fmt: off # fmt: off
QCoreApplication.translate("DB30TableModel", "horizontalHeader.id"), QCoreApplication.translate("DbB30TableModel", "horizontalHeader.id"),
QCoreApplication.translate("DB30TableModel", "horizontalHeader.chart"), QCoreApplication.translate("DbB30TableModel", "horizontalHeader.chart"),
QCoreApplication.translate("DB30TableModel", "horizontalHeader.score"), QCoreApplication.translate("DbB30TableModel", "horizontalHeader.score"),
QCoreApplication.translate("DB30TableModel", "horizontalHeader.potential"), QCoreApplication.translate("DbB30TableModel", "horizontalHeader.potential"),
# fmt: on # fmt: on
] ]
def syncDb(self): def syncDb(self):
self.beginResetModel()
self.beginRemoveRows(QModelIndex(), 0, self.rowCount())
self.__items.clear() self.__items.clear()
self.endRemoveRows()
self.endResetModel()
with self._db.sessionmaker() as session: with self._db.sessionmaker() as session:
results = list( results = (
session.scalars( session.query(ScoreBest, Chart)
select(ScoreBest).order_by(ScoreBest.potential.desc()).limit(40) .join(
Chart,
(ScoreBest.song_id == Chart.song_id)
& (ScoreBest.rating_class == Chart.rating_class),
) )
.order_by(ScoreBest.potential)
.limit(50)
.all()
) )
songIds = [r.id for r in results] self.beginInsertRows(QModelIndex(), 0, len(results) - 1)
ptts = [r.potential for r in results] for scoreBest, chart in results:
self.__items.append(
for scoreId, ptt in zip(songIds, ptts): {
score = self._db.get_score(scoreId) self.IdRole: scoreBest.id,
chart = self._db.get_chart(score.song_id, score.rating_class) self.ChartRole: chart,
self.ScoreRole: scoreBest,
self.beginInsertRows(QModelIndex(), self.rowCount(), self.rowCount()) self.PttRole: scoreBest.potential,
self.__items.append( }
{ )
self.IdRole: score.id,
self.ChartRole: chart,
self.ScoreRole: score,
self.PttRole: ptt,
}
)
self.endInsertRows() self.endInsertRows()
# trigger view update
topLeft = self.index(0, 0)
bottomRight = self.index(self.rowCount() - 1, self.columnCount() - 1)
self.dataChanged.emit(
topLeft,
bottomRight,
[Qt.ItemDataRole.DisplayRole, self.IdRole, self.ChartRole, self.ScoreRole],
)
def rowCount(self, *args): def rowCount(self, *args):
return len(self.__items) return len(self.__items)
@ -117,30 +111,35 @@ class DbB30TableSortFilterProxyModel(QSortFilterProxyModel):
return super().headerData(section, orientation, role) return super().headerData(section, orientation, role)
return section + 1 return section + 1
def lessThan(self, source_left, source_right) -> bool: def lessThan(self, sourceLeft: QModelIndex, sourceRight: QModelIndex) -> bool:
if source_left.column() != source_right.column(): if sourceLeft.column() != sourceRight.column():
return return
column = source_left.column() column = sourceLeft.column()
if column == 0: if column == 0:
return source_left.data(DbB30TableModel.IdRole) < source_right.data( return sourceLeft.data(DbB30TableModel.IdRole) < sourceRight.data(
DbB30TableModel.IdRole DbB30TableModel.IdRole
) )
elif column == 2: elif column == 2:
score_left = source_left.data(DbB30TableModel.ScoreRole) scoreLeft = sourceLeft.data(DbB30TableModel.ScoreRole)
score_right = source_right.data(DbB30TableModel.ScoreRole) scoreRight = sourceRight.data(DbB30TableModel.ScoreRole)
if isinstance(score_left, Score) and isinstance(score_right, Score): if isinstance(scoreLeft, Score) and isinstance(scoreRight, Score):
if self.sortRole() == self.Sort_C2_ScoreRole: if self.sortRole() == self.Sort_C2_ScoreRole:
return score_left.score < score_right.score return scoreLeft.score < scoreRight.score
elif self.sortRole() == self.Sort_C2_TimeRole: elif self.sortRole() == self.Sort_C2_TimeRole:
if score_left.date and score_right.date: if scoreLeft.date and scoreRight.date:
return score_left.date < score_right.date return scoreLeft.date < scoreRight.date
elif score_left.date: elif scoreLeft.date:
return False return False
else: else:
return True return True
elif column == 3: elif column == 3:
return source_left.data(DbB30TableModel.PttRole) < source_right.data( pttLeft = sourceLeft.data(DbB30TableModel.PttRole)
DbB30TableModel.PttRole pttRight = sourceRight.data(DbB30TableModel.PttRole)
) if pttLeft and pttRight:
return super().lessThan(source_left, source_right) return pttLeft < pttRight
elif pttLeft:
return False
else:
return True
return super().lessThan(sourceLeft, sourceRight)

View File

@ -39,14 +39,12 @@ class PlayRatingCalculator(QWidget):
return None return None
score = self.arcaeaScoreLineEdit.score() score = self.arcaeaScoreLineEdit.score()
if score is None: return None if score is None else calculate_play_rating(self.constant, score)
return None
return calculate_play_rating(self.constant, score)
def updateResultLabel(self): def updateResultLabel(self):
result = self.result result = self.result
self.resultLabel.setText(str(result) if result is not None else "...") self.resultLabel.setText(str(round(result, 3)) if result is not None else "...")
self.resultLabel.setToolTip(str(result))
def on_copyButton_clicked(self): def on_copyButton_clicked(self):
result = self.result result = self.result
@ -68,6 +66,7 @@ class PlayRatingCalculator(QWidget):
self.resultLabel.setSizePolicy( self.resultLabel.setSizePolicy(
QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Preferred
) )
self.resultLabel.setMinimumWidth(100)
self.horizontalLayout.addWidget(self.resultLabel) self.horizontalLayout.addWidget(self.resultLabel)
self.horizontalSpacer = QSpacerItem( self.horizontalSpacer = QSpacerItem(

View File

@ -1,3 +1,5 @@
import logging
from arcaea_offline.database import Database from arcaea_offline.database import Database
from PySide6.QtCore import QCoreApplication from PySide6.QtCore import QCoreApplication
from PySide6.QtGui import QShowEvent from PySide6.QtGui import QShowEvent
@ -6,6 +8,8 @@ from PySide6.QtWidgets import QWidget
from ui.designer.tabs.tabOverview_ui import Ui_TabOverview from ui.designer.tabs.tabOverview_ui import Ui_TabOverview
from ui.extends.shared.language import LanguageChangeEventFilter from ui.extends.shared.language import LanguageChangeEventFilter
logger = logging.getLogger(__name__)
class TabOverview(Ui_TabOverview, QWidget): class TabOverview(Ui_TabOverview, QWidget):
def __init__(self, parent=None): def __init__(self, parent=None):
@ -22,18 +26,27 @@ class TabOverview(Ui_TabOverview, QWidget):
return super().showEvent(event) return super().showEvent(event)
def updateOverview(self): def updateOverview(self):
b30 = self.db.get_b30() or 0.00 try:
self.b30Label.setText(str(f"{b30:.3f}")) b30 = self.db.get_b30() or 0.00
self.databaseDescribeLabel.setText( self.b30Label.setText(str(f"{b30:.3f}"))
self.describeFormatString.format( except Exception:
self.db.count_packs(), logger.exception("Cannot get b30:")
self.db.count_songs(), self.b30Label.setText("ERR")
self.db.count_difficulties(),
self.db.count_chart_infos(), try:
self.db.count_complete_chart_infos(), self.databaseDescribeLabel.setText(
self.db.count_scores(), self.describeFormatString.format(
self.db.count_packs(),
self.db.count_songs(),
self.db.count_difficulties(),
self.db.count_chart_infos(),
self.db.count_complete_chart_infos(),
self.db.count_scores(),
)
) )
) except Exception:
logger.exception("Cannot update overview:")
self.databaseDescribeLabel.setText("ERR")
def retranslateUi(self, *args): def retranslateUi(self, *args):
super().retranslateUi(self) super().retranslateUi(self)

View File

@ -2,11 +2,11 @@ import logging
from arcaea_offline.calculate import calculate_constants_from_play_rating from arcaea_offline.calculate import calculate_constants_from_play_rating
from arcaea_offline.database import Database from arcaea_offline.database import Database
from arcaea_offline.models import Chart, ScoreBest from arcaea_offline.models import Chart, Score
from arcaea_offline.utils.rating import rating_class_to_text from arcaea_offline.utils.rating import rating_class_to_text
from arcaea_offline.utils.score import score_to_grade_text from PySide6.QtCore import QModelIndex, Qt, Slot
from PySide6.QtCore import Slot from PySide6.QtGui import QColor, QPalette
from PySide6.QtWidgets import QWidget from PySide6.QtWidgets import QDialog, QLabel, QVBoxLayout, QWidget
from ui.designer.tabs.tabTools.tabTools_ChartRecommend_ui import ( from ui.designer.tabs.tabTools.tabTools_ChartRecommend_ui import (
Ui_TabTools_ChartRecommend, Ui_TabTools_ChartRecommend,
@ -17,16 +17,37 @@ from ui.extends.tabs.tabTools.tabTools_ChartRecommend import (
CustomChartDelegate, CustomChartDelegate,
CustomScoreBestDelegate, CustomScoreBestDelegate,
) )
from ui.implements.components.playRatingCalculator import PlayRatingCalculator
logger = logging.getLogger(__name__) logger = logging.getLogger(__name__)
def chartToText(chart: Chart): class QuickPlayRatingCalculatorDialog(QDialog):
return f"{chart.artist} - {chart.title}<br>({chart.song_id}) {rating_class_to_text(chart.rating_class)}" def __init__(self, parent=None):
super().__init__(parent)
self.verticalLayout = QVBoxLayout(self)
def scoreBestToText(score: ScoreBest): self.chartLabel = QLabel(self)
return f"{score_to_grade_text(score.score)} {score.score} > {score.potential:.4f}" self.verticalLayout.addWidget(self.chartLabel)
self.playRatingCalculator = PlayRatingCalculator(self)
self.verticalLayout.addWidget(self.playRatingCalculator)
self.setMinimumWidth(400)
self.playRatingCalculator.arcaeaScoreLineEdit.setFocus(
Qt.FocusReason.PopupFocusReason
)
def setChart(self, chart: Chart):
self.chartLabel.setText(
f"{chart.title} {rating_class_to_text(chart.rating_class)} {chart.constant / 10}"
)
self.playRatingCalculator.setConstant(chart.constant)
def setScore(self, score: Score):
self.playRatingCalculator.arcaeaScoreLineEdit.setText(str(score))
class TabTools_ChartRecommend(Ui_TabTools_ChartRecommend, QWidget): class TabTools_ChartRecommend(Ui_TabTools_ChartRecommend, QWidget):
@ -62,6 +83,13 @@ class TabTools_ChartRecommend(Ui_TabTools_ChartRecommend, QWidget):
self.updateChartsRecommendFromPlayRating self.updateChartsRecommendFromPlayRating
) )
self.chartsByConstant_modelView.doubleClicked.connect(
self.openQuickPlayRatingCalculator_chartsByConstant
)
self.chartsRecommendFromPlayRating_modelView.doubleClicked.connect(
self.openQuickPlayRatingCalculator_chartsRecommendFromPlayRating
)
@Slot(float) @Slot(float)
def on_rangeFromPlayRating_playRatingSpinBox_valueChanged(self, value: float): def on_rangeFromPlayRating_playRatingSpinBox_valueChanged(self, value: float):
try: try:
@ -120,3 +148,26 @@ class TabTools_ChartRecommend(Ui_TabTools_ChartRecommend, QWidget):
self.chartsRecommendFromPlayRatingModel.setChartAndScore(charts, scores) self.chartsRecommendFromPlayRatingModel.setChartAndScore(charts, scores)
self.chartsRecommendFromPlayRating_modelView.resizeRowsToContents() self.chartsRecommendFromPlayRating_modelView.resizeRowsToContents()
self.chartsRecommendFromPlayRating_modelView.resizeColumnsToContents() self.chartsRecommendFromPlayRating_modelView.resizeColumnsToContents()
@Slot(QModelIndex)
def openQuickPlayRatingCalculator_chartsByConstant(self, index: QModelIndex):
dialog = QuickPlayRatingCalculatorDialog(self)
chart = index.data(ChartsModel.ChartRole)
dialog.setChart(chart)
dialog.show()
@Slot(QModelIndex)
def openQuickPlayRatingCalculator_chartsRecommendFromPlayRating(
self, index: QModelIndex
):
dialog = QuickPlayRatingCalculatorDialog(self)
row = index.row()
chartIndex = self.chartsRecommendFromPlayRatingModel.item(row, 0)
scoreIndex = self.chartsRecommendFromPlayRatingModel.item(row, 1)
chart = chartIndex.data(ChartsWithScoreBestModel.ChartRole)
score: Score = scoreIndex.data(ChartsWithScoreBestModel.ScoreBestRole)
dialog.setChart(chart)
dialog.setScore(score.score)
dialog.show()

View File

@ -27,64 +27,45 @@
<translation>Reset</translation> <translation>Reset</translation>
</message> </message>
</context> </context>
<context>
<name>DB30TableModel</name>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="21"/>
<source>horizontalHeader.id</source>
<translation>ID</translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="22"/>
<source>horizontalHeader.chart</source>
<translation>Chart</translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="23"/>
<source>horizontalHeader.score</source>
<translation>Score</translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="24"/>
<source>horizontalHeader.potential</source>
<translation>Potential</translation>
</message>
</context>
<context> <context>
<name>DatabaseChecker</name> <name>DatabaseChecker</name>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="23"/> <location filename="../../startup/databaseChecker.ui" line="23"/>
<location filename="../../startup/databaseChecker_ui.py" line="162"/>
<source>dbPathLabel</source> <source>dbPathLabel</source>
<translation>Database path</translation> <translation>Database path</translation>
</message> </message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="33"/> <location filename="../../startup/databaseChecker.ui" line="33"/>
<location filename="../../startup/databaseChecker_ui.py" line="165"/>
<source>dbFilenameLabel</source> <source>dbFilenameLabel</source>
<translation>Database filename</translation> <translation>Database filename</translation>
</message> </message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="64"/> <location filename="../../startup/databaseChecker.ui" line="64"/>
<location filename="../../startup/databaseChecker_ui.py" line="168"/>
<source>confirmDbPathButton</source> <source>confirmDbPathButton</source>
<translation>Confirm</translation> <translation>Confirm</translation>
</message> </message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="117"/> <location filename="../../startup/databaseChecker.ui" line="117"/>
<location filename="../../startup/databaseChecker_ui.py" line="177"/>
<source>dbVersionLabel</source> <source>dbVersionLabel</source>
<translation>Database version</translation> <translation>Database version</translation>
</message> </message>
<message>
<location filename="../../startup/databaseChecker.ui" line="131"/>
<source>dbReInitLabel</source>
<translation>Re-initialize database</translation>
</message>
<message>
<location filename="../../startup/databaseChecker.ui" line="138"/>
<source>dbReInitButton</source>
<translation>Re-initialize</translation>
</message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="93"/> <location filename="../../startup/databaseChecker.ui" line="93"/>
<location filename="../../startup/databaseChecker_ui.py" line="171"/>
<source>dbCheckConnLabel</source> <source>dbCheckConnLabel</source>
<translation>Database connection</translation> <translation>Database connection</translation>
</message> </message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="110"/> <location filename="../../startup/databaseChecker.ui" line="110"/>
<location filename="../../startup/databaseChecker_ui.py" line="174"/>
<source>continueButton</source> <source>continueButton</source>
<translation>Continue</translation> <translation>Continue</translation>
</message> </message>
@ -99,6 +80,29 @@
<translation>Database file does not exist. Create now?</translation> <translation>Database file does not exist. Create now?</translation>
</message> </message>
</context> </context>
<context>
<name>DbB30TableModel</name>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="20"/>
<source>horizontalHeader.id</source>
<translation>ID</translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="21"/>
<source>horizontalHeader.chart</source>
<translation>Chart</translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="22"/>
<source>horizontalHeader.score</source>
<translation>Score</translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="23"/>
<source>horizontalHeader.potential</source>
<translation>Potential</translation>
</message>
</context>
<context> <context>
<name>DbScoreTableModel</name> <name>DbScoreTableModel</name>
<message> <message>
@ -303,6 +307,14 @@ validation</translation>
<translation>Score</translation> <translation>Score</translation>
</message> </message>
</context> </context>
<context>
<name>PotentialCalculator</name>
<message>
<location filename="../../implements/components/playRatingCalculator.py" line="85"/>
<source>copyButton</source>
<translation>Copy</translation>
</message>
</context>
<context> <context>
<name>ResettableItem</name> <name>ResettableItem</name>
<message> <message>
@ -554,6 +566,14 @@ validation</translation>
<translation>Next</translation> <translation>Next</translation>
</message> </message>
</context> </context>
<context>
<name>StepCalculator</name>
<message>
<location filename="../../implements/tabs/tabTools/tabTools_StepCalculator.py" line="96"/>
<source>playRatingCalculatorDialog.acceptButton</source>
<translation>Accept</translation>
</message>
</context>
<context> <context>
<name>TabAbout</name> <name>TabAbout</name>
<message> <message>
@ -981,6 +1001,16 @@ validation</translation>
<source>generateImageButton</source> <source>generateImageButton</source>
<translation>Generate</translation> <translation>Generate</translation>
</message> </message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="335"/>
<source>sourceCode</source>
<translation>Source code</translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="342"/>
<source>&lt;a href=&quot;https://github.com/283375/AndrealImageGenerator&quot;&gt;283375/AndrealImageGenerator&lt;/a&gt;&lt;br&gt;(forked from &lt;a href=&quot;https://github.com/Awbugl/AndrealImageGenerator&quot;&gt;Awbugl/AndrealImageGenerator&lt;/a&gt;)</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../../implements/tabs/tabTools/tabTools_Andreal.py" line="138"/> <location filename="../../implements/tabs/tabTools/tabTools_Andreal.py" line="138"/>
<source>imageWhatIsThisDialog.description</source> <source>imageWhatIsThisDialog.description</source>
@ -990,7 +1020,7 @@ validation</translation>
<context> <context>
<name>TabTools_ChartRecommend</name> <name>TabTools_ChartRecommend</name>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_ChartRecommend.ui" line="99"/> <location filename="../../designer/tabs/tabTools/tabTools_ChartRecommend.ui" line="102"/>
<source>constantRangeFromPlayRating</source> <source>constantRangeFromPlayRating</source>
<translation>Chart Constant Range from Play Rating</translation> <translation>Chart Constant Range from Play Rating</translation>
</message> </message>
@ -1000,7 +1030,7 @@ validation</translation>
<translation>Charts by Constant</translation> <translation>Charts by Constant</translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_ChartRecommend.ui" line="245"/> <location filename="../../designer/tabs/tabTools/tabTools_ChartRecommend.ui" line="248"/>
<source>chartsRecommendFromPlayRating</source> <source>chartsRecommendFromPlayRating</source>
<translation>Chart from Play Rating Based on Best Score</translation> <translation>Chart from Play Rating Based on Best Score</translation>
</message> </message>

View File

@ -1,5 +1,5 @@
import argparse import argparse
import os import subprocess
import sys import sys
from pathlib import Path from pathlib import Path
@ -32,23 +32,31 @@ assert startup.exists()
no_obsolete = args.no_obsolete no_obsolete = args.no_obsolete
commands = [ commands = [
( [
"pyside6-lupdate" "pyside6-lupdate",
" -extensions py,ui" "-extensions",
f" {designer.absolute()} {extends.absolute()} {implements.absolute()} {startup.absolute()}" "py,ui",
f" -ts {str((output_dir_path / 'zh_CN.ts').absolute())}" str(designer.absolute()),
), # zh_CN str(extends.absolute()),
( str(implements.absolute()),
"pyside6-lupdate" str(startup.absolute()),
" -extensions py,ui" "-ts",
f" {designer.absolute()} {extends.absolute()} {implements.absolute()} {startup.absolute()}" str((output_dir_path / "zh_CN.ts").absolute()),
f" -ts {str((output_dir_path / 'en_US.ts').absolute())}" ], # zh_CN
), # en_US [
"pyside6-lupdate",
"-extensions",
"py,ui",
str(designer.absolute()),
str(extends.absolute()),
str(implements.absolute()),
str(startup.absolute()),
"-ts",
str((output_dir_path / "en_US.ts").absolute()),
], # en_US
] ]
if no_obsolete: if no_obsolete:
commands = [f"{command} -no-obsolete" for command in commands] commands = [command + ["-no-obsolete"] for command in commands]
for command in commands: for command in commands:
print(f"Executing '{command}'") subprocess.run(command)
output = os.popen(command).read()
print(output)

View File

@ -27,64 +27,45 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>DB30TableModel</name>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="21"/>
<source>horizontalHeader.id</source>
<translation>ID</translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="22"/>
<source>horizontalHeader.chart</source>
<translation></translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="23"/>
<source>horizontalHeader.score</source>
<translation></translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="24"/>
<source>horizontalHeader.potential</source>
<translation> PTT</translation>
</message>
</context>
<context> <context>
<name>DatabaseChecker</name> <name>DatabaseChecker</name>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="23"/> <location filename="../../startup/databaseChecker.ui" line="23"/>
<location filename="../../startup/databaseChecker_ui.py" line="162"/>
<source>dbPathLabel</source> <source>dbPathLabel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="33"/> <location filename="../../startup/databaseChecker.ui" line="33"/>
<location filename="../../startup/databaseChecker_ui.py" line="165"/>
<source>dbFilenameLabel</source> <source>dbFilenameLabel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="64"/> <location filename="../../startup/databaseChecker.ui" line="64"/>
<location filename="../../startup/databaseChecker_ui.py" line="168"/>
<source>confirmDbPathButton</source> <source>confirmDbPathButton</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="117"/> <location filename="../../startup/databaseChecker.ui" line="117"/>
<location filename="../../startup/databaseChecker_ui.py" line="177"/>
<source>dbVersionLabel</source> <source>dbVersionLabel</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../../startup/databaseChecker.ui" line="131"/>
<source>dbReInitLabel</source>
<translation></translation>
</message>
<message>
<location filename="../../startup/databaseChecker.ui" line="138"/>
<source>dbReInitButton</source>
<translation></translation>
</message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="93"/> <location filename="../../startup/databaseChecker.ui" line="93"/>
<location filename="../../startup/databaseChecker_ui.py" line="171"/>
<source>dbCheckConnLabel</source> <source>dbCheckConnLabel</source>
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../startup/databaseChecker.ui" line="110"/> <location filename="../../startup/databaseChecker.ui" line="110"/>
<location filename="../../startup/databaseChecker_ui.py" line="174"/>
<source>continueButton</source> <source>continueButton</source>
<translation></translation> <translation></translation>
</message> </message>
@ -99,6 +80,29 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>DbB30TableModel</name>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="20"/>
<source>horizontalHeader.id</source>
<translation>ID</translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="21"/>
<source>horizontalHeader.chart</source>
<translation></translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="22"/>
<source>horizontalHeader.score</source>
<translation></translation>
</message>
<message>
<location filename="../../extends/shared/models/tables/b30.py" line="23"/>
<source>horizontalHeader.potential</source>
<translation> PTT</translation>
</message>
</context>
<context> <context>
<name>DbScoreTableModel</name> <name>DbScoreTableModel</name>
<message> <message>
@ -302,6 +306,14 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>PotentialCalculator</name>
<message>
<location filename="../../implements/components/playRatingCalculator.py" line="85"/>
<source>copyButton</source>
<translation></translation>
</message>
</context>
<context> <context>
<name>ResettableItem</name> <name>ResettableItem</name>
<message> <message>
@ -553,6 +565,14 @@
<translation></translation> <translation></translation>
</message> </message>
</context> </context>
<context>
<name>StepCalculator</name>
<message>
<location filename="../../implements/tabs/tabTools/tabTools_StepCalculator.py" line="96"/>
<source>playRatingCalculatorDialog.acceptButton</source>
<translation></translation>
</message>
</context>
<context> <context>
<name>TabAbout</name> <name>TabAbout</name>
<message> <message>
@ -980,6 +1000,16 @@
<source>generateImageButton</source> <source>generateImageButton</source>
<translation></translation> <translation></translation>
</message> </message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="335"/>
<source>sourceCode</source>
<translation></translation>
</message>
<message>
<location filename="../../designer/tabs/tabTools/tabTools_Andreal.ui" line="342"/>
<source>&lt;a href=&quot;https://github.com/283375/AndrealImageGenerator&quot;&gt;283375/AndrealImageGenerator&lt;/a&gt;&lt;br&gt;(forked from &lt;a href=&quot;https://github.com/Awbugl/AndrealImageGenerator&quot;&gt;Awbugl/AndrealImageGenerator&lt;/a&gt;)</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<location filename="../../implements/tabs/tabTools/tabTools_Andreal.py" line="138"/> <location filename="../../implements/tabs/tabTools/tabTools_Andreal.py" line="138"/>
<source>imageWhatIsThisDialog.description</source> <source>imageWhatIsThisDialog.description</source>
@ -989,7 +1019,7 @@
<context> <context>
<name>TabTools_ChartRecommend</name> <name>TabTools_ChartRecommend</name>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_ChartRecommend.ui" line="99"/> <location filename="../../designer/tabs/tabTools/tabTools_ChartRecommend.ui" line="102"/>
<source>constantRangeFromPlayRating</source> <source>constantRangeFromPlayRating</source>
<translation> PTT </translation> <translation> PTT </translation>
</message> </message>
@ -999,7 +1029,7 @@
<translation></translation> <translation></translation>
</message> </message>
<message> <message>
<location filename="../../designer/tabs/tabTools/tabTools_ChartRecommend.ui" line="245"/> <location filename="../../designer/tabs/tabTools/tabTools_ChartRecommend.ui" line="248"/>
<source>chartsRecommendFromPlayRating</source> <source>chartsRecommendFromPlayRating</source>
<translation> PTT </translation> <translation> PTT </translation>
</message> </message>

View File

@ -138,6 +138,11 @@ class DatabaseChecker(Ui_DatabaseChecker, QDialog):
db.init() db.init()
self.updateLabels() self.updateLabels()
@Slot()
def on_dbReInitButton_clicked(self):
Database().init(checkfirst=True)
QMessageBox.information(self, None, "OK")
@Slot() @Slot()
def on_continueButton_clicked(self): def on_continueButton_clicked(self):
self.accept() self.accept()

View File

@ -125,6 +125,20 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="5" column="0">
<widget class="QLabel" name="label_4">
<property name="text">
<string>dbReInitLabel</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="QPushButton" name="dbReInitButton">
<property name="text">
<string>dbReInitButton</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
<customwidgets> <customwidgets>

View File

@ -8,173 +8,131 @@
## WARNING! All changes made in this file will be lost when recompiling UI file! ## WARNING! All changes made in this file will be lost when recompiling UI file!
################################################################################ ################################################################################
from PySide6.QtCore import ( from PySide6.QtCore import (QCoreApplication, QDate, QDateTime, QLocale,
QCoreApplication, QMetaObject, QObject, QPoint, QRect,
QDate, QSize, QTime, QUrl, Qt)
QDateTime, from PySide6.QtGui import (QBrush, QColor, QConicalGradient, QCursor,
QLocale, QFont, QFontDatabase, QGradient, QIcon,
QMetaObject, QImage, QKeySequence, QLinearGradient, QPainter,
QObject, QPalette, QPixmap, QRadialGradient, QTransform)
QPoint, from PySide6.QtWidgets import (QApplication, QFormLayout, QFrame, QHBoxLayout,
QRect, QLabel, QLineEdit, QPushButton, QSizePolicy,
QSize, QSpacerItem, QWidget)
Qt,
QTime,
QUrl,
)
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,
QFormLayout,
QFrame,
QHBoxLayout,
QLabel,
QLineEdit,
QPushButton,
QSizePolicy,
QSpacerItem,
QWidget,
)
from ui.implements.components.fileSelector import FileSelector from ui.implements.components.fileSelector import FileSelector
class Ui_DatabaseChecker(object): class Ui_DatabaseChecker(object):
def setupUi(self, DatabaseChecker): def setupUi(self, DatabaseChecker):
if not DatabaseChecker.objectName(): if not DatabaseChecker.objectName():
DatabaseChecker.setObjectName("DatabaseChecker") DatabaseChecker.setObjectName(u"DatabaseChecker")
DatabaseChecker.resize(350, 250) DatabaseChecker.resize(350, 250)
DatabaseChecker.setWindowTitle("DatabaseChecker") DatabaseChecker.setWindowTitle(u"DatabaseChecker")
self.formLayout = QFormLayout(DatabaseChecker) self.formLayout = QFormLayout(DatabaseChecker)
self.formLayout.setObjectName("formLayout") self.formLayout.setObjectName(u"formLayout")
self.formLayout.setLabelAlignment( self.formLayout.setLabelAlignment(Qt.AlignRight|Qt.AlignTrailing|Qt.AlignVCenter)
Qt.AlignRight | Qt.AlignTrailing | Qt.AlignVCenter
)
self.label = QLabel(DatabaseChecker) self.label = QLabel(DatabaseChecker)
self.label.setObjectName("label") self.label.setObjectName(u"label")
self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label) self.formLayout.setWidget(0, QFormLayout.LabelRole, self.label)
self.dbDirSelector = FileSelector(DatabaseChecker) self.dbDirSelector = FileSelector(DatabaseChecker)
self.dbDirSelector.setObjectName("dbDirSelector") self.dbDirSelector.setObjectName(u"dbDirSelector")
self.formLayout.setWidget(0, QFormLayout.FieldRole, self.dbDirSelector) self.formLayout.setWidget(0, QFormLayout.FieldRole, self.dbDirSelector)
self.label_3 = QLabel(DatabaseChecker) self.label_3 = QLabel(DatabaseChecker)
self.label_3.setObjectName("label_3") self.label_3.setObjectName(u"label_3")
self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_3) self.formLayout.setWidget(1, QFormLayout.LabelRole, self.label_3)
self.dbFilenameLineEdit = QLineEdit(DatabaseChecker) self.dbFilenameLineEdit = QLineEdit(DatabaseChecker)
self.dbFilenameLineEdit.setObjectName("dbFilenameLineEdit") self.dbFilenameLineEdit.setObjectName(u"dbFilenameLineEdit")
self.formLayout.setWidget(1, QFormLayout.FieldRole, self.dbFilenameLineEdit) self.formLayout.setWidget(1, QFormLayout.FieldRole, self.dbFilenameLineEdit)
self.horizontalLayout = QHBoxLayout() self.horizontalLayout = QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout") self.horizontalLayout.setObjectName(u"horizontalLayout")
self.horizontalSpacer = QSpacerItem( self.horizontalSpacer = QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum)
40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum
)
self.horizontalLayout.addItem(self.horizontalSpacer) self.horizontalLayout.addItem(self.horizontalSpacer)
self.confirmDbPathButton = QPushButton(DatabaseChecker) self.confirmDbPathButton = QPushButton(DatabaseChecker)
self.confirmDbPathButton.setObjectName("confirmDbPathButton") self.confirmDbPathButton.setObjectName(u"confirmDbPathButton")
sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed) sizePolicy = QSizePolicy(QSizePolicy.Maximum, QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0) sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0) sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth( sizePolicy.setHeightForWidth(self.confirmDbPathButton.sizePolicy().hasHeightForWidth())
self.confirmDbPathButton.sizePolicy().hasHeightForWidth()
)
self.confirmDbPathButton.setSizePolicy(sizePolicy) self.confirmDbPathButton.setSizePolicy(sizePolicy)
self.horizontalLayout.addWidget(self.confirmDbPathButton) self.horizontalLayout.addWidget(self.confirmDbPathButton)
self.formLayout.setLayout(2, QFormLayout.FieldRole, self.horizontalLayout) self.formLayout.setLayout(2, QFormLayout.FieldRole, self.horizontalLayout)
self.dbVersionLabel = QLabel(DatabaseChecker) self.dbVersionLabel = QLabel(DatabaseChecker)
self.dbVersionLabel.setObjectName("dbVersionLabel") self.dbVersionLabel.setObjectName(u"dbVersionLabel")
self.dbVersionLabel.setText("-") self.dbVersionLabel.setText(u"-")
self.formLayout.setWidget(4, QFormLayout.FieldRole, self.dbVersionLabel) self.formLayout.setWidget(4, QFormLayout.FieldRole, self.dbVersionLabel)
self.verticalSpacer = QSpacerItem( self.verticalSpacer = QSpacerItem(20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding)
20, 40, QSizePolicy.Minimum, QSizePolicy.Expanding
)
self.formLayout.setItem(6, QFormLayout.FieldRole, self.verticalSpacer) self.formLayout.setItem(6, QFormLayout.FieldRole, self.verticalSpacer)
self.label_5 = QLabel(DatabaseChecker) self.label_5 = QLabel(DatabaseChecker)
self.label_5.setObjectName("label_5") self.label_5.setObjectName(u"label_5")
self.formLayout.setWidget(7, QFormLayout.LabelRole, self.label_5) self.formLayout.setWidget(7, QFormLayout.LabelRole, self.label_5)
self.dbCheckConnLabel = QLabel(DatabaseChecker) self.dbCheckConnLabel = QLabel(DatabaseChecker)
self.dbCheckConnLabel.setObjectName("dbCheckConnLabel") self.dbCheckConnLabel.setObjectName(u"dbCheckConnLabel")
self.dbCheckConnLabel.setText("...") self.dbCheckConnLabel.setText(u"...")
self.formLayout.setWidget(7, QFormLayout.FieldRole, self.dbCheckConnLabel) self.formLayout.setWidget(7, QFormLayout.FieldRole, self.dbCheckConnLabel)
self.continueButton = QPushButton(DatabaseChecker) self.continueButton = QPushButton(DatabaseChecker)
self.continueButton.setObjectName("continueButton") self.continueButton.setObjectName(u"continueButton")
self.continueButton.setEnabled(False) self.continueButton.setEnabled(False)
self.formLayout.setWidget(8, QFormLayout.SpanningRole, self.continueButton) self.formLayout.setWidget(8, QFormLayout.SpanningRole, self.continueButton)
self.label_2 = QLabel(DatabaseChecker) self.label_2 = QLabel(DatabaseChecker)
self.label_2.setObjectName("label_2") self.label_2.setObjectName(u"label_2")
self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_2) self.formLayout.setWidget(4, QFormLayout.LabelRole, self.label_2)
self.line = QFrame(DatabaseChecker) self.line = QFrame(DatabaseChecker)
self.line.setObjectName("line") self.line.setObjectName(u"line")
self.line.setFrameShape(QFrame.HLine) self.line.setFrameShape(QFrame.HLine)
self.line.setFrameShadow(QFrame.Sunken) self.line.setFrameShadow(QFrame.Sunken)
self.formLayout.setWidget(3, QFormLayout.SpanningRole, self.line) self.formLayout.setWidget(3, QFormLayout.SpanningRole, self.line)
self.label_4 = QLabel(DatabaseChecker)
self.label_4.setObjectName(u"label_4")
self.formLayout.setWidget(5, QFormLayout.LabelRole, self.label_4)
self.dbReInitButton = QPushButton(DatabaseChecker)
self.dbReInitButton.setObjectName(u"dbReInitButton")
self.formLayout.setWidget(5, QFormLayout.FieldRole, self.dbReInitButton)
self.retranslateUi(DatabaseChecker) self.retranslateUi(DatabaseChecker)
QMetaObject.connectSlotsByName(DatabaseChecker) QMetaObject.connectSlotsByName(DatabaseChecker)
# setupUi # setupUi
def retranslateUi(self, DatabaseChecker): def retranslateUi(self, DatabaseChecker):
self.label.setText( self.label.setText(QCoreApplication.translate("DatabaseChecker", u"dbPathLabel", None))
QCoreApplication.translate("DatabaseChecker", "dbPathLabel", None) self.label_3.setText(QCoreApplication.translate("DatabaseChecker", u"dbFilenameLabel", None))
) self.confirmDbPathButton.setText(QCoreApplication.translate("DatabaseChecker", u"confirmDbPathButton", None))
self.label_3.setText( self.label_5.setText(QCoreApplication.translate("DatabaseChecker", u"dbCheckConnLabel", None))
QCoreApplication.translate("DatabaseChecker", "dbFilenameLabel", None) self.continueButton.setText(QCoreApplication.translate("DatabaseChecker", u"continueButton", None))
) self.label_2.setText(QCoreApplication.translate("DatabaseChecker", u"dbVersionLabel", None))
self.confirmDbPathButton.setText( self.label_4.setText(QCoreApplication.translate("DatabaseChecker", u"dbReInitLabel", None))
QCoreApplication.translate("DatabaseChecker", "confirmDbPathButton", None) self.dbReInitButton.setText(QCoreApplication.translate("DatabaseChecker", u"dbReInitButton", None))
)
self.label_5.setText(
QCoreApplication.translate("DatabaseChecker", "dbCheckConnLabel", None)
)
self.continueButton.setText(
QCoreApplication.translate("DatabaseChecker", "continueButton", None)
)
self.label_2.setText(
QCoreApplication.translate("DatabaseChecker", "dbVersionLabel", None)
)
pass pass
# retranslateUi # retranslateUi