use image cursors for left/right trim cursors
[ardour.git] / gtk2_ardour / generic_pluginui.cc
index 5d6dd172d995953006ee235978b54fdcf2525e7e..04e753bf0cee5836c17b900a817564466af9acc5 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2000 Paul Davis 
+    Copyright (C) 2000 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
 */
 
+#ifdef WAF_BUILD
+#include "gtk2ardour-config.h"
+#endif
+
 #include <climits>
 #include <cerrno>
 #include <cmath>
@@ -58,7 +62,6 @@ using namespace ARDOUR;
 using namespace PBD;
 using namespace Gtkmm2ext;
 using namespace Gtk;
-using namespace sigc;
 
 GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrollable)
        : PlugUIBase (pi),
@@ -74,7 +77,7 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
        set_border_width (10);
        //set_homogeneous (false);
 
-       pack1(main_contents);
+       pack_start(main_contents);
        settings_box.set_homogeneous (false);
 
        HBox* constraint_hbox = manage (new HBox);
@@ -82,22 +85,21 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
        Label* combo_label = manage (new Label (_("<span size=\"large\">Presets</span>")));
        combo_label->set_use_markup (true);
 
-       Label* latency_label = manage (new Label (_("<span size=\"large\">Latency</span>")));
-       latency_label->set_use_markup (true);
+       latency_button.add (latency_label);
+       latency_button.signal_clicked().connect (sigc::mem_fun (*this, &PlugUIBase::latency_button_clicked));
+       set_latency_label ();
 
-       smaller_hbox->pack_start (*latency_label, false, false, 10);
-       smaller_hbox->pack_start (latency_gui, false, false, 10);
+       smaller_hbox->pack_start (latency_button, false, false, 10);
        smaller_hbox->pack_start (preset_combo, false, false);
        smaller_hbox->pack_start (save_button, false, false);
        smaller_hbox->pack_start (bypass_button, false, true);
 
        constraint_hbox->set_spacing (5);
        constraint_hbox->set_homogeneous (false);
-       
+
        VBox* v1_box = manage (new VBox);
        VBox* v2_box = manage (new VBox);
-       constraint_hbox->pack_start (eqgui_toggle, false, false);
-       add2(plugin_eq_bin);
+       pack_end(plugin_analysis_expander);
 
        v1_box->pack_start (*smaller_hbox, false, true);
        v2_box->pack_start (focus_button, false, true);
@@ -108,14 +110,14 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
        constraint_hbox->pack_end (*v1_box, false, false);
 
        main_contents.pack_start (*constraint_hbox, false, false);
-       
+
        if ( is_scrollable ) {
                scroller.set_policy (Gtk::POLICY_AUTOMATIC, Gtk::POLICY_AUTOMATIC);
                scroller.set_name ("PluginEditor");
                scroller_view.set_name("PluginEditor");
                scroller_view.add (hpacker);
                scroller.add (scroller_view);
-               
+
                main_contents.pack_start (scroller, true, true);
 
        }
@@ -123,9 +125,8 @@ GenericPluginUI::GenericPluginUI (boost::shared_ptr<PluginInsert> pi, bool scrol
                main_contents.pack_start (hpacker, false, false);
        }
 
-       pi->ActiveChanged.connect (bind(mem_fun(*this, &GenericPluginUI::processor_active_changed),
-                                       boost::weak_ptr<Processor>(pi)));
-       
+       pi->ActiveChanged.connect (active_connection, invalidator (*this), boost::bind (&GenericPluginUI::processor_active_changed, this, boost::weak_ptr<Processor>(pi)), gui_context());
+
        bypass_button.set_active (!pi->active());
 
        build ();
@@ -195,7 +196,7 @@ GenericPluginUI::build ()
        for (i = 0; i < plugin->parameter_count(); ++i) {
 
                if (plugin->parameter_is_control (i)) {
-                       
+
                        /* Don't show latency control ports */
 
                        if (plugin->describe_parameter (Evoral::Parameter(PluginAutomation, 0, i)) == X_("latency")) {
@@ -203,7 +204,7 @@ GenericPluginUI::build ()
                        }
 
                        ControlUI* cui;
-       
+
                        /* if we are scrollable, just use one long column */
 
                        if (!is_scrollable) {
@@ -211,7 +212,7 @@ GenericPluginUI::build ()
                                        frame = manage (new Frame);
                                        frame->set_name ("BaseFrame");
                                        box = manage (new VBox);
-                                       
+
                                        box->set_border_width (5);
                                        box->set_spacing (1);
 
@@ -224,13 +225,13 @@ GenericPluginUI::build ()
 
                        boost::shared_ptr<ARDOUR::AutomationControl> c
                                = boost::dynamic_pointer_cast<ARDOUR::AutomationControl>(
-                                       insert->data().control(Evoral::Parameter(PluginAutomation, 0, i)));
+                                       insert->control(Evoral::Parameter(PluginAutomation, 0, i)));
 
                        if ((cui = build_control_ui (i, c)) == 0) {
                                error << string_compose(_("Plugin Editor: could not build control element for port %1"), i) << endmsg;
                                continue;
                        }
-                               
+
                        if (cui->controller || cui->clickbox || cui->combo) {
 
                                box->pack_start (*cui, false, false);
@@ -245,25 +246,25 @@ GenericPluginUI::build ()
                                        }
                                }
 
-                               button_table.attach (*cui, button_col, button_col + 1, button_row, button_row+1, 
+                               button_table.attach (*cui, button_col, button_col + 1, button_row, button_row+1,
                                                     FILL|EXPAND, FILL);
                                button_row++;
 
                        } else if (cui->display) {
 
-                               output_table.attach (*cui, output_col, output_col + 1, output_row, output_row+1, 
+                               output_table.attach (*cui, output_col, output_col + 1, output_row, output_row+1,
                                                     FILL|EXPAND, FILL);
-                               
-                               // TODO: The meters should be divided into multiple rows 
-                               
+
+                               // TODO: The meters should be divided into multiple rows
+
                                if (++output_col == output_cols) {
                                        output_cols ++;
                                        output_table.resize (output_rows, output_cols);
                                }
-                               
+
                                /* old code, which divides meters into
                                 * columns first, rows later. New code divides into one row
-                                
+
                                if (output_row == output_rows) {
                                        output_row = 0;
                                        if (++output_col == output_cols) {
@@ -271,22 +272,22 @@ GenericPluginUI::build ()
                                                output_table.resize (output_rows, output_cols);
                                        }
                                }
-                               
-                               output_table.attach (*cui, output_col, output_col + 1, output_row, output_row+1, 
+
+                               output_table.attach (*cui, output_col, output_col + 1, output_row, output_row+1,
                                                     FILL|EXPAND, FILL);
+
                                output_row++;
                                */
                        }
-                               
+
                        /* HACK: ideally the preferred height would be queried from
                           the complete hpacker, but I can't seem to get that
-                          information in time, so this is an estimation 
+                          information in time, so this is an estimation
                        */
 
                        prefheight += 30;
 
-               } 
+               }
        }
 
        if (box->children().empty()) {
@@ -311,17 +312,17 @@ GenericPluginUI::build ()
 }
 
 GenericPluginUI::ControlUI::ControlUI ()
-       : automate_button (X_("")) // force creation of a label 
+       : automate_button (X_("")) // force creation of a label
 {
        automate_button.set_name ("PluginAutomateButton");
-       ARDOUR_UI::instance()->tooltips().set_tip (automate_button, _("Automation control"));
+       ARDOUR_UI::instance()->set_tip (automate_button, _("Automation control"));
 
        /* XXX translators: use a string here that will be at least as long
           as the longest automation label (see ::automation_state_changed()
           below). be sure to include a descender.
        */
 
-       set_size_request_to_display_given_text (*automate_button.get_child(), _("Mgnual"), 5, 5);
+        set_size_request_to_display_given_text (automate_button, _("Mgnual"), 15, 10);
 
        ignore_change = 0;
        display = 0;
@@ -330,7 +331,7 @@ GenericPluginUI::ControlUI::ControlUI ()
        meterinfo = 0;
 }
 
-GenericPluginUI::ControlUI::~ControlUI() 
+GenericPluginUI::ControlUI::~ControlUI()
 {
        if (meterinfo) {
                delete meterinfo->meter;
@@ -366,7 +367,7 @@ GenericPluginUI::automation_state_changed (ControlUI* cui)
 }
 
 
-static void integer_printer (char buf[32], Adjustment &adj, void *arg)
+static void integer_printer (char buf[32], Adjustment &adj, void */*arg*/)
 {
        snprintf (buf, 32, "%.0f", adj.get_value());
 }
@@ -380,9 +381,10 @@ GenericPluginUI::print_parameter (char *buf, uint32_t len, uint32_t param)
 GenericPluginUI::ControlUI*
 GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<AutomationControl> mcontrol)
 {
-       ControlUI* control_ui = NULL;
-       if (!mcontrol)
+       ControlUI* control_ui = 0;
+       if (!mcontrol) {
                return control_ui;
+       }
 
        Plugin::ParameterDescriptor desc;
 
@@ -408,23 +410,23 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                boost::shared_ptr<LV2Plugin> lv2p;
 #endif
                if ((lp = boost::dynamic_pointer_cast<LadspaPlugin>(plugin)) != 0) {
-                       
+
                        // FIXME: not all plugins have a numeric unique ID
                        uint32_t id = atol (lp->unique_id().c_str());
                        lrdf_defaults* defaults = lrdf_get_scale_values(id, port_index);
-                       
+
                        if (defaults && defaults->count > 0)    {
-                               
+
                                control_ui->combo = new Gtk::ComboBoxText;
                                //control_ui->combo->set_value_in_list(true, false);
                                set_popdown_strings (*control_ui->combo, setup_scale_values(port_index, control_ui));
-                               control_ui->combo->signal_changed().connect (bind (mem_fun(*this, &GenericPluginUI::control_combo_changed), control_ui));
-                               mcontrol->Changed.connect (bind (mem_fun (*this, &GenericPluginUI::parameter_changed), control_ui));
+                               control_ui->combo->signal_changed().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_combo_changed), control_ui));
+                               mcontrol->Changed.connect (control_connections, invalidator (*this), boost::bind (&GenericPluginUI::parameter_changed, this, control_ui), gui_context());
                                control_ui->pack_start(control_ui->label, true, true);
                                control_ui->pack_start(*control_ui->combo, false, true);
-                               
+
                                update_control_display(control_ui);
-                               
+
                                lrdf_free_setting_values(defaults);
                                return control_ui;
                        }
@@ -439,23 +441,23 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                                control_ui->combo = new Gtk::ComboBoxText;
                                //control_ui->combo->set_value_in_list(true, false);
                                set_popdown_strings (*control_ui->combo, setup_scale_values(port_index, control_ui));
-                               control_ui->combo->signal_changed().connect (bind (mem_fun(*this, &GenericPluginUI::control_combo_changed), control_ui));
-                               mcontrol->Changed.connect (bind (mem_fun (*this, &GenericPluginUI::parameter_changed), control_ui));
+                               control_ui->combo->signal_changed().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_combo_changed), control_ui));
+                               mcontrol->Changed.connect (control_connections, invalidator (*this), boost::bind (&GenericPluginUI::parameter_changed, this, control_ui), gui_context());
                                control_ui->pack_start(control_ui->label, true, true);
                                control_ui->pack_start(*control_ui->combo, false, true);
-                               
+
                                update_control_display(control_ui);
-                               
+
                                slv2_scale_points_free(points);
                                return control_ui;
                        }
 #endif
                }
-                       
+
                if (desc.toggled) {
 
                        /* Build a button */
-               
+
                        control_ui->button = manage (new ToggleButton ());
                        control_ui->button->set_name ("PluginEditorButton");
                        control_ui->button->set_size_request (20, 20);
@@ -464,13 +466,13 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                        control_ui->pack_start (*control_ui->button, false, true);
                        // control_ui->pack_start (control_ui->automate_button, false, false);
 
-                       control_ui->button->signal_clicked().connect (bind (mem_fun(*this, &GenericPluginUI::control_port_toggled), control_ui));
-                       mcontrol->Changed.connect (bind (mem_fun (*this, &GenericPluginUI::toggle_parameter_changed), control_ui));
-                       
+                       control_ui->button->signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::control_port_toggled), control_ui));
+                       mcontrol->Changed.connect (control_connections, invalidator (*this), boost::bind (&GenericPluginUI::toggle_parameter_changed, this, control_ui), gui_context());
+
                        if (plugin->get_parameter (port_index) > 0.5){
                                control_ui->button->set_active(true);
                        }
-                       
+
                        return control_ui;
                }
 
@@ -495,8 +497,8 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                        control_ui->controller->adjustment()->set_upper (log(control_ui->controller->adjustment()->get_upper()));
                        control_ui->controller->adjustment()->set_lower (log(control_ui->controller->adjustment()->get_lower()));
                }*/
-               
-       
+
+
                control_ui->controller->adjustment()->set_step_increment (desc.step);
                control_ui->controller->adjustment()->set_page_increment (desc.largestep);
 //#endif
@@ -506,16 +508,16 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                        Gtkmm2ext::set_size_request_to_display_given_text (*control_ui->clickbox, "g9999999", 2, 2);
                        control_ui->clickbox->set_print_func (integer_printer, 0);
                } else {
-                       //sigc::slot<void,char*,uint32_t> pslot = sigc::bind (mem_fun(*this, &GenericPluginUI::print_parameter), (uint32_t) port_index);
+                       //sigc::slot<void,char*,uint32_t> pslot = sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::print_parameter), (uint32_t) port_index);
 
                        control_ui->controller->set_size_request (200, req.height);
                        control_ui->controller->set_name (X_("PluginSlider"));
                        control_ui->controller->set_style (BarController::LeftToRight);
                        control_ui->controller->set_use_parent (true);
 
-                       control_ui->controller->StartGesture.connect (bind (mem_fun(*this, &GenericPluginUI::start_touch), control_ui));
-                       control_ui->controller->StopGesture.connect (bind (mem_fun(*this, &GenericPluginUI::stop_touch), control_ui));
-                       
+                       control_ui->controller->StartGesture.connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::start_touch), control_ui));
+                       control_ui->controller->StopGesture.connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::stop_touch), control_ui));
+
                }
 
                if (control_ui->logarithmic) {
@@ -537,13 +539,14 @@ GenericPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automat
                }
 
                control_ui->pack_start (control_ui->automate_button, false, false);
-               control_ui->automate_button.signal_clicked().connect (bind (mem_fun(*this, &GenericPluginUI::astate_clicked), control_ui, (uint32_t) port_index));
+               control_ui->automate_button.signal_clicked().connect (sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::astate_clicked), control_ui, (uint32_t) port_index));
 
                automation_state_changed (control_ui);
 
-               mcontrol->Changed.connect (bind (mem_fun (*this, &GenericPluginUI::parameter_changed), control_ui));
-               mcontrol->alist()->automation_state_changed.connect 
-                       (bind (mem_fun(*this, &GenericPluginUI::automation_state_changed), control_ui));
+               mcontrol->Changed.connect (control_connections, invalidator (*this), boost::bind (&GenericPluginUI::parameter_changed, this, control_ui), gui_context());
+               mcontrol->alist()->automation_state_changed.connect (control_connections, invalidator (*this), boost::bind (&GenericPluginUI::automation_state_changed, this, control_ui), gui_context());
+
+               input_controls.push_back (control_ui);
 
        } else if (plugin->parameter_is_output (port_index)) {
 
@@ -564,7 +567,7 @@ 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->min_unbound = desc.min_unbound;
@@ -575,25 +578,25 @@ 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->label.set_angle(90);
                control_ui->hbox->pack_start (control_ui->label, false, false);
                control_ui->hbox->pack_start (*info->meter, false, false);
 
                control_ui->vbox->pack_start (*control_ui->hbox, false, false);
-               
+
                control_ui->vbox->pack_start (*control_ui->display, false, false);
 
                control_ui->pack_start (*control_ui->vbox);
 
                control_ui->meterinfo->meter->show_all();
                control_ui->meterinfo->packed = true;
-               
+
                output_controls.push_back (control_ui);
        }
-       
-       mcontrol->Changed.connect (bind (mem_fun (*this, &GenericPluginUI::parameter_changed), control_ui));
-       
+
+       mcontrol->Changed.connect (control_connections, invalidator (*this), boost::bind (&GenericPluginUI::parameter_changed, this, control_ui), gui_context());
+
        return control_ui;
 }
 
@@ -610,26 +613,26 @@ GenericPluginUI::stop_touch (GenericPluginUI::ControlUI* cui)
 }
 
 void
-GenericPluginUI::astate_clicked (ControlUI* cui, uint32_t port)
+GenericPluginUI::astate_clicked (ControlUI* cui, uint32_t /*port*/)
 {
        using namespace Menu_Helpers;
 
        if (automation_menu == 0) {
                automation_menu = manage (new Menu);
                automation_menu->set_name ("ArdourContextMenu");
-       } 
+       }
 
        MenuList& items (automation_menu->items());
 
        items.clear ();
-       items.push_back (MenuElem (_("Manual"), 
-                                  bind (mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Off, cui)));
+       items.push_back (MenuElem (_("Manual"),
+                                  sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Off, cui)));
        items.push_back (MenuElem (_("Play"),
-                                  bind (mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Play, cui)));
+                                  sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Play, cui)));
        items.push_back (MenuElem (_("Write"),
-                                  bind (mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Write, cui)));
+                                  sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Write, cui)));
        items.push_back (MenuElem (_("Touch"),
-                                  bind (mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Touch, cui)));
+                                  sigc::bind (sigc::mem_fun(*this, &GenericPluginUI::set_automation_state), (AutoState) Touch, cui)));
 
        automation_menu->popup (1, gtk_get_current_event_time());
 }
@@ -644,7 +647,7 @@ void
 GenericPluginUI::toggle_parameter_changed (ControlUI* cui)
 {
        float val = cui->control->get_value();
-       
+
        if (!cui->ignore_change) {
                if (val > 0.5) {
                        cui->button->set_active (true);
@@ -659,15 +662,15 @@ GenericPluginUI::parameter_changed (ControlUI* cui)
 {
        if (!cui->update_pending) {
                cui->update_pending = true;
-               Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun(*this, &GenericPluginUI::update_control_display), cui));
+               Gtkmm2ext::UI::instance()->call_slot (MISSING_INVALIDATOR, boost::bind (&GenericPluginUI::update_control_display, this, cui));
        }
 }
 
 void
-GenericPluginUI::update_control_display (ControlUI* cui)       
+GenericPluginUI::update_control_display (ControlUI* cui)
 {
        /* XXX how do we handle logarithmic stuff here ? */
-       
+
        cui->update_pending = false;
 
        float val = cui->control->get_value();
@@ -728,30 +731,35 @@ GenericPluginUI::control_combo_changed (ControlUI* cui)
 void
 GenericPluginUI::processor_active_changed (boost::weak_ptr<Processor> weak_processor)
 {
-       ENSURE_GUI_THREAD(bind (mem_fun(*this, &GenericPluginUI::processor_active_changed), weak_processor));
-       
+       ENSURE_GUI_THREAD (*this, &GenericPluginUI::processor_active_changed, weak_processor)
+
        boost::shared_ptr<Processor> processor = weak_processor.lock();
 
        bypass_button.set_active (!processor || !processor->active());
 }
 
 bool
-GenericPluginUI::start_updating (GdkEventAny* ignored)
+GenericPluginUI::start_updating (GdkEventAny*)
 {
        if (output_controls.size() > 0 ) {
                screen_update_connection.disconnect();
-               screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect 
-                       (mem_fun(*this, &GenericPluginUI::output_update));
+               screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect
+                       (sigc::mem_fun(*this, &GenericPluginUI::output_update));
        }
        return false;
 }
 
 bool
-GenericPluginUI::stop_updating (GdkEventAny* ignored)
+GenericPluginUI::stop_updating (GdkEventAny*)
 {
+       for (vector<ControlUI*>::iterator i = input_controls.begin(); i != input_controls.end(); ++i) {
+               (*i)->controller->stop_updating ();
+       }
+       
        if (output_controls.size() > 0 ) {
                screen_update_connection.disconnect();
        }
+       
        return false;
 }
 
@@ -766,7 +774,7 @@ GenericPluginUI::output_update ()
 
                /* autoscaling for the meter */
                if ((*i)->meterinfo && (*i)->meterinfo->packed) {
-                       
+
                        if (val < (*i)->meterinfo->min) {
                                if ((*i)->meterinfo->min_unbound)
                                        (*i)->meterinfo->min = val;
@@ -780,7 +788,7 @@ GenericPluginUI::output_update ()
                                else
                                        val = (*i)->meterinfo->max;
                        }
-                       
+
                        if ((*i)->meterinfo->max > (*i)->meterinfo->min ) {
                                float lval = (val - (*i)->meterinfo->min) / ((*i)->meterinfo->max - (*i)->meterinfo->min) ;
                                (*i)->meterinfo->meter->set (lval );
@@ -789,7 +797,7 @@ GenericPluginUI::output_update ()
        }
 }
 
-vector<string> 
+vector<string>
 GenericPluginUI::setup_scale_values(guint32 port_index, ControlUI* cui)
 {
        vector<string> enums;
@@ -822,7 +830,7 @@ GenericPluginUI::setup_scale_values(guint32 port_index, ControlUI* cui)
                SLV2Port port = lv2p->slv2_port(port_index);
                SLV2ScalePoints points = slv2_port_get_scale_points(lv2p->slv2_plugin(), port);
                cui->combo_map = new std::map<string, float>;
-       
+
                for (unsigned i=0; i < slv2_scale_points_size(points); ++i) {
                        SLV2ScalePoint p = slv2_scale_points_get_at(points, i);
                        SLV2Value label = slv2_scale_point_get_label(p);
@@ -839,7 +847,7 @@ GenericPluginUI::setup_scale_values(guint32 port_index, ControlUI* cui)
                slv2_scale_points_free(points);
 #endif
        }
-       
+
 
        return enums;
 }