ocarina: Provide a UI for using ALSA
You can either turn it on or off, and then you can select an output device from a dropdown list. Signed-off-by: Bryan Schumaker <bjschuma@netapp.com>
This commit is contained in:
parent
01288e1a86
commit
551ae682b5
|
@ -9,6 +9,7 @@ using namespace std;
|
||||||
void settings_init();
|
void settings_init();
|
||||||
void add_settings_page(string, GtkWidget *);
|
void add_settings_page(string, GtkWidget *);
|
||||||
|
|
||||||
|
void general_settings_init();
|
||||||
void library_settings_init();
|
void library_settings_init();
|
||||||
void library_settings_refresh();
|
void library_settings_refresh();
|
||||||
|
|
||||||
|
|
67
ocarina/settings/general.cpp
Normal file
67
ocarina/settings/general.cpp
Normal file
|
@ -0,0 +1,67 @@
|
||||||
|
// Copyright (c) 2012 Bryan Schumaker
|
||||||
|
#include <ocarina/settings.h>
|
||||||
|
#include <ocarina/gtk.h>
|
||||||
|
|
||||||
|
#include <libsaria/audio.h>
|
||||||
|
|
||||||
|
static GtkWidget *alsa_devices = NULL;
|
||||||
|
static unsigned int num_alsa_devices = 0;
|
||||||
|
|
||||||
|
static void set_alsa_devices(bool using_alsa)
|
||||||
|
{
|
||||||
|
list<string> *devices;
|
||||||
|
list<string>::iterator it;
|
||||||
|
|
||||||
|
for (unsigned int i = 0; i < num_alsa_devices; i++)
|
||||||
|
gtk_combo_box_text_remove(GTK_COMBO_BOX_TEXT(alsa_devices), 0);
|
||||||
|
num_alsa_devices = 0;
|
||||||
|
|
||||||
|
if (using_alsa == true) {
|
||||||
|
devices = libsaria::audio::get_alsa_devices();
|
||||||
|
for (it = devices->begin(); it != devices->end(); it++)
|
||||||
|
gtk_combo_box_text_append_text(GTK_COMBO_BOX_TEXT(alsa_devices), it->c_str());
|
||||||
|
num_alsa_devices = devices->size();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void change_alsa_device(GtkComboBox *combo, gpointer data)
|
||||||
|
{
|
||||||
|
string device = gtk_combo_box_text_get_active_text(GTK_COMBO_BOX_TEXT(alsa_devices));
|
||||||
|
libsaria::audio::set_device(device);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void toggle_alsa(GtkWidget *button, gpointer data)
|
||||||
|
{
|
||||||
|
bool active = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(button));
|
||||||
|
libsaria::audio::use_alsa(active);
|
||||||
|
gtk_widget_set_sensitive(alsa_devices, active);
|
||||||
|
set_alsa_devices(active);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void add_alsa_settings(GtkWidget *general)
|
||||||
|
{
|
||||||
|
bool using_alsa = libsaria::audio::using_alsa();
|
||||||
|
GtkWidget *alsa = gtk_hbox_new(FALSE, 0);
|
||||||
|
GtkWidget *button = gtk_check_button_new_with_label("Use ALSA");
|
||||||
|
alsa_devices = gtk_combo_box_text_new();
|
||||||
|
|
||||||
|
gtk_widget_set_sensitive(alsa_devices, using_alsa);
|
||||||
|
set_alsa_devices(using_alsa);
|
||||||
|
|
||||||
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), using_alsa);
|
||||||
|
GTK_CONNECT(button, "toggled", toggle_alsa, NULL);
|
||||||
|
GTK_CONNECT(alsa_devices, "changed", change_alsa_device, NULL);
|
||||||
|
|
||||||
|
box_pack_start(alsa, button, FALSE, FALSE, 0);
|
||||||
|
box_pack_start(alsa, alsa_devices, TRUE, TRUE, 0);
|
||||||
|
box_pack_start(general, alsa, FALSE, FALSE, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
void general_settings_init()
|
||||||
|
{
|
||||||
|
GtkWidget *general_settings = gtk_vbox_new(FALSE, 0);
|
||||||
|
|
||||||
|
add_alsa_settings(general_settings);
|
||||||
|
gtk_widget_show_all(general_settings);
|
||||||
|
add_settings_page("General", general_settings);
|
||||||
|
}
|
|
@ -15,6 +15,7 @@ void settings_init()
|
||||||
gtk_widget_show(settings_tabs);
|
gtk_widget_show(settings_tabs);
|
||||||
add_page(image, settings_tabs, false);
|
add_page(image, settings_tabs, false);
|
||||||
|
|
||||||
|
general_settings_init();
|
||||||
library_settings_init();
|
library_settings_init();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user