mirror of
https://github.com/alsa-project/alsa-utils
synced 2024-11-14 05:55:41 +01:00
b629d611a7
Fumihiko Murata <fmurata@p1.tcnet.ne.jp> This is patch of gamix. * support pan controll * support dynamic element * config file select (-c option) * mixer reorder
942 lines
29 KiB
C
942 lines
29 KiB
C
|
|
#include "gamix.h"
|
|
|
|
static gchar *label_3d[]={
|
|
"wide","volume","center","space","depth","delay","feedback","depth rear"};
|
|
static gchar *label_tone[]={"B","T"};
|
|
static gchar *pc1_ptc1[]={"L","F","B"};
|
|
static gchar *pc1_ptc2[]={"R","R","U"};
|
|
|
|
static void close_callback(GtkWidget *,s_mixer_t *);
|
|
static void volume1_callback(GtkAdjustment *,s_element_t *);
|
|
static void volume1_sw_callback(GtkToggleButton *,s_element_t *);
|
|
static void switch1_callback(GtkToggleButton *,s_element_t *);
|
|
static void switch2_callback(GtkToggleButton *,s_element_t *);
|
|
static void chain_callback(GtkToggleButton *,s_obj_t *);
|
|
static void accu3_callback(GtkAdjustment *,s_element_t *);
|
|
static void mux1_callback(GtkItem *,s_element_t *);
|
|
static void mux2_callback(GtkItem *,s_element_t *);
|
|
static void sw_3d_callback(GtkToggleButton *,s_element_t *);
|
|
static void vol_3d_callback(GtkAdjustment *,s_element_t *);
|
|
static void sw_tone_callback(GtkToggleButton *,s_element_t *);
|
|
static void vol_tone_callback(GtkAdjustment *,s_element_t *);
|
|
static void pc1_callback(GtkAdjustment *,s_element_t *);
|
|
static void pc1_ss_callback(GtkWidget *,s_element_t *);
|
|
static gint mk_element(s_element_t *,GtkBox *);
|
|
|
|
static void close_callback(GtkWidget *w,s_mixer_t *mixer) {
|
|
int i;
|
|
s_obj_t *obj;
|
|
|
|
/*
|
|
for( i=0 ; i<mixer->groups.groups ; i++ ) {
|
|
g=&mixer->group[i];
|
|
g->enabled=FALSE;
|
|
}
|
|
for( i=0 ; i<mixer->ee_n ; i++ ) {
|
|
ee=&mixer->ee[i];
|
|
ee->enabled=FALSE;
|
|
}
|
|
for( g=mixer->group; g != NULL ; g=g->next ) g->enabled=FALSE;
|
|
for( ee=mixer->ee; ee != NULL ; ee=ee->next ) ee->enabled=FALSE;
|
|
*/
|
|
for( obj=mixer->obj ; obj != NULL ; obj=obj->next ) obj->enabled=FALSE;
|
|
|
|
snd_mixer_close(mixer->handle);
|
|
mixer->handle=NULL;
|
|
}
|
|
|
|
static void volume1_sw_callback(GtkToggleButton *b,s_element_t *e) {
|
|
int i,j,value,err;
|
|
|
|
for( i=0 ; i<e->e.data.volume1.voices; i++ ) {
|
|
if( b == GTK_TOGGLE_BUTTON(e->w[i]) ) break;
|
|
}
|
|
value=b->active?1:0;
|
|
if( e->e.data.volume1.pvoices[i] == value ) return;
|
|
if( e->e.data.volume1.voices > 1 && *e->chain ) {
|
|
for( j=0 ; j<e->e.data.volume1.voices; j++ ) {
|
|
e->e.data.volume1.pvoices[j]=value;
|
|
if( j!= i ) {
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e->w[j]),b->active);
|
|
}
|
|
}
|
|
} else {
|
|
e->e.data.volume1.pvoices[i]=value;
|
|
}
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( err < 0 ) {
|
|
fprintf(stderr,_("mixer element write error: %s\n"),snd_strerror(err));
|
|
}
|
|
}
|
|
|
|
static void volume1_callback(GtkAdjustment *adj,s_element_t *e) {
|
|
int i,j,value,err;
|
|
|
|
for( i=0 ; i<e->e.data.volume1.voices; i++ ) {
|
|
if( adj == e->adj[i] ) break;
|
|
}
|
|
value=-(int)adj->value;
|
|
if( e->e.data.volume1.pvoices[i] == value ) return;
|
|
if( e->e.data.volume1.voices > 1 && *e->chain ) {
|
|
for( j=0 ; j<e->e.data.volume1.voices; j++ ) {
|
|
e->e.data.volume1.pvoices[j]=value;
|
|
if( j!= i ) {
|
|
e->adj[j]->value=adj->value;
|
|
gtk_signal_emit_by_name(GTK_OBJECT(e->adj[j]),"value_changed");
|
|
}
|
|
}
|
|
} else {
|
|
e->e.data.volume1.pvoices[i]=value;
|
|
}
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( err < 0 ) {
|
|
fprintf(stderr,_("mixer element write error: %s\n"),snd_strerror(err));
|
|
}
|
|
}
|
|
|
|
static void switch1_callback(GtkToggleButton *b,s_element_t *e ) {
|
|
int i,j;
|
|
|
|
for( i=0 ; i<e->e.data.switch1.sw; i++ ) {
|
|
if( b == (GtkToggleButton *)e->w[i] ) break;
|
|
}
|
|
if( (snd_mixer_get_bit(e->e.data.switch1.psw,i)?TRUE:FALSE) == b->active )
|
|
return;
|
|
if( e->e.data.switch1.sw > 1 && *e->chain ) {
|
|
for( j=0 ; j<e->e.data.switch1.sw; j++ ) {
|
|
snd_mixer_set_bit(e->e.data.switch1.psw,j,b->active);
|
|
if( j != i )
|
|
gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(e->w[j]),b->active);
|
|
}
|
|
} else {
|
|
snd_mixer_set_bit(e->e.data.switch1.psw,i,b->active);
|
|
}
|
|
snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
}
|
|
|
|
static void switch2_callback(GtkToggleButton *b,s_element_t *e ) {
|
|
int err;
|
|
|
|
e->e.data.switch2.sw=b->active;
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
}
|
|
|
|
static void chain_callback(GtkToggleButton *b,s_obj_t *obj ) {
|
|
obj->chain = b->active;
|
|
/*
|
|
printf("obj ");
|
|
if( obj->g ) printf("gid '%s',%d ",obj->g->g.gid.name,obj->g->g.gid.index);
|
|
if( obj->e ) printf("eid '%s',%d,%d ",obj->e->e.e.eid.name,
|
|
obj->e->e.e.eid.index,obj->e->e.e.eid.type);
|
|
printf(" %s\n",obj->chain?"TRUE":"FALSE");
|
|
*/
|
|
}
|
|
|
|
static void accu3_callback(GtkAdjustment *adj,s_element_t *e) {
|
|
int i,j,value,err;
|
|
|
|
for( i=0 ; i<e->e.data.accu3.voices; i++ ) {
|
|
if( adj == e->adj[i] ) break;
|
|
}
|
|
value=-(int)adj->value;
|
|
if( e->e.data.accu3.pvoices[i] == value ) return;
|
|
if( e->e.data.accu3.voices > 1 && *e->chain ) {
|
|
for( j=0 ; j<e->e.data.accu3.voices; j++ ) {
|
|
e->e.data.accu3.pvoices[j]=value;
|
|
if( j!= i ) {
|
|
e->adj[j]->value=adj->value;
|
|
gtk_signal_emit_by_name(GTK_OBJECT(e->adj[j]),"value_changed");
|
|
}
|
|
}
|
|
} else {
|
|
e->e.data.accu3.pvoices[i]=value;
|
|
}
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( err < 0 ) {
|
|
fprintf(stderr,_("mixer element write error: %s\n"),snd_strerror(err));
|
|
}
|
|
}
|
|
|
|
static void mux1_callback(GtkItem *item,s_element_t *e ) {
|
|
int i,ch,no,err;
|
|
|
|
ch=(int)gtk_object_get_data(GTK_OBJECT(item),"ch");
|
|
no=(int)gtk_object_get_data(GTK_OBJECT(item),"no");
|
|
|
|
if( strcmp(e->mux[no].name,e->e.data.mux1.poutput[ch].name) == 0 &&
|
|
e->mux[no].index == e->e.data.mux1.poutput[ch].index &&
|
|
e->mux[no].type == e->e.data.mux1.poutput[ch].type ) return;
|
|
|
|
if( *e->chain ) {
|
|
for( i=0 ; i<e->e.data.mux1.output ; i++ ) {
|
|
e->e.data.mux1.poutput[i]=e->mux[no];
|
|
if( ch != i ) gtk_option_menu_set_history(
|
|
GTK_OPTION_MENU(e->w[i]),no);
|
|
}
|
|
} else {
|
|
e->e.data.mux1.poutput[ch]=e->mux[no];
|
|
}
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( err< 0 ) {
|
|
fprintf(stderr,_("mixer mux1 element write error: %s\n"),snd_strerror(err));
|
|
}
|
|
}
|
|
|
|
static void mux2_callback(GtkItem *item,s_element_t *e ) {
|
|
int no,err;
|
|
|
|
no=(int)gtk_object_get_data(GTK_OBJECT(item),"no");
|
|
|
|
if( strcmp(e->mux[no].name,e->e.data.mux2.output.name) == 0 &&
|
|
e->mux[no].index == e->e.data.mux2.output.index &&
|
|
e->mux[no].type == e->e.data.mux2.output.type ) return;
|
|
|
|
e->e.data.mux2.output=e->mux[no];
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( err< 0 ) {
|
|
fprintf(stderr,_("mixer mux1 element write error: %s\n"),snd_strerror(err));
|
|
}
|
|
}
|
|
|
|
static void sw_3d_callback(GtkToggleButton *b,s_element_t *e ) {
|
|
int err;
|
|
|
|
if( b == (GtkToggleButton *)e->w[0] ) {
|
|
e->e.data.teffect1.sw = b->active;
|
|
} else {
|
|
e->e.data.teffect1.mono_sw = b->active;
|
|
}
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
}
|
|
|
|
static void vol_3d_callback(GtkAdjustment *adj,s_element_t *e) {
|
|
int i,err,*v,value;
|
|
|
|
for( i=0 ; i<7 ; i++ ) {
|
|
if( adj == e->adj[i] ) break;
|
|
}
|
|
v=NULL;
|
|
switch( i ) {
|
|
case 0:
|
|
v=&e->e.data.teffect1.wide;
|
|
break;
|
|
case 1:
|
|
v=&e->e.data.teffect1.volume;
|
|
break;
|
|
case 2:
|
|
v=&e->e.data.teffect1.center;
|
|
break;
|
|
case 3:
|
|
v=&e->e.data.teffect1.space;
|
|
break;
|
|
case 4:
|
|
v=&e->e.data.teffect1.depth;
|
|
break;
|
|
case 5:
|
|
v=&e->e.data.teffect1.delay;
|
|
break;
|
|
case 6:
|
|
v=&e->e.data.teffect1.feedback;
|
|
break;
|
|
case 7:
|
|
v=&e->e.data.teffect1.depth_rear;
|
|
break;
|
|
}
|
|
value=(int)adj->value;
|
|
if( v ) {
|
|
if( value == *v ) return;
|
|
*v=value;
|
|
} else return;
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( err<0 ) {
|
|
fprintf(stderr,_("3D effect write error: %s\n"),snd_strerror(err));
|
|
}
|
|
}
|
|
|
|
static void sw_tone_callback(GtkToggleButton *b,s_element_t *e ) {
|
|
int err;
|
|
|
|
e->e.data.tc1.sw = b->active;
|
|
e->e.data.tc1.tc=SND_MIXER_TC1_SW;
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
}
|
|
|
|
static void vol_tone_callback(GtkAdjustment *adj,s_element_t *e) {
|
|
int i,err,*v,value;
|
|
|
|
for( i=0 ; i<2 ; i++ ) {
|
|
if( adj == e->adj[i] ) break;
|
|
}
|
|
v=NULL;
|
|
switch( i ) {
|
|
case 0:
|
|
v=&e->e.data.tc1.bass;
|
|
e->e.data.tc1.tc=SND_MIXER_TC1_BASS;
|
|
break;
|
|
case 1:
|
|
v=&e->e.data.tc1.treble;
|
|
e->e.data.tc1.tc=SND_MIXER_TC1_TREBLE;
|
|
break;
|
|
}
|
|
value=-(int)adj->value;
|
|
if( v ) {
|
|
if( value == *v ) return;
|
|
*v=value;
|
|
} else return;
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( err<0 ) {
|
|
fprintf(stderr,_("Tone controll write error: %s\n"),snd_strerror(err));
|
|
}
|
|
}
|
|
|
|
static void pc1_callback(GtkAdjustment *adj,s_element_t *e) {
|
|
int i,err,value;
|
|
|
|
value=(int)adj->value;
|
|
for( i=0 ; i<e->e.data.pc1.pan; i++ ) {
|
|
if( adj == e->adj[i] ) break;
|
|
}
|
|
if( i==e->e.data.pc1.pan ) {
|
|
fprintf(stderr,"Pan err.\n");
|
|
return;
|
|
}
|
|
if( e->e.data.pc1.ppan[i]==value ) return;
|
|
|
|
e->e.data.pc1.ppan[i]=value;
|
|
err=snd_mixer_element_write(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( err<0 ) {
|
|
fprintf(stderr,_("PAN controll write error: %s\n"),snd_strerror(err));
|
|
}
|
|
}
|
|
|
|
static void pc1_ss_callback(GtkWidget *w,s_element_t *e) {
|
|
int i,j,k,err;
|
|
gfloat v=0;
|
|
|
|
j=1;
|
|
for( i=0 ; i<e->e.data.pc1.pan; i++ ) {
|
|
if( w == e->w[j] ) {
|
|
k=e->info.data.pc1.prange[i].min;
|
|
break;
|
|
}
|
|
j++;
|
|
if( w == e->w[j] ) {
|
|
k=(e->info.data.pc1.prange[i].min+e->info.data.pc1.prange[i].max)/2;
|
|
break;
|
|
}
|
|
j++;
|
|
if( w == e->w[j] ) {
|
|
k=e->info.data.pc1.prange[i].max;
|
|
break;
|
|
}
|
|
j+=2;
|
|
}
|
|
if( i<e->e.data.pc1.pan ) {
|
|
if( e->e.data.pc1.ppan[i] == k ) return;
|
|
e->adj[i]->value=(gfloat)k;
|
|
gtk_signal_emit_by_name(GTK_OBJECT(e->adj[i]),"value_changed");
|
|
}
|
|
}
|
|
|
|
GtkWidget *make_mixer( gint c_n , gint m_n ) {
|
|
int i,j,k,err;
|
|
GtkWidget *mv_box,*m_name;
|
|
GtkWidget *s_win;
|
|
GtkWidget *mh_box;
|
|
GtkWidget *frame;
|
|
GtkWidget *iv_box;
|
|
GtkWidget *ih_box;
|
|
GtkWidget *c_l;
|
|
char gname[40];
|
|
s_mixer_t *mixer;
|
|
s_group_t *group=NULL;
|
|
s_element_t *e;
|
|
s_eelements_t *ee;
|
|
s_obj_t *obj;
|
|
|
|
if( cards[c_n].mixer[m_n].handle ) {
|
|
snd_mixer_close(cards[c_n].mixer[m_n].handle);
|
|
}
|
|
if( (err=snd_mixer_open(&cards[c_n].mixer[m_n].handle,c_n,m_n)) < 0 ) {
|
|
return NULL;
|
|
}
|
|
|
|
mixer = &cards[c_n].mixer[m_n];
|
|
|
|
mv_box=gtk_vbox_new(FALSE,0);
|
|
gtk_widget_show(mv_box);
|
|
|
|
sprintf(gname,"%s:%s",cards[c_n].info.name,
|
|
cards[c_n].mixer[m_n].info.name);
|
|
m_name=gtk_label_new(gname);
|
|
gtk_box_pack_start(GTK_BOX(mv_box),m_name,FALSE,FALSE,0);
|
|
gtk_widget_show(m_name);
|
|
|
|
mh_box=gtk_hbox_new(FALSE,2);
|
|
if( conf.scroll ) {
|
|
s_win=gtk_scrolled_window_new(NULL,NULL);
|
|
gtk_box_pack_start(GTK_BOX(mv_box),s_win,TRUE,TRUE,0);
|
|
gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(s_win),
|
|
GTK_POLICY_AUTOMATIC,
|
|
GTK_POLICY_NEVER);
|
|
gtk_widget_show(s_win);
|
|
gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(s_win),
|
|
mh_box);
|
|
//gtk_container_add(GTK_CONTAINER(s_win),mh_box);
|
|
} else {
|
|
gtk_box_pack_start(GTK_BOX(mv_box),mh_box,TRUE,TRUE,4);
|
|
}
|
|
gtk_widget_show(mh_box);
|
|
|
|
for( obj=mixer->obj ; obj != NULL ; obj=obj->next ) {
|
|
if( obj->g ) {
|
|
group=obj->g;
|
|
k=0;
|
|
for( j=0 ; j<group->g.elements ; j++ ) {
|
|
if( group->e[j].e.eid.type ) k++;
|
|
}
|
|
if( k==0 && obj->dyn_e == 0) obj->enable=FALSE;
|
|
if( obj->enable && (obj->dyn_e == 0 || obj->dyn_e == 3) ) {
|
|
obj->v_frame=frame=gtk_frame_new(NULL);
|
|
gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_OUT);
|
|
gtk_box_pack_start(GTK_BOX(mh_box),frame,
|
|
mixer->p_e,mixer->p_f,0);
|
|
iv_box=gtk_vbox_new(FALSE,0);
|
|
gtk_container_add(GTK_CONTAINER(frame),iv_box);
|
|
obj->chain_en=FALSE;
|
|
for( j=0 ; j<group->g.elements ; j++ ) {
|
|
e=&group->e[j];
|
|
e->chain = &obj->chain;
|
|
e->chain_en = &obj->chain_en;
|
|
if( mk_element(e,GTK_BOX(iv_box))<0 ) return NULL;
|
|
}
|
|
if( group->g.gid.index > 0 ) {
|
|
sprintf(gname,"%s %d",group->g.gid.name,
|
|
group->g.gid.index);
|
|
} else {
|
|
sprintf(gname,"%s",group->g.gid.name);
|
|
}
|
|
ih_box=gtk_hbox_new(FALSE,2);
|
|
gtk_box_pack_start(GTK_BOX(iv_box),ih_box,FALSE,FALSE,0);
|
|
if( obj->chain_en ) {
|
|
obj->cwb=gtk_toggle_button_new();
|
|
gtk_box_pack_start(GTK_BOX(ih_box),obj->cwb,
|
|
FALSE,FALSE,4);
|
|
gtk_widget_set_usize(obj->cwb,10,10);
|
|
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(obj->cwb)
|
|
,obj->chain);
|
|
gtk_widget_show(obj->cwb);
|
|
gtk_signal_connect(GTK_OBJECT(obj->cwb),"toggled",
|
|
GTK_SIGNAL_FUNC(chain_callback),
|
|
(gpointer)obj);
|
|
c_l=gtk_label_new(_("Lock"));
|
|
gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0);
|
|
gtk_widget_show(c_l);
|
|
gtk_widget_show(ih_box);
|
|
if( strlen(gname) > 10 ) {
|
|
j=0;
|
|
while( gname[j]!=' ' && gname[j]!=0 ) j++;
|
|
if( gname[j]!=0 ) {
|
|
gname[j+3]=0;
|
|
}
|
|
if( group->g.gid.index > 0 )
|
|
sprintf(gname,"%s %d",gname,group->g.gid.index);
|
|
}
|
|
} else {
|
|
c_l=gtk_label_new(" ");
|
|
gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0);
|
|
gtk_widget_show(c_l);
|
|
if( strlen(gname) > 5 ) {
|
|
j=0;
|
|
while( gname[j]!=' ' && gname[j]!=0 ) j++;
|
|
if( gname[j]!=0 ) {
|
|
gname[j+3]=0;
|
|
}
|
|
if( group->g.gid.index > 0 )
|
|
sprintf(gname,"%s %d",gname,group->g.gid.index);
|
|
}
|
|
}
|
|
gtk_frame_set_label(GTK_FRAME(frame),gname);
|
|
gtk_widget_show(ih_box);
|
|
gtk_widget_show(iv_box);
|
|
gtk_widget_show(frame);
|
|
obj->enabled=TRUE;
|
|
} else {
|
|
obj->enabled=FALSE;
|
|
}
|
|
}
|
|
if( obj->e ) {
|
|
if( obj->enable && (obj->dyn_e == 0 || obj->dyn_e == 3)) {
|
|
ee=obj->e;
|
|
e=&ee->e;
|
|
obj->v_frame=frame=gtk_frame_new(NULL);
|
|
gtk_frame_set_shadow_type(GTK_FRAME(frame),GTK_SHADOW_OUT);
|
|
gtk_box_pack_start(GTK_BOX(mh_box),frame,
|
|
mixer->p_e,mixer->p_f,0);
|
|
iv_box=gtk_vbox_new(FALSE,0);
|
|
gtk_container_add(GTK_CONTAINER(frame),iv_box);
|
|
obj->chain_en=FALSE;
|
|
e->chain=&obj->chain;
|
|
e->chain_en=&obj->chain_en;
|
|
if( mk_element(e,GTK_BOX(iv_box))<0 ) return NULL;
|
|
ih_box=gtk_hbox_new(FALSE,2);
|
|
gtk_box_pack_start(GTK_BOX(iv_box),ih_box,FALSE,FALSE,0);
|
|
if( e->e.eid.index > 0 ) {
|
|
sprintf(gname,"%s%d",e->e.eid.name,e->e.eid.index);
|
|
} else {
|
|
sprintf(gname,"%s",e->e.eid.name);
|
|
}
|
|
if( obj->chain_en ) {
|
|
obj->cwb=gtk_toggle_button_new();
|
|
gtk_box_pack_start(GTK_BOX(ih_box),obj->cwb,FALSE,FALSE,4);
|
|
gtk_widget_set_usize(obj->cwb,10,10);
|
|
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(obj->cwb)
|
|
,obj->chain);
|
|
gtk_widget_show(obj->cwb);
|
|
gtk_signal_connect(GTK_OBJECT(obj->cwb),"toggled",
|
|
GTK_SIGNAL_FUNC(chain_callback),
|
|
(gpointer)obj);
|
|
c_l=gtk_label_new(_("Lock"));
|
|
gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0);
|
|
gtk_widget_show(c_l);
|
|
gtk_widget_show(ih_box);
|
|
if( strlen(gname) > 10 ) {
|
|
j=0;
|
|
while( gname[j]!=' ' && gname[j]!=0 ) j++;
|
|
if( gname[j]!=0 ) {
|
|
gname[j+3]=0;
|
|
}
|
|
}
|
|
} else {
|
|
c_l=gtk_label_new(" ");
|
|
gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0);
|
|
gtk_widget_show(c_l);
|
|
}
|
|
gtk_frame_set_label(GTK_FRAME(frame),gname);
|
|
gtk_widget_show(ih_box);
|
|
gtk_widget_show(iv_box);
|
|
gtk_widget_show(frame);
|
|
obj->enabled=TRUE;
|
|
} else {
|
|
obj->enabled=FALSE;
|
|
}
|
|
}
|
|
}
|
|
gtk_signal_connect(GTK_OBJECT(mv_box),"destroy",
|
|
GTK_SIGNAL_FUNC(close_callback),(gpointer)mixer);
|
|
mixer->enabled=TRUE;
|
|
return mv_box;
|
|
}
|
|
|
|
#define MIX_3D_VOL(NO,name,min_name,max_name,sname) \
|
|
if( e->info.data.teffect1.effect & sname ) { \
|
|
ih_box=gtk_hbox_new(FALSE,2); \
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,0); \
|
|
c_l=gtk_label_new(label_3d[NO]); \
|
|
gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0); \
|
|
gtk_widget_show(c_l); \
|
|
gtk_widget_show(ih_box); \
|
|
e->adj[NO]=(GtkAdjustment *)gtk_adjustment_new( \
|
|
(gfloat)e->e.data.teffect1.name, \
|
|
(gfloat)e->info.data.teffect1.min_name-0.5, \
|
|
(gfloat)e->info.data.teffect1.max_name+1.0, \
|
|
1.0,1.0,1.0); \
|
|
gtk_signal_connect(GTK_OBJECT(e->adj[NO]), \
|
|
"value_changed",GTK_SIGNAL_FUNC(vol_3d_callback),(gpointer)e);\
|
|
e->w[NO+2]=gtk_hscale_new(GTK_ADJUSTMENT(e->adj[NO])); \
|
|
gtk_scale_set_draw_value(GTK_SCALE(e->w[NO+2]),FALSE); \
|
|
gtk_box_pack_start(GTK_BOX(iv_box), e->w[NO+2],FALSE,FALSE,4); \
|
|
gtk_widget_show(e->w[NO+2]); \
|
|
} else { ;\
|
|
e->w[NO+2]=NULL; \
|
|
e->adj[NO]=NULL; \
|
|
}
|
|
#define MIX_TONE_VOL(NO,name,min_name,max_name,sname) \
|
|
if( e->info.data.tc1.tc & sname ) { \
|
|
tv_box = gtk_vbox_new(FALSE,2); \
|
|
gtk_box_pack_start(GTK_BOX(ih_box),tv_box,TRUE,TRUE,0); \
|
|
c_l=gtk_label_new(label_tone[NO]); \
|
|
gtk_box_pack_start(GTK_BOX(tv_box),c_l,FALSE,FALSE,0); \
|
|
gtk_widget_show(c_l); \
|
|
e->adj[NO]=(GtkAdjustment *)gtk_adjustment_new( \
|
|
-(gfloat)e->e.data.tc1.name, \
|
|
-(gfloat)e->info.data.tc1.max_name-0.5, \
|
|
-(gfloat)e->info.data.tc1.min_name+0.5, \
|
|
1.0,4.0,1.0); \
|
|
gtk_signal_connect(GTK_OBJECT(e->adj[NO]), \
|
|
"value_changed",GTK_SIGNAL_FUNC(vol_tone_callback),(gpointer)e);\
|
|
e->w[NO+1]=gtk_vscale_new(GTK_ADJUSTMENT(e->adj[NO])); \
|
|
gtk_scale_set_draw_value(GTK_SCALE(e->w[NO+1]),FALSE); \
|
|
gtk_box_pack_start(GTK_BOX(tv_box), e->w[NO+1],FALSE,FALSE,4); \
|
|
gtk_widget_show(e->w[NO+1]); \
|
|
gtk_widget_show(tv_box); \
|
|
} else { ;\
|
|
e->w[NO+1]=NULL; \
|
|
e->adj[NO]=NULL; \
|
|
}
|
|
|
|
gint mk_element(s_element_t *e,GtkBox *iv_box) {
|
|
int i,j,k;
|
|
GtkWidget *ih_box,*tv_box;
|
|
GtkWidget *menu,*c_l,*item;
|
|
|
|
ih_box=gtk_hbox_new(TRUE,0);
|
|
switch( e->e.eid.type) {
|
|
case SND_MIXER_ETYPE_VOLUME1:
|
|
if( (e->info.data.volume1.prange[0].max-
|
|
e->info.data.volume1.prange[0].min) == 1 ) {
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,0);
|
|
} else
|
|
gtk_box_pack_start(iv_box,ih_box,TRUE,TRUE,0);
|
|
if( e->e.data.volume1.voices > 1 ) {
|
|
*e->chain_en=TRUE;
|
|
*e->chain=TRUE;
|
|
}
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc( e->e.data.volume1.voices *
|
|
sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
if( e->adj == NULL ) {
|
|
e->adj=(GtkAdjustment **)g_malloc(e->e.data.volume1.voices*
|
|
sizeof(GtkAdjustment *));
|
|
}
|
|
if( e->adj==NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
for( i=0 ; i<e->e.data.volume1.voices ; i++ ) {
|
|
if( (e->info.data.volume1.prange[i].max-
|
|
e->info.data.volume1.prange[i].min) == 1 ) {
|
|
e->adj[i]=NULL;
|
|
e->w[i]=gtk_toggle_button_new_with_label("V");
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[i],
|
|
FALSE,FALSE,0);
|
|
gtk_toggle_button_set_state(
|
|
GTK_TOGGLE_BUTTON(e->w[i]),
|
|
e->e.data.volume1.pvoices[i]);
|
|
gtk_signal_connect(GTK_OBJECT(e->w[i]),"toggled",
|
|
GTK_SIGNAL_FUNC(volume1_sw_callback),
|
|
(gpointer)e);
|
|
gtk_widget_show(e->w[i]);
|
|
} else {
|
|
e->adj[i]=(GtkAdjustment *)gtk_adjustment_new(
|
|
-(gfloat)e->e.data.volume1.pvoices[i],
|
|
-(gfloat)e->info.data.volume1.prange[i].max-0.5,
|
|
-(gfloat)e->info.data.volume1.prange[i].min+0.5,
|
|
1.0,4.0,1.0);
|
|
gtk_signal_connect(GTK_OBJECT(e->adj[i]),"value_changed",
|
|
GTK_SIGNAL_FUNC(volume1_callback),
|
|
(gpointer)e);
|
|
e->w[i]=gtk_vscale_new(GTK_ADJUSTMENT(e->adj[i]));
|
|
gtk_scale_set_draw_value(GTK_SCALE(e->w[i]),FALSE);
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[i],FALSE,FALSE,4);
|
|
gtk_widget_show(e->w[i]);
|
|
}
|
|
}
|
|
break;
|
|
case SND_MIXER_ETYPE_SWITCH1:
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,4);
|
|
if( e->e.data.switch1.sw > 1 ) {
|
|
*e->chain_en=TRUE;
|
|
*e->chain=TRUE;
|
|
}
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc( e->e.data.switch1.sw *
|
|
sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
for( i=0 ; i<e->e.data.switch1.sw ; i++ ) {
|
|
e->w[i]=gtk_toggle_button_new();
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[i],FALSE,FALSE,0);
|
|
gtk_widget_set_usize(e->w[i],10,10);
|
|
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(e->w[i]),
|
|
snd_mixer_get_bit(e->e.data.switch1.psw,i)
|
|
);
|
|
gtk_signal_connect(GTK_OBJECT(e->w[i]),"toggled",
|
|
GTK_SIGNAL_FUNC(switch1_callback),(gpointer)e);
|
|
gtk_widget_show(e->w[i]);
|
|
}
|
|
break;
|
|
case SND_MIXER_ETYPE_SWITCH2:
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,4);
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc(sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
e->w[0]=gtk_toggle_button_new();
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[0],FALSE,FALSE,0);
|
|
gtk_widget_set_usize(e->w[0],10,10);
|
|
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(e->w[0]),
|
|
e->e.data.switch2.sw);
|
|
gtk_signal_connect(GTK_OBJECT(e->w[0]),"toggled",
|
|
GTK_SIGNAL_FUNC(switch2_callback),
|
|
(gpointer)e);
|
|
gtk_widget_show(e->w[0]);
|
|
break;
|
|
case SND_MIXER_ETYPE_ACCU3:
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,0);
|
|
if( e->e.data.accu3.voices > 1 ) {
|
|
*e->chain_en=TRUE;
|
|
*e->chain=TRUE;
|
|
}
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc(e->e.data.accu3.voices *
|
|
sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
if( e->adj == NULL ) {
|
|
e->adj=(GtkAdjustment **)g_malloc(e->e.data.accu3.voices*
|
|
sizeof(GtkAdjustment *));
|
|
}
|
|
if( e->adj==NULL ) {
|
|
printf(nomem_msg);
|
|
return -1;
|
|
}
|
|
for( i=0 ; i<e->e.data.accu3.voices ; i++ ) {
|
|
e->adj[i]=(GtkAdjustment *)gtk_adjustment_new(
|
|
-(gfloat)e->e.data.accu3.pvoices[i],
|
|
-(gfloat)e->info.data.accu3.prange[i].max-0.5,
|
|
-(gfloat)e->info.data.accu3.prange[i].min+0.5,
|
|
1.0,1.0,1.0);
|
|
gtk_signal_connect(GTK_OBJECT(e->adj[i]),"value_changed",
|
|
GTK_SIGNAL_FUNC(accu3_callback),(gpointer)e);
|
|
e->w[i]=gtk_vscale_new(GTK_ADJUSTMENT(e->adj[i]));
|
|
gtk_scale_set_draw_value(GTK_SCALE(e->w[i]),FALSE);
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[i],FALSE,FALSE,4);
|
|
gtk_widget_show(e->w[i]);
|
|
}
|
|
break;
|
|
case SND_MIXER_ETYPE_MUX1:
|
|
if( e->e.data.mux1.output > 1 ) {
|
|
*e->chain_en=TRUE;
|
|
*e->chain=TRUE;
|
|
}
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc(e->e.data.mux1.output *
|
|
sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
for( i=0 ; i<e->e.data.mux1.output ; i++ ) {
|
|
e->w[i]=gtk_option_menu_new();
|
|
menu=gtk_menu_new();
|
|
k=0;
|
|
for( j=0 ; j<e->mux_n; j++ ) {
|
|
if( strcmp(e->mux[j].name,e->e.data.mux1.poutput[i].name)==0 &&
|
|
e->mux[j].index == e->e.data.mux1.poutput[i].index &&
|
|
e->mux[j].type == e->e.data.mux1.poutput[i].type ) k=j;
|
|
item=gtk_menu_item_new_with_label(e->mux[j].name);
|
|
gtk_object_set_data(GTK_OBJECT(item),"ch",(gpointer)i);
|
|
gtk_object_set_data(GTK_OBJECT(item),"no",(gpointer)j);
|
|
gtk_signal_connect(GTK_OBJECT(item),"activate",
|
|
GTK_SIGNAL_FUNC(mux1_callback),(gpointer)e);
|
|
gtk_menu_append(GTK_MENU(menu),item);
|
|
gtk_widget_show(item);
|
|
}
|
|
gtk_option_menu_set_menu(GTK_OPTION_MENU(e->w[i]),menu);
|
|
gtk_box_pack_start(iv_box,e->w[i],FALSE,FALSE,4);
|
|
gtk_widget_show(e->w[i]);
|
|
gtk_option_menu_set_history(GTK_OPTION_MENU(e->w[i]),k);
|
|
}
|
|
break;
|
|
case SND_MIXER_ETYPE_MUX2:
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc(sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
e->w[0]=gtk_option_menu_new();
|
|
menu=gtk_menu_new();
|
|
k=0;
|
|
for( j=0 ; j<e->mux_n; j++ ) {
|
|
if( strcmp(e->mux[j].name,e->e.data.mux2.output.name)==0 &&
|
|
e->mux[j].index == e->e.data.mux2.output.index &&
|
|
e->mux[j].type == e->e.data.mux2.output.type ) k=j;
|
|
item=gtk_menu_item_new_with_label(e->mux[j].name);
|
|
gtk_object_set_data(GTK_OBJECT(item),"no",(gpointer)j);
|
|
gtk_signal_connect(GTK_OBJECT(item),"activate",
|
|
GTK_SIGNAL_FUNC(mux2_callback),(gpointer)e);
|
|
gtk_menu_append(GTK_MENU(menu),item);
|
|
gtk_widget_show(item);
|
|
}
|
|
gtk_option_menu_set_menu(GTK_OPTION_MENU(e->w[0]),menu);
|
|
gtk_box_pack_start(iv_box,e->w[0],FALSE,FALSE,4);
|
|
gtk_widget_show(e->w[0]);
|
|
gtk_option_menu_set_history(GTK_OPTION_MENU(e->w[0]),k);
|
|
break;
|
|
case SND_MIXER_ETYPE_3D_EFFECT1:
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc(10*sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
if( e->adj == NULL ) {
|
|
e->adj=(GtkAdjustment **)g_malloc(8*sizeof(GtkAdjustment *));
|
|
}
|
|
if( e->adj==NULL ) {
|
|
printf(nomem_msg);
|
|
return -1;
|
|
}
|
|
if( e->info.data.teffect1.effect & SND_MIXER_EFF1_SW ) {
|
|
ih_box=gtk_hbox_new(FALSE,2);
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,0);
|
|
e->w[0]=gtk_toggle_button_new();
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[0],FALSE,FALSE,4);
|
|
gtk_widget_set_usize(e->w[0],10,10);
|
|
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(e->w[0])
|
|
,e->e.data.teffect1.sw);
|
|
gtk_widget_show(e->w[0]);
|
|
gtk_signal_connect(GTK_OBJECT(e->w[0]),"toggled",
|
|
GTK_SIGNAL_FUNC(sw_3d_callback),(gpointer)e);
|
|
c_l=gtk_label_new(_("Enable"));
|
|
gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0);
|
|
gtk_widget_show(c_l);
|
|
gtk_widget_show(ih_box);
|
|
} else {
|
|
e->w[0]=NULL;
|
|
}
|
|
if( e->info.data.teffect1.effect & SND_MIXER_EFF1_MONO_SW ) {
|
|
ih_box=gtk_hbox_new(FALSE,2);
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,0);
|
|
e->w[1]=gtk_toggle_button_new();
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[1],FALSE,FALSE,4);
|
|
gtk_widget_set_usize(e->w[1],10,10);
|
|
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(e->w[1])
|
|
,e->e.data.teffect1.mono_sw);
|
|
gtk_widget_show(e->w[1]);
|
|
gtk_signal_connect(GTK_OBJECT(e->w[1]),"toggled",
|
|
GTK_SIGNAL_FUNC(sw_3d_callback),(gpointer)e);
|
|
c_l=gtk_label_new(_("MONO"));
|
|
gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0);
|
|
gtk_widget_show(c_l);
|
|
gtk_widget_show(ih_box);
|
|
} else {
|
|
e->w[1]=NULL;
|
|
}
|
|
MIX_3D_VOL(0,wide,min_wide,max_wide,SND_MIXER_EFF1_WIDE);
|
|
MIX_3D_VOL(1,volume,min_volume,max_volume,SND_MIXER_EFF1_VOLUME);
|
|
MIX_3D_VOL(2,center,min_center,max_center,SND_MIXER_EFF1_CENTER);
|
|
MIX_3D_VOL(3,space,min_space,max_space,SND_MIXER_EFF1_SPACE);
|
|
MIX_3D_VOL(4,depth,min_depth,max_depth,SND_MIXER_EFF1_DEPTH);
|
|
MIX_3D_VOL(5,delay,min_delay,max_delay,SND_MIXER_EFF1_DELAY);
|
|
MIX_3D_VOL(6,feedback,min_feedback,max_feedback,SND_MIXER_EFF1_FEEDBACK);
|
|
MIX_3D_VOL(7,depth_rear,min_depth_rear,max_depth_rear,SND_MIXER_EFF1_DEPTH_REAR);
|
|
break;
|
|
case SND_MIXER_ETYPE_TONE_CONTROL1:
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc(3*sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
if( e->adj == NULL ) {
|
|
e->adj=(GtkAdjustment **)g_malloc(2*sizeof(GtkAdjustment *));
|
|
}
|
|
if( e->adj==NULL ) {
|
|
printf(nomem_msg);
|
|
return -1;
|
|
}
|
|
e->e.data.tc1.tc=e->info.data.tc1.tc;
|
|
snd_mixer_element_read(cards[e->card].mixer[e->mdev].handle,&e->e);
|
|
if( e->info.data.tc1.tc &
|
|
(SND_MIXER_TC1_BASS | SND_MIXER_TC1_TREBLE ) ) {
|
|
gtk_box_pack_start(iv_box,ih_box,TRUE,TRUE,0);
|
|
MIX_TONE_VOL(0,bass,min_bass,max_bass,SND_MIXER_TC1_BASS);
|
|
MIX_TONE_VOL(1,treble,min_treble,max_treble,SND_MIXER_TC1_TREBLE);
|
|
}
|
|
if( e->info.data.tc1.tc & SND_MIXER_TC1_SW ) {
|
|
if( e->info.data.tc1.tc &
|
|
(SND_MIXER_TC1_BASS | SND_MIXER_TC1_TREBLE ) )
|
|
ih_box=gtk_hbox_new(FALSE,2);
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,0);
|
|
e->w[0]=gtk_toggle_button_new();
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[0],FALSE,FALSE,4);
|
|
gtk_widget_set_usize(e->w[0],10,10);
|
|
gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(e->w[0])
|
|
,e->e.data.tc1.sw);
|
|
gtk_widget_show(e->w[0]);
|
|
gtk_signal_connect(GTK_OBJECT(e->w[0]),"toggled",
|
|
GTK_SIGNAL_FUNC(sw_tone_callback),(gpointer)e);
|
|
c_l=gtk_label_new(_("Enable"));
|
|
gtk_box_pack_start(GTK_BOX(ih_box),c_l,FALSE,FALSE,0);
|
|
gtk_widget_show(c_l);
|
|
gtk_widget_show(ih_box);
|
|
} else {
|
|
e->w[0]=NULL;
|
|
}
|
|
break;
|
|
case SND_MIXER_ETYPE_PAN_CONTROL1:
|
|
if( e->w == NULL ) {
|
|
e->w = (GtkWidget **)g_malloc(e->e.data.pc1.pan*4*
|
|
sizeof(GtkWidget *));
|
|
}
|
|
if( e->w == NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
if( e->adj == NULL ) {
|
|
e->adj=(GtkAdjustment **)g_malloc(e->e.data.pc1.pan*
|
|
sizeof(GtkAdjustment *));
|
|
}
|
|
if( e->adj==NULL ) {
|
|
fprintf(stderr,nomem_msg);
|
|
return -1;
|
|
}
|
|
for( i=0 ; i<e->e.data.pc1.pan ; i++ ) {
|
|
j=i*4;
|
|
e->adj[i]=(GtkAdjustment *)gtk_adjustment_new(
|
|
(gfloat)e->e.data.pc1.ppan[i],
|
|
(gfloat)e->info.data.pc1.prange[i].min-0.5,
|
|
(gfloat)e->info.data.pc1.prange[i].max+1.5,
|
|
1.0,4.0,1.0);
|
|
gtk_signal_connect(GTK_OBJECT(e->adj[i]),"value_changed",
|
|
GTK_SIGNAL_FUNC(pc1_callback),(gpointer)e);
|
|
e->w[j]=gtk_hscale_new(GTK_ADJUSTMENT(e->adj[i]));
|
|
gtk_scale_set_draw_value(GTK_SCALE(e->w[j]),FALSE);
|
|
gtk_box_pack_start(iv_box,e->w[j],FALSE,FALSE,4);
|
|
gtk_widget_show(e->w[j]);
|
|
|
|
gtk_box_pack_start(iv_box,ih_box,FALSE,FALSE,4);
|
|
j++;
|
|
e->w[j]=gtk_button_new_with_label(pc1_ptc1[e->info.data.pc1.prange[i].pan_type]);
|
|
gtk_signal_connect(GTK_OBJECT(e->w[j]),"clicked",
|
|
GTK_SIGNAL_FUNC(pc1_ss_callback),(gpointer)e);
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[j],FALSE,FALSE,2);
|
|
gtk_widget_show(e->w[j++]);
|
|
e->w[j]=gtk_button_new_with_label("C");
|
|
gtk_signal_connect(GTK_OBJECT(e->w[j]),"clicked",
|
|
GTK_SIGNAL_FUNC(pc1_ss_callback),(gpointer)e);
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[j],FALSE,FALSE,2);
|
|
gtk_widget_show(e->w[j++]);
|
|
e->w[j]=gtk_button_new_with_label(pc1_ptc2[e->info.data.pc1.prange[i].pan_type]);
|
|
gtk_signal_connect(GTK_OBJECT(e->w[j]),"clicked",
|
|
GTK_SIGNAL_FUNC(pc1_ss_callback),(gpointer)e);
|
|
gtk_box_pack_start(GTK_BOX(ih_box),e->w[j],FALSE,FALSE,2);
|
|
gtk_widget_show(e->w[j]);
|
|
}
|
|
break;
|
|
}
|
|
gtk_widget_show(ih_box);
|
|
return 0;
|
|
}
|