diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 19cb1d61de..ea3258aa0c 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -4343,10 +4343,7 @@ Editor::restore_editing_space () bool Editor::stamp_new_playlist (string &name, string &pgroup, bool copy) { - time_t now; - time (&now); - Glib::DateTime tm (Glib::DateTime::create_now_local (now)); - string gid (tm.format ("%F %H.%M.%S")); + string gid = Playlist::generate_pgroup_id(); pgroup = gid; if (name.length()==0) { diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h index 80ece3cd34..a435604afa 100644 --- a/gtk2_ardour/editor.h +++ b/gtk2_ardour/editor.h @@ -456,6 +456,7 @@ public: ARDOUR::MidiTrackNameSource mts, ARDOUR::MidiTempoMapDisposition mtd, samplepos_t& pos, + std::string pgroup_id, boost::shared_ptr instrument = boost::shared_ptr(), bool with_markers = false ); @@ -464,6 +465,7 @@ public: Editing::ImportDisposition disposition, Editing::ImportMode mode, samplepos_t& pos, + std::string pgroup_id, boost::shared_ptr instrument = boost::shared_ptr()); void get_regionview_corresponding_to (boost::shared_ptr region, std::vector& regions); diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index ef5bd89a29..7ab1f5673b 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -348,6 +348,7 @@ Editor::do_import (vector paths, MidiTrackNameSource midi_track_name_source, MidiTempoMapDisposition smf_tempo_disposition, samplepos_t& pos, + string pgroup_id, ARDOUR::PluginInfoPtr instrument, bool with_markers) { @@ -497,11 +498,13 @@ Editor::do_import (vector paths, } } + track->playlist()->set_pgroup_id(pgroup_id); + import_status.all_done = true; } void -Editor::do_embed (vector paths, ImportDisposition import_as, ImportMode mode, samplepos_t& pos, ARDOUR::PluginInfoPtr instrument) +Editor::do_embed (vector paths, ImportDisposition import_as, ImportMode mode, samplepos_t& pos, string pgroup_id, ARDOUR::PluginInfoPtr instrument) { boost::shared_ptr track; bool check_sample_rate = true; diff --git a/gtk2_ardour/editor_canvas.cc b/gtk2_ardour/editor_canvas.cc index 699eca653e..8f8a9d0c3c 100644 --- a/gtk2_ardour/editor_canvas.cc +++ b/gtk2_ardour/editor_canvas.cc @@ -417,6 +417,7 @@ Editor::drop_paths_part_two (const vector& paths, samplepos_t sample, do } } + string gid = Playlist::generate_pgroup_id(); std::pair const tvp = trackview_by_y_position (ypos, false); if (tvp.first == 0) { @@ -424,13 +425,13 @@ Editor::drop_paths_part_two (const vector& paths, samplepos_t sample, do /* drop onto canvas background: create new tracks */ InstrumentSelector is; // instantiation builds instrument-list and sets default. - do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, SMFTrackName, SMFTempoIgnore, sample, is.selected_instrument(), false); + do_import (midi_paths, Editing::ImportDistinctFiles, ImportAsTrack, SrcBest, SMFTrackName, SMFTempoIgnore, sample, gid, is.selected_instrument(), false); if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { do_import (audio_paths, Editing::ImportDistinctFiles, Editing::ImportAsTrack, - SrcBest, SMFTrackName, SMFTempoIgnore, sample); + SrcBest, SMFTrackName, SMFTempoIgnore, sample, gid); } else { - do_embed (audio_paths, Editing::ImportDistinctFiles, ImportAsTrack, sample); + do_embed (audio_paths, Editing::ImportDistinctFiles, ImportAsTrack, sample, gid); } } else if ((tv = dynamic_cast (tvp.first)) != 0) { @@ -442,13 +443,13 @@ Editor::drop_paths_part_two (const vector& paths, samplepos_t sample, do selection->set (tv); do_import (midi_paths, Editing::ImportSerializeFiles, ImportToTrack, - SrcBest, SMFTrackName, SMFTempoIgnore, sample); + SrcBest, SMFTrackName, SMFTempoIgnore, sample, gid); if (UIConfiguration::instance().get_only_copy_imported_files() || copy) { do_import (audio_paths, Editing::ImportSerializeFiles, Editing::ImportToTrack, - SrcBest, SMFTrackName, SMFTempoIgnore, sample, boost::shared_ptr(), false); + SrcBest, SMFTrackName, SMFTempoIgnore, sample, gid, boost::shared_ptr(), false); } else { - do_embed (audio_paths, Editing::ImportSerializeFiles, ImportToTrack, sample); + do_embed (audio_paths, Editing::ImportSerializeFiles, ImportToTrack, sample, gid); } } } diff --git a/gtk2_ardour/editor_regions.cc b/gtk2_ardour/editor_regions.cc index 5dc0e5f209..8837ca7e9f 100644 --- a/gtk2_ardour/editor_regions.cc +++ b/gtk2_ardour/editor_regions.cc @@ -1015,28 +1015,30 @@ void EditorRegions::drag_data_received (const RefPtr& context, int x, int y, const SelectionData& data, - guint info, guint time) + guint info, guint dtime) { vector paths; if (data.get_target () == "GTK_TREE_MODEL_ROW") { /* something is being dragged over the region list */ _editor->_drags->abort (); - _display.on_drag_data_received (context, x, y, data, info, time); + _display.on_drag_data_received (context, x, y, data, info, dtime); return; } - if (_editor->convert_drop_to_paths (paths, context, x, y, data, info, time) == 0) { + string gid = Playlist::generate_pgroup_id(); + + if (_editor->convert_drop_to_paths (paths, context, x, y, data, info, dtime) == 0) { samplepos_t pos = 0; bool copy = ((context->get_actions () & (Gdk::ACTION_COPY | Gdk::ACTION_LINK | Gdk::ACTION_MOVE)) == Gdk::ACTION_COPY); if (UIConfiguration::instance ().get_only_copy_imported_files () || copy) { _editor->do_import (paths, Editing::ImportDistinctFiles, Editing::ImportAsRegion, - SrcBest, SMFTrackName, SMFTempoIgnore, pos); + SrcBest, SMFTrackName, SMFTempoIgnore, pos, gid); } else { - _editor->do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos); + _editor->do_embed (paths, Editing::ImportDistinctFiles, ImportAsRegion, pos, gid); } - context->drag_finish (true, false, time); + context->drag_finish (true, false, dtime); } } diff --git a/gtk2_ardour/public_editor.h b/gtk2_ardour/public_editor.h index 095dbafa75..961e232b27 100644 --- a/gtk2_ardour/public_editor.h +++ b/gtk2_ardour/public_editor.h @@ -261,11 +261,11 @@ public: /** Import existing media */ virtual void do_import (std::vector paths, Editing::ImportDisposition, Editing::ImportMode mode, ARDOUR::SrcQuality, - ARDOUR::MidiTrackNameSource, ARDOUR::MidiTempoMapDisposition, samplepos_t&, + ARDOUR::MidiTrackNameSource, ARDOUR::MidiTempoMapDisposition, samplepos_t&, std::string pgroup_id, boost::shared_ptr instrument = boost::shared_ptr(), bool with_markers = false) = 0; virtual void do_embed (std::vector paths, Editing::ImportDisposition, Editing::ImportMode mode, - samplepos_t&, + samplepos_t&, std::string pgroup_id, boost::shared_ptr instrument = boost::shared_ptr()) = 0; /** Open main export dialog */ diff --git a/gtk2_ardour/sfdb_ui.cc b/gtk2_ardour/sfdb_ui.cc index 1210ba6076..be88b7aac4 100644 --- a/gtk2_ardour/sfdb_ui.cc +++ b/gtk2_ardour/sfdb_ui.cc @@ -2098,10 +2098,12 @@ SoundFileOmega::do_something (int action) _import_active = true; + string gid = Playlist::generate_pgroup_id(); + if (copy_files_btn.get_active()) { - PublicEditor::instance().do_import (paths, chns, mode, quality, mts, mtd, where, instrument, with_midi_markers); + PublicEditor::instance().do_import (paths, chns, mode, quality, mts, mtd, where, gid, instrument, with_midi_markers); } else { - PublicEditor::instance().do_embed (paths, chns, mode, where, instrument); + PublicEditor::instance().do_embed (paths, chns, mode, where, gid, instrument); } _import_active = false;