summaryrefslogtreecommitdiff
path: root/gtk2_ardour
diff options
context:
space:
mode:
authornick_m <mainsbridge@gmail.com>2016-03-07 06:35:32 +1100
committernick_m <mainsbridge@gmail.com>2016-05-27 23:38:11 +1000
commit278ad73259a396e5a2f5f16c037ea1a06d382de6 (patch)
tree6601cd055a8bfca9408f0466830cc27fb9769564 /gtk2_ardour
parent36ec551a8ad66a99723f54d3149cbcf30d31c077 (diff)
Tempo ramps - check for impossible locations tempo dialog bbt entry. reorganise code.
Diffstat (limited to 'gtk2_ardour')
-rw-r--r--gtk2_ardour/editor_drag.cc2
-rw-r--r--gtk2_ardour/editor_tempodisplay.cc2
-rw-r--r--gtk2_ardour/tempo_dialog.cc14
-rw-r--r--gtk2_ardour/tempo_dialog.h5
4 files changed, 18 insertions, 5 deletions
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 (&section)
, 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