From aa206048269a8c7c214668e032c94cf97d0583df Mon Sep 17 00:00:00 2001 From: Fluffy <65877598+FluffyGhoster@users.noreply.github.com> Date: Tue, 30 Jul 2024 00:49:41 +0200 Subject: [PATCH] Extended list viewer now has an edit button (#19706) Extended list viewer now has an edit button, and the ability to edit the extended list it's seeing; it's also (opinionately) better formatted. --- code/modules/admin/verbs/viewlist.dm | 69 +++++++++++++++++-- code/modules/admin/view_variables/topic.dm | 2 +- .../admin/view_variables/view_variables.dm | 10 +-- .../fluffyghost-empowerextendedlistviewer.yml | 58 ++++++++++++++++ tgui/packages/tgui/interfaces/ListViewer.tsx | 34 +++++++-- 5 files changed, 155 insertions(+), 18 deletions(-) create mode 100644 html/changelogs/fluffyghost-empowerextendedlistviewer.yml diff --git a/code/modules/admin/verbs/viewlist.dm b/code/modules/admin/verbs/viewlist.dm index a0a068b9197..275e12c6ef7 100644 --- a/code/modules/admin/verbs/viewlist.dm +++ b/code/modules/admin/verbs/viewlist.dm @@ -1,18 +1,32 @@ -/client/proc/view_extended_list(var/list/L) - if(!check_rights(R_VAREDIT|R_DEV)) return +/** + * Used to create a tgui Extended List Viewer + * + * Accepts either an associative list or a flat list + * + * If an associative list is passed, the key is a string and the value the datum + */ +/client/proc/view_extended_list(list/L, datum/original_datum) + if(!check_rights(R_VAREDIT|R_DEV)) + return if(istype(L)) - new /datum/tgui_module/list_viewer(L, usr) + new /datum/tgui_module/list_viewer(L, usr, original_datum = original_datum) /datum/tgui_module/list_viewer var/list/viewed_list + var/datum/weakref/original_datum_ref -/datum/tgui_module/list_viewer/New(var/list/L, mob/user) +/datum/tgui_module/list_viewer/New(list/L, mob/user, datum/original_datum) if(istype(L)) viewed_list = L + if(istype(original_datum)) + original_datum_ref = WEAKREF(original_datum) + if(!original_datum_ref) + stack_trace("Unable to create a weakref to the original datum, please report this to a developer") + ui_interact(user) -/datum/tgui_module/list_viewer/ui_interact(mob/user, var/datum/tgui/ui) +/datum/tgui_module/list_viewer/ui_interact(mob/user, datum/tgui/ui) if(!check_rights(R_VAREDIT|R_DEV|R_MOD)) return @@ -41,3 +55,48 @@ index++ return data + +/datum/tgui_module/list_viewer/ui_act(action, list/params, datum/tgui/ui, datum/ui_state/state) + . = ..() + if(.) + return + + if(!check_rights(R_VAREDIT|R_DEV)) + return + + var/client/user_client = ui.user?.client + if(!user_client) + stack_trace("No client found to open entry in, despite having received a request to edit a list, uh oh!") + return + + switch(action) + + if("open_entry") + + var/datum/entry_to_open = null + + if(isnum(text2num(params["open_entry_key"]))) + entry_to_open = viewed_list[text2num(params["open_entry_key"])] + else + entry_to_open = viewed_list[params["open_entry_key"]] + + if(!entry_to_open) + to_chat(usr, "No entry found to open!") + return FALSE + + user_client.debug_variables_open(entry_to_open) + + return TRUE + + if("open_whole_list") + if(tgui_alert(usr, "Opening the whole list in VV might take a long time or cause issues, are you sure?", "Confirm", list("Yes", "No")) != "Yes") + return FALSE + + var/datum/original_datum = original_datum_ref.resolve() + if(!original_datum) + tgui_alert(usr, "Unable to open the list, the original datum has been deleted or has never been set.") + return FALSE + + user_client.mod_list(viewed_list, original_datum) + + return TRUE diff --git a/code/modules/admin/view_variables/topic.dm b/code/modules/admin/view_variables/topic.dm index 9212ecb1c01..3dab1edd738 100644 --- a/code/modules/admin/view_variables/topic.dm +++ b/code/modules/admin/view_variables/topic.dm @@ -67,7 +67,7 @@ to_chat(usr, "This can only be used on instances of type /list") return - view_extended_list(L, href_list["varnameview"]) + view_extended_list(L, locate(href_list["original_datum"])) else if(href_list["mob_player_panel"]) if(!check_rights(0)) return diff --git a/code/modules/admin/view_variables/view_variables.dm b/code/modules/admin/view_variables/view_variables.dm index 3c0db8cb524..274b8e129c8 100644 --- a/code/modules/admin/view_variables/view_variables.dm +++ b/code/modules/admin/view_variables/view_variables.dm @@ -133,7 +133,7 @@ . += x return . -/proc/make_view_variables_value(value, varname = "*") +/proc/make_view_variables_value(datum/D, value, varname = "*") var/vtext = "" var/debug_type = get_debug_type(value, FALSE) var/extra = list() @@ -161,12 +161,12 @@ for (var/index = 1 to L.len) var/entry = L[index] if(!isnum(entry) && !isnull(entry) && !(varname in view_variables_no_assoc) && L[entry] != null) - extra += "