Make character details an all-details toggle

This commit is contained in:
Dusk-92
2026-09-02 11:42:10 +02:00
parent 85c7ca9d98
commit afb4993dee
+41 -8
View File
@@ -33,6 +33,7 @@ class ModernWowSetupTool(WowSetupTool):
"zone": tk.BooleanVar(master=root, value=True), "zone": tk.BooleanVar(master=root, value=True),
} }
self.discord_presence_details_frame = None self.discord_presence_details_frame = None
self.discord_detail_checkbuttons = {}
self._download_window = None self._download_window = None
self._download_label = None self._download_label = None
@@ -98,10 +99,22 @@ class ModernWowSetupTool(WowSetupTool):
bool(mask & remote_packages.WOWPRESENCE_SHARE_RACE) bool(mask & remote_packages.WOWPRESENCE_SHARE_RACE)
) )
# A legacy mask never had a separate master switch. Keeping this on # "Show character details" now means "show everything". Only select it
# preserves the previous display while still allowing all individual # automatically when the existing configuration already represents the
# choices to be edited. # full legacy/default disclosure set. Any custom mask stays custom.
self.discord_show_character_details.set(True) legacy_all = (
mask <= 63
and (mask & 63) == 63
)
current_all = (
mask > 63
and (mask & remote_packages.WOWPRESENCE_SHARE_ALL)
== remote_packages.WOWPRESENCE_SHARE_ALL
)
self.discord_show_character_details.set(legacy_all or current_all)
if self.discord_show_character_details.get():
for var in self.discord_detail_vars.values():
var.set(True)
def _load_legacy_install_state(self, target_dir): def _load_legacy_install_state(self, target_dir):
super()._load_legacy_install_state(target_dir) super()._load_legacy_install_state(target_dir)
@@ -131,8 +144,8 @@ class ModernWowSetupTool(WowSetupTool):
return loaded return loaded
def _discord_broadcast_mask(self): def _discord_broadcast_mask(self):
if not self.discord_show_character_details.get(): if self.discord_show_character_details.get():
return 0 return remote_packages.WOWPRESENCE_SHARE_ALL
bits = { bits = {
"name": remote_packages.WOWPRESENCE_SHARE_NAME, "name": remote_packages.WOWPRESENCE_SHARE_NAME,
@@ -150,6 +163,21 @@ class ModernWowSetupTool(WowSetupTool):
mask |= bit mask |= bit
return mask return mask
def _toggle_discord_all_details(self):
show_all = bool(self.discord_show_character_details.get())
if show_all:
for var in self.discord_detail_vars.values():
var.set(True)
self.update_discord_detail_states()
def update_discord_detail_states(self):
state = "disabled" if self.discord_show_character_details.get() else "normal"
for checkbox in getattr(self, "discord_detail_checkbuttons", {}).values():
try:
checkbox.configure(state=state)
except tk.TclError:
pass
def update_discord_presence_controls(self): def update_discord_presence_controls(self):
frame = getattr(self, "discord_presence_details_frame", None) frame = getattr(self, "discord_presence_details_frame", None)
if frame is None: if frame is None:
@@ -164,6 +192,9 @@ class ModernWowSetupTool(WowSetupTool):
elif not visible and manager: elif not visible and manager:
frame.pack_forget() frame.pack_forget()
if visible:
self.update_discord_detail_states()
def _build_discord_presence_details(self, parent): def _build_discord_presence_details(self, parent):
frame = ttk.Frame(parent) frame = ttk.Frame(parent)
self.discord_presence_details_frame = frame self.discord_presence_details_frame = frame
@@ -172,12 +203,13 @@ class ModernWowSetupTool(WowSetupTool):
frame, frame,
text="Show character details", text="Show character details",
variable=self.discord_show_character_details, variable=self.discord_show_character_details,
command=self._toggle_discord_all_details,
) )
show_cb.pack(anchor="w", padx=6, pady=(1, 2)) show_cb.pack(anchor="w", padx=6, pady=(1, 2))
ToolTip( ToolTip(
show_cb, show_cb,
"Controls whether the selected character details are published to Discord. " "When enabled, all character details are shown and the individual choices "
"The choices below stay available even when this is unchecked.", "below are locked. Uncheck it to choose each detail separately.",
) )
labels = { labels = {
@@ -196,6 +228,7 @@ class ModernWowSetupTool(WowSetupTool):
variable=self.discord_detail_vars[name], variable=self.discord_detail_vars[name],
) )
cb.pack(anchor="w", padx=24, pady=1) cb.pack(anchor="w", padx=24, pady=1)
self.discord_detail_checkbuttons[name] = cb
ToolTip( ToolTip(
cb, cb,
f"Choose whether WowPresence may publish your {label.lower()} on Discord.", f"Choose whether WowPresence may publish your {label.lower()} on Discord.",