It does not look very cool, but is quite acceptable. Do you agree?
struct radio_button { int nbutton; char name[32][128]; }; int ngroup = 6; struct radio_button my_radio_buttons[128] = { {2, {"CW", "CW-REV"} }, {7, {"10 wpm", "15 wpm", "20 wpm", "25 wpm", "30 wpm", "35 wpm", "40 wpm"} }, {3, {"TX OFF", "BK-IN" , "FBK-IN"} }, {3, {"IF FIL1", "IF FIL2" , "IF FIL3"} }, {4, {"PRE-AMP OFF", "PRE-AMP 1" , "PRE-AMP 2", "ATT ON"} }, {8, {" 3501.000kHz", " 7026.000kHz", "10118.000kHz", "14058.000kHz", "18085.000kHz", "21058.000kHz", "24908.000kHz", "28058.000kHz"} }, };
This is to define radio buttons.
GtkWidget *hbox_radio, *vbox_radio; hbox_radio = gtk_hbox_new(FALSE, 5); for(int j=0;j<ngroup;j++) { vbox_radio = gtk_vbox_new(FALSE, 5); for(int i=0;i<my_radio_buttons[j].nbutton;i++) { if(i == 0) { button = gtk_radio_button_new_with_label(NULL, my_radio_buttons[j].name[i]); } else { button = gtk_radio_button_new_with_label(gtk_radio_button_group (GTK_RADIO_BUTTON (button)), my_radio_buttons[j].name[i]); } gtk_signal_connect (GTK_OBJECT (button), "toggled", GTK_SIGNAL_FUNC (callback), (gpointer) my_radio_buttons[j].name[i]); gtk_box_pack_start (GTK_BOX (vbox_radio), button, FALSE, FALSE, 0); gtk_widget_show (button); } gtk_box_pack_start (GTK_BOX (hbox_radio), vbox_radio, FALSE, FALSE, 0); }
And this is for drawing the buttons. The names of the buttons must be unique, because they all connected to the same callback routine.