GtkWidget *voronoi_dialog_new (gpointer data) { GtkWidget *vbox, *vbox2, *vbox3, *guide_box, *hbox, *hbox1, *hbox2, *frame, *frame2, *button, *wdg, *check_box, *lblmax, *lblwidth, *button_uniform, *preview_box, *scale; GtkObject *adj; GSList *group = NULL, *group1 = NULL, *group2 = NULL, *group3 = NULL; voronoi_struct *vs; voronoi_dialog_struct *vds; hf_wrapper_struct *hfw; hfw = (hf_wrapper_struct *) * (hf_wrapper_struct **) data; vs = hfw->hf_options->img->voronoi; vds = hfw->hf_options->img->voronoi_dialog; frame = options_frame_new("Cracks network"); vbox = gtk_vbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(vbox)); hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox)); define_label_in_box("Average cell size", hbox, FALSE,TRUE, DEF_PAD); vds->adj_cell_size = gtk_adjustment_new ( vs->cell_size,0.0, 50.0, 0.1, 0.1, 0.0); define_scale_in_box(vds->adj_cell_size,hbox,1,DEF_PAD); gtk_signal_connect (GTK_OBJECT (vds->adj_cell_size), "value_changed", GTK_SIGNAL_FUNC (gdouble_adj_callb), (gpointer) &vs->cell_size); gtk_signal_connect (GTK_OBJECT (vds->adj_cell_size), "value_changed", GTK_SIGNAL_FUNC (gboolean_set_false), (gpointer) &hfw->if_calculated); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); gtk_box_pack_start(GTK_BOX(vbox), seed_dialog_new(data, vs->seed, change_voronoi_seed), TRUE, TRUE, 0); // ******** Distribution of cells // Box for radio buttons vbox2 = gtk_vbox_new(FALSE,0); gtk_widget_show(GTK_WIDGET(vbox2)); frame2 = define_frame_with_hiding_arrows ("Cell distribution", vbox2, hfw->hf_options->tools_window, FALSE); gtk_box_pack_start(GTK_BOX(vbox), frame2, TRUE, TRUE, 0); // We need a scale for the REGULAR option, for controlling the perturbation hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox)); define_label_in_box("Random variation", hbox, FALSE,TRUE, DEF_PAD); vds->adj_random_variation = gtk_adjustment_new ( vs->random_variation,0.0, 100.0, 1, 1, 0.0); wdg = define_scale_in_box(vds->adj_random_variation,hbox,0,DEF_PAD); gtk_signal_connect (GTK_OBJECT (vds->adj_random_variation), "value_changed", GTK_SIGNAL_FUNC (gint_adj_callb), (gpointer) &vs->random_variation); gtk_signal_connect (GTK_OBJECT (vds->adj_random_variation), "value_changed", GTK_SIGNAL_FUNC (gboolean_set_false), (gpointer) &hfw->if_calculated); // We need a row of buttons for controlling the scale (multiple or not) hbox1 = gtk_hbox_new(FALSE,DEF_PAD); define_label_in_box("Scale", hbox1, FALSE,TRUE, DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox1)); define_radio_button_in_box_with_data (hbox1, &group1, "1X", set_scale_1x, &vs->scale, (vs->scale==SCALE_1X)) ; define_radio_button_in_box_with_data (hbox1, &group1, "1X+2X", set_scale_1x_2x, &vs->scale, (vs->scale==SCALE_1X_2X)) ; define_radio_button_in_box_with_data (hbox1, &group1, "1X+2X+4X", set_scale_1x_2x_4x, &vs->scale, (vs->scale==SCALE_1X_2X_4X)) ; button = define_radio_button_in_box_with_data (vbox2, &group, "Uniform / random", set_uniform_distrib, &vs->distribution_type, (vs->distribution_type==UNIFORM)) ; gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) hide_if_true, (gpointer) hbox); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) show_if_true, (gpointer) hbox1); button = define_radio_button_in_box_with_data (vbox2, &group, "Centered / random", set_centered_distrib, &vs->distribution_type, (vs->distribution_type==CENTERED)) ; gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) hide_if_true, (gpointer) hbox); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) show_if_true, (gpointer) hbox1); button = define_radio_button_in_box_with_data (vbox2, &group, "Regular / perturbated", set_regular_distrib, &vs->distribution_type, (vs->distribution_type==REGULAR)) ; gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) show_if_true, (gpointer) hbox); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) hide_if_true, (gpointer) hbox1); // At the end, We add the random variation scale for REGULAR // and the radio buttons for the multiple scale control gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox2), hbox1, FALSE, FALSE, 0); if (vs->distribution_type!=REGULAR) gtk_widget_hide(GTK_WIDGET(hbox)); else gtk_widget_hide(GTK_WIDGET(hbox1)); /*****************************************************/ // Now specify how the current HF should be used vbox2 = gtk_vbox_new(FALSE,0); gtk_widget_show(GTK_WIDGET(vbox2)); frame2 = define_frame_with_hiding_arrows ("Use of current height field", vbox2, hfw->hf_options->tools_window, FALSE); gtk_box_pack_start(GTK_BOX(vbox), frame2, FALSE, FALSE, 0.5*DEF_PAD); // Vbox3: "USE AS GUIDE" dialog (for adding noise) guide_box = gtk_vbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(guide_box)); check_box = define_check_button_in_box ("Gener noise anyway?", guide_box, 0, 0, 0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (check_box),vs->gener_noise); gtk_signal_connect (GTK_OBJECT(check_box), "toggled", GTK_SIGNAL_FUNC(toggle_check_button_callb), (gpointer) &vs->gener_noise); // Preview box preview_box = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(preview_box)); vds->noise_preview = view_struct_new(NOISE_PREVIEW_SIZE,NOISE_PREVIEW_SIZE,(gpointer) compute_noise_preview,(gpointer) hfw->hf_options->img); gtk_box_pack_start(GTK_BOX(preview_box), vds->noise_preview->area, TRUE, TRUE, DEF_PAD *0.5); vbox3 = seed_dialog_new_lbl(hfw->hf_options->img, vs->noise_opt->seed, change_noise_seed, FALSE, VERTICAL_BOX ); adj = gtk_adjustment_new (0, -4, 4, 1, 1, 0.1); scale = gtk_hscale_new (GTK_ADJUSTMENT (adj)); gtk_widget_set_usize(scale,75,0); gtk_scale_set_digits (GTK_SCALE (scale), 0); gtk_box_pack_start (GTK_BOX (vbox3), scale, TRUE, TRUE, DEF_PAD*0.5); gtk_widget_show (scale); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC(gint_adj_callb), &vs->noise_opt->roughness); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC(draw_area_callb), vds->noise_preview); gtk_box_pack_start(GTK_BOX(preview_box), vbox3, TRUE, TRUE, DEF_PAD*0.5); gtk_box_pack_start(GTK_BOX(guide_box), preview_box, FALSE, FALSE, 0.5*DEF_PAD); gtk_signal_connect (GTK_OBJECT (check_box), "toggled", (GtkSignalFunc) show_if_true, (gpointer) preview_box); if (vs->gener_noise==FALSE) gtk_widget_hide(GTK_WIDGET(preview_box)); // Scale for the noise level hbox2 = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox2)); define_label_in_box("Noise level", hbox2, FALSE,TRUE, DEF_PAD); vds->adj_noise_level = gtk_adjustment_new ( vs->noise_level,0.0, 100.0, 1, 1, 0.0); wdg = define_scale_in_box(vds->adj_noise_level,hbox2,0,DEF_PAD); gtk_signal_connect (GTK_OBJECT (vds->adj_noise_level), "value_changed", GTK_SIGNAL_FUNC (gint_adj_callb), (gpointer) &vs->noise_level); gtk_signal_connect (GTK_OBJECT (vds->adj_noise_level), "value_changed", GTK_SIGNAL_FUNC (gboolean_set_false), (gpointer) &hfw->if_calculated); gtk_signal_connect (GTK_OBJECT (check_box), "toggled", (GtkSignalFunc) show_if_true, (gpointer) hbox2); // hbox for NOISE vs GUIDE radio buttons hbox = gtk_hbox_new(FALSE,0); gtk_widget_show(GTK_WIDGET(hbox)); button = define_radio_button_in_box_with_data (hbox, &group2, "As noise", set_use_as_noise, &vs->hf_use, (vs->hf_use==USE_AS_NOISE)) ; gtk_signal_connect (GTK_OBJECT (button), "toggled", (GtkSignalFunc) hide_if_true, (gpointer) check_box); // Always show the noise scale in that case gtk_signal_connect_object(GTK_OBJECT(button), "toggled", GTK_SIGNAL_FUNC(gtk_widget_show), (gpointer) wdg); button = define_radio_button_in_box_with_data (hbox, &group2, "As guide", set_use_as_guide, &vs->hf_use, (vs->hf_use==USE_AS_GUIDE)) ; gtk_signal_connect (GTK_OBJECT (button), "toggled", (GtkSignalFunc) show_if_true, (gpointer) guide_box); if (vs->hf_use==USE_AS_NOISE) gtk_widget_hide(GTK_WIDGET(guide_box)); gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox2), guide_box, FALSE, FALSE, 0); gtk_box_pack_start (GTK_BOX (vbox2), hbox2, FALSE, FALSE, 0); /*********************** Crack width **************************/ vbox2 = gtk_vbox_new(FALSE,0); gtk_widget_show(GTK_WIDGET(vbox2)); frame2 = define_frame_with_hiding_arrows ("Crack width", vbox2, hfw->hf_options->tools_window, FALSE); gtk_box_pack_start(GTK_BOX(vbox), frame2, FALSE, FALSE, 0.5*DEF_PAD); hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox)); button_uniform = define_radio_button_in_box_with_data (hbox, &group3, "Uniform", set_fixed_width, &vs->crack_width_type, vs->crack_width_type==FIXED_WIDTH) ; button = define_radio_button_in_box_with_data (hbox, &group3, "From distance",set_from_distance, &vs->crack_width_type, vs->crack_width_type==FROM_DISTANCE) ; gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); // Width: in pixels for "Uniform", relative for "Varies with distance" hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox)); define_label_in_box("Min", hbox, FALSE,TRUE, DEF_PAD); vds->adj_min_width = gtk_adjustment_new ( vs->min_width,0.0, 10.0, 1, 1, 0.0); wdg = define_scale_in_box(vds->adj_min_width,hbox,0,DEF_PAD); gtk_signal_connect (GTK_OBJECT (vds->adj_min_width), "value_changed", GTK_SIGNAL_FUNC (gint_adj_callb), (gpointer) &vs->min_width); gtk_signal_connect (GTK_OBJECT (vds->adj_min_width), "value_changed", GTK_SIGNAL_FUNC (gboolean_set_false), (gpointer) &hfw->if_calculated); gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (button_uniform), "toggled", (GtkSignalFunc) hide_if_true, (gpointer) hbox); if (vs->crack_width_type==FIXED_WIDTH) gtk_widget_hide(GTK_WIDGET(hbox)); hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox)); lblmax = define_label_in_box("Max", hbox, FALSE,TRUE, DEF_PAD); lblwidth = define_label_in_box("Width", hbox, FALSE,TRUE, DEF_PAD); vds->adj_max_width = gtk_adjustment_new ( vs->max_width,0.0, 10.0, 1, 1, 0.0); wdg = define_scale_in_box(vds->adj_max_width,hbox,0,DEF_PAD); gtk_signal_connect (GTK_OBJECT (vds->adj_max_width), "value_changed", GTK_SIGNAL_FUNC (gint_adj_callb), (gpointer) &vs->max_width); gtk_signal_connect (GTK_OBJECT (vds->adj_max_width), "value_changed", GTK_SIGNAL_FUNC (gboolean_set_false), (gpointer) &hfw->if_calculated); // Consistency controls (min should be <= max) gtk_signal_connect (GTK_OBJECT (vds->adj_min_width), "value_changed", GTK_SIGNAL_FUNC (check_max_width), (gpointer) hfw->hf_options->img); gtk_signal_connect (GTK_OBJECT (vds->adj_max_width), "value_changed", GTK_SIGNAL_FUNC (check_min_width), (gpointer) hfw->hf_options->img); gtk_box_pack_start (GTK_BOX (vbox2), hbox, FALSE, FALSE, 0); gtk_signal_connect (GTK_OBJECT (button_uniform), "toggled", (GtkSignalFunc) hide_if_true, (gpointer) lblmax); gtk_signal_connect (GTK_OBJECT (button_uniform), "toggled", (GtkSignalFunc) show_if_true, (gpointer) lblwidth); if (vs->crack_width_type==FIXED_WIDTH) gtk_widget_hide(GTK_WIDGET(lblmax)); button = gtk_button_new_with_label (_("Apply")); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) apply_voronoi_callb, data); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(vbox), align_widget(button,0.5,0.5), FALSE, FALSE, DEF_PAD); /************************ Edge level control ************************/ hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox)); define_label_in_box("Edge raising", hbox, FALSE,TRUE, DEF_PAD); vds->adj_edges_level = gtk_adjustment_new ( vs->edges_level,0.0, 100.0, 1, 1, 0.0); vds->wdg_edges_level = define_scale_in_box(vds->adj_edges_level,hbox,0,DEF_PAD); gtk_signal_connect (GTK_OBJECT (vds->adj_edges_level), "value_changed", GTK_SIGNAL_FUNC (gint_adj_callb), (gpointer) &vs->edges_level); gtk_signal_connect (GTK_OBJECT (vds->adj_edges_level), "value_changed", GTK_SIGNAL_FUNC (edges_level_callb), data); gtk_signal_connect (GTK_OBJECT (vds->adj_edges_level), "value_changed", GTK_SIGNAL_FUNC (gboolean_set_false), (gpointer) &hfw->if_calculated); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); // We activate when apply is clicked gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) set_sensitive_callb, (gpointer) vds->wdg_edges_level); gtk_widget_set_sensitive (GTK_WIDGET(vds->wdg_edges_level),FALSE); // Controls gtk_box_pack_start (GTK_BOX (vbox), reset_accept_buttons_new (data, &vds->accept), FALSE, FALSE, DEF_PAD); gtk_container_add(GTK_CONTAINER(frame), vbox); return frame; }
GtkWidget *merge_dialog_new (merge_dialog_struct *mrg, gboolean hide_control, GtkWidget *parent_window, gchar *frame_title, gchar *source_title, gchar *result_title, gchar *mix_title) { // Standard controls for merging the source HF with the result of a transformation GtkWidget *frame, *frame2, *vbox, *table, *hbox, *button, *scale, *but1, *but2, *but3, *but4, *but5, *but6; GtkObject *adj; // Titles default to predefined values when NULL if (!source_title) source_title = "Source"; if (!result_title) result_title = "Result"; if (!frame_title) frame_title = "Source & result merge"; if (!mix_title) mix_title = "Mix"; frame = frame_new (frame_title, DEF_PAD*0.5); vbox = gtk_vbox_new(FALSE,DEF_PAD*0.5); mrg->main_box = vbox; gtk_widget_show(vbox); if (hide_control) { frame = define_frame_with_hiding_arrows (frame_title, vbox, parent_window, TRUE); } else { frame = frame_new (frame_title, DEF_PAD*0.5); gtk_container_add(GTK_CONTAINER(frame),vbox); } hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(hbox); define_label_in_box("Mode", hbox, FALSE, FALSE, DEF_PAD *0.5); mrg->op_toolbar = gtk_toolbar_new (); gtk_toolbar_set_orientation(GTK_TOOLBAR(mrg->op_toolbar),GTK_ORIENTATION_HORIZONTAL); gtk_toolbar_set_style(GTK_TOOLBAR(mrg->op_toolbar),GTK_TOOLBAR_TEXT); gtk_widget_show(GTK_WIDGET(mrg->op_toolbar)); but1 = gtk_toolbar_append_element(GTK_TOOLBAR(mrg->op_toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON,NULL,"+", _("Add"),NULL,NULL,GTK_SIGNAL_FUNC(merge_add_callb),(gpointer) mrg->content); but2 = gtk_toolbar_append_element(GTK_TOOLBAR(mrg->op_toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON, but1,"-", _("Subtract"),NULL,NULL,GTK_SIGNAL_FUNC(merge_subtract_callb),(gpointer) mrg->content); but3 = gtk_toolbar_append_element(GTK_TOOLBAR(mrg->op_toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON,but1,"x", _("Multiply"),NULL,NULL,GTK_SIGNAL_FUNC(merge_multiply_callb),(gpointer) mrg->content); but4 = gtk_toolbar_append_element(GTK_TOOLBAR(mrg->op_toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON,but1,_("min"), _("Minimum"),NULL,NULL,GTK_SIGNAL_FUNC(merge_min_callb),(gpointer) mrg->content); but5 = gtk_toolbar_append_element(GTK_TOOLBAR(mrg->op_toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON,but1,_("max"), _("Maximum"),NULL,NULL,GTK_SIGNAL_FUNC(merge_max_callb),(gpointer) mrg->content); but6 = gtk_toolbar_append_element(GTK_TOOLBAR(mrg->op_toolbar), GTK_TOOLBAR_CHILD_RADIOBUTTON,but1,_("alt"), _("Altitude"),NULL,NULL,GTK_SIGNAL_FUNC(merge_altitude_callb),(gpointer) mrg->content); merge_set_op (mrg, mrg->content->merge_op); // XOR doesn't seem interesting enough... // gtk_toolbar_append_element(GTK_TOOLBAR(mrg->op_toolbar), // GTK_TOOLBAR_CHILD_RADIOBUTTON,but1,"^", // _("Exclusive OR (XOR)"),NULL,NULL,GTK_SIGNAL_FUNC(merge_xor_callb),(gpointer) mrg); gtk_box_pack_start(GTK_BOX(hbox),mrg->op_toolbar, TRUE, TRUE, DEF_PAD *0.5); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); define_label_in_box(mix_title,hbox,FALSE,FALSE,DEF_PAD); define_label_in_box(source_title, hbox, FALSE, FALSE, 0); adj = gtk_adjustment_new (mrg->content->mix, -100, 100, 1, 1, 0.01); scale = define_scale_in_box(adj,hbox,0, 0); optimize_on_mouse_click (scale, mrg->content->data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (mix_upd), (gpointer) mrg->content); mrg->adj_mix = adj; define_label_in_box(result_title, hbox,FALSE, FALSE, 0); button = gtk_button_new_with_label ("0"); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) zero_callb, adj); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, DEF_PAD); hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(vbox), hbox, TRUE, TRUE, 0); define_label_in_box("Hardness",hbox, FALSE, FALSE, DEF_PAD); adj = gtk_adjustment_new (mrg->content->hardness, 0.0, 1.0, 0.01, 0.01, 0.01); scale = define_scale_in_box(adj,hbox,2,DEF_PAD); optimize_on_mouse_click (scale, mrg->content->data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (hardness_upd), (gpointer) mrg->content); mrg->adj_hardness = adj; // Display the hardness scale only for altitude merge: gtk_widget_hide (GTK_WIDGET(scale)); gtk_signal_connect (GTK_OBJECT (but1), "clicked", (GtkSignalFunc) hide_callb, scale); gtk_signal_connect (GTK_OBJECT (but2), "clicked", (GtkSignalFunc) hide_callb, scale); gtk_signal_connect (GTK_OBJECT (but3), "clicked", (GtkSignalFunc) hide_callb, scale); gtk_signal_connect (GTK_OBJECT (but4), "clicked", (GtkSignalFunc) hide_callb, scale); gtk_signal_connect (GTK_OBJECT (but5), "clicked", (GtkSignalFunc) hide_callb, scale); gtk_signal_connect (GTK_OBJECT (but6), "clicked", (GtkSignalFunc) show_callb, scale); table = gtk_table_new(2, 3, FALSE); gtk_widget_show(GTK_WIDGET(table)); frame2 = define_frame_with_hiding_arrows ("Brightness",table, parent_window, FALSE); gtk_box_pack_start(GTK_BOX(vbox), frame2, TRUE, TRUE, 0); define_label_in_table(source_title,table,0, 1, 0, 1, DEF_PAD*0.5); adj = gtk_adjustment_new (mrg->content->source_offset, -100, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1, 2, 0, 1, 0, DEF_PAD*0.5); optimize_on_mouse_click (scale, mrg->content->data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (source_offset_upd), (gpointer) mrg->content); mrg->adj_source_offset = adj; button = define_button_in_table ("0", table, 2, 3, 0, 1, DEF_PAD*0.5); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) zero_callb, adj); define_label_in_table(result_title,table,0, 1, 1, 2, DEF_PAD*0.5); adj = gtk_adjustment_new (mrg->content->result_offset, -100, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1, 2, 1, 2, 0, DEF_PAD*0.5); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (result_offset_upd), (gpointer) mrg->content); optimize_on_mouse_click (scale, mrg->content->data); mrg->adj_result_offset = adj; button = define_button_in_table ("0", table, 2, 3, 1, 2, DEF_PAD*0.5); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) zero_callb, adj); table = gtk_table_new(2, 3, FALSE); gtk_widget_show(GTK_WIDGET(table)); frame2 = define_frame_with_hiding_arrows ("Translate",table, parent_window, FALSE); define_label_in_table("Horizontal",table,0, 1, 0, 1, DEF_PAD); adj = gtk_adjustment_new (mrg->content->x_translate, -100, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1, 2, 0, 1, 0, DEF_PAD); optimize_on_mouse_click (scale, mrg->content->data); mrg->adj_x_translate = adj; gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (merge_x_translate_upd), (gpointer) mrg->content); button = define_button_in_table ("0", table, 2, 3, 0, 1, DEF_PAD*0.5); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) zero_callb, adj); define_label_in_table("Vertical",table,0, 1, 1, 2, DEF_PAD); adj = gtk_adjustment_new (mrg->content->y_translate, -100, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1, 2, 1, 2, 0, DEF_PAD); optimize_on_mouse_click (scale, mrg->content->data); mrg->adj_y_translate = adj; gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (merge_y_translate_upd), (gpointer) mrg->content); button = define_button_in_table ("0", table, 2, 3, 1, 2, DEF_PAD*0.5); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) zero_callb, adj); gtk_box_pack_start(GTK_BOX(vbox), frame2, TRUE, TRUE, 0); return frame ; }
static GtkWidget * surfadd_frq_dialog_new (gpointer hfo_ptr) { // Fine frequency control dialog GtkWidget *table, *vbox, *hbox, *button, *scale; GtkObject *adj; hf_options_struct *hf_options = (hf_options_struct *) hfo_ptr; if (!hfo_ptr) return gtk_label_new(_("No frequency control")); gpointer data = hf_options->hfw_ptr_ptr; table = gtk_table_new(6, 4, FALSE); gtk_widget_show(table); define_label_in_table("4096",table, 0, 1, 0, 1, 0); define_label_in_table("2048",table, 0, 1, 1, 2, 0); define_label_in_table("1024",table, 0, 1, 2, 3, 0); define_label_in_table(" 512",table, 0, 1, 3, 4, 0); define_label_in_table(" 256",table, 0, 1, 4, 5, 0); define_label_in_table(" 128",table, 0, 1, 5, 6, 0); define_label_in_table(" 64",table, 2, 3, 0, 1, 0); define_label_in_table(" 32",table, 2, 3, 1, 2, 0); define_label_in_table(" 16",table, 2, 3, 2, 3, 0); define_label_in_table(" 8",table, 2, 3, 3, 4, 0); define_label_in_table(" 4",table, 2, 3, 4, 5, 0); define_label_in_table(" 2",table, 2, 3, 5, 6, 0); // 4096 adj= gtk_adjustment_new (hf_options->surfadd_options->frq_percent[11], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1,2,0,1,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj ), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[11]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[11] =adj; // 2048 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[10], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1,2,1,2,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[10]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[10] = adj; // 1024 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[9], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1,2,2,3,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[9]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[9] = adj; // 512 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[8], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1,2,3,4,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[8]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[8] =adj; // 256 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[7], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1,2,4,5,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[7]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[7] =adj; // 128 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[6], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,1,2,5,6,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[6]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[6] =adj; // 64 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[5], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,3,4,0,1,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[5]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[5] =adj; // 32 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[4], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,3,4,1,2,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[4]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[4] =adj; // 16 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[3], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,3,4,2,3,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[3]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[3] =adj; // 8 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[2], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,3,4,3,4,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[2]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[2] = adj; // 4 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[1], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,3,4,4,5,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[1]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[1] =adj; // 2 adj = gtk_adjustment_new (hf_options->surfadd_options->frq_percent[0], 0, 100, 1, 1, 0.01); scale = define_scale_in_table(adj,table,3,4,5,6,0,DEF_PAD*0); // gl_preview_optimize (scale, data); gtk_signal_connect (GTK_OBJECT (adj), "value_changed", GTK_SIGNAL_FUNC (percent_upd), &hf_options->surfadd_options->frq_percent[0]); g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data); hf_options->freq_control_adj[0] = adj; // Adding fast reset buttons vbox = gtk_vbox_new(FALSE,0); gtk_widget_show(vbox); button = gtk_button_new_with_label ("0"); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) set_freq_global, data); gtk_widget_show(button); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); button = gtk_button_new_with_label ("25"); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) set_freq_global, data); gtk_widget_show(button); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); button = gtk_button_new_with_label ("50"); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) set_freq_global, data); gtk_widget_show(button); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); button = gtk_button_new_with_label ("75"); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) set_freq_global, data); gtk_widget_show(button); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); button = gtk_button_new_with_label ("100"); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) set_freq_global, data); gtk_widget_show(button); gtk_box_pack_start (GTK_BOX (vbox), button, FALSE, FALSE, 0); hbox = gtk_hbox_new(FALSE,0); // The default is to hide this dialog at the beginning, because it takes room // gtk_widget_show(hbox); gtk_box_pack_start(GTK_BOX(hbox), align_widget(vbox,0.5,0.5), FALSE,FALSE, DEF_PAD*0.5); gtk_box_pack_start(GTK_BOX(hbox), table, FALSE,FALSE, 0); return define_frame_with_hiding_arrows("Wave length control", hbox, hf_options->tools_window, FALSE); }