mirror of
https://github.com/Citadel-Station-13/Citadel-Station-13-RP.git
synced 2026-08-18 13:16:38 +01:00
52 lines
1.5 KiB
Plaintext
52 lines
1.5 KiB
Plaintext
//* This file is explicitly licensed under the MIT license. *//
|
|
//* Copyright (c) 2025 Citadel Station Developers *//
|
|
|
|
//* Panel *//
|
|
|
|
/**
|
|
* Base type of admin panels, which tend to be standalone panels.
|
|
* * Unlike `/datum/admin_modal`, panels aren't deleted on close, and are more stateful long-term things.
|
|
*/
|
|
VV_PROTECT_READONLY(/datum/admin_panel)
|
|
/datum/admin_panel
|
|
/// Our name, for UI / output purposes
|
|
var/name = "Unknown Panel"
|
|
/// The admin datum we belong to
|
|
var/datum/admins/owner
|
|
/// TGUI ID; this will always be loaded from `tgui/interfaces/admin_panel` if possible.
|
|
var/tgui_interface
|
|
|
|
/datum/admin_panel/New(datum/admins/for_owner)
|
|
owner = for_owner
|
|
LAZYSET(owner.admin_panels, type, src)
|
|
|
|
/datum/admin_panel/Destroy()
|
|
LAZYREMOVE(owner.admin_panels, type)
|
|
return ..()
|
|
|
|
/datum/admin_panel/ui_interact(mob/user, datum/tgui/ui, datum/tgui/parent_ui)
|
|
ui = SStgui.try_update_ui(user, src, ui)
|
|
if(!ui)
|
|
ui = new(user, src, "admin_panel/[tgui_interface]")
|
|
ui.open()
|
|
|
|
/datum/admin_panel/ui_state()
|
|
return GLOB.ui_admin_panel_state
|
|
|
|
/**
|
|
* Just a wrapper for opening our UI. Ensures everything is initialized.
|
|
*/
|
|
/datum/admin_panel/proc/open()
|
|
if(!owner?.owner?.mob)
|
|
return
|
|
ui_interact(owner.owner.mob)
|
|
|
|
/**
|
|
* Call to complain about a failure in doing something.
|
|
*
|
|
* * Failures should generally be done UI-side, this is for when something is seriously wrong.
|
|
*/
|
|
/datum/admin_panel/proc/loud_rejection(message)
|
|
// todo: make this fancier
|
|
to_chat(owner.owner, "<font color='red'><b>[name]</b>: [message]</font>")
|