feat(ai-studio): streamline final selection rails

This commit is contained in:
chengma
2026-07-11 17:46:58 +08:00
parent dd88d12cf4
commit c46fe0e543
3 changed files with 161 additions and 37 deletions
+64 -4
View File
@@ -17,9 +17,18 @@ from app import accounts, ai, appconfig, db, image_paths, image_studio, prompts,
if gui.QT_IMPORT_ERROR is not None:
raise unittest.SkipTest("PySide6 未安装")
from PySide6.QtCore import QItemSelectionModel, QModelIndex, QRect, QSize
from PySide6.QtCore import QItemSelectionModel, QModelIndex, QRect, QSize, Qt
from PySide6.QtGui import QImage, QKeyEvent, QTextCursor
from PySide6.QtWidgets import QApplication, QComboBox, QLineEdit, QPlainTextEdit, QProgressBar, QTableView
from PySide6.QtWidgets import (
QAbstractItemView,
QApplication,
QComboBox,
QLineEdit,
QListView,
QPlainTextEdit,
QProgressBar,
QTableView,
)
from app.gui import (
AccountDialog,
@@ -813,7 +822,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
if tab.main_selection_list.item(row).data(gui.Qt.UserRole) is not None
])
self.assertEqual(9, tab.main_selection_list.count())
self.assertIn("空位", tab.main_selection_list.item(2).text())
self.assertIn("空位", tab.main_selection_list.item(2).toolTip())
self.assertEqual("#fff8c5", tab.main_selection_list.item(0).background().color().name())
self.assertFalse(tab.add_asset_to_selection("main", first.id))
@@ -822,7 +831,7 @@ class GuiTests(TempDirMixin, unittest.TestCase):
detail = image_studio.list_selections(project.id, "detail", path=cfg["db_path"])
self.assertEqual([first.id], [selection.asset_id for selection in detail])
self.assertEqual(12, tab.detail_selection_list.count())
self.assertIn("空位", tab.detail_selection_list.item(1).text())
self.assertIn("空位", tab.detail_selection_list.item(1).toolTip())
self.assertTrue(tab.move_selection_asset("main", 1, 0))
main = image_studio.list_selections(project.id, "main", path=cfg["db_path"])
@@ -834,6 +843,57 @@ class GuiTests(TempDirMixin, unittest.TestCase):
self.assert_removed(temp_dir)
def test_image_studio_final_selection_uses_compact_single_row_rails(self):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)
db.init_db(cfg["db_path"])
project = image_studio.create_or_get_project(
account_alias="alias-a",
account_slug="alias_a",
item_id="51100639510",
path=cfg["db_path"],
)
tab = ImageStudioTab(config=cfg, db_path=cfg["db_path"])
self.addCleanup(tab.close)
tab._select_project(project.id)
tab.resize(1280, 820)
tab.show()
self.app.processEvents()
self.assertGreaterEqual(tab.final_panel.minimumHeight(), 150)
self.assertLessEqual(tab.final_panel.maximumHeight(), 170)
self.assertLess(tab.main_selection_list.y(), tab.detail_selection_list.y())
self.assertEqual(QListView.IconMode, tab.main_selection_list.viewMode())
self.assertEqual(QListView.IconMode, tab.detail_selection_list.viewMode())
self.assertEqual(QListView.LeftToRight, tab.main_selection_list.flow())
self.assertEqual(QListView.LeftToRight, tab.detail_selection_list.flow())
self.assertFalse(tab.main_selection_list.isWrapping())
self.assertFalse(tab.detail_selection_list.isWrapping())
self.assertEqual(QSize(60, 62), tab.main_selection_list.gridSize())
self.assertEqual(QSize(50, 52), tab.detail_selection_list.gridSize())
self.assertEqual(9, tab.main_selection_list.count())
self.assertEqual(12, tab.detail_selection_list.count())
self.assertEqual(
QAbstractItemView.ScrollPerPixel,
tab.main_selection_list.horizontalScrollMode(),
)
self.assertEqual(Qt.ScrollBarAlwaysOff, tab.detail_selection_list.verticalScrollBarPolicy())
self.assertEqual(Qt.ScrollBarAsNeeded, tab.detail_selection_list.horizontalScrollBarPolicy())
self.assertTrue(tab.export_button.isEnabled())
self.assertIn("当前未选择终选图片", tab.export_summary_label.text())
tab.detail_selection_list.setFixedWidth(240)
self.app.processEvents()
self.assertGreater(tab.detail_selection_list.horizontalScrollBar().maximum(), 0)
tab._set_running(True)
self.assertFalse(tab.main_selection_list.isEnabled())
self.assertFalse(tab.detail_selection_list.isEnabled())
self.assertFalse(tab.export_button.isEnabled())
tab._set_running(False)
self.assert_removed(temp_dir)
def test_image_studio_tab_shows_resume_and_job_billing_status(self):
with self.make_temp_dir() as temp_dir:
cfg = self.make_config(temp_dir)