improve sysex data display.
[ardour.git] / gtk2_ardour / ardour_ui.cc
index d9ea44c3256821b4cf83f7c54dca3c7936be6c32..5f77c7c0386fd72d7b683436b8988fdbcf91f742 100644 (file)
@@ -273,13 +273,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        , _initial_verbose_plugin_scan (false)
        , first_time_engine_run (true)
        , secondary_clock_spacer (0)
-       , roll_controllable (new TransportControllable ("transport roll", *this, TransportControllable::Roll))
-       , stop_controllable (new TransportControllable ("transport stop", *this, TransportControllable::Stop))
-       , goto_start_controllable (new TransportControllable ("transport goto start", *this, TransportControllable::GotoStart))
-       , goto_end_controllable (new TransportControllable ("transport goto end", *this, TransportControllable::GotoEnd))
-       , auto_loop_controllable (new TransportControllable ("transport auto loop", *this, TransportControllable::AutoLoop))
-       , play_selection_controllable (new TransportControllable ("transport play selection", *this, TransportControllable::PlaySelection))
-       , rec_controllable (new TransportControllable ("transport rec-enable", *this, TransportControllable::RecordEnable))
        , auto_input_button (ArdourButton::led_default_elements)
        , time_info_box (0)
        , auto_return_button (ArdourButton::led_default_elements)
@@ -362,13 +355,22 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], const char* localedir)
        boost::function<void (string)> pc (boost::bind (&ARDOUR_UI::parameter_changed, this, _1));
        UIConfiguration::instance().map_parameters (pc);
 
-       roll_button.set_controllable (roll_controllable);
-       stop_button.set_controllable (stop_controllable);
-       goto_start_button.set_controllable (goto_start_controllable);
-       goto_end_button.set_controllable (goto_end_controllable);
-       auto_loop_button.set_controllable (auto_loop_controllable);
-       play_selection_button.set_controllable (play_selection_controllable);
-       rec_button.set_controllable (rec_controllable);
+       Glib::RefPtr<Gtk::Action> act;
+
+       act = ActionManager::get_action ("Transport/Roll");
+       roll_button.set_related_action (act);
+       act = ActionManager::get_action ("Transport/Stop");
+       stop_button.set_related_action (act);
+       act = ActionManager::get_action ("Transport/GotoStart");
+       goto_start_button.set_related_action (act);
+       act = ActionManager::get_action ("Transport/GotoEnd");
+       goto_end_button.set_related_action (act);
+       act = ActionManager::get_action ("Transport/Loop");
+       auto_loop_button.set_related_action (act);
+       act = ActionManager::get_action ("Transport/PlaySelection");
+       play_selection_button.set_related_action (act);
+       act = ActionManager::get_action ("Transport/Record");
+       rec_button.set_related_action (act);
 
        roll_button.set_name ("transport button");
        stop_button.set_name ("transport button");
@@ -746,6 +748,7 @@ ARDOUR_UI::~ARDOUR_UI ()
                delete luawindow; luawindow = 0;
                delete editor; editor = 0;
                delete mixer; mixer = 0;
+               delete rc_option_editor; rc_option_editor = 0; // failed to wrap object warning
                delete nsm; nsm = 0;
                delete gui_object_state; gui_object_state = 0;
                delete main_window_visibility;
@@ -804,63 +807,6 @@ ARDOUR_UI::configure_handler (GdkEventConfigure* /*conf*/)
        return FALSE;
 }
 
-void
-ARDOUR_UI::set_transport_controllable_state (const XMLNode& node)
-{
-       XMLProperty const * prop;
-
-       if ((prop = node.property ("roll")) != 0) {
-               roll_controllable->set_id (prop->value());
-       }
-       if ((prop = node.property ("stop")) != 0) {
-               stop_controllable->set_id (prop->value());
-       }
-       if ((prop = node.property ("goto-start")) != 0) {
-               goto_start_controllable->set_id (prop->value());
-       }
-       if ((prop = node.property ("goto-end")) != 0) {
-               goto_end_controllable->set_id (prop->value());
-       }
-       if ((prop = node.property ("auto-loop")) != 0) {
-               auto_loop_controllable->set_id (prop->value());
-       }
-       if ((prop = node.property ("play-selection")) != 0) {
-               play_selection_controllable->set_id (prop->value());
-       }
-       if ((prop = node.property ("rec")) != 0) {
-               rec_controllable->set_id (prop->value());
-       }
-       if ((prop = node.property ("shuttle")) != 0) {
-               shuttle_box.controllable()->set_id (prop->value());
-       }
-}
-
-XMLNode&
-ARDOUR_UI::get_transport_controllable_state ()
-{
-       XMLNode* node = new XMLNode(X_("TransportControllables"));
-       char buf[64];
-
-       roll_controllable->id().print (buf, sizeof (buf));
-       node->add_property (X_("roll"), buf);
-       stop_controllable->id().print (buf, sizeof (buf));
-       node->add_property (X_("stop"), buf);
-       goto_start_controllable->id().print (buf, sizeof (buf));
-       node->add_property (X_("goto_start"), buf);
-       goto_end_controllable->id().print (buf, sizeof (buf));
-       node->add_property (X_("goto_end"), buf);
-       auto_loop_controllable->id().print (buf, sizeof (buf));
-       node->add_property (X_("auto_loop"), buf);
-       play_selection_controllable->id().print (buf, sizeof (buf));
-       node->add_property (X_("play_selection"), buf);
-       rec_controllable->id().print (buf, sizeof (buf));
-       node->add_property (X_("rec"), buf);
-       shuttle_box.controllable()->id().print (buf, sizeof (buf));
-       node->add_property (X_("shuttle"), buf);
-
-       return *node;
-}
-
 void
 ARDOUR_UI::save_session_at_its_request (std::string snapshot_name)
 {
@@ -1939,15 +1885,18 @@ ARDOUR_UI::session_add_mixed_track (
                Plugin::PresetRecord* pset,
                ARDOUR::PresentationInfo::order_t order)
 {
-       list<boost::shared_ptr<MidiTrack> > tracks;
-
        if (_session == 0) {
                warning << _("You cannot add a track without a session already loaded.") << endmsg;
                return;
        }
 
+       if (Profile->get_mixbus ()) {
+               strict_io = true;
+       }
+
        try {
-               tracks = _session->new_midi_track (input, output, instrument, pset, route_group, how_many, name_template, order, ARDOUR::Normal);
+               list<boost::shared_ptr<MidiTrack> > tracks;
+               tracks = _session->new_midi_track (input, output, strict_io, instrument, pset, route_group, how_many, name_template, order, ARDOUR::Normal);
 
                if (tracks.size() != how_many) {
                        error << string_compose(P_("could not create %1 new mixed track", "could not create %1 new mixed tracks", how_many), how_many) << endmsg;
@@ -1958,12 +1907,6 @@ ARDOUR_UI::session_add_mixed_track (
                display_insufficient_ports_message ();
                return;
        }
-
-       if (strict_io) {
-               for (list<boost::shared_ptr<MidiTrack> >::iterator i = tracks.begin(); i != tracks.end(); ++i) {
-                       (*i)->set_strict_io (true);
-               }
-       }
 }
 
 void
@@ -1976,16 +1919,18 @@ ARDOUR_UI::session_add_midi_bus (
                Plugin::PresetRecord* pset,
                ARDOUR::PresentationInfo::order_t order)
 {
-       RouteList routes;
-
        if (_session == 0) {
                warning << _("You cannot add a track without a session already loaded.") << endmsg;
                return;
        }
 
-       try {
+       if (Profile->get_mixbus ()) {
+               strict_io = true;
+       }
 
-               routes = _session->new_midi_route (route_group, how_many, name_template, instrument, pset, PresentationInfo::MidiBus, order);
+       try {
+               RouteList routes;
+               routes = _session->new_midi_route (route_group, how_many, name_template, strict_io, instrument, pset, PresentationInfo::MidiBus, order);
                if (routes.size() != how_many) {
                        error << string_compose(P_("could not create %1 new Midi Bus", "could not create %1 new Midi Busses", how_many), how_many) << endmsg;
                }
@@ -1995,12 +1940,6 @@ ARDOUR_UI::session_add_midi_bus (
                display_insufficient_ports_message ();
                return;
        }
-
-       if (strict_io) {
-               for (RouteList::iterator i = routes.begin(); i != routes.end(); ++i) {
-                       (*i)->set_strict_io (true);
-               }
-       }
 }
 
 void
@@ -3610,16 +3549,6 @@ ARDOUR_UI::load_session (const std::string& path, const std::string& snap_name,
                msg.hide ();
        }
 
-
-       /* Now the session been created, add the transport controls */
-       new_session->add_controllable(roll_controllable);
-       new_session->add_controllable(stop_controllable);
-       new_session->add_controllable(goto_start_controllable);
-       new_session->add_controllable(goto_end_controllable);
-       new_session->add_controllable(auto_loop_controllable);
-       new_session->add_controllable(play_selection_controllable);
-       new_session->add_controllable(rec_controllable);
-
        set_session (new_session);
 
        session_loaded = true;
@@ -5078,10 +5007,6 @@ Menu > Window > Audio/Midi Setup"),
 void
 ARDOUR_UI::use_config ()
 {
-       XMLNode* node = Config->extra_xml (X_("TransportControllables"));
-       if (node) {
-               set_transport_controllable_state (*node);
-       }
 }
 
 void
@@ -5176,86 +5101,6 @@ ARDOUR_UI::store_clock_modes ()
        _session->set_dirty ();
 }
 
-ARDOUR_UI::TransportControllable::TransportControllable (std::string name, ARDOUR_UI& u, ToggleType tp)
-       : Controllable (name), ui (u), type(tp)
-{
-
-}
-
-void
-ARDOUR_UI::TransportControllable::set_value (double val, PBD::Controllable::GroupControlDisposition /*group_override*/)
-{
-       if (val < 0.5) {
-               /* do nothing: these are radio-style actions */
-               return;
-       }
-
-       const char *action = 0;
-
-       switch (type) {
-       case Roll:
-               action = X_("Roll");
-               break;
-       case Stop:
-               action = X_("Stop");
-               break;
-       case GotoStart:
-               action = X_("GotoStart");
-               break;
-       case GotoEnd:
-               action = X_("GotoEnd");
-               break;
-       case AutoLoop:
-               action = X_("Loop");
-               break;
-       case PlaySelection:
-               action = X_("PlaySelection");
-               break;
-       case RecordEnable:
-               action = X_("Record");
-               break;
-       default:
-               break;
-       }
-
-       if (action == 0) {
-               return;
-       }
-
-       Glib::RefPtr<Action> act = ActionManager::get_action ("Transport", action);
-
-       if (act) {
-               act->activate ();
-       }
-}
-
-double
-ARDOUR_UI::TransportControllable::get_value (void) const
-{
-       float val = 0.0;
-
-       switch (type) {
-       case Roll:
-               break;
-       case Stop:
-               break;
-       case GotoStart:
-               break;
-       case GotoEnd:
-               break;
-       case AutoLoop:
-               break;
-       case PlaySelection:
-               break;
-       case RecordEnable:
-               break;
-       default:
-               break;
-       }
-
-       return val;
-}
-
 void
 ARDOUR_UI::setup_profile ()
 {
@@ -5566,7 +5411,7 @@ ARDOUR_UI::setup_toplevel_window (Gtk::Window& window, const string& name, void*
        }
 
        window.set_title (title.get_string());
-       window.set_wmclass (string_compose (X_("%1_%1"), downcase (PROGRAM_NAME), downcase (name)), PROGRAM_NAME);
+       window.set_wmclass (string_compose (X_("%1_%1"), downcase (std::string(PROGRAM_NAME)), downcase (name)), PROGRAM_NAME);
 
        window.set_flags (CAN_FOCUS);
        window.add_events (Gdk::KEY_PRESS_MASK|Gdk::KEY_RELEASE_MASK);