优化程序
This commit is contained in:
1 parent
68e8eb91a7
commit
6df29c9254
27 files changed
+1974
-203
No files matched your search
+88
@@ -486,6 +486,13 @@ class GroupWidget(QWidget):
|
||||
self._add_btn.click() if e.button() == Qt.MouseButton.LeftButton else None
|
||||
)
|
||||
|
||||
# 🖥️ 变成桌面文件框按钮(放在加号左边)
|
||||
self._dock_btn = QPushButton()
|
||||
self._dock_btn.setFixedSize(22, 22)
|
||||
self._dock_btn.setToolTip("变成桌面文件框")
|
||||
self._dock_btn.setStyleSheet("border:none; background:transparent;")
|
||||
self._dock_btn.clicked.connect(self._toggle_dock_box)
|
||||
|
||||
self._more_btn = QPushButton()
|
||||
self._more_btn.setFixedSize(22, 22)
|
||||
self._more_btn.setStyleSheet("border:none; background:transparent;")
|
||||
@@ -496,6 +503,7 @@ class GroupWidget(QWidget):
|
||||
h_layout.addWidget(self.title_label)
|
||||
h_layout.addStretch()
|
||||
h_layout.addWidget(self.path_label)
|
||||
h_layout.addWidget(self._dock_btn)
|
||||
h_layout.addWidget(self._add_btn)
|
||||
h_layout.addWidget(self._more_btn)
|
||||
|
||||
@@ -511,10 +519,65 @@ class GroupWidget(QWidget):
|
||||
n = item_count_for_group(self.group_data["id"])
|
||||
self.title_label.setText(f"{self.group_data['name']} ({n})")
|
||||
|
||||
def _has_docked_box(self) -> bool:
|
||||
"""检查本分组是否已有关联的桌面文件框。"""
|
||||
conn = database.get_conn()
|
||||
row = conn.execute("SELECT id FROM file_boxes WHERE group_id=?",
|
||||
(self.group_data["id"],)).fetchone()
|
||||
conn.close()
|
||||
return row is not None
|
||||
|
||||
def _toggle_dock_box(self):
|
||||
"""点击 🖥️ 按钮:创建或恢复/聚焦已关联的桌面文件框。"""
|
||||
from db import database as db_mod
|
||||
from ui.box import FileBox
|
||||
|
||||
gid = self.group_data["id"]
|
||||
box_id = db_mod.create_file_box_from_group(gid)
|
||||
if box_id is None:
|
||||
# 已存在 → 找出来 show + raise
|
||||
conn = db_mod.get_conn()
|
||||
row = conn.execute("SELECT id FROM file_boxes WHERE group_id=?", (gid,)).fetchone()
|
||||
conn.close()
|
||||
if row:
|
||||
box_id = row["id"]
|
||||
|
||||
# 拿到 PanelWindow 引用
|
||||
main = self.window() if hasattr(self, "window") else None
|
||||
from ui.dock import PanelWindow
|
||||
if isinstance(main, PanelWindow):
|
||||
main._load_file_boxes()
|
||||
else:
|
||||
# 直接构造一个 FileBox 并 show
|
||||
conn = db_mod.get_conn()
|
||||
box_row = conn.execute("SELECT * FROM file_boxes WHERE id=?", (box_id,)).fetchone()
|
||||
conn.close()
|
||||
if box_row:
|
||||
box_data = dict(box_row)
|
||||
# 如果 FileBox._panel_ref 还没设,尝试找一个
|
||||
if FileBox._panel_ref is None:
|
||||
# 扫描 QApplication topLevelWidgets 找 PanelWindow
|
||||
from PyQt6.QtWidgets import QApplication
|
||||
for w in QApplication.topLevelWidgets():
|
||||
if isinstance(w, PanelWindow):
|
||||
FileBox._panel_ref = w; break
|
||||
box = FileBox(box_data)
|
||||
box.show()
|
||||
|
||||
self._apply_theme() # 刷新按钮状态色
|
||||
|
||||
def _apply_theme(self):
|
||||
t = theme.current()
|
||||
ic = "#cccccc" if theme.name() == "dark" else "#555555"
|
||||
|
||||
# 已关联文件框 → 用蓝色高亮按钮
|
||||
if self._has_docked_box():
|
||||
dock_color = "#4a9eff"
|
||||
self._dock_btn.setToolTip("已在桌面文件框(点击聚焦)")
|
||||
else:
|
||||
dock_color = ic
|
||||
self._dock_btn.setToolTip("变成桌面文件框")
|
||||
|
||||
self.header.setStyleSheet(f"""
|
||||
QWidget {{ background:{t['header_bg']}; border-radius:5px; }}
|
||||
QWidget:hover {{ background:{t['header_hover']}; }}
|
||||
@@ -526,6 +589,8 @@ class GroupWidget(QWidget):
|
||||
arrow = "fa5s.chevron-down" if not self.collapsed else "fa5s.chevron-right"
|
||||
self.toggle_icon.setPixmap(qta.icon(arrow, color=ic).pixmap(14, 14))
|
||||
|
||||
self._dock_btn.setIcon(qta.icon("fa5s.desktop", color=dock_color))
|
||||
self._dock_btn.setIconSize(QSize(11, 11))
|
||||
self._add_btn.setIcon(qta.icon("fa5s.plus", color=ic))
|
||||
self._add_btn.setIconSize(QSize(11, 11))
|
||||
self._more_btn.setIcon(qta.icon("fa5s.ellipsis-h", color=ic))
|
||||
@@ -573,6 +638,7 @@ class GroupWidget(QWidget):
|
||||
QMenu::item:selected {{ background:{t['menu_selected']}; }}
|
||||
""")
|
||||
rename_act = menu.addAction("重命名")
|
||||
dock_act = menu.addAction("🖥️ 变成桌面文件框")
|
||||
del_act = menu.addAction("删除分组")
|
||||
action = menu.exec(QCursor.pos())
|
||||
if action == rename_act:
|
||||
@@ -583,6 +649,28 @@ class GroupWidget(QWidget):
|
||||
database.rename_group(self.group_data["id"], name.strip())
|
||||
self.group_data["name"] = name.strip()
|
||||
self._update_title_count()
|
||||
elif action == dock_act:
|
||||
from db import database as db_mod
|
||||
from ui.dock import PanelWindow # 延迟 import
|
||||
box_id = db_mod.create_file_box_from_group(self.group_data["id"])
|
||||
if box_id is None:
|
||||
dialog_style.information(self, "提示", "该分组已关联桌面文件框")
|
||||
else:
|
||||
# 通知主面板立即加载这个新 FileBox
|
||||
main_window = self.window()
|
||||
if isinstance(main_window, PanelWindow):
|
||||
main_window._load_file_boxes()
|
||||
# 找到刚创建的 FileBox 并 show
|
||||
from ui.box import FileBox
|
||||
for b in FileBox._instances:
|
||||
if b._group_id == self.group_data["id"] and not b.isVisible():
|
||||
b.show()
|
||||
break
|
||||
dialog_style.information(
|
||||
self, "成功",
|
||||
f"分组「{self.group_data['name']}」已变成桌面文件框 ✅\n"
|
||||
f"两者数据实时联动"
|
||||
)
|
||||
elif action == del_act:
|
||||
ret = dialog_style.question(
|
||||
self,
|
||||
|
||||
Reference in new issue
Block a user