mirror of
https://github.com/CHOMPStation2/CHOMPStation2.git
synced 2025-12-13 03:33:21 +00:00
117 lines
3.4 KiB
Plaintext
117 lines
3.4 KiB
Plaintext
// This is the window/UI manager for Nano UI
|
|
// There should only ever be one (global) instance of nanomanger
|
|
/datum/nanomanager
|
|
// the list of current open /nanoui UIs
|
|
var/open_uis[0]
|
|
var/list/processing_uis = list()
|
|
|
|
/**
|
|
* Create a new nanomanager instance.
|
|
*
|
|
* @return /nanomanager new nanomanager object
|
|
*/
|
|
/datum/nanomanager/New()
|
|
return
|
|
|
|
/**
|
|
* Get an open /nanoui ui for the current user, src_object and ui_key
|
|
*
|
|
* @param user /mob The mob who opened/owns the ui
|
|
* @param src_object /obj|/mob The obj or mob which the ui belongs to
|
|
* @param ui_key string A string key used for the ui
|
|
*
|
|
* @return /nanoui Returns the found ui, for null if none exists
|
|
*/
|
|
/datum/nanomanager/proc/get_open_ui(var/mob/user, src_object, ui_key)
|
|
var/src_object_key = "\ref[src_object]"
|
|
if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
|
return null
|
|
else if (isnull(open_uis[src_object_key][ui_key]) || !istype(open_uis[src_object_key][ui_key], /list))
|
|
return null
|
|
|
|
for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key])
|
|
if (ui.user == user)
|
|
return ui
|
|
|
|
return null
|
|
|
|
/**
|
|
* Update all /nanoui uis attached to src_object
|
|
*
|
|
* @param src_object /obj|/mob The obj or mob which the uis belong to
|
|
*
|
|
* @return int The number of uis updated
|
|
*/
|
|
/datum/nanomanager/proc/update_uis(src_object)
|
|
var/src_object_key = "\ref[src_object]"
|
|
if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
|
return 0
|
|
|
|
var/update_count = 0
|
|
for (var/ui_key in open_uis[src_object_key])
|
|
for (var/datum/nanoui/ui in open_uis[src_object_key][ui_key])
|
|
if(ui && ui.src_object && ui.user)
|
|
ui.process(1)
|
|
update_count++
|
|
return update_count
|
|
|
|
/**
|
|
* Add a /nanoui ui to the list of open uis
|
|
* This is called by the /nanoui open() proc
|
|
*
|
|
* @param ui /nanoui The ui to add
|
|
*
|
|
* @return nothing
|
|
*/
|
|
/datum/nanomanager/proc/ui_opened(var/datum/nanoui/ui)
|
|
var/src_object_key = "\ref[ui.src_object]"
|
|
if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
|
open_uis[src_object_key] = list(ui.ui_key = list())
|
|
else if (isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list))
|
|
open_uis[src_object_key][ui.ui_key] = list();
|
|
|
|
ui.user.open_uis.Add(ui)
|
|
var/list/uis = open_uis[src_object_key][ui.ui_key]
|
|
uis.Add(ui)
|
|
processing_uis.Add(ui)
|
|
|
|
/**
|
|
* Remove a /nanoui ui from the list of open uis
|
|
* This is called by the /nanoui close() proc
|
|
*
|
|
* @param ui /nanoui The ui to remove
|
|
*
|
|
* @return int 0 if no ui was removed, 1 if removed successfully
|
|
*/
|
|
/datum/nanomanager/proc/ui_closed(var/datum/nanoui/ui)
|
|
var/src_object_key = "\ref[ui.src_object]"
|
|
if (isnull(open_uis[src_object_key]) || !istype(open_uis[src_object_key], /list))
|
|
return 0 // wasn't open
|
|
else if (isnull(open_uis[src_object_key][ui.ui_key]) || !istype(open_uis[src_object_key][ui.ui_key], /list))
|
|
return 0 // wasn't open
|
|
|
|
processing_uis.Remove(ui)
|
|
ui.user.open_uis.Remove(ui)
|
|
var/list/uis = open_uis[src_object_key][ui.ui_key]
|
|
return uis.Remove(ui)
|
|
|
|
/**
|
|
* This is called on user logout
|
|
* Closes/clears all uis attached to the user's /mob
|
|
*
|
|
* @param user /mob The user's mob
|
|
*
|
|
* @return nothing
|
|
*/
|
|
|
|
//
|
|
/datum/nanomanager/proc/user_logout(var/mob/user)
|
|
if (isnull(user.open_uis) || !istype(user.open_uis, /list) || open_uis.len == 0)
|
|
return 0 // has no open uis
|
|
|
|
for (var/datum/nanoui/ui in user.open_uis)
|
|
ui.close();
|
|
|
|
|
|
|