summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_canvas.cc3
-rw-r--r--gtk2_ardour/io_selector.cc41
-rw-r--r--gtk2_ardour/io_selector.h2
-rw-r--r--gtk2_ardour/processor_box.cc91
-rw-r--r--gtk2_ardour/processor_box.h5
5 files changed, 68 insertions, 74 deletions
diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc
index bdb051173d..428334dfc6 100644
--- a/gtk2_ardour/editor_canvas.cc
+++ b/gtk2_ardour/editor_canvas.cc
@@ -543,7 +543,8 @@ Editor::drop_regions (const RefPtr<Gdk::DragContext>& context,
guint info, guint time)
{
std::list<boost::shared_ptr<Region> > regions;
- region_list_display.get_object_drag_data (regions);
+ Gtk::TreeView* source;
+ region_list_display.get_object_drag_data (regions, &source);
for (list<boost::shared_ptr<Region> >::iterator r = regions.begin(); r != regions.end(); ++r) {
diff --git a/gtk2_ardour/io_selector.cc b/gtk2_ardour/io_selector.cc
index 93ade90dca..3bc4836920 100644
--- a/gtk2_ardour/io_selector.cc
+++ b/gtk2_ardour/io_selector.cc
@@ -153,27 +153,6 @@ IOSelector::n_io_ports () const
}
}
-uint32_t
-IOSelector::maximum_io_ports () const
-{
- if (!_find_inputs_for_io_outputs) {
- return _io->input_maximum ().get (_io->default_type());
- } else {
- return _io->output_maximum ().get (_io->default_type());
- }
-}
-
-
-uint32_t
-IOSelector::minimum_io_ports () const
-{
- if (!_find_inputs_for_io_outputs) {
- return _io->input_minimum ().get (_io->default_type());
- } else {
- return _io->output_minimum ().get (_io->default_type());
- }
-}
-
void
IOSelector::add_channel (boost::shared_ptr<ARDOUR::Bundle> b)
{
@@ -249,12 +228,10 @@ IOSelectorWindow::IOSelectorWindow (ARDOUR::Session& session, boost::shared_ptr<
get_action_area()->pack_start (disconnect_button, false, false);
/* Add Port button */
- if (_selector.maximum_io_ports() > _selector.n_io_ports()) {
- add_button.set_name ("IOSelectorButton");
- add_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::ADD, Gtk::ICON_SIZE_BUTTON)));
- get_action_area()->pack_start (add_button, false, false);
- add_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (_selector, &IOSelector::add_channel), boost::shared_ptr<Bundle> ()));
- }
+ add_button.set_name ("IOSelectorButton");
+ add_button.set_image (*Gtk::manage (new Gtk::Image (Gtk::Stock::ADD, Gtk::ICON_SIZE_BUTTON)));
+ get_action_area()->pack_start (add_button, false, false);
+ add_button.signal_clicked().connect (sigc::bind (sigc::mem_fun (_selector, &IOSelector::add_channel), boost::shared_ptr<Bundle> ()));
/* Rescan button */
rescan_button.set_name ("IOSelectorButton");
@@ -299,11 +276,11 @@ IOSelectorWindow::IOSelectorWindow (ARDOUR::Session& session, boost::shared_ptr<
void
IOSelectorWindow::ports_changed ()
{
- if (_selector.maximum_io_ports() > _selector.n_io_ports()) {
- add_button.set_sensitive (true);
- } else {
- add_button.set_sensitive (false);
- }
+ /* XXX make this insensitive based on port connectivity, not
+ port counts.
+ */
+
+ add_button.set_sensitive (true);
}
void
diff --git a/gtk2_ardour/io_selector.h b/gtk2_ardour/io_selector.h
index ccd3bc929f..872fd5d7d6 100644
--- a/gtk2_ardour/io_selector.h
+++ b/gtk2_ardour/io_selector.h
@@ -45,8 +45,6 @@ class IOSelector : public PortMatrix
}
uint32_t n_io_ports () const;
- uint32_t maximum_io_ports () const;
- uint32_t minimum_io_ports () const;
boost::shared_ptr<ARDOUR::IO> const io () { return _io; }
void setup_ports (int);
bool list_is_global (int) const;
diff --git a/gtk2_ardour/processor_box.cc b/gtk2_ardour/processor_box.cc
index a259a25695..027d9df51e 100644
--- a/gtk2_ardour/processor_box.cc
+++ b/gtk2_ardour/processor_box.cc
@@ -118,7 +118,8 @@ ProcessorBox::ProcessorBox (Placement pcmnt, Session& sess, PluginSelector &plug
RefPtr<TreeSelection> selection = processor_display.get_selection();
selection->set_mode (Gtk::SELECTION_MULTIPLE);
selection->signal_changed().connect (mem_fun (*this, &ProcessorBox::selection_changed));
-
+
+ processor_display.set_data ("processorbox", this);
processor_display.set_model (model);
processor_display.append_column (X_("notshown"), columns.text);
processor_display.set_name ("ProcessorSelector");
@@ -186,16 +187,31 @@ ProcessorBox::route_going_away ()
void
-ProcessorBox::object_drop (const list<boost::shared_ptr<Processor> >& procs)
+ProcessorBox::object_drop (const list<boost::shared_ptr<Processor> >& procs, Gtk::TreeView* source, Glib::RefPtr<Gdk::DragContext>& context)
{
- for (std::list<boost::shared_ptr<Processor> >::const_iterator i = procs.begin();
- i != procs.end(); ++i) {
+ cerr << "Drop from " << source << " (mine is " << &processor_display << ") action = " << hex << context->get_suggested_action() << dec << endl;
+
+ for (list<boost::shared_ptr<Processor> >::const_iterator i = procs.begin(); i != procs.end(); ++i) {
XMLNode& state = (*i)->get_state ();
XMLNodeList nlist;
nlist.push_back (&state);
paste_processor_state (nlist);
delete &state;
}
+
+ /* since the treeview doesn't take care of this properly, we have to delete the originals
+ ourselves.
+ */
+
+ if ((context->get_suggested_action() == Gdk::ACTION_MOVE) && source) {
+ ProcessorBox* other = reinterpret_cast<ProcessorBox*> (source->get_data ("processorbox"));
+ if (other) {
+ cerr << "source was another processor box, delete the selected items\n";
+ other->delete_dragged_processors (procs);
+ }
+ }
+
+ context->drag_finish (true, (context->get_suggested_action() == Gdk::ACTION_MOVE), 0);
}
void
@@ -433,9 +449,7 @@ ProcessorBox::use_plugins (const SelectedPlugins& plugins)
processor->activate ();
}
- assign_default_sort_key (processor);
-
- if (_route->add_processor (processor, &err_streams)) {
+ if (_route->add_processor (processor, _placement, &err_streams)) {
weird_plugin_dialog (**p, err_streams, _route);
// XXX SHAREDPTR delete plugin here .. do we even need to care?
} else {
@@ -500,8 +514,7 @@ ProcessorBox::choose_insert ()
mem_fun(*this, &ProcessorBox::show_processor_active),
boost::weak_ptr<Processor>(processor)));
- assign_default_sort_key (processor);
- _route->add_processor (processor);
+ _route->add_processor (processor, _placement);
}
void
@@ -553,8 +566,7 @@ ProcessorBox::send_io_finished (IOSelector::Result r, boost::weak_ptr<Processor>
break;
case IOSelector::Accepted:
- assign_default_sort_key (processor);
- _route->add_processor (processor);
+ _route->add_processor (processor, _placement);
if (Profile->get_sae()) {
processor->activate ();
}
@@ -611,8 +623,7 @@ ProcessorBox::return_io_finished (IOSelector::Result r, boost::weak_ptr<Processo
break;
case IOSelector::Accepted:
- assign_default_sort_key (processor);
- _route->add_processor (processor);
+ _route->add_processor (processor, _placement);
if (Profile->get_sae()) {
processor->activate ();
}
@@ -658,7 +669,7 @@ ProcessorBox::add_processor_to_display (boost::weak_ptr<Processor> p)
return;
}
- if (processor == _route->amp()) {
+ if (processor == _route->amp() || !processor->visible()) {
return;
}
@@ -796,22 +807,16 @@ ProcessorBox::row_deleted (const Gtk::TreeModel::Path& path)
void
ProcessorBox::compute_processor_sort_keys ()
{
- uint32_t sort_key;
Gtk::TreeModel::Children children = model->children();
-
- if (_placement == PreFader) {
- sort_key = 0;
- } else {
- sort_key = _route->fader_sort_key() + 1;
- }
+ Route::ProcessorList our_processors;
for (Gtk::TreeModel::Children::iterator iter = children.begin(); iter != children.end(); ++iter) {
- boost::shared_ptr<Processor> r = (*iter)[columns.processor];
- r->set_sort_key (sort_key);
- sort_key++;
+ our_processors.push_back ((*iter)[columns.processor]);
}
- if (_route->sort_processors ()) {
+ if (_route->reorder_processors (our_processors, _placement)) {
+
+ /* reorder failed, so redisplay */
redisplay_processors ();
@@ -928,6 +933,8 @@ ProcessorBox::delete_processors ()
return;
}
+ no_processor_redisplay = true;
+
for (ProcSelection::iterator i = to_be_deleted.begin(); i != to_be_deleted.end(); ++i) {
void* gui = (*i)->get_gui ();
@@ -943,6 +950,27 @@ ProcessorBox::delete_processors ()
redisplay_processors ();
}
+void
+ProcessorBox::delete_dragged_processors (const list<boost::shared_ptr<Processor> >& procs)
+{
+ list<boost::shared_ptr<Processor> >::const_iterator x;
+
+ no_processor_redisplay = true;
+ for (x = procs.begin(); x != procs.end(); ++x) {
+
+ void* gui = (*x)->get_gui ();
+
+ if (gui) {
+ static_cast<Gtk::Widget*>(gui)->hide ();
+ }
+
+ _route->remove_processor(*x);
+ }
+
+ no_processor_redisplay = false;
+ redisplay_processors ();
+}
+
gint
ProcessorBox::idle_delete_processor (boost::weak_ptr<Processor> weak_processor)
{
@@ -1051,9 +1079,7 @@ ProcessorBox::paste_processor_state (const XMLNodeList& nlist)
return;
}
- assign_default_sort_key (copies.front());
-
- if (_route->add_processors (copies, 0, copies.front()->sort_key())) {
+ if (_route->add_processors (copies, _placement)) {
string msg = _(
"Copying the set of processors on the clipboard failed,\n\
@@ -1568,12 +1594,3 @@ ProcessorBox::generate_processor_title (boost::shared_ptr<PluginInsert> pi)
return string_compose(_("%1: %2 (by %3)"), _route->name(), pi->name(), maker);
}
-void
-ProcessorBox::assign_default_sort_key (boost::shared_ptr<Processor> p)
-{
- p->set_sort_key (_placement == PreFader ? 0 : 9999);
- cerr << "default sort key for "
- << _placement << " = " << p->sort_key()
- << endl;
-}
-
diff --git a/gtk2_ardour/processor_box.h b/gtk2_ardour/processor_box.h
index f5af4c49dc..a003ed8c5d 100644
--- a/gtk2_ardour/processor_box.h
+++ b/gtk2_ardour/processor_box.h
@@ -128,7 +128,8 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
Gtkmm2ext::DnDTreeView<boost::shared_ptr<ARDOUR::Processor> > processor_display;
Gtk::ScrolledWindow processor_scroller;
- void object_drop (const std::list<boost::shared_ptr<ARDOUR::Processor> >&);
+ void object_drop (const std::list<boost::shared_ptr<ARDOUR::Processor> >&, Gtk::TreeView*,
+ Glib::RefPtr<Gdk::DragContext>& context);
Width _width;
@@ -168,7 +169,6 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
void processors_reordered (const Gtk::TreeModel::Path&, const Gtk::TreeModel::iterator&, int*);
void compute_processor_sort_keys ();
- void assign_default_sort_key (boost::shared_ptr<ARDOUR::Processor>);
std::vector<sigc::connection> processor_active_connections;
std::vector<sigc::connection> processor_name_connections;
@@ -183,6 +183,7 @@ class ProcessorBox : public Gtk::HBox, public PluginInterestedObject
void copy_processors ();
void paste_processors ();
void delete_processors ();
+ void delete_dragged_processors (const std::list<boost::shared_ptr<ARDOUR::Processor> >&);
void clear_processors ();
void rename_processors ();