feat: split generate title and image statuses

This commit is contained in:
chengma
2026-07-08 11:37:34 +08:00
parent 773f528668
commit 4146ab5593
4 changed files with 264 additions and 21 deletions
+31 -1
View File
@@ -26,6 +26,7 @@ class GenerateTab(QWidget):
"cover": "封面",
"all": "标题和封面",
}
TABLE_COLUMN_WEIGHTS = (1.0, 0.5, 1.0, 1.0, 1.25, 1.25)
def __init__(
self,
@@ -171,11 +172,13 @@ class GenerateTab(QWidget):
self.empty_state_button.clicked.connect(self.open_accounts_callback)
self.task_table = QTableView()
self.model = GenerateTaskTableModel(self.task_table, db_path=self.db_path, status_callback=self._set_status)
self.model.set_generate_cover_enabled(self.generate_cover_checkbox.isChecked())
self.task_table.setModel(self.model)
self.task_table.setSelectionBehavior(QAbstractItemView.SelectRows)
self.task_table.setSelectionMode(QAbstractItemView.ExtendedSelection)
self.task_table.setEditTriggers(QAbstractItemView.DoubleClicked | QAbstractItemView.EditKeyPressed)
self.task_table.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)
self.task_table.horizontalHeader().setSectionResizeMode(QHeaderView.Interactive)
self.task_table.horizontalHeader().setStretchLastSection(False)
self.task_table.verticalHeader().setVisible(False)
self.run_log_view = QPlainTextEdit()
@@ -201,6 +204,7 @@ class GenerateTab(QWidget):
self.splitter.setStretchFactor(0, 1)
self.splitter.setStretchFactor(1, 3)
self.splitter.setSizes([280, 860])
self.splitter.splitterMoved.connect(lambda *_: self._apply_task_table_column_widths())
title_progress_layout = QHBoxLayout()
title_progress_layout.addWidget(self.title_progress_label)
@@ -256,6 +260,10 @@ class GenerateTab(QWidget):
self._show_current_run_log_empty()
self._update_cmhub_balance_label({})
def resizeEvent(self, event):
super().resizeEvent(event)
self._apply_task_table_column_widths()
def _set_status(self, message, level=None):
_emit_status(self.status_callback, message, level=level)
@@ -281,11 +289,31 @@ class GenerateTab(QWidget):
def _on_generate_cover_toggled(self, checked):
previous = bool(appconfig.ai_config(self.config).get("generate_cover", False))
if self._save_generate_cover_setting(show_status=True):
self.model.set_generate_cover_enabled(bool(checked))
self.refresh_tasks()
return
self.generate_cover_checkbox.blockSignals(True)
self.generate_cover_checkbox.setChecked(previous)
self.generate_cover_checkbox.blockSignals(False)
self.model.set_generate_cover_enabled(previous)
def _apply_task_table_column_widths(self):
if self.model.columnCount() != len(self.TABLE_COLUMN_WEIGHTS):
return
width = max(0, int(self.task_table.viewport().width()))
if width <= 0:
return
total_weight = sum(self.TABLE_COLUMN_WEIGHTS)
used = 0
last_column = len(self.TABLE_COLUMN_WEIGHTS) - 1
header = self.task_table.horizontalHeader()
for column, weight in enumerate(self.TABLE_COLUMN_WEIGHTS):
if column == last_column:
section_width = max(1, width - used)
else:
section_width = max(1, int(width * weight / total_weight))
used += section_width
header.resizeSection(column, section_width)
def _save_generate_cover_setting(self, show_status=True):
generate_cover = bool(self.generate_cover_checkbox.isChecked())
@@ -964,7 +992,9 @@ class GenerateTab(QWidget):
_set_empty_state(self.empty_state_card, self.empty_state_label, self.empty_state_button)
self._set_status(f"AI 生成任务读取失败:{exc}")
return
self.model.set_generate_cover_enabled(self.generate_cover_checkbox.isChecked())
self.model.set_tasks(filtered_tasks, accounts_rows)
self._apply_task_table_column_widths()
self.summary_label.setText(
f"任务 {len(filtered_tasks)}/{len(batch_tasks)} 条"
)