Merge branch 'cairocanvas' of git.ardour.org:ardour/ardour into cairocanvas
[ardour.git] / gtk2_ardour / generic_pluginui.cc
index 72273f512a4b69e9b29128f62e931ed873ad9687..faec8fb4ae109f56d864844073e58b4a425d5a03 100644 (file)
@@ -25,6 +25,7 @@
 #include <cerrno>
 #include <cmath>
 #include <string>
+#include <vector>
 
 #include "pbd/stl_delete.h"
 #include "pbd/xml++.h"
 #include <gtkmm2ext/doi.h>
 #include <gtkmm2ext/slider_controller.h>
 
-#include "midi++/manager.h"
-
 #include "ardour/plugin.h"
 #include "ardour/plugin_insert.h"
 #include "ardour/session.h"
 
-#include <lrdf.h>
-
 #include "ardour_ui.h"
 #include "prompter.h"
 #include "plugin_ui.h"
@@ -313,9 +310,9 @@ GenericPluginUI::build ()
        // are similar enough to be grouped together.
        
        string label, previous_label = "";
-       int numbers_in_labels[cui_controls_list.size()];
+       std::vector<int> numbers_in_labels(cui_controls_list.size());
        
-       float similarity_scores[cui_controls_list.size()];
+       std::vector<float> similarity_scores(cui_controls_list.size());
        float most_similar = 0.0, least_similar = 1.0;
        
        i = 0;
@@ -492,6 +489,32 @@ GenericPluginUI::integer_printer (char buf[32], Adjustment &adj, ControlUI* cui)
        return true;
 }
 
+bool
+GenericPluginUI::midinote_printer (char buf[32], Adjustment &adj, ControlUI* cui)
+{
+       float const v = adj.get_value ();
+
+       if (cui->scale_points) {
+               Plugin::ScalePoints::const_iterator i = cui->scale_points->begin ();
+               while (i != cui->scale_points->end() && i->second != v) {
+                       ++i;
+               }
+
+               if (i != cui->scale_points->end ()) {
+                       snprintf (buf, 32, "%s", i->first.c_str());
+                       return true;
+               }
+       }
+       if (v >= 0 && v <= 127) {
+               int mn = rint(v);
+               const char notename[12][3] = { "C", "C#", "D", "D#", "E", "F", "F#", "G", "G#", "A", "A#", "B" };
+               snprintf (buf, 32, "%s %d", notename[mn%12], (mn/12)-2);
+       } else {
+               snprintf (buf, 32, "%.0f", v);
+       }
+       return true;
+}
+
 void
 GenericPluginUI::print_parameter (char *buf, uint32_t len, uint32_t param)
 {
@@ -612,7 +635,12 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                if (desc.integer_step) {
                        control_ui->clickbox = new ClickBox (adj, "PluginUIClickBox");
                        Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->clickbox, "g9999999", 2, 2);
-                       control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::integer_printer), control_ui));
+                       if (desc.midinote) {
+                               printf("MIDI NOTE\n");
+                               control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::midinote_printer), control_ui));
+                       } else {
+                               control_ui->clickbox->set_printer (sigc::bind (sigc::mem_fun (*this, &GenericPluginUI::integer_printer), control_ui));
+                       }
                } else {
                        //sigc::slot<void,char*,uint32_t> pslot = sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::print_parameter), (uint32_t) port_index);
 
@@ -661,7 +689,7 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                control_ui->display_label->set_name ("ParameterValueDisplay");
 
                control_ui->display->add (*control_ui->display_label);
-               Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->display, "-99,99", 2, 2);
+               Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->display, "-888.8g", 2, 6);
 
                control_ui->display->show_all ();
 
@@ -671,7 +699,17 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                MeterInfo * info = new MeterInfo(port_index);
                control_ui->meterinfo = info;
 
-               info->meter = new FastMeter (5, 5, FastMeter::Vertical);
+               info->meter = new FastMeter (
+                               5, 5, FastMeter::Vertical, 0,
+                               0x0000aaff,
+                               0x008800ff, 0x008800ff,
+                               0x00ff00ff, 0x00ff00ff,
+                               0xcccc00ff, 0xcccc00ff,
+                               0xffaa00ff, 0xffaa00ff,
+                               0xff0000ff,
+                               ARDOUR_UI::config()->get_canvasvar_MeterBackgroundBot(),
+                               ARDOUR_UI::config()->get_canvasvar_MeterBackgroundTop()
+                               );
 
                info->min_unbound = desc.min_unbound;
                info->max_unbound = desc.max_unbound;
@@ -682,6 +720,9 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                control_ui->vbox = manage (new VBox);
                control_ui->hbox = manage (new HBox);
 
+               control_ui->hbox->set_spacing(1);
+               control_ui->vbox->set_spacing(3);
+
                control_ui->label.set_angle(90);
                control_ui->hbox->pack_start (control_ui->label, false, false);
                control_ui->hbox->pack_start (*info->meter, false, false);