From 07d735eeee83325c55c3c8c785cd6e67d3505ccb Mon Sep 17 00:00:00 2001 From: Anna Schumaker Date: Sun, 4 Sep 2016 09:19:37 -0400 Subject: [PATCH] gui/audio: Add accessor functions for control buttons Signed-off-by: Anna Schumaker --- gui/audio.c | 12 +++---- include/gui/audio.h | 24 +++++++++++++ share/ocarina/ocarina.ui | 16 ++++----- tests/gui/audio.c | 75 +++++++++++++++++----------------------- 4 files changed, 68 insertions(+), 59 deletions(-) diff --git a/gui/audio.c b/gui/audio.c index d94fb233..4daff059 100644 --- a/gui/audio.c +++ b/gui/audio.c @@ -44,13 +44,9 @@ static void __audio_load(struct track *track) static void __audio_change_state(GstState state) { - if (state == GST_STATE_PLAYING) { - gtk_widget_hide(gui_builder_widget("o_play")); - gtk_widget_show(gui_builder_widget("o_pause")); - } else { - gtk_widget_show(gui_builder_widget("o_play")); - gtk_widget_hide(gui_builder_widget("o_pause")); - } + bool playing = (state == GST_STATE_PLAYING); + gtk_widget_set_visible(GTK_WIDGET(gui_play_button()), !playing); + gtk_widget_set_visible(GTK_WIDGET(gui_pause_button()), playing); } static void __audio_config_pause(int n) @@ -88,7 +84,7 @@ static int __audio_timeout(gpointer data) return G_SOURCE_CONTINUE; } -gboolean __audio_can_accel(GtkWidget *widget, guint signal_id) +gboolean __gui_audio_can_accel(GtkWidget *widget, guint signal_id) { g_signal_stop_emission_by_name(widget, "can-activate-accel"); return !GTK_IS_ENTRY(gtk_window_get_focus(gui_window())) && diff --git a/include/gui/audio.h b/include/gui/audio.h index 037821d8..5fcca3c3 100644 --- a/include/gui/audio.h +++ b/include/gui/audio.h @@ -44,6 +44,30 @@ static inline GtkLabel *gui_duration(void) return GTK_LABEL(gui_builder_widget("duration")); } +/* Called to get the play button. */ +static inline GtkButton *gui_play_button(void) +{ + return GTK_BUTTON(gui_builder_widget("play_button")); +} + +/* Called to get the pause button. */ +static inline GtkButton *gui_pause_button(void) +{ + return GTK_BUTTON(gui_builder_widget("pause_button")); +} + +/* Called to get the previous button. */ +static inline GtkButton *gui_prev_button(void) +{ + return GTK_BUTTON(gui_builder_widget("prev_button")); +} + +/* Called to get the next button. */ +static inline GtkButton *gui_next_button(void) +{ + return GTK_BUTTON(gui_builder_widget("next_button")); +} + #ifdef CONFIG_TESTING void test_gui_audio_timeout(); #endif /* CONFIG_TESTING */ diff --git a/share/ocarina/ocarina.ui b/share/ocarina/ocarina.ui index 39115c6d..ce850419 100644 --- a/share/ocarina/ocarina.ui +++ b/share/ocarina/ocarina.ui @@ -135,7 +135,7 @@ center start - + True False False @@ -143,7 +143,7 @@ Previous track center center - + @@ -169,7 +169,7 @@ - + True False False @@ -177,7 +177,7 @@ Start playback center center - + @@ -204,14 +204,14 @@ - + False False True Pause playback center center - + @@ -238,7 +238,7 @@ - + True False False @@ -246,7 +246,7 @@ Next track center center - + diff --git a/tests/gui/audio.c b/tests/gui/audio.c index e69325a5..c18dd7ee 100644 --- a/tests/gui/audio.c +++ b/tests/gui/audio.c @@ -20,11 +20,6 @@ struct core_init_data init_data = { .audio_ops = &audio_ops, }; -static inline bool test_get_toggle_state(const gchar *name) -{ - return gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(gui_builder_widget(name))); -} - static inline gchar *test_get_pause_text() { return gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(gui_builder_widget("o_pause_after"))); @@ -36,11 +31,6 @@ static inline void test_set_pause_after(unsigned int n) gtk_combo_box_set_active(combo, n + 1); } -static inline void test_click_button(const gchar *name) -{ - gtk_button_clicked(GTK_BUTTON(gui_builder_widget(name))); -} - static void test_audio_seek(gint64 pos) { GstState state; @@ -59,6 +49,8 @@ static void test_audio_init() g_assert_cmpstr(gtk_label_get_text(gui_title_tag()), ==, " "); g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00"); g_assert_cmpstr(gtk_label_get_text(gui_duration()), ==, "0:00"); + g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_play_button()))); + g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_pause_button()))); } static void test_audio_load() @@ -76,21 +68,40 @@ static void test_audio_load() g_assert_cmpstr(gtk_label_get_text(gui_duration()), ==, length); g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00"); + g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_play_button()))); + g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_pause_button()))); g_free(length); } +static void test_audio_buttons() +{ + audio_load(track_get(0)); + + gtk_button_clicked(gui_pause_button()); + g_assert_cmpuint(audio_cur_state(), ==, GST_STATE_PAUSED); + g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_play_button()))); + g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_pause_button()))); + + gtk_button_clicked(gui_play_button()); + g_assert_cmpuint(audio_cur_state(), ==, GST_STATE_PLAYING); + g_assert_false(gtk_widget_is_visible(GTK_WIDGET(gui_play_button()))); + g_assert_true( gtk_widget_is_visible(GTK_WIDGET(gui_pause_button()))); + + gtk_button_clicked(gui_next_button()); + if (track_get(0)->tr_track == 1) + gtk_button_clicked(gui_next_button()); + g_assert(audio_cur_track() != track_get(0)); + + gtk_button_clicked(gui_prev_button()); + g_assert(audio_cur_track() == track_get(0)); +} + static void test_audio() { struct db_entry *dbe, *next; struct track *track; - audio_load(track_get(1)); - audio_pause(); - g_assert_true(gtk_widget_is_visible(gui_builder_widget("o_play"))); - g_assert_false(gtk_widget_is_visible(gui_builder_widget("o_pause"))); g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)"); - g_assert_false(test_get_toggle_state("favorite_button")); - g_assert_false(test_get_toggle_state("hide_button")); db_for_each(dbe, next, track_db_get()) { if (TRACK(dbe)->tr_track == 1) { @@ -99,32 +110,13 @@ static void test_audio() } } - playlist_add(PL_SYSTEM, "Favorites", track); - playlist_add(PL_SYSTEM, "Hidden", track); - g_assert_false(playlist_has(PL_SYSTEM, "Collection", track)); audio_load(track); g_assert_cmpuint(audio_cur_track()->tr_track, ==, track->tr_track); - g_assert_true(test_get_toggle_state("favorite_button")); - g_assert_true(test_get_toggle_state("hide_button")); - - test_click_button("o_play"); - g_assert_false(gtk_widget_is_visible(gui_builder_widget("o_play"))); - g_assert_true(gtk_widget_is_visible(gui_builder_widget("o_pause"))); - - test_click_button("o_pause"); - g_assert_true(gtk_widget_is_visible(gui_builder_widget("o_play"))); - g_assert_false(gtk_widget_is_visible(gui_builder_widget("o_pause"))); - test_set_pause_after(0); audio_eos(); - g_assert_cmpuint(audio_cur_track()->tr_track, ==, 2); - g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)"); - - test_click_button("o_next"); g_assert_cmpuint(audio_cur_track()->tr_track, ==, 3); - g_assert_false(test_get_toggle_state("favorite_button")); - g_assert_false(test_get_toggle_state("hide_button")); + g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)"); test_set_pause_after(1); g_assert_cmpstr_free(test_get_pause_text(), ==, "next track"); @@ -137,10 +129,6 @@ static void test_audio() g_assert_cmpuint(audio_cur_track()->tr_track, ==, 5); g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)"); - test_click_button("o_prev"); - g_assert_cmpuint(audio_cur_track()->tr_track, ==, 4); - - test_click_button("o_pause"); test_audio_seek(71 * GST_SECOND); test_gui_audio_timeout(); g_assert_cmpuint(gtk_adjustment_get_upper(GTK_ADJUSTMENT(gui_builder_object("o_progress"))), @@ -166,9 +154,10 @@ int main(int argc, char **argv) while (idle_run_task()) {}; g_test_init(&argc, &argv, NULL); - g_test_add_func("/Gui/Audio/Init", test_audio_init); - g_test_add_func("/Gui/Audio/Load", test_audio_load); - g_test_add_func("/Gui/Audio/Test", test_audio); + g_test_add_func("/Gui/Audio/Init", test_audio_init); + g_test_add_func("/Gui/Audio/Load", test_audio_load); + g_test_add_func("/Gui/Audio/Buttons", test_audio_buttons); + g_test_add_func("/Gui/Audio/Test", test_audio); ret = g_test_run(); core_deinit();