fix: implement _toggle_script_mod and _script_context_menu methods

- Toggle: rename files with .disabled suffix to enable/disable
- Context menu: Enable/Disable, Show Files, Open Folder
- Fixes crashes when clicking Toggle or right-clicking script mods
This commit is contained in:
arch_agent
2026-07-19 16:14:18 +02:00
parent 3f48ac5fb0
commit 4d86ac9fc2
+76
View File
@@ -1202,6 +1202,82 @@ class ModManagerWindow(QMainWindow):
self.script_info_label.setText(f"Total: {total_mods} mods, {total_files} files")
def _toggle_script_mod(self):
"""Toggle selected script mod on/off."""
item = self.script_tree.currentItem()
if not item:
return
data = item.data(0, Qt.ItemDataRole.UserRole)
if not data:
return
game_path = Path(self.config["game_path"])
mod_name = data["mod_name"]
category = data["category"]
files = data["files"]
disabled = data["disabled"]
for f in files:
src = game_path / f
if not src.exists():
continue
if disabled:
# Enable: remove .disabled suffix
dst = Path(str(src).replace(".disabled", ""))
if src != dst:
src.rename(dst)
else:
# Disable: add .disabled suffix
dst = Path(str(src) + ".disabled")
src.rename(dst)
data["disabled"] = not disabled
item.setText(4, "❌ Disabled" if data["disabled"] else "✅ Active")
if data["disabled"]:
item.setForeground(4, QColor("#ff0080"))
else:
item.setForeground(4, QColor("#00ff9f"))
self.status.showMessage(f"{'Disabled' if data['disabled'] else 'Enabled'}: {mod_name}")
def _script_context_menu(self, pos):
"""Right-click context menu for script mods."""
item = self.script_tree.itemAt(pos)
if not item:
return
data = item.data(0, Qt.ItemDataRole.UserRole)
if not data:
return
mod_name = data["mod_name"]
disabled = data["disabled"]
menu = QMenu(self)
toggle_action = QAction("Enable" if disabled else "Disable", self)
toggle_action.triggered.connect(self._toggle_script_mod)
menu.addAction(toggle_action)
menu.addSeparator()
show_files = QAction("📋 Show Files", self)
files_text = "\n".join(data["files"][:20])
if len(data["files"]) > 20:
files_text += f"\n... and {len(data['files']) - 20} more"
show_files.triggered.connect(lambda: QMessageBox.information(self, f"{mod_name} — Files", files_text))
menu.addAction(show_files)
menu.addSeparator()
show_path = QAction("📂 Open Folder", self)
game_path = Path(self.config["game_path"])
first_file = game_path / data["files"][0]
show_path.triggered.connect(lambda: subprocess.Popen(["xdg-open", str(first_file.parent)]))
menu.addAction(show_path)
menu.exec(self.script_tree.viewport().mapToGlobal(pos))
def _on_mod_checkbox_changed(self, item, column):
if column != 0:
return