feat: implement queue panel with table, batch modes, stats, and export

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-06-16 09:25:45 +08:00
co-authored by Claude Sonnet 4.6
parent 1054ab6236
commit aeb6b59ca1
3 changed files with 491 additions and 20 deletions
+26 -5
View File
@@ -17,6 +17,7 @@ from version import APP_NAME, APP_VERSION
from app.widgets.export_panel import ExportPanel
from app.widgets.image_canvas import ImageCanvas
from app.widgets.image_list_panel import ImageListPanel
from app.widgets.queue_panel import QueuePanel
from app.widgets.template_panel import TemplatePanel
from app.widgets.transform_panel import TransformPanel
@@ -59,6 +60,7 @@ class MainWindow(QMainWindow):
self.setCentralWidget(root)
self._apply_stylesheet()
self._connect_signals()
def _create_header(self):
"""Top header: app name, version label, settings button."""
@@ -210,12 +212,11 @@ class MainWindow(QMainWindow):
self._queue_body.setObjectName("queueBody")
body_layout = QVBoxLayout(self._queue_body)
body_layout.setContentsMargins(12, 8, 12, 8)
body_layout.setContentsMargins(0, 0, 0, 0)
body_layout.setSpacing(0)
placeholder = QLabel("合成队列(实现中)")
placeholder.setAlignment(Qt.AlignCenter)
placeholder.setObjectName("queuePlaceholder")
body_layout.addWidget(placeholder)
self.queue_panel = QueuePanel()
body_layout.addWidget(self.queue_panel)
self._queue_expanded = True
return self._queue_body
@@ -240,6 +241,26 @@ class MainWindow(QMainWindow):
self._queue_container.setFixedHeight(36)
self._collapse_btn.setText("▼")
# ------------------------------------------------------------------
# Signal wiring
# ------------------------------------------------------------------
def _connect_signals(self):
"""Connect inter-panel signals needed for the queue workflow."""
# Asset lists → queue rebuilds automatically
self.image_list_panel.garments_changed.connect(self.queue_panel.set_garments)
self.image_list_panel.prints_changed.connect(self.queue_panel.set_prints)
# Queue row selection → preview canvas
self.queue_panel.item_activated.connect(self._on_queue_item_activated)
def _on_queue_item_activated(self, item):
"""Load garment and print from a selected queue item into the canvas."""
self.image_canvas.load_garment(str(item.garment.path))
self.image_canvas.load_print(str(item.print_asset.path))
if item.transform:
self.image_canvas.set_transform(item.transform)
self.transform_panel.set_transform(item.transform)
# ------------------------------------------------------------------
# Style (ref: docs/07-ui-design.md §10)
# ------------------------------------------------------------------