Create new track by dragging an instrument from the favorites sidebar
This commit is contained in:
parent
70160db4be
commit
baca1fd377
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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 ();
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
||||
|
@ -1621,6 +1628,38 @@ Mixer_UI::strip_scroller_button_release (GdkEventButton* ev)
|
|||
return false;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
|
|
|
@ -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 ();
|
||||
|
|
Loading…
Reference in New Issue