Files
Aurora.3/code/modules/modular_computers/computers/modular_computer/ui.dm
JohnWildkins 616776f886 Modular PDAs: The End of an Era (#10319)
PDAs are dead, long live PDAs. All trace of old PDAs has been scoured from the codebase, and in its place are modular computer PDAs that are feature-equivalent. Essentially every PDA function except the Syndicate detonation feature and Notepad has been ported over, and battery life for handheld computers has been boosted alongside the addition of charging cables to make things easier.
2020-11-01 21:09:50 +02:00

174 lines
5.9 KiB
Plaintext

// Opens VueUI
/obj/item/modular_computer/ui_interact(mob/user)
var/datum/vueui/ui = SSvueui.get_open_ui(user, src)
if(!screen_on || !enabled)
if(ui)
ui.close()
return
if(!computer_use_power())
if(ui)
ui.close()
return
// If we have an active program switch to it now.
if(active_program)
active_program.ui_interact(user)
return
// We are still here, that means there is no program loaded. Load the BIOS/ROM/OS/whatever you want to call it.
// This screen simply lists available programs and user may select them.
if(!hard_drive || !hard_drive.stored_files || !hard_drive.stored_files.len)
audible_message(SPAN_WARNING("\The [src] beeps three times, its screen displaying, \"DISK ERROR!\"."))
return // No HDD, No HDD files list or no stored files. Something is very broken.
if(!ui)
ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-system-main", 400, 500, "NTOS Main Menu")
ui.header = "modular-computer"
ui.open()
/obj/item/modular_computer/vueui_transfer(oldobj)
. = FALSE
var/uis = SSvueui.transfer_uis(oldobj, src, "mcomputer-system-main", 400, 500, "NTOS Main Menu")
for(var/tui in uis)
var/datum/vueui/ui = tui
ui.auto_update_content = FALSE
. = TRUE
// Gaters data for ui
/obj/item/modular_computer/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui)
. = ..()
data = . || data || list()
// Gather data for computer header
var/headerdata = get_header_data(data["_PC"])
if(headerdata)
data["_PC"] = headerdata
. = data
var/datum/computer_file/data/autorun = hard_drive.find_file_by_name("autorun")
VUEUI_SET_CHECK_IFNOTSET(data["programs"], list(), ., data)
for(var/datum/computer_file/program/P in hard_drive.stored_files)
if(P.program_hidden())
continue
VUEUI_SET_CHECK_IFNOTSET(data["programs"][P.filename], list(), ., data)
VUEUI_SET_CHECK(data["programs"][P.filename]["desc"], P.filedesc, ., data)
VUEUI_SET_CHECK(data["programs"][P.filename]["autorun"], (istype(autorun) && (autorun.stored_data == P.filename)), ., data)
VUEUI_SET_CHECK(data["programs"][P.filename]["running"], (P in idle_threads), ., data)
VUEUI_SET_CHECK(data["programs"][P.filename]["type"], P.program_type, ., data)
VUEUI_SET_CHECK_IFNOTSET(data["programs"][P.filename]["service"], list(), ., data)
VUEUI_SET_CHECK(data["programs"][P.filename]["service"]["enabled"], (P in enabled_services), ., data)
VUEUI_SET_CHECK(data["programs"][P.filename]["service"]["online"], (P.service_state == PROGRAM_STATE_ACTIVE), ., data)
// Handles user's GUI input
/obj/item/modular_computer/Topic(href, href_list)
if(..())
return TRUE
if(href_list["PC_exit"])
kill_program()
return TRUE
if(href_list["PC_enable_component"])
var/obj/item/computer_hardware/H = find_hardware_by_name(href_list["PC_enable_component"])
if(H && istype(H) && !H.enabled)
H.enabled = TRUE
. = TRUE
if(href_list["PC_disable_component"])
var/obj/item/computer_hardware/H = find_hardware_by_name(href_list["PC_disable_component"])
if(H && istype(H) && H.enabled)
H.enabled = 0
. = TRUE
if(href_list["PC_shutdown"])
shutdown_computer()
return TRUE
if(href_list["PC_minimize"])
var/mob/user = usr
minimize_program(user)
if(href_list["PC_killprogram"])
var/prog = href_list["PC_killprogram"]
var/datum/computer_file/program/P
var/mob/user = usr
if(hard_drive)
P = hard_drive.find_file_by_name(prog)
if(!istype(P) || P.program_state == PROGRAM_STATE_KILLED)
return
if(P.kill_program())
to_chat(user, SPAN_NOTICE("Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed."))
update_uis()
if(href_list["PC_runprogram"] )
. = run_program(href_list["PC_runprogram"], usr)
ui_interact(usr)
if(href_list["PC_setautorun"])
if(!hard_drive)
return
set_autorun(href_list["PC_setautorun"])
if(href_list["PC_register"])
if(registered_id)
unregister_account()
else if(GetID())
register_account()
if( href_list["PC_toggleservice"] )
toggle_service(href_list["PC_toggleservice"], usr)
return 1
if(.)
update_uis()
// Function used to obtain data for header. All relevant entries begin with "PC_"
/obj/item/modular_computer/proc/get_header_data(data)
if(!data)
data = list()
if(battery_module)
switch(battery_module.battery.percent())
if(80 to 200) // 100 should be maximal but just in case..
VUEUI_SET_CHECK(data["batteryicon"], "batt_100.gif", ., data)
if(60 to 80)
VUEUI_SET_CHECK(data["batteryicon"], "batt_80.gif", ., data)
if(40 to 60)
VUEUI_SET_CHECK(data["batteryicon"], "batt_60.gif", ., data)
if(20 to 40)
VUEUI_SET_CHECK(data["batteryicon"], "batt_40.gif", ., data)
if(5 to 20)
VUEUI_SET_CHECK(data["batteryicon"], "batt_20.gif", ., data)
else
VUEUI_SET_CHECK(data["batteryicon"], "batt_5.gif", ., data)
VUEUI_SET_CHECK(data["batterypercent"], "[round(battery_module.battery.percent())] %", ., data)
data["showbatteryicon"] = 1
else
data["batteryicon"] = "batt_5.gif"
VUEUI_SET_CHECK(data["batterypercent"], "N/C", ., data)
data["showbatteryicon"] = battery_module ? 1 : 0
if(tesla_link && tesla_link.enabled && apc_powered)
VUEUI_SET_CHECK(data["apclinkicon"], "charging.gif", ., data)
else
VUEUI_SET_CHECK(data["apclinkicon"], "", ., data)
switch(get_ntnet_status())
if(0)
VUEUI_SET_CHECK(data["ntneticon"], "sig_none.gif", ., data)
if(1)
VUEUI_SET_CHECK(data["ntneticon"], "sig_low.gif", ., data)
if(2)
VUEUI_SET_CHECK(data["ntneticon"], "sig_high.gif", ., data)
if(3)
VUEUI_SET_CHECK(data["ntneticon"], "sig_lan.gif", ., data)
else
VUEUI_SET_CHECK(data["ntneticon"], "", ., data)
LAZYINITLIST(data["programheaders"])
if(idle_threads.len)
for(var/datum/computer_file/program/P in idle_threads)
if(!P.ui_header)
if(data["programheaders"][P.filename])
data["programheaders"][P.filename] = null
. = data
continue
VUEUI_SET_CHECK(data["programheaders"][P.filename], P.ui_header, ., data)
VUEUI_SET_CHECK(data["showexitprogram"], !!active_program, ., data) // Hides "Exit Program" button on mainscreen