fix: align mods view column headers with data rows
- Use padx=(8,4) consistently for the name column in both header and rows, removing the leading-space text hack in row labels - Add a 16px spacer at the right end of the header to compensate for CTkScrollableFrame's internal scrollbar width - Centre-align Downloaded and Linked columns (header + tick/cross labels) - Unify update button width to 80px to match header col width
This commit is contained in:
@@ -184,19 +184,22 @@ class ModsView(BaseView):
|
|||||||
fg_color=("gray82", "gray22"), corner_radius=6)
|
fg_color=("gray82", "gray22"), corner_radius=6)
|
||||||
col_hdr.grid(row=0, column=0, sticky="ew", padx=4, pady=(6, 2))
|
col_hdr.grid(row=0, column=0, sticky="ew", padx=4, pady=(6, 2))
|
||||||
col_hdr.columnconfigure(0, weight=1)
|
col_hdr.columnconfigure(0, weight=1)
|
||||||
for col, (w, lbl_key) in enumerate([
|
for col, (w, lbl_key, anc) in enumerate([
|
||||||
(0, "mods.col_name"),
|
(0, "mods.col_name", "w"),
|
||||||
(80, "mods.col_downloaded"),
|
(80, "mods.col_downloaded", "center"),
|
||||||
(80, "mods.col_linked"),
|
(80, "mods.col_linked", "center"),
|
||||||
(160, "mods.col_server"),
|
(160, "mods.col_server", "w"),
|
||||||
(80, ""),
|
(80, "", "center"),
|
||||||
]):
|
]):
|
||||||
ctk.CTkLabel(col_hdr, text=t(lbl_key) if lbl_key else "",
|
ctk.CTkLabel(col_hdr, text=t(lbl_key) if lbl_key else "",
|
||||||
font=ctk.CTkFont(weight="bold"),
|
font=ctk.CTkFont(weight="bold"),
|
||||||
anchor="w", width=w or 1).grid(
|
anchor=anc, width=w or 1).grid(
|
||||||
row=0, column=col,
|
row=0, column=col,
|
||||||
padx=(10 if col == 0 else 4, 4), pady=5,
|
padx=(8 if col == 0 else 4, 4), pady=5,
|
||||||
sticky="ew" if col == 0 else "")
|
sticky="ew" if col == 0 else "")
|
||||||
|
# Spacer compensates for CTkScrollableFrame's internal scrollbar width
|
||||||
|
# so the header columns line up with the data rows below.
|
||||||
|
ctk.CTkLabel(col_hdr, text="", width=16).grid(row=0, column=5, padx=0)
|
||||||
|
|
||||||
# Scrollable rows
|
# Scrollable rows
|
||||||
scroll = ctk.CTkScrollableFrame(tab_frame)
|
scroll = ctk.CTkScrollableFrame(tab_frame)
|
||||||
@@ -239,23 +242,23 @@ class ModsView(BaseView):
|
|||||||
row.columnconfigure(0, weight=1)
|
row.columnconfigure(0, weight=1)
|
||||||
|
|
||||||
# Mod name
|
# Mod name
|
||||||
name_lbl = ctk.CTkLabel(row, text=f" {mod['name']}", anchor="w")
|
name_lbl = ctk.CTkLabel(row, text=mod["name"], anchor="w")
|
||||||
name_lbl.grid(row=0, column=0, sticky="ew", padx=4, pady=3)
|
name_lbl.grid(row=0, column=0, sticky="ew", padx=(8, 4), pady=3)
|
||||||
|
|
||||||
# Downloaded
|
# Downloaded
|
||||||
ctk.CTkLabel(
|
ctk.CTkLabel(
|
||||||
row,
|
row,
|
||||||
text=" ✓" if downloaded else " ✗",
|
text="✓" if downloaded else "✗",
|
||||||
text_color=COLOR_OK if downloaded else COLOR_ERROR,
|
text_color=COLOR_OK if downloaded else COLOR_ERROR,
|
||||||
width=80, anchor="w",
|
width=80, anchor="center",
|
||||||
).grid(row=0, column=1, padx=4)
|
).grid(row=0, column=1, padx=4)
|
||||||
|
|
||||||
# Linked
|
# Linked
|
||||||
ctk.CTkLabel(
|
ctk.CTkLabel(
|
||||||
row,
|
row,
|
||||||
text=" ✓" if linked else (" —" if not downloaded else " ✗"),
|
text="✓" if linked else ("—" if not downloaded else "✗"),
|
||||||
text_color=COLOR_OK if linked else "gray",
|
text_color=COLOR_OK if linked else "gray",
|
||||||
width=80, anchor="w",
|
width=80, anchor="center",
|
||||||
).grid(row=0, column=2, padx=4)
|
).grid(row=0, column=2, padx=4)
|
||||||
|
|
||||||
# Server status
|
# Server status
|
||||||
@@ -267,7 +270,7 @@ class ModsView(BaseView):
|
|||||||
# Update button (hidden until stale detected)
|
# Update button (hidden until stale detected)
|
||||||
folder_name = folder_path.name if folder_path else None
|
folder_name = folder_path.name if folder_path else None
|
||||||
update_btn = ctk.CTkButton(
|
update_btn = ctk.CTkButton(
|
||||||
row, text=t("mods.update_btn"), width=70,
|
row, text=t("mods.update_btn"), width=80,
|
||||||
command=(lambda g=group, fn=folder_name:
|
command=(lambda g=group, fn=folder_name:
|
||||||
self._update_mod(g, fn)) if folder_name else None,
|
self._update_mod(g, fn)) if folder_name else None,
|
||||||
state="normal" if folder_name else "disabled",
|
state="normal" if folder_name else "disabled",
|
||||||
|
|||||||
Reference in New Issue
Block a user