Files
vgstation13/code/modules/nano/nanoexternal.dm
Pieter-Jan Briers 63cd55a08d NanoUI object focus improvement. (#16395)
Previously if you clicked on an object and you already had the NanoUI open, two things could happen:
* The UI only updates
* The UI reopens with a white BYOND flash.

The latter did always move it to the foreground, but the flash and UI moving was pretty ugly.
The former only updates the UI, so if you had multiple stacked windows open it gets kinda annoying.

With this change, all UIs always do the former, and the UI for an object always moves to the front when you interact with said object.
2017-11-01 08:22:11 +01:00

49 lines
1.8 KiB
Plaintext

// This file contains all Nano procs/definitions for external classes/objects
/**
* Called when a Nano UI window is closed
* This is how Nano handles closed windows
* It must be a verb so that it can be called using winset
*
* @return nothing
*/
/client/verb/nanoclose(var/uiref as text)
set hidden = 1 // hide this verb from the user's panel
set name = "nanoclose"
var/datum/nanoui/ui = locate(uiref)
if (istype(ui))
ui.close()
if(ui.ref)
var/href = "close=1"
src.Topic(href, params2list(href), ui.ref) // this will direct to the atom's Topic() proc via client.Topic()
else if(ui.src_object)
var/href = "close=1"
src.Topic(href, params2list(href), ui.src_object) // this will direct to the atom's Topic() proc via client.Topic()
else if (ui.on_close_logic)
// no atomref specified (or not found)
// so just reset the user mob's machine var
if(src && src.mob)
src.mob.unset_machine()
/**
* The ui_interact proc is used to open and update Nano UIs
* If ui_interact is not used then the UI will not update correctly
* ui_interact is currently defined for /atom/movable
*
* @param user /mob The mob who is interacting with this ui
* @param ui_key string A string key to use for this ui. Allows for multiple unique uis on one obj/mob (defaut value "main")
* @param ui /datum/nanoui This parameter is passed by the nanoui process() proc when updating an open ui
* @param force_open boolean Force the UI to (re)open, even if it's already open
*
* @return nothing
*/
/datum/proc/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = NANOUI_FOCUS)
return
// Used by the Nano UI Manager (/datum/nanomanager) to track UIs opened by this mob
/client/var/list/open_uis = list()
/mob/var/list/open_uis = list()