mirror of
https://github.com/283375/arcaea-offline-pyside-ui.git
synced 2025-07-01 12:26:26 +00:00
init
This commit is contained in:
30
ui/implements/tabs/tabDb/tabDb_Manage.py
Normal file
30
ui/implements/tabs/tabDb/tabDb_Manage.py
Normal file
@ -0,0 +1,30 @@
|
||||
import logging
|
||||
import traceback
|
||||
|
||||
from arcaea_offline.database import Database
|
||||
from PySide6.QtCore import Slot
|
||||
from PySide6.QtWidgets import QFileDialog, QMessageBox, QWidget
|
||||
|
||||
from ui.designer.tabs.tabDb.tabDb_Manage_ui import Ui_TabDb_Manage
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class TabDb_Manage(Ui_TabDb_Manage, QWidget):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
self.setupUi(self)
|
||||
|
||||
@Slot()
|
||||
def on_syncArcSongDbButton_clicked(self):
|
||||
dbFile, filter = QFileDialog.getOpenFileName(
|
||||
self, None, "", "DB File (*.db);;*"
|
||||
)
|
||||
try:
|
||||
Database().update_arcsong_db(dbFile)
|
||||
QMessageBox.information(self, "OK", "OK")
|
||||
except Exception as e:
|
||||
logging.exception("Sync arcsong.db error")
|
||||
QMessageBox.critical(
|
||||
self, "Sync Error", "\n".join(traceback.format_exception(e))
|
||||
)
|
114
ui/implements/tabs/tabDb/tabDb_ScoreTableViewer.py
Normal file
114
ui/implements/tabs/tabDb/tabDb_ScoreTableViewer.py
Normal file
@ -0,0 +1,114 @@
|
||||
from arcaea_offline.models import ScoreInsert
|
||||
from PySide6.QtCore import QModelIndex, Qt, Slot
|
||||
from PySide6.QtGui import QColor, QPalette
|
||||
from PySide6.QtWidgets import QMessageBox
|
||||
|
||||
from ui.extends.shared.delegates.chartDelegate import ChartDelegate
|
||||
from ui.extends.shared.delegates.scoreDelegate import ScoreDelegate
|
||||
from ui.extends.shared.models.tables.score import (
|
||||
DbScoreTableModel,
|
||||
DbScoreTableSortFilterProxyModel,
|
||||
)
|
||||
from ui.implements.components.dbTableViewer import DbTableViewer
|
||||
|
||||
|
||||
class TableChartDelegate(ChartDelegate):
|
||||
def getChart(self, index):
|
||||
return index.data(DbScoreTableModel.ChartRole)
|
||||
|
||||
|
||||
class TableScoreDelegate(ScoreDelegate):
|
||||
def getChart(self, index):
|
||||
return index.data(DbScoreTableModel.ChartRole)
|
||||
|
||||
def getScoreInsert(self, index: QModelIndex) -> ScoreInsert | None:
|
||||
return super().getScoreInsert(index)
|
||||
|
||||
def getScore(self, index):
|
||||
return index.data(DbScoreTableModel.ScoreRole)
|
||||
|
||||
def setModelData(self, editor, model, index):
|
||||
if super().confirmSetModelData(editor):
|
||||
model.setData(index, editor.value(), DbScoreTableModel.ScoreRole)
|
||||
|
||||
|
||||
class DbScoreTableViewer(DbTableViewer):
|
||||
def __init__(self, parent=None):
|
||||
super().__init__(parent)
|
||||
|
||||
self.tableModel = DbScoreTableModel(self)
|
||||
self.tableProxyModel = DbScoreTableSortFilterProxyModel(self)
|
||||
self.tableProxyModel.setSourceModel(self.tableModel)
|
||||
self.tableView.setModel(self.tableProxyModel)
|
||||
self.tableView.setItemDelegateForColumn(1, TableChartDelegate(self.tableView))
|
||||
self.tableView.setItemDelegateForColumn(2, TableScoreDelegate(self.tableView))
|
||||
|
||||
tableViewPalette = QPalette(self.tableView.palette())
|
||||
highlightColor = QColor(tableViewPalette.color(QPalette.ColorRole.Highlight))
|
||||
highlightColor.setAlpha(25)
|
||||
tableViewPalette.setColor(QPalette.ColorRole.Highlight, highlightColor)
|
||||
self.tableView.setPalette(tableViewPalette)
|
||||
self.tableModel.dataChanged.connect(self.resizeTableView)
|
||||
|
||||
self.fillSortComboBox()
|
||||
|
||||
def fillSortComboBox(self):
|
||||
self.sort_comboBox.addItem("ID", [0, 1])
|
||||
self.sort_comboBox.addItem(
|
||||
"Score", [2, DbScoreTableSortFilterProxyModel.Sort_C2_ScoreRole]
|
||||
)
|
||||
self.sort_comboBox.addItem(
|
||||
"Time", [2, DbScoreTableSortFilterProxyModel.Sort_C2_TimeRole]
|
||||
)
|
||||
self.sort_comboBox.addItem("Potential", [3, 1])
|
||||
self.sort_comboBox.setCurrentIndex(0)
|
||||
self.on_sort_comboBox_activated()
|
||||
|
||||
@Slot()
|
||||
def resizeTableView(self):
|
||||
self.tableView.resizeRowsToContents()
|
||||
self.tableView.resizeColumnsToContents()
|
||||
|
||||
@Slot()
|
||||
def on_sort_comboBox_activated(self):
|
||||
self.sortProxyModel()
|
||||
|
||||
@Slot()
|
||||
def on_sort_descendingCheckBox_toggled(self):
|
||||
self.sortProxyModel()
|
||||
|
||||
@Slot()
|
||||
def sortProxyModel(self):
|
||||
if self.sort_comboBox.currentIndex() > -1:
|
||||
column, role = self.sort_comboBox.currentData()
|
||||
self.tableProxyModel.setSortRole(role)
|
||||
self.tableProxyModel.sort(
|
||||
column,
|
||||
Qt.SortOrder.DescendingOrder
|
||||
if self.sort_descendingCheckBox.isChecked()
|
||||
else Qt.SortOrder.AscendingOrder,
|
||||
)
|
||||
|
||||
@Slot()
|
||||
def on_action_removeSelectedButton_clicked(self):
|
||||
rows = [
|
||||
srcIndex.row()
|
||||
for srcIndex in [
|
||||
self.tableProxyModel.mapToSource(proxyIndex)
|
||||
for proxyIndex in self.tableView.selectionModel().selectedRows()
|
||||
]
|
||||
]
|
||||
result = QMessageBox.warning(
|
||||
self,
|
||||
"Warning",
|
||||
f"Removing {len(rows)} row(s). Are you sure?",
|
||||
QMessageBox.StandardButton.Yes,
|
||||
QMessageBox.StandardButton.No,
|
||||
)
|
||||
if result == QMessageBox.StandardButton.Yes:
|
||||
self.tableModel.removeRowList(rows)
|
||||
|
||||
@Slot()
|
||||
def on_refreshButton_clicked(self):
|
||||
self.tableModel.syncDb()
|
||||
self.resizeTableView()
|
Reference in New Issue
Block a user