GtkWidget *slide_dialog_new(gpointer data) {
	GtkWidget *vbox, *hbox, *frame, *table, *scale;
	GtkObject *adj;
	hf_wrapper_struct *hfw;
	hfw = (hf_wrapper_struct *) * (hf_wrapper_struct **) data;

	frame = options_frame_new("Translate");

	vbox = gtk_vbox_new(FALSE,DEF_PAD);
	gtk_widget_show(GTK_WIDGET(vbox));

	table = gtk_table_new(4, 2, FALSE);
	gtk_widget_show(GTK_WIDGET(table));

	define_label_in_table("Horizontal",table,0, 1, 0, 1, DEF_PAD);
	adj = gtk_adjustment_new (hfw->hf_options->img->slideh, -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, data);
	hfw->hf_options->img->adj_slideh = adj;
	gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
		GTK_SIGNAL_FUNC (slideh_upd), data);

	hbox = gtk_hbox_new(FALSE,DEF_PAD);
	gtk_widget_show(GTK_WIDGET(hbox));
	percent_buttons_negative_new (hbox, (gpointer) adj);	
	gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 1, 2, 0, 0, 0, 0);
	
	define_label_in_table("Vertical",table,0, 1, 2, 3, DEF_PAD);
	adj = gtk_adjustment_new (hfw->hf_options->img->slidev, -100, 100, 1, 1, 0.01);
	scale = define_scale_in_table(adj,table,1, 2, 2, 3, 0, DEF_PAD);
	optimize_on_mouse_click (scale, data);
	hfw->hf_options->img->adj_slidev = adj;
	gtk_signal_connect (GTK_OBJECT (adj), "value_changed",
		GTK_SIGNAL_FUNC (slidev_upd), data);

	hbox = gtk_hbox_new(FALSE,DEF_PAD);
	gtk_widget_show(GTK_WIDGET(hbox));
	percent_buttons_negative_new (hbox, (gpointer) adj);	
	gtk_table_attach (GTK_TABLE (table), hbox, 1, 2, 3, 4, 0, 0, 0, 0);
	
  	gtk_box_pack_start (GTK_BOX (vbox), table, FALSE, FALSE, 0);

	gtk_box_pack_start (GTK_BOX (vbox), reset_accept_buttons_new (data, &hfw->hf_options->img->slide_accept), FALSE, FALSE, DEF_PAD);
	
	gtk_container_add(GTK_CONTAINER(frame), vbox);

	return frame;
}
Example #2
0
gl_preview_struct *create_gl_preview_dialog (gl_defaults_struct *gl_def, GtkWidget *window, gpointer input_grid, gint max_x, gint max_y, gint data_type, gboolean *use_water_ptr, gfloat *water_level_ptr) {

	GtkWidget *vbox, *vbox2, *hbox, *table, *wdg;
	gint i;
	gchar buf[2]=" ";
	gl_preview_struct *gl_preview;
	camera_struct *camera;
	GSList *group = NULL;

// printf("CREATE_PREVIEW_DIALOG\n");

	gl_preview = gl_preview_new (gl_def);
	gl_preview->grid = input_grid;
	gl_preview->max_x = max_x;
	gl_preview->max_y = max_y;
	gl_preview->data_type = data_type;
	gl_preview->use_water = use_water_ptr;
	gl_preview->water_level = water_level_ptr;

	if (!gl_preview)
		return NULL;
		
	gl_preview->gl_area = create_glarea(gl_preview, gl_def->view_size);

	if (!gl_preview->gl_area) {
		gl_preview_free(gl_preview);
		return NULL;
	}
		
	gl_preview->gl_dialog = frame_new("Preview",DEF_PAD);

	gl_preview->main_box = gtk_vbox_new(FALSE,0);
	gtk_widget_show(gl_preview->main_box);
	gtk_container_add(GTK_CONTAINER(gl_preview->gl_dialog), gl_preview->main_box);

	// Pack gl area + water plane in the main box
	
	// Create Hbox to put gl_area + water control Vbox
	hbox =  gtk_hbox_new(FALSE,0);
	gtk_widget_show(GTK_WIDGET(hbox));
	
	gtk_box_pack_start (GTK_BOX (hbox), gl_preview->gl_area,
		FALSE, FALSE, DEF_PAD*0.5);

	gtk_box_pack_start (GTK_BOX (hbox), 
		gl_create_water_plane (gl_preview), FALSE, FALSE, DEF_PAD);

	gtk_box_pack_start (GTK_BOX (gl_preview->main_box), 
		hbox, FALSE, FALSE, DEF_PAD);
	
	// Hbox for controls	
	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(hbox);

	gl_preview->direct_upd = 
		define_check_button_in_box ("Auto update",hbox, FALSE,FALSE,0);
	gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (gl_preview->direct_upd), 
		gl_def->direct_upd);

	gl_preview->refresh_button = gtk_button_new_with_label (_("Refresh"));
	gtk_signal_connect (GTK_OBJECT (gl_preview->refresh_button), "clicked",
	       (GtkSignalFunc) refresh_gl_callb, gl_preview);
	gtk_widget_show(gl_preview->refresh_button);	

  	gtk_box_pack_start (GTK_BOX (hbox), 
			gl_preview->refresh_button, FALSE, FALSE, 0);

  	gtk_box_pack_start (GTK_BOX (gl_preview->main_box), align_widget(hbox,0.5,0.5),
		FALSE, FALSE, 0);

	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(hbox);

	define_label_in_box("Size", hbox, FALSE,TRUE, 0);
	wdg = gtk_button_new_with_label(" + ");
	gtk_widget_show(GTK_WIDGET(wdg));
	gtk_signal_connect (GTK_OBJECT (wdg), "clicked",
		GTK_SIGNAL_FUNC (size_up_callb), (gpointer) gl_preview);
  	gtk_box_pack_start (GTK_BOX (hbox), wdg, FALSE, FALSE, DEF_PAD*0.5);

	wdg = gtk_button_new_with_label(" - ");
	gtk_widget_show(GTK_WIDGET(wdg));
	gtk_signal_connect (GTK_OBJECT (wdg), "clicked",
		GTK_SIGNAL_FUNC (size_down_callb), (gpointer) gl_preview);
  	gtk_box_pack_start (GTK_BOX (hbox), wdg, FALSE, FALSE, 0);

	define_label_in_box("  ", hbox, FALSE,TRUE, 0);
	define_label_in_box("Detail", hbox, FALSE,TRUE, 0);

	wdg = gtk_button_new_with_label(" + ");
	gtk_widget_show(GTK_WIDGET(wdg));
	gtk_signal_connect (GTK_OBJECT (wdg), "clicked",
		GTK_SIGNAL_FUNC (details_up_callb), gl_preview);
  	gtk_box_pack_start (GTK_BOX (hbox), wdg, FALSE, FALSE, DEF_PAD*0.5);

	wdg = gtk_button_new_with_label(" - ");
	gtk_widget_show(GTK_WIDGET(wdg));
	gtk_signal_connect (GTK_OBJECT (wdg), "clicked",
		GTK_SIGNAL_FUNC (details_down_callb), gl_preview);
  	gtk_box_pack_start (GTK_BOX (hbox), wdg, FALSE, FALSE, 0);

//	Display details as % of HF size
	
	gl_preview->details_percent_lbl = define_label_in_box (" ", hbox, FALSE,TRUE,DEF_PAD*0.5);

	gl_update_details_display (gl_preview);
		
  	gtk_box_pack_start (GTK_BOX (gl_preview->main_box), align_widget(hbox,0.5,0.5),
		FALSE, FALSE, 0);

	// Camera choice (radio buttons)

	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(hbox);

	define_label_in_box ("Camera", hbox, 0, 0, DEF_PAD);
	for (i=0; i<NBCAMERAS; i++) {
		snprintf (buf, 2, "%1d", i+1);
		define_radio_button_in_box_with_data (hbox, &group, buf, set_camera_callb,
			(gpointer) gl_preview,(gl_preview->current_camera_id==i));
	}

	camera = gl_preview->cameras[gl_preview->current_camera_id];

	gtk_box_pack_start_defaults (GTK_BOX (gl_preview->main_box),hbox);

	table = gtk_table_new(5, 3, FALSE);
	gtk_widget_show(GTK_WIDGET(table));

	wdg = create_widget_from_xpm(window,rotate_y_xpm);
	gtk_table_attach (GTK_TABLE (table), wdg, 0, 1, 0, 1, 0, 0, 0, 0);
 	gl_preview->adj_rot_y =
		gtk_adjustment_new (camera->rot_y, 0.0, 360.0, 1.0, 1.0, 0.0);
	define_scale_in_table(gl_preview->adj_rot_y,table,1, 2, 0, 1, 0, 0);
	gtk_signal_connect (GTK_OBJECT (gl_preview->adj_rot_y ), "value_changed",
		GTK_SIGNAL_FUNC (rot_y_upd), (gpointer) gl_preview);

	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(hbox);

	rotate_buttons_new(hbox, (gpointer) gl_preview->adj_rot_y);
	gtk_table_attach (GTK_TABLE (table), hbox, 2, 3, 0, 1, 0, 0, 0, 0);

	wdg = create_widget_from_xpm(window,rotate_x_xpm);
	gtk_table_attach (GTK_TABLE (table), wdg, 0, 1, 1, 2, 0, 0, 0, 0);
 	gl_preview->adj_rot_x =
		gtk_adjustment_new (camera->rot_x, 0.0, 360.0, 1.0, 1.0, 0.0);
	define_scale_in_table(gl_preview->adj_rot_x,table,1, 2, 1, 2, 0, 0);
	gtk_signal_connect (GTK_OBJECT (gl_preview->adj_rot_x ), "value_changed",
		GTK_SIGNAL_FUNC (rot_x_upd), (gpointer) gl_preview);

	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(hbox);

	rotate_buttons_new(hbox, (gpointer) gl_preview->adj_rot_x);
	gtk_table_attach (GTK_TABLE (table), hbox, 2, 3, 1, 2, 0, 0, 0, 0);

	wdg = create_widget_from_xpm(window,depth_xpm);
	gtk_table_attach (GTK_TABLE (table), wdg, 0, 1, 2, 3, 0, 0, 0, 0);
 	gl_preview->adj_distance =
		gtk_adjustment_new (camera->distance, 0.0, 5.0, 0.01, 0.05, 0.001);
	define_scale_in_table(gl_preview->adj_distance,table,1, 3, 2, 3, 2, 0);
	gtk_signal_connect (GTK_OBJECT (gl_preview->adj_distance), "value_changed",
		GTK_SIGNAL_FUNC (distance_upd), (gpointer) gl_preview);

	wdg = create_widget_from_xpm(window,vertical_xpm);
	gtk_table_attach (GTK_TABLE (table), wdg, 0, 1, 3, 4, 0, 0, 0, 0);
 	gl_preview->adj_translate_y =
		gtk_adjustment_new (camera->translate_y, -1.0, 1.0, 0.01, 0.05, 0.001);
	define_scale_in_table(gl_preview->adj_translate_y,table,1, 3, 3, 4, 2, 0);
	gtk_signal_connect (GTK_OBJECT (gl_preview->adj_translate_y), "value_changed",
		GTK_SIGNAL_FUNC (translate_y_upd), (gpointer) gl_preview);

	wdg = create_widget_from_xpm(window,horizontal_xpm);
	gtk_table_attach (GTK_TABLE (table), wdg, 0, 1, 4, 5, 0, 0, 0, 0);
 	gl_preview->adj_translate_x =
		gtk_adjustment_new (camera->translate_x, -1.0, 1.0, 0.01, 0.05, 0.001);
	define_scale_in_table(gl_preview->adj_translate_x,table,1, 3, 4, 5, 2, 0);
	gtk_signal_connect (GTK_OBJECT (gl_preview->adj_translate_x), "value_changed",
		GTK_SIGNAL_FUNC (translate_x_upd), (gpointer) gl_preview);

	// vbox for table and related widgets (angle, reset)
	vbox = gtk_vbox_new(FALSE,0);
	gtk_widget_show(vbox);

	gtk_box_pack_start_defaults(GTK_BOX(vbox), table);

	//	Angle
	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(GTK_WIDGET(hbox));
	define_label_in_box ("Angle", hbox, 0, 0, DEF_PAD);
	gl_preview->adj_angle_w =
		gtk_adjustment_new (camera->angle_w, 5, 100, 1, 1, 0.1);
	gtk_signal_connect (GTK_OBJECT (gl_preview->adj_angle_w), "value_changed",
		GTK_SIGNAL_FUNC(angle_w_upd), (gpointer) gl_preview);
	define_scale_in_box (gl_preview->adj_angle_w, hbox, 0, DEF_PAD*0.5);
	gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox);

	// Reset all
	wdg = gtk_button_new_with_label (_("Reset"));
	gtk_signal_connect (GTK_OBJECT (wdg), "clicked",
	       (GtkSignalFunc) gl_reset_callb, (gpointer) gl_preview);
	gtk_widget_show(wdg);
  	gtk_box_pack_start (GTK_BOX (vbox), align_widget(wdg,0.5,0.5),
		FALSE, FALSE, DEF_PAD*0.5);

//	Small arrows for hiding / showing the dialog...
	vbox2 = gtk_vbox_new(FALSE,0);
	gtk_widget_show(vbox2);

	gtk_box_pack_start(GTK_BOX(vbox2),
		hideshow_dialog_new(window,
			GTK_ORIENTATION_HORIZONTAL, vbox, &gl_def->show_subdialog),
			FALSE, FALSE, 0);
	gtk_box_pack_start(GTK_BOX(vbox2), vbox, FALSE, FALSE, 0);

	gtk_box_pack_start (GTK_BOX (gl_preview->main_box), vbox2,
		FALSE, FALSE, 0);

//	gtk_widget_queue_draw(GTK_WIDGET(gl_preview->gl_area))
	gl_draw (GTK_WIDGET(gl_preview->gl_area));
	return gl_preview;
}
Example #3
0
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 ;
}
Example #4
0
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);
}
Example #5
0
GtkWidget * surfadd_dialog_new(gpointer hfo_ptr) {

	GtkObject *adj;
	GtkWidget *button, *table, *hbox, *vbox, *scale, *scrolled_window;
	GtkWidget *frame;
	static gboolean dummy_flag;

	gpointer data;
	hf_options_struct *hfo = (hf_options_struct *) hfo_ptr;

	if (!hfo)
		return gtk_label_new(_("No surface addition dialog"));

	data = hfo->hfw_ptr_ptr;

//	Main dialog box
	vbox = gtk_vbox_new(FALSE,0);
	gtk_widget_show(GTK_WIDGET(vbox));

//	2008-02 Now with scrolled window
	scrolled_window = gtk_scrolled_window_new (NULL, NULL);
        gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_window), GTK_POLICY_NEVER, GTK_POLICY_AUTOMATIC);
	gtk_widget_show (scrolled_window);
	gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW(scrolled_window), vbox);

	gtk_widget_set_size_request (scrolled_window, -1, gdk_screen_get_height(gdk_screen_get_default())/3);

//	Seed
	
	gtk_box_pack_start_defaults(GTK_BOX(vbox), 
		seed_dialog_new(data, hfo->surfadd_options->seed, 
		change_surfadd_seed));

	table = gtk_table_new(4, 2, FALSE);
	gtk_widget_show(table);

//	Slope / roughness (kind of)
//	From 0 to 100%
//	100: we keep the same H for each step, even if the surfaces to add are smaller
//	50:  we divide the H by 2 for each step (default), because  the surfaces are divided by two
//	100:  we divide the H by 3 for each step.

	define_label_in_table("Slope",table, 0, 1, 0, 1, 0); 

	adj = gtk_adjustment_new (hfo->surfadd_options->slope, 0, 100, 1, 1, 0.01);

	scale = define_scale_in_table(adj,table,1,2,0,1,0,DEF_PAD*0.5);
	g_signal_connect (G_OBJECT (adj), "value_changed",
		GTK_SIGNAL_FUNC (slope_upd), data);
	g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data);

//	Random x-y displacement scale
//	From 0 to 100 % (100 % = twice the size of the current surface to add)

	define_label_in_table("XZ Displacement ",table, 0, 1, 1, 2, 0); 

	adj = gtk_adjustment_new 
		(hfo->surfadd_options->xy_random_range, 0, 100, 1, 1, 0.01);
	scale = define_scale_in_table(adj,table,1,2,1,2,0,DEF_PAD*0.5);
	g_signal_connect (G_OBJECT (adj), "value_changed",
		GTK_SIGNAL_FUNC (xy_scale_upd), data);
	g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data);

//	Random height displacement scale
//	From 0 to 100 % (100 % = twice the height of the current surface to add)

	define_label_in_table("H Displacement ",table, 0, 1, 2, 3, 0); 
	adj = gtk_adjustment_new 
		(hfo->surfadd_options->h_random_range, 0, 100, 1, 1, 0.01);
	scale = define_scale_in_table(adj,table,1,2,2,3,0,DEF_PAD*0.5);
	g_signal_connect (G_OBJECT (adj), "value_changed",
		GTK_SIGNAL_FUNC (h_scale_upd), data);
	g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data);

//	Lateral density variation
//	From 0 to 100 % (100 % = twice the default density)

	define_label_in_table("Density",table, 0, 1, 3, 4, 0); 
	adj = gtk_adjustment_new 
		(hfo->surfadd_options->density, 0, 100, 1, 1, 0.01);
	scale = define_scale_in_table(adj,table,1,2,3,4,0,DEF_PAD*0.5);
	g_signal_connect (G_OBJECT (adj), "value_changed",
		GTK_SIGNAL_FUNC (density_upd), data);
	g_signal_connect (G_OBJECT (scale), "button_release_event", GTK_SIGNAL_FUNC (compute_hf_callb), data);

	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(hbox);

	gtk_box_pack_start_defaults(GTK_BOX(hbox), table);

	gtk_box_pack_start_defaults(GTK_BOX(vbox), hbox);

//	Filters for the primitive surface and preview
	frame = frame_new("Primitive surface", DEF_PAD*0.5);
	gtk_container_add(GTK_CONTAINER(vbox), frame);

//	HBOX will contain the shape filter dialog and the preview
	hbox = gtk_hbox_new(FALSE,0);
	gtk_widget_show(hbox);
	
	gtk_container_add(GTK_CONTAINER(frame), hbox);

//	We create the primitive surface, and the preview area at the same time
	hfo->primit_surf = hf_wrapper_new(NULL,NULL,hbox, hbox, 
		hf_options_dialog_new(hfo->tools_window,
			hbox, 
			hfo->tooltips, 
			NULL, 
			&hfo->primit_surf,
			hfo->stack,
			hfo->doc_type,
			hfo->all_docs,
			hfo->get_doc_list_from_type),
		&dummy_flag, &dummy_flag, NULL, NULL, NULL, NULL, HFPRIMITIVE);
//	Shared data:
	((hf_wrapper_struct *)hfo->primit_surf)->hf_options->dist_matrix =
			hfo->dist_matrix;

	((hf_wrapper_struct *)hfo->primit_surf)->hf_options->current_calculation = (gpointer) uniform;
	((hf_wrapper_struct *)hfo->primit_surf)->hf_options->current_callb = NULL;
	((hf_wrapper_struct *)hfo->primit_surf)->hf_options->current_options = (gpointer) hfo->uniform_value;

	set_filter_type (((hf_wrapper_struct *) hfo->primit_surf)->hf_options->creation_fd_struct, MEDIUM_FILTER_1);
	
	set_dependent_process ((hf_wrapper_struct *) hfo->primit_surf, gener_hf_from_ptr_ptr, hfo->hfw_ptr_ptr);

//	Set the merge operation to MULTIPLY:

	set_filter_merge(((hf_wrapper_struct *) hfo->primit_surf)->hf_options->creation_fd_struct, 1);

//	Frequency dialog
	gtk_box_pack_start(GTK_BOX(vbox),
		surfadd_frq_dialog_new(hfo_ptr), FALSE, FALSE,0);

	return define_options_frame_with_hiding_arrows("sum of surfaces", scrolled_window, hfo->tools_window, TRUE);
}