Make character details an all-details toggle
This commit is contained in:
+41
-8
@@ -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.",
|
||||||
|
|||||||
Reference in New Issue
Block a user