#include "gamix.h" GtkWidget *window; GtkWidget *main_vbox; GtkWidget *mixer_container; GtkWidget *exit_item; unsigned char *nomem_msg = N_("No enough memory.\n"); int main(int , char **); int disp_mixer( void ); void disp_toolbar(void); static void exit_gtk(GtkWidget *,gpointer); static void sel_mctype(GtkWidget *,gpointer); static void conf_callback(GtkWidget *,gpointer); static void exit_gtk(GtkWidget *w,gpointer data) { gtk_main_quit(); } int main( int argc , char **argv ) { int h,i; gchar *dirname,*filename,*cname=NULL; i=probe_mixer(); if( i < 0 ) { fprintf(stderr,_("Can not make mixer.\n")); return -1; } #ifdef ENABLE_NLS bindtextdomain (PACKAGE, LOCALEDIR); textdomain(PACKAGE); #endif gtk_set_locale(); gtk_init( &argc,&argv); h=0; while( (i=getopt(argc,argv,"c:h")) != -1 ) { switch(i) { case 'c': cname = g_strdup(optarg); break; case 'h': h=1; break; case ':': fprintf(stderr,"hoe?\n"); break; case '?': //fprintf(stderr,_("unknown option: %c\n"),optopt); h=1; break; } } if( h ) { printf("gamix "); if( strcmp(PACKAGE,"alsa-utils") == 0 ) { printf(" alsa utils version."); } else if( strcmp(PACKAGE,"gamix") == 0 ) { printf("%s original version.",VERSION); } putchar('\n'); printf(_("Usage: gamix [OPTION]\n")); printf(_(" -h print this help.\n")); printf(_(" -c [file] change config file.\n")); exit(0); } dirname = g_strconcat(g_get_home_dir(),"/.gamix",NULL); filename = g_strconcat(dirname, "/gtkrc", NULL); gtk_rc_init(); gtk_rc_parse(filename); g_free(filename); conf.scroll=TRUE; conf.wmode=1; conf.F_save=FALSE; conf.Esave=FALSE; if( cname ) { if( cname[0] == '/' ) { conf.fna = g_strdup(cname); } else { conf.fna = g_strconcat(dirname,"/",cname,NULL); } } else { conf.fna = g_strconcat(dirname,"/Config",NULL); } conf.sv_wsize=TRUE; conf.width=0; conf.height=0; g_free(dirname); conf_read(); window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_signal_connect(GTK_OBJECT(window),"destroy", GTK_SIGNAL_FUNC(gtk_main_quit),NULL); main_vbox=gtk_vbox_new(FALSE,0); gtk_container_add(GTK_CONTAINER(window),main_vbox); disp_toolbar(); tc_init(); gtk_timeout_add(100,(GtkFunction)time_callback,NULL); gtk_widget_show(main_vbox); gtk_widget_show(window); if( disp_mixer()<0 ) return 0; gtk_main(); if( conf.F_save || conf.Esave ) { conf_write(); } g_free(conf.fna); return 0; } void disp_toolbar(void) { GtkWidget *menu,*sub_menu,*sub_item; GtkWidget *frame; frame=gtk_frame_new(NULL); gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_OUT); gtk_box_pack_start(GTK_BOX(main_vbox),frame,FALSE,FALSE,0); gtk_widget_show(frame); menu=gtk_menu_bar_new(); gtk_container_add(GTK_CONTAINER(frame),menu); gtk_widget_show(menu); /* Prg menu */ sub_menu=gtk_menu_new(); sub_item=gtk_menu_item_new_with_label(_("config")); exit_item=sub_item; gtk_menu_append(GTK_MENU(sub_menu),sub_item); gtk_signal_connect(GTK_OBJECT(sub_item),"activate", GTK_SIGNAL_FUNC(conf_callback),NULL); gtk_widget_show(sub_item); sub_item=gtk_menu_item_new_with_label(_("exit")); exit_item=sub_item; gtk_menu_append(GTK_MENU(sub_menu),sub_item); gtk_signal_connect(GTK_OBJECT(sub_item),"activate", GTK_SIGNAL_FUNC(exit_gtk),NULL); gtk_widget_show(sub_item); sub_item=gtk_menu_item_new_with_label(_("Prog")); gtk_widget_show(sub_item); gtk_menu_item_set_submenu(GTK_MENU_ITEM(sub_item),sub_menu); gtk_menu_bar_append(GTK_MENU_BAR(menu),sub_item); /* mixer container type menu*/ if( mdev_num > 1 ) { sub_menu=gtk_menu_new(); sub_item=gtk_menu_item_new_with_label(_("Horizontal")); gtk_menu_append(GTK_MENU(sub_menu),sub_item); gtk_signal_connect(GTK_OBJECT(sub_item),"activate", GTK_SIGNAL_FUNC(sel_mctype),0); gtk_widget_show(sub_item); sub_item=gtk_menu_item_new_with_label(_("Vertical")); gtk_menu_append(GTK_MENU(sub_menu),sub_item); gtk_signal_connect(GTK_OBJECT(sub_item),"activate", GTK_SIGNAL_FUNC(sel_mctype),(gpointer)1); gtk_widget_show(sub_item); sub_item=gtk_menu_item_new_with_label(_("note book")); gtk_menu_append(GTK_MENU(sub_menu),sub_item); gtk_signal_connect(GTK_OBJECT(sub_item),"activate", GTK_SIGNAL_FUNC(sel_mctype),(gpointer)2); gtk_widget_show(sub_item); sub_item=gtk_menu_item_new_with_label(_("C-type")); gtk_widget_show(sub_item); gtk_menu_item_set_submenu(GTK_MENU_ITEM(sub_item),sub_menu); gtk_menu_bar_append(GTK_MENU_BAR(menu),sub_item); } } static void sel_mctype(GtkWidget *w,gpointer n) { int i; i=(int)n; if( i == conf.wmode ) return; conf.wmode=i; conf.width=0; conf.height=0; gtk_container_remove(GTK_CONTAINER(main_vbox),mixer_container); if( (i=disp_mixer()) < 0 ) gtk_signal_emit_by_name(GTK_OBJECT(exit_item), "activate"); } int disp_mixer( void ) { int i,j; GtkWidget *n_label; GtkWidget *frame; GtkRequisition rq; switch( conf.wmode ) { case 0: /* H */ if( conf.scroll ) { mixer_container=gtk_hbox_new(TRUE,0); } else { mixer_container=gtk_hbox_new(FALSE,0); } for( i=0 ; i 0 && rq.height > 0 ) gdk_window_resize(window->window,rq.width,rq.height); gtk_box_pack_start(GTK_BOX(main_vbox),mixer_container,TRUE,TRUE,0); /* gtk_widget_size_request(window,&rq); printf("WINDOW X %3d Y %3d\n",rq.width,rq.height); */ if( conf.width>0 && conf.height >0 && !conf.F_save ) { gtk_widget_size_request(window,&rq); gdk_window_resize(window->window,conf.width,conf.height); //conf.width=0; //conf.height=0; } return 0; } static void conf_callback(GtkWidget *w ,gpointer data) { gint err; GtkRequisition rq; err=conf_win(); if( err < 0 ) gtk_signal_emit_by_name(GTK_OBJECT(exit_item),"activate"); if( err ) { gtk_container_remove(GTK_CONTAINER(main_vbox),mixer_container); if( disp_mixer() < 0 ) gtk_signal_emit_by_name( GTK_OBJECT(exit_item),"activate"); gtk_widget_size_request(window,&rq); gdk_window_resize(window->window,rq.width,rq.height); } }