mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-11-06 12:32:14 +00:00
wip: qml overview tab
This commit is contained in:
@ -1,124 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>TabOverview</class>
|
||||
<widget class="QWidget" name="TabOverview">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>696</width>
|
||||
<height>509</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string notr="true">TabOverview</string>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout">
|
||||
<item>
|
||||
<widget class="QWidget" name="widget" native="true"/>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="databaseDescribeLabel">
|
||||
<property name="text">
|
||||
<string notr="true" extracomment="This database now have {} packs, {} songs, {} difficulties, {} chart info ({} complete) and {} scores.">...</string>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_2" native="true">
|
||||
<property name="sizePolicy">
|
||||
<sizepolicy hsizetype="Preferred" vsizetype="Expanding">
|
||||
<horstretch>0</horstretch>
|
||||
<verstretch>0</verstretch>
|
||||
</sizepolicy>
|
||||
</property>
|
||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_3" native="true">
|
||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||
<item>
|
||||
<widget class="QLabel" name="b30Label">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>30</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">0.00</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignBottom|Qt::AlignHCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_2">
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>20</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">B30</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QWidget" name="widget_4" native="true">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<layout class="QVBoxLayout" name="verticalLayout_3">
|
||||
<item>
|
||||
<widget class="QLabel" name="r10Label">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>30</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">--</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignBottom|Qt::AlignHCenter</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
<item>
|
||||
<widget class="QLabel" name="label_4">
|
||||
<property name="enabled">
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property name="font">
|
||||
<font>
|
||||
<pointsize>20</pointsize>
|
||||
</font>
|
||||
</property>
|
||||
<property name="text">
|
||||
<string notr="true">R10</string>
|
||||
</property>
|
||||
<property name="alignment">
|
||||
<set>Qt::AlignHCenter|Qt::AlignTop</set>
|
||||
</property>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@ -1,114 +0,0 @@
|
||||
# -*- coding: utf-8 -*-
|
||||
|
||||
################################################################################
|
||||
## Form generated from reading UI file 'tabOverview.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, QHBoxLayout, QLabel, QSizePolicy,
|
||||
QVBoxLayout, QWidget)
|
||||
|
||||
class Ui_TabOverview(object):
|
||||
def setupUi(self, TabOverview):
|
||||
if not TabOverview.objectName():
|
||||
TabOverview.setObjectName(u"TabOverview")
|
||||
TabOverview.resize(696, 509)
|
||||
TabOverview.setWindowTitle(u"TabOverview")
|
||||
self.verticalLayout = QVBoxLayout(TabOverview)
|
||||
self.verticalLayout.setObjectName(u"verticalLayout")
|
||||
self.widget = QWidget(TabOverview)
|
||||
self.widget.setObjectName(u"widget")
|
||||
|
||||
self.verticalLayout.addWidget(self.widget)
|
||||
|
||||
self.databaseDescribeLabel = QLabel(TabOverview)
|
||||
self.databaseDescribeLabel.setObjectName(u"databaseDescribeLabel")
|
||||
self.databaseDescribeLabel.setText(u"...")
|
||||
|
||||
self.verticalLayout.addWidget(self.databaseDescribeLabel)
|
||||
|
||||
self.widget_2 = QWidget(TabOverview)
|
||||
self.widget_2.setObjectName(u"widget_2")
|
||||
sizePolicy = QSizePolicy(QSizePolicy.Preferred, QSizePolicy.Expanding)
|
||||
sizePolicy.setHorizontalStretch(0)
|
||||
sizePolicy.setVerticalStretch(0)
|
||||
sizePolicy.setHeightForWidth(self.widget_2.sizePolicy().hasHeightForWidth())
|
||||
self.widget_2.setSizePolicy(sizePolicy)
|
||||
self.horizontalLayout = QHBoxLayout(self.widget_2)
|
||||
self.horizontalLayout.setObjectName(u"horizontalLayout")
|
||||
self.widget_3 = QWidget(self.widget_2)
|
||||
self.widget_3.setObjectName(u"widget_3")
|
||||
self.verticalLayout_2 = QVBoxLayout(self.widget_3)
|
||||
self.verticalLayout_2.setObjectName(u"verticalLayout_2")
|
||||
self.b30Label = QLabel(self.widget_3)
|
||||
self.b30Label.setObjectName(u"b30Label")
|
||||
font = QFont()
|
||||
font.setPointSize(30)
|
||||
self.b30Label.setFont(font)
|
||||
self.b30Label.setText(u"0.00")
|
||||
self.b30Label.setAlignment(Qt.AlignBottom|Qt.AlignHCenter)
|
||||
|
||||
self.verticalLayout_2.addWidget(self.b30Label)
|
||||
|
||||
self.label_2 = QLabel(self.widget_3)
|
||||
self.label_2.setObjectName(u"label_2")
|
||||
font1 = QFont()
|
||||
font1.setPointSize(20)
|
||||
self.label_2.setFont(font1)
|
||||
self.label_2.setText(u"B30")
|
||||
self.label_2.setAlignment(Qt.AlignHCenter|Qt.AlignTop)
|
||||
|
||||
self.verticalLayout_2.addWidget(self.label_2)
|
||||
|
||||
|
||||
self.horizontalLayout.addWidget(self.widget_3)
|
||||
|
||||
self.widget_4 = QWidget(self.widget_2)
|
||||
self.widget_4.setObjectName(u"widget_4")
|
||||
self.widget_4.setEnabled(False)
|
||||
self.verticalLayout_3 = QVBoxLayout(self.widget_4)
|
||||
self.verticalLayout_3.setObjectName(u"verticalLayout_3")
|
||||
self.r10Label = QLabel(self.widget_4)
|
||||
self.r10Label.setObjectName(u"r10Label")
|
||||
self.r10Label.setEnabled(False)
|
||||
self.r10Label.setFont(font)
|
||||
self.r10Label.setText(u"--")
|
||||
self.r10Label.setAlignment(Qt.AlignBottom|Qt.AlignHCenter)
|
||||
|
||||
self.verticalLayout_3.addWidget(self.r10Label)
|
||||
|
||||
self.label_4 = QLabel(self.widget_4)
|
||||
self.label_4.setObjectName(u"label_4")
|
||||
self.label_4.setEnabled(False)
|
||||
self.label_4.setFont(font1)
|
||||
self.label_4.setText(u"R10")
|
||||
self.label_4.setAlignment(Qt.AlignHCenter|Qt.AlignTop)
|
||||
|
||||
self.verticalLayout_3.addWidget(self.label_4)
|
||||
|
||||
|
||||
self.horizontalLayout.addWidget(self.widget_4)
|
||||
|
||||
|
||||
self.verticalLayout.addWidget(self.widget_2)
|
||||
|
||||
|
||||
self.retranslateUi(TabOverview)
|
||||
|
||||
QMetaObject.connectSlotsByName(TabOverview)
|
||||
# setupUi
|
||||
|
||||
def retranslateUi(self, TabOverview):
|
||||
pass
|
||||
# retranslateUi
|
||||
|
||||
@ -1,53 +0,0 @@
|
||||
import logging
|
||||
|
||||
from arcaea_offline.database import Database
|
||||
from PySide6.QtCore import QCoreApplication
|
||||
from PySide6.QtGui import QShowEvent
|
||||
from PySide6.QtWidgets import QWidget
|
||||
|
||||
from ui.designer.tabs.tabOverview_ui import Ui_TabOverview
|
||||
from ui.extends.shared.language import LanguageChangeEventFilter
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TabOverview(Ui_TabOverview, QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
self.languageChangeEventFilter = LanguageChangeEventFilter(self)
|
||||
self.installEventFilter(self.languageChangeEventFilter)
|
||||
|
||||
self.db = Database()
|
||||
|
||||
def showEvent(self, event: QShowEvent) -> None:
|
||||
self.updateOverview()
|
||||
return super().showEvent(event)
|
||||
|
||||
def updateOverview(self):
|
||||
try:
|
||||
b30 = self.db.get_b30() or 0.00
|
||||
self.b30Label.setText(str(f"{b30:.3f}"))
|
||||
except Exception:
|
||||
logger.exception("Cannot get b30:")
|
||||
self.b30Label.setText("ERR")
|
||||
|
||||
try:
|
||||
self.databaseDescribeLabel.setText(
|
||||
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):
|
||||
super().retranslateUi(self)
|
||||
self.describeFormatString = QCoreApplication.translate("TabOverview", "databaseDescribeLabel {} {} {} {} {} {}") # fmt: skip
|
||||
65
ui/qmls/Overview.qml
Normal file
65
ui/qmls/Overview.qml
Normal file
@ -0,0 +1,65 @@
|
||||
import QtQuick
|
||||
import QtQuick.Controls
|
||||
import QtQuick.Layouts
|
||||
|
||||
import internal.ui.vm 1.0
|
||||
|
||||
Page {
|
||||
id: root
|
||||
property var b30: vm.b30
|
||||
|
||||
OverviewViewModel {
|
||||
id: vm
|
||||
|
||||
onB30Changed: {
|
||||
root.b30 = vm.b30;
|
||||
}
|
||||
}
|
||||
|
||||
component Display: RowLayout {
|
||||
required property string label
|
||||
required property string value
|
||||
|
||||
spacing: 5
|
||||
|
||||
// implicitHeight: valueText.implicitHeight
|
||||
|
||||
Text {
|
||||
text: parent.label
|
||||
Layout.alignment: Qt.AlignBaseline
|
||||
}
|
||||
|
||||
Text {
|
||||
id: valueText
|
||||
|
||||
text: parent.value
|
||||
font.pointSize: 18
|
||||
Layout.alignment: Qt.AlignBaseline
|
||||
}
|
||||
}
|
||||
|
||||
RowLayout {
|
||||
ColumnLayout {
|
||||
Layout.fillWidth: true
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
|
||||
Display {
|
||||
label: 'B30'
|
||||
value: root.b30 >= 0 ? root.b30.toFixed(3) : 'N/A'
|
||||
}
|
||||
|
||||
Display {
|
||||
label: 'R10'
|
||||
value: 'Not supported'
|
||||
}
|
||||
}
|
||||
|
||||
Button {
|
||||
Layout.alignment: Qt.AlignBottom
|
||||
|
||||
// TODO: icon
|
||||
text: 'Reload'
|
||||
onClicked: vm.reload()
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1,6 +1,8 @@
|
||||
from PySide6.QtCore import Property, QObject, Signal
|
||||
from PySide6.QtCore import Property, QObject, Signal, Slot
|
||||
from PySide6.QtQml import QmlElement
|
||||
|
||||
from core.database import Database
|
||||
|
||||
from .common import VM_QML_IMPORT_NAME
|
||||
|
||||
QML_IMPORT_NAME = VM_QML_IMPORT_NAME
|
||||
@ -11,11 +13,22 @@ QML_IMPORT_MINOR_VERSION = 0
|
||||
@QmlElement
|
||||
class OverviewViewModel(QObject):
|
||||
_void = Signal()
|
||||
b30Changed = Signal()
|
||||
|
||||
def __init__(self):
|
||||
super().__init__()
|
||||
|
||||
def get_b30(self):
|
||||
return 0
|
||||
self._b30 = -1.0
|
||||
self.reload()
|
||||
|
||||
b30 = Property(float, get_b30, None, notify=_void)
|
||||
@Slot()
|
||||
def reload(self):
|
||||
conn = Database()
|
||||
b30 = conn.b30
|
||||
self._b30 = b30 if b30 is not None else -1.0
|
||||
self.b30Changed.emit()
|
||||
|
||||
def getB30(self):
|
||||
return self._b30
|
||||
|
||||
b30 = Property(float, getB30, None, notify=b30Changed)
|
||||
|
||||
Reference in New Issue
Block a user