#include "ardour/quantize.h"
#include "ardour/strip_silence.h"
#include "ardour/route_group.h"
+#include "ardour/operations.h"
#include "ardour_ui.h"
#include "editor.h"
#include "interthread_progress_window.h"
#include "insert_time_dialog.h"
#include "normalize_dialog.h"
+#include "editor_cursors.h"
+#include "mouse_cursors.h"
+#include "patch_change_dialog.h"
#include "i18n.h"
boost::shared_ptr<Playlist> pl = (*a)->region()->playlist();
- if (!pl) {
- a = tmp;
- continue;
- }
+ if (!pl) {
+ a = tmp;
+ continue;
+ }
if (!pl->frozen()) {
/* we haven't seen this playlist before */
}
if (pl) {
- pl->clear_changes ();
+ pl->clear_changes ();
pl->split_region ((*a)->region(), where);
_session->add_command (new StatefulDiffCommand (pl));
}
framepos_t distance;
framepos_t next_distance;
- RegionSelection rs = get_regions_for_action ();
+ if (!_session) {
+ return;
+ }
- if (!_session) return;
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!force_playhead && !rs.empty()) {
distance = next_distance;
}
- r->clear_changes ();
+ r->clear_changes ();
r->set_position (r->position() + distance, this);
_session->add_command (new StatefulDiffCommand (r));
}
{
framepos_t distance;
framepos_t next_distance;
- RegionSelection rs = get_regions_for_action ();
- if (!_session) return;
+ if (!_session) {
+ return;
+ }
+
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!force_playhead && !rs.empty()) {
distance = next_distance;
}
- r->clear_changes ();
+ r->clear_changes ();
if (r->position() > distance) {
r->set_position (r->position() - distance, this);
void
Editor::nudge_forward_capture_offset ()
{
- framepos_t distance;
- RegionSelection rs = get_regions_for_action ();
-
- if (!_session) return;
-
- if (!rs.empty()) {
-
- begin_reversible_command (_("nudge forward"));
-
- distance = _session->worst_output_latency();
-
- for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
- boost::shared_ptr<Region> r ((*i)->region());
-
- r->clear_changes ();
- r->set_position (r->position() + distance, this);
- _session->add_command(new StatefulDiffCommand (r));
- }
-
- commit_reversible_command ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
+ if (!_session || rs.empty()) {
+ return;
+ }
+ begin_reversible_command (_("nudge forward"));
+
+ framepos_t const distance = _session->worst_output_latency();
+
+ for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
+ boost::shared_ptr<Region> r ((*i)->region());
+
+ r->clear_changes ();
+ r->set_position (r->position() + distance, this);
+ _session->add_command(new StatefulDiffCommand (r));
}
+
+ commit_reversible_command ();
}
void
Editor::nudge_backward_capture_offset ()
{
- framepos_t distance;
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
- if (!_session) {
+ if (!_session || rs.empty()) {
return;
}
- if (!rs.empty()) {
-
- begin_reversible_command (_("nudge forward"));
-
- distance = _session->worst_output_latency();
-
- for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
- boost::shared_ptr<Region> r ((*i)->region());
-
- r->clear_changes ();
+ begin_reversible_command (_("nudge forward"));
+
+ framepos_t const distance = _session->worst_output_latency();
- if (r->position() > distance) {
- r->set_position (r->position() - distance, this);
- } else {
- r->set_position (0, this);
- }
- _session->add_command(new StatefulDiffCommand (r));
+ for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
+ boost::shared_ptr<Region> r ((*i)->region());
+
+ r->clear_changes ();
+
+ if (r->position() > distance) {
+ r->set_position (r->position() - distance, this);
+ } else {
+ r->set_position (0, this);
}
-
- commit_reversible_command ();
+ _session->add_command(new StatefulDiffCommand (r));
}
+
+ commit_reversible_command ();
}
/* DISPLAY MOTION */
Editor::cursor_to_selection_start (EditorCursor *cursor)
{
framepos_t pos = 0;
- RegionSelection rs = get_regions_for_action ();
switch (mouse_mode) {
case MouseObject:
- if (!rs.empty()) {
- pos = rs.start();
+ if (!selection->regions.empty()) {
+ pos = selection->regions.start();
}
break;
Editor::cursor_to_selection_end (EditorCursor *cursor)
{
framepos_t pos = 0;
- RegionSelection rs = get_regions_for_action ();
switch (mouse_mode) {
case MouseObject:
- if (!rs.empty()) {
- pos = rs.end_frame();
+ if (!selection->regions.empty()) {
+ pos = selection->regions.end_frame();
}
break;
return;
}
- RegionSelection rs = get_regions_for_action ();
-
switch (mouse_mode) {
case MouseObject:
- if (!rs.empty()) {
- pos = rs.start();
+ if (!selection->regions.empty()) {
+ pos = selection->regions.start();
}
break;
return;
}
- RegionSelection rs = get_regions_for_action ();
-
switch (mouse_mode) {
case MouseObject:
- if (!rs.empty()) {
- pos = rs.end_frame();
+ if (!selection->regions.empty()) {
+ pos = selection->regions.end_frame();
}
break;
framepos_t end = 0;
set<TimeAxisView*> tracks;
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
ENSURE_GUI_THREAD (*this, &Editor::temporal_zoom_session)
if (_session) {
- nframes_t const l = _session->current_end_frame() - _session->current_start_frame();
+ framecnt_t const l = _session->current_end_frame() - _session->current_start_frame();
double s = _session->current_start_frame() - l * 0.01;
if (s < 0) {
s = 0;
}
- nframes_t const e = _session->current_end_frame() + l * 0.01;
- temporal_zoom_by_frame (nframes_t (s), e, "zoom to _session");
+ framecnt_t const e = _session->current_end_frame() + l * 0.01;
+ temporal_zoom_by_frame (framecnt_t (s), e, "zoom to _session");
}
}
Location *location = new Location (*_session, start, end, rangename, Location::IsRangeMarker);
_session->begin_reversible_command (_("add marker"));
- XMLNode &before = _session->locations()->get_state();
+ XMLNode &before = _session->locations()->get_state();
_session->locations()->add (location, true);
- XMLNode &after = _session->locations()->get_state();
+ XMLNode &after = _session->locations()->get_state();
_session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
_session->commit_reversible_command ();
}
}
Location *location = new Location (*_session, where, where, markername, Location::IsMark);
_session->begin_reversible_command (_("add marker"));
- XMLNode &before = _session->locations()->get_state();
+ XMLNode &before = _session->locations()->get_state();
_session->locations()->add (location, true);
- XMLNode &after = _session->locations()->get_state();
+ XMLNode &after = _session->locations()->get_state();
_session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
_session->commit_reversible_command ();
}
add_location_mark (_session->audible_frame());
}
+/** Add a range marker around each selected region */
void
-Editor::add_locations_from_audio_region ()
+Editor::add_locations_from_region ()
{
- RegionSelection rs = get_regions_for_action ();
-
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (rs.empty()) {
return;
}
- _session->begin_reversible_command (rs.size () > 1 ? _("add markers") : _("add marker"));
+ _session->begin_reversible_command (selection->regions.size () > 1 ? _("add markers") : _("add marker"));
XMLNode &before = _session->locations()->get_state();
for (RegionSelection::iterator i = rs.begin (); i != rs.end (); ++i) {
_session->commit_reversible_command ();
}
+/** Add a single range marker around all selected regions */
void
-Editor::add_location_from_audio_region ()
+Editor::add_location_from_region ()
{
- RegionSelection rs = get_regions_for_action ();
-
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (rs.empty()) {
return;
}
string markername;
- if (rs.size() > 1) { // more than one region selected
+ if (rs.size() > 1) {
_session->locations()->next_available_name(markername, "regions");
} else {
RegionView* rv = *(rs.begin());
}
// single range spanning all selected
- Location *location = new Location (*_session, rs.start(), rs.end_frame(), markername, Location::IsRangeMarker);
+ Location *location = new Location (*_session, selection->regions.start(), selection->regions.end_frame(), markername, Location::IsRangeMarker);
_session->locations()->add (location, true);
XMLNode &after = _session->locations()->get_state();
{
if (_session) {
_session->begin_reversible_command (_("clear markers"));
- XMLNode &before = _session->locations()->get_state();
+ XMLNode &before = _session->locations()->get_state();
_session->locations()->clear_markers ();
- XMLNode &after = _session->locations()->get_state();
+ XMLNode &after = _session->locations()->get_state();
_session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
_session->commit_reversible_command ();
}
{
if (_session) {
_session->begin_reversible_command (_("clear ranges"));
- XMLNode &before = _session->locations()->get_state();
+ XMLNode &before = _session->locations()->get_state();
Location * looploc = _session->locations()->auto_loop_location();
Location * punchloc = _session->locations()->auto_punch_location();
if (looploc) _session->locations()->add (looploc);
if (punchloc) _session->locations()->add (punchloc);
- XMLNode &after = _session->locations()->get_state();
+ XMLNode &after = _session->locations()->get_state();
_session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
_session->commit_reversible_command ();
}
Editor::clear_locations ()
{
_session->begin_reversible_command (_("clear locations"));
- XMLNode &before = _session->locations()->get_state();
+ XMLNode &before = _session->locations()->get_state();
_session->locations()->clear ();
- XMLNode &after = _session->locations()->get_state();
+ XMLNode &after = _session->locations()->get_state();
_session->add_command(new MementoCommand<Locations>(*(_session->locations()), &before, &after));
_session->commit_reversible_command ();
_session->locations()->clear ();
snap_to (where);
begin_reversible_command (_("insert dragged region"));
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->add_region (RegionFactory::create (region, true), where, 1.0);
_session->add_command(new StatefulDiffCommand (playlist));
commit_reversible_command ();
{
double wx, wy;
double cx, cy;
- nframes_t where;
+ framepos_t where;
RouteTimeAxisView *dest_rtv = 0;
RouteTimeAxisView *source_rtv = 0;
}
begin_reversible_command (_("insert region"));
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->add_region ((RegionFactory::create (region, true)), get_preferred_edit_position(), times);
_session->add_command(new StatefulDiffCommand (playlist));
commit_reversible_command ();
_session->request_play_range (&selection->time, true);
}
-void
-Editor::loop_selected_region ()
-{
- RegionSelection rs = get_regions_for_action ();
-
- if (!rs.empty()) {
- RegionView *rv = *(rs.begin());
- Location* tll;
-
- if ((tll = transport_loop_location()) != 0) {
-
- tll->set (rv->region()->position(), rv->region()->last_frame());
-
- // enable looping, reposition and start rolling
-
- _session->request_play_loop (true);
- _session->request_locate (tll->start(), false);
- _session->request_transport_speed (1.0f);
- }
- }
-}
-
void
Editor::play_location (Location& location)
{
/** Show the region editor for the selected regions */
void
-Editor::edit_region ()
+Editor::show_region_properties ()
{
selection->foreach_regionview (&RegionView::show_region_editor);
}
}
void
-Editor::rename_region()
+Editor::rename_region ()
{
- RegionSelection rs = get_regions_for_action ();
-
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (rs.empty()) {
return;
}
d.set_size_request (300, -1);
d.set_position (Gtk::WIN_POS_MOUSE);
- entry.set_text (rs.front()->region()->name());
+ entry.set_text (selection->regions.front()->region()->name());
entry.select_region (0, -1);
entry.signal_activate().connect (sigc::bind (sigc::mem_fun (d, &Dialog::response), RESPONSE_OK));
entry.grab_focus();
- int ret = d.run();
+ int const ret = d.run();
d.hide ();
- if (ret == RESPONSE_OK) {
- std::string str = entry.get_text();
- strip_whitespace_edges (str);
- if (!str.empty()) {
- rs.front()->region()->set_name (str);
- _regions->redisplay ();
- }
+ if (ret != RESPONSE_OK) {
+ return;
+ }
+
+ std::string str = entry.get_text();
+ strip_whitespace_edges (str);
+ if (!str.empty()) {
+ rs.front()->region()->set_name (str);
+ _regions->redisplay ();
}
}
{
framepos_t start = max_framepos;
framepos_t end = 0;
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (rs.empty()) {
return;
}
void
Editor::split_multichannel_region ()
{
- RegionSelection rs = get_regions_for_action ();
-
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (rs.empty()) {
return;
}
rtv->view()->foreach_regionview (sigc::bind (
sigc::ptr_fun (add_if_covered),
&(*t), &new_selection));
-
+
if (!in_command) {
begin_reversible_command (_("separate"));
in_command = true;
}
- /* pick up changes to existing regions */
+ /* pick up changes to existing regions */
- vector<Command*> cmds;
- playlist->rdiff (cmds);
+ vector<Command*> cmds;
+ playlist->rdiff (cmds);
_session->add_commands (cmds);
- /* pick up changes to the playlist itself (adds/removes)
- */
+ /* pick up changes to the playlist itself (adds/removes)
+ */
_session->add_command(new StatefulDiffCommand (playlist));
}
void
Editor::separate_under_selected_regions ()
{
- RegionSelection rs = get_regions_for_action ();
-
vector<PlaylistState> playlists;
- if (!_session) {
- return;
- }
+ RegionSelection rs = get_regions_from_selection_and_entered ();
- if (rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
the_end = min (end, the_end);
cnt = the_end - the_start + 1;
- region->clear_changes ();
+ region->clear_changes ();
region->trim_to (the_start, cnt, this);
_session->add_command (new StatefulDiffCommand (region));
}
void
Editor::region_fill_track ()
{
- framepos_t end;
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!_session || rs.empty()) {
return;
}
- end = _session->current_end_frame ();
+ framepos_t const end = _session->current_end_frame ();
- begin_reversible_command (_("region fill"));
+ begin_reversible_command (Operations::region_fill);
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
return;
}
- pl->clear_changes ();
+ pl->clear_changes ();
pl->add_region (RegionFactory::create (region, true), region->last_frame(), times);
_session->add_command (new StatefulDiffCommand (pl));
}
framepos_t selection_length = end - start;
float times = (float)selection_length / region->length();
- begin_reversible_command (_("fill selection"));
+ begin_reversible_command (Operations::fill_selection);
for (TrackSelection::iterator i = selection->tracks.begin(); i != selection->tracks.end(); ++i) {
continue;
}
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->add_region (RegionFactory::create (region, true), start, times);
_session->add_command (new StatefulDiffCommand (playlist));
}
}
void
-Editor::set_region_sync_from_edit_point ()
+Editor::set_region_sync_position ()
{
- framepos_t where = get_preferred_edit_position ();
- RegionSelection rs = get_regions_for_action ();
- set_sync_point (where, rs);
+ set_sync_point (get_preferred_edit_position (), get_regions_from_selection_and_edit_point ());
}
void
in_command = true;
}
- region->clear_changes ();
+ region->clear_changes ();
region->set_sync_position (where);
_session->add_command(new StatefulDiffCommand (region));
}
void
Editor::remove_region_sync ()
{
- RegionSelection rs = get_regions_for_action ();
-
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (rs.empty()) {
return;
}
- begin_reversible_command (_("remove sync"));
+ begin_reversible_command (_("remove region sync"));
+
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
- (*i)->region()->clear_changes ();
+ (*i)->region()->clear_changes ();
(*i)->region()->clear_sync_position ();
_session->add_command(new StatefulDiffCommand ((*i)->region()));
}
+
commit_reversible_command ();
}
void
-Editor::naturalize ()
+Editor::naturalize_region ()
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
}
- begin_reversible_command (_("naturalize"));
+ if (rs.size() > 1) {
+ begin_reversible_command (_("move regions to original position"));
+ } else {
+ begin_reversible_command (_("move region to original position"));
+ }
+
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
(*i)->region()->clear_changes ();
(*i)->region()->move_to_natural_position (this);
_session->add_command (new StatefulDiffCommand ((*i)->region()));
}
+
commit_reversible_command ();
}
void
-Editor::align (RegionPoint what)
+Editor::align_regions (RegionPoint what)
{
- RegionSelection rs = get_regions_for_action ();
- framepos_t where = get_preferred_edit_position();
-
- if (!rs.empty()) {
- align_selection (what, where, rs);
- } else {
-
- RegionSelection rs;
- get_regions_at (rs, where, selection->tracks);
- align_selection (what, where, rs);
+ RegionSelection const rs = get_regions_from_selection_and_edit_point ();
+
+ if (rs.empty()) {
+ return;
}
-}
-void
-Editor::align_relative (RegionPoint what)
-{
- framepos_t where = get_preferred_edit_position();
- RegionSelection rs = get_regions_for_action ();
+ begin_reversible_command (_("align selection"));
+
+ framepos_t const position = get_preferred_edit_position ();
- if (!rs.empty()) {
- align_selection_relative (what, where, rs);
+ for (RegionSelection::const_iterator i = rs.begin(); i != rs.end(); ++i) {
+ align_region_internal ((*i)->region(), what, position);
}
+
+ commit_reversible_command ();
}
struct RegionSortByTime {
};
void
-Editor::align_selection_relative (RegionPoint point, framepos_t position, const RegionSelection& rs)
+Editor::align_regions_relative (RegionPoint point)
{
+ RegionSelection const rs = get_regions_from_selection_and_edit_point ();
+
if (rs.empty()) {
return;
}
+ framepos_t const position = get_preferred_edit_position ();
+
framepos_t distance = 0;
framepos_t pos = 0;
int dir = 1;
/* move first one specially */
- r->clear_changes ();
+ r->clear_changes ();
r->set_position (pos, this);
_session->add_command(new StatefulDiffCommand (r));
boost::shared_ptr<Region> region ((*i)->region());
- region->clear_changes ();
+ region->clear_changes ();
if (dir > 0) {
region->set_position (region->position() + distance, this);
commit_reversible_command ();
}
-void
-Editor::align_selection (RegionPoint point, framepos_t position, const RegionSelection& rs)
-{
- if (rs.empty()) {
- return;
- }
-
- begin_reversible_command (_("align selection"));
-
- for (RegionSelection::const_iterator i = rs.begin(); i != rs.end(); ++i) {
- align_region_internal ((*i)->region(), point, position);
- }
-
- commit_reversible_command ();
-}
-
void
Editor::align_region (boost::shared_ptr<Region> region, RegionPoint point, framepos_t position)
{
Editor::trim_region (bool front)
{
framepos_t where = get_preferred_edit_position();
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_edit_point ();
+
+ cerr << "trim regions\n";
if (rs.empty()) {
+ cerr << " no regions\n";
return;
}
+ cerr << "where = " << where << endl;
+
begin_reversible_command (front ? _("trim front") : _("trim back"));
for (list<RegionView*>::const_iterator i = rs.by_layer().begin(); i != rs.by_layer().end(); ++i) {
}
trim_region_to_location (*loc, _("trim to punch"));
}
+
void
Editor::trim_region_to_location (const Location& loc, const char* str)
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
begin_reversible_command (str);
commit_reversible_command ();
}
-void
-Editor::trim_region_to_edit_point ()
-{
- RegionSelection rs = get_regions_for_action ();
-
- framepos_t where = get_preferred_edit_position();
-
- begin_reversible_command (_("trim region start to edit point"));
-
- for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
- RegionView* rv = (*x);
-
- /* require region to cover trim */
- if (!rv->region()->covers (where)) {
- continue;
- }
-
- RouteTimeAxisView* tav = dynamic_cast<RouteTimeAxisView*> (&rv->get_time_axis_view());
- if (!tav) {
- return;
- }
-
- float speed = 1.0;
-
- if (tav->track() != 0) {
- speed = tav->track()->speed();
- }
-
- rv->region()->clear_changes ();
- rv->region()->trim_end (session_frame_to_track_frame(where, speed), this);
- _session->add_command(new StatefulDiffCommand (rv->region()));
- }
-
- commit_reversible_command ();
-}
-
-void
-Editor::trim_region_from_edit_point ()
-{
- RegionSelection rs = get_regions_for_action ();
-
- framepos_t where = get_preferred_edit_position();
-
- begin_reversible_command (_("trim region end to edit point"));
-
- for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
- RegionView* rv = (*x);
-
- /* require region to cover trim */
- if (!rv->region()->covers (where)) {
- continue;
- }
-
- RouteTimeAxisView* tav = dynamic_cast<RouteTimeAxisView*> (&rv->get_time_axis_view());
- if (!tav) {
- return;
- }
-
- float speed = 1.0;
-
- if (tav->track() != 0) {
- speed = tav->track()->speed();
- }
-
- rv->region()->clear_changes ();
- rv->region()->trim_front (session_frame_to_track_frame(where, speed), this);
- _session->add_command(new StatefulDiffCommand (rv->region()));
- }
-
- commit_reversible_command ();
-}
-
void
Editor::trim_region_to_previous_region_end ()
{
void
Editor::trim_to_region(bool forward)
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
begin_reversible_command (_("trim to region"));
boost::shared_ptr<Region> region = arv->region();
boost::shared_ptr<Playlist> playlist (region->playlist());
- region->clear_changes ();
+ region->clear_changes ();
if(forward){
return;
}
+ if (!clicked_routeview->track()->bounceable()) {
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (clicked_routeview);
+ if (rtv && !rtv->track()->bounceable()) {
+ MessageDialog d (
+ _("This route cannot be frozen because it has more outputs than inputs. "
+ "You can fix this by increasing the number of inputs.")
+ );
+ d.set_title (_("Cannot freeze"));
+ d.run ();
+ return;
+ }
+ }
+
InterThreadInfo itt;
current_interthread_info = &itt;
pthread_create_and_store (X_("freezer"), &itt.thread, _freeze_thread, this);
- set_canvas_cursor (wait_cursor);
+ set_canvas_cursor (_cursors->wait);
while (!itt.done && !itt.cancel) {
gtk_main_iteration ();
TrackSelection views = selection->tracks;
+ for (TrackViewList::iterator i = views.begin(); i != views.end(); ++i) {
+ RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*i);
+ if (rtv && !rtv->track()->bounceable()) {
+ MessageDialog d (
+ _("One or more selected tracks cannot be bounced because it has more outputs than inputs. "
+ "You can fix this by increasing the number of inputs on that track.")
+ );
+ d.set_title (_("Cannot bounce"));
+ d.run ();
+ return;
+ }
+ }
+
framepos_t start = selection->time[clicked_selection].start;
framepos_t end = selection->time[clicked_selection].end;
framepos_t cnt = end - start + 1;
InterThreadInfo itt;
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->clear_owned_changes ();
boost::shared_ptr<Region> r = rtv->track()->bounce_range (start, start+cnt, itt, enable_processing);
playlist->rdiff (cmds);
_session->add_commands (cmds);
- _session->add_command (new StatefulDiffCommand (playlist));
+ _session->add_command (new StatefulDiffCommand (playlist));
}
commit_reversible_command ();
/* we only want to cut regions if some are selected */
if (!selection->regions.empty()) {
- rs = get_regions_for_action (false);
+ rs = selection->regions;
}
switch (current_mouse_mode()) {
boost::shared_ptr<Playlist> playlist = clicked_routeview->playlist();
begin_reversible_command (_("remove region"));
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->remove_region (clicked_regionview->region());
_session->add_command(new StatefulDiffCommand (playlist));
commit_reversible_command ();
void
Editor::remove_selected_regions ()
{
- RegionSelection rs = get_regions_for_action ();
-
- if (!_session) {
- return;
- }
+ RegionSelection rs = get_regions_from_selection_and_entered ();
- if (rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
regions_to_remove.push_back ((*i)->region());
}
- vector<boost::shared_ptr<Playlist> > playlists;
+ vector<boost::shared_ptr<Playlist> > playlists;
for (list<boost::shared_ptr<Region> >::iterator rl = regions_to_remove.begin(); rl != regions_to_remove.end(); ++rl) {
if (i == playlists.end()) {
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->freeze ();
playlists.push_back (playlist);
framepos_t first_position = max_framepos;
typedef set<boost::shared_ptr<Playlist> > FreezeList;
- FreezeList freezelist;
+ FreezeList freezelist;
/* get ordering correct before we cut/copy */
}
if (fl == freezelist.end()) {
- pl->clear_changes();
+ pl->clear_changes();
pl->freeze ();
freezelist.insert (pl);
}
if (!pl) {
/* region not yet associated with a playlist (e.g. unfinished
- capture pass.
- */
- ++x;
+ capture pass.
+ */
+ ++x;
continue;
}
/* the pmap is in the same order as the tracks in which selected regions occured */
for (vector<PlaylistMapping>::iterator i = pmap.begin(); i != pmap.end(); ++i) {
- if ((*i).pl) {
- (*i).pl->thaw();
- foo.push_back ((*i).pl);
- }
+ if ((*i).pl) {
+ (*i).pl->thaw();
+ foo.push_back ((*i).pl);
+ }
}
if (!foo.empty()) {
position = get_preferred_edit_position();
}
- begin_reversible_command (_("paste"));
+ begin_reversible_command (Operations::paste);
TrackViewList ts;
TrackViewList::iterator i;
RegionSelection sel = regions; // clear (below) may clear the argument list if its the current region selection
RegionSelection foo;
- nframes_t const start_frame = regions.start ();
- nframes_t const end_frame = regions.end_frame ();
+ framepos_t const start_frame = regions.start ();
+ framepos_t const end_frame = regions.end_frame ();
- begin_reversible_command (_("duplicate region"));
+ begin_reversible_command (Operations::duplicate_region);
selection->clear_regions ();
sigc::connection c = rtv->view()->RegionViewAdded.connect (sigc::mem_fun(*this, &Editor::collect_new_region_view));
playlist = (*i)->region()->playlist();
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->duplicate (r, end_frame + (r->first_frame() - start_frame), times);
_session->add_command(new StatefulDiffCommand (playlist));
if ((playlist = (*i)->playlist()) == 0) {
continue;
}
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->duplicate (*ri, selection->time[clicked_selection].end, times);
_session->add_command (new StatefulDiffCommand (playlist));
center_screen_internal (get_preferred_edit_position(), page);
}
+/** Caller must begin and commit a reversible command */
void
Editor::clear_playlist (boost::shared_ptr<Playlist> playlist)
{
- begin_reversible_command (_("clear playlist"));
- playlist->clear_changes ();
+ playlist->clear_changes ();
playlist->clear ();
_session->add_command (new StatefulDiffCommand (playlist));
- commit_reversible_command ();
}
void
continue;
}
- playlist->clear_changes ();
- playlist->clear_owned_changes ();
+ playlist->clear_changes ();
+ playlist->clear_owned_changes ();
playlist->nudge_after (start, distance, forwards);
-
- vector<Command*> cmds;
-
- playlist->rdiff (cmds);
+
+ vector<Command*> cmds;
+
+ playlist->rdiff (cmds);
_session->add_commands (cmds);
-
- _session->add_command (new StatefulDiffCommand (playlist));
+
+ _session->add_command (new StatefulDiffCommand (playlist));
}
commit_reversible_command ();
if (prompter.run () == 1) {
_session->remove_last_capture ();
- _regions->redisplay ();
+ _regions->redisplay ();
}
} else {
_session->remove_last_capture();
- _regions->redisplay ();
+ _regions->redisplay ();
}
}
return;
}
- RegionSelection rs = get_regions_for_action ();
-
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (rs.empty()) {
return;
}
return;
}
- begin_reversible_command (_("normalize"));
-
- set_canvas_cursor (wait_cursor);
+ set_canvas_cursor (_cursors->wait);
gdk_flush ();
/* XXX: should really only count audio regions here */
if (arv) {
dialog.descend (1.0 / regions);
double const a = arv->audio_region()->maximum_amplitude (&dialog);
+
+ if (a == -1) {
+ /* the user cancelled the operation */
+ set_canvas_cursor (current_canvas_cursor);
+ return;
+ }
+
max_amps.push_back (a);
max_amp = max (max_amp, a);
dialog.ascend ();
}
}
+ begin_reversible_command (_("normalize"));
+
list<double>::const_iterator a = max_amps.begin ();
for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) {
return;
}
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r);
if (!arv)
continue;
- arv->region()->clear_changes ();
+ arv->region()->clear_changes ();
arv->audio_region()->set_scale_amplitude (1.0f);
_session->add_command (new StatefulDiffCommand (arv->region()));
}
}
void
-Editor::adjust_region_scale_amplitude (bool up)
+Editor::adjust_region_gain (bool up)
{
- if (!_session) {
- return;
- }
-
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
- if (rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
- begin_reversible_command ("denormalize");
+ begin_reversible_command ("adjust region gain");
for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*r);
if (!arv) {
continue;
- }
-
- arv->region()->clear_changes ();
-
- double fraction = gain_to_slider_position (arv->audio_region()->scale_amplitude ());
-
- if (up) {
- fraction += 0.05;
- fraction = min (fraction, 1.0);
- } else {
- fraction -= 0.05;
- fraction = max (fraction, 0.0);
}
- if (!up && fraction <= 0) {
- continue;
- }
+ arv->region()->clear_changes ();
- fraction = slider_position_to_gain (fraction);
+ double dB = accurate_coefficient_to_dB (arv->audio_region()->scale_amplitude ());
- if (up && fraction >= 2.0) {
- continue;
+ if (up) {
+ dB += 1;
+ } else {
+ dB -= 1;
}
- arv->audio_region()->set_scale_amplitude (fraction);
+ arv->audio_region()->set_scale_amplitude (dB_to_coefficient (dB));
_session->add_command (new StatefulDiffCommand (arv->region()));
}
return;
}
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
}
- std::list<boost::shared_ptr<AudioRegion> > ar;
+ std::list<RegionView*> audio_only;
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*> (*i);
if (arv) {
- ar.push_back (arv->audio_region ());
+ audio_only.push_back (arv);
}
}
- StripSilenceDialog d (_session, ar);
+ StripSilenceDialog d (_session, audio_only);
int const r = d.run ();
- if (r == Gtk::RESPONSE_OK) {
- StripSilence s (*_session, d.threshold (), d.minimum_length (), d.fade_length ());
+ d.drop_rects ();
+
+ if (r == Gtk::RESPONSE_OK) {
+ ARDOUR::AudioIntervalMap silences;
+ d.silences (silences);
+ StripSilence s (*_session, silences, d.fade_length());
apply_filter (s, _("strip silence"), &d);
- }
+ }
}
Command*
{
Command* cmd;
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
}
commit_reversible_command ();
- rs.clear ();
}
void
Editor::fork_region ()
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
begin_reversible_command (_("Fork Region(s)"));
- set_canvas_cursor (wait_cursor);
+ set_canvas_cursor (_cursors->wait);
gdk_flush ();
for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ) {
if (mrv) {
boost::shared_ptr<Playlist> playlist = mrv->region()->playlist();
- boost::shared_ptr<MidiRegion> newregion = mrv->midi_region()->clone ();
+ boost::shared_ptr<MidiRegion> newregion = mrv->midi_region()->clone ();
- playlist->clear_changes ();
- playlist->replace_region (mrv->region(), newregion, mrv->region()->position());
- _session->add_command(new StatefulDiffCommand (playlist));
+ playlist->clear_changes ();
+ playlist->replace_region (mrv->region(), newregion, mrv->region()->position());
+ _session->add_command(new StatefulDiffCommand (playlist));
}
r = tmp;
}
commit_reversible_command ();
- rs.clear ();
set_canvas_cursor (current_canvas_cursor);
}
void
Editor::quantize_region ()
{
+ int selected_midi_region_cnt = 0;
+
if (!_session) {
return;
}
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
+ if (rs.empty()) {
+ return;
+ }
+
+ for (RegionSelection::iterator r = rs.begin(); r != rs.end(); ++r) {
+ MidiRegionView* const mrv = dynamic_cast<MidiRegionView*> (*r);
+ if (mrv) {
+ selected_midi_region_cnt++;
+ }
+ }
+
+ if (selected_midi_region_cnt == 0) {
+ return;
+ }
+
QuantizeDialog* qd = new QuantizeDialog (*this);
qd->present ();
}
}
+void
+Editor::insert_patch_change ()
+{
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+ if (rs.empty ()) {
+ return;
+ }
+
+ framepos_t const p = get_preferred_edit_position (false);
+
+ Evoral::PatchChange<Evoral::MusicalTime> empty (0, 0, 0, 0);
+ PatchChangeDialog d (0, _session, empty, Gtk::Stock::ADD);
+
+ if (d.run() == RESPONSE_CANCEL) {
+ return;
+ }
+
+ for (RegionSelection::iterator i = rs.begin (); i != rs.end(); ++i) {
+ MidiRegionView* const mrv = dynamic_cast<MidiRegionView*> (*i);
+ if (mrv) {
+ if (p >= mrv->region()->first_frame() && p <= mrv->region()->last_frame()) {
+ mrv->add_patch_change (p - mrv->region()->position(), d.patch ());
+ }
+ }
+ }
+}
+
void
Editor::apply_filter (Filter& filter, string command, ProgressReporter* progress)
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
begin_reversible_command (command);
- set_canvas_cursor (wait_cursor);
+ set_canvas_cursor (_cursors->wait);
gdk_flush ();
int n = 0;
if (progress) {
progress->ascend ();
- progress->set_progress (float (n + 1) / N);
}
}
}
commit_reversible_command ();
- rs.clear ();
out:
set_canvas_cursor (current_canvas_cursor);
}
-void
-Editor::region_selection_op (void (Region::*pmf)(void))
-{
- for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region* region = (*i)->region().get();
- (region->*pmf)();
- }
-}
-
-
-void
-Editor::region_selection_op (void (Region::*pmf)(void*), void *arg)
-{
- for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region* region = (*i)->region().get();
- (region->*pmf)(arg);
- }
-}
-
-void
-Editor::region_selection_op (void (Region::*pmf)(bool), bool yn)
-{
- for (RegionSelection::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
- Region* region = (*i)->region().get();
- (region->*pmf)(yn);
- }
-}
-
void
Editor::external_edit_region ()
{
void
Editor::brush (framepos_t pos)
{
- RegionSelection sel;
- RegionSelection rs = get_regions_for_action ();
-
snap_to (pos);
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (rs.empty()) {
return;
}
void
Editor::reset_region_gain_envelopes ()
{
- RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!_session || rs.empty()) {
return;
void
Editor::toggle_gain_envelope_visibility ()
{
- RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
+ if (_ignore_region_action) {
+ return;
+ }
+
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!_session || rs.empty()) {
return;
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
AudioRegionView* const arv = dynamic_cast<AudioRegionView*>(*i);
if (arv) {
- arv->region()->clear_changes ();
+ arv->region()->clear_changes ();
arv->set_envelope_visible (!arv->envelope_visible());
_session->add_command (new StatefulDiffCommand (arv->region()));
}
void
Editor::toggle_gain_envelope_active ()
{
- RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
+ if (_ignore_region_action) {
+ return;
+ }
+
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!_session || rs.empty()) {
return;
void
Editor::toggle_region_lock ()
{
- RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
+ if (_ignore_region_action) {
+ return;
+ }
+
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!_session || rs.empty()) {
return;
}
- _session->begin_reversible_command (_("region lock"));
+ _session->begin_reversible_command (_("toggle region lock"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
(*i)->region()->clear_changes ();
void
Editor::toggle_region_lock_style ()
{
- RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
+ if (_ignore_region_action) {
+ return;
+ }
+
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!_session || rs.empty()) {
return;
_session->begin_reversible_command (_("region lock style"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
- (*i)->region()->clear_changes ();
+ (*i)->region()->clear_changes ();
PositionLockStyle const ns = (*i)->region()->position_lock_style() == AudioTime ? MusicTime : AudioTime;
(*i)->region()->set_position_lock_style (ns);
_session->add_command (new StatefulDiffCommand ((*i)->region()));
_session->commit_reversible_command ();
}
-
void
-Editor::toggle_region_mute ()
+Editor::toggle_opaque_region ()
{
- RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
-
- if (!_session || rs.empty()) {
+ if (_ignore_region_action) {
return;
}
-
- _session->begin_reversible_command (_("region mute"));
-
- for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
- (*i)->region()->clear_changes ();
- (*i)->region()->set_muted (!(*i)->region()->muted());
- _session->add_command (new StatefulDiffCommand ((*i)->region()));
- }
-
- _session->commit_reversible_command ();
-}
-
-void
-Editor::toggle_region_opaque ()
-{
- RegionSelection rs = get_equivalent_regions (selection->regions, ARDOUR::Properties::edit.property_id);
+
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (!_session || rs.empty()) {
return;
}
- _session->begin_reversible_command (_("region opacity"));
+ _session->begin_reversible_command (_("change region opacity"));
for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
(*i)->region()->clear_changes ();
void
Editor::set_fade_length (bool in)
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
commit_reversible_command ();
}
-void
-Editor::toggle_fade_active (bool in)
-{
- RegionSelection rs = get_regions_for_action ();
-
- if (rs.empty()) {
- return;
- }
-
- const char* cmd = (in ? _("toggle fade in active") : _("toggle fade out active"));
- bool have_switch = false;
- bool yn = false;
-
- begin_reversible_command (cmd);
-
- for (RegionSelection::iterator x = rs.begin(); x != rs.end(); ++x) {
- AudioRegionView* tmp = dynamic_cast<AudioRegionView*> (*x);
-
- if (!tmp) {
- return;
- }
-
- boost::shared_ptr<AudioRegion> region (tmp->audio_region());
-
- /* make the behaviour consistent across all regions */
-
- if (!have_switch) {
- if (in) {
- yn = region->fade_in_active();
- } else {
- yn = region->fade_out_active();
- }
- have_switch = true;
- }
-
- region->clear_changes ();
-
- if (in) {
- region->set_fade_in_active (!yn);
- } else {
- region->set_fade_out_active (!yn);
- }
-
- _session->add_command(new StatefulDiffCommand (region));
- }
-
- commit_reversible_command ();
-}
-
void
Editor::set_fade_in_shape (FadeShape shape)
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
void
Editor::set_fade_out_shape (FadeShape shape)
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
void
Editor::set_fade_in_active (bool yn)
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
boost::shared_ptr<AudioRegion> ar (tmp->audio_region());
- ar->clear_changes ();
+ ar->clear_changes ();
ar->set_fade_in_active (yn);
_session->add_command (new StatefulDiffCommand (ar));
}
void
Editor::set_fade_out_active (bool yn)
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
boost::shared_ptr<AudioRegion> ar (tmp->audio_region());
- ar->clear_changes ();
+ ar->clear_changes ();
ar->set_fade_out_active (yn);
_session->add_command(new StatefulDiffCommand (ar));
}
}
void
-Editor::toggle_selected_region_fades (int dir)
+Editor::toggle_region_fades (int dir)
{
- RegionSelection::iterator i;
boost::shared_ptr<AudioRegion> ar;
bool yn;
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
}
+ RegionSelection::iterator i;
for (i = rs.begin(); i != rs.end(); ++i) {
if ((ar = boost::dynamic_pointer_cast<AudioRegion>((*i)->region())) != 0) {
if (dir == -1) {
}
void
-Editor::split ()
+Editor::split_region ()
{
- if (((mouse_mode == MouseRange) ||
- (mouse_mode != MouseObject && _join_object_range_state == JOIN_OBJECT_RANGE_RANGE)) &&
- !selection->time.empty()) {
- separate_regions_between (selection->time);
- return;
- }
+ if (((mouse_mode == MouseRange) ||
+ (mouse_mode != MouseObject && _join_object_range_state == JOIN_OBJECT_RANGE_RANGE)) &&
+ !selection->time.empty()) {
+ separate_regions_between (selection->time);
+ return;
+ }
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_edit_point ();
- framepos_t where = get_preferred_edit_position();
+ framepos_t where = get_preferred_edit_position ();
if (rs.empty()) {
return;
double const track_max_y = track->y_position () + track->effective_height ();
if (track_min_y >= current_view_min_y &&
- track_max_y <= current_view_max_y) {
+ track_max_y <= current_view_max_y) {
return;
}
framepos_t start = max_framepos;
framepos_t end = 0;
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
framepos_t start = max_framepos;
framepos_t end = 0;
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
}
void
-Editor::pitch_shift_regions ()
+Editor::pitch_shift_region ()
{
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
if (rs.empty()) {
return;
}
void
-Editor::use_region_as_bar ()
+Editor::set_tempo_from_region ()
{
- if (!_session) {
- return;
- }
-
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
- if (rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
{
AnalysisFeatureList positions;
- if (!_session) {
- return;
- }
-
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_entered ();
- if (rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
AnalysisFeatureList::const_iterator x;
- pl->clear_changes ();
+ pl->clear_changes ();
x = positions.begin();
return;
}
- RegionSelection rs = get_regions_for_action ();
+ RegionSelection rs = get_regions_from_selection_and_edit_point ();
if (rs.empty()) {
return;
}
void
-Editor::snap_regions_to_grid()
+Editor::snap_regions_to_grid ()
{
- if (!_session) {
- return;
- }
+ RegionSelection rs = get_regions_from_selection_and_entered ();
- RegionSelection rs = get_regions_for_action ();
-
- if (rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
}
void
-Editor::close_region_gaps()
+Editor::close_region_gaps ()
{
- if (!_session) {
- return;
- }
+ RegionSelection rs = get_regions_from_selection_and_entered ();
- RegionSelection rs = get_regions_for_action ();
-
- if (rs.empty()) {
+ if (!_session || rs.empty()) {
return;
}
-
- Dialog dialog (rs.size() > 1 ? _("Conform regions") : _("Conform region"));
-
- HBox hbox_crossfade;
- hbox_crossfade.set_spacing (10);
- //hbox_crossfade.set_border_width (3);
- hbox_crossfade.pack_start (*manage (new Label (_("Crossfade length:"))));
+
+ Dialog dialog (_("Close Region Gaps"));
+
+ Table table (2, 3);
+ table.set_spacings (12);
+ table.set_border_width (12);
+ Label* l = manage (new Label (_("Crossfade length")));
+ l->set_alignment (0, 0.5);
+ table.attach (*l, 0, 1, 0, 1);
SpinButton spin_crossfade (1, 0);
spin_crossfade.set_range (0, 15);
spin_crossfade.set_increments (1, 1);
spin_crossfade.set_value (3);
-
- hbox_crossfade.pack_start (spin_crossfade);
- hbox_crossfade.pack_start (*manage (new Label (_("ms"))));
- hbox_crossfade.show_all ();
+ table.attach (spin_crossfade, 1, 2, 0, 1);
- HBox hbox_pullback;
-
- hbox_pullback.set_spacing (10);
- //hbox_pullback.set_border_width (3);
- hbox_pullback.pack_start (*manage (new Label (_("Pull-back length:"))));
+ table.attach (*manage (new Label (_("ms"))), 2, 3, 0, 1);
+
+ l = manage (new Label (_("Pull-back length")));
+ l->set_alignment (0, 0.5);
+ table.attach (*l, 0, 1, 1, 2);
SpinButton spin_pullback (1, 0);
spin_pullback.set_range (0, 15);
spin_pullback.set_increments (1, 1);
spin_pullback.set_value (5);
+ table.attach (spin_pullback, 1, 2, 1, 2);
+
+ table.attach (*manage (new Label (_("ms"))), 2, 3, 1, 2);
- hbox_pullback.pack_start (spin_pullback);
- hbox_pullback.pack_start (*manage (new Label (_("ms"))));
- hbox_pullback.show_all ();
-
- dialog.get_vbox()->set_spacing (6);
- dialog.get_vbox()->pack_start (hbox_crossfade);
- dialog.get_vbox()->pack_start (hbox_pullback);
+ dialog.get_vbox()->pack_start (table);
dialog.add_button (Stock::CANCEL, RESPONSE_CANCEL);
dialog.add_button (_("Ok"), RESPONSE_ACCEPT);
+ dialog.show_all ();
if (dialog.run () == RESPONSE_CANCEL) {
return;
}
- framepos_t crossfade_len = spin_crossfade.get_value();
+ framepos_t crossfade_len = spin_crossfade.get_value();
framepos_t pull_back_frames = spin_pullback.get_value();
crossfade_len = lrintf (crossfade_len * _session->frame_rate()/1000);
{
AnalysisFeatureList positions;
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
if (!_session) {
return;
}
} else {
- RegionSelection rs = get_regions_for_action ();
-
if (rs.empty()) {
return;
}
target = !rtv->_route->active();
first = false;
}
- rtv->_route->set_active (target);
+ rtv->_route->set_active (target, this);
}
}
}
const char* trackstr;
const char* busstr;
vector<boost::shared_ptr<Route> > routes;
- bool special_bus = false;
+ bool special_bus = false;
for (TrackSelection::iterator x = ts.begin(); x != ts.end(); ++x) {
RouteTimeAxisView* rtv = dynamic_cast<RouteTimeAxisView*> (*x);
}
routes.push_back (rtv->_route);
- if (rtv->route()->is_master() || rtv->route()->is_monitor()) {
- special_bus = true;
- }
- }
-
- if (special_bus && !Config->get_allow_special_bus_removal()) {
- MessageDialog msg (_("That would be bad news ...."),
- false,
- Gtk::MESSAGE_INFO,
- Gtk::BUTTONS_OK);
- msg.set_secondary_text (string_compose (_(
-"Removing the master or monitor bus is such a bad idea\n\
+ if (rtv->route()->is_master() || rtv->route()->is_monitor()) {
+ special_bus = true;
+ }
+ }
+
+ if (special_bus && !Config->get_allow_special_bus_removal()) {
+ MessageDialog msg (_("That would be bad news ...."),
+ false,
+ Gtk::MESSAGE_INFO,
+ Gtk::BUTTONS_OK);
+ msg.set_secondary_text (string_compose (_(
+ "Removing the master or monitor bus is such a bad idea\n\
that %1 is not going to allow it.\n\
\n\
If you really want to do this sort of thing\n\
edit your ardour.rc file to set the\n\
\"allow-special-bus-removal\" option to be \"yes\""), PROGRAM_NAME));
- msg.present ();
- msg.run ();
- return;
- }
+ msg.present ();
+ msg.run ();
+ return;
+ }
if (ntracks + nbusses == 0) {
return;
}
} else if (nbusses) {
prompt = string_compose (_("Do you really want to remove %1 %2?\n\n"
- "This action cannot be undon, and the session file will be overwritten"),
+ "This action cannot be undon, and the session file will be overwritten"),
nbusses, busstr);
}
if (pl) {
pl->clear_changes ();
- pl->clear_owned_changes ();
+ pl->clear_owned_changes ();
if (opt == SplitIntersected) {
pl->split (pos);
pl->shift (pos, frames, (opt == MoveIntersected), ignore_music_glue);
- vector<Command*> cmds;
- pl->rdiff (cmds);
+ vector<Command*> cmds;
+ pl->rdiff (cmds);
_session->add_commands (cmds);
_session->add_command (new StatefulDiffCommand (pl));
return false; // do not call again
}
+void
+Editor::toggle_region_mute ()
+{
+ if (_ignore_region_action) {
+ return;
+ }
+
+ RegionSelection rs = get_regions_from_selection_and_entered ();
+
+ if (rs.empty ()) {
+ return;
+ }
+
+ if (rs.size() > 1) {
+ begin_reversible_command (_("mute regions"));
+ } else {
+ begin_reversible_command (_("mute region"));
+ }
+
+ for (RegionSelection::iterator i = rs.begin(); i != rs.end(); ++i) {
+
+ (*i)->region()->playlist()->clear_changes ();
+ (*i)->region()->set_muted (!(*i)->region()->muted ());
+ _session->add_command (new StatefulDiffCommand ((*i)->region()->playlist()));
+
+ }
+
+ commit_reversible_command ();
+}
+