summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--SConstruct2
-rw-r--r--gtk2_ardour/automation_time_axis.cc3
-rw-r--r--gtk2_ardour/main.cc73
-rw-r--r--gtk2_ardour/new_session_dialog.cc73
-rw-r--r--gtk2_ardour/new_session_dialog.h2
-rw-r--r--gtk2_ardour/opts.cc7
-rw-r--r--gtk2_ardour/plugin_ui.cc90
-rw-r--r--gtk2_ardour/plugin_ui.h6
-rw-r--r--gtk2_ardour/route_params_ui.cc10
-rw-r--r--libs/ardour/ardour/audio_unit.h4
-rw-r--r--libs/ardour/ardour/route.h2
-rw-r--r--libs/ardour/ardour/tempo.h2
-rw-r--r--libs/ardour/ardour/track.h2
-rw-r--r--libs/ardour/audio_unit.cc8
-rw-r--r--libs/ardour/io.cc2
-rw-r--r--libs/ardour/track.cc20
16 files changed, 171 insertions, 135 deletions
diff --git a/SConstruct b/SConstruct
index e93aad96a8..8f23417a07 100644
--- a/SConstruct
+++ b/SConstruct
@@ -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
diff --git a/gtk2_ardour/automation_time_axis.cc b/gtk2_ardour/automation_time_axis.cc
index 6e2a93889f..7025a11178 100644
--- a/gtk2_ardour/automation_time_axis.cc
+++ b/gtk2_ardour/automation_time_axis.cc
@@ -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);
diff --git a/gtk2_ardour/main.cc b/gtk2_ardour/main.cc
index 047bb130a4..d2550754f6 100644
--- a/gtk2_ardour/main.cc
+++ b/gtk2_ardour/main.cc
@@ -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);
diff --git a/gtk2_ardour/new_session_dialog.cc b/gtk2_ardour/new_session_dialog.cc
index d1059cebe0..47a2b2b6d3 100644
--- a/gtk2_ardour/new_session_dialog.cc
+++ b/gtk2_ardour/new_session_dialog.cc
@@ -32,12 +32,15 @@
#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);
}
}
diff --git a/gtk2_ardour/new_session_dialog.h b/gtk2_ardour/new_session_dialog.h
index 366805d31f..5d652fd122 100644
--- a/gtk2_ardour/new_session_dialog.h
+++ b/gtk2_ardour/new_session_dialog.h
@@ -182,6 +182,8 @@ protected:
void master_bus_button_clicked ();
void monitor_bus_button_clicked ();
+ bool on_new_session_page;
+
};
diff --git a/gtk2_ardour/opts.cc b/gtk2_ardour/opts.cc
index 69b8128824..fcd62de512 100644
--- a/gtk2_ardour/opts.cc
+++ b/gtk2_ardour/opts.cc
@@ -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;
}
diff --git a/gtk2_ardour/plugin_ui.cc b/gtk2_ardour/plugin_ui.cc
index 5e5263b9ad..edc94864f2 100644
--- a/gtk2_ardour/plugin_ui.cc
+++ b/gtk2_ardour/plugin_ui.cc
@@ -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);
diff --git a/gtk2_ardour/plugin_ui.h b/gtk2_ardour/plugin_ui.h
index 0d0055fd47..dc1e61887b 100644
--- a/gtk2_ardour/plugin_ui.h
+++ b/gtk2_ardour/plugin_ui.h
@@ -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; }
diff --git a/gtk2_ardour/route_params_ui.cc b/gtk2_ardour/route_params_ui.cc
index 8b47a17511..86ac1e035e 100644
--- a/gtk2_ardour/route_params_ui.cc
+++ b/gtk2_ardour/route_params_ui.cc
@@ -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();
diff --git a/libs/ardour/ardour/audio_unit.h b/libs/ardour/ardour/audio_unit.h
index 63522d8d5c..1c8d6cbc2d 100644
--- a/libs/ardour/ardour/audio_unit.h
+++ b/libs/ardour/ardour/audio_unit.h
@@ -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;
};
diff --git a/libs/ardour/ardour/route.h b/libs/ardour/ardour/route.h
index 8271c1cf6a..d1db818e40 100644
--- a/libs/ardour/ardour/route.h
+++ b/libs/ardour/ardour/route.h
@@ -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);
diff --git a/libs/ardour/ardour/tempo.h b/libs/ardour/ardour/tempo.h
index c4032b9ed9..bfd3e429c3 100644
--- a/libs/ardour/ardour/tempo.h
+++ b/libs/ardour/ardour/tempo.h
@@ -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 ();
diff --git a/libs/ardour/ardour/track.h b/libs/ardour/ardour/track.h
index f16e9d29d9..4e2af5c80e 100644
--- a/libs/ardour/ardour/track.h
+++ b/libs/ardour/ardour/track.h
@@ -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; }
diff --git a/libs/ardour/audio_unit.cc b/libs/ardour/audio_unit.cc
index 59797f3288..25c8aeb53b 100644
--- a/libs/ardour/audio_unit.cc
+++ b/libs/ardour/audio_unit.cc
@@ -64,6 +64,14 @@ AUPlugin::~AUPlugin ()
if (comp) {
delete comp;
}
+
+ if (in_list) {
+ delete in_list;
+ }
+
+ if (out_list) {
+ delete out_list;
+ }
}
AUPluginInfo::~AUPluginInfo ()
diff --git a/libs/ardour/io.cc b/libs/ardour/io.cc
index 2dfd735a6b..4d2d26f801 100644
--- a/libs/ardour/io.cc
+++ b/libs/ardour/io.cc
@@ -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;
diff --git a/libs/ardour/track.cc b/libs/ardour/track.cc
index 709e76f5e1..941524b54c 100644
--- a/libs/ardour/track.cc
+++ b/libs/ardour/track.cc
@@ -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;
}