summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2008-01-19 21:13:45 +0000
committerPaul Davis <paul@linuxaudiosystems.com>2008-01-19 21:13:45 +0000
commit89d564186d0b41469cf56ca3f400f98d3ddcfce8 (patch)
tree3824c6fb6d96a26a00346d848309ff982e852297 /gtk2_ardour
parent95a24f9707c342ea1764eb8d1de0a9c73eda84df (diff)
fixes and bindings for region gain control; set-tempo-from-region implementation : please test and look for tempo/meter related bugs
git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2950 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/ardour.bindings.in14
-rw-r--r--gtk2_ardour/ardour.menus1
-rw-r--r--gtk2_ardour/editor.h2
-rw-r--r--gtk2_ardour/editor_actions.cc3
-rw-r--r--gtk2_ardour/editor_ops.cc65
5 files changed, 68 insertions, 17 deletions
diff --git a/gtk2_ardour/ardour.bindings.in b/gtk2_ardour/ardour.bindings.in
index 1efdb1cdd4..9dbbd8deff 100644
--- a/gtk2_ardour/ardour.bindings.in
+++ b/gtk2_ardour/ardour.bindings.in
@@ -38,6 +38,10 @@
(gtk_accel_path "<Actions>/Editor/set-punch-from-edit-range" "bracketleft")
(gtk_accel_path "<Actions>/Editor/set-punch-from-region" "<%SECONDARY%>bracketleft")
+(gtk_accel_path "<Actions>/Editor/boost-region-gain" "asciicircum")
+(gtk_accel_path "<Actions>/Editor/cut-region-gain" "ampersand")
+(gtk_accel_path "<Actions>/Editor/set-tempo-from-region" "asterisk")
+
;; letters
;; TOP ROW
@@ -50,6 +54,7 @@
(gtk_accel_path "<Actions>/Editor/select-all-before-edit-cursor" "<%PRIMARY%>e")
(gtk_accel_path "<Actions>/Editor/show-editor-mixer" "<%TERTIARY%>e")
(gtk_accel_path "<Actions>/Common/goto-editor" "<%WINDOW%>e")
+(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-range" "r")
(gtk_accel_path "<Actions>/Editor/redo" "<%PRIMARY%>r")
(gtk_accel_path "<Actions>/Transport/Record" "<%TERTIARY%>r")
@@ -62,22 +67,19 @@
(gtk_accel_path "<Actions>/Common/ToggleOptionsEditor" "<%WINDOW%>o")
(gtk_accel_path "<Actions>/Editor/set-playhead" "p")
(gtk_accel_path "<Actions>/Editor/select-all-before-playhead" "<%PRIMARY%>p")
+(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>p")
;; MIDDLE ROW
(gtk_accel_path "<Actions>/Editor/align-regions-sync-relative" "a")
-(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%PRIMARY%>a")
+(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
(gtk_accel_path "<Actions>/Editor/align-regions-end" "<%SECONDARY%>a")
(gtk_accel_path "<Actions>/Editor/align-regions-sync" "<%TERTIARY%>a")
+(gtk_accel_path "<Actions>/Editor/align-regions-start-relative" "<%LEVEL4%>a")
(gtk_accel_path "<Actions>/Editor/split-region" "s")
(gtk_accel_path "<Actions>/Common/Save" "<%PRIMARY%>s")
(gtk_accel_path "<Actions>/Editor/duplicate-region" "d")
(gtk_accel_path "<Actions>/Editor/select-all-in-punch-range" "<%PRIMARY%>d")
-
-(gtk_accel_path "<Actions>/Editor/select-all" "<%PRIMARY%>a")
-(gtk_accel_path "<Actions>/Editor/select-all-after-playhead" "<%TERTIARY%><%PRIMARY%>p")
-(gtk_accel_path "<Actions>/Editor/select-all-after-edit-cursor" "<%TERTIARY%><%PRIMARY%>e")
-
(gtk_accel_path "<Actions>/Editor/toggle-follow-playhead" "f")
(gtk_accel_path "<Actions>/MouseMode/set-mouse-mode-gain" "g")
(gtk_accel_path "<Actions>/Editor/play-selected-regions" "h")
diff --git a/gtk2_ardour/ardour.menus b/gtk2_ardour/ardour.menus
index 73768f3cf4..2237a30ea0 100644
--- a/gtk2_ardour/ardour.menus
+++ b/gtk2_ardour/ardour.menus
@@ -194,6 +194,7 @@
<menuitem action='trim-region-to-punch'/>
<separator/>
<menuitem action='pitch-shift-region'/>
+ <menuitem action='set-tempo-from-region'/>
</menu>
<menu name='View' action = 'View'>
<menu name='ZoomFocus' action='ZoomFocus'>
diff --git a/gtk2_ardour/editor.h b/gtk2_ardour/editor.h
index ac67f9015f..ec7554bf3a 100644
--- a/gtk2_ardour/editor.h
+++ b/gtk2_ardour/editor.h
@@ -982,6 +982,8 @@ class Editor : public PublicEditor
void denormalize_region ();
void adjust_region_scale_amplitude (bool up);
+ void use_region_as_bar ();
+
void audition_region_from_region_list ();
void hide_region_from_region_list ();
void remove_region_from_region_list ();
diff --git a/gtk2_ardour/editor_actions.cc b/gtk2_ardour/editor_actions.cc
index ce33a0177e..0b46253efb 100644
--- a/gtk2_ardour/editor_actions.cc
+++ b/gtk2_ardour/editor_actions.cc
@@ -359,6 +359,9 @@ Editor::register_actions ()
act = ActionManager::register_action (editor_actions, "cut-region-gain", _("Cut Region Gain"), bind (mem_fun(*this, &Editor::adjust_region_scale_amplitude), false));
ActionManager::session_sensitive_actions.push_back (act);
+ act = ActionManager::register_action (editor_actions, "set-tempo-from-region", _("Set Tempo from Region=Bar"), mem_fun(*this, &Editor::use_region_as_bar));
+ ActionManager::session_sensitive_actions.push_back (act);
+
act = ActionManager::register_action (editor_actions, "crop", _("Crop"), mem_fun(*this, &Editor::crop_region_to_selection));
ActionManager::session_sensitive_actions.push_back (act);
act = ActionManager::register_action (editor_actions, "insert-chunk", _("Insert Chunk"), bind (mem_fun(*this, &Editor::paste_named_selection), 1.0f));
diff --git a/gtk2_ardour/editor_ops.cc b/gtk2_ardour/editor_ops.cc
index 51a6d294cd..11917851f7 100644
--- a/gtk2_ardour/editor_ops.cc
+++ b/gtk2_ardour/editor_ops.cc
@@ -4119,7 +4119,7 @@ Editor::adjust_region_scale_amplitude (bool up)
return;
}
- ExclusiveRegionSelection (*this, entered_regionview);
+ ExclusiveRegionSelection esr (*this, entered_regionview);
if (selection->regions.empty()) {
return;
@@ -4135,10 +4135,6 @@ Editor::adjust_region_scale_amplitude (bool up)
double fraction = gain_to_slider_position (arv->audio_region()->scale_amplitude ());
- cerr << "slider pos for " << arv->audio_region()->scale_amplitude ()
- << " = " << fraction
- << endl;
-
if (up) {
fraction += 0.05;
fraction = min (fraction, 1.0);
@@ -4151,16 +4147,14 @@ Editor::adjust_region_scale_amplitude (bool up)
continue;
}
- if (up && fraction >= 1.0) {
- continue;
- }
-
fraction = slider_position_to_gain (fraction);
fraction = coefficient_to_dB (fraction);
fraction = dB_to_coefficient (fraction);
-
- cerr << "set scale amp for " << arv->audio_region()->name() << " to " << fraction << endl;
+ if (up && fraction >= 2.0) {
+ continue;
+ }
+
arv->audio_region()->set_scale_amplitude (fraction);
session->add_command (new MementoCommand<Region>(*(arv->region().get()), &before, &arv->region()->get_state()));
}
@@ -4953,3 +4947,52 @@ Editor::pitch_shift_regions ()
pitch_shift (selection->regions, 1.2);
}
+void
+Editor::use_region_as_bar ()
+{
+ if (!session) {
+ return;
+ }
+
+ ExclusiveRegionSelection esr (*this, entered_regionview);
+
+ if (selection->regions.empty()) {
+ return;
+ }
+
+ RegionView* rv = selection->regions.front();
+
+ const Meter& m (session->tempo_map().meter_at (rv->region()->position()));
+
+ /* region length = 1 bar */
+
+ /* 1 bar = how many beats per bar */
+
+ double beats_per_bar = m.beats_per_bar();
+
+ /* now we want frames per beat.
+ we have frames per bar, and beats per bar, so ...
+ */
+
+ double frames_per_beat = rv->region()->length() / beats_per_bar;
+
+ /* beats per minute = */
+
+ double beats_per_minute = (session->frame_rate() * 60.0) / frames_per_beat;
+
+ const TempoSection& t (session->tempo_map().tempo_section_at (rv->region()->position()));
+
+ begin_reversible_command (_("set tempo from region"));
+ XMLNode& before (session->tempo_map().get_state());
+
+ if (t.frame() == rv->region()->position()) {
+ session->tempo_map().change_existing_tempo_at (rv->region()->position(), beats_per_minute, t.note_type());
+ } else {
+ session->tempo_map().add_tempo (Tempo (beats_per_minute, t.note_type()), rv->region()->position());
+ }
+
+ XMLNode& after (session->tempo_map().get_state());
+
+ session->add_command (new MementoCommand<TempoMap>(session->tempo_map(), &before, &after));
+ commit_reversible_command ();
+}