#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/choice.h>
+#include <gtkmm2ext/window_title.h>
#include <ardour/audioengine.h>
#include <ardour/session.h>
using namespace PBD;
using namespace sigc;
using namespace Gtk;
+using namespace Gtkmm2ext;
using namespace Editing;
/***********************************************************************
return;
}
- cerr << "drop target playlist, UC = " << playlist.use_count() << endl;
-
snap_to (where);
begin_reversible_command (_("insert dragged region"));
XMLNode &before = playlist->get_state();
- cerr << "pre add target playlist, UC = " << playlist.use_count() << endl;
playlist->add_region (RegionFactory::create (region), where, 1.0);
- cerr << "post add target playlist, UC = " << playlist.use_count() << endl;
session->add_command(new MementoCommand<Playlist>(*playlist, &before, &playlist->get_state()));
commit_reversible_command ();
-
- cerr << "post drop target playlist, UC = " << playlist.use_count() << endl;
}
void
return;
}
- dialog.set_title (_("ardour: rename region"));
+ WindowTitle title(Glib::get_application_name());
+ title += _("Rename Region");
+
+ dialog.set_title (title.get_string());
dialog.set_name ("RegionRenameWindow");
dialog.set_size_request (300, -1);
dialog.set_position (Gtk::WIN_POS_MOUSE);
if ((atv = dynamic_cast<AudioTimeAxisView*> ((*i))) != 0) {
if (atv->is_audio_track()) {
+
+ /* no edits to destructive tracks */
+
+ if (atv->audio_track()->audio_diskstream()->destructive()) {
+ continue;
+ }
if ((playlist = atv->playlist()) != 0) {
if (!doing_undo) {
if (atv->is_audio_track()) {
+ /* no edits to destructive tracks */
+
+ if (atv->audio_track()->audio_diskstream()->destructive()) {
+ continue;
+ }
+
if ((playlist = atv->playlist()) != 0) {
XMLNode *before;
if (!doing_undo) {
void
Editor::crop_region_to_selection ()
{
- if (selection->time.empty()) {
+ if (selection->time.empty() || selection->tracks.empty()) {
return;
}
vector<boost::shared_ptr<Playlist> > playlists;
boost::shared_ptr<Playlist> playlist;
- if (clicked_trackview != 0) {
-
- if ((playlist = clicked_trackview->playlist()) == 0) {
- return;
- }
-
- playlists.push_back (playlist);
-
- } else {
+ sort_track_selection ();
+
+ for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
- sort_track_selection ();
-
- for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
-
- AudioTimeAxisView* atv;
+ AudioTimeAxisView* atv;
+
+ if ((atv = dynamic_cast<AudioTimeAxisView*> ((*i))) != 0) {
+
+ if (atv->is_audio_track()) {
+
+ /* no edits to destructive tracks */
- if ((atv = dynamic_cast<AudioTimeAxisView*> ((*i))) != 0) {
+ if (atv->audio_track()->audio_diskstream()->destructive()) {
+ continue;
+ }
- if (atv->is_audio_track()) {
-
- if ((playlist = atv->playlist()) != 0) {
- playlists.push_back (playlist);
- }
+ if ((playlist = atv->playlist()) != 0) {
+ playlists.push_back (playlist);
}
}
}
}
- if (!playlists.empty()) {
-
- nframes_t start;
- nframes_t end;
- nframes_t cnt;
-
- begin_reversible_command (_("trim to selection"));
-
- for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
-
- boost::shared_ptr<Region> region;
-
- start = selection->time.start();
-
- if ((region = (*i)->top_region_at(start)) == 0) {
- continue;
- }
-
- /* now adjust lengths to that we do the right thing
- if the selection extends beyond the region
- */
-
- start = max (start, region->position());
- end = min (selection->time.end_frame(), start + region->length() - 1);
- cnt = end - start + 1;
-
- XMLNode &before = (*i)->get_state();
- region->trim_to (start, cnt, this);
- XMLNode &after = (*i)->get_state();
- session->add_command (new MementoCommand<Playlist>(*(*i), &before, &after));
+ if (playlists.empty()) {
+ return;
+ }
+
+ nframes_t start;
+ nframes_t end;
+ nframes_t cnt;
+
+ begin_reversible_command (_("trim to selection"));
+
+ for (vector<boost::shared_ptr<Playlist> >::iterator i = playlists.begin(); i != playlists.end(); ++i) {
+
+ boost::shared_ptr<Region> region;
+
+ start = selection->time.start();
+
+ if ((region = (*i)->top_region_at(start)) == 0) {
+ continue;
}
-
- commit_reversible_command ();
+
+ /* now adjust lengths to that we do the right thing
+ if the selection extends beyond the region
+ */
+
+ start = max (start, region->position());
+ if (max_frames - start < region->length()) {
+ end = start + region->length() - 1;
+ } else {
+ end = max_frames;
+ }
+ end = min (selection->time.end_frame(), end);
+ cnt = end - start + 1;
+
+ XMLNode &before = (*i)->get_state();
+ region->trim_to (start, cnt, this);
+ XMLNode &after = (*i)->get_state();
+ session->add_command (new MementoCommand<Playlist>(*(*i), &before, &after));
}
+
+ commit_reversible_command ();
}
void
if (interthread_progress_window == 0) {
build_interthread_progress_window ();
}
-
- interthread_progress_window->set_title (_("ardour: freeze"));
+
+ WindowTitle title(Glib::get_application_name());
+ title += _("Freeze");
+ interthread_progress_window->set_title (title.get_string());
interthread_progress_window->set_position (Gtk::WIN_POS_MOUSE);
interthread_progress_window->show_all ();
interthread_progress_bar.set_fraction (0.0f);
return;
}
- TrackViewList *views = get_valid_views (selection->time.track, selection->time.group);
+ TrackSelection views = selection->tracks;
nframes_t start = selection->time[clicked_selection].start;
nframes_t end = selection->time[clicked_selection].end;
nframes_t cnt = end - start + 1;
-
+
begin_reversible_command (_("bounce range"));
- for (TrackViewList::iterator i = views->begin(); i != views->end(); ++i) {
+ for (TrackViewList::iterator i = views.begin(); i != views.end(); ++i) {
AudioTimeAxisView* atv;
itt.done = false;
itt.cancel = false;
itt.progress = false;
-
+
XMLNode &before = playlist->get_state();
atv->audio_track()->bounce_range (start, cnt, itt);
XMLNode &after = playlist->get_state();
}
commit_reversible_command ();
-
- delete views;
}
void
}
boost::shared_ptr<AudioRegion> ar = boost::dynamic_pointer_cast<AudioRegion>((*x)->region());
+ boost::shared_ptr<Region> _xx;
switch (op) {
case Cut:
if (!ar) break;
- npl->add_region (RegionFactory::create (ar), (*x)->region()->position() - first_position);
+ _xx = RegionFactory::create ((*x)->region());
+ npl->add_region (_xx, (*x)->region()->position() - first_position);
pl->remove_region (((*x)->region()));
break;
case Copy:
if (!ar) break;
-
- npl->add_region (RegionFactory::create (ar), (*x)->region()->position() - first_position);
+
+ /* copy region before adding, so we're not putting same object into two different playlists */
+ npl->add_region (RegionFactory::create ((*x)->region()), (*x)->region()->position() - first_position);
break;
case Clear:
foo.push_back ((*i).pl);
}
+
if (!foo.empty()) {
cut_buffer->set (foo);
}
-
+
for (set<PlaylistState, lt_playlist>::iterator pl = freezelist.begin(); pl != freezelist.end(); ++pl) {
(*pl).playlist->thaw ();
session->add_command (new MementoCommand<Playlist>(*(*pl).playlist, (*pl).before, &(*pl).playlist->get_state()));