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}}