From 20eb002e26881fbecbf4c07c705f41e70ccd3f73 Mon Sep 17 00:00:00 2001
From: Jonathan Wilkes <jancsika@yahoo.com>
Date: Tue, 21 Apr 2015 22:40:22 -0400
Subject: [PATCH] added blocksize delay and sample rate to audio prefs dialog

---
 pd/nw/dialog_prefs.html           | 72 ++++++++++++++++++++++++++-----
 pd/nw/locales/en/translation.json | 14 +++++-
 2 files changed, 74 insertions(+), 12 deletions(-)

diff --git a/pd/nw/dialog_prefs.html b/pd/nw/dialog_prefs.html
index fb3cbc557..02e3d83c5 100644
--- a/pd/nw/dialog_prefs.html
+++ b/pd/nw/dialog_prefs.html
@@ -23,7 +23,26 @@
 
       <fieldset id="audio">
         <legend data-i18n="prefs.heading.audio"></legend>
-        <select id="audio_api">
+        <select id="audio_api" onchange="change_api(this.value);">
+        </select>
+        <br/>
+        <label data-i18n="[title]prefs.audio.sr">
+          <span data-i18n="prefs.audio.sr"></span>
+          <input type="text" id="rate" name="rate">
+        </label>
+        <br/>
+        <label data-i18n="[title]prefs.audio.advance">
+          <span data-i18n="prefs.audio.advance"></span>
+          <input type="text" id="advance" name="advance">
+        </label>
+
+        <select id="blocksize" onchange="attr_change(this);">
+          <option value="64">64</option>
+          <option value="128">128</option>
+          <option value="256">256</option>
+          <option value="512">512</option>
+          <option value="1024">1024</option>
+          <option value="2048">2048</option>
         </select>
         Audio stuff
       </fieldset>
@@ -50,6 +69,19 @@
 
       </fieldset>
 
+
+    <div class="submit_buttons">
+      <button type="button" onClick="ok()" data-i18n="[title]prefs.ok_tt">
+        <span data-i18n="prefs.ok"></span>
+      </button>
+      <button type="button" onClick="apply()" data-i18n="[title]prefs.apply_tt">
+      <span data-i18n="prefs.apply"></span>
+      </button>
+      <button type="button" onClick="cancel()" data-i18n="[title]prefs.cancel_tt">
+      <span data-i18n="prefs.cancel"></span>
+      </button>
+      </div>
+
     </div>
   <script>
     'use strict';
@@ -63,9 +95,7 @@
 
     var pd_object_callback;
 
-    // nested arrays of attributes for each garray
-    // in this canvas
-    var pd_garray_attrs;
+    var pd_audio_attrs;
 
     function ok() {
         apply();
@@ -138,12 +168,11 @@
     }
 
     function attr_change(elem) {
-        var array_index, attr, arrays_select, name;
-        arrays_select = document.getElementById('arrays_select');
-        attr = pd_garray_attrs[arrays_select.value];
-        name = elem.name;
+        var attr, name;
+        attr = pd_audio_attrs;
+        name = elem.id;
         attr[attr.indexOf(name) + 1] = elem.value;
-        pdgui.gui_post("name is " + elem.name);
+        pdgui.gui_post("id is " + elem.id);
         pdgui.gui_post("value is " + elem.value);
     }
 
@@ -313,6 +342,14 @@ pdgui.gui_post("guistub is " + gfxstub);
         }
     }
 
+    function change_api(api_id) {
+        pdgui.pdsend("pd audio-setapi " + api_id);
+    }
+
+    function get_attr(name, attrs) {
+        return attrs[attrs.indexOf(name) + 1];
+    }
+
     function populate_audio_apis(apis, current_api) {
         pdgui.gui_post("curent api is " + current_api);
         var i, opt, api_select = document.getElementById('audio_api');
@@ -327,10 +364,23 @@ pdgui.gui_post("guistub is " + gfxstub);
     }
 
     function audio_prefs_callback(attrs) {
+        pd_audio_attrs = attrs;
+        var api_select = document.getElementById('audio_api');
         pdgui.gui_post("audio attrs are " + attrs);
         pdgui.gui_post("attrs length " + attrs.length);
-        populate_audio_apis(attrs[attrs.indexOf('audio-apis') + 1],
-            attrs[attrs.indexOf('current-api') + 1]);
+        // We can get this callback multiple times while the dialog
+        // is open.  This is because an API change requires a query
+        // for new properties. So we only populate the api options
+        // if they don't already exist
+        if (api_select.getElementsByTagName('option').length < 1) {
+            populate_audio_apis(attrs[attrs.indexOf('audio-apis') + 1],
+                attrs[attrs.indexOf('current-api') + 1]);
+        }
+
+        document.getElementById('rate').value = get_attr('rate', attrs);
+        document.getElementById('blocksize').value = get_attr('blocksize', attrs);
+        document.getElementById('advance').value = get_attr('advance', attrs);
+
     }
 
     function midi_prefs_callback(attrs) {
diff --git a/pd/nw/locales/en/translation.json b/pd/nw/locales/en/translation.json
index 955ef278d..30c807ad2 100644
--- a/pd/nw/locales/en/translation.json
+++ b/pd/nw/locales/en/translation.json
@@ -287,6 +287,18 @@
         "extended": "Pd-Extended",
         "l2ork": "Pd-L2ork"
       }
-    }
+    },
+    "audio": {
+      "sr": "sample rate",
+      "sr_tt": "number of samples per second",
+      "advance": "delay",
+      "advance_tt": "delay"
+    },
+    "ok": "ok",
+    "ok_tt": "Update the audio properties and close the dialog",
+    "apply": "apply",
+    "apply_tt": "Update audio properties without closing this dialog",
+    "cancel": "cancel",
+    "cancel_tt": "Cancel updating the properties"
   }
 }
-- 
GitLab