From 278ad73259a396e5a2f5f16c037ea1a06d382de6 Mon Sep 17 00:00:00 2001 From: nick_m Date: Mon, 7 Mar 2016 06:35:32 +1100 Subject: Tempo ramps - check for impossible locations tempo dialog bbt entry. reorganise code. --- gtk2_ardour/editor_drag.cc | 2 +- gtk2_ardour/editor_tempodisplay.cc | 2 +- gtk2_ardour/tempo_dialog.cc | 14 +++++++++++++- gtk2_ardour/tempo_dialog.h | 5 +++-- 4 files changed, 18 insertions(+), 5 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/editor_drag.cc b/gtk2_ardour/editor_drag.cc index f3cebf9a9c..ea8af8cfd6 100644 --- a/gtk2_ardour/editor_drag.cc +++ b/gtk2_ardour/editor_drag.cc @@ -3183,9 +3183,9 @@ MeterMarkerDrag::motion (GdkEvent* event, bool first_move) } framepos_t const pf = adjusted_current_frame (event); - double const baf = _editor->session()->tempo_map().beat_at_frame (pf); _marker->set_position (pf); if (_marker->meter().position_lock_style() == MusicTime) { + double const baf = _editor->session()->tempo_map().beat_at_frame (pf); _editor->session()->tempo_map().gui_move_meter (_real_section, _marker->meter(), baf); } else { _editor->session()->tempo_map().gui_move_meter (_real_section, _marker->meter(), pf); diff --git a/gtk2_ardour/editor_tempodisplay.cc b/gtk2_ardour/editor_tempodisplay.cc index bd5ff205e9..56ee463f9f 100644 --- a/gtk2_ardour/editor_tempodisplay.cc +++ b/gtk2_ardour/editor_tempodisplay.cc @@ -378,7 +378,7 @@ Editor::edit_tempo_section (TempoSection* section) if (tempo_dialog.get_lock_style() == MusicTime) { _session->tempo_map().replace_tempo (*section, Tempo (bpm, nt), beat, tempo_dialog.get_tempo_type()); } else { - framepos_t const f = _session->tempo_map().compute_new_tempo_frame (section, Tempo (bpm, nt), beat); + framepos_t const f = _session->tempo_map().predict_tempo_frame (section, Tempo (bpm, nt), when); _session->tempo_map().replace_tempo (*section, Tempo (bpm, nt), f, tempo_dialog.get_tempo_type()); } XMLNode &after = _session->tempo_map().get_state(); diff --git a/gtk2_ardour/tempo_dialog.cc b/gtk2_ardour/tempo_dialog.cc index 5d06f5ca3c..eef19e22a5 100644 --- a/gtk2_ardour/tempo_dialog.cc +++ b/gtk2_ardour/tempo_dialog.cc @@ -36,6 +36,8 @@ using namespace PBD; TempoDialog::TempoDialog (TempoMap& map, framepos_t frame, const string&) : ArdourDialog (_("New Tempo")) + , _map (&map) + , _section (0) , bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0) , bpm_spinner (bpm_adjustment) , when_bar_label (_("bar:"), ALIGN_LEFT, ALIGN_CENTER) @@ -52,6 +54,8 @@ TempoDialog::TempoDialog (TempoMap& map, framepos_t frame, const string&) TempoDialog::TempoDialog (TempoMap& map, TempoSection& section, const string&) : ArdourDialog (_("Edit Tempo")) + , _map (&map) + , _section (§ion) , bpm_adjustment (60.0, 1.0, 999.9, 0.1, 1.0) , bpm_spinner (bpm_adjustment) , when_bar_label (_("bar:"), ALIGN_LEFT, ALIGN_CENTER) @@ -269,7 +273,15 @@ TempoDialog::bpm_button_release (GdkEventButton*) bool TempoDialog::entry_key_release (GdkEventKey*) { - set_response_sensitive (RESPONSE_ACCEPT, is_user_input_valid()); + Timecode::BBT_Time bbt; + get_bbt_time (bbt); + + if (_section && is_user_input_valid()) { + set_response_sensitive (RESPONSE_ACCEPT, _map->bbt_valid (_section, Tempo (get_bpm(), get_note_type()), bbt)); + } else { + set_response_sensitive (RESPONSE_ACCEPT, is_user_input_valid()); + } + return false; } diff --git a/gtk2_ardour/tempo_dialog.h b/gtk2_ardour/tempo_dialog.h index 706085c688..38c14e8b27 100644 --- a/gtk2_ardour/tempo_dialog.h +++ b/gtk2_ardour/tempo_dialog.h @@ -75,6 +75,9 @@ private: double last_t; gint64 first_t; + ARDOUR::TempoMap* _map; + ARDOUR::TempoSection* _section; + Gtk::ComboBoxText pulse_selector; Gtk::Adjustment bpm_adjustment; Gtk::SpinButton bpm_spinner; @@ -86,8 +89,6 @@ private: Gtk::Button tap_tempo_button; Gtk::ComboBoxText tempo_type; Gtk::ComboBoxText lock_style; - - }; class MeterDialog : public ArdourDialog -- cgit v1.2.3