From 3f33469b7237240a2be708ca29087773a4b7e228 Mon Sep 17 00:00:00 2001
From: Bent Bisballe Nyeng <deva@aasimon.org>
Date: Sat, 20 Apr 2013 22:06:08 +0200
Subject: Added messages for 'get engine seetings' and 'set engine setting',
 thereby removing the last 'direct call' in the engine code from the gui code.

---
 src/drumgizmo.cc | 60 ++++++++++++++++++++++++++++++++------------------------
 src/message.h    | 37 ++++++++++++++++++++++++++++++++++
 2 files changed, 71 insertions(+), 26 deletions(-)

(limited to 'src')

diff --git a/src/drumgizmo.cc b/src/drumgizmo.cc
index 77d9b89..49ea787 100644
--- a/src/drumgizmo.cc
+++ b/src/drumgizmo.cc
@@ -38,6 +38,7 @@
 
 #include "drumkitparser.h"
 #include "audioinputenginemidi.h"
+#include "configuration.h"
 
 DrumGizmo::DrumGizmo(AudioOutputEngine *o, AudioInputEngine *i)
   : loader(this), oe(o), ie(i)
@@ -179,8 +180,6 @@ bool DrumGizmo::init(bool preload)
 
 void DrumGizmo::handleEngineEvents()
 {
-  // DEBUG(msg, "handle?");
-
   Message *msg = receiveEngineMessage();
   if(msg) {
     DEBUG(msg, "got message.");
@@ -202,36 +201,47 @@ void DrumGizmo::handleEngineEvents()
         aim->loadMidiMap(m->midimapfile, kit.instruments);
       }
       break;
+    case Message::EngineSettingsMessage:
+      {
+        DEBUG(msg, "got EngineSettingsMessage message.");
+        EngineSettingsMessage *msg = new EngineSettingsMessage();
+        msg->midimapfile = midimapfile;
+        msg->midimap_loaded = true;
+        msg->drumkitfile = drumkitfile();
+        msg->drumkit_loaded = true;
+        msg->enable_velocity_modifier = Conf::enable_velocity_modifier;
+        msg->velocity_modifier_falloff = Conf::velocity_modifier_falloff;
+        msg->velocity_modifier_weight = Conf::velocity_modifier_weight;
+        msg->enable_velocity_randomiser = Conf::enable_velocity_randomiser;
+        msg->velocity_randomiser_weight = Conf::velocity_randomiser_weight;
+        sendGUIMessage(msg);
+      }
+      break;
+    case Message::ChangeSettingMessage:
+      {
+        ChangeSettingMessage *ch = (ChangeSettingMessage*)msg;
+        switch(ch->name) {
+        case ChangeSettingMessage::enable_velocity_modifier:
+          Conf::enable_velocity_modifier = ch->value;
+          break;
+        case ChangeSettingMessage::velocity_modifier_weight:
+          Conf::velocity_modifier_weight = ch->value;
+          break;
+        case ChangeSettingMessage::velocity_modifier_falloff:
+          Conf::velocity_modifier_falloff = ch->value;
+          break;
+        }
+      }
+      break;
     default:
       break;
     }
-    // delete msg;
+    delete msg;
   }
 }
 
 bool DrumGizmo::run(size_t pos, sample_t *samples, size_t nsamples)
 {
-#if 0
-  DEBUG(drumgizmo, "loader.isDone() = %d", (int)loader.isDone());
-  if(!loader.isDone()) {
-    /*
-    //    return false;
-    ie->pre();
-    oe->pre(nsamples);
-    size_t nev;
-    event_t *evs = ie->run(pos, nsamples, &nev);
-    free(evs);
-    //    memset(samples, 0, nsamples);
-    for(size_t i = 0; i < nsamples / 2; i++) samples[i] = sin(pos + i);
-    for(size_t c = 0; c < 16; c++) oe->run(c, samples, nsamples);
-    ie->post();
-    oe->post(nsamples);
-    pos += nsamples;
-    */
-    return true;
-  }
-#endif
-
   // Handle engine messages, at most one in each iteration:
   handleEngineEvents();
 
@@ -435,8 +445,6 @@ void DrumGizmo::stop()
   // engine.stop();
 }
 
-#include "configuration.h"
-
 std::string float2str(float a)
 {
   char buf[256];
diff --git a/src/message.h b/src/message.h
index c37db12..9bf2f12 100644
--- a/src/message.h
+++ b/src/message.h
@@ -36,6 +36,8 @@ public:
     // GUI -> Engine, Engine -> Engine Messages:
     LoadDrumKit, // Signal engine to load drumkit.
     LoadMidimap, // Signal engine to load midimap.
+    EngineSettingsMessage, // Request or receive engine settings.
+    ChangeSettingMessage, // Update named setting in engine.
   } type_t;
 
   virtual ~Message() {}
@@ -62,4 +64,39 @@ public:
   std::string midimapfile;
 };
 
+class EngineSettingsMessage : public Message {
+public:
+  type_t type() { return Message::EngineSettingsMessage; }
+  std::string midimapfile;
+  bool midimap_loaded;
+
+  std::string drumkitfile;
+  bool drumkit_loaded;
+
+  float enable_velocity_modifier;
+  float velocity_modifier_falloff;
+  float velocity_modifier_weight;
+  float enable_velocity_randomiser;
+  float velocity_randomiser_weight;
+};
+
+class ChangeSettingMessage : public Message {
+public:
+  typedef enum {
+    enable_velocity_modifier,
+    velocity_modifier_weight,
+    velocity_modifier_falloff,
+  } setting_name_t;
+
+  ChangeSettingMessage(setting_name_t n, float v) {
+    name = n;
+    value = v;
+  }
+
+  type_t type() { return Message::ChangeSettingMessage; }
+
+  setting_name_t name;
+  float value;
+};
+
 #endif/*__DRUMGIZMO_MESSAGE_H__*/
-- 
cgit v1.2.3