feat(product-suite): clarify primary image sorting
This commit is contained in:
@@ -22,6 +22,7 @@ from PySide6.QtCore import (
|
||||
)
|
||||
from PySide6.QtGui import (
|
||||
QColor,
|
||||
QFont,
|
||||
QIcon,
|
||||
QImage,
|
||||
QImageReader,
|
||||
@@ -301,6 +302,7 @@ class ProductOriginalList(QListWidget):
|
||||
self.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
self.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
|
||||
self.setAcceptDrops(True)
|
||||
self._reordering_enabled = True
|
||||
self.setDragEnabled(True)
|
||||
self.setDropIndicatorShown(True)
|
||||
self.setDragDropMode(QListWidget.InternalMove)
|
||||
@@ -318,7 +320,31 @@ class ProductOriginalList(QListWidget):
|
||||
self._hover_remove_button.setFixedSize(28, 28)
|
||||
self._hover_remove_button.clicked.connect(self._remove_hovered)
|
||||
self._hover_remove_button.hide()
|
||||
self.setToolTip("可拖入或粘贴图片;已有缩略图可拖动排序")
|
||||
self._update_reordering_tooltip()
|
||||
|
||||
def reordering_enabled(self):
|
||||
return self._reordering_enabled
|
||||
|
||||
def set_reordering_enabled(self, enabled):
|
||||
self._reordering_enabled = bool(enabled)
|
||||
self.setDragEnabled(self._reordering_enabled)
|
||||
self.setDropIndicatorShown(self._reordering_enabled)
|
||||
self._update_reordering_tooltip()
|
||||
item_tooltip = (
|
||||
"拖动到第一位即可设为主图"
|
||||
if self._reordering_enabled
|
||||
else "正在拉取蝦皮主图,完成后可调整图片顺序"
|
||||
)
|
||||
for row in range(self.count()):
|
||||
item = self.item(row)
|
||||
if item.data(Qt.UserRole) is not None:
|
||||
item.setToolTip(item_tooltip)
|
||||
|
||||
def _update_reordering_tooltip(self):
|
||||
if self._reordering_enabled:
|
||||
self.setToolTip("可拖入或粘贴图片;拖动图片到第一位即可设为主图")
|
||||
else:
|
||||
self.setToolTip("正在拉取蝦皮主图,完成后可调整图片顺序")
|
||||
|
||||
def paintEvent(self, event):
|
||||
super().paintEvent(event)
|
||||
@@ -343,6 +369,9 @@ class ProductOriginalList(QListWidget):
|
||||
if event.mimeData().hasUrls():
|
||||
event.acceptProposedAction()
|
||||
return
|
||||
if not self._reordering_enabled:
|
||||
event.ignore()
|
||||
return
|
||||
super().dragMoveEvent(event)
|
||||
|
||||
def dropEvent(self, event):
|
||||
@@ -351,6 +380,9 @@ class ProductOriginalList(QListWidget):
|
||||
self.filesDropped.emit(paths)
|
||||
event.acceptProposedAction()
|
||||
return
|
||||
if not self._reordering_enabled:
|
||||
event.ignore()
|
||||
return
|
||||
super().dropEvent(event)
|
||||
self.orderChanged.emit(self.asset_ids())
|
||||
|
||||
@@ -3344,6 +3376,11 @@ class ProductSuiteTab(QWidget):
|
||||
for index, asset in enumerate(assets, 1):
|
||||
label = "主图" if index == 1 else "参考%d" % (index - 1)
|
||||
item = QListWidgetItem(label)
|
||||
if index == 1:
|
||||
font = QFont(item.font())
|
||||
font.setBold(True)
|
||||
item.setFont(font)
|
||||
item.setForeground(QColor("#1f5fbf"))
|
||||
item.setData(Qt.UserRole, int(asset.id))
|
||||
item.setData(
|
||||
ORIGINAL_CHECK_STATE_ROLE,
|
||||
@@ -3351,10 +3388,26 @@ class ProductSuiteTab(QWidget):
|
||||
)
|
||||
if _asset_usable(asset):
|
||||
item.setIcon(QIcon(_image_pixmap(asset.local_path, QSize(82, 64))))
|
||||
item.setToolTip("%s,勾选可批量删除;双击预览;拖动可调整顺序" % label)
|
||||
item.setToolTip(
|
||||
"%s,勾选可批量删除;双击预览;%s"
|
||||
% (
|
||||
label,
|
||||
"拖动到第一位即可设为主图"
|
||||
if self.original_list.reordering_enabled()
|
||||
else "正在拉取蝦皮主图,完成后可调整图片顺序",
|
||||
)
|
||||
)
|
||||
else:
|
||||
item.setIcon(QIcon(_placeholder_pixmap("待下载", QSize(82, 64))))
|
||||
item.setToolTip("%s尚未下载;勾选可批量删除,单击缩略图后台拉取" % label)
|
||||
item.setToolTip(
|
||||
"%s尚未下载;勾选可批量删除,单击缩略图后台拉取;%s"
|
||||
% (
|
||||
label,
|
||||
"拖动到第一位即可设为主图"
|
||||
if self.original_list.reordering_enabled()
|
||||
else "正在拉取蝦皮主图,完成后可调整图片顺序",
|
||||
)
|
||||
)
|
||||
self.original_list.addItem(item)
|
||||
finally:
|
||||
self.original_list.blockSignals(previous)
|
||||
@@ -3547,16 +3600,31 @@ class ProductSuiteTab(QWidget):
|
||||
state = self._displayed_state
|
||||
if state is None or state.project_id is None:
|
||||
return
|
||||
if state.generation_running():
|
||||
self._refresh_originals(state)
|
||||
self._status("生成中不能调整商品原图顺序", "warning")
|
||||
return
|
||||
if state.pull_running():
|
||||
self._refresh_originals(state)
|
||||
self._status("正在拉取蝦皮主图,完成后可调整图片顺序", "warning")
|
||||
return
|
||||
all_assets = self._original_assets(state, include_missing=True)
|
||||
hidden_ids = [int(asset.id) for asset in all_assets if int(asset.id) not in set(visible_ids)]
|
||||
ordered_ids = list(visible_ids) + hidden_ids
|
||||
before_ids = [int(asset.id) for asset in all_assets]
|
||||
if ordered_ids == before_ids:
|
||||
self._refresh_originals(state)
|
||||
return
|
||||
try:
|
||||
image_studio.reorder_original_assets(
|
||||
state.project_id,
|
||||
list(visible_ids) + hidden_ids,
|
||||
ordered_ids,
|
||||
path=self.db_path,
|
||||
)
|
||||
except Exception as exc:
|
||||
self._message("原图排序失败", _user_error(exc))
|
||||
else:
|
||||
self._status("已更新商品原图顺序,第一张图片为主图", "success")
|
||||
self._refresh_originals(state)
|
||||
|
||||
def _asset_for_item(self, item):
|
||||
@@ -5752,6 +5820,7 @@ class ProductSuiteTab(QWidget):
|
||||
self.item_id_edit.setEnabled(not generation_running and not pull_running)
|
||||
self._refresh_add_images_action(state)
|
||||
self.original_list.setEnabled(not generation_running)
|
||||
self.original_list.set_reordering_enabled(not generation_running and not pull_running)
|
||||
self._refresh_original_selection_controls()
|
||||
for widget in (
|
||||
self.platform_combo,
|
||||
|
||||
Reference in New Issue
Block a user