diff --git a/code/game/objects/items/devices/radio/radio.dm b/code/game/objects/items/devices/radio/radio.dm index b88f34ef519..0c5b1c4231b 100644 --- a/code/game/objects/items/devices/radio/radio.dm +++ b/code/game/objects/items/devices/radio/radio.dm @@ -83,58 +83,66 @@ var/global/list/default_medbay_channels = list( secure_radio_connections[ch_name] = radio_controller.add_object(src, radiochannels[ch_name], RADIO_CHAT) /obj/item/device/radio/attack_ghost(mob/user) - interact(user) + return ui_interact(user) /obj/item/device/radio/attack_self(mob/user as mob) user.set_machine(src) interact(user) -/obj/item/device/radio/interact(mob/user as mob) - if(!on) - return +/obj/item/device/radio/interact(mob/user) + if(!user) + return 0 - if(active_uplink_check(user)) - return + if(b_stat) + wires.Interact(user) - var/dat = "[src]" + return ui_interact(user) - if(!istype(src, /obj/item/device/radio/headset)) //Headsets dont get a mic button - dat += "Microphone: [broadcasting ? "Engaged" : "Disengaged"]
" +/obj/item/device/radio/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/data[0] - dat += {" - Speaker: [listening ? "Engaged" : "Disengaged"]
- Frequency: - - - - - [format_frequency(frequency)] - + - +
- "} + data["mic_status"] = broadcasting + data["speaker"] = listening + data["freq"] = format_frequency(frequency) + data["rawfreq"] = num2text(frequency) - dat+=list_channels(user) + data["mic_cut"] = (wires.IsIndexCut(WIRE_TRANSMIT) || wires.IsIndexCut(WIRE_SIGNAL)) + data["spk_cut"] = (wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL)) - dat+={"[text_wires()]
"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return + var/list/chanlist = list_channels(user) + if(islist(chanlist) && chanlist.len) + data["chan_list"] = chanlist + data["chan_list_len"] = chanlist.len + + if(syndie) + data["useSyndMode"] = 1 + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 430) + ui.set_initial_data(data) + ui.open() /obj/item/device/radio/proc/list_channels(var/mob/user) return list_internal_channels(user) /obj/item/device/radio/proc/list_secure_channels(var/mob/user) - var/dat = "" - for (var/ch_name in channels) - dat+=text_sec_channel(ch_name, channels[ch_name]) + var/dat[0] + + for(var/ch_name in channels) + var/chan_stat = channels[ch_name] + var/listening = !!(chan_stat & FREQ_LISTENING) != 0 + + dat.Add(list(list("chan" = ch_name, "display_name" = ch_name, "secure_channel" = 1, "sec_channel_listen" = !listening, "chan_span" = frequency_span_class(radiochannels[ch_name])))) + return dat /obj/item/device/radio/proc/list_internal_channels(var/mob/user) - var/dat = "" - for (var/internal_chan in internal_channels) + var/dat[0] + for(var/internal_chan in internal_channels) if(has_channel_access(user, internal_chan)) - dat+="[get_frequency_name(text2num(internal_chan))]
" + dat.Add(list(list("chan" = internal_chan, "display_name" = get_frequency_name(text2num(internal_chan)), "chan_span" = frequency_span_class(text2num(internal_chan))))) - if(dat) - dat = "
Internal Channels
" + dat return dat /obj/item/device/radio/proc/has_channel_access(var/mob/user, var/freq) @@ -172,9 +180,13 @@ var/global/list/default_medbay_channels = list( /obj/item/device/radio/proc/ToggleReception() listening = !listening && !(wires.IsIndexCut(WIRE_RECEIVE) || wires.IsIndexCut(WIRE_SIGNAL)) +/obj/item/device/radio/CanUseTopic() + if(!on) + return STATUS_CLOSE + return ..() + /obj/item/device/radio/Topic(href, href_list) - if(..() || !on) - usr << browse(null, "window=radio") + if(..()) return 1 usr.set_machine(src) @@ -216,7 +228,7 @@ var/global/list/default_medbay_channels = list( return 1 if(.) - interact(usr) + nanomanager.update_uis(src) /obj/item/device/radio/proc/autosay(var/message, var/from, var/channel) //BS12 EDIT var/datum/radio_frequency/connection = null @@ -683,31 +695,40 @@ var/global/list/default_medbay_channels = list( . = 1 if(.) - interact(usr) + nanomanager.update_uis(src) /obj/item/device/radio/borg/interact(mob/user as mob) if(!on) return - var/dat = "[src]" - dat += {" - Speaker: [listening ? "Engaged" : "Disengaged"]
- Frequency: - - - - - [format_frequency(frequency)] - + - +
- Broadcasting: [subspace_transmission ? "Disable" : "Enable"]
- Loudspeaker: [shut_up ? "Enable" : "Disable"]
- "} + . = ..() - if(subspace_transmission)//Don't even bother if subspace isn't turned on - dat+=list_channels(user) - dat+={"[text_wires()]
"} - user << browse(dat, "window=radio") - onclose(user, "radio") - return +/obj/item/device/radio/borg/ui_interact(mob/user, ui_key = "main", var/datum/nanoui/ui = null, var/force_open = 1) + var/data[0] + + data["mic_status"] = broadcasting + data["speaker"] = listening + data["freq"] = format_frequency(frequency) + data["rawfreq"] = num2text(frequency) + + var/list/chanlist = list_channels(user) + if(islist(chanlist) && chanlist.len) + data["chan_list"] = chanlist + data["chan_list_len"] = chanlist.len + + if(syndie) + data["useSyndMode"] = 1 + + data["has_loudspeaker"] = 1 + data["loudspeaker"] = !shut_up + data["has_subspace"] = 1 + data["subspace"] = subspace_transmission + + ui = nanomanager.try_update_ui(user, src, ui_key, ui, data, force_open) + if(!ui) + ui = new(user, src, ui_key, "radio_basic.tmpl", "[name]", 400, 430) + ui.set_initial_data(data) + ui.open() /obj/item/device/radio/proc/config(op) if(radio_controller) diff --git a/nano/templates/radio_basic.tmpl b/nano/templates/radio_basic.tmpl new file mode 100644 index 00000000000..6cfbb6dc7a5 --- /dev/null +++ b/nano/templates/radio_basic.tmpl @@ -0,0 +1,110 @@ + + + + + + + +{{if data.useSyndMode}} + {{:helper.syndicateMode()}} +{{/if}} + +
+
+ Microphone +
+
+ {{if data.mic_cut}} + {{:helper.link('On', null, null, 'disabled')}} + {{:helper.link('Off', null, null, 'disabled')}} + {{else}} + {{:helper.link('On', null, {'talk' : 0}, data.mic_status ? 'selected' : null)}} + {{:helper.link('Off', null, {'talk' : 1}, data.mic_status ? null : 'selected')}} + {{/if}} +
+
+ +
+
+ Speaker +
+
+ {{if data.spk_cut}} + {{:helper.link('On', null, null, 'disabled')}} + {{:helper.link('Off', null, null, 'disabled')}} + {{else}} + {{:helper.link('On', null, {'listen' : 0}, data.speaker ? 'selected' : null)}} + {{:helper.link('Off', null, {'listen' : 1}, data.speaker ? null : 'selected')}} + {{/if}} +
+
+ +{{if data.has_subspace}} +
+
+ Subspace Transmission: +
+
+ {{:helper.link('On', null, {'mode' : 1}, data.subspace ? 'selected' : null)}} + {{:helper.link('Off', null, {'mode' : 0}, data.subspace ? null : 'selected')}} +
+
+{{/if}} + +{{if data.has_loudspeaker}} +
+
+ Loudspeaker: +
+
+ {{:helper.link('On', null, {'shutup' : 0}, data.loudspeaker ? 'selected' : null)}} + {{:helper.link('Off', null, {'shutup' : 1}, data.loudspeaker ? null : 'selected')}} +
+
+{{/if}} + +
+
+ Frequency: {{:data.freq}} +
+
+ {{:helper.link('--', null, {'freq' : -10})}} + {{:helper.link('-', null, {'freq' : -2})}} + {{:helper.link('+', null, {'freq' : 2})}} + {{:helper.link('++', null, {'freq' : 10})}} +
+
+ +{{if data.chan_list_len >= 1}} +

Channels

+
+ {{for data.chan_list}} +
+ {{:value.display_name}} +
+
+ {{if value.secure_channel}} + {{:helper.link('On', null, {'ch_name' : value.chan, 'listen' : value.sec_channel_listen}, value.sec_channel_listen ? null : 'selected')}} + {{:helper.link('Off', null, {'ch_name' : value.chan, 'listen' : value.sec_channel_listen}, value.sec_channel_listen ? 'selected' : null)}} + {{else}} + {{:helper.link('Switch', null, {'spec_freq' : value.chan}, data.rawfreq == value.chan ? 'selected' : null)}} + {{/if}} +
+ {{/for}} +{{/if}}