diff options
author | Paul Davis <paul@linuxaudiosystems.com> | 2010-03-02 00:00:00 +0000 |
---|---|---|
committer | Paul Davis <paul@linuxaudiosystems.com> | 2010-03-02 00:00:00 +0000 |
commit | db8b575c30845bafc34b87bacd52129c95d1c478 (patch) | |
tree | 7a521b7795cc6cc4e41d717a0feabd1aefb83e1f /gtk2_ardour | |
parent | 3540594dc53137eb9e857f9e3c1309382a6d7bef (diff) |
the mega-properties/SequenceProperty patch. split is broken at present (right hand starts has start-in-source of zero)
git-svn-id: svn://localhost/ardour2/branches/3.0@6718 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r-- | gtk2_ardour/editor.cc | 6 | ||||
-rw-r--r-- | gtk2_ardour/editor_audio_import.cc | 2 | ||||
-rw-r--r-- | gtk2_ardour/editor_drag.cc | 62 | ||||
-rw-r--r-- | gtk2_ardour/editor_mouse.cc | 14 | ||||
-rw-r--r-- | gtk2_ardour/editor_ops.cc | 19 | ||||
-rw-r--r-- | gtk2_ardour/editor_selection.cc | 4 | ||||
-rw-r--r-- | gtk2_ardour/opts.cc | 2 |
7 files changed, 77 insertions, 32 deletions
diff --git a/gtk2_ardour/editor.cc b/gtk2_ardour/editor.cc index 88b7586888..1b03576ace 100644 --- a/gtk2_ardour/editor.cc +++ b/gtk2_ardour/editor.cc @@ -3995,7 +3995,7 @@ Editor::new_playlists (TimeAxisView* v) begin_reversible_command (_("new playlists")); vector<boost::shared_ptr<ARDOUR::Playlist> > playlists; _session->playlists->get (playlists); - mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_new_playlist), playlists), v, ARDOUR::Properties::edit.id); + mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_new_playlist), playlists), v, ARDOUR::Properties::edit.property_id); commit_reversible_command (); } @@ -4011,7 +4011,7 @@ Editor::copy_playlists (TimeAxisView* v) begin_reversible_command (_("copy playlists")); vector<boost::shared_ptr<ARDOUR::Playlist> > playlists; _session->playlists->get (playlists); - mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_copy_playlist), playlists), v, ARDOUR::Properties::edit.id); + mapover_tracks (sigc::bind (sigc::mem_fun (*this, &Editor::mapped_use_copy_playlist), playlists), v, ARDOUR::Properties::edit.property_id); commit_reversible_command (); } @@ -4026,7 +4026,7 @@ Editor::clear_playlists (TimeAxisView* v) begin_reversible_command (_("clear playlists")); vector<boost::shared_ptr<ARDOUR::Playlist> > playlists; _session->playlists->get (playlists); - mapover_tracks (sigc::mem_fun (*this, &Editor::mapped_clear_playlist), v, ARDOUR::Properties::edit.id); + mapover_tracks (sigc::mem_fun (*this, &Editor::mapped_clear_playlist), v, ARDOUR::Properties::edit.property_id); commit_reversible_command (); } diff --git a/gtk2_ardour/editor_audio_import.cc b/gtk2_ardour/editor_audio_import.cc index c70832182a..05056f3829 100644 --- a/gtk2_ardour/editor_audio_import.cc +++ b/gtk2_ardour/editor_audio_import.cc @@ -838,7 +838,7 @@ Editor::finish_bringing_in_material (boost::shared_ptr<Region> region, uint32_t } boost::shared_ptr<Playlist> playlist = existing_track->diskstream()->playlist(); - boost::shared_ptr<Region> copy (RegionFactory::create (region)); + boost::shared_ptr<Region> copy (RegionFactory::create (region, region->properties())); begin_reversible_command (_("insert file")); XMLNode &before = playlist->get_state(); playlist->add_region (copy, pos); diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index efcd73ba26..2922ad19bb 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -818,6 +818,7 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) vector<RegionView*> copies; boost::shared_ptr<Diskstream> ds; boost::shared_ptr<Playlist> from_playlist; + boost::shared_ptr<Playlist> to_playlist; RegionSelection new_views; typedef set<boost::shared_ptr<Playlist> > PlaylistSet; PlaylistSet modified_playlists; @@ -828,6 +829,7 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) bool changed_tracks, changed_position; map<RegionView*, pair<RouteTimeAxisView*, int> > final; RouteTimeAxisView* source_tv; + vector<StatefulDiffCommand*> sdc; if (!movement_occurred) { /* just a click */ @@ -878,6 +880,8 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) /* make a list of where each region ended up */ final = find_time_axis_views_and_layers (); + cerr << "Iterate over " << _views.size() << " views\n"; + for (list<RegionView*>::const_iterator i = _views.begin(); i != _views.end(); ) { RegionView* rv = (*i); @@ -886,6 +890,9 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) nframes64_t where; + from_playlist.reset (); + to_playlist.reset (); + if (rv->region()->locked()) { ++i; continue; @@ -915,7 +922,7 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) if (changed_tracks || _copy) { - boost::shared_ptr<Playlist> to_playlist = dest_rtv->playlist(); + to_playlist = dest_rtv->playlist(); if (!to_playlist) { ++i; @@ -929,10 +936,18 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) insert_result = modified_playlists.insert (to_playlist); if (insert_result.second) { - _editor->session()->add_command (new MementoCommand<Playlist>(*to_playlist, &to_playlist->get_state(), 0)); + to_playlist->clear_history (); } + cerr << "To playlist " << to_playlist->name() << " region history contains " + << to_playlist->region_list().change().added.size() << " adds and " + << to_playlist->region_list().change().removed.size() << " removes\n"; + + cerr << "Adding new region " << new_region->id() << " based on " + << rv->region()->id() << endl; + to_playlist->add_region (new_region, where); + if (dest_rtv->view()->layer_display() == Stacked) { new_region->set_layer (dest_layer); new_region->set_pending_explicit_relayer (true); @@ -977,9 +992,11 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) playlist->freeze(); } + cerr << "Moving region " << rv->region()->id() << endl; + rv->region()->set_position (where, (void*) this); - _editor->session()->add_command (new StatefulDiffCommand (rv->region())); + sdc.push_back (new StatefulDiffCommand (rv->region())); } if (changed_tracks && !_copy) { @@ -1012,9 +1029,15 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) insert_result = modified_playlists.insert (from_playlist); if (insert_result.second) { - _editor->session()->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0)); + from_playlist->clear_history (); } + + cerr << "From playlist " << from_playlist->name() << " region history contains " + << from_playlist->region_list().change().added.size() << " adds and " + << from_playlist->region_list().change().removed.size() << " removes\n"; + cerr << "removing region " << rv->region() << endl; + from_playlist->remove_region (rv->region()); /* OK, this is where it gets tricky. If the playlist was being used by >1 tracks, and the region @@ -1035,7 +1058,16 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) */ if (_views.empty()) { - break; + if (to_playlist) { + sdc.push_back (new StatefulDiffCommand (to_playlist)); + cerr << "Saved diff for to:" << to_playlist->name() << endl; + } + + if (from_playlist && (from_playlist != to_playlist)) { + sdc.push_back (new StatefulDiffCommand (from_playlist)); + cerr << "Saved diff for from:" << from_playlist->name() << endl; + } + break; } else { i = _views.begin(); } @@ -1047,11 +1079,25 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) if (_copy) { copies.push_back (rv); } + + cerr << "Done with TV, top = " << to_playlist << " from = " << from_playlist << endl; + + if (to_playlist) { + sdc.push_back (new StatefulDiffCommand (to_playlist)); + cerr << "Saved diff for to:" << to_playlist->name() << endl; + } + + if (from_playlist && (from_playlist != to_playlist)) { + sdc.push_back (new StatefulDiffCommand (from_playlist)); + cerr << "Saved diff for from:" << from_playlist->name() << endl; + } } + /* if we've created new regions either by copying or moving to a new track, we want to replace the old selection with the new ones */ + if (new_views.size() > 0) { _editor->selection->set (new_views); } @@ -1061,9 +1107,9 @@ RegionMoveDrag::finished (GdkEvent* /*event*/, bool movement_occurred) } out: - for (set<boost::shared_ptr<Playlist> >::iterator p = modified_playlists.begin(); p != modified_playlists.end(); ++p) { - _editor->session()->add_command (new MementoCommand<Playlist>(*(*p), 0, &(*p)->get_state())); - } + for (vector<StatefulDiffCommand*>::iterator i = sdc.begin(); i != sdc.end(); ++i) { + _editor->session()->add_command (*i); + } _editor->commit_reversible_command (); diff --git a/gtk2_ardour/editor_mouse.cc b/gtk2_ardour/editor_mouse.cc index 13bdf7af5c..5820218a2a 100644 --- a/gtk2_ardour/editor_mouse.cc +++ b/gtk2_ardour/editor_mouse.cc @@ -687,14 +687,14 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT switch (item_type) { case FadeInHandleItem: { - RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.id); + RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id); _drags->set (new FadeInDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), s), event); return true; } case FadeOutHandleItem: { - RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.id); + RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id); _drags->set (new FadeOutDrag (this, item, reinterpret_cast<RegionView*> (item->get_data("regionview")), s), event); return true; } @@ -717,7 +717,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT case RegionViewNameHighlight: { - RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.id); + RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id); _drags->set (new TrimDrag (this, item, clicked_regionview, s.by_layer()), event); return true; break; @@ -726,7 +726,7 @@ Editor::button_press_handler_1 (ArdourCanvas::Item* item, GdkEvent* event, ItemT case RegionViewName: { /* rename happens on edit clicks */ - RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.id); + RegionSelection s = get_equivalent_regions (selection->regions, Properties::edit.property_id); _drags->set (new TrimDrag (this, clicked_regionview->get_name_highlight(), clicked_regionview, s.by_layer()), event); return true; break; @@ -2484,7 +2484,7 @@ Editor::add_region_drag (ArdourCanvas::Item* item, GdkEvent* event, RegionView* if (Config->get_edit_mode() == Splice) { _drags->add (new RegionSpliceDrag (this, item, region_view, selection->regions.by_layer())); } else { - RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); _drags->add (new RegionMoveDrag (this, item, region_view, s.by_layer(), false, false)); } @@ -2499,7 +2499,7 @@ Editor::add_region_copy_drag (ArdourCanvas::Item* item, GdkEvent* event, RegionV _region_motion_group->raise_to_top (); - RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); _drags->add (new RegionMoveDrag (this, item, region_view, s.by_layer(), false, true)); } @@ -2512,7 +2512,7 @@ Editor::add_region_brush_drag (ArdourCanvas::Item* item, GdkEvent* event, Region return; } - RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection s = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); _drags->add (new RegionMoveDrag (this, item, region_view, s.by_layer(), true, false)); begin_reversible_command (_("Drag region brush")); diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc index 2bb91fe229..c3800b21fb 100644 --- a/gtk2_ardour/editor_ops.cc +++ b/gtk2_ardour/editor_ops.cc @@ -169,10 +169,9 @@ Editor::split_regions_at (nframes64_t where, RegionSelection& regions) } if (pl) { - XMLNode &before = pl->get_state(); + pl->clear_history (); pl->split_region ((*a)->region(), where); - XMLNode &after = pl->get_state(); - _session->add_command(new MementoCommand<Playlist>(*pl, &before, &after)); + _session->add_command (new StatefulDiffCommand (pl)); } a = tmp; @@ -4883,7 +4882,7 @@ Editor::brush (nframes64_t pos) void Editor::reset_region_gain_envelopes () { - RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); if (!_session || rs.empty()) { return; @@ -4908,7 +4907,7 @@ Editor::reset_region_gain_envelopes () void Editor::toggle_gain_envelope_visibility () { - RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); if (!_session || rs.empty()) { return; @@ -4932,7 +4931,7 @@ Editor::toggle_gain_envelope_visibility () void Editor::toggle_gain_envelope_active () { - RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); if (!_session || rs.empty()) { return; @@ -4955,7 +4954,7 @@ Editor::toggle_gain_envelope_active () void Editor::toggle_region_lock () { - RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); if (!_session || rs.empty()) { return; @@ -4975,7 +4974,7 @@ Editor::toggle_region_lock () void Editor::set_region_lock_style (Region::PositionLockStyle ps) { - RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); if (!_session || rs.empty()) { return; @@ -4997,7 +4996,7 @@ Editor::set_region_lock_style (Region::PositionLockStyle ps) void Editor::toggle_region_mute () { - RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); if (!_session || rs.empty()) { return; @@ -5017,7 +5016,7 @@ Editor::toggle_region_mute () void Editor::toggle_region_opaque () { - RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.id); + RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id); if (!_session || rs.empty()) { return; diff --git a/gtk2_ardour/editor_selection.cc b/gtk2_ardour/editor_selection.cc index 3e5b412c85..5b29d8439f 100644 --- a/gtk2_ardour/editor_selection.cc +++ b/gtk2_ardour/editor_selection.cc @@ -476,7 +476,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op, if (press) { if (selection->selected (clicked_routeview)) { - get_equivalent_regions (clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.id); + get_equivalent_regions (clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id); } else { all_equivalent_regions.push_back (clicked_regionview); } @@ -494,7 +494,7 @@ Editor::set_selected_regionview_from_click (bool press, Selection::Operation op, case Selection::Set: if (!selection->selected (clicked_regionview)) { - get_equivalent_regions (clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.id); + get_equivalent_regions (clicked_regionview, all_equivalent_regions, ARDOUR::Properties::select.property_id); selection->set (all_equivalent_regions); commit = true; } else { diff --git a/gtk2_ardour/opts.cc b/gtk2_ardour/opts.cc index b5075daa2f..429d5fa85b 100644 --- a/gtk2_ardour/opts.cc +++ b/gtk2_ardour/opts.cc @@ -139,7 +139,7 @@ ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[]) break; case 'D': - if (ARDOUR::parse_debug_options (optarg)) { + if (PBD::parse_debug_options (optarg)) { exit (0); } break; |