Implementing tabbed controls
This commit is contained in:
parent
4b41aac022
commit
76e05c98af
16
src/main.c
16
src/main.c
|
@ -41,8 +41,9 @@
|
|||
/* usage */
|
||||
static int _usage(void)
|
||||
{
|
||||
fputs(_("Usage: mixer [-H|-V][-d device]\n"
|
||||
fputs(_("Usage: mixer [-H|-T|-V][-d device]\n"
|
||||
" -H Show the classes next to each other\n"
|
||||
" -V Show the classes in separate tabs\n"
|
||||
" -V Show the classes on top of each other\n"
|
||||
" -d The mixer device to use\n"), stderr);
|
||||
return 1;
|
||||
|
@ -54,20 +55,23 @@ int main(int argc, char * argv[])
|
|||
{
|
||||
int o;
|
||||
char const * device = NULL;
|
||||
MixerOrientation mo = MO_HORIZONTAL;
|
||||
MixerLayout ml = ML_TABBED;
|
||||
Mixer * mixer;
|
||||
|
||||
setlocale(LC_ALL, "");
|
||||
bindtextdomain(PACKAGE, LOCALEDIR);
|
||||
textdomain(PACKAGE);
|
||||
while((o = getopt(argc, argv, "HVd:")) != -1)
|
||||
while((o = getopt(argc, argv, "HTVd:")) != -1)
|
||||
switch(o)
|
||||
{
|
||||
case 'H':
|
||||
mo = MO_HORIZONTAL;
|
||||
ml = ML_HORIZONTAL;
|
||||
break;
|
||||
case 'T':
|
||||
ml = ML_TABBED;
|
||||
break;
|
||||
case 'V':
|
||||
mo = MO_VERTICAL;
|
||||
ml = ML_VERTICAL;
|
||||
break;
|
||||
case 'd':
|
||||
device = optarg;
|
||||
|
@ -78,7 +82,7 @@ int main(int argc, char * argv[])
|
|||
if(optind != argc)
|
||||
return _usage();
|
||||
gtk_init(&argc, &argv);
|
||||
if((mixer = mixer_new(device, mo)) == NULL)
|
||||
if((mixer = mixer_new(device, ml)) == NULL)
|
||||
return 2;
|
||||
gtk_main();
|
||||
mixer_delete(mixer);
|
||||
|
|
58
src/mixer.c
58
src/mixer.c
|
@ -87,6 +87,7 @@ struct _Mixer
|
|||
{
|
||||
/* widgets */
|
||||
GtkWidget * window;
|
||||
GtkWidget * notebook;
|
||||
GtkWidget * properties;
|
||||
GtkWidget * about;
|
||||
|
||||
|
@ -202,16 +203,16 @@ static GtkWidget * _new_set(Mixer * mixer, int dev, struct audio_mixer_set * s);
|
|||
#endif
|
||||
static GtkWidget * _new_value(Mixer * mixer, int index);
|
||||
|
||||
Mixer * mixer_new(char const * device, MixerOrientation orientation)
|
||||
Mixer * mixer_new(char const * device, MixerLayout layout)
|
||||
{
|
||||
Mixer * mixer;
|
||||
GtkAccelGroup * accel;
|
||||
GtkSizeGroup * group;
|
||||
GtkWidget * scrolled;
|
||||
GtkWidget * scrolled = NULL;
|
||||
GtkWidget * vbox;
|
||||
GtkWidget * label;
|
||||
GtkWidget * widget;
|
||||
GtkWidget * hvbox;
|
||||
GtkWidget * hvbox = NULL;
|
||||
GtkWidget * hbox;
|
||||
GtkWidget * control;
|
||||
int i;
|
||||
|
@ -258,12 +259,6 @@ Mixer * mixer_new(char const * device, MixerOrientation orientation)
|
|||
gtk_window_set_title(GTK_WINDOW(mixer->window), PACKAGE);
|
||||
g_signal_connect_swapped(G_OBJECT(mixer->window), "delete-event",
|
||||
G_CALLBACK(on_closex), mixer);
|
||||
scrolled = gtk_scrolled_window_new(NULL, NULL);
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
|
||||
GTK_POLICY_AUTOMATIC, orientation == MO_VERTICAL
|
||||
? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER);
|
||||
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(scrolled),
|
||||
GTK_SHADOW_NONE);
|
||||
vbox = gtk_vbox_new(FALSE, 0);
|
||||
#ifndef EMBEDDED
|
||||
/* menubar */
|
||||
|
@ -273,11 +268,25 @@ Mixer * mixer_new(char const * device, MixerOrientation orientation)
|
|||
desktop_accel_create(_mixer_accel, mixer, accel);
|
||||
#endif
|
||||
/* classes */
|
||||
if(orientation == MO_VERTICAL)
|
||||
hvbox = gtk_vbox_new(TRUE, 4);
|
||||
mixer->notebook = NULL;
|
||||
if(layout == ML_TABBED)
|
||||
mixer->notebook = gtk_notebook_new();
|
||||
else
|
||||
hvbox = gtk_hbox_new(FALSE, 4);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(hvbox), 4);
|
||||
{
|
||||
scrolled = gtk_scrolled_window_new(NULL, NULL);
|
||||
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrolled),
|
||||
GTK_POLICY_AUTOMATIC, (layout == ML_VERTICAL)
|
||||
? GTK_POLICY_AUTOMATIC : GTK_POLICY_NEVER);
|
||||
gtk_scrolled_window_set_shadow_type(GTK_SCROLLED_WINDOW(
|
||||
scrolled), GTK_SHADOW_NONE);
|
||||
if(layout == ML_VERTICAL)
|
||||
hvbox = gtk_vbox_new(TRUE, 4);
|
||||
else
|
||||
hvbox = gtk_hbox_new(FALSE, 4);
|
||||
gtk_container_set_border_width(GTK_CONTAINER(hvbox), 4);
|
||||
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(
|
||||
scrolled), hvbox);
|
||||
}
|
||||
for(i = 0;; i++)
|
||||
{
|
||||
#ifdef AUDIO_MIXER_DEVINFO
|
||||
|
@ -304,8 +313,6 @@ Mixer * mixer_new(char const * device, MixerOrientation orientation)
|
|||
break;
|
||||
#endif
|
||||
}
|
||||
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(scrolled),
|
||||
hvbox);
|
||||
/* controls */
|
||||
for(i = 0;; i++)
|
||||
{
|
||||
|
@ -347,8 +354,16 @@ Mixer * mixer_new(char const * device, MixerOrientation orientation)
|
|||
{
|
||||
mixer->mc[u].hbox = gtk_hbox_new(FALSE, 4);
|
||||
hbox = mixer->mc[u].hbox;
|
||||
gtk_box_pack_start(GTK_BOX(hvbox), hbox, FALSE, TRUE,
|
||||
0);
|
||||
if(mixer->notebook != NULL)
|
||||
{
|
||||
/* FIXME nicer tab labels */
|
||||
gtk_notebook_append_page(GTK_NOTEBOOK(
|
||||
mixer->notebook), hbox,
|
||||
NULL);
|
||||
}
|
||||
else if(hvbox != NULL)
|
||||
gtk_box_pack_start(GTK_BOX(hvbox), hbox, FALSE,
|
||||
TRUE, 0);
|
||||
}
|
||||
gtk_size_group_add_widget(group, widget);
|
||||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||
|
@ -387,7 +402,11 @@ Mixer * mixer_new(char const * device, MixerOrientation orientation)
|
|||
gtk_box_pack_start(GTK_BOX(hbox), widget, FALSE, TRUE, 0);
|
||||
#endif
|
||||
}
|
||||
gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0);
|
||||
if(mixer->notebook != NULL)
|
||||
gtk_box_pack_start(GTK_BOX(vbox), mixer->notebook, TRUE, TRUE,
|
||||
0);
|
||||
else
|
||||
gtk_box_pack_start(GTK_BOX(vbox), scrolled, TRUE, TRUE, 0);
|
||||
gtk_container_add(GTK_CONTAINER(mixer->window), vbox);
|
||||
gtk_widget_show_all(vbox);
|
||||
#ifdef AUDIO_MIXER_DEVINFO
|
||||
|
@ -874,6 +893,9 @@ void mixer_show_class(Mixer * mixer, char const * name)
|
|||
#ifdef AUDIO_MIXER_DEVINFO
|
||||
size_t u;
|
||||
|
||||
if(mixer->notebook != NULL)
|
||||
/* FIXME really implement */
|
||||
name = NULL;
|
||||
for(u = 0; u < mixer->mc_cnt; u++)
|
||||
if(mixer->mc[u].hbox == NULL)
|
||||
continue;
|
||||
|
|
|
@ -23,13 +23,18 @@
|
|||
|
||||
/* Mixer */
|
||||
/* types */
|
||||
typedef enum _MixerOrientation { MO_HORIZONTAL, MO_VERTICAL } MixerOrientation;
|
||||
typedef enum _MixerLayout
|
||||
{
|
||||
ML_HORIZONTAL,
|
||||
ML_TABBED,
|
||||
ML_VERTICAL
|
||||
} MixerLayout;
|
||||
|
||||
typedef struct _Mixer Mixer;
|
||||
|
||||
|
||||
/* functions */
|
||||
Mixer * mixer_new(char const * device, MixerOrientation orientation);
|
||||
Mixer * mixer_new(char const * device, MixerLayout layout);
|
||||
void mixer_delete(Mixer * mixer);
|
||||
|
||||
/* accessors */
|
||||
|
|
Loading…
Reference in New Issue
Block a user