more changes flowing from a persistent MonitorSection object
[ardour.git] / gtk2_ardour / tempo_dialog.cc
index db21474630f59026c9b716469cd1a7a00696749c..48b54e981f06fba017975689ddff9f7422a195ac 100644 (file)
@@ -34,7 +34,7 @@ using namespace Gtkmm2ext;
 using namespace ARDOUR;
 using namespace PBD;
 
-TempoDialog::TempoDialog (TempoMap& map, framepos_t frame, const string&)
+TempoDialog::TempoDialog (TempoMap& map, samplepos_t sample, const string&)
        : ArdourDialog (_("New Tempo"))
        , _map (&map)
        , _section (0)
@@ -48,8 +48,8 @@ TempoDialog::TempoDialog (TempoMap& map, framepos_t frame, const string&)
        , pulse_selector_label (_("Pulse:"), ALIGN_LEFT, ALIGN_CENTER)
        , tap_tempo_button (_("Tap tempo"))
 {
-       Tempo tempo (map.tempo_at_frame (frame));
-       Timecode::BBT_Time when (map.bbt_at_frame (frame));
+       Tempo tempo (map.tempo_at_sample (sample));
+       Timecode::BBT_Time when (map.bbt_at_sample (sample));
 
        init (when, tempo.note_types_per_minute(), tempo.end_note_types_per_minute(), tempo.note_type(), TempoSection::Constant, true, MusicTime);
 }
@@ -68,7 +68,7 @@ TempoDialog::TempoDialog (TempoMap& map, TempoSection& section, const string&)
        , pulse_selector_label (_("Pulse:"), ALIGN_LEFT, ALIGN_CENTER)
        , tap_tempo_button (_("Tap tempo"))
 {
-       Timecode::BBT_Time when (map.bbt_at_frame (section.frame()));
+       Timecode::BBT_Time when (map.bbt_at_sample (section.sample()));
        init (when, section.note_types_per_minute(), section.end_note_types_per_minute(), section.note_type(), section.type()
              , section.initial() || section.locked_to_meter(), section.position_lock_style());
 }
@@ -246,7 +246,8 @@ TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double end_bpm, d
        tap_tempo_button.show ();
        get_vbox()->set_spacing (6);
        get_vbox()->pack_end (tap_tempo_button);
-       bpm_spinner.grab_focus ();
+       tap_tempo_button.can_focus ();
+       tap_tempo_button.grab_focus ();
 
        set_name ("MetricDialog");
 
@@ -263,6 +264,7 @@ TempoDialog::init (const Timecode::BBT_Time& when, double bpm, double end_bpm, d
        tempo_type.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::tempo_type_change));
        lock_style.signal_changed().connect (sigc::mem_fun (*this, &TempoDialog::lock_style_change));
        tap_tempo_button.signal_button_press_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_button_press), false);
+       tap_tempo_button.signal_key_press_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_key_press), false);
        tap_tempo_button.signal_focus_out_event().connect (sigc::mem_fun (*this, &TempoDialog::tap_tempo_focus_out));
 
        tempo_type_change();
@@ -412,7 +414,27 @@ TempoDialog::lock_style_change ()
 }
 
 bool
-TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
+TempoDialog::tap_tempo_key_press (GdkEventKey*)
+{
+       tap_tempo ();
+       return false;
+}
+
+bool
+TempoDialog::tap_tempo_button_press (GdkEventButton* ev)
+{
+       if (ev->type == GDK_2BUTTON_PRESS || ev->type == GDK_3BUTTON_PRESS) {
+               return true;
+       }
+       if (ev->button != 1) {
+               return true;
+       }
+       tap_tempo ();
+       return false; // grab focus
+}
+
+void
+TempoDialog::tap_tempo ()
 {
        double t;
 
@@ -446,8 +468,6 @@ TempoDialog::tap_tempo_button_press (GdkEventButton *ev)
        }
        tap_count++;
        last_t = t;
-
-       return true;
 }
 
 bool
@@ -457,12 +477,12 @@ TempoDialog::tap_tempo_focus_out (GdkEventFocus* )
        return false;
 }
 
-MeterDialog::MeterDialog (TempoMap& map, framepos_t frame, const string&)
+MeterDialog::MeterDialog (TempoMap& map, samplepos_t sample, const string&)
        : ArdourDialog (_("New Meter"))
 {
-       frame = map.round_to_bar(frame, RoundNearest).frame;
-       Timecode::BBT_Time when (map.bbt_at_frame (frame));
-       Meter meter (map.meter_at_frame (frame));
+       sample = map.round_to_bar(sample, RoundNearest).sample;
+       Timecode::BBT_Time when (map.bbt_at_sample (sample));
+       Meter meter (map.meter_at_sample (sample));
 
        init (when, meter.divisions_per_bar(), meter.note_divisor(), false, MusicTime);
 }
@@ -470,7 +490,7 @@ MeterDialog::MeterDialog (TempoMap& map, framepos_t frame, const string&)
 MeterDialog::MeterDialog (TempoMap& map, MeterSection& section, const string&)
        : ArdourDialog (_("Edit Meter"))
 {
-       Timecode::BBT_Time when (map.bbt_at_frame (section.frame()));
+       Timecode::BBT_Time when (map.bbt_at_sample (section.sample()));
 
        init (when, section.divisions_per_bar(), section.note_divisor(), section.initial(), section.position_lock_style());
 }
@@ -650,13 +670,13 @@ MeterDialog::entry_key_release (GdkEventKey*)
 void
 MeterDialog::note_type_change ()
 {
-        set_response_sensitive (RESPONSE_ACCEPT, is_user_input_valid());
+       set_response_sensitive (RESPONSE_ACCEPT, is_user_input_valid());
 }
 
 void
 MeterDialog::lock_style_change ()
 {
-        set_response_sensitive (RESPONSE_ACCEPT, is_user_input_valid());
+       set_response_sensitive (RESPONSE_ACCEPT, is_user_input_valid());
 }
 
 double