OSC: port mode by default should be manual
[ardour.git] / libs / surfaces / osc / osc_gui.cc
index 9c07bb40d5e38dfe514280f0a3e3f1733b410375..a78b9d2c5f64df1128c881b892059c6ce63ea0c1 100644 (file)
@@ -22,7 +22,6 @@
 #include <list>
 #include <string>
 #include <vector>
-//#include <glibmm/miscutils.h>
 
 #include <errno.h>
 
@@ -59,8 +58,7 @@ OSC_GUI::OSC_GUI (OSC& p)
        int n = 0; // table row
        Table* table = manage (new Table);
        Label* label;
-       Button* button;
-       table->set_row_spacings (10);
+       table->set_row_spacings (16);
        table->set_col_spacings (6);
        table->set_border_width (12);
        get_session ();
@@ -80,8 +78,8 @@ OSC_GUI::OSC_GUI (OSC& p)
        table->attach (*label, 0, 1, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0));
        table->attach (portmode_combo, 1, 2, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0), 0, 0);
        std::vector<std::string> portmode_options;
-       portmode_options.push_back (_("Auto"));
-       portmode_options.push_back (_("Manual"));
+       portmode_options.push_back (_("Auto - Reply to Originating Port"));
+       portmode_options.push_back (_("Manual - Specify Below"));
 
        set_popdown_strings (portmode_combo, portmode_options);
        portmode_combo.set_active ((int)cp.get_portmode());
@@ -111,14 +109,36 @@ OSC_GUI::OSC_GUI (OSC& p)
 
        ++n;
 
+       // default send page setting
+       label = manage (new Gtk::Label(_("Send Page Size:")));
+       label->set_alignment(1, .5);
+       table->attach (*label, 0, 1, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0));
+       table->attach (send_page_entry, 1, 2, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0), 0, 0);
+       send_page_entry.set_range (0, 0xffff);
+       send_page_entry.set_increments (1, 8);
+       send_page_entry.set_value (cp.get_send_size());
+
+       ++n;
+
+       // default plugin page setting
+       label = manage (new Gtk::Label(_("Plugin Page Size:")));
+       label->set_alignment(1, .5);
+       table->attach (*label, 0, 1, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0));
+       table->attach (plugin_page_entry, 1, 2, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0), 0, 0);
+       plugin_page_entry.set_range (0, 0xffff);
+       plugin_page_entry.set_increments (1, 8);
+       plugin_page_entry.set_value (cp.get_send_size());
+
+       ++n;
+
        // Gain Mode
        label = manage (new Gtk::Label(_("Gain Mode:")));
        label->set_alignment(1, .5);
        table->attach (*label, 0, 1, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0));
        table->attach (gainmode_combo, 1, 2, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0), 0, 0);
        std::vector<std::string> gainmode_options;
-       gainmode_options.push_back (_("dB"));
-       gainmode_options.push_back (_("Position"));
+       gainmode_options.push_back (_("/strip/gain (dB)"));
+       gainmode_options.push_back (_("/strip/fader (Position)"));
 
        set_popdown_strings (gainmode_combo, gainmode_options);
        gainmode_combo.set_active ((int)cp.get_gainmode());
@@ -160,19 +180,17 @@ OSC_GUI::OSC_GUI (OSC& p)
        preset_combo.signal_changed().connect (sigc::mem_fun (*this, &OSC_GUI::preset_changed));
        ++n;
 
-       // refresh button
-       button = manage (new Gtk::Button(_("Clear OSC Devices")));
-       table->attach (*button, 0, 2, n, n+1, AttachOptions(FILL|EXPAND), AttachOptions(0), 0, 10);
-
        table->show_all ();
        append_page (*table, _("OSC Setup"));
 
        debug_combo.signal_changed().connect (sigc::mem_fun (*this, &OSC_GUI::debug_changed));
        portmode_combo.signal_changed().connect (sigc::mem_fun (*this, &OSC_GUI::portmode_changed));
        gainmode_combo.signal_changed().connect (sigc::mem_fun (*this, &OSC_GUI::gainmode_changed));
-       button->signal_clicked().connect (sigc::mem_fun (*this, &OSC_GUI::clear_device));
-       port_entry.signal_activate().connect (sigc::mem_fun (*this, &OSC_GUI::port_changed));
-       bank_entry.signal_activate().connect (sigc::mem_fun (*this, &OSC_GUI::bank_changed));
+       port_entry.signal_changed().connect (sigc::mem_fun (*this, &OSC_GUI::port_changed));
+       port_entry.signal_focus_out_event().connect (sigc::mem_fun (*this, &OSC_GUI::port_focus_out));
+       bank_entry.signal_changed().connect (sigc::mem_fun (*this, &OSC_GUI::bank_changed));
+       send_page_entry.signal_changed().connect (sigc::mem_fun (*this, &OSC_GUI::send_page_changed));
+       plugin_page_entry.signal_changed().connect (sigc::mem_fun (*this, &OSC_GUI::plugin_page_changed));
 
        // Strip Types Calculate Page
        int stn = 0; // table row
@@ -363,6 +381,12 @@ OSC_GUI::OSC_GUI (OSC& p)
        fbtable->attach (select_fb, 1, 2, fn, fn+1, AttachOptions(FILL|EXPAND), AttachOptions(0), 0, 0);
        ++fn;
 
+       label = manage (new Gtk::Label(_("Use /reply instead of #reply:")));
+       label->set_alignment(1, .5);
+       fbtable->attach (*label, 0, 1, fn, fn+1, AttachOptions(FILL|EXPAND), AttachOptions(0));
+       fbtable->attach (use_osc10, 1, 2, fn, fn+1, AttachOptions(FILL|EXPAND), AttachOptions(0), 0, 0);
+       ++fn;
+
        fbtable->show_all ();
        append_page (*fbtable, _("Default Feedback"));
        // set strips and feedback from loaded default values
@@ -392,6 +416,7 @@ OSC_GUI::OSC_GUI (OSC& p)
        hp_min_sec.signal_clicked().connect (sigc::mem_fun (*this, &OSC_GUI::set_bitsets));
        hp_gui.signal_clicked().connect (sigc::mem_fun (*this, &OSC_GUI::set_bitsets));
        select_fb.signal_clicked().connect (sigc::mem_fun (*this, &OSC_GUI::set_bitsets));
+       use_osc10.signal_clicked().connect (sigc::mem_fun (*this, &OSC_GUI::set_bitsets));
        preset_busy = false;
 
 }
@@ -472,18 +497,12 @@ OSC_GUI::debug_changed ()
 void
 OSC_GUI::portmode_changed ()
 {
-       std::string str = portmode_combo.get_active_text ();
-       if (str == _("Auto")) {
-               cp.set_portmode (0);
-               port_entry.set_sensitive (false);
-       }
-       else if (str == _("Manual")) {
-               cp.set_portmode (1);
+       int pm = portmode_combo.get_active_row_number ();
+       cp.set_portmode (pm);
+       if (pm) {
                port_entry.set_sensitive (true);
-       }
-       else {
-               std::cerr << "Invalid OSC Port Mode\n";
-               assert (0);
+       } else {
+               port_entry.set_sensitive (false);
        }
        save_user ();
 }
@@ -492,31 +511,67 @@ void
 OSC_GUI::port_changed ()
 {
        std::string str = port_entry.get_text ();
-       if (port_entry.get_value() == 3819) {
-               str = "8000";
-               port_entry.set_value (8000);
+       int prt = atoi (str.c_str());
+       if (prt == 3819 || prt < 1024) {
+               // indicate non-valid text
+               port_entry.set_progress_fraction (1.0);
+       } else {
+               port_entry.set_progress_fraction (0.0);
+               cp.set_remote_port (string_compose ("%1", prt));
+               save_user ();
        }
-       cp.set_remote_port (str);
-       save_user ();
+}
+
+bool
+OSC_GUI::port_focus_out (GdkEventFocus* )
+{
+       std::string str = port_entry.get_text ();
+       int prt = atoi (str.c_str());
+       if (prt == 3819 || prt < 1024) {
+               port_entry.set_text(cp.get_remote_port().c_str());
+               port_entry.set_progress_fraction (0.0);
+       }
+       return false;
 }
 
 void
 OSC_GUI::bank_changed ()
 {
-       uint32_t bsize = bank_entry.get_value ();
+       uint32_t bsize = atoi(bank_entry.get_text ());
+       bank_entry.set_text (string_compose ("%1", bsize));
        cp.set_banksize (bsize);
        save_user ();
 
 }
 
+void
+OSC_GUI::send_page_changed ()
+{
+       uint32_t ssize = atoi (send_page_entry.get_text ());
+       send_page_entry.set_text (string_compose ("%1", ssize));
+       cp.set_send_size (ssize);
+       save_user ();
+
+}
+
+void
+OSC_GUI::plugin_page_changed ()
+{
+       uint32_t psize = atoi (plugin_page_entry.get_text ());
+       plugin_page_entry.set_text (string_compose ("%1", psize));
+       cp.set_plugin_size (psize);
+       save_user ();
+
+}
+
 void
 OSC_GUI::gainmode_changed ()
 {
        std::string str = gainmode_combo.get_active_text ();
-       if (str == _("dB")) {
+       if (str == _("/strip/gain (dB)")) {
                cp.set_gainmode (0);
        }
-       else if (str == _("Position")) {
+       else if (str == _("/strip/fader (Position)")) {
                cp.set_gainmode (1);
        }
        else {
@@ -549,6 +604,7 @@ OSC_GUI::preset_changed ()
        else {
                load_preset (str);
        }
+       cp.clear_devices ();
        preset_busy = false;
 }
 
@@ -556,16 +612,20 @@ void
 OSC_GUI::factory_reset ()
 {
        cp.set_banksize (0);
-       bank_entry.set_value (0);
+       bank_entry.set_text ("0");
+       cp.set_send_size (0);
+       send_page_entry.set_text ("0");
+       cp.set_plugin_size (0);
+       plugin_page_entry.set_text ("0");
        cp.set_defaultstrip (159);
        cp.set_defaultfeedback (0);
        reshow_values ();
        cp.set_gainmode (0);
        gainmode_combo.set_active (0);
-       cp.set_portmode (0);
-       portmode_combo.set_active (0);
+       cp.set_portmode (1);
+       portmode_combo.set_active (1);
        cp.set_remote_port ("8000");
-       port_entry.set_value (8000);
+       port_entry.set_text ("8000");
        cp.clear_devices ();
        cp.gui_changed ();
 }
@@ -599,6 +659,7 @@ OSC_GUI::reshow_values ()
        hp_min_sec.set_active (def_feedback & 2048);
        //hp_gui.set_active (false); // we don't have this yet (Mixbus wants)
        select_fb.set_active(def_feedback & 8192);
+       use_osc10.set_active(def_feedback & 16384);
 
        calculate_strip_types ();
        calculate_feedback ();
@@ -650,6 +711,9 @@ OSC_GUI::calculate_feedback ()
        if (select_fb.get_active()) {
                fbvalue += 8192;
        }
+       if (use_osc10.get_active()) {
+               fbvalue += 16384;
+       }
 
        current_feedback.set_text(string_compose("%1", fbvalue));
 }
@@ -764,7 +828,7 @@ OSC_GUI::save_user ()
        std::string fullpath = user_preset_directory();
 
        if (g_mkdir_with_parents (fullpath.c_str(), 0755) < 0) {
-               error << string_compose(_("Session: cannot create user MCP profile folder \"%1\" (%2)"), fullpath, strerror (errno)) << endmsg;
+               error << string_compose(_("Session: cannot create user OSC profile folder \"%1\" (%2)"), fullpath, strerror (errno)) << endmsg;
                return;
        }
 
@@ -788,6 +852,14 @@ OSC_GUI::save_user ()
        child->set_property ("value", cp.get_banksize());
        node->add_child_nocopy (*child);
 
+       child = new XMLNode ("Send-Size");
+       child->set_property ("value", cp.get_send_size());
+       node->add_child_nocopy (*child);
+
+       child = new XMLNode ("Plugin-Size");
+       child->set_property ("value", cp.get_plugin_size());
+       node->add_child_nocopy (*child);
+
        child = new XMLNode ("Strip-Types");
        child->set_property ("value", cp.get_defaultstrip());
        node->add_child_nocopy (*child);
@@ -804,10 +876,11 @@ OSC_GUI::save_user ()
        tree.set_root (node);
 
        if (!tree.write (fullpath)) {
-               error << string_compose ("MCP profile not saved to %1", fullpath) << endmsg;
+               error << string_compose ("OSC profile not saved to %1", fullpath) << endmsg;
        }
        preset_combo.set_active (2);
        cp.gui_changed();
+       clear_device ();
 
 }
 
@@ -857,10 +930,24 @@ OSC_GUI::load_preset (std::string preset)
                }
                if ((child = root->child ("Bank-Size")) == 0 || (prop = child->property ("value")) == 0) {
                        cp.set_banksize (sesn_bank);
-                       bank_entry.set_value (sesn_bank);
+                       bank_entry.set_text (string_compose("%1", sesn_bank));
                } else {
                        cp.set_banksize (atoi (prop->value().c_str()));
-                       bank_entry.set_value (atoi (prop->value().c_str()));
+                       bank_entry.set_text (prop->value().c_str());
+               }
+               if ((child = root->child ("Send-Size")) == 0 || (prop = child->property ("value")) == 0) {
+                       cp.set_send_size (sesn_send);
+                       send_page_entry.set_text (string_compose("%1", sesn_send));
+               } else {
+                       cp.set_send_size (atoi (prop->value().c_str()));
+                       send_page_entry.set_text (prop->value().c_str());
+               }
+               if ((child = root->child ("Plugin-Size")) == 0 || (prop = child->property ("value")) == 0) {
+                       cp.set_plugin_size (sesn_plugin);
+                       plugin_page_entry.set_text (string_compose("%1", sesn_plugin));
+               } else {
+                       cp.set_plugin_size (atoi (prop->value().c_str()));
+                       plugin_page_entry.set_text (prop->value().c_str());
                }
                if ((child = root->child ("Strip-Types")) == 0 || (prop = child->property ("value")) == 0) {
                        cp.set_defaultstrip (sesn_strips);
@@ -892,6 +979,8 @@ OSC_GUI::get_session ()
        sesn_portmode = cp.get_portmode ();
        sesn_port = cp.get_remote_port ();
        sesn_bank = cp.get_banksize ();
+       sesn_send = cp.get_send_size ();
+       sesn_plugin = cp.get_plugin_size ();
        sesn_strips = cp.get_defaultstrip ();
        sesn_feedback = cp.get_defaultfeedback ();
        sesn_gainmode = cp.get_gainmode ();
@@ -905,7 +994,11 @@ OSC_GUI::restore_sesn_values ()
        cp.set_remote_port (sesn_port);
        port_entry.set_text (sesn_port);
        cp.set_banksize (sesn_bank);
-       bank_entry.set_value (sesn_bank);
+       bank_entry.set_text (string_compose ("%1", sesn_bank));
+       cp.set_send_size (sesn_send);
+       send_page_entry.set_text (string_compose ("%1", sesn_send));
+       cp.set_plugin_size (sesn_plugin);
+       plugin_page_entry.set_text (string_compose ("%1", sesn_plugin));
        cp.set_defaultstrip (sesn_strips);
        cp.set_defaultfeedback (sesn_feedback);
        reshow_values ();