diff options
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor_canvas.cc | 3 | ||||
-rw-r--r-- | gtk2_ardour/io_selector.cc | 41 | ||||
-rw-r--r-- | gtk2_ardour/io_selector.h | 2 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.cc | 91 | ||||
-rw-r--r-- | gtk2_ardour/processor_box.h | 5 |
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 (); |