X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faudio_clock.cc;h=550b7c311f344e0472d4cc0f0d95e3b97e50fee8;hb=3733c995c5269756ca5941a9db50c6a965787508;hp=c438b3d86c5ae50877fffd5ff92c72bf1b131425;hpb=d38e2213d79b1c8952c776a3b60f7709457edc0c;p=ardour.git diff --git a/gtk2_ardour/audio_clock.cc b/gtk2_ardour/audio_clock.cc index c438b3d86c..550b7c311f 100644 --- a/gtk2_ardour/audio_clock.cc +++ b/gtk2_ardour/audio_clock.cc @@ -25,6 +25,7 @@ #include #include #include +#include #include "ardour_ui.h" #include "audio_clock.h" @@ -186,7 +187,7 @@ AudioClock::AudioClock (const string& name, bool allow_edit, bool duration, bool */ clock_base.add_events (Gdk::BUTTON_PRESS_MASK|Gdk::BUTTON_RELEASE_MASK); - clock_base.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Hours)); + clock_base.signal_button_release_event().connect (bind (mem_fun (*this, &AudioClock::field_button_release_event), SMPTE_Hours)); if (editable) { setup_events (); @@ -224,53 +225,53 @@ AudioClock::setup_events () ms_minutes_ebox.set_flags (Gtk::CAN_FOCUS); ms_seconds_ebox.set_flags (Gtk::CAN_FOCUS); - hours_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Hours)); - minutes_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Minutes)); - seconds_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Seconds)); - frames_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Frames)); - audio_frames_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), AudioFrames)); - bars_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Bars)); - beats_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Beats)); - ticks_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Ticks)); - ms_hours_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Hours)); - ms_minutes_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Minutes)); - ms_seconds_ebox.motion_notify_event.connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Seconds)); - - hours_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Hours)); - minutes_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Minutes)); - seconds_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Seconds)); - frames_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Frames)); - audio_frames_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), AudioFrames)); - bars_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Bars)); - beats_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Beats)); - ticks_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Ticks)); - ms_hours_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Hours)); - ms_minutes_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Minutes)); - ms_seconds_ebox.button_press_event.connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Seconds)); - - hours_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Hours)); - minutes_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Minutes)); - seconds_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Seconds)); - frames_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Frames)); - audio_frames_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), AudioFrames)); - bars_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Bars)); - beats_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Beats)); - ticks_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Ticks)); - ms_hours_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Hours)); - ms_minutes_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Minutes)); - ms_seconds_ebox.button_release_event.connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Seconds)); - - hours_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Hours)); - minutes_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Minutes)); - seconds_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Seconds)); - frames_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Frames)); - audio_frames_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), AudioFrames)); - bars_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Bars)); - beats_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Beats)); - ticks_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Ticks)); - ms_hours_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Hours)); - ms_minutes_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Minutes)); - ms_seconds_ebox.key_release_event.connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Seconds)); + hours_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Hours)); + minutes_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Minutes)); + seconds_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Seconds)); + frames_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), SMPTE_Frames)); + audio_frames_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), AudioFrames)); + bars_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Bars)); + beats_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Beats)); + ticks_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), Ticks)); + ms_hours_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Hours)); + ms_minutes_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Minutes)); + ms_seconds_ebox.signal_motion_notify_event().connect (bind (mem_fun(*this, &AudioClock::field_motion_notify_event), MS_Seconds)); + + hours_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Hours)); + minutes_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Minutes)); + seconds_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Seconds)); + frames_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), SMPTE_Frames)); + audio_frames_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), AudioFrames)); + bars_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Bars)); + beats_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Beats)); + ticks_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), Ticks)); + ms_hours_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Hours)); + ms_minutes_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Minutes)); + ms_seconds_ebox.signal_button_press_event().connect (bind (mem_fun(*this, &AudioClock::field_button_press_event), MS_Seconds)); + + hours_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Hours)); + minutes_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Minutes)); + seconds_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Seconds)); + frames_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), SMPTE_Frames)); + audio_frames_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), AudioFrames)); + bars_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Bars)); + beats_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Beats)); + ticks_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), Ticks)); + ms_hours_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Hours)); + ms_minutes_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Minutes)); + ms_seconds_ebox.signal_button_release_event().connect (bind (mem_fun(*this, &AudioClock::field_button_release_event), MS_Seconds)); + + hours_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Hours)); + minutes_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Minutes)); + seconds_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Seconds)); + frames_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), SMPTE_Frames)); + audio_frames_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), AudioFrames)); + bars_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Bars)); + beats_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Beats)); + ticks_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), Ticks)); + ms_hours_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Hours)); + ms_minutes_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Minutes)); + ms_seconds_ebox.signal_key_release_event().connect (bind (mem_fun(*this, &AudioClock::field_key_release_event), MS_Seconds)); hours_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), SMPTE_Hours)); minutes_ebox.signal_focus_in_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_in_event), SMPTE_Minutes)); @@ -295,23 +296,39 @@ AudioClock::setup_events () ms_hours_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Hours)); ms_minutes_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Minutes)); ms_seconds_ebox.signal_focus_out_event().connect (bind (mem_fun(*this, &AudioClock::field_focus_out_event), MS_Seconds)); - - Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2); - - Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2); - Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2); - - Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2); } void -AudioClock::realize_impl () +AudioClock::on_realize () { - HBox::realize_impl (); + HBox::on_realize (); + + /* styles are not available until the widgets are bound to a window */ + + switch (_mode) { + case SMPTE: + Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2); + break; + + case BBT: + Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2); + break; + + case MinSec: + Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2); + break; + + case Frames: + Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2); + + } } void @@ -468,7 +485,7 @@ AudioClock::set_session (Session *s) } } -gint +bool AudioClock::field_key_release_event (GdkEventKey *ev, Field field) { Label *label = 0; @@ -692,70 +709,66 @@ AudioClock::field_key_release_event (GdkEventKey *ev, Field field) return TRUE; } -gint +bool AudioClock::field_focus_in_event (GdkEventFocus *ev, Field field) { - ARDOUR_UI::instance()->allow_focus (true); - key_entry_state = 0; switch (field) { case SMPTE_Hours: hours_ebox.set_flags (Gtk::HAS_FOCUS); - hours_ebox.set_state (GTK_STATE_ACTIVE); + hours_ebox.set_state (Gtk::STATE_ACTIVE); break; case SMPTE_Minutes: minutes_ebox.set_flags (Gtk::HAS_FOCUS); - minutes_ebox.set_state (GTK_STATE_ACTIVE); + minutes_ebox.set_state (Gtk::STATE_ACTIVE); break; case SMPTE_Seconds: seconds_ebox.set_flags (Gtk::HAS_FOCUS); - seconds_ebox.set_state (GTK_STATE_ACTIVE); + seconds_ebox.set_state (Gtk::STATE_ACTIVE); break; case SMPTE_Frames: frames_ebox.set_flags (Gtk::HAS_FOCUS); - frames_ebox.set_state (GTK_STATE_ACTIVE); + frames_ebox.set_state (Gtk::STATE_ACTIVE); break; case AudioFrames: audio_frames_ebox.set_flags (Gtk::HAS_FOCUS); - audio_frames_ebox.set_state (GTK_STATE_ACTIVE); + audio_frames_ebox.set_state (Gtk::STATE_ACTIVE); break; case MS_Hours: ms_hours_ebox.set_flags (Gtk::HAS_FOCUS); - ms_hours_ebox.set_state (GTK_STATE_ACTIVE); + ms_hours_ebox.set_state (Gtk::STATE_ACTIVE); break; case MS_Minutes: ms_minutes_ebox.set_flags (Gtk::HAS_FOCUS); - ms_minutes_ebox.set_state (GTK_STATE_ACTIVE); + ms_minutes_ebox.set_state (Gtk::STATE_ACTIVE); break; case MS_Seconds: ms_seconds_ebox.set_flags (Gtk::HAS_FOCUS); - ms_seconds_ebox.set_state (GTK_STATE_ACTIVE); + ms_seconds_ebox.set_state (Gtk::STATE_ACTIVE); break; case Bars: bars_ebox.set_flags (Gtk::HAS_FOCUS); - bars_ebox.set_state (GTK_STATE_ACTIVE); + bars_ebox.set_state (Gtk::STATE_ACTIVE); break; case Beats: beats_ebox.set_flags (Gtk::HAS_FOCUS); - beats_ebox.set_state (GTK_STATE_ACTIVE); + beats_ebox.set_state (Gtk::STATE_ACTIVE); break; case Ticks: ticks_ebox.set_flags (Gtk::HAS_FOCUS); - ticks_ebox.set_state (GTK_STATE_ACTIVE); + ticks_ebox.set_state (Gtk::STATE_ACTIVE); break; } return FALSE; } -gint +bool AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field) { - ARDOUR_UI::instance()->allow_focus (false); - switch (field) { case SMPTE_Hours: @@ -810,7 +823,7 @@ AudioClock::field_focus_out_event (GdkEventFocus *ev, Field field) return FALSE; } -gint +bool AudioClock::field_button_release_event (GdkEventButton *ev, Field field) { @@ -890,7 +903,7 @@ AudioClock::field_button_release_event (GdkEventButton *ev, Field field) return TRUE; } -gint +bool AudioClock::field_button_press_event (GdkEventButton *ev, Field field) { if (session == 0) return FALSE; @@ -967,7 +980,7 @@ AudioClock::field_button_press_event (GdkEventButton *ev, Field field) return TRUE; } -gint +bool AudioClock::field_motion_notify_event (GdkEventMotion *ev, Field field) { if (session == 0 || !dragging) { @@ -1656,9 +1669,8 @@ AudioClock::set_mode (Mode m) started editing the clock and then we switch clock mode. */ - if (ARDOUR_UI::instance()) { - ARDOUR_UI::instance()->allow_focus (false); - } + // GTK2FIX might need an equivalent here for drop focus + if (_mode == m) { return; @@ -1679,20 +1691,36 @@ AudioClock::set_mode (Mode m) switch (_mode) { case SMPTE: clock_base.add (smpte_packer_hbox); + Gtkmm2ext::set_size_request_to_display_given_text (hours_label, "-88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (minutes_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (seconds_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (frames_label, "88", 0, 2); break; + case BBT: clock_base.add (bbt_packer_hbox); + Gtkmm2ext::set_size_request_to_display_given_text (bars_label, "-888", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (beats_label, "88", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ticks_label, "8888", 0, 2); break; + case MinSec: clock_base.add (minsec_packer_hbox); + Gtkmm2ext::set_size_request_to_display_given_text (ms_hours_label, "99", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ms_minutes_label, "99", 0, 2); + Gtkmm2ext::set_size_request_to_display_given_text (ms_seconds_label, "99", 0, 2); break; + case Frames: clock_base.add (frames_packer_hbox); + Gtkmm2ext::set_size_request_to_display_given_text (audio_frames_label, "4294967296", 0, 2); + case Off: break; } - + set (last_when, true); clock_base.show_all (); key_entry_state = 0; } +