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; }
GtkWidget *rotate_dialog_new (gpointer data) { GtkWidget *vbox, *hbox, *frame, *button, *scale; hf_wrapper_struct *hfw; hfw = (hf_wrapper_struct *) * (hf_wrapper_struct **) data; frame = options_frame_new("Rotate"); 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("Angle", hbox, FALSE,TRUE, DEF_PAD); hfw->hf_options->img->adj_rotate = gtk_adjustment_new (0, 0.0, 360.0, 1.0, 1.0, 0.0); scale = define_scale_in_box(hfw->hf_options->img->adj_rotate,hbox,0,DEF_PAD); optimize_on_mouse_click (scale, data); gtk_signal_connect (GTK_OBJECT (hfw->hf_options->img->adj_rotate), "value_changed", GTK_SIGNAL_FUNC (rotate_angle_upd), data); gtk_box_pack_start (GTK_BOX (vbox), hbox, FALSE, FALSE, 0); hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox)); rotate_buttons_new(hbox, (gpointer) hfw->hf_options->img->adj_rotate); hfw->hf_options->img->auto_rotate = define_check_button_in_box ("Auto update",hbox, FALSE,FALSE,0); gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (hfw->hf_options->img->auto_rotate), TRUE); gtk_box_pack_start (GTK_BOX (vbox), align_widget(hbox,0.5,0.5), FALSE, FALSE, DEF_PAD); hbox = gtk_hbox_new(FALSE,DEF_PAD); gtk_widget_show(GTK_WIDGET(hbox)); button = gtk_button_new_with_label (_("Apply")); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) apply_rotate_callb, data); gtk_widget_set_sensitive(GTK_WIDGET(button), !gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(hfw->hf_options->img->auto_rotate))); gtk_widget_show(button); // The "auto-rotate" button unactivates the "apply" button gtk_signal_connect (GTK_OBJECT(hfw->hf_options->img->auto_rotate ), "toggled", GTK_SIGNAL_FUNC(unsensitive_if_true), button); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, DEF_PAD); button = gtk_button_new_with_label (_("Reset")); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) reset_callb, data); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, DEF_PAD); button = gtk_button_new_with_label (_("Accept")); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) rotate_remove_tiling_callb, data); gtk_signal_connect (GTK_OBJECT (button), "clicked", (GtkSignalFunc) accept_rotate_callb, data); gtk_widget_show(button); gtk_box_pack_start(GTK_BOX(hbox), button, FALSE, FALSE, DEF_PAD); hfw->hf_options->img->rotate_accept = button; gtk_box_pack_start (GTK_BOX (vbox), align_widget(hbox,0.5,0.5), FALSE, FALSE, DEF_PAD); gtk_container_add(GTK_CONTAINER(frame), vbox); return frame; }