add an plugin API to query generic-gui grid-layout
authorRobin Gareus <robin@gareus.org>
Fri, 8 Jul 2016 16:18:34 +0000 (18:18 +0200)
committerRobin Gareus <robin@gareus.org>
Fri, 8 Jul 2016 16:19:31 +0000 (18:19 +0200)
libs/ardour/ardour/lv2_plugin.h
libs/ardour/ardour/plugin.h
libs/ardour/lv2_plugin.cc

index cbd7a7abc2b550d64d982ef219fc51ffc0d847b4..efd4903e07ae2973969d4f40cfef113495760b69 100644 (file)
@@ -79,6 +79,7 @@ class LIBARDOUR_API LV2Plugin : public ARDOUR::Plugin, public ARDOUR::Workee
        std::string get_parameter_docs(uint32_t which) const;
        int         get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const;
        uint32_t    nth_parameter (uint32_t port, bool& ok) const;
+       bool        get_layout (uint32_t which, UILayoutHint&) const;
 
        IOPortDescription describe_io_port (DataType dt, bool input, uint32_t id) const;
 
index dcb6577e7aaf61dab2b9b3310adaeb0a282b5fb6..bc32d7c3e62846f9a363f4e3bac3e70ad7eefd6f 100644 (file)
@@ -88,6 +88,18 @@ class LIBARDOUR_API Plugin : public PBD::StatefulDestructible, public Latent
        virtual std::string get_docs () const { return ""; }
        virtual std::string get_parameter_docs (uint32_t /*which*/) const { return ""; }
 
+       struct UILayoutHint {
+               UILayoutHint ()
+                       : x0(-1), x1(-1), y0(-1), y1(-1), knob(false) {}
+               int x0;
+               int x1;
+               int y0;
+               int y1;
+               bool knob;
+       };
+
+       virtual bool get_layout (uint32_t which, UILayoutHint&) const { return false; }
+
        virtual int get_parameter_descriptor (uint32_t which, ParameterDescriptor&) const = 0;
        virtual uint32_t nth_parameter (uint32_t which, bool& ok) const = 0;
        virtual void activate () = 0;
index 228fd741173dfd075ce3d2c10eaa47b2dc4dd593..d27c0457506bde3f147e99e629bdb279be16492e 100644 (file)
@@ -1054,6 +1054,53 @@ LV2Plugin::get_parameter_docs(uint32_t which) const
        return "";
 }
 
+bool
+LV2Plugin::get_layout (uint32_t which, UILayoutHint& h) const
+{
+       /// TODO lookup port-properties
+       if (unique_id () != "urn:ardour:a-eq") {
+               return false;
+       }
+       h.knob = true;
+       switch (which) {
+               case  0: h.x0 = 0; h.x1 = 1; h.y0 = 4; h.y1 = 5; break; // Shelf toggle L
+               case  1: h.x0 = 0; h.x1 = 1; h.y0 = 2; h.y1 = 3; break; // Frequency L
+               case  2: h.x0 = 0; h.x1 = 1; h.y0 = 0; h.y1 = 1; break; // Gain L
+               case 19: h.x0 = 0; h.x1 = 1; h.y0 = 5; h.y1 = 6; break; // enable L
+
+               case  3: h.x0 = 1; h.x1 = 3; h.y0 = 2; h.y1 = 3; break; // Frequency 1
+               case  4: h.x0 = 1; h.x1 = 3; h.y0 = 0; h.y1 = 1; break; // Gain 1
+               case  5: h.x0 = 2; h.x1 = 4; h.y0 = 1; h.y1 = 2; break; // Bandwidth 1
+               case 20: h.x0 = 1; h.x1 = 4; h.y0 = 5; h.y1 = 6; break; // enable 1
+
+               case  6: h.x0 = 4; h.x1 = 6; h.y0 = 2; h.y1 = 3; break; // Frequency 2
+               case  7: h.x0 = 4; h.x1 = 6; h.y0 = 0; h.y1 = 1; break; // Gain 2
+               case  8: h.x0 = 5; h.x1 = 7; h.y0 = 1; h.y1 = 2; break; // Bandwidth 2
+               case 21: h.x0 = 4; h.x1 = 7; h.y0 = 5; h.y1 = 6; break; // enable 2
+
+               case  9: h.x0 = 7; h.x1 =  9; h.y0 = 2; h.y1 = 3; break; // Frequency 3
+               case 10: h.x0 = 7; h.x1 =  9; h.y0 = 0; h.y1 = 1; break; // Gain 3
+               case 11: h.x0 = 8; h.x1 = 10; h.y0 = 1; h.y1 = 2; break; // Bandwidth 3
+               case 22: h.x0 = 7; h.x1 = 10; h.y0 = 5; h.y1 = 6; break; // enable 3
+
+               case 12: h.x0 = 10; h.x1 = 12; h.y0 = 2; h.y1 = 3; break; // Frequency 4
+               case 13: h.x0 = 10; h.x1 = 12; h.y0 = 0; h.y1 = 1; break; // Gain 4
+               case 14: h.x0 = 11; h.x1 = 13; h.y0 = 1; h.y1 = 2; break; // Bandwidth 4
+               case 23: h.x0 = 10; h.x1 = 13; h.y0 = 5; h.y1 = 6; break; // enable 4
+
+               case 15: h.x0 = 13; h.x1 = 14; h.y0 = 4; h.y1 = 5; break; // Shelf toggle H
+               case 16: h.x0 = 13; h.x1 = 14; h.y0 = 2; h.y1 = 3; break; // Frequency H
+               case 17: h.x0 = 13; h.x1 = 14; h.y0 = 0; h.y1 = 1; break; // Gain H
+               case 24: h.x0 = 13; h.x1 = 14; h.y0 = 5; h.y1 = 6; break; // enable H
+
+
+               case 18: h.x0 = 14; h.x1 = 15; h.y0 = 4; h.y1 = 6; break; // Master Gain
+               default:
+                       return false;
+       }
+       return true;
+}
+
 uint32_t
 LV2Plugin::nth_parameter(uint32_t n, bool& ok) const
 {