diff options
author | Robin Gareus <robin@gareus.org> | 2016-05-06 16:04:05 +0200 |
---|---|---|
committer | Robin Gareus <robin@gareus.org> | 2016-05-06 16:04:05 +0200 |
commit | baca1fd37711e23d6100c7b8cc946aef13f88ab4 (patch) | |
tree | 6655de66f33a577ab93e70b79104d93d19c60388 /gtk2_ardour | |
parent | 70160db4bedc7f782d12125496ec354b1ca35569 (diff) |
Create new track by dragging an instrument from the favorites sidebar
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/ardour_ui.cc | 19 | ||||
-rw-r--r-- | gtk2_ardour/ardour_ui.h | 11 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.cc | 39 | ||||
-rw-r--r-- | gtk2_ardour/mixer_ui.h | 1 |
4 files changed, 57 insertions, 13 deletions
diff --git a/gtk2_ardour/ardour_ui.cc b/gtk2_ardour/ardour_ui.cc index 159984fbb6..0dbca05a51 100644 --- a/gtk2_ardour/ardour_ui.cc +++ b/gtk2_ardour/ardour_ui.cc @@ -1798,7 +1798,8 @@ ARDOUR_UI::session_add_mixed_track ( uint32_t how_many, const string& name_template, bool strict_io, - PluginInfoPtr instrument) + PluginInfoPtr instrument, + Plugin::PresetRecord* pset) { list<boost::shared_ptr<MidiTrack> > tracks; @@ -1833,7 +1834,8 @@ ARDOUR_UI::session_add_midi_bus ( uint32_t how_many, const string& name_template, bool strict_io, - PluginInfoPtr instrument) + PluginInfoPtr instrument, + Plugin::PresetRecord* pset) { RouteList routes; @@ -1843,7 +1845,7 @@ ARDOUR_UI::session_add_midi_bus ( } try { - routes = _session->new_midi_route (route_group, how_many, name_template, instrument); + routes = _session->new_midi_route (route_group, how_many, name_template, instrument, pset); if (routes.size() != how_many) { error << string_compose(P_("could not create %1 new Midi Bus", "could not create %1 new Midi Busses", how_many), how_many) << endmsg; } @@ -1868,15 +1870,16 @@ ARDOUR_UI::session_add_midi_route ( uint32_t how_many, const string& name_template, bool strict_io, - PluginInfoPtr instrument) + PluginInfoPtr instrument, + Plugin::PresetRecord* pset) { ChanCount one_midi_channel; one_midi_channel.set (DataType::MIDI, 1); if (disk) { - session_add_mixed_track (one_midi_channel, one_midi_channel, route_group, how_many, name_template, strict_io, instrument); + session_add_mixed_track (one_midi_channel, one_midi_channel, route_group, how_many, name_template, strict_io, instrument, pset); } else { - session_add_midi_bus (route_group, how_many, name_template, strict_io, instrument); + session_add_midi_bus (route_group, how_many, name_template, strict_io, instrument, pset); } } @@ -4017,13 +4020,13 @@ ARDOUR_UI::add_route () session_add_midi_track (route_group, count, name_template, strict_io, instrument); break; case AddRouteDialog::MixedTrack: - session_add_mixed_track (input_chan, output_chan, route_group, count, name_template, strict_io, instrument); + session_add_mixed_track (input_chan, output_chan, route_group, count, name_template, strict_io, instrument, 0); break; case AddRouteDialog::AudioBus: session_add_audio_bus (input_chan.n_audio(), output_chan.n_audio(), route_group, count, name_template, strict_io); break; case AddRouteDialog::MidiBus: - session_add_midi_bus (route_group, count, name_template, strict_io, instrument); + session_add_midi_bus (route_group, count, name_template, strict_io, instrument, 0); break; } } diff --git a/gtk2_ardour/ardour_ui.h b/gtk2_ardour/ardour_ui.h index 6d2cb636e3..5b608a6c9c 100644 --- a/gtk2_ardour/ardour_ui.h +++ b/gtk2_ardour/ardour_ui.h @@ -298,14 +298,15 @@ public: uint32_t how_many, std::string const & name_template, bool strict_io, - ARDOUR::PluginInfoPtr instrument) { - session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument); + ARDOUR::PluginInfoPtr instrument, + ARDOUR::Plugin::PresetRecord* preset = NULL) { + session_add_midi_route (true, route_group, how_many, name_template, strict_io, instrument, preset); } - void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr); - void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr); + void session_add_mixed_track (const ARDOUR::ChanCount&, const ARDOUR::ChanCount&, ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*); + void session_add_midi_bus (ARDOUR::RouteGroup*, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*); void session_add_audio_route (bool, int32_t, int32_t, ARDOUR::TrackMode, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool); - void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr); + void session_add_midi_route (bool, ARDOUR::RouteGroup *, uint32_t, std::string const &, bool, ARDOUR::PluginInfoPtr, ARDOUR::Plugin::PresetRecord*); void display_insufficient_ports_message (); diff --git a/gtk2_ardour/mixer_ui.cc b/gtk2_ardour/mixer_ui.cc index b037055b63..8457738f1b 100644 --- a/gtk2_ardour/mixer_ui.cc +++ b/gtk2_ardour/mixer_ui.cc @@ -117,6 +117,13 @@ Mixer_UI::Mixer_UI () scroller_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); scroller_base.set_name ("MixerWindow"); scroller_base.signal_button_release_event().connect (sigc::mem_fun(*this, &Mixer_UI::strip_scroller_button_release)); + + /* set up drag-n-drop */ + vector<TargetEntry> target_table; + target_table.push_back (TargetEntry ("PluginFavoritePtr")); + scroller_base.drag_dest_set (target_table); + scroller_base.signal_drag_data_received().connect (sigc::mem_fun(*this, &Mixer_UI::scroller_drag_data_received)); + // add as last item of strip packer strip_packer.pack_end (scroller_base, true, true); @@ -1622,6 +1629,38 @@ Mixer_UI::strip_scroller_button_release (GdkEventButton* ev) } void +Mixer_UI::scroller_drag_data_received (const Glib::RefPtr<Gdk::DragContext>& context, int x, int y, const Gtk::SelectionData& data, guint info, guint time) +{ + printf ("Mixer_UI::scroller_drag_data_received\n"); + if (data.get_target() != "PluginFavoritePtr") { + context->drag_finish (false, false, time); + return; + } + + const void * d = data.get_data(); + const Gtkmm2ext::DnDTreeView<ARDOUR::PluginPresetPtr>* tv = reinterpret_cast<const Gtkmm2ext::DnDTreeView<ARDOUR::PluginPresetPtr>*>(d); + + PluginPresetList nfos; + TreeView* source; + tv->get_object_drag_data (nfos, &source); + + Route::ProcessorList pl; + bool ok = false; + + for (list<PluginPresetPtr>::const_iterator i = nfos.begin(); i != nfos.end(); ++i) { + PluginPresetPtr ppp = (*i); + PluginInfoPtr pip = ppp->_pip; + if (!pip->is_instrument ()) { + continue; + } + ARDOUR_UI::instance()->session_add_midi_track (NULL, 1, _("MIDI"), Config->get_strict_io (), pip, ppp->_preset.valid ? &ppp->_preset : 0); + ok = true; + } + + context->drag_finish (ok, false, time); +} + +void Mixer_UI::set_strip_width (Width w, bool save) { _strip_width = w; diff --git a/gtk2_ardour/mixer_ui.h b/gtk2_ardour/mixer_ui.h index 916ef5aa21..39bd39278a 100644 --- a/gtk2_ardour/mixer_ui.h +++ b/gtk2_ardour/mixer_ui.h @@ -158,6 +158,7 @@ class Mixer_UI : public Gtkmm2ext::Tabbable, public PBD::ScopedConnectionList, p std::list<MixerStrip *> strips; + void scroller_drag_data_received (const Glib::RefPtr<Gdk::DragContext>&, int, int, const Gtk::SelectionData&, guint, guint); bool strip_scroller_button_release (GdkEventButton*); void scroll_left (); void scroll_right (); |