From fe22859612c0fe0f53cd198baf21d415dc23e75d Mon Sep 17 00:00:00 2001 From: Jonathan Wilkes <jon.w.wilkes@gmail.com> Date: Sun, 1 May 2016 17:38:06 -0400 Subject: [PATCH] fix midi dialog to accommodate the non-standard alsa midi settings in Pd --- pd/nw/dialog_prefs.html | 103 +++++++++++++++++++++--------- pd/nw/locales/en/translation.json | 16 ++++- pd/nw/pdgui.js | 4 +- 3 files changed, 88 insertions(+), 35 deletions(-) diff --git a/pd/nw/dialog_prefs.html b/pd/nw/dialog_prefs.html index c0affa780..e58a17e14 100644 --- a/pd/nw/dialog_prefs.html +++ b/pd/nw/dialog_prefs.html @@ -85,8 +85,8 @@ </div> <table> <tr> - <td> - Input Devices + <td data-i18n="[title]prefs.audio.input_title_tt"> + <span data-i18n="prefs.audio.input_title"></span> </td> <td> <span data-i18n="prefs.audio.channels"></span> @@ -145,8 +145,8 @@ </td> </tr> <tr> - <td> - Output Devices + <td data-i18n="[title]prefs.audio.output_title_tt"> + <span data-i18n="prefs.audio.output_title"></span> </td> <td> <span data-i18n="prefs.audio.channels"></span> @@ -215,24 +215,50 @@ </select> </label> </div> + <div class="tab_settings alsa_midi"> + <label data-i18n="[title]prefs.midi.alsa_in_ports_tt"> + <span data-i18n="prefs.midi.alsa_in_ports"></span> + <input type="text" + id="alsa_in_ports" + name="alsa_in_ports" + onchange="attr_change(this);"> + </label> + <label data-i18n="[title]prefs.midi.alsa_out_ports_tt"> + <span data-i18n="prefs.midi.alsa_out_ports"></span> + <input type="text" + id="alsa_out_ports" + name="alsa_out_ports" + onchange="attr_change(this);"> + </label> + </div> - <select id="midi_in1" onchange="dev_change(this);"></select> - <br/> - <select id="midi_in2" onchange="dev_change(this);"></select> - <br/> - <select id="midi_in3" onchange="dev_change(this);"></select> - <br/> - <select id="midi_in4" onchange="dev_change(this);"></select> - <br/> - - <select id="midi_out1" onchange="dev_change(this);"></select> - <br/> - <select id="midi_out2" onchange="dev_change(this);"></select> - <br/> - <select id="midi_out3" onchange="dev_change(this);"></select> - <br/> - <select id="midi_out4" onchange="dev_change(this);"></select> - <br/> + <div class="tab_settings midi_devices"> + <span data-i18n="[title]prefs.midi.input_title_tt"> + <span data-i18n="prefs.midi.input_title"></span> + </span> + <br/> + <select id="midi_in1" onchange="dev_change(this);"></select> + <br/> + <select id="midi_in2" onchange="dev_change(this);"></select> + <br/> + <select id="midi_in3" onchange="dev_change(this);"></select> + <br/> + <select id="midi_in4" onchange="dev_change(this);"></select> + <br/> + + <span data-i18n="[title]prefs.midi.output_title_tt"> + <span data-i18n="prefs.midi.output_title"></span> + </span> + <br/> + <select id="midi_out1" onchange="dev_change(this);"></select> + <br/> + <select id="midi_out2" onchange="dev_change(this);"></select> + <br/> + <select id="midi_out3" onchange="dev_change(this);"></select> + <br/> + <select id="midi_out4" onchange="dev_change(this);"></select> + <br/> + </div> </div> <div class="tab3"> @@ -476,15 +502,13 @@ function populate_devs(type, attrs) { } function populate_midi_devs(type, attrs) { - var devs = get_attr(type === "in" ? "sys-indevs" : "sys-outdevs", attrs); - var i, j, opt, elem, chan_elem, chans; - pdgui.post("devs are " + devs); - pdgui.post("type is " + type + 1); - chans = get_attr("pd-" + type + "chans", attrs); + var dev_names = get_attr(type === "in" ? + "midi-indev-names" : "midi-outdev-names", attrs); + var i, j, opt, elem; + pdgui.post("dev names are " + dev_names); + pdgui.post("type is " + type); for (i = 0; i < 4; i++) { - elem = document.getElementById(type + (i+1)); - chan_elem = document.getElementById(type + "chans" + (i+1)); - chan_elem.value = chans[i]; + elem = document.getElementById("midi_" + type + (i+1)); // if the user changed the API, we need to remove the old devs while (elem.firstChild) { elem.removeChild(elem.firstChild); @@ -494,10 +518,10 @@ function populate_midi_devs(type, attrs) { opt.value = -1; opt.textContent = "None"; elem.appendChild(opt); - for (j = 0; j < devs.length; j++) { + for (j = 0; j < dev_names.length; j++) { opt = document.createElement("option"); opt.value = j; - opt.textContent = devs[j]; + opt.textContent = dev_names[j]; elem.appendChild(opt); } } @@ -609,6 +633,23 @@ function midi_prefs_callback(attrs) { ); } + // Hide devs and only show the alsa in/out boxes. In the future + // we need an additional user friendly alsa interface here-- one that + // just lets the user pick a single input device and single output + // device, like LMMS does. + if (+get_attr("current-api", attrs) === 1) { // ALSA API + document.getElementsByClassName("midi_devices")[0] + .style.setProperty("display", "none"); + document.getElementsByClassName("alsa_midi")[0] + .style.setProperty("display", "inherit"); + } else { + document.getElementsByClassName("midi_devices")[0] + .style.setProperty("display", "inherit"); + document.getElementsByClassName("alsa_midi")[0] + .style.setProperty("display", "none"); + populate_midi_devs("in", attrs); + populate_midi_devs("out", attrs); + } pdgui.resize_window(pd_object_callback); } diff --git a/pd/nw/locales/en/translation.json b/pd/nw/locales/en/translation.json index cd70507b0..be194b0bb 100644 --- a/pd/nw/locales/en/translation.json +++ b/pd/nw/locales/en/translation.json @@ -359,11 +359,23 @@ "blocksize": "blocksize", "blocksize_tt": "number of samples in a block to be delivered to or received from the audio api", "channels": "channels", - "channels_tt": "number of channels for this device" + "channels_tt": "number of channels for this device", + "input_title": "Input Devices", + "input_title_tt": "hardware devices used to get audio into Pd", + "output_title": "Output Devices", + "output_title_tt": "hardware devices to send audio from Pd" }, "midi": { "api": "midi api", - "api_tt": "midi backend or server used to communicate with midi devices" + "api_tt": "midi backend or server used to communicate with midi devices", + "alsa_in_ports": "input ports", + "alsa_in_ports_tt": "number of input ports for Pd", + "alsa_out_ports": "output ports", + "alsa_out_ports_tt": "number of output ports for Pd", + "input_title": "Input Devices", + "input_title_tt": "hardware devices used to get midi data into Pd", + "output_title": "Output Devices", + "output_title_tt": "hardware devices to send midi data from Pd" }, "ok": "Ok", "ok_tt": "Update the audio properties and close the dialog", diff --git a/pd/nw/pdgui.js b/pd/nw/pdgui.js index 9ad09d894..e1bb15d75 100644 --- a/pd/nw/pdgui.js +++ b/pd/nw/pdgui.js @@ -3628,8 +3628,8 @@ function gui_midi_properties(gfxstub, sys_indevs, sys_outdevs, pd_indevs, pd_outdevs, midi_attrs) { var attrs = midi_attrs.concat([ "midi-apis", pd_midiapilist, - "sys-indevs", sys_indevs, - "sys-outdevs", sys_outdevs, + "midi-indev-names", sys_indevs, + "midi-outdev-names", sys_outdevs, "pd-indevs", pd_indevs, "pd-outdevs", pd_outdevs, ]); -- GitLab