merge from trunk
authorHans Fugal <hans@fugal.net>
Wed, 9 Aug 2006 21:31:36 +0000 (21:31 +0000)
committerHans Fugal <hans@fugal.net>
Wed, 9 Aug 2006 21:31:36 +0000 (21:31 +0000)
git-svn-id: svn://localhost/ardour2/branches/undo@773 d708f5d6-7413-0410-9779-e7cbd77b26cf

16 files changed:
SConstruct
gtk2_ardour/automation_time_axis.cc
gtk2_ardour/main.cc
gtk2_ardour/new_session_dialog.cc
gtk2_ardour/new_session_dialog.h
gtk2_ardour/opts.cc
gtk2_ardour/plugin_ui.cc
gtk2_ardour/plugin_ui.h
gtk2_ardour/route_params_ui.cc
libs/ardour/ardour/audio_unit.h
libs/ardour/ardour/route.h
libs/ardour/ardour/tempo.h
libs/ardour/ardour/track.h
libs/ardour/audio_unit.cc
libs/ardour/io.cc
libs/ardour/track.cc

index e93aad96a85bfa18e938bb440f5522a614cb8a69..8f23417a07aa5010f6f08a7bbf6c463411f668b7 100644 (file)
@@ -454,6 +454,8 @@ conf = Configure (libraries['flac'])
 conf.CheckLib ('FLAC', 'FLAC__stream_decoder_new', language='CXX')
 libraries['flac'] = conf.Finish ()
 
+libraries['flac']    = LibraryInfo (LIBS='FLAC')
+
 #
 # Check for liblo
 
index 6e2a93889f46504cb5f4def427dc5603544b3096..7025a11178371dfef981b576f72e890af63a2dcd 100644 (file)
@@ -102,7 +102,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
                }
        }
        name_label.set_text (shortpname);
-       name_label.set_alignment (1.0, 0.5);
+       name_label.set_alignment (Gtk::ALIGN_CENTER, Gtk::ALIGN_CENTER);
 
        if (nomparent.length()) {
 
@@ -118,7 +118,6 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
 
                plugname = new Label (pname);
                plugname->set_name (X_("TrackPlugName"));
-               plugname->set_alignment (1.0, 0.5);
                plugname->show();
                name_label.set_name (X_("TrackParameterName"));
                controls_table.remove (name_hbox);
index 047bb130a4b218771cdb0ed9522b5c21a573b8a0..d2550754f69e9ac650611b49d091baf3cab7a131 100644 (file)
@@ -293,60 +293,43 @@ Please consider the possibilities, and perhaps (re)start JACK."));
 static bool
 maybe_load_session ()
 {
+       /* If no session name is given: we're not loading a session yet, nor creating a new one */
+       if (!session_name.length()) {
+               ui->hide_splash ();
+               if (!Config->get_no_new_session_dialog()) {
+                      ui->new_session (true);
+               }
 
-       /* load session, if given */
-       string name, path;
-
-       if (session_name.length()){
-               bool isnew;
-
-               if (Session::find_session (session_name, path, name, isnew)) {
-                       error << string_compose(_("could not load command line session \"%1\""), session_name) << endmsg;
-               } else {
-
-                       if (new_session) {
-
-                               /* command line required that the session be new */
-
-                               if (isnew) {
-                                       
-                                       /* popup the new session dialog
-                                          once everything else is OK.
-                                       */
-
-                                       Glib::signal_idle().connect (bind (mem_fun (*ui, &ARDOUR_UI::cmdline_new_session), path));
-                                       ui->set_will_create_new_session_automatically (true);
-
-                               } else {
-
-                                       /* it wasn't new, but we require a new session */
+               return true;
+       }
 
-                                       error << string_compose (_("\n\nA session named \"%1\" already exists.\n\
-To avoid this message, start ardour as \"ardour %1"), path)
-                                             << endmsg;
-                                       return false;
-                               }
+       /* Load session or start the new session dialog */
+       string name, path;
 
-                       } else {
+       bool isnew;
 
-                               /* command line didn't require a new session */
-                               
-                               if (isnew) {
-                                       error << string_compose (_("\n\nNo session named \"%1\" exists.\n\
-To create it from the command line, start ardour as \"ardour --new %1"), path) 
-                                             << endmsg;
-                                       return false;
-                               }
+       if (Session::find_session (session_name, path, name, isnew)) {
+               error << string_compose(_("could not load command line session \"%1\""), session_name) << endmsg;
+               return false;
+       }
 
-                               ui->load_session (path, name);
-                       }
+       if (!new_session) {
+                       
+               /* Loading a session, but the session doesn't exist */
+               if (isnew) {
+                       error << string_compose (_("\n\nNo session named \"%1\" exists.\n\
+To create it from the command line, start ardour as \"ardour --new %1"), path) << endmsg;
+                       return false;
                }
 
-               if (no_splash) {
-                       ui->show();
-               }
+               ui->load_session (path, name);
 
        } else {
+       /*  TODO: This bit of code doesn't work properly yet
+               Glib::signal_idle().connect (bind (mem_fun (*ui, &ARDOUR_UI::cmdline_new_session), path));
+               ui->set_will_create_new_session_automatically (true); */
+
+               /* Show the NSD */
                ui->hide_splash ();
                if (!Config->get_no_new_session_dialog()) {
                       ui->new_session (true);
index d1059cebe08f76b204cccf62f0b84cced5fa0f5d..47a2b2b6d3d9960054b952d1ce23072dd7e9f93f 100644 (file)
 #include <gtkmm/filefilter.h>
 #include <gtkmm/stock.h>
 
+#include "opts.h"
 
 NewSessionDialog::NewSessionDialog()
        : ArdourDialog ("New Session Dialog")
 {
         session_name_label = Gtk::manage(new class Gtk::Label(_("New Session Name :")));
        m_name = Gtk::manage(new class Gtk::Entry());
+       m_name->set_text(GTK_ARDOUR::session_name);
+
        session_location_label = Gtk::manage(new class Gtk::Label(_("Create Session Directory In :")));
        m_folder = Gtk::manage(new class Gtk::FileChooserButton(Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER));
        session_template_label = Gtk::manage(new class Gtk::Label(_("Use Session Template :")));
@@ -324,13 +327,21 @@ NewSessionDialog::NewSessionDialog()
        m_folder->set_current_folder(getenv ("HOME"));
        m_folder->set_title(_("select directory"));
 
-       set_default_response (Gtk::RESPONSE_OK);
-       set_response_sensitive (Gtk::RESPONSE_OK, false);
-       set_response_sensitive (Gtk::RESPONSE_NONE, false);
+       on_new_session_page = true;
        m_notebook->set_current_page(0);
        m_notebook->show();
        m_notebook->show_all_children();
 
+
+       set_default_response (Gtk::RESPONSE_OK);
+       if (!GTK_ARDOUR::session_name.length()) {
+               set_response_sensitive (Gtk::RESPONSE_OK, false);
+               set_response_sensitive (Gtk::RESPONSE_NONE, false);
+       } else {
+               set_response_sensitive (Gtk::RESPONSE_OK, true);
+               set_response_sensitive (Gtk::RESPONSE_NONE, true);
+       }
+
        ///@ connect some signals
 
        m_connect_inputs->signal_clicked().connect (mem_fun (*this, &NewSessionDialog::connect_inputs_clicked));
@@ -501,11 +512,11 @@ NewSessionDialog::reset_name()
 bool
 NewSessionDialog::entry_key_release (GdkEventKey* ev)
 {
-        if (m_name->get_text() != "") {
-               set_response_sensitive (Gtk::RESPONSE_OK, true);
+       if (m_name->get_text() != "") {
+               set_response_sensitive (Gtk::RESPONSE_OK, true);
                set_response_sensitive (Gtk::RESPONSE_NONE, true);
        } else {
-               set_response_sensitive (Gtk::RESPONSE_OK, false);
+               set_response_sensitive (Gtk::RESPONSE_OK, false);
        }
        return true;
 }
@@ -513,25 +524,27 @@ NewSessionDialog::entry_key_release (GdkEventKey* ev)
 void
 NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
 {
-        if (pagenum == 1) {
-              m_okbutton->set_label(_("Open"));
-              set_response_sensitive (Gtk::RESPONSE_NONE, false);
-              m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)));
-              if (m_treeview->get_selection()->count_selected_rows() == 0) {
-                       set_response_sensitive (Gtk::RESPONSE_OK, false);
+       if (pagenum == 1) {
+               on_new_session_page = false;
+               m_okbutton->set_label(_("Open"));
+               set_response_sensitive (Gtk::RESPONSE_NONE, false);
+               m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)));
+               if (m_treeview->get_selection()->count_selected_rows() == 0) {
+                       set_response_sensitive (Gtk::RESPONSE_OK, false);
                } else {
-                       set_response_sensitive (Gtk::RESPONSE_OK, true);
+                       set_response_sensitive (Gtk::RESPONSE_OK, true);
                }
        } else {
-               if (m_name->get_text() != "") {
-                 set_response_sensitive (Gtk::RESPONSE_NONE, true);
+               on_new_session_page = true;
+               if (m_name->get_text() != "") {
+                       set_response_sensitive (Gtk::RESPONSE_NONE, true);
                }
-               m_okbutton->set_label(_("New"));
-               m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON)));
+               m_okbutton->set_label(_("New"));
+               m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON)));
                if (m_name->get_text() == "") {
-                      set_response_sensitive (Gtk::RESPONSE_OK, false);
+                       set_response_sensitive (Gtk::RESPONSE_OK, false);
                } else {
-                       set_response_sensitive (Gtk::RESPONSE_OK, true);
+                       set_response_sensitive (Gtk::RESPONSE_OK, true);
                }
        }
 }
@@ -540,35 +553,37 @@ void
 NewSessionDialog::treeview_selection_changed ()
 {
        if (m_treeview->get_selection()->count_selected_rows() == 0) {
-               if (!m_open_filechooser->get_filename().empty()) {
-                       set_response_sensitive (Gtk::RESPONSE_OK, true);
+               if (!m_open_filechooser->get_filename().empty()) {
+                       set_response_sensitive (Gtk::RESPONSE_OK, true);
                } else {
-                       set_response_sensitive (Gtk::RESPONSE_OK, false);
+                       set_response_sensitive (Gtk::RESPONSE_OK, false);
                }
        } else {
-                set_response_sensitive (Gtk::RESPONSE_OK, true);
+               set_response_sensitive (Gtk::RESPONSE_OK, true);
        }
 }
 
 void
 NewSessionDialog::file_chosen ()
 {
-        m_treeview->get_selection()->unselect_all();
+       if (on_new_session_page) return;
+
+       m_treeview->get_selection()->unselect_all();
 
        if (!m_open_filechooser->get_filename().empty()) {
-                 set_response_sensitive (Gtk::RESPONSE_OK, true);
+               set_response_sensitive (Gtk::RESPONSE_OK, true);
        } else {
-                 set_response_sensitive (Gtk::RESPONSE_OK, false);
+               set_response_sensitive (Gtk::RESPONSE_OK, false);
        }
 }
 
 void
 NewSessionDialog::template_chosen ()
 {
-        if (m_template->get_filename() != "" ) {;
-               set_response_sensitive (Gtk::RESPONSE_NONE, true);
+       if (m_template->get_filename() != "" ) {;
+               set_response_sensitive (Gtk::RESPONSE_NONE, true);
        } else {
-               set_response_sensitive (Gtk::RESPONSE_NONE, false);
+               set_response_sensitive (Gtk::RESPONSE_NONE, false);
        }
 }
 
index 366805d31fc488c6bc5be2c6d12d77051d5a5de2..5d652fd1222e20c3f1e8e84d67a84186c1f963b0 100644 (file)
@@ -182,6 +182,8 @@ protected:
        void master_bus_button_clicked ();
        void monitor_bus_button_clicked ();
 
+       bool on_new_session_page;
+
        
 };
 
index 69b812882411f25fc36780962bdeedad8c3561de..fcd62de51280404b6b76e03cdd99f472d24202f1 100644 (file)
@@ -143,14 +143,19 @@ GTK_ARDOUR::parse_opts (int argc, char *argv[])
                        break;
 
                default:
-                       break;
+                       return print_help(execname);
                }
        }
 
        if (optind < argc) {
+               if (new_session) {
+                       cerr << "Illogical combination: you can either create a new session, or a load an existing session but not both!" << endl;
+                       return print_help(execname);
+               }
                session_name = argv[optind++];
        }
 
+
        return 0;
 }
 
index 5e5263b9ad3ce97da44016a86295f73f09b724dd..edc94864f2a916d51fb934f1f0088f5509d9d8d3 100644 (file)
@@ -90,13 +90,13 @@ PluginUIWindow::PluginUIWindow (AudioEngine &engine, boost::shared_ptr<PluginIns
 
        } else {
 
-               PluginUI*  pu  = new PluginUI (engine, insert, scrollable);
+               LadspaPluginUI*  pu  = new LadspaPluginUI (engine, insert, scrollable);
                
                _pluginui = pu;
                get_vbox()->add (*pu);
                
-               signal_map_event().connect (mem_fun (*pu, &PluginUI::start_updating));
-               signal_unmap_event().connect (mem_fun (*pu, &PluginUI::stop_updating));
+               signal_map_event().connect (mem_fun (*pu, &LadspaPluginUI::start_updating));
+               signal_unmap_event().connect (mem_fun (*pu, &LadspaPluginUI::stop_updating));
        }
 
        set_position (Gtk::WIN_POS_MOUSE);
@@ -117,7 +117,7 @@ PluginUIWindow::~PluginUIWindow ()
 {
 }
 
-PluginUI::PluginUI (AudioEngine &engine, boost::shared_ptr<PluginInsert> pi, bool scrollable)
+LadspaPluginUI::LadspaPluginUI (AudioEngine &engine, boost::shared_ptr<PluginInsert> pi, bool scrollable)
        : PlugUIBase (pi),
          engine(engine),
          button_table (initial_button_rows, initial_button_cols),
@@ -165,13 +165,13 @@ PluginUI::PluginUI (AudioEngine &engine, boost::shared_ptr<PluginInsert> pi, boo
                pack_start (hpacker, false, false);
        }
 
-       insert->active_changed.connect (mem_fun(*this, &PluginUI::redirect_active_changed));
+       insert->active_changed.connect (mem_fun(*this, &LadspaPluginUI::redirect_active_changed));
        bypass_button.set_active (!insert->active());
        
        build (engine);
 }
 
-PluginUI::~PluginUI ()
+LadspaPluginUI::~LadspaPluginUI ()
 {
        if (output_controls.size() > 0) {
                screen_update_connection.disconnect();
@@ -179,7 +179,7 @@ PluginUI::~PluginUI ()
 }
 
 void
-PluginUI::build (AudioEngine &engine)
+LadspaPluginUI::build (AudioEngine &engine)
 
 {
        guint32 i = 0;
@@ -350,7 +350,7 @@ PluginUI::build (AudioEngine &engine)
        button_table.show_all ();
 }
 
-PluginUI::ControlUI::ControlUI ()
+LadspaPluginUI::ControlUI::ControlUI ()
        : automate_button (X_("")) // force creation of a label 
 {
        automate_button.set_name ("PluginAutomateButton");
@@ -370,7 +370,7 @@ PluginUI::ControlUI::ControlUI ()
        meterinfo = 0;
 }
 
-PluginUI::ControlUI::~ControlUI() 
+LadspaPluginUI::ControlUI::~ControlUI() 
 {
        if (adjustment) {
                delete adjustment;
@@ -383,7 +383,7 @@ PluginUI::ControlUI::~ControlUI()
 }
 
 void
-PluginUI::automation_state_changed (ControlUI* cui)
+LadspaPluginUI::automation_state_changed (ControlUI* cui)
 {
        /* update button label */
 
@@ -413,13 +413,13 @@ static void integer_printer (char buf[32], Adjustment &adj, void *arg)
 }
 
 void
-PluginUI::print_parameter (char *buf, uint32_t len, uint32_t param)
+LadspaPluginUI::print_parameter (char *buf, uint32_t len, uint32_t param)
 {
        plugin->print_parameter (param, buf, len);
 }
 
-PluginUI::ControlUI*
-PluginUI::build_control_ui (AudioEngine &engine, guint32 port_index, PBD::Controllable* mcontrol)
+LadspaPluginUI::ControlUI*
+LadspaPluginUI::build_control_ui (AudioEngine &engine, guint32 port_index, PBD::Controllable* mcontrol)
 
 {
        ControlUI* control_ui;
@@ -452,8 +452,8 @@ PluginUI::build_control_ui (AudioEngine &engine, guint32 port_index, PBD::Contro
                                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, &PluginUI::control_combo_changed), control_ui));
-                               plugin->ParameterChanged.connect (bind (mem_fun (*this, &PluginUI::parameter_changed), control_ui));
+                               control_ui->combo->signal_changed().connect (bind (mem_fun(*this, &LadspaPluginUI::control_combo_changed), control_ui));
+                               plugin->ParameterChanged.connect (bind (mem_fun (*this, &LadspaPluginUI::parameter_changed), control_ui));
                                control_ui->pack_start(control_ui->label, true, true);
                                control_ui->pack_start(*control_ui->combo, false, true);
                                
@@ -476,7 +476,7 @@ PluginUI::build_control_ui (AudioEngine &engine, guint32 port_index, PBD::Contro
                        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, &PluginUI::control_port_toggled), control_ui));
+                       control_ui->button->signal_clicked().connect (bind (mem_fun(*this, &LadspaPluginUI::control_port_toggled), control_ui));
                
                        if(plugin->get_parameter (port_index) == 1){
                                control_ui->button->set_active(true);
@@ -514,7 +514,7 @@ PluginUI::build_control_ui (AudioEngine &engine, guint32 port_index, PBD::Contro
                        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, &PluginUI::print_parameter), (uint32_t) port_index);
+                       sigc::slot<void,char*,uint32_t> pslot = sigc::bind (mem_fun(*this, &LadspaPluginUI::print_parameter), (uint32_t) port_index);
 
                        control_ui->control = new BarController (*control_ui->adjustment, *mcontrol, pslot);
                        // should really match the height of the text in the automation button+label
@@ -523,8 +523,8 @@ PluginUI::build_control_ui (AudioEngine &engine, guint32 port_index, PBD::Contro
                        control_ui->control->set_style (BarController::LeftToRight);
                        control_ui->control->set_use_parent (true);
 
-                       control_ui->control->StartGesture.connect (bind (mem_fun(*this, &PluginUI::start_touch), control_ui));
-                       control_ui->control->StopGesture.connect (bind (mem_fun(*this, &PluginUI::stop_touch), control_ui));
+                       control_ui->control->StartGesture.connect (bind (mem_fun(*this, &LadspaPluginUI::start_touch), control_ui));
+                       control_ui->control->StopGesture.connect (bind (mem_fun(*this, &LadspaPluginUI::stop_touch), control_ui));
                        
                }
 
@@ -547,14 +547,14 @@ PluginUI::build_control_ui (AudioEngine &engine, guint32 port_index, PBD::Contro
                }
 
                control_ui->pack_start (control_ui->automate_button, false, false);
-               control_ui->adjustment->signal_value_changed().connect (bind (mem_fun(*this, &PluginUI::control_adjustment_changed), control_ui));
-               control_ui->automate_button.signal_clicked().connect (bind (mem_fun(*this, &PluginUI::astate_clicked), control_ui, (uint32_t) port_index));
+               control_ui->adjustment->signal_value_changed().connect (bind (mem_fun(*this, &LadspaPluginUI::control_adjustment_changed), control_ui));
+               control_ui->automate_button.signal_clicked().connect (bind (mem_fun(*this, &LadspaPluginUI::astate_clicked), control_ui, (uint32_t) port_index));
 
                automation_state_changed (control_ui);
 
-               plugin->ParameterChanged.connect (bind (mem_fun(*this, &PluginUI::parameter_changed), control_ui));
+               plugin->ParameterChanged.connect (bind (mem_fun(*this, &LadspaPluginUI::parameter_changed), control_ui));
                insert->automation_list (port_index).automation_state_changed.connect 
-                       (bind (mem_fun(*this, &PluginUI::automation_state_changed), control_ui));
+                       (bind (mem_fun(*this, &LadspaPluginUI::automation_state_changed), control_ui));
 
        } else if (plugin->parameter_is_output (port_index)) {
 
@@ -603,24 +603,24 @@ PluginUI::build_control_ui (AudioEngine &engine, guint32 port_index, PBD::Contro
                output_controls.push_back (control_ui);
        }
        
-       plugin->ParameterChanged.connect (bind (mem_fun(*this, &PluginUI::parameter_changed), control_ui));
+       plugin->ParameterChanged.connect (bind (mem_fun(*this, &LadspaPluginUI::parameter_changed), control_ui));
        return control_ui;
 }
 
 void
-PluginUI::start_touch (PluginUI::ControlUI* cui)
+LadspaPluginUI::start_touch (LadspaPluginUI::ControlUI* cui)
 {
        insert->automation_list (cui->port_index).start_touch ();
 }
 
 void
-PluginUI::stop_touch (PluginUI::ControlUI* cui)
+LadspaPluginUI::stop_touch (LadspaPluginUI::ControlUI* cui)
 {
        insert->automation_list (cui->port_index).stop_touch ();
 }
 
 void
-PluginUI::astate_clicked (ControlUI* cui, uint32_t port)
+LadspaPluginUI::astate_clicked (ControlUI* cui, uint32_t port)
 {
        using namespace Menu_Helpers;
 
@@ -633,25 +633,25 @@ PluginUI::astate_clicked (ControlUI* cui, uint32_t port)
 
        items.clear ();
        items.push_back (MenuElem (_("Off"), 
-                                  bind (mem_fun(*this, &PluginUI::set_automation_state), (AutoState) Off, cui)));
+                                  bind (mem_fun(*this, &LadspaPluginUI::set_automation_state), (AutoState) Off, cui)));
        items.push_back (MenuElem (_("Play"),
-                                  bind (mem_fun(*this, &PluginUI::set_automation_state), (AutoState) Play, cui)));
+                                  bind (mem_fun(*this, &LadspaPluginUI::set_automation_state), (AutoState) Play, cui)));
        items.push_back (MenuElem (_("Write"),
-                                  bind (mem_fun(*this, &PluginUI::set_automation_state), (AutoState) Write, cui)));
+                                  bind (mem_fun(*this, &LadspaPluginUI::set_automation_state), (AutoState) Write, cui)));
        items.push_back (MenuElem (_("Touch"),
-                                  bind (mem_fun(*this, &PluginUI::set_automation_state), (AutoState) Touch, cui)));
+                                  bind (mem_fun(*this, &LadspaPluginUI::set_automation_state), (AutoState) Touch, cui)));
 
        automation_menu->popup (1, 0);
 }
 
 void
-PluginUI::set_automation_state (AutoState state, ControlUI* cui)
+LadspaPluginUI::set_automation_state (AutoState state, ControlUI* cui)
 {
        insert->set_port_automation_state (cui->port_index, state);
 }
 
 void
-PluginUI::control_adjustment_changed (ControlUI* cui)
+LadspaPluginUI::control_adjustment_changed (ControlUI* cui)
 {
        if (cui->ignore_change) {
                return;
@@ -667,18 +667,18 @@ PluginUI::control_adjustment_changed (ControlUI* cui)
 }
 
 void
-PluginUI::parameter_changed (uint32_t abs_port_id, float val, ControlUI* cui)
+LadspaPluginUI::parameter_changed (uint32_t abs_port_id, float val, ControlUI* cui)
 {
        if (cui->port_index == abs_port_id) {
                if (!cui->update_pending) {
                        cui->update_pending = true;
-                       Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun(*this, &PluginUI::update_control_display), cui));
+                       Gtkmm2ext::UI::instance()->call_slot (bind (mem_fun(*this, &LadspaPluginUI::update_control_display), cui));
                }
        }
 }
 
 void
-PluginUI::update_control_display (ControlUI* cui)      
+LadspaPluginUI::update_control_display (ControlUI* cui)        
 {
        /* XXX how do we handle logarithmic stuff here ? */
        
@@ -715,7 +715,7 @@ PluginUI::update_control_display (ControlUI* cui)
 }
 
 void
-PluginUI::control_port_toggled (ControlUI* cui)
+LadspaPluginUI::control_port_toggled (ControlUI* cui)
 {
        if (!cui->ignore_change) {
                insert->set_parameter (cui->port_index, cui->button->get_active());
@@ -723,7 +723,7 @@ PluginUI::control_port_toggled (ControlUI* cui)
 }
 
 void
-PluginUI::control_combo_changed (ControlUI* cui)
+LadspaPluginUI::control_combo_changed (ControlUI* cui)
 {
        if (!cui->ignore_change) {
                string value = cui->combo->get_active_text();
@@ -743,26 +743,26 @@ PluginUIWindow::plugin_going_away (ARDOUR::Redirect* ignored)
 }
 
 void
-PluginUI::redirect_active_changed (Redirect* r, void* src)
+LadspaPluginUI::redirect_active_changed (Redirect* r, void* src)
 {
-       ENSURE_GUI_THREAD(bind (mem_fun(*this, &PluginUI::redirect_active_changed), r, src));
+       ENSURE_GUI_THREAD(bind (mem_fun(*this, &LadspaPluginUI::redirect_active_changed), r, src));
        
        bypass_button.set_active (!r->active());
 }
 
 bool
-PluginUI::start_updating (GdkEventAny* ignored)
+LadspaPluginUI::start_updating (GdkEventAny* ignored)
 {
        if (output_controls.size() > 0 ) {
                screen_update_connection.disconnect();
                screen_update_connection = ARDOUR_UI::instance()->RapidScreenUpdate.connect 
-                       (mem_fun(*this, &PluginUI::output_update));
+                       (mem_fun(*this, &LadspaPluginUI::output_update));
        }
        return false;
 }
 
 bool
-PluginUI::stop_updating (GdkEventAny* ignored)
+LadspaPluginUI::stop_updating (GdkEventAny* ignored)
 {
        if (output_controls.size() > 0 ) {
                screen_update_connection.disconnect();
@@ -771,7 +771,7 @@ PluginUI::stop_updating (GdkEventAny* ignored)
 }
 
 void
-PluginUI::output_update ()
+LadspaPluginUI::output_update ()
 {
        for (vector<ControlUI*>::iterator i = output_controls.begin(); i != output_controls.end(); ++i) {
                float val = plugin->get_parameter ((*i)->port_index);
@@ -805,7 +805,7 @@ PluginUI::output_update ()
 }
 
 vector<string> 
-PluginUI::setup_scale_values(guint32 port_index, ControlUI* cui)
+LadspaPluginUI::setup_scale_values(guint32 port_index, ControlUI* cui)
 {
        vector<string> enums;
        boost::shared_ptr<LadspaPlugin> lp = boost::dynamic_pointer_cast<LadspaPlugin> (plugin);
index 0d0055fd47813f977d03af40d0570298f0ca34ee..dc1e61887b2f3c76fcd9401bbc08b83e459a4e5d 100644 (file)
@@ -87,11 +87,11 @@ class PlugUIBase : public virtual sigc::trackable
        void bypass_toggled();
 };
 
-class PluginUI : public PlugUIBase, public Gtk::VBox 
+class LadspaPluginUI : public PlugUIBase, public Gtk::VBox 
 {
   public:
-       PluginUI (ARDOUR::AudioEngine &, boost::shared_ptr<ARDOUR::PluginInsert> plug, bool scrollable=false);
-       ~PluginUI ();
+       LadspaPluginUI (ARDOUR::AudioEngine &, boost::shared_ptr<ARDOUR::PluginInsert> plug, bool scrollable=false);
+       ~LadspaPluginUI ();
        
        gint get_preferred_height () { return prefheight; }
 
index 8b47a17511540f2f142a3fd29ec1588354bd6e18..86ac1e035ed997c9975bec4b3fa1f79367238079 100644 (file)
@@ -287,9 +287,9 @@ void
 RouteParams_UI::cleanup_pre_view (bool stopupdate)
 {
        if (_active_pre_view) {
-               PluginUI *   plugui = 0;
+               LadspaPluginUI *   plugui = 0;
                
-               if (stopupdate && (plugui = dynamic_cast<PluginUI*>(_active_pre_view)) != 0) {
+               if (stopupdate && (plugui = dynamic_cast<LadspaPluginUI*>(_active_pre_view)) != 0) {
                          plugui->stop_updating (0);
                }
 
@@ -304,9 +304,9 @@ void
 RouteParams_UI::cleanup_post_view (bool stopupdate)
 {
        if (_active_post_view) {
-               PluginUI *   plugui = 0;
+               LadspaPluginUI *   plugui = 0;
                
-               if (stopupdate && (plugui = dynamic_cast<PluginUI*>(_active_post_view)) != 0) {
+               if (stopupdate && (plugui = dynamic_cast<LadspaPluginUI*>(_active_post_view)) != 0) {
                          plugui->stop_updating (0);
                }
                _post_plugin_conn.disconnect();
@@ -556,7 +556,7 @@ RouteParams_UI::redirect_selected (boost::shared_ptr<ARDOUR::Redirect> redirect,
                                
                if ((plugin_insert = boost::dynamic_pointer_cast<PluginInsert> (insert)) != 0) {                                
 
-                       PluginUI *plugin_ui = new PluginUI (session->engine(), plugin_insert, true);
+                       LadspaPluginUI *plugin_ui = new LadspaPluginUI (session->engine(), plugin_insert, true);
 
                        if (place == PreFader) {
                                cleanup_pre_view();
index 63522d8d5c91a0fb599fc4325c63d44ade4d5adc..1c8d6cbc2dfa6d7d1617d2bca73dbbde10184819 100644 (file)
@@ -35,6 +35,7 @@
 class CAComponent;
 class CAAudioUnit;
 class CAComponentDescription;
+struct AudioBufferList;
 
 namespace ARDOUR {
 
@@ -89,6 +90,9 @@ class AUPlugin : public ARDOUR::Plugin
        CAComponent* comp;
     CAAudioUnit* unit;
 
+       AudioBufferList* in_list;
+       AudioBufferList* out_list;
+
        std::vector<std::pair<uint32_t, uint32_t> > parameter_map;
 };
 
index 8271c1cf6ab02b3abe20cd791bb235f73b786c91..d1db818e4004c1d29a755a7b6b1458e0436e235f 100644 (file)
@@ -97,7 +97,7 @@ class Route : public IO
        virtual int  silent_roll (jack_nframes_t nframes, jack_nframes_t start_frame, jack_nframes_t end_frame, 
                                  jack_nframes_t offset, bool can_record, bool rec_monitors_input);
        virtual void toggle_monitor_input ();
-       virtual bool can_record() const { return false; }
+       virtual bool can_record() { return false; }
        virtual void set_record_enable (bool yn, void *src) {}
        virtual bool record_enabled() const { return false; }
        virtual void handle_transport_stopped (bool abort, bool did_locate, bool flush_redirects);
index c4032b9ed9ecab3ad7df55b84ebe8c00ab87a2aa..bfd3e429c30d12069db4d2bac41b94440c9d5b5f 100644 (file)
@@ -238,7 +238,7 @@ class TempoMap : public Stateful, public StateManager {
 
        XMLNode& get_state (void);
        int set_state (const XMLNode&);
-        PBD::ID id();
+        PBD::ID id() { return _id; }
 
        void dump (std::ostream&) const;
        void clear ();
index f16e9d29d93ce4a7d0a18daa459d0bf8e831ba98..4e2af5c80eb9b1b035b357d03c51a701832f9933 100644 (file)
@@ -48,7 +48,7 @@ class Track : public Route
 
        void toggle_monitor_input ();
 
-       bool can_record() const { return true; }
+       virtual bool can_record();
 
        Diskstream& diskstream() const { return *_diskstream; }
 
index 59797f32883f847b4a5ba32f73457ca7d5b0b726..25c8aeb53bd2d89c99e603214478f36f4ddcfa96 100644 (file)
@@ -64,6 +64,14 @@ AUPlugin::~AUPlugin ()
        if (comp) {
                delete comp;
        }
+       
+       if (in_list) {
+               delete in_list;
+       }
+       
+       if (out_list) {
+               delete out_list;
+       }
 }
 
 AUPluginInfo::~AUPluginInfo ()
index 2dfd735a6b28150edc93703c09c577fa20a9123b..4d2d26f8014e6a3590311c9a6a5a740e5331602b 100644 (file)
@@ -170,7 +170,7 @@ IO::silence (jack_nframes_t nframes, jack_nframes_t offset)
 void
 IO::apply_declick (vector<Sample *>& bufs, uint32_t nbufs, jack_nframes_t nframes, gain_t initial, gain_t target, bool invert_polarity)
 {
-       jack_nframes_t declick = min ((jack_nframes_t)4096, nframes);
+       jack_nframes_t declick = min ((jack_nframes_t)128, nframes);
        gain_t delta;
        Sample *buffer;
        double fractional_shift;
index 709e76f5e1ad174ae05c257c7cf28372fe6feca7..941524b54cf03b92477b84b9cc36f841c7d3a7f9 100644 (file)
@@ -31,6 +31,7 @@
 #include <ardour/audioplaylist.h>
 #include <ardour/panner.h>
 #include <ardour/utils.h>
+#include <ardour/connection.h>
 
 #include "i18n.h"
 
@@ -146,6 +147,18 @@ Track::record_enabled () const
 {
        return _diskstream->record_enabled ();
 }
+
+bool
+Track::can_record()
+{
+       bool will_record = true;
+       for (int i = 0; i < _inputs.size() && will_record; i++) {
+               if (!_inputs[i]->connected())
+                       will_record = false;
+       }
+
+       return will_record;
+}
        
 void
 Track::set_record_enable (bool yn, void *src)
@@ -159,8 +172,13 @@ Track::set_record_enable (bool yn, void *src)
                return;
        }
 
-       /* keep track of the meter point as it was before we rec-enabled */
+       // Do not set rec enabled if the track can't record.
+       if (yn && !can_record()) {
+               error << string_compose( _("Can not arm track '%1'. Check the input connections"), name() ) << endmsg;
+               return;
+       }
 
+       /* keep track of the meter point as it was before we rec-enabled */
        if (!_diskstream->record_enabled()) {
                _saved_meter_point = _meter_point;
        }