summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-07-10 08:17:22 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-07-10 08:17:22 -0400
commit07e0f785f80eb7b57a05c091dc454d4e4d0cce88 (patch)
treea2a2610b6b1dc17dd497fe8e50c063ef42d7dfc4
parent0622a0cc3068a06d328119e90b7d9c5f5a84df32 (diff)
add "fade range" operation, bound to alt-f at present by default
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_actions.cc2
-rw-r--r--gtk2_ardour/editor_ops.cc16
-rw-r--r--gtk2_ardour/mnemonic-us.bindings.in1
-rw-r--r--gtk2_ardour/route_time_axis.cc35
-rw-r--r--gtk2_ardour/route_time_axis.h1
-rw-r--r--gtk2_ardour/time_axis_view.h2
7 files changed, 59 insertions, 0 deletions
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index 3c9d4f38ac..d96ac0c8f6 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -1385,6 +1385,8 @@ class Editor : public PublicEditor, public PBD::ScopedConnectionList, public ARD
void set_fade_in_active (bool);
void set_fade_out_active (bool);
+ void fade_range ();
+
std::set<boost::shared_ptr<ARDOUR::Playlist> > motion_frozen_playlists;
bool _dragging_playhead;
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index 31f368684b..7e37b02a08 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -336,6 +336,8 @@ Editor::register_actions ()
reg_sens (editor_actions, "editor-copy", _("Copy"), sigc::mem_fun(*this, &Editor::copy));
reg_sens (editor_actions, "editor-paste", _("Paste"), sigc::mem_fun(*this, &Editor::keyboard_paste));
+ reg_sens (editor_actions, "editor-fade-range", _("Fade Range Selection"), sigc::mem_fun(*this, &Editor::fade_range));
+
reg_sens (editor_actions, "set-tempo-from-edit-range", _("Set Tempo from Edit Range = Bar"), sigc::mem_fun(*this, &Editor::use_range_as_bar));
toggle_reg_sens (editor_actions, "toggle-log-window", _("Log"),
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index a2f8048fec..eb5b22ee62 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -5260,6 +5260,22 @@ Editor::toggle_solo_isolate ()
{
}
+
+void
+Editor::fade_range ()
+{
+ TrackViewList ts = selection->tracks.filter_to_unique_playlists ();
+
+ begin_reversible_command (_("fade range"));
+
+ for (TrackViewList::iterator i = ts.begin(); i != ts.end(); ++i) {
+ (*i)->fade_range (selection->time);
+ }
+
+ commit_reversible_command ();
+}
+
+
void
Editor::set_fade_length (bool in)
{
diff --git a/gtk2_ardour/mnemonic-us.bindings.in b/gtk2_ardour/mnemonic-us.bindings.in
index 035912810d..b5948bede4 100644
--- a/gtk2_ardour/mnemonic-us.bindings.in
+++ b/gtk2_ardour/mnemonic-us.bindings.in
@@ -190,6 +190,7 @@ This mode provides many different operations on both regions and control points,
@select|Editor/select-all-in-punch-range|<@PRIMARY@>d|select all in punch range
@vis|Editor/fit-tracks|f|fit tracks vertically
@trans|Editor/toggle-follow-playhead|<@PRIMARY@>f|toggle playhead tracking
+@trans|Editor/editor-fade-range|<@SECONDARY@>f|fade range selection
@trans|Transport/ToggleFollowEdits|<@TERTIARY@>f|toggle playhead follows edits
@wvis|Common/ToggleMaximalEditor|<@PRIMARY@><@SECONDARY@>f|maximise editor space
@wvis|Common/ToggleMaximalMixer|F12|maximise mixer space
diff --git a/gtk2_ardour/route_time_axis.cc b/gtk2_ardour/route_time_axis.cc
index 77fb0815bc..36b2cdb2e9 100644
--- a/gtk2_ardour/route_time_axis.cc
+++ b/gtk2_ardour/route_time_axis.cc
@@ -1385,6 +1385,41 @@ RouteTimeAxisView::find_next_region_boundary (framepos_t pos, int32_t dir)
}
void
+RouteTimeAxisView::fade_range (TimeSelection& selection)
+{
+ boost::shared_ptr<Playlist> what_we_got;
+ boost::shared_ptr<Track> tr = track ();
+ boost::shared_ptr<Playlist> playlist;
+
+ if (tr == 0) {
+ /* route is a bus, not a track */
+ return;
+ }
+
+ playlist = tr->playlist();
+
+ TimeSelection time (selection);
+ float const speed = tr->speed();
+ if (speed != 1.0f) {
+ for (TimeSelection::iterator i = time.begin(); i != time.end(); ++i) {
+ (*i).start = session_frame_to_track_frame((*i).start, speed);
+ (*i).end = session_frame_to_track_frame((*i).end, speed);
+ }
+ }
+
+ playlist->clear_changes ();
+ playlist->clear_owned_changes ();
+
+ playlist->fade_range (time);
+
+ vector<Command*> cmds;
+ playlist->rdiff (cmds);
+ _session->add_commands (cmds);
+ _session->add_command (new StatefulDiffCommand (playlist));
+
+}
+
+void
RouteTimeAxisView::cut_copy_clear (Selection& selection, CutCopyOp op)
{
boost::shared_ptr<Playlist> what_we_got;
diff --git a/gtk2_ardour/route_time_axis.h b/gtk2_ardour/route_time_axis.h
index f56b747a8f..cfc71d89fa 100644
--- a/gtk2_ardour/route_time_axis.h
+++ b/gtk2_ardour/route_time_axis.h
@@ -104,6 +104,7 @@ public:
void uncombine_regions ();
void uncombine_region (RegionView*);
void toggle_automation_track (const Evoral::Parameter& param);
+ void fade_range (TimeSelection&);
/* The editor calls these when mapping an operation across multiple tracks */
void use_new_playlist (bool prompt, std::vector<boost::shared_ptr<ARDOUR::Playlist> > const &);
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
index 4c183ddc6a..c2c7f7db53 100644
--- a/gtk2_ardour/time_axis_view.h
+++ b/gtk2_ardour/time_axis_view.h
@@ -167,6 +167,8 @@ class TimeAxisView : public virtual AxisView
virtual void set_selected_regionviews (RegionSelection&) {}
virtual void set_selected_points (PointSelection&) {}
+ virtual void fade_range (TimeSelection&) {}
+
virtual boost::shared_ptr<ARDOUR::Region> find_next_region (framepos_t /*pos*/, ARDOUR::RegionPoint, int32_t /*dir*/) {
return boost::shared_ptr<ARDOUR::Region> ();
}