diff --git a/code/controllers/subsystems/processing/vueui.dm b/code/controllers/subsystems/processing/vueui.dm index 4be05e776d5..e794804658b 100644 --- a/code/controllers/subsystems/processing/vueui.dm +++ b/code/controllers/subsystems/processing/vueui.dm @@ -84,7 +84,7 @@ Byond Vue UI framework's management subsystem */ /datum/controller/subsystem/processing/vueui/proc/check_uis_for_change(var/src_object) for (var/datum/vueui/ui in get_open_uis(src_object)) - ui.check_for_change() + ui.update_status(1) /** * Initiates check for data change of specified object @@ -178,20 +178,24 @@ Byond Vue UI framework's management subsystem * @param new_activeui - Vue component name to be used in ui with new object * @param new_data - initial data for this transfered ui * - * @return 0 if failed, 1 if success + * @return list of transfered uis */ -/datum/controller/subsystem/processing/vueui/proc/transfer_uis(var/old_object, var/new_object, var/new_activeui = null, var/new_data = null) +/datum/controller/subsystem/processing/vueui/proc/transfer_uis(var/old_object, var/new_object, var/new_activeui = null, var/nwidth = 0, var/nheight = 0, var/new_title = null, var/new_data = null) var/old_object_key = SOFTREF(old_object) var/new_object_key = SOFTREF(new_object) + . = list() LAZYINITLIST(open_uis[new_object_key]) for(var/datum/vueui/ui in open_uis[old_object_key]) ui.object = new_object - if(new_activeui) ui.activeui = new_activeui + if(new_activeui) {ui.activeui = new_activeui} + if(new_title) {ui.title = new_title} ui.data = new_data open_uis[old_object_key] -= ui LAZYADD(open_uis[new_object_key], ui) - ui.check_for_change() + ui.resize(nwidth, nheight) + ui.update_status(1) + . += ui if (!LAZYLEN(open_uis[old_object_key])) open_uis -= old_object_key diff --git a/code/modules/modular_computers/computers/modular_computer/core.dm b/code/modules/modular_computers/computers/modular_computer/core.dm index df058dee9b7..d3486fe7e14 100644 --- a/code/modules/modular_computers/computers/modular_computer/core.dm +++ b/code/modules/modular_computers/computers/modular_computer/core.dm @@ -142,9 +142,10 @@ /obj/item/modular_computer/proc/kill_program(var/forced = 0) if(active_program) active_program.kill_program(forced) + src.vueui_transfer(active_program) active_program = null var/mob/user = usr - if(user && istype(user)) + if(user && istype(user) && !forced) ui_interact(user) // Re-open the UI on this computer. It should show the main screen now. update_icon() @@ -161,12 +162,14 @@ return ntnet_global.add_log(text, network_card) /obj/item/modular_computer/proc/shutdown_computer(var/loud = 1) + SSvueui.close_uis(active_program) kill_program(1) for(var/datum/computer_file/program/P in idle_threads) P.kill_program(1) idle_threads.Remove(P) if(loud) visible_message("\The [src] shuts down.") + SSvueui.close_uis(active_program) enabled = 0 update_icon() @@ -189,6 +192,7 @@ idle_threads.Add(active_program) active_program.program_state = PROGRAM_STATE_BACKGROUND // Should close any existing UIs SSnanoui.close_uis(active_program.NM ? active_program.NM : active_program) + src.vueui_transfer(active_program) active_program = null update_icon() if(istype(user)) @@ -214,6 +218,8 @@ active_program = P idle_threads.Remove(P) update_icon() + if(!P.vueui_transfer(src)) + SSvueui.close_uis(src) return if(idle_threads.len >= processor_unit.max_idle_programs+1) @@ -229,6 +235,8 @@ if(P.run_program(user)) active_program = P + if(!P.vueui_transfer(src)) + SSvueui.close_uis(src) update_icon() return 1 diff --git a/code/modules/modular_computers/computers/modular_computer/ui.dm b/code/modules/modular_computers/computers/modular_computer/ui.dm index 4fa8c75e0a4..175bf36a283 100644 --- a/code/modules/modular_computers/computers/modular_computer/ui.dm +++ b/code/modules/modular_computers/computers/modular_computer/ui.dm @@ -1,18 +1,17 @@ -// Operates NanoUI -/obj/item/modular_computer/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) +// 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 0 + return if(!apc_power(0) && !battery_power(0)) if(ui) ui.close() - return 0 + return // If we have an active program switch to it now. if(active_program) - if(ui) // This is the main laptop screen. Since we are switching to program's UI close it for now. - ui.close() active_program.ui_interact(user) return @@ -22,28 +21,36 @@ visible_message("\The [src] beeps three times, it's screen displaying \"DISK ERROR\" warning.") return // No HDD, No HDD files list or no stored files. Something is very broken. - var/datum/computer_file/data/autorun = hard_drive.find_file_by_name("autorun") - - var/list/data = get_header_data() - - var/list/programs = list() - for(var/datum/computer_file/program/P in hard_drive.stored_files) - var/list/program = list() - program["name"] = P.filename - program["desc"] = P.filedesc - program["autorun"] = (istype(autorun) && (autorun.stored_data == P.filename)) ? 1 : 0 - if(P in idle_threads) - program["running"] = 1 - programs.Add(list(program)) - - data["programs"] = programs - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) if (!ui) - ui = new(user, src, ui_key, "laptop_mainscreen.tmpl", "NTOS Main Menu", 400, 500) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() - ui.set_auto_update(1) + 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) + 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) // Handles user's GUI input /obj/item/modular_computer/Topic(href, href_list) @@ -84,7 +91,8 @@ to_chat(user, "Program [P.filename].[P.filetype] with PID [rand(100,999)] has been killed.") if( href_list["PC_runprogram"] ) - return run_program(href_list["PC_runprogram"]) + . = run_program(href_list["PC_runprogram"]) + ui_interact(usr) if( href_list["PC_setautorun"] ) if(!hard_drive) @@ -102,56 +110,57 @@ if(.) update_uis() -// Function used by NanoUI's to obtain data for header. All relevant entries begin with "PC_" -/obj/item/modular_computer/proc/get_header_data() - var/list/data = list() +// 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.. - data["PC_batteryicon"] = "batt_100.gif" + VUEUI_SET_CHECK(data["batteryicon"], "batt_100.gif", ., data) if(60 to 80) - data["PC_batteryicon"] = "batt_80.gif" + VUEUI_SET_CHECK(data["batteryicon"], "batt_80.gif", ., data) if(40 to 60) - data["PC_batteryicon"] = "batt_60.gif" + VUEUI_SET_CHECK(data["batteryicon"], "batt_60.gif", ., data) if(20 to 40) - data["PC_batteryicon"] = "batt_40.gif" + VUEUI_SET_CHECK(data["batteryicon"], "batt_40.gif", ., data) if(5 to 20) - data["PC_batteryicon"] = "batt_20.gif" + VUEUI_SET_CHECK(data["batteryicon"], "batt_20.gif", ., data) else - data["PC_batteryicon"] = "batt_5.gif" - data["PC_batterypercent"] = "[round(battery_module.battery.percent())] %" - data["PC_showbatteryicon"] = 1 + 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["PC_batteryicon"] = "batt_5.gif" - data["PC_batterypercent"] = "N/C" - data["PC_showbatteryicon"] = battery_module ? 1 : 0 + 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) - data["PC_apclinkicon"] = "charging.gif" + VUEUI_SET_CHECK(data["apclinkicon"], "charging.gif", ., data) + else + VUEUI_SET_CHECK(data["apclinkicon"], "", ., data) switch(get_ntnet_status()) if(0) - data["PC_ntneticon"] = "sig_none.gif" + VUEUI_SET_CHECK(data["ntneticon"], "sig_none.gif", ., data) if(1) - data["PC_ntneticon"] = "sig_low.gif" + VUEUI_SET_CHECK(data["ntneticon"], "sig_low.gif", ., data) if(2) - data["PC_ntneticon"] = "sig_high.gif" + VUEUI_SET_CHECK(data["ntneticon"], "sig_high.gif", ., data) if(3) - data["PC_ntneticon"] = "sig_lan.gif" + VUEUI_SET_CHECK(data["ntneticon"], "sig_lan.gif", ., data) + else + VUEUI_SET_CHECK(data["ntneticon"], "", ., data) + LAZYINITLIST(data["programheaders"]) if(idle_threads.len) - var/list/program_headers = list() 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 - program_headers.Add(list(list( - "icon" = P.ui_header - ))) + VUEUI_SET_CHECK(data["programheaders"][P.filename], P.ui_header, ., data) - data["PC_programheaders"] = program_headers - - data["PC_stationtime"] = worldtime2text() - data["PC_hasheader"] = 1 - data["PC_showexitprogram"] = active_program ? 1 : 0 // Hides "Exit Program" button on mainscreen - return data + VUEUI_SET_CHECK(data["showexitprogram"], !!active_program, ., data) // Hides "Exit Program" button on mainscreen diff --git a/code/modules/modular_computers/file_system/program.dm b/code/modules/modular_computers/file_system/program.dm index f9b3f4df495..13be02b74fa 100644 --- a/code/modules/modular_computers/file_system/program.dm +++ b/code/modules/modular_computers/file_system/program.dm @@ -174,7 +174,6 @@ /datum/computer_file/program/proc/get_header_data() if(computer) return computer.get_header_data() - return list() // This is performed on program startup. May be overriden to add extra logic. Remember to include ..() call. Return 1 on success, 0 on failure. // When implementing new program based device, use this to run the program. diff --git a/code/modules/modular_computers/file_system/programs/_program.dm b/code/modules/modular_computers/file_system/programs/_program.dm index 22ebd0aa539..654aa6f7d8d 100644 --- a/code/modules/modular_computers/file_system/programs/_program.dm +++ b/code/modules/modular_computers/file_system/programs/_program.dm @@ -1,5 +1,5 @@ /obj/item/modular_computer/initial_data() - return get_header_data() + return list("_PC" = get_header_data()) /obj/item/modular_computer/update_layout() return TRUE diff --git a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm index 18ec9b8df37..409f599de75 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/dos.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/dos.dm @@ -48,7 +48,7 @@ var/list/data = list() if(!istype(PRG)) return - data = PRG.get_header_data() + data = list("_PC" = PRG.get_header_data()) if(PRG.error) data["error"] = PRG.error diff --git a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm index dabb1a186bd..15649281210 100644 --- a/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm +++ b/code/modules/modular_computers/file_system/programs/antagonist/revelation.dm @@ -63,7 +63,7 @@ if(!istype(PRG)) return - data = PRG.get_header_data() + data = list("_PC" = PRG.get_header_data()) data["armed"] = PRG.armed diff --git a/code/modules/modular_computers/file_system/programs/generic/news_browser.dm b/code/modules/modular_computers/file_system/programs/generic/news_browser.dm index 2e2476055f4..c2444b3dfc7 100644 --- a/code/modules/modular_computers/file_system/programs/generic/news_browser.dm +++ b/code/modules/modular_computers/file_system/programs/generic/news_browser.dm @@ -93,7 +93,7 @@ var/datum/computer_file/program/newsbrowser/PRG var/list/data = list() if(program) - data = program.get_header_data() + data = list("_PC" = program.get_header_data()) PRG = program else return diff --git a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm index 59f73599697..2989a16af4b 100644 --- a/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm +++ b/code/modules/modular_computers/file_system/programs/generic/ntnrc_client.dm @@ -188,7 +188,7 @@ var/list/data = list() if(program) - data = program.get_header_data() + data = list("_PC" = program.get_header_data()) var/datum/computer_file/program/chatclient/C = program if(!istype(C)) diff --git a/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm b/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm index 01c071a4455..1455d24f9ce 100644 --- a/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm +++ b/code/modules/modular_computers/file_system/programs/generic/nttransfer.dm @@ -98,7 +98,7 @@ var/global/nttransfer_uid = 0 if(!istype(PRG)) return - var/list/data = program.get_header_data() + var/list/data = list("_PC" = program.get_header_data()) if(PRG.error) data["error"] = PRG.error diff --git a/code/modules/modular_computers/file_system/programs/system/client_manager.dm b/code/modules/modular_computers/file_system/programs/system/client_manager.dm index 1623ab4c8ec..79d824857bd 100644 --- a/code/modules/modular_computers/file_system/programs/system/client_manager.dm +++ b/code/modules/modular_computers/file_system/programs/system/client_manager.dm @@ -13,11 +13,81 @@ size = 4 available_on_ntnet = 0 requires_ntnet = 0 - nanomodule_path = /datum/nano_module/program/clientmanager/ - var/_dev_type = 1 //1 - Company Device ,2 - Private device - var/_dev_preset = "civilian" - var/_error_message = null +/datum/computer_file/program/clientmanager/ui_interact(mob/user) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) + if (!ui) + ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-system-manager", 575, 700, "NTOS Client Manager") + ui.open() + +/datum/computer_file/program/clientmanager/vueui_transfer(oldobj) + SSvueui.transfer_uis(oldobj, src, "mcomputer-system-manager", 575, 700, "NTOS Client Manager") + return TRUE + +// Gaters data for ui +/datum/computer_file/program/clientmanager/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 + if(!computer) + return + VUEUI_SET_CHECK_IFNOTSET(data["device_type"], 0, ., data) + VUEUI_SET_CHECK_IFNOTSET(data["device_preset"], "", ., data) + + VUEUI_SET_CHECK(data["enrollment_status"], computer.enrolled, ., data) + VUEUI_SET_CHECK(data["ntnet_status"], ntnet_global.check_function(NTNET_SOFTWAREDOWNLOAD), ., data) + + LAZYINITLIST(data["presets"]) + for (var/datum/modular_computer_app_presets/p in ntnet_global.available_software_presets) + if(p.available) + LAZYINITLIST(data["presets"][p.name]) + VUEUI_SET_CHECK(data["presets"][p.name]["name"], p.display_name, ., data) + VUEUI_SET_CHECK(data["presets"][p.name]["description"], p.description, ., data) + + +/datum/computer_file/program/clientmanager/Topic(href, href_list) + if(..()) + return 1 + + if(href_list["enroll"]) + if(ntnet_global.check_function(NTNET_SOFTWAREDOWNLOAD)) + if(href_list["enroll"]["type"] == 1) + enroll_company_device(href_list["enroll"]["preset"]) + return 1 + if(href_list["enroll"]["type"] == 2) + enroll_private_device() + return 1 + return 0 + +//Set´s up the computer with the file manager and the downloader and removes the lock +/datum/computer_file/program/clientmanager/proc/enroll_private_device() + if(!computer) + return 0 + computer.enrolled = 2 // private devices + computer.hard_drive.store_file(new /datum/computer_file/program/filemanager()) + computer.hard_drive.store_file(new /datum/computer_file/program/ntnetdownload()) + return 1 + +//Set´s up the programs from the preset +/datum/computer_file/program/clientmanager/proc/enroll_company_device(var/preset) + if(!computer) + return 0 + + for (var/datum/modular_computer_app_presets/prs in ntnet_global.available_software_presets) + if(prs.name == preset && prs.available == 1) + var/list/prs_programs = prs.return_install_programs() + for (var/datum/computer_file/program/prog in prs_programs) + computer.hard_drive.store_file(prog) + computer.enrolled = 1 // enroll as company device after finding matching preset and storing software + return 1 + return 0 + + +/* /datum/nano_module/program/clientmanager name = "NTOS Client Manager" var/obj/item/modular_computer/movable = null @@ -48,35 +118,15 @@ _error_message = "NTNET unavailable. Unable to enroll device" return 0 -//Set´s up the computer with the file manager and the downloader and removes the lock -/datum/computer_file/program/clientmanager/proc/enroll_private_device() - if(!computer) - return 0 - computer.enrolled = 2 // private devices - computer.hard_drive.store_file(new/datum/computer_file/program/filemanager()) - computer.hard_drive.store_file(new/datum/computer_file/program/ntnetdownload()) - return 1 -//Set´s up the programs from the preset -/datum/computer_file/program/clientmanager/proc/enroll_company_device() - if(!computer || !_dev_type || !_dev_preset) - return 0 - for (var/datum/modular_computer_app_presets/prs in ntnet_global.available_software_presets) - if(prs.name == _dev_preset && prs.available == 1) - var/list/prs_programs = prs.return_install_programs() - for (var/datum/computer_file/program/prog in prs_programs) - computer.hard_drive.store_file(prog) - computer.enrolled = 1 // enroll as company device after finding matching preset and storing software - return 1 - return 0 /datum/nano_module/program/clientmanager/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) var/list/data = list() if(program) movable = program.computer - data = program.get_header_data() + data = list("_PC" = program.get_header_data()) if(!istype(movable)) movable = null @@ -112,3 +162,4 @@ ui.auto_update_layout = 1 ui.set_initial_data(data) ui.open() +*/ \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/system/configurator.dm b/code/modules/modular_computers/file_system/programs/system/configurator.dm index 69f2a13c26c..8247febc171 100644 --- a/code/modules/modular_computers/file_system/programs/system/configurator.dm +++ b/code/modules/modular_computers/file_system/programs/system/configurator.dm @@ -13,51 +13,43 @@ size = 4 available_on_ntnet = 0 requires_ntnet = 0 - nanomodule_path = /datum/nano_module/program/computer_configurator/ -/datum/nano_module/program/computer_configurator - name = "NTOS Computer Configuration Tool" - var/obj/item/modular_computer/movable = null - -/datum/nano_module/program/computer_configurator/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) - if(program) - movable = program.computer - if(!istype(movable)) - movable = null - - // No computer connection, we can't get data from that. - if(!movable) - return 0 - - var/list/data = list() - - if(program) - data = program.get_header_data() - - var/list/hardware = movable.get_all_components() - - data["disk_size"] = movable.hard_drive.max_capacity - data["disk_used"] = movable.hard_drive.used_capacity - data["power_usage"] = movable.last_power_usage - data["battery_exists"] = movable.battery_module ? 1 : 0 - if(movable.battery_module) - data["battery_rating"] = movable.battery_module.battery.maxcharge - data["battery_percent"] = round(movable.battery_module.battery.percent()) - - var/list/all_entries[0] - for(var/obj/item/weapon/computer_hardware/H in hardware) - all_entries.Add(list(list( - "name" = H.name, - "desc" = H.desc, - "enabled" = H.enabled, - "critical" = H.critical, - "powerusage" = H.power_usage - ))) - - data["hardware"] = all_entries - ui = SSnanoui.try_update_ui(user, src, ui_key, ui, data, force_open) +/datum/computer_file/program/computerconfig/ui_interact(mob/user) + var/datum/vueui/ui = SSvueui.get_open_ui(user, src) if (!ui) - ui = new(user, src, ui_key, "laptop_configuration.tmpl", "NTOS Configuration Utility", 575, 700, state = state) - ui.auto_update_layout = 1 - ui.set_initial_data(data) - ui.open() + ui = new /datum/vueui/modularcomputer(user, src, "mcomputer-system-config", 575, 700, "NTOS Configuration Utility") + ui.open() + +/datum/computer_file/program/computerconfig/vueui_transfer(oldobj) + SSvueui.transfer_uis(oldobj, src, "mcomputer-system-config", 575, 700, "NTOS Configuration Utility") + return TRUE + +// Gaters data for ui +/datum/computer_file/program/computerconfig/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 + + if(!computer) + return + + var/list/hardware = computer.get_all_components() + VUEUI_SET_CHECK(data["disk_size"], computer.hard_drive.max_capacity, ., data) + VUEUI_SET_CHECK(data["disk_used"], computer.hard_drive.used_capacity, ., data) + VUEUI_SET_CHECK(data["power_usage"], computer.last_power_usage, ., data) + if(!computer.battery_module) + VUEUI_SET_CHECK(data["battery"], 0, ., data) + else + LAZYINITLIST(data["battery"]) + VUEUI_SET_CHECK(data["battery"]["rating"], computer.battery_module.battery.maxcharge, ., data) + VUEUI_SET_CHECK(data["battery"]["percent"], round(computer.battery_module.battery.percent()), ., data) + + LAZYINITLIST(data["hardware"]) + for(var/obj/item/weapon/computer_hardware/H in hardware) + LAZYINITLIST(data["hardware"][H.name]) + for(var/v in list("name", "desc", "enabled", "critical", "power_usage")) + VUEUI_SET_CHECK(data["hardware"][H.name][v], H.vars[v], ., data) \ No newline at end of file diff --git a/code/modules/modular_computers/file_system/programs/system/file_browser.dm b/code/modules/modular_computers/file_system/programs/system/file_browser.dm index 6fda0a724ae..f73c8496f81 100644 --- a/code/modules/modular_computers/file_system/programs/system/file_browser.dm +++ b/code/modules/modular_computers/file_system/programs/system/file_browser.dm @@ -183,7 +183,7 @@ /datum/nano_module/program/computer_filemanager/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1, var/datum/topic_state/state = default_state) var/list/data = host.initial_data() var/datum/computer_file/program/filemanager/PRG - //var/list/data = program.get_header_data() + //var/list/data = list("_PC" = program.get_header_data()) PRG = program var/obj/item/weapon/computer_hardware/hard_drive/HDD diff --git a/code/modules/modular_computers/file_system/programs/system/ntdownloader.dm b/code/modules/modular_computers/file_system/programs/system/ntdownloader.dm index 52b4a7c2db2..26f09a61a22 100644 --- a/code/modules/modular_computers/file_system/programs/system/ntdownloader.dm +++ b/code/modules/modular_computers/file_system/programs/system/ntdownloader.dm @@ -153,7 +153,7 @@ if(!prog || !istype(prog)) return if(program) - data = program.get_header_data() + data = list("_PC" = program.get_header_data()) // This IF cuts on data transferred to client, so i guess it's worth it. if(prog.downloaderror) // Download errored. Wait until user resets the program. diff --git a/code/modules/vueui/external.dm b/code/modules/vueui/external.dm index d03accb8cf0..51b364842ef 100644 --- a/code/modules/vueui/external.dm +++ b/code/modules/vueui/external.dm @@ -11,18 +11,29 @@ /** * Alert UI host of data change made by Ui and gather initial data * - * @param newdata - a list containing current ui data, null obtaining initial data + * @param data - a list containing current ui data, null obtaining initial data * @param user - mob that has opened ui and get this data shown * @param ui - that is alerting of change / requesting initial data * * @return list containing changed data, null if data wasn't changed by host */ -/datum/proc/vueui_data_change(var/list/newdata, var/mob/user, var/datum/vueui/ui) +/datum/proc/vueui_data_change(var/list/data, var/mob/user, var/datum/vueui/ui) . = null var/datum/vueui_var_monitor/VM = SSvueui.get_var_monitor(src) if (VM) - LAZYINITLIST(newdata) - . = VM.update_data(src, newdata.Copy(), user, ui) + LAZYINITLIST(data) + . = VM.update_data(src, data.Copy(), user, ui) + +/** + * If some object wants to trasnfer it's uis to us, then we have to implemnt this proc to make transfer sucessfull + * It is recommended to use `SSvueui.transfer_uis` to perform ui transfer + * + * @param srcObject - Object that wanted to give away it's uis + * + * @return 0 if failed, 1 if success + */ +/datum/proc/vueui_transfer(var/srcObject) + return FALSE /mob/var/list/open_vueui_uis diff --git a/code/modules/vueui/ui.dm b/code/modules/vueui/ui.dm index c875462a09f..a92b1e3a0e4 100644 --- a/code/modules/vueui/ui.dm +++ b/code/modules/vueui/ui.dm @@ -30,7 +30,6 @@ main ui datum. // determines if ui state should be constantly be cheacked for updates var/auto_update_content = FALSE - /** * Creates a new ui * @@ -103,6 +102,19 @@ main ui datum. user << browse(null, "window=[windowid]") status = null +/** + * Resizes UI + * + * @param nwidth - width of this ui + * @param nheight - height of this ui + * + * @return nothing + */ +/datum/vueui/proc/resize(var/nwidth, var/nheight) + width = nwidth || width + height = nheight || height + winset(user, windowid, "size=[width]x[height];") + /** * Generates base html for this ui to be rendered. * @@ -252,6 +264,7 @@ main ui datum. href_list["vueui"] = src // Let's pass our UI object to object for it to do things. topicReturn = object.Topic(href, href_list) if(. || topicReturn) + if(topicReturn) check_for_change(FALSE, TRUE) . = null push_change() @@ -271,47 +284,62 @@ main ui datum. * Check for change and push that change of data * * @param force - determines should data be pushed even if no change is present + * @param nopush - determines new data be imediatly pushed. * - * @return nothing + * @return 1 if push happened, 0 if it didn't happen */ -/datum/vueui/proc/check_for_change(var/force = 0) +/datum/vueui/proc/check_for_change(var/force = FALSE, var/nopush = FALSE) + . = 0 if(!user.client) return if(status > STATUS_DISABLED) var/ret = object.vueui_data_change(data, user, src) if(ret) - push_change(ret) + if(!nopush) + push_change(ret) + else + src.data = ret + return 1 else if (force) - push_change(null) + if(!nopush) push_change(null) + return 1 else if (force && status == STATUS_DISABLED) - push_change(null) + if(!nopush) push_change(null) + return 1 /** * Set the current status (also known as visibility) of this ui. * - * @param state int The status to set, see the defines at the top of this file + * @param state - int The status to set, see the defines at the top of this file + * @param autopush - determines if data with new status should be automaticly pushed + * @param checkforchange - determines if check for change should be done, even if status didn't chnage. * - * @return nothing + * @return 1 if push should happen, 0 if shouldn't happen. */ -/datum/vueui/proc/set_status(var/nstatus, var/autopush = TRUE) +/datum/vueui/proc/set_status(var/nstatus, var/autopush = TRUE, var/checkforchange = FALSE) if (nstatus != status) // Only update if it is different status = nstatus if(nstatus > STATUS_DISABLED) - if(autopush) check_for_change(1) // Gather data and update it - return 1 + return check_for_change(TRUE, !autopush) // Gather data and update it else if (nstatus == STATUS_DISABLED && autopush) if(autopush) push_change(null) // Only update ui data return 1 else close() + else if (status > STATUS_DISABLED && checkforchange) + return check_for_change(TRUE, !autopush) + /** * Update the status (visibility) of this ui based on the user's status * + * @param autopush - determines if data with new status should be automaticly pushed + * @param checkforchange - determines if check for change should be done, even if status didn't chnage. + * * @return nothing */ -/datum/vueui/proc/update_status(var/autopush = TRUE) - . = set_status(object.CanUseTopic(user, state), autopush) +/datum/vueui/proc/update_status(var/autopush = TRUE, var/checkforchange = FALSE) + . = set_status(object.CanUseTopic(user, state), autopush, checkforchange) /** * Process this ui @@ -322,9 +350,10 @@ main ui datum. if (!object || !user || status < 0 || !user.client) close() return - update_status() if(auto_update_content) - check_for_change() + update_status(checkforchange = TRUE) + else + update_status() /** * Returns actuve theme on varous conditions @@ -334,4 +363,8 @@ main ui datum. /datum/vueui/proc/get_theme_class() return SStheming.get_html_theme_class(user) -#undef UIDEBUG +/datum/vueui/modularcomputer + header = "modular-computer" + +/datum/vueui/modularcomputer/get_theme_class() + return "theme-nano dark-theme" \ No newline at end of file diff --git a/html/changelogs/vueuicomputers.yml b/html/changelogs/vueuicomputers.yml new file mode 100644 index 00000000000..8174444d588 --- /dev/null +++ b/html/changelogs/vueuicomputers.yml @@ -0,0 +1,7 @@ +author: Karolis2011 +delete-after: True +changes: + - refactor: "Computers now support both UI systems." + - rscadd: "Ported main computer screen to VueUI." + - rscadd: "Ported computer configurator to VueUI." + - rscadd: "Ported computer management to VueUI." diff --git a/nano/templates/laptop_configuration.tmpl b/nano/templates/laptop_configuration.tmpl deleted file mode 100644 index 69af3bd6c0f..00000000000 --- a/nano/templates/laptop_configuration.tmpl +++ /dev/null @@ -1,70 +0,0 @@ -Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device.
| {{:helper.link(value.desc, null, {'PC_runprogram' : value.name})}} - | {{:helper.link('X', null, {'PC_killprogram' : value.name}, (value.running ? null : 'disabled'))}} -{{/for}} - |
| {{:data.PC_batterypercent}} + {{if data._PC.batterypercent && data._PC.showbatteryicon}} + | {{:data._PC.batterypercent}} {{/if}} - {{if data.PC_ntneticon}} - | {{:data.PC_stationtime}} + {{if data._PC.stationtime}} + | {{:data._PC.stationtime}} {{/if}} - {{for data.PC_programheaders}} - |
| {{:helper.link('Shutdown', null, {'PC_shutdown' : 1})}} - {{if data.PC_showexitprogram}} + {{if data._PC.showexitprogram}} | {{:helper.link('Exit Program', null, {'PC_exit' : 1})}} | {{:helper.link('Minimize Program', null, {'PC_minimize' : 1})}}
{{/if}}
diff --git a/vueui/src/assets/theme-nano.scss b/vueui/src/assets/theme-nano.scss
index 2f78dc2021d..0018a0c2d42 100644
--- a/vueui/src/assets/theme-nano.scss
+++ b/vueui/src/assets/theme-nano.scss
@@ -132,8 +132,10 @@
.uiTitleWrapper {
background: url(resources/theme-nano/uiTitleBackground.png) repeat center;
- color: #E9C183;
box-shadow: 0px 0px 8px 4px rgba(0,0,0,0.5);
+ .uiTitleText {
+ color: #E9C183;
+ }
}
.uiTitleFluff {
@@ -205,7 +207,9 @@
}
.uiTitleWrapper {
background: url(resources/theme-nano/uiTitleBackground-light.png) repeat center;
- color: #4C401C
+ .uiTitleText {
+ color: #4C401C;
+ }
}
.uiTitleFluff {
background: url(resources/theme-nano/uiTitleFluff-light.png) 50% 50% no-repeat;
diff --git a/vueui/src/components/header/default.vue b/vueui/src/components/header/default.vue
index 000603dde01..22ce5f20205 100644
--- a/vueui/src/components/header/default.vue
+++ b/vueui/src/components/header/default.vue
@@ -1,9 +1,11 @@
{{ title }}
-
+
+
+
{{ title }}
+
+
+
+
+
+
+ Welcome to computer configuration utility. Please consult your system administrator if you have any questions about your device.
+
+
+
\ No newline at end of file
diff --git a/vueui/src/components/view/mcomputer/system/main.vue b/vueui/src/components/view/mcomputer/system/main.vue
new file mode 100644
index 00000000000..de28919d05d
--- /dev/null
+++ b/vueui/src/components/view/mcomputer/system/main.vue
@@ -0,0 +1,17 @@
+
+ + Power Supply+File System+Computer Components+
+
+ NTOS v2.0.4b Copyright NanoTrasen 2557 - 2559
+ {{name}}+
+ No program loaded. Please select program from list below.
+
+
+
+
\ No newline at end of file
diff --git a/vueui/src/components/view/mcomputer/system/manager.vue b/vueui/src/components/view/mcomputer/system/manager.vue
new file mode 100644
index 00000000000..d45d17de9b2
--- /dev/null
+++ b/vueui/src/components/view/mcomputer/system/manager.vue
@@ -0,0 +1,44 @@
+
+
+
+
+ Welcome to NT IT client manager
+
+
+
\ No newline at end of file
diff --git a/vueui/src/components/vui/progress.vue b/vueui/src/components/vui/progress.vue
index acae5e53b54..7c279319db7 100644
--- a/vueui/src/components/vui/progress.vue
+++ b/vueui/src/components/vui/progress.vue
@@ -1,6 +1,6 @@
+ This is the Client Management Application of the Nanotrasen IT Department. It is used ensure that the clients comply with the corporate IT policy, enroll new clients and manage clients remotely
+ + Status+Device Enrollment+NTNET unavailable. Unable to enroll device.
+
-
+
@@ -27,4 +27,16 @@ export default {
}
}
}
-
\ No newline at end of file
+
+
+
|