mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-08 15:54:57 +01:00
use XML state to store processors in mixer (strips) and fixup crash caused by missing AutomationController for integer LADSPA plugin params
git-svn-id: svn://localhost/ardour2/trunk@2215 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
4d1542d1e5
commit
6698f5f686
16 changed files with 136 additions and 195 deletions
|
|
@ -197,6 +197,11 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
|
||||||
|
|
||||||
keybindings_path = key_bindings_file.to_string();
|
keybindings_path = key_bindings_file.to_string();
|
||||||
|
|
||||||
|
/* store all bindings changes in per-user file, no matter where they were loaded from */
|
||||||
|
user_keybindings_path = user_config_directory().to_string ();
|
||||||
|
user_keybindings_path += '/';
|
||||||
|
user_keybindings_path += "ardour.bindings";
|
||||||
|
|
||||||
can_save_keybindings = false;
|
can_save_keybindings = false;
|
||||||
|
|
||||||
last_configure_time.tv_sec = 0;
|
last_configure_time.tv_sec = 0;
|
||||||
|
|
@ -2724,7 +2729,7 @@ void
|
||||||
ARDOUR_UI::save_keybindings ()
|
ARDOUR_UI::save_keybindings ()
|
||||||
{
|
{
|
||||||
if (can_save_keybindings) {
|
if (can_save_keybindings) {
|
||||||
AccelMap::save (keybindings_path);
|
AccelMap::save (user_keybindings_path);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -577,6 +577,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
||||||
void we_have_dependents ();
|
void we_have_dependents ();
|
||||||
|
|
||||||
std::string keybindings_path;
|
std::string keybindings_path;
|
||||||
|
std::string user_keybindings_path;
|
||||||
|
|
||||||
void setup_keybindings ();
|
void setup_keybindings ();
|
||||||
void setup_session_options ();
|
void setup_session_options ();
|
||||||
|
|
|
||||||
|
|
@ -835,7 +835,11 @@ void
|
||||||
ARDOUR_UI::sync_option_changed ()
|
ARDOUR_UI::sync_option_changed ()
|
||||||
{
|
{
|
||||||
if (session) {
|
if (session) {
|
||||||
session->request_slave_source (string_to_slave_source (sync_option_combo.get_active_text()));
|
ustring txt = sync_option_combo.get_active_text ();
|
||||||
|
if (txt.length()) {
|
||||||
|
cerr << "Changing to slave source based on " << txt << endl;
|
||||||
|
session->request_slave_source (string_to_slave_source (txt));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -90,6 +90,8 @@ ARDOUR_UI::setup_keybindings ()
|
||||||
GtkAccelMap* accelmap = gtk_accel_map_get();
|
GtkAccelMap* accelmap = gtk_accel_map_get();
|
||||||
g_signal_connect (accelmap, "changed", (GCallback) accel_map_changed, this);
|
g_signal_connect (accelmap, "changed", (GCallback) accel_map_changed, this);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -80,7 +80,6 @@ ARDOUR_UI::install_actions ()
|
||||||
/* menus + submenus that need action items */
|
/* menus + submenus that need action items */
|
||||||
|
|
||||||
ActionManager::register_action (main_actions, X_("Session"), _("Session"));
|
ActionManager::register_action (main_actions, X_("Session"), _("Session"));
|
||||||
ActionManager::register_action (main_actions, X_("Export"), _("Export"));
|
|
||||||
ActionManager::register_action (main_actions, X_("Cleanup"), _("Cleanup"));
|
ActionManager::register_action (main_actions, X_("Cleanup"), _("Cleanup"));
|
||||||
ActionManager::register_action (main_actions, X_("Sync"), _("Sync"));
|
ActionManager::register_action (main_actions, X_("Sync"), _("Sync"));
|
||||||
ActionManager::register_action (main_actions, X_("Options"), _("Options"));
|
ActionManager::register_action (main_actions, X_("Options"), _("Options"));
|
||||||
|
|
|
||||||
|
|
@ -423,7 +423,11 @@ LadspaPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automati
|
||||||
|
|
||||||
return control_ui;
|
return control_ui;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* create the controller */
|
||||||
|
|
||||||
|
control_ui->controller = AutomationController::create(insert, mcontrol->list(), mcontrol);
|
||||||
|
|
||||||
/* XXX this code is not right yet, because it doesn't handle
|
/* XXX this code is not right yet, because it doesn't handle
|
||||||
the absence of bounds in any sensible fashion.
|
the absence of bounds in any sensible fashion.
|
||||||
*/
|
*/
|
||||||
|
|
@ -456,7 +460,6 @@ LadspaPluginUI::build_control_ui (guint32 port_index, boost::shared_ptr<Automati
|
||||||
} else {
|
} else {
|
||||||
//sigc::slot<void,char*,uint32_t> pslot = sigc::bind (mem_fun(*this, &LadspaPluginUI::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->controller = AutomationController::create(insert, mcontrol->list(), mcontrol);
|
|
||||||
control_ui->controller->set_size_request (200, req.height);
|
control_ui->controller->set_size_request (200, req.height);
|
||||||
control_ui->controller->set_name (X_("PluginSlider"));
|
control_ui->controller->set_name (X_("PluginSlider"));
|
||||||
control_ui->controller->set_style (BarController::LeftToRight);
|
control_ui->controller->set_style (BarController::LeftToRight);
|
||||||
|
|
|
||||||
|
|
@ -739,39 +739,38 @@ void
|
||||||
ProcessorBox::cut_processors ()
|
ProcessorBox::cut_processors ()
|
||||||
{
|
{
|
||||||
vector<boost::shared_ptr<Processor> > to_be_removed;
|
vector<boost::shared_ptr<Processor> > to_be_removed;
|
||||||
|
XMLNode* node = new XMLNode (X_("cut"));
|
||||||
|
|
||||||
get_selected_processors (to_be_removed);
|
get_selected_processors (to_be_removed);
|
||||||
|
|
||||||
if (to_be_removed.empty()) {
|
if (to_be_removed.empty()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* this essentially transfers ownership of the processor
|
|
||||||
of the processor from the route to the mixer
|
|
||||||
selection.
|
|
||||||
*/
|
|
||||||
|
|
||||||
_rr_selection.set (to_be_removed);
|
|
||||||
|
|
||||||
no_processor_redisplay = true;
|
no_processor_redisplay = true;
|
||||||
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) {
|
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) {
|
||||||
// Do not cut processors or sends
|
// Do not cut inserts or sends
|
||||||
|
|
||||||
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
|
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
|
||||||
void* gui = (*i)->get_gui ();
|
void* gui = (*i)->get_gui ();
|
||||||
|
|
||||||
if (gui) {
|
if (gui) {
|
||||||
static_cast<Gtk::Widget*>(gui)->hide ();
|
static_cast<Gtk::Widget*>(gui)->hide ();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_route->remove_processor (*i)) {
|
XMLNode& child ((*i)->get_state());
|
||||||
/* removal failed */
|
|
||||||
_rr_selection.remove (*i);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
_rr_selection.remove (*i);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if (_route->remove_processor (*i) == 0) {
|
||||||
|
/* success */
|
||||||
|
node->add_child_nocopy (child);
|
||||||
|
} else {
|
||||||
|
delete &child;
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
_rr_selection.set (node);
|
||||||
|
|
||||||
no_processor_redisplay = false;
|
no_processor_redisplay = false;
|
||||||
redisplay_processors ();
|
redisplay_processors ();
|
||||||
}
|
}
|
||||||
|
|
@ -780,7 +779,7 @@ void
|
||||||
ProcessorBox::copy_processors ()
|
ProcessorBox::copy_processors ()
|
||||||
{
|
{
|
||||||
vector<boost::shared_ptr<Processor> > to_be_copied;
|
vector<boost::shared_ptr<Processor> > to_be_copied;
|
||||||
vector<boost::shared_ptr<Processor> > copies;
|
XMLNode* node = new XMLNode (X_("copy"));
|
||||||
|
|
||||||
get_selected_processors (to_be_copied);
|
get_selected_processors (to_be_copied);
|
||||||
|
|
||||||
|
|
@ -791,12 +790,11 @@ ProcessorBox::copy_processors ()
|
||||||
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_copied.begin(); i != to_be_copied.end(); ++i) {
|
for (vector<boost::shared_ptr<Processor> >::iterator i = to_be_copied.begin(); i != to_be_copied.end(); ++i) {
|
||||||
// Do not copy processors or sends
|
// Do not copy processors or sends
|
||||||
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
|
if (boost::dynamic_pointer_cast<PluginInsert>((*i)) != 0) {
|
||||||
copies.push_back (Processor::clone (*i));
|
node->add_child_nocopy ((*i)->get_state());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
_rr_selection.set (copies);
|
_rr_selection.set (node);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -868,37 +866,6 @@ ProcessorBox::rename_processor (boost::shared_ptr<Processor> processor)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
ProcessorBox::cut_processor (boost::shared_ptr<Processor> processor)
|
|
||||||
{
|
|
||||||
/* this essentially transfers ownership of the processor
|
|
||||||
of the processor from the route to the mixer
|
|
||||||
selection.
|
|
||||||
*/
|
|
||||||
|
|
||||||
_rr_selection.add (processor);
|
|
||||||
|
|
||||||
void* gui = processor->get_gui ();
|
|
||||||
|
|
||||||
if (gui) {
|
|
||||||
static_cast<Gtk::Widget*>(gui)->hide ();
|
|
||||||
}
|
|
||||||
|
|
||||||
no_processor_redisplay = true;
|
|
||||||
if (_route->remove_processor (processor)) {
|
|
||||||
_rr_selection.remove (processor);
|
|
||||||
}
|
|
||||||
no_processor_redisplay = false;
|
|
||||||
redisplay_processors ();
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
ProcessorBox::copy_processor (boost::shared_ptr<Processor> processor)
|
|
||||||
{
|
|
||||||
boost::shared_ptr<Processor> copy = Processor::clone (processor);
|
|
||||||
_rr_selection.add (copy);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
ProcessorBox::paste_processors ()
|
ProcessorBox::paste_processors ()
|
||||||
{
|
{
|
||||||
|
|
@ -906,20 +873,58 @@ ProcessorBox::paste_processors ()
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
paste_processor_list (_rr_selection.processors);
|
cerr << "paste from node called " << _rr_selection.processors.get_node().name() << endl;
|
||||||
|
|
||||||
|
paste_processor_state (_rr_selection.processors.get_node());
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
ProcessorBox::paste_processor_list (list<boost::shared_ptr<Processor> >& processors)
|
ProcessorBox::paste_processor_list (list<boost::shared_ptr<Processor> >& processors)
|
||||||
{
|
{
|
||||||
list<boost::shared_ptr<Processor> > copies;
|
list<boost::shared_ptr<Processor> > copies;
|
||||||
|
|
||||||
for (list<boost::shared_ptr<Processor> >::iterator i = processors.begin(); i != processors.end(); ++i) {
|
for (list<boost::shared_ptr<Processor> >::iterator i = processors.begin(); i != processors.end(); ++i) {
|
||||||
|
|
||||||
boost::shared_ptr<Processor> copy = Processor::clone (*i);
|
boost::shared_ptr<Processor> copy = Processor::clone (*i);
|
||||||
|
|
||||||
copy->set_placement (_placement);
|
copy->set_placement (_placement);
|
||||||
copies.push_back (copy);
|
copies.push_back (copy);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_route->add_processors (copies)) {
|
||||||
|
|
||||||
|
string msg = _(
|
||||||
|
"Copying the set of processors on the clipboard failed,\n\
|
||||||
|
probably because the I/O configuration of the plugins\n\
|
||||||
|
could not match the configuration of this track.");
|
||||||
|
MessageDialog am (msg);
|
||||||
|
am.run ();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
ProcessorBox::paste_processor_state (const XMLNode& node)
|
||||||
|
{
|
||||||
|
XMLNodeList nlist;
|
||||||
|
XMLNodeConstIterator niter;
|
||||||
|
list<boost::shared_ptr<Processor> > copies;
|
||||||
|
|
||||||
|
nlist = node.children();
|
||||||
|
|
||||||
|
cerr << "Pasting processor selection containing " << nlist.size() << endl;
|
||||||
|
|
||||||
|
if (nlist.empty()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (niter = nlist.begin(); niter != nlist.end(); ++niter) {
|
||||||
|
cerr << "try using " << (*niter)->name() << endl;
|
||||||
|
try {
|
||||||
|
copies.push_back (boost::shared_ptr<Processor> (new PluginInsert (_session, **niter)));
|
||||||
|
}
|
||||||
|
catch (...) {
|
||||||
|
cerr << "plugin insert constructor failed\n";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (_route->add_processors (copies)) {
|
if (_route->add_processors (copies)) {
|
||||||
|
|
|
||||||
|
|
@ -186,11 +186,10 @@ class ProcessorBox : public Gtk::HBox
|
||||||
|
|
||||||
static Glib::RefPtr<Gtk::Action> paste_action;
|
static Glib::RefPtr<Gtk::Action> paste_action;
|
||||||
void paste_processor_list (std::list<boost::shared_ptr<ARDOUR::Processor> >& processors);
|
void paste_processor_list (std::list<boost::shared_ptr<ARDOUR::Processor> >& processors);
|
||||||
|
void paste_processor_state (const XMLNode&);
|
||||||
|
|
||||||
void activate_processor (boost::shared_ptr<ARDOUR::Processor>);
|
void activate_processor (boost::shared_ptr<ARDOUR::Processor>);
|
||||||
void deactivate_processor (boost::shared_ptr<ARDOUR::Processor>);
|
void deactivate_processor (boost::shared_ptr<ARDOUR::Processor>);
|
||||||
void cut_processor (boost::shared_ptr<ARDOUR::Processor>);
|
|
||||||
void copy_processor (boost::shared_ptr<ARDOUR::Processor>);
|
|
||||||
void edit_processor (boost::shared_ptr<ARDOUR::Processor>);
|
void edit_processor (boost::shared_ptr<ARDOUR::Processor>);
|
||||||
void hide_processor_editor (boost::shared_ptr<ARDOUR::Processor>);
|
void hide_processor_editor (boost::shared_ptr<ARDOUR::Processor>);
|
||||||
void rename_processor (boost::shared_ptr<ARDOUR::Processor>);
|
void rename_processor (boost::shared_ptr<ARDOUR::Processor>);
|
||||||
|
|
|
||||||
|
|
@ -20,13 +20,40 @@
|
||||||
#ifndef __ardour_gtk_processor_selection_h__
|
#ifndef __ardour_gtk_processor_selection_h__
|
||||||
#define __ardour_gtk_processor_selection_h__
|
#define __ardour_gtk_processor_selection_h__
|
||||||
|
|
||||||
#include <list>
|
#include <pbd/xml++.h>
|
||||||
#include <boost/shared_ptr.hpp>
|
|
||||||
|
|
||||||
namespace ARDOUR {
|
class ProcessorSelection {
|
||||||
class Processor;
|
public:
|
||||||
}
|
ProcessorSelection() : node (0) {}
|
||||||
|
~ProcessorSelection() { if (node) { delete node; } }
|
||||||
|
|
||||||
struct ProcessorSelection : list<boost::shared_ptr<ARDOUR::Processor> > {};
|
void set (XMLNode* n) {
|
||||||
|
if (node) {
|
||||||
|
delete node;
|
||||||
|
}
|
||||||
|
node = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
void add (XMLNode* newchild) {
|
||||||
|
if (!node) {
|
||||||
|
node = new XMLNode ("add");
|
||||||
|
}
|
||||||
|
node->add_child_nocopy (*newchild);
|
||||||
|
}
|
||||||
|
|
||||||
|
void clear () {
|
||||||
|
if (node) {
|
||||||
|
delete node;
|
||||||
|
node = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool empty () const { return node == 0 || node->children().empty(); }
|
||||||
|
|
||||||
|
const XMLNode& get_node() const { return *node; }
|
||||||
|
|
||||||
|
private:
|
||||||
|
XMLNode* node;
|
||||||
|
};
|
||||||
|
|
||||||
#endif /* __ardour_gtk_processor_selection_h__ */
|
#endif /* __ardour_gtk_processor_selection_h__ */
|
||||||
|
|
|
||||||
|
|
@ -46,8 +46,8 @@ RouteRedirectSelection::operator= (const RouteRedirectSelection& other)
|
||||||
bool
|
bool
|
||||||
operator== (const RouteRedirectSelection& a, const RouteRedirectSelection& b)
|
operator== (const RouteRedirectSelection& a, const RouteRedirectSelection& b)
|
||||||
{
|
{
|
||||||
return a.processors == b.processors &&
|
// XXX MUST TEST PROCESSORS SOMEHOW
|
||||||
a.routes == b.routes;
|
return a.routes == b.routes;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -72,63 +72,19 @@ RouteRedirectSelection::clear_routes ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RouteRedirectSelection::add (boost::shared_ptr<Processor> r)
|
RouteRedirectSelection::add (XMLNode* node)
|
||||||
{
|
{
|
||||||
if (find (processors.begin(), processors.end(), r) == processors.end()) {
|
// XXX check for duplicate
|
||||||
processors.push_back (r);
|
processors.add (node);
|
||||||
|
ProcessorsChanged();
|
||||||
// XXX SHAREDPTR FIXME
|
|
||||||
// void (RouteRedirectSelection::*pmf)(Redirect*) = &RouteRedirectSelection::remove;
|
|
||||||
// r->GoingAway.connect (mem_fun(*this, pmf));
|
|
||||||
|
|
||||||
ProcessorsChanged();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
RouteRedirectSelection::add (const vector<boost::shared_ptr<Processor> >& rlist)
|
RouteRedirectSelection::set (XMLNode* node)
|
||||||
{
|
|
||||||
bool changed = false;
|
|
||||||
|
|
||||||
for (vector<boost::shared_ptr<Processor> >::const_iterator i = rlist.begin(); i != rlist.end(); ++i) {
|
|
||||||
if (find (processors.begin(), processors.end(), *i) == processors.end()) {
|
|
||||||
processors.push_back (*i);
|
|
||||||
|
|
||||||
// XXX SHAREDPTR FIXME
|
|
||||||
|
|
||||||
//void (RouteRedirectSelection::*pmf)(Redirect*) = &RouteRedirectSelection::remove;
|
|
||||||
// (*i)->GoingAway.connect (mem_fun(*this, pmf));
|
|
||||||
changed = true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (changed) {
|
|
||||||
ProcessorsChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
RouteRedirectSelection::remove (boost::shared_ptr<Processor> r)
|
|
||||||
{
|
|
||||||
list<boost::shared_ptr<Processor> >::iterator i;
|
|
||||||
if ((i = find (processors.begin(), processors.end(), r)) != processors.end()) {
|
|
||||||
processors.erase (i);
|
|
||||||
ProcessorsChanged ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
RouteRedirectSelection::set (boost::shared_ptr<Processor> r)
|
|
||||||
{
|
{
|
||||||
clear_processors ();
|
clear_processors ();
|
||||||
add (r);
|
processors.set (node);
|
||||||
}
|
ProcessorsChanged ();
|
||||||
|
|
||||||
void
|
|
||||||
RouteRedirectSelection::set (const vector<boost::shared_ptr<Processor> >& rlist)
|
|
||||||
{
|
|
||||||
clear_processors ();
|
|
||||||
add (rlist);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -42,11 +42,8 @@ class RouteRedirectSelection : public sigc::trackable
|
||||||
void clear ();
|
void clear ();
|
||||||
bool empty();
|
bool empty();
|
||||||
|
|
||||||
void set (boost::shared_ptr<ARDOUR::Processor>);
|
void set (XMLNode* node);
|
||||||
void set (const std::vector<boost::shared_ptr<ARDOUR::Processor> >&);
|
void add (XMLNode* node);
|
||||||
void add (boost::shared_ptr<ARDOUR::Processor>);
|
|
||||||
void add (const std::vector<boost::shared_ptr<ARDOUR::Processor> >&);
|
|
||||||
void remove (boost::shared_ptr<ARDOUR::Processor>);
|
|
||||||
|
|
||||||
void set (boost::shared_ptr<ARDOUR::Route>);
|
void set (boost::shared_ptr<ARDOUR::Route>);
|
||||||
void add (boost::shared_ptr<ARDOUR::Route>);
|
void add (boost::shared_ptr<ARDOUR::Route>);
|
||||||
|
|
|
||||||
|
|
@ -63,8 +63,7 @@ operator== (const Selection& a, const Selection& b)
|
||||||
a.time.group == b.time.group &&
|
a.time.group == b.time.group &&
|
||||||
a.time == b.time &&
|
a.time == b.time &&
|
||||||
a.lines == b.lines &&
|
a.lines == b.lines &&
|
||||||
a.playlists == b.playlists &&
|
a.playlists == b.playlists;
|
||||||
a.processors == b.processors;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Clear everything from the Selection */
|
/** Clear everything from the Selection */
|
||||||
|
|
@ -77,7 +76,6 @@ Selection::clear ()
|
||||||
clear_lines();
|
clear_lines();
|
||||||
clear_time ();
|
clear_time ();
|
||||||
clear_playlists ();
|
clear_playlists ();
|
||||||
clear_processors ();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -90,15 +88,6 @@ Selection::dump_region_layers()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Selection::clear_processors ()
|
|
||||||
{
|
|
||||||
if (!processors.empty()) {
|
|
||||||
processors.clear ();
|
|
||||||
ProcessorsChanged ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::clear_regions ()
|
Selection::clear_regions ()
|
||||||
{
|
{
|
||||||
|
|
@ -153,20 +142,6 @@ Selection::clear_lines ()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Selection::toggle (boost::shared_ptr<Processor> r)
|
|
||||||
{
|
|
||||||
ProcessorSelection::iterator i;
|
|
||||||
|
|
||||||
if ((i = find (processors.begin(), processors.end(), r)) == processors.end()) {
|
|
||||||
processors.push_back (r);
|
|
||||||
} else {
|
|
||||||
processors.erase (i);
|
|
||||||
}
|
|
||||||
ProcessorsChanged();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::toggle (boost::shared_ptr<Playlist> pl)
|
Selection::toggle (boost::shared_ptr<Playlist> pl)
|
||||||
{
|
{
|
||||||
|
|
@ -252,16 +227,6 @@ Selection::toggle (nframes_t start, nframes_t end)
|
||||||
return next_time_id - 1;
|
return next_time_id - 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void
|
|
||||||
Selection::add (boost::shared_ptr<Processor> i)
|
|
||||||
{
|
|
||||||
if (find (processors.begin(), processors.end(), i) == processors.end()) {
|
|
||||||
processors.push_back (i);
|
|
||||||
ProcessorsChanged();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::add (boost::shared_ptr<Playlist> pl)
|
Selection::add (boost::shared_ptr<Playlist> pl)
|
||||||
{
|
{
|
||||||
|
|
@ -394,16 +359,6 @@ Selection::add (AutomationList* ac)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Selection::remove (boost::shared_ptr<Processor> r)
|
|
||||||
{
|
|
||||||
ProcessorSelection::iterator i;
|
|
||||||
if ((i = find (processors.begin(), processors.end(), r)) != processors.end()) {
|
|
||||||
processors.erase (i);
|
|
||||||
ProcessorsChanged ();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::remove (TimeAxisView* track)
|
Selection::remove (TimeAxisView* track)
|
||||||
{
|
{
|
||||||
|
|
@ -509,13 +464,6 @@ Selection::remove (AutomationList *ac)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
|
||||||
Selection::set (boost::shared_ptr<Processor> i)
|
|
||||||
{
|
|
||||||
clear_processors ();
|
|
||||||
add (i);
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
void
|
||||||
Selection::set (TimeAxisView* track)
|
Selection::set (TimeAxisView* track)
|
||||||
{
|
{
|
||||||
|
|
@ -624,8 +572,7 @@ Selection::empty ()
|
||||||
playlists.empty () &&
|
playlists.empty () &&
|
||||||
lines.empty () &&
|
lines.empty () &&
|
||||||
time.empty () &&
|
time.empty () &&
|
||||||
playlists.empty () &&
|
playlists.empty ()
|
||||||
processors.empty ()
|
|
||||||
;
|
;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,6 @@ class Selection : public sigc::trackable
|
||||||
TimeSelection time;
|
TimeSelection time;
|
||||||
AutomationSelection lines;
|
AutomationSelection lines;
|
||||||
PlaylistSelection playlists;
|
PlaylistSelection playlists;
|
||||||
ProcessorSelection processors;
|
|
||||||
PointSelection points;
|
PointSelection points;
|
||||||
|
|
||||||
Selection() {
|
Selection() {
|
||||||
|
|
@ -84,7 +83,6 @@ class Selection : public sigc::trackable
|
||||||
sigc::signal<void> TimeChanged;
|
sigc::signal<void> TimeChanged;
|
||||||
sigc::signal<void> LinesChanged;
|
sigc::signal<void> LinesChanged;
|
||||||
sigc::signal<void> PlaylistsChanged;
|
sigc::signal<void> PlaylistsChanged;
|
||||||
sigc::signal<void> ProcessorsChanged;
|
|
||||||
sigc::signal<void> PointsChanged;
|
sigc::signal<void> PointsChanged;
|
||||||
|
|
||||||
void clear ();
|
void clear ();
|
||||||
|
|
@ -107,7 +105,6 @@ class Selection : public sigc::trackable
|
||||||
void set (ARDOUR::AutomationList*);
|
void set (ARDOUR::AutomationList*);
|
||||||
void set (boost::shared_ptr<ARDOUR::Playlist>);
|
void set (boost::shared_ptr<ARDOUR::Playlist>);
|
||||||
void set (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
|
void set (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
|
||||||
void set (boost::shared_ptr<ARDOUR::Processor>);
|
|
||||||
void set (AutomationSelectable*);
|
void set (AutomationSelectable*);
|
||||||
|
|
||||||
void toggle (TimeAxisView*);
|
void toggle (TimeAxisView*);
|
||||||
|
|
@ -118,7 +115,6 @@ class Selection : public sigc::trackable
|
||||||
void toggle (ARDOUR::AutomationList*);
|
void toggle (ARDOUR::AutomationList*);
|
||||||
void toggle (boost::shared_ptr<ARDOUR::Playlist>);
|
void toggle (boost::shared_ptr<ARDOUR::Playlist>);
|
||||||
void toggle (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
|
void toggle (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
|
||||||
void toggle (boost::shared_ptr<ARDOUR::Processor>);
|
|
||||||
void toggle (const std::vector<AutomationSelectable*>&);
|
void toggle (const std::vector<AutomationSelectable*>&);
|
||||||
|
|
||||||
void add (TimeAxisView*);
|
void add (TimeAxisView*);
|
||||||
|
|
@ -129,7 +125,6 @@ class Selection : public sigc::trackable
|
||||||
void add (ARDOUR::AutomationList*);
|
void add (ARDOUR::AutomationList*);
|
||||||
void add (boost::shared_ptr<ARDOUR::Playlist>);
|
void add (boost::shared_ptr<ARDOUR::Playlist>);
|
||||||
void add (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
|
void add (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
|
||||||
void add (boost::shared_ptr<ARDOUR::Processor>);
|
|
||||||
|
|
||||||
void remove (TimeAxisView*);
|
void remove (TimeAxisView*);
|
||||||
void remove (const std::list<TimeAxisView*>&);
|
void remove (const std::list<TimeAxisView*>&);
|
||||||
|
|
@ -139,7 +134,6 @@ class Selection : public sigc::trackable
|
||||||
void remove (ARDOUR::AutomationList*);
|
void remove (ARDOUR::AutomationList*);
|
||||||
void remove (boost::shared_ptr<ARDOUR::Playlist>);
|
void remove (boost::shared_ptr<ARDOUR::Playlist>);
|
||||||
void remove (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
|
void remove (const std::list<boost::shared_ptr<ARDOUR::Playlist> >&);
|
||||||
void remove (boost::shared_ptr<ARDOUR::Processor>);
|
|
||||||
void remove (const list<Selectable*>&);
|
void remove (const list<Selectable*>&);
|
||||||
|
|
||||||
void replace (uint32_t time_index, nframes_t start, nframes_t end);
|
void replace (uint32_t time_index, nframes_t start, nframes_t end);
|
||||||
|
|
@ -149,7 +143,6 @@ class Selection : public sigc::trackable
|
||||||
void clear_time();
|
void clear_time();
|
||||||
void clear_lines ();
|
void clear_lines ();
|
||||||
void clear_playlists ();
|
void clear_playlists ();
|
||||||
void clear_processors ();
|
|
||||||
void clear_points ();
|
void clear_points ();
|
||||||
|
|
||||||
void foreach_region (void (ARDOUR::Region::*method)(void));
|
void foreach_region (void (ARDOUR::Region::*method)(void));
|
||||||
|
|
|
||||||
|
|
@ -59,8 +59,14 @@ class PluginInfo {
|
||||||
public:
|
public:
|
||||||
PluginInfo () { }
|
PluginInfo () { }
|
||||||
PluginInfo (const PluginInfo &o)
|
PluginInfo (const PluginInfo &o)
|
||||||
: name(o.name), n_inputs(o.n_inputs), n_outputs(o.n_outputs),
|
: name(o.name),
|
||||||
path (o.path), unique_id(o.unique_id), index(o.index) {}
|
category (o.category),
|
||||||
|
creator (o.creator),
|
||||||
|
path (o.path),
|
||||||
|
n_inputs(o.n_inputs),
|
||||||
|
n_outputs(o.n_outputs),
|
||||||
|
unique_id(o.unique_id),
|
||||||
|
index(o.index) {}
|
||||||
virtual ~PluginInfo () { }
|
virtual ~PluginInfo () { }
|
||||||
|
|
||||||
string name;
|
string name;
|
||||||
|
|
|
||||||
|
|
@ -125,8 +125,6 @@ Automatable::add_control(boost::shared_ptr<AutomationControl> ac)
|
||||||
|
|
||||||
_controls[param] = ac;
|
_controls[param] = ac;
|
||||||
|
|
||||||
cerr << _name << ": added parameter " << param.to_string() << endl;
|
|
||||||
|
|
||||||
_can_automate_list.insert(param);
|
_can_automate_list.insert(param);
|
||||||
|
|
||||||
// Sync everything (derived classes) up to initial values
|
// Sync everything (derived classes) up to initial values
|
||||||
|
|
@ -459,7 +457,6 @@ Automatable::control_factory(boost::shared_ptr<AutomationList> list)
|
||||||
// FIXME: this will die horribly if this is not a MidiTrack
|
// FIXME: this will die horribly if this is not a MidiTrack
|
||||||
return boost::shared_ptr<AutomationControl>(new MidiTrack::MidiControl((MidiTrack*)this, list));
|
return boost::shared_ptr<AutomationControl>(new MidiTrack::MidiControl((MidiTrack*)this, list));
|
||||||
} else {
|
} else {
|
||||||
cerr << "WARNING: Default AutomationControl created for " << list->parameter().to_string() << endl;
|
|
||||||
return boost::shared_ptr<AutomationControl>(new AutomationControl(_session, list));
|
return boost::shared_ptr<AutomationControl>(new AutomationControl(_session, list));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -76,7 +76,7 @@ PluginInsert::PluginInsert (Session& s, const XMLNode& node)
|
||||||
throw failed_constructor();
|
throw failed_constructor();
|
||||||
}
|
}
|
||||||
|
|
||||||
set_automatable ();
|
// set_automatable ();
|
||||||
|
|
||||||
{
|
{
|
||||||
Glib::Mutex::Lock em (_session.engine().process_lock());
|
Glib::Mutex::Lock em (_session.engine().process_lock());
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue