gui/audio: Add accessor functions for control buttons

Signed-off-by: Anna Schumaker <Anna@NoWheyCreamery.com>
This commit is contained in:
Anna Schumaker 2016-09-04 09:19:37 -04:00
parent 943ab02aa5
commit 07d735eeee
4 changed files with 68 additions and 59 deletions

View File

@ -44,13 +44,9 @@ static void __audio_load(struct track *track)
static void __audio_change_state(GstState state) static void __audio_change_state(GstState state)
{ {
if (state == GST_STATE_PLAYING) { bool playing = (state == GST_STATE_PLAYING);
gtk_widget_hide(gui_builder_widget("o_play")); gtk_widget_set_visible(GTK_WIDGET(gui_play_button()), !playing);
gtk_widget_show(gui_builder_widget("o_pause")); gtk_widget_set_visible(GTK_WIDGET(gui_pause_button()), playing);
} else {
gtk_widget_show(gui_builder_widget("o_play"));
gtk_widget_hide(gui_builder_widget("o_pause"));
}
} }
static void __audio_config_pause(int n) static void __audio_config_pause(int n)
@ -88,7 +84,7 @@ static int __audio_timeout(gpointer data)
return G_SOURCE_CONTINUE; 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"); g_signal_stop_emission_by_name(widget, "can-activate-accel");
return !GTK_IS_ENTRY(gtk_window_get_focus(gui_window())) && return !GTK_IS_ENTRY(gtk_window_get_focus(gui_window())) &&

View File

@ -44,6 +44,30 @@ static inline GtkLabel *gui_duration(void)
return GTK_LABEL(gui_builder_widget("duration")); 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 #ifdef CONFIG_TESTING
void test_gui_audio_timeout(); void test_gui_audio_timeout();
#endif /* CONFIG_TESTING */ #endif /* CONFIG_TESTING */

View File

@ -135,7 +135,7 @@
<property name="valign">center</property> <property name="valign">center</property>
<property name="layout_style">start</property> <property name="layout_style">start</property>
<child> <child>
<object class="GtkButton" id="o_prev"> <object class="GtkButton" id="prev_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="focus_on_click">False</property> <property name="focus_on_click">False</property>
@ -143,7 +143,7 @@
<property name="tooltip_text" translatable="yes">Previous track</property> <property name="tooltip_text" translatable="yes">Previous track</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="valign">center</property> <property name="valign">center</property>
<signal name="can-activate-accel" handler="__audio_can_accel" swapped="no"/> <signal name="can-activate-accel" handler="__gui_audio_can_accel" swapped="no"/>
<signal name="clicked" handler="audio_prev" swapped="no"/> <signal name="clicked" handler="audio_prev" swapped="no"/>
<child> <child>
<object class="GtkImage" id="image4"> <object class="GtkImage" id="image4">
@ -169,7 +169,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="o_play"> <object class="GtkButton" id="play_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="focus_on_click">False</property> <property name="focus_on_click">False</property>
@ -177,7 +177,7 @@
<property name="tooltip_text" translatable="yes">Start playback</property> <property name="tooltip_text" translatable="yes">Start playback</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="valign">center</property> <property name="valign">center</property>
<signal name="can-activate-accel" handler="__audio_can_accel" swapped="no"/> <signal name="can-activate-accel" handler="__gui_audio_can_accel" swapped="no"/>
<signal name="clicked" handler="audio_play" swapped="no"/> <signal name="clicked" handler="audio_play" swapped="no"/>
<child> <child>
<object class="GtkImage" id="image1"> <object class="GtkImage" id="image1">
@ -204,14 +204,14 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="o_pause"> <object class="GtkButton" id="pause_button">
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="focus_on_click">False</property> <property name="focus_on_click">False</property>
<property name="receives_default">True</property> <property name="receives_default">True</property>
<property name="tooltip_text" translatable="yes">Pause playback</property> <property name="tooltip_text" translatable="yes">Pause playback</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="valign">center</property> <property name="valign">center</property>
<signal name="can-activate-accel" handler="__audio_can_accel" swapped="no"/> <signal name="can-activate-accel" handler="__gui_audio_can_accel" swapped="no"/>
<signal name="clicked" handler="audio_pause" swapped="no"/> <signal name="clicked" handler="audio_pause" swapped="no"/>
<child> <child>
<object class="GtkImage" id="image2"> <object class="GtkImage" id="image2">
@ -238,7 +238,7 @@
</packing> </packing>
</child> </child>
<child> <child>
<object class="GtkButton" id="o_next"> <object class="GtkButton" id="next_button">
<property name="visible">True</property> <property name="visible">True</property>
<property name="can_focus">False</property> <property name="can_focus">False</property>
<property name="focus_on_click">False</property> <property name="focus_on_click">False</property>
@ -246,7 +246,7 @@
<property name="tooltip_text" translatable="yes">Next track</property> <property name="tooltip_text" translatable="yes">Next track</property>
<property name="halign">center</property> <property name="halign">center</property>
<property name="valign">center</property> <property name="valign">center</property>
<signal name="can-activate-accel" handler="__audio_can_accel" swapped="no"/> <signal name="can-activate-accel" handler="__gui_audio_can_accel" swapped="no"/>
<signal name="clicked" handler="audio_next" swapped="no"/> <signal name="clicked" handler="audio_next" swapped="no"/>
<child> <child>
<object class="GtkImage" id="image5"> <object class="GtkImage" id="image5">

View File

@ -20,11 +20,6 @@ struct core_init_data init_data = {
.audio_ops = &audio_ops, .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() 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"))); 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); 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) static void test_audio_seek(gint64 pos)
{ {
GstState state; 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_title_tag()), ==, " ");
g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00"); g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00");
g_assert_cmpstr(gtk_label_get_text(gui_duration()), ==, "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() 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_duration()), ==, length);
g_assert_cmpstr(gtk_label_get_text(gui_position()), ==, "0:00"); 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); 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() static void test_audio()
{ {
struct db_entry *dbe, *next; struct db_entry *dbe, *next;
struct track *track; 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_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()) { db_for_each(dbe, next, track_db_get()) {
if (TRACK(dbe)->tr_track == 1) { 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); audio_load(track);
g_assert_cmpuint(audio_cur_track()->tr_track, ==, track->tr_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); test_set_pause_after(0);
audio_eos(); 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_cmpuint(audio_cur_track()->tr_track, ==, 3);
g_assert_false(test_get_toggle_state("favorite_button")); g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)");
g_assert_false(test_get_toggle_state("hide_button"));
test_set_pause_after(1); test_set_pause_after(1);
g_assert_cmpstr_free(test_get_pause_text(), ==, "next track"); 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_cmpuint(audio_cur_track()->tr_track, ==, 5);
g_assert_cmpstr_free(test_get_pause_text(), ==, "(disabled)"); 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_audio_seek(71 * GST_SECOND);
test_gui_audio_timeout(); test_gui_audio_timeout();
g_assert_cmpuint(gtk_adjustment_get_upper(GTK_ADJUSTMENT(gui_builder_object("o_progress"))), 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()) {}; while (idle_run_task()) {};
g_test_init(&argc, &argv, NULL); g_test_init(&argc, &argv, NULL);
g_test_add_func("/Gui/Audio/Init", test_audio_init); 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/Load", test_audio_load);
g_test_add_func("/Gui/Audio/Test", test_audio); g_test_add_func("/Gui/Audio/Buttons", test_audio_buttons);
g_test_add_func("/Gui/Audio/Test", test_audio);
ret = g_test_run(); ret = g_test_run();
core_deinit(); core_deinit();