static void define_scope_windows(void) { GtkWidget *hbox, *vboxleft, *vboxright, *hboxright; /* create main window, set it's size */ ctrl_usr->main_win = gtk_window_new(GTK_WINDOW_TOPLEVEL); /* set the minimum size */ // gtk_widget_set_usize(GTK_WIDGET(ctrl_usr->main_win), 500, 350); /* allow the user to expand it */ gtk_window_set_policy(GTK_WINDOW(ctrl_usr->main_win), FALSE, TRUE, FALSE); /* set main window title */ gtk_window_set_title(GTK_WINDOW(ctrl_usr->main_win), "HAL Oscilloscope"); /* top level - one big hbox */ hbox = gtk_hbox_new(FALSE, 0); gtk_container_set_border_width(GTK_CONTAINER(hbox), 0); /* add the hbox to the main window */ gtk_container_add(GTK_CONTAINER(ctrl_usr->main_win), hbox); gtk_widget_show(hbox); /* end of top level */ /* second level of windows */ vboxleft = gtk_vbox_new_in_box(FALSE, 0, 0, hbox, TRUE, TRUE, 0); hboxright = gtk_hbox_new_in_box(TRUE, 0, 0, hbox, FALSE, FALSE, 0); /* third level of windows */ /* left side */ ctrl_usr->horiz_info_win = gtk_vbox_framed_new_in_box("Horizontal", FALSE, 0, 0, vboxleft, FALSE, FALSE, 1); /* horizontal row of select buttons */ ctrl_usr->waveform_win = gtk_vbox_new_in_box(FALSE, 0, 0, vboxleft, TRUE, TRUE, 0); ctrl_usr->chan_sel_win = gtk_hbox_new_in_box(TRUE, 0, 0, vboxleft, FALSE, FALSE, 0); ctrl_usr->chan_info_win = gtk_hbox_framed_new_in_box("Selected Channel", FALSE, 0, 0, vboxleft, FALSE, FALSE, 0); /* right side */ vboxleft = gtk_vbox_new_in_box(FALSE, 0, 0, hboxright, FALSE, FALSE, 0); vboxright = gtk_vbox_new_in_box(FALSE, 0, 0, hboxright, FALSE, FALSE, 0); ctrl_usr->run_mode_win = gtk_vbox_framed_new_in_box("Run Mode", TRUE, 0, 0, vboxleft, FALSE, FALSE, 0); ctrl_usr->trig_info_win = gtk_vbox_framed_new_in_box("Trigger", FALSE, 0, 0, vboxright, TRUE, TRUE, 0); ctrl_usr->trig_mode_win = gtk_vbox_new_in_box(TRUE, 0, 0, ctrl_usr->trig_info_win, FALSE, FALSE, 0); ctrl_usr->vert_info_win = gtk_vbox_framed_new_in_box("Vertical", FALSE, 0, 0, vboxleft, TRUE, TRUE, 0); /* all windows are now defined */ }
static void init_vert_info_window(void) { scope_vert_t *vert; GtkWidget *hbox, *vbox; GtkWidget *button; vert = &(ctrl_usr->vert); /* box for the two sliders */ hbox = gtk_hbox_new_in_box(TRUE, 0, 0, ctrl_usr->vert_info_win, TRUE, TRUE, 0); /* box for the scale slider */ vbox = gtk_vbox_new_in_box(FALSE, 0, 0, hbox, TRUE, TRUE, 0); gtk_label_new_in_box(_("Gain"), vbox, FALSE, FALSE, 0); vert->scale_adj = gtk_adjustment_new(0, -5, 5, 1, 1, 0); vert->scale_slider = gtk_vscale_new(GTK_ADJUSTMENT(vert->scale_adj)); gtk_scale_set_digits(GTK_SCALE(vert->scale_slider), 0); gtk_scale_set_draw_value(GTK_SCALE(vert->scale_slider), FALSE); gtk_box_pack_start(GTK_BOX(vbox), vert->scale_slider, TRUE, TRUE, 0); /* connect the slider to a function that re-calcs vertical scale */ gtk_signal_connect(GTK_OBJECT(vert->scale_adj), "value_changed", GTK_SIGNAL_FUNC(scale_changed), NULL); gtk_widget_show(vert->scale_slider); /* box for the position slider */ vbox = gtk_vbox_new_in_box(FALSE, 0, 0, hbox, TRUE, TRUE, 0); gtk_label_new_in_box(_("Pos"), vbox, FALSE, FALSE, 0); vert->pos_adj = gtk_adjustment_new(VERT_POS_RESOLUTION / 2, 0, VERT_POS_RESOLUTION, 1, 1, 0); vert->pos_slider = gtk_vscale_new(GTK_ADJUSTMENT(vert->pos_adj)); gtk_scale_set_digits(GTK_SCALE(vert->pos_slider), 0); gtk_scale_set_draw_value(GTK_SCALE(vert->pos_slider), FALSE); gtk_box_pack_start(GTK_BOX(vbox), vert->pos_slider, TRUE, TRUE, 0); /* connect the slider to a function that re-calcs vertical pos */ gtk_signal_connect(GTK_OBJECT(vert->pos_adj), "value_changed", GTK_SIGNAL_FUNC(pos_changed), NULL); gtk_widget_show(vert->pos_slider); /* Scale display */ gtk_hseparator_new_in_box(ctrl_usr->vert_info_win, 3); gtk_label_new_in_box(_("Scale"), ctrl_usr->vert_info_win, FALSE, FALSE, 0); vert->scale_label = gtk_label_new_in_box(" ---- ", ctrl_usr->vert_info_win, FALSE, FALSE, 0); /* Offset control */ vert->offset_button = gtk_button_new_with_label("Offset\n----"); vert->offset_label = (GTK_BIN(vert->offset_button))->child; gtk_box_pack_start(GTK_BOX(ctrl_usr->vert_info_win), vert->offset_button, FALSE, FALSE, 0); gtk_signal_connect(GTK_OBJECT(vert->offset_button), "clicked", GTK_SIGNAL_FUNC(offset_button), NULL); gtk_widget_show(vert->offset_button); /* a button to turn off the channel */ button = gtk_button_new_with_label(_("Chan Off")); gtk_box_pack_start(GTK_BOX(ctrl_usr->vert_info_win), button, FALSE, FALSE, 0); /* turn off the channel if button is clicked */ gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(channel_off_button), NULL); gtk_widget_show(button); }