Adapted for use on cluster (using MPI/OMP) parallelised gpiv_rr from gpivtools)
[gpiv.git] / src / display_interface.c
blob615740a62c31648d7c3c5295b6eb8867ad5a6455
1 /* -*- Mode: C; indent-tabs-mode: nil; c-basic-offset: 4 c-style: "K&R" -*- */
3 /*----------------------------------------------------------------------
5 gpiv - Graphic program for Particle Image Velocimetry, based on gtk/gnome
6 libraries.
8 Copyright (C) 2002, 2003, 2004 Gerber van der Graaf
10 This file is part of gpiv.
12 Gpiv is free software; you can redistribute it and/or modify
13 it under the terms of the GNU General Public License as published by
14 the Free Software Foundation; either version 2, or (at your option)
15 any later version.
17 This program is distributed in the hope that it will be useful,
18 but WITHOUT ANY WARRANTY; without even the implied warranty of
19 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
20 GNU General Public License for more details.
22 You should have received a copy of the GNU General Public License
23 along with this program; if not, write to the Free Software Foundation,
24 Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
26 ----------------------------------------------------------------------*/
29 * interface for create_display
30 * $Log: display_interface.c,v $
31 * Revision 1.19 2008-04-28 12:00:57 gerber
32 * hdf-formatted files are now with .hdf extension (previously: .gpi)
34 * Revision 1.18 2007-12-19 08:42:35 gerber
35 * debugged
37 * Revision 1.17 2007-11-23 16:24:07 gerber
38 * release 0.5.0: Kafka
40 * Revision 1.16 2007-06-06 17:00:48 gerber
41 * Retreives images/data from URI using Gnome Virtual File System.
43 * Revision 1.15 2007-03-22 16:00:32 gerber
44 * Added image processing tabulator
46 * Revision 1.14 2007-02-16 17:09:48 gerber
47 * added Gauss weighting on I.A. and SPOF filtering (on correlation function)
49 * Revision 1.13 2007/02/05 15:17:09 gerber
50 * auto stretching, broadcast display settings to buffers from preferences
52 * Revision 1.12 2007-01-29 11:27:43 gerber
53 * added image formats png, gif, tif png, bmp, improved buffer display
55 * Revision 1.11 2006-09-18 07:27:05 gerber
56 * *** empty log message ***
58 * Revision 1.10 2006/01/31 14:28:12 gerber
59 * version 0.3.0
61 * Revision 1.9 2005/06/15 15:03:54 gerber
62 * Optional Anti Aliased canvas for viewer
64 * Revision 1.8 2005/06/15 09:40:40 gerber
65 * debugged, optimized
67 * Revision 1.7 2005/01/19 15:53:41 gerber
68 * Initiation of Data Acquisition (DAC); trigerring of lasers and camera
69 * by using RTAI and Realtime Linux, recording images from IEEE1394
70 * (Firewire) IIDC compliant camera's
72 * Revision 1.6 2004/10/15 19:24:05 gerber
73 * GPIV_ and Gpiv prefix to defines and structure names of libgpiv
75 * Revision 1.5 2004/06/14 21:19:23 gerber
76 * Image depth up to 16 bits.
77 * Improvement "single int" and "drag int" in Eval tab.
78 * Viewer's pop-up menu.
79 * Adaption for gpiv_matrix_* and gpiv_vector_*.
80 * Resizing console.
81 * See Changelog for further info.
83 * Revision 1.4 2003/09/01 11:17:14 gerber
84 * improved monitoring of interrogation process
86 * Revision 1.3 2003/07/04 10:47:01 gerber
87 * cleaning up
89 * Revision 1.2 2003/06/27 13:47:26 gerber
90 * display ruler, line/point evaluation
92 * Revision 1.1.1.1 2003/06/17 17:10:52 gerber
93 * Imported gpiv
97 #include "gpiv_gui.h"
98 #include "utils.h"
99 #include "display_interface.h"
100 #include "display_menus.h"
101 #include "display.h"
103 #define EVENT_METHOD(i, x) GTK_WIDGET_GET_CLASS(i)->x
106 Display *
107 create_display (gchar *fname,
108 GpivImage *image,
109 guint display_id,
110 GpivConsole *gpiv
112 /*-----------------------------------------------------------------------------
114 * Layout:
116 * main_vbox
118 * +-- menubar
120 * +-- vbox
122 * +-- table
123 * | |
124 * | +-- origin
125 * | +-- hruler
126 * | +-- vruler
127 * | +-- canvas
129 * +-- statusbar
132 -----------------------------------------------------------------------------*/
135 Display *disp = g_new0 (Display, 1);
136 Image *img = g_new0 (Image, 1);
137 Intreg *intreg = g_new0 (Intreg, 1);
138 GpivPivPar *intreg_pivp = g_new0 (GpivPivPar, 1);
139 PivData *pd = g_new0 (PivData, 1);
140 GpivValidPar *pd_valp = g_new0 (GpivValidPar, 1);
141 GpivPostPar *pd_postp = g_new0 (GpivPostPar, 1);
143 static gint width = 0, height = 0;
144 static gchar title[GPIV_MAX_CHARS];
145 static GdkPixbuf *icon = NULL;
148 gint i = 0;
150 static const gchar * zoom_label[8] = {
151 "Zoom 0.25",
152 "Zoom 0.5",
153 "Zoom 0.83",
154 "Zoom 1.0",
155 "Zoom 1.3",
156 "Zoom 1.6",
157 "Zoom 2.0",
158 "Zoom 4.0"
161 static const gchar * vector_scale_label[9] = {
162 "1",
163 "2",
164 "4",
165 "8",
166 "16",
167 "32",
168 "64",
169 "128",
170 "256"
176 disp->zoom_group = NULL;
177 disp->background_group = NULL;
178 disp->scalar_group = NULL;
179 disp->vector_scale_group = NULL;
180 disp->vector_color_group = NULL;
182 g_snprintf (title,
183 GPIV_MAX_CHARS,
184 "gpiv display #%d",
185 display_id);
187 g_snprintf (disp->msg_display_default,
188 GPIV_MAX_CHARS,
189 "%s",
190 fname);
192 disp->id = display_id;
193 disp->zoom_index = gpiv_par->display__zoom_index;
194 disp->zoom_factor = zfactor[disp->zoom_index];
195 disp->zoom_factor_old = zfactor[disp->zoom_index];
196 /* g_message ("CREATE_DISPLAY:: zoom_factor = %f zoom_factor_old = %f", */
197 /* disp->zoom_factor, disp->zoom_factor_old); */
198 disp->vector_scale = gpiv_par->display__vector_scale;
199 disp->vector_color = gpiv_par->display__vector_color;
200 disp->display_backgrnd = gpiv_par->display__backgrnd;
201 /* disp->display_img1 = gpiv_par->display__img1; */
202 /* disp->display_img2 = gpiv_par->display__img2; */
203 disp->display_intregs = gpiv_par->display__intregs;
204 disp->display_piv = gpiv_par->display__piv;
205 disp->display_scalar = gpiv_par->display__scalar;
206 /* disp->display_vor = gpiv_par->display__vor; */
207 /* disp->display_sstrain = gpiv_par->display__sstrain; */
208 /* disp->display_nstrain = gpiv_par->display__nstrain; */
210 disp->file_uri_name = g_strdup_printf ("%s" , fname);
213 disp->img = img;
214 disp->img->exist_img = FALSE;
215 disp->img->saved_img = FALSE;
216 disp->img->rgb_img_width = 0;
217 disp->img->img_mean = 0.0;
220 * PIV data and related do not exist, yet. 'Saved' is set TRUE to avoid
221 * message of unsaved data while deleting display or console
222 * Values of these boolean variables are updated in the 'exec_' functions.
224 disp->pida = pd;
225 disp->pida->exist_piv = FALSE;
226 disp->pida->saved_piv = TRUE;
227 disp->pida->scaled_piv = FALSE;
228 disp->pida->exist_histo = FALSE;
229 disp->pida->saved_histo = TRUE;
230 disp->pida->exist_valid = FALSE;
231 disp->pida->exist_vor = FALSE;
232 disp->pida->exist_vor_scaled = FALSE;
233 disp->pida->saved_vor = TRUE;
234 disp->pida->exist_sstrain = FALSE;
235 disp->pida->exist_sstrain_scaled = FALSE;
236 disp->pida->saved_sstrain = TRUE;
237 disp->pida->exist_nstrain = FALSE;
238 disp->pida->exist_nstrain_scaled = FALSE;
239 disp->pida->saved_nstrain = TRUE;
244 * Initialising of parameter values for image, evaluation and interrogation regions
246 disp->img->image = image;
247 /* disp->img->image->header = gpiv_img_cp_parameters (gl_image_par); */
248 disp->pida->piv_par = gpiv_piv_cp_parameters (gl_piv_par);
249 disp->pida->valid_par = pd_valp;
250 disp->pida->post_par = pd_postp;
253 if (disp->pida->piv_par->row_start > disp->img->image->header->nrows
254 - disp->pida->piv_par->pre_shift_row - 1) {
255 disp->pida->piv_par->row_start = 0;
257 disp->pida->piv_par->row_end =
258 MIN (disp->img->image->header->nrows, gl_piv_par->row_end);
259 if (disp->pida->piv_par->col_start > disp->img->image->header->ncolumns
260 - disp->pida->piv_par->pre_shift_col - 1) {
261 disp->pida->piv_par->col_start = 0;
263 disp->pida->piv_par->col_end =
264 MIN (disp->img->image->header->ncolumns, gl_piv_par->col_end);
267 * Copy _PART_ of piv_par to intreg for displaying Interrogation Area contours
269 disp->intreg = intreg;
270 disp->intreg->exist_int = FALSE;
271 disp->intreg->row_start_old = 0;
272 disp->intreg->col_start_old = 0;
274 disp->intreg->par = intreg_pivp;
275 disp->intreg->par->row_start = disp->pida->piv_par->row_start;
276 disp->intreg->par->row_end = disp->pida->piv_par->row_end;
277 disp->intreg->par->col_start = disp->pida->piv_par->col_start;
278 disp->intreg->par->col_end = disp->pida->piv_par->col_end;
279 disp->intreg->par->int_size_f = disp->pida->piv_par->int_size_f;
280 disp->intreg->par->int_size_i = disp->pida->piv_par->int_size_i;
281 disp->intreg->par->int_shift = disp->pida->piv_par->int_shift;
282 disp->intreg->par->pre_shift_row = disp->pida->piv_par->pre_shift_row;
283 disp->intreg->par->pre_shift_col = disp->pida->piv_par->pre_shift_col;
285 disp->intreg->par->row_start__set = TRUE;
286 disp->intreg->par->row_end__set = TRUE;
287 disp->intreg->par->col_start__set = TRUE;
288 disp->intreg->par->col_end__set = TRUE;
289 disp->intreg->par->int_size_f__set = TRUE;
290 disp->intreg->par->int_size_i__set = TRUE;
291 disp->intreg->par->int_shift__set = TRUE;
292 disp->intreg->par->pre_shift_row__set = TRUE;
293 disp->intreg->par->pre_shift_col__set = TRUE;
297 width = (gint) (disp->zoom_factor * disp->img->image->header->ncolumns + VIEW_HMARGE);
298 height = (gint) (disp->zoom_factor * disp->img->image->header->nrows + VIEW_VMARGE);
299 /* disp->mwin = g_object_new (GTK_TYPE_WINDOW, */
300 /* "default-height", height, */
301 /* "default-width", width, */
302 /* "title", title, */
303 /* NULL */
304 /* ); */
308 disp->mwin = gtk_window_new (GTK_WINDOW_TOPLEVEL);
309 gtk_window_set_title (GTK_WINDOW (disp->mwin), title);
310 /* gtk_window_set_default_size (GTK_WINDOW (disp->mwin), width, height); */
311 gtk_window_set_default_size (GTK_WINDOW (disp->mwin), 20, 20);
312 gtk_object_set_data (GTK_OBJECT (disp->mwin),
313 "disp",
314 disp);
315 gtk_object_set_data (GTK_OBJECT (disp->mwin),
316 "gpiv",
317 gpiv);
320 * DESTROING ITEM
322 g_signal_connect (GTK_OBJECT (disp->mwin),
323 "delete_event" ,
324 G_CALLBACK (delete_display),
325 NULL);
328 * focussing the actual display
330 g_signal_connect (GTK_OBJECT (disp->mwin),
331 "focus_in_event",
332 G_CALLBACK (on_display_set_focus),
333 NULL);
334 gtk_window_set_resizable (GTK_WINDOW (disp->mwin), FALSE);
337 * icon setting
339 icon = gdk_pixbuf_new_from_file(PIXMAPSDIR "gpiv_logo.png", NULL);
340 gtk_window_set_icon(GTK_WINDOW(disp->mwin), icon);
343 disp->vbox = gtk_vbox_new ( FALSE /* TRUE */, 0);
344 gtk_widget_show (disp->vbox);
345 gtk_container_add (GTK_CONTAINER (disp->mwin), disp->vbox);
348 * Menu bar
350 disp->menubar = gtk_menu_bar_new ();
351 gtk_box_pack_start (GTK_BOX (disp->vbox),
352 disp->menubar,
353 FALSE,
354 FALSE,
356 if (gpiv_par->display__view_menubar) {
357 gtk_widget_show (GTK_WIDGET (disp->menubar));
358 } else {
359 gtk_widget_hide (GTK_WIDGET (disp->menubar));
364 * View menu
366 disp->menuitem_view =
367 gtk_menu_item_new_with_mnemonic (_("_View"));
368 gtk_widget_show (disp->menuitem_view);
369 gtk_container_add (GTK_CONTAINER (disp->menubar),
370 disp->menuitem_view);
371 /* NEW */
372 /* gtk_object_set_data_full (GTK_OBJECT (disp->mwin), */
373 /* "menuitem_view", */
374 /* disp->menuitem_view, */
375 /* (GtkDestroyNotify) gtk_widget_unref); */
378 disp->menuitem_view_menu = gtk_menu_new ();
379 gtk_menu_item_set_submenu (GTK_MENU_ITEM
380 (disp->menuitem_view),
381 disp->menuitem_view_menu);
385 disp->view_menubar =
386 gtk_check_menu_item_new_with_mnemonic (_("View menu bar"));
387 gtk_widget_show (disp->view_menubar);
388 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_menu),
389 disp->view_menubar);
390 g_signal_connect ((gpointer) disp->view_menubar, "activate",
391 G_CALLBACK (on_menu_synchronize_popup),
392 (int *) VIEW_MENUBAR);
396 disp->view_rulers =
397 gtk_check_menu_item_new_with_mnemonic (_("View rulers"));
398 gtk_widget_show (disp->view_rulers);
399 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_menu),
400 disp->view_rulers);
401 g_signal_connect ((gpointer) disp->view_rulers, "activate",
402 G_CALLBACK (on_menu_synchronize_popup),
403 (int *) VIEW_RULERS);
406 * Menu for automatic stretching the window when zooming in
408 disp->stretch_auto =
409 gtk_check_menu_item_new_with_mnemonic (_("Stretch auto"));
410 gtk_widget_show (disp->stretch_auto);
411 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_menu),
412 disp->stretch_auto);
413 g_signal_connect ((gpointer) disp->stretch_auto, "activate",
414 G_CALLBACK (on_menu_synchronize_popup),
415 (int *) STRETCH_AUTO);
418 * Menu for stretching the window
420 disp->stretch =
421 gtk_menu_item_new_with_label (_("Stretch display"));
422 gtk_widget_show (disp->stretch);
423 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_menu),
424 disp->stretch);
425 gtk_tooltips_set_tip (gpiv->tooltips,
426 disp->stretch,
427 _("Stretch or fit display window to the image area"),
428 NULL);
429 g_signal_connect ((gpointer) disp->stretch,
430 "activate",
431 G_CALLBACK (on_stretch_activate),
432 NULL);
435 * Separator
437 disp->separator_zoom = gtk_separator_menu_item_new ();
438 gtk_widget_show (disp->separator_zoom);
439 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_menu),
440 disp->separator_zoom);
443 * Zoom menus
445 for (i = 0; i < 8; i++) {
446 /* gchar *zoom_index = g_strdup_printf ("zoom_%d", i) */
447 disp->zoom_key[i] = g_strdup_printf ("zoom_menu_%d", i);
448 disp->zoom_menu[i] = gtk_radio_menu_item_new_with_label
449 (disp->zoom_group, zoom_label[i]);
450 disp->zoom_group = gtk_radio_menu_item_get_group
451 (GTK_RADIO_MENU_ITEM (disp->zoom_menu[i]));
452 gtk_widget_show (disp->zoom_menu[i]);
453 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_menu),
454 disp->zoom_menu[i]);
455 gtk_tooltips_set_tip (gpiv->tooltips,
456 disp->zoom_menu[i],
457 _("set zoom factor"),
458 NULL);
459 gtk_object_set_data (GTK_OBJECT (disp->mwin),
460 disp->zoom_key[i],
461 disp->zoom_menu[i]);
462 g_signal_connect ((gpointer) disp->zoom_menu[i],
463 "activate",
464 G_CALLBACK (on_zoom_activate),
465 (int *) i);
468 /* if (disp->zoom_index == i) { */
469 /* gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM */
470 /* (disp->zoom_menu[i]), */
471 /* TRUE); */
472 /* } */
477 * Background (image) menu
479 disp->menuitem_background =
480 gtk_menu_item_new_with_mnemonic (_("_Background"));
481 gtk_widget_show (disp->menuitem_background);
482 gtk_container_add (GTK_CONTAINER (disp->menubar),
483 disp->menuitem_background);
486 disp->menuitem_background_menu = gtk_menu_new ();
487 gtk_menu_item_set_submenu (GTK_MENU_ITEM
488 (disp->menuitem_background),
489 disp->menuitem_background_menu);
493 disp->view_blue = gtk_radio_menu_item_new_with_mnemonic
494 (disp->background_group, _("Blue"));
495 disp->background_group = gtk_radio_menu_item_get_group
496 (GTK_RADIO_MENU_ITEM (disp->view_blue));
497 gtk_widget_show (disp->view_blue);
498 gtk_container_add (GTK_CONTAINER (disp->menuitem_background_menu),
499 disp->view_blue);
500 gtk_tooltips_set_tip (gpiv->tooltips,
501 disp->view_blue,
502 _("set blue background"),
503 NULL);
504 gtk_object_set_data (GTK_OBJECT (disp->mwin),
505 "blue_background_menu",
506 disp->view_blue);
507 g_signal_connect ((gpointer) disp->view_blue, "activate",
508 G_CALLBACK (on_menu_synchronize_popup),
509 (int *) VIEW_BLUE);
513 disp->view_black = gtk_radio_menu_item_new_with_mnemonic
514 (disp->background_group, _("Black"));
515 disp->background_group = gtk_radio_menu_item_get_group
516 (GTK_RADIO_MENU_ITEM (disp->view_black));
517 gtk_widget_show (disp->view_black);
518 gtk_container_add (GTK_CONTAINER (disp->menuitem_background_menu),
519 disp->view_black);
520 gtk_tooltips_set_tip (gpiv->tooltips,
521 disp->view_black,
522 _("set black background"),
523 NULL);
524 gtk_object_set_data (GTK_OBJECT (disp->mwin),
525 "black_background_menu",
526 disp->view_black);
527 g_signal_connect ((gpointer) disp->view_black, "activate",
528 G_CALLBACK (on_menu_synchronize_popup),
529 (int *) VIEW_BLACK);
533 disp->view_image_a = gtk_radio_menu_item_new_with_mnemonic
534 (disp->background_group, _("Image_A"));
535 disp->background_group = gtk_radio_menu_item_get_group
536 (GTK_RADIO_MENU_ITEM (disp->view_image_a));
537 gtk_widget_show (disp->view_image_a);
538 gtk_container_add (GTK_CONTAINER (disp->menuitem_background_menu),
539 disp->view_image_a);
540 gtk_tooltips_set_tip (gpiv->tooltips,
541 disp->view_image_a,
542 _("set first image as background"),
543 NULL);
544 gtk_object_set_data (GTK_OBJECT (disp->mwin),
545 "image_a_background_menu",
546 disp->view_image_a);
547 g_signal_connect ((gpointer) disp->view_image_a, "activate",
548 G_CALLBACK (on_menu_synchronize_popup),
549 (int *) VIEW_IMAGE_A);
553 disp->view_image_b = gtk_radio_menu_item_new_with_mnemonic
554 (disp->background_group, ("Image_B"));
555 disp->background_group = gtk_radio_menu_item_get_group
556 (GTK_RADIO_MENU_ITEM (disp->view_image_b));
557 gtk_widget_show (disp->view_image_b);
558 gtk_container_add (GTK_CONTAINER (disp->menuitem_background_menu),
559 disp->view_image_b);
560 gtk_tooltips_set_tip (gpiv->tooltips,
561 disp->view_image_b,
562 _("set second image as background"),
563 NULL);
564 gtk_object_set_data (GTK_OBJECT (disp->mwin),
565 "image_b_background_menu",
566 disp->view_image_b);
567 g_signal_connect ((gpointer) disp->view_image_b, "activate",
568 G_CALLBACK (on_menu_synchronize_popup),
569 (int *) VIEW_IMAGE_B);
573 * Piv display menu
575 disp->menuitem_view_piv_data =
576 gtk_menu_item_new_with_mnemonic (_("_Piv"));
577 gtk_widget_show (disp->menuitem_view_piv_data);
578 gtk_container_add (GTK_CONTAINER (disp->menubar),
579 disp->menuitem_view_piv_data);
582 disp->menuitem_view_piv_data_menu = gtk_menu_new ();
583 gtk_menu_item_set_submenu (GTK_MENU_ITEM (disp->menuitem_view_piv_data),
584 disp->menuitem_view_piv_data_menu);
587 disp->view_interrogation_areas =
588 gtk_check_menu_item_new_with_mnemonic (_("Interrogation area's"));
589 gtk_widget_show (disp->view_interrogation_areas);
590 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_piv_data_menu),
591 disp->view_interrogation_areas);
592 g_signal_connect ((gpointer) disp->view_interrogation_areas, "activate",
593 G_CALLBACK (on_menu_synchronize_popup),
594 (int *) VIEW_INTERROGATION_AREAS);
597 disp->view_velocity_vectors =
598 gtk_check_menu_item_new_with_mnemonic (_("Velocity vectors"));
599 gtk_widget_show (disp->view_velocity_vectors);
600 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_piv_data_menu),
601 disp->view_velocity_vectors);
602 g_signal_connect ((gpointer) disp->view_velocity_vectors, "activate",
603 G_CALLBACK (on_menu_synchronize_popup),
604 (int *) VIEW_VELOCITY_VECTORS);
607 * Scalar data display menu
610 disp->menuitem_view_scalar_data =
611 gtk_menu_item_new_with_mnemonic (_("_Scalar"));
612 gtk_widget_show (disp->menuitem_view_scalar_data);
613 gtk_container_add (GTK_CONTAINER (disp->menubar), disp->menuitem_view_scalar_data);
615 disp->menuitem_view_scalar_data_menu = gtk_menu_new ();
616 gtk_menu_item_set_submenu (GTK_MENU_ITEM (disp->menuitem_view_scalar_data),
617 disp->menuitem_view_scalar_data_menu);
621 disp->view_none =
622 gtk_radio_menu_item_new_with_mnemonic (disp->scalar_group, _("None"));
623 disp->scalar_group =
624 gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (disp->view_none));
625 gtk_widget_show (disp->view_none);
626 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_scalar_data_menu),
627 disp->view_none);
628 gtk_object_set_data (GTK_OBJECT (disp->mwin),
629 "view_none_scalars",
630 disp->view_none);
631 g_signal_connect ((gpointer) disp->view_none, "activate",
632 G_CALLBACK (on_menu_synchronize_popup),
633 (int *) VIEW_NONE_SCALARS);
636 disp->view_vorticity =
637 gtk_radio_menu_item_new_with_mnemonic (disp->scalar_group,
638 _("Vorticity"));
639 disp->scalar_group =
640 gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (disp->view_vorticity));
641 gtk_widget_show (disp->view_vorticity);
642 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_scalar_data_menu),
643 disp->view_vorticity);
644 gtk_object_set_data (GTK_OBJECT (disp->mwin),
645 "view_vorticity",
646 disp->view_vorticity);
647 g_signal_connect ((gpointer) disp->view_vorticity, "activate",
648 G_CALLBACK (on_menu_synchronize_popup),
649 (int *) VIEW_VORTICITY);
652 disp->view_shear_strain =
653 gtk_radio_menu_item_new_with_mnemonic (disp->scalar_group, _("Shear strain"));
654 disp->scalar_group =
655 gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (disp->view_shear_strain));
656 gtk_widget_show (disp->view_shear_strain);
657 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_scalar_data_menu),
658 disp->view_shear_strain);
659 gtk_object_set_data (GTK_OBJECT (disp->mwin),
660 "view_shear_strain",
661 disp->view_shear_strain);
662 g_signal_connect ((gpointer) disp->view_shear_strain, "activate",
663 G_CALLBACK (on_menu_synchronize_popup),
664 (int *) VIEW_SHEAR_STRAIN);
667 disp->view_normal_strain =
668 gtk_radio_menu_item_new_with_mnemonic (disp->scalar_group,
669 _("Normal strain"));
670 disp->scalar_group =
671 gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM (disp->view_normal_strain));
672 gtk_widget_show (disp->view_normal_strain);
673 gtk_container_add (GTK_CONTAINER (disp->menuitem_view_scalar_data_menu),
674 disp->view_normal_strain);
675 gtk_object_set_data (GTK_OBJECT (disp->mwin),
676 "view_normal_strain",
677 disp->view_normal_strain);
678 g_signal_connect ((gpointer) disp->view_normal_strain, "activate",
679 G_CALLBACK (on_menu_synchronize_popup),
680 (int *) VIEW_NORMAL_STRAIN);
683 * Vector scale menu
685 disp->menuitem_vector_scale =
686 gtk_menu_item_new_with_mnemonic (_("Scal_e"));
687 gtk_widget_show (disp->menuitem_vector_scale);
688 gtk_container_add (GTK_CONTAINER (disp->menubar),
689 disp->menuitem_vector_scale);
691 disp->menuitem_vector_scale_menu = gtk_menu_new ();
692 gtk_menu_item_set_submenu (GTK_MENU_ITEM (disp->menuitem_vector_scale),
693 disp->menuitem_vector_scale_menu);
696 for (i = 0; i < 9; i++) {
697 disp->vector_scale_key[i] = g_strdup_printf ("vector_scale_menu_%d", i);
699 disp->vector_scale_menu[i] = gtk_radio_menu_item_new_with_label
700 (disp->vector_scale_group, vector_scale_label[i]);
702 disp->vector_scale_group = gtk_radio_menu_item_get_group
703 (GTK_RADIO_MENU_ITEM (disp->vector_scale_menu[i]));
705 gtk_widget_show (disp->vector_scale_menu[i]);
707 gtk_container_add (GTK_CONTAINER (disp->menuitem_vector_scale_menu),
708 disp->vector_scale_menu[i]);
709 gtk_tooltips_set_tip (gpiv->tooltips,
710 disp->vector_scale_menu[i],
711 _("set vector_scale"),
712 NULL);
713 gtk_object_set_data (GTK_OBJECT (disp->mwin),
714 disp->vector_scale_key[i],
715 disp->vector_scale_menu[i]);
716 g_signal_connect ((gpointer) disp->vector_scale_menu[i],
717 "activate",
718 G_CALLBACK (on_vector_scale_activate),
719 (int *) i);
723 * Vector color menu
725 disp->menuitem_vector_color =
726 gtk_menu_item_new_with_mnemonic (_("C_olor"));
727 gtk_widget_show (disp->menuitem_vector_color);
728 gtk_container_add (GTK_CONTAINER (disp->menubar),
729 disp->menuitem_vector_color);
731 disp->menuitem_vector_color_menu = gtk_menu_new ();
732 gtk_menu_item_set_submenu (GTK_MENU_ITEM (disp->menuitem_vector_color),
733 disp->menuitem_vector_color_menu);
736 disp->vector_color_peak_nr =
737 gtk_radio_menu_item_new_with_mnemonic (disp->vector_color_group,
738 ("Peak nr"));
739 disp->vector_color_group =
740 gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM
741 (disp->vector_color_peak_nr));
742 gtk_widget_show (disp->vector_color_peak_nr);
743 gtk_container_add (GTK_CONTAINER (disp->menuitem_vector_color_menu),
744 disp->vector_color_peak_nr);
745 gtk_object_set_data (GTK_OBJECT (disp->mwin),
746 "vector_color_peak_nr",
747 disp->vector_color_peak_nr);
748 g_signal_connect ((gpointer) disp->vector_color_peak_nr, "activate",
749 G_CALLBACK (on_menu_synchronize_popup),
750 (int *) VECTOR_COLOR_PEAK);
753 disp->vector_color_snr =
754 gtk_radio_menu_item_new_with_mnemonic (disp->vector_color_group,
755 ("Snr"));
756 /* disp->vector_color_snr = */
757 /* gtk_radio_menu_item_new_with_mnemonic (disp->vector_color_group, */
758 /* ("SNR")); */
759 disp->vector_color_group =
760 gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM
761 (disp->vector_color_snr));
762 gtk_widget_show (disp->vector_color_snr);
763 gtk_container_add (GTK_CONTAINER (disp->menuitem_vector_color_menu),
764 disp->vector_color_snr);
765 gtk_object_set_data (GTK_OBJECT (disp->mwin),
766 "vector_color_snr",
767 disp->vector_color_snr);
768 g_signal_connect ((gpointer) disp->vector_color_snr, "activate",
769 G_CALLBACK (on_menu_synchronize_popup),
770 (int *) VECTOR_COLOR_SNR);
773 disp->vector_color_magngray =
774 gtk_radio_menu_item_new_with_mnemonic (disp->vector_color_group,
775 ("Magnitude gray"));
776 disp->vector_color_group =
777 gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM
778 (disp->vector_color_magngray));
779 gtk_widget_show (disp->vector_color_magngray);
780 gtk_container_add (GTK_CONTAINER (disp->menuitem_vector_color_menu),
781 disp->vector_color_magngray);
782 gtk_object_set_data (GTK_OBJECT (disp->mwin),
783 "vector_color_magngray",
784 disp->vector_color_magngray);
785 g_signal_connect ((gpointer) disp->vector_color_magngray, "activate",
786 G_CALLBACK (on_menu_synchronize_popup),
787 (int *) VECTOR_COLOR_MAGNGRAY);
791 disp->vector_color_magncolor =
792 gtk_radio_menu_item_new_with_mnemonic (disp->vector_color_group,
793 ("Magnitude color"));
794 disp->vector_color_group =
795 gtk_radio_menu_item_get_group (GTK_RADIO_MENU_ITEM
796 (disp->vector_color_magncolor));
797 gtk_widget_show (disp->vector_color_magncolor);
798 gtk_container_add (GTK_CONTAINER (disp->menuitem_vector_color_menu),
799 disp->vector_color_magncolor);
800 gtk_object_set_data (GTK_OBJECT (disp->mwin),
801 "vector_color_magncolor",
802 disp->vector_color_magncolor);
803 g_signal_connect ((gpointer) disp->vector_color_magncolor, "activate",
804 G_CALLBACK (on_menu_synchronize_popup),
805 (int *) VECTOR_COLOR_MAGNCOLOR);
808 * table
810 disp->table = gtk_table_new (4,
812 FALSE);
813 gtk_widget_ref (disp->table);
814 gtk_object_set_data_full (GTK_OBJECT (disp->mwin),
815 "table",
816 disp->table,
817 (GtkDestroyNotify) gtk_widget_unref);
818 gtk_box_pack_start (GTK_BOX (disp->vbox),
819 disp->table,
820 TRUE,
821 TRUE,
823 gtk_widget_show (disp->table);
827 * Adjustments for scrollbars or scrolled window
829 disp->hadj =
830 gtk_adjustment_new (0.0,
831 0.0,
832 (gdouble) disp->img->image->header->ncolumns - 1.0,
833 1.0,
834 1.0,
835 (gdouble) disp->img->image->header->ncolumns - 1.0
836 /* * disp->zoom_factor */
838 gtk_object_set_data (GTK_OBJECT (disp->hadj),
839 "var_type",
840 "0");
841 gtk_object_set_data (GTK_OBJECT (disp->hadj),
842 "disp",
843 disp);
844 g_signal_connect (GTK_OBJECT (disp->hadj),
845 "value_changed",
846 G_CALLBACK
847 (on_adj_changed),
848 NULL);
852 disp->vadj =
853 gtk_adjustment_new (0.0,
854 0.0,
855 (gdouble) disp->img->image->header->nrows - 1.0,
856 1.0,
857 1.0,
858 (gfloat) disp->img->image->header->nrows - 1.0
859 /* * disp->zoom_factor */
862 gtk_object_set_data (GTK_OBJECT (disp->vadj),
863 "var_type",
864 "1");
865 gtk_object_set_data (GTK_OBJECT (disp->vadj),
866 "disp",
867 disp);
868 g_signal_connect (GTK_OBJECT (disp->vadj),
869 "value_changed",
870 G_CALLBACK
871 (on_adj_changed),
872 NULL);
876 * horizontal ruler
878 disp->hruler = gtk_hruler_new();
879 gtk_widget_ref(disp->hruler);
880 gtk_object_set_data_full(GTK_OBJECT(disp->mwin),
881 "hruler",
882 disp->hruler,
883 (GtkDestroyNotify) gtk_widget_unref);
885 gtk_table_attach (GTK_TABLE (disp->table),
886 disp->hruler,
891 (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL),
892 (GtkAttachOptions) (GTK_FILL),
895 if (gpiv_par->display__view_rulers) {
896 gtk_widget_show (GTK_WIDGET (disp->hruler));
897 } else {
898 gtk_widget_hide (GTK_WIDGET (disp->hruler));
902 gtk_ruler_set_range (GTK_RULER (disp->hruler),
903 0.0,
904 (gfloat) (disp->img->image->header->ncolumns - 1),
905 0.0,
906 (gfloat) (disp->img->image->header->ncolumns - 1));
907 /* gtk_widget_set_size_request (disp->hruler, */
908 /* (gint) (disp->zoom_factor * */
909 /* disp->img.image_par->ncolumns), */
910 /* RULER_WIDTH); */
913 * vertical ruler
915 disp->vruler = gtk_vruler_new ();
916 gtk_widget_ref (disp->vruler);
917 gtk_object_set_data_full (GTK_OBJECT (disp->mwin),
918 "vruler",
919 disp->vruler,
920 (GtkDestroyNotify) gtk_widget_unref);
921 if (gpiv_par->display__view_rulers) {
922 gtk_widget_show (GTK_WIDGET (disp->vruler));
923 } else {
924 gtk_widget_hide (GTK_WIDGET (disp->vruler));
926 gtk_table_attach (GTK_TABLE (disp->table),
927 disp->vruler,
932 (GtkAttachOptions) (GTK_EXPAND ),
933 (GtkAttachOptions) (GTK_EXPAND | GTK_SHRINK | GTK_FILL),
937 gtk_ruler_set_range (GTK_RULER (disp->vruler),
938 0.0,
939 (gfloat) (disp->img->image->header->nrows - 1),
940 0.0,
941 (gfloat) (disp->img->image->header->nrows - 1));
942 /* gtk_widget_set_size_request (disp->vruler, */
943 /* RULER_WIDTH, */
944 /* (gint) (disp->zoom_factor * */
945 /* disp->img.image_par->nrows)); */
947 * Scrollbars
950 disp->vscrollbar =
951 gtk_vscrollbar_new( GTK_ADJUSTMENT (disp->vadj));
952 gtk_widget_ref (disp->vscrollbar);
953 gtk_object_set_data_full (GTK_OBJECT (disp->mwin),
954 "vscrollbar",
955 disp->vscrollbar,
956 (GtkDestroyNotify) gtk_widget_unref);
957 gtk_widget_show (disp->vscrollbar);
958 gtk_table_attach (GTK_TABLE (disp->table),
959 disp->vscrollbar,
960 2 /* 1 */,
964 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
965 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
969 /* gtk_viewport_get_vadjustment (viewport) */
971 disp->hscrollbar =
972 gtk_hscrollbar_new (GTK_ADJUSTMENT (disp->hadj));
973 gtk_widget_ref (disp->hscrollbar);
974 gtk_object_set_data_full (GTK_OBJECT (disp->mwin),
975 "hscrollbar",
976 disp->hscrollbar,
977 (GtkDestroyNotify) gtk_widget_unref);
978 gtk_widget_show (disp->hscrollbar);
979 gtk_table_attach (GTK_TABLE (disp->table),
980 disp->hscrollbar,
985 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
986 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
991 * gnome canvas
993 #ifdef CANVAS_AA
994 gtk_widget_push_visual (gdk_rgb_get_visual ());
995 gtk_widget_push_colormap (gdk_rgb_get_cmap ());
996 disp->canvas = gnome_canvas_new_aa ();
997 #else
998 gtk_widget_push_visual (gdk_imlib_get_visual ());
999 gtk_widget_push_colormap (NULL);
1000 disp->canvas = gnome_canvas_new ();
1001 #endif
1003 gtk_widget_pop_colormap ();
1004 gtk_widget_pop_visual ();
1005 gtk_widget_ref (disp->canvas);
1006 gtk_object_set_data_full (GTK_OBJECT (disp->mwin),
1007 "canvas",
1008 disp->canvas,
1009 (GtkDestroyNotify) gtk_widget_unref);
1010 gtk_widget_show (disp->canvas);
1011 gnome_canvas_set_scroll_region (GNOME_CANVAS (disp->canvas),
1014 disp->img->image->header->ncolumns - 1,
1015 disp->img->image->header->nrows - 1);
1017 gtk_table_attach (GTK_TABLE (disp->table),
1018 disp->canvas,
1023 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1024 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1030 gtk_widget_set_events (GTK_WIDGET (disp->canvas),
1031 GDK_LEAVE_NOTIFY_MASK
1032 | GDK_BUTTON_PRESS_MASK
1033 | GDK_BUTTON_RELEASE_MASK
1034 | GDK_POINTER_MOTION_MASK
1035 | GDK_POINTER_MOTION_HINT_MASK
1036 | GDK_SHIFT_MASK
1037 | GDK_SCROLL_MASK
1040 gtk_object_set_data (GTK_OBJECT (disp->canvas),
1041 "disp",
1042 disp);
1043 gtk_object_set_data (GTK_OBJECT (disp->canvas),
1044 "gpiv",
1045 gpiv);
1049 * connect rulers to gnome_canvas drawing area
1051 g_signal_connect_swapped (G_OBJECT (disp->canvas),
1052 "motion_notify_event",
1053 G_CALLBACK (EVENT_METHOD (disp->hruler, motion_notify_event)),
1054 G_OBJECT (disp->hruler));
1056 g_signal_connect_swapped (G_OBJECT (disp->canvas),
1057 "motion_notify_event",
1058 G_CALLBACK (GTK_WIDGET_GET_CLASS (disp->vruler)->motion_notify_event),
1059 G_OBJECT (disp->vruler));
1062 g_signal_connect (G_OBJECT (disp->canvas),
1063 "enter_notify_event",
1064 G_CALLBACK (canvas_display_enter_notify),
1065 NULL);
1066 g_signal_connect (G_OBJECT (disp->canvas),
1067 "motion_notify_event",
1068 G_CALLBACK (canvas_display_motion_notify),
1069 NULL);
1070 g_signal_connect (G_OBJECT (disp->canvas),
1071 "button_press_event",
1072 G_CALLBACK (canvas_display_button_press),
1073 NULL);
1074 g_signal_connect (G_OBJECT (disp->canvas),
1075 "button_release_event",
1076 G_CALLBACK (canvas_display_button_release),
1077 NULL);
1078 g_signal_connect (G_OBJECT (disp->canvas),
1079 "leave_notify_event",
1080 G_CALLBACK (canvas_display_leave_notify),
1081 NULL);
1082 g_signal_connect (G_OBJECT (disp->canvas),
1083 "scroll_event",
1084 G_CALLBACK (canvas_display_button_scroll),
1085 NULL);
1089 * application/status bar
1091 disp->appbar = gnome_appbar_new (FALSE,
1092 TRUE,
1093 GNOME_PREFERENCES_NEVER);
1094 gtk_widget_ref (disp->appbar);
1095 gtk_object_set_data_full (GTK_OBJECT (disp->mwin),
1096 "appbar",
1097 disp->appbar,
1098 (GtkDestroyNotify) gtk_widget_unref);
1099 gtk_table_attach (GTK_TABLE (disp->table),
1100 disp->appbar,
1105 (GtkAttachOptions) (GTK_EXPAND | GTK_FILL),
1106 (GtkAttachOptions) (GTK_FILL),
1109 gtk_widget_show (disp->appbar);
1110 gnome_appbar_set_default (GNOME_APPBAR (disp->appbar),
1111 disp->msg_display_default);
1115 gtk_widget_show (disp->mwin);
1116 return disp;
1121 GtkWidget *
1122 create_display_popupmenu (Display *disp
1124 /*-----------------------------------------------------------------------------
1127 GtkWidget *display_menu = NULL;
1130 display_menu = gtk_menu_new ();
1131 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1132 "display_menu",
1133 display_menu);
1134 gnome_app_fill_menu (GTK_MENU_SHELL (display_menu),
1135 display_menu_uiinfo,
1136 NULL,
1137 FALSE,
1142 * view menubar widget
1144 gtk_widget_ref (display_menu_uiinfo[0].widget);
1145 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1146 "view_menubar_popup_menu",
1147 display_menu_uiinfo[0].widget,
1148 (GtkDestroyNotify) gtk_widget_unref);
1149 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1150 "view_menubar_popup_menu",
1151 display_menu_uiinfo[0].widget);
1152 if (gpiv_par->display__view_menubar) {
1153 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1154 (display_menu_uiinfo[0].widget),
1155 TRUE);
1156 } else {
1157 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1158 (display_menu_uiinfo[0].widget),
1159 FALSE);
1161 gtk_object_set_data (GTK_OBJECT (display_menu_uiinfo[0].widget),
1162 "disp",
1163 disp);
1167 * view rulers widget
1169 gtk_widget_ref (display_menu_uiinfo[1].widget);
1170 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1171 "view_rulers_popup_menu",
1172 display_menu_uiinfo[1].widget,
1173 (GtkDestroyNotify) gtk_widget_unref);
1174 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1175 "view_rulers_popup_menu",
1176 display_menu_uiinfo[1].widget);
1177 if (gpiv_par->display__view_rulers) {
1178 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1179 (display_menu_uiinfo[1].widget),
1180 TRUE);
1181 } else {
1182 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1183 (display_menu_uiinfo[1].widget),
1184 FALSE);
1186 gtk_object_set_data (GTK_OBJECT (display_menu_uiinfo[1].widget),
1187 "disp",
1188 disp);
1192 * stretch when zoom automatic
1194 gtk_widget_ref (display_menu_uiinfo[2].widget);
1195 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1196 "stretch_auto_popup_menu",
1197 display_menu_uiinfo[2].widget,
1198 (GtkDestroyNotify) gtk_widget_unref);
1199 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1200 "stretch_auto_popup_menu",
1201 display_menu_uiinfo[2].widget);
1202 if (gpiv_par->display__stretch_auto) {
1203 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1204 (display_menu_uiinfo[2].widget),
1205 TRUE);
1206 } else {
1207 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1208 (display_menu_uiinfo[2].widget),
1209 FALSE);
1211 gtk_object_set_data (GTK_OBJECT (display_menu_uiinfo[2].widget),
1212 "disp",
1213 disp);
1217 * zoom menu widgets
1219 gtk_widget_ref (zoomscale_menu_display[0].widget);
1220 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1221 "zmv_0",
1222 zoomscale_menu_display[0].widget,
1223 (GtkDestroyNotify) gtk_widget_unref);
1224 if (disp->zoom_index == ZOOM_0) {
1225 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1226 (zoomscale_menu_display[0].widget),
1227 TRUE);
1229 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1230 "zmv_0",
1231 zoomscale_menu_display[0].widget);
1232 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[0].widget),
1233 "disp",
1234 disp);
1235 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[0].widget),
1236 "zoom_index",
1237 (int *) ZOOM_0);
1241 gtk_widget_ref (zoomscale_menu_display[1].widget);
1242 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1243 "zmv_1",
1244 zoomscale_menu_display[1].widget,
1245 (GtkDestroyNotify) gtk_widget_unref);
1246 if (disp->zoom_index == ZOOM_1) {
1247 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1248 (zoomscale_menu_display[1].widget),
1249 TRUE);
1251 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1252 "zmv_1",
1253 zoomscale_menu_display[1].widget);
1254 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[1].widget),
1255 "disp",
1256 disp);
1257 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[1].widget),
1258 "zoom_index",
1259 (int *) ZOOM_1);
1263 gtk_widget_ref (zoomscale_menu_display[2].widget);
1264 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1265 "zmv_2",
1266 zoomscale_menu_display[2].widget,
1267 (GtkDestroyNotify) gtk_widget_unref);
1268 if (disp->zoom_index == ZOOM_2) {
1269 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1270 (zoomscale_menu_display[2].widget),
1271 TRUE);
1273 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1274 "zmv_2",
1275 zoomscale_menu_display[2].widget);
1276 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[2].widget),
1277 "disp",
1278 disp);
1279 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[2].widget),
1280 "zoom_index",
1281 (int *) ZOOM_2);
1285 gtk_widget_ref (zoomscale_menu_display[3].widget);
1286 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1287 "zmv_3",
1288 zoomscale_menu_display[3].widget,
1289 (GtkDestroyNotify) gtk_widget_unref);
1290 if (disp->zoom_index == ZOOM_3) {
1291 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1292 (zoomscale_menu_display[3].widget),
1293 TRUE);
1295 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1296 "zmv_3",
1297 zoomscale_menu_display[3].widget);
1298 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[3].widget),
1299 "disp",
1300 disp);
1301 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[3].widget),
1302 "zoom_index",
1303 (int *) ZOOM_3 );
1307 gtk_widget_ref (zoomscale_menu_display[4].widget);
1308 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1309 "zmv_4",
1310 zoomscale_menu_display[4].widget,
1311 (GtkDestroyNotify) gtk_widget_unref);
1312 if (disp->zoom_index == ZOOM_4) {
1313 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1314 (zoomscale_menu_display[4].widget),
1315 TRUE);
1317 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1318 "zmv_4",
1319 zoomscale_menu_display[4].widget);
1320 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[4].widget),
1321 "disp",
1322 disp);
1323 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[4].widget),
1324 "zoom_index",
1325 (int *) ZOOM_4);
1329 gtk_widget_ref (zoomscale_menu_display[5].widget);
1330 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1331 "zmv_5",
1332 zoomscale_menu_display[5].widget,
1333 (GtkDestroyNotify) gtk_widget_unref);
1334 if (disp->zoom_index == ZOOM_5) {
1335 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1336 (zoomscale_menu_display[5].widget),
1337 TRUE);
1339 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1340 "zmv_5",
1341 zoomscale_menu_display[5].widget);
1342 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[5].widget),
1343 "disp",
1344 disp);
1345 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[5].widget),
1346 "zoom_index",
1347 (int *) ZOOM_5);
1350 gtk_widget_ref (zoomscale_menu_display[6].widget);
1351 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1352 "zmv_6",
1353 zoomscale_menu_display[6].widget,
1354 (GtkDestroyNotify) gtk_widget_unref);
1355 if (disp->zoom_index == ZOOM_6) {
1356 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1357 (zoomscale_menu_display[6].widget),
1358 TRUE);
1360 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1361 "zmv_6",
1362 zoomscale_menu_display[6].widget);
1363 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[6].widget),
1364 "disp",
1365 disp);
1366 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[6].widget),
1367 "zoom_index",
1368 (int *) ZOOM_6);
1371 gtk_widget_ref (zoomscale_menu_display[7].widget);
1372 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1373 "zmv_7",
1374 zoomscale_menu_display[7].widget,
1375 (GtkDestroyNotify) gtk_widget_unref);
1376 if (disp->zoom_index == ZOOM_7) {
1377 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1378 (zoomscale_menu_display[7].widget),
1379 TRUE);
1381 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1382 "zmv_7",
1383 zoomscale_menu_display[7].widget);
1384 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[7].widget),
1385 "disp",
1386 disp);
1387 gtk_object_set_data (GTK_OBJECT (zoomscale_menu_display[7].widget),
1388 "zoom_index",
1389 (int *) ZOOM_7);
1393 * background menu widgets
1395 gtk_widget_ref (view_background_display[0].widget);
1396 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1397 "view_blue",
1398 view_background_display[0].widget,
1399 (GtkDestroyNotify) gtk_widget_unref);
1400 if (gpiv_par->display__backgrnd == SHOW_BG_DARKBLUE) {
1401 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1402 (view_background_display[0].widget),
1403 TRUE);
1405 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1406 "view_background_display0",
1407 view_background_display[0].widget);
1408 gtk_object_set_data (GTK_OBJECT (view_background_display[0].widget),
1409 "disp",
1410 disp);
1414 gtk_widget_ref (view_background_display[1].widget);
1415 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1416 "view_black",
1417 view_background_display[1].widget,
1418 (GtkDestroyNotify) gtk_widget_unref);
1419 if (gpiv_par->display__backgrnd == SHOW_BG_BLACK) {
1420 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1421 (view_background_display[1].widget),
1422 TRUE);
1424 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1425 "view_background_display1",
1426 view_background_display[1].widget);
1427 gtk_object_set_data (GTK_OBJECT (view_background_display[1].widget),
1428 "disp",
1429 disp);
1433 gtk_widget_ref (view_background_display[2].widget);
1434 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1435 "view_img1",
1436 view_background_display[2].widget,
1437 (GtkDestroyNotify) gtk_widget_unref);
1438 if (gpiv_par->display__backgrnd == SHOW_BG_IMG1) {
1439 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1440 (view_background_display[2].widget),
1441 TRUE);
1443 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1444 "view_background_display2",
1445 view_background_display[2].widget);
1446 gtk_object_set_data (GTK_OBJECT (view_background_display[2].widget),
1447 "disp",
1448 disp);
1452 gtk_widget_ref (view_background_display[3].widget);
1453 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1454 "view_img2",
1455 view_background_display[3].widget,
1456 (GtkDestroyNotify) gtk_widget_unref);
1457 if (gpiv_par->display__backgrnd == SHOW_BG_IMG2) {
1458 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1459 (view_background_display[3].widget),
1460 TRUE);
1462 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1463 "view_background_display3",
1464 view_background_display[3].widget);
1465 gtk_object_set_data (GTK_OBJECT (view_background_display[3].widget),
1466 "disp",
1467 disp);
1471 * view menu widgets to display PIV data and interrrogation area's
1473 gtk_widget_ref (view_piv_display[0].widget);
1474 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1475 "view_intreg",
1476 view_piv_display[0].widget,
1477 (GtkDestroyNotify) gtk_widget_unref);
1478 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1479 "view_piv_display0",
1480 view_piv_display[0].widget);
1481 if (disp->display_intregs) {
1482 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1483 (view_piv_display[0].widget),
1484 TRUE);
1486 gtk_object_set_data (GTK_OBJECT (view_piv_display[0].widget),
1487 "disp",
1488 disp);
1492 gtk_widget_ref (view_piv_display[1].widget);
1493 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1494 "view_piv",
1495 view_piv_display[1].widget,
1496 (GtkDestroyNotify) gtk_widget_unref);
1497 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1498 "view_piv_display1",
1499 view_piv_display[1].widget);
1500 if (disp->display_piv) {
1501 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1502 (view_piv_display[1].widget),
1503 TRUE);
1504 } else {
1505 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1506 (view_piv_display[1].widget),
1507 FALSE);
1509 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1510 "view_piv_display1",
1511 view_piv_display[1].widget);
1514 * Display scalar data
1516 gtk_widget_ref (view_scalardata_display[0].widget);
1517 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1518 "view_none",
1519 view_scalardata_display[0].widget,
1520 (GtkDestroyNotify) gtk_widget_unref);
1521 if (gpiv_par->display__scalar == SHOW_SC_NONE) {
1522 if (gpiv_par->verbose) g_message ("create_display_popupmenu:: display__scalar == SHOW_SC_NONE");
1523 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1524 (view_scalardata_display[0].widget),
1525 TRUE);
1527 gtk_object_set_data (GTK_OBJECT (view_scalardata_display[0].widget),
1528 "disp",
1529 disp);
1530 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1531 "view_scalardata_display0",
1532 view_scalardata_display[0].widget);
1536 gtk_widget_ref (view_scalardata_display[1].widget);
1537 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1538 "view_vor",
1539 view_scalardata_display[1].widget,
1540 (GtkDestroyNotify) gtk_widget_unref);
1541 if (gpiv_par->display__scalar == SHOW_SC_VORTICITY) {
1542 if (gpiv_par->verbose) g_message ("create_display_popupmenu:: display__scalar == SHOW_SC_VORTICITY");
1543 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1544 (view_scalardata_display[1].widget),
1545 TRUE);
1547 gtk_object_set_data (GTK_OBJECT (view_scalardata_display[1].widget),
1548 "disp",
1549 disp);
1550 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1551 "view_scalardata_display1",
1552 view_scalardata_display[1].widget);
1556 gtk_widget_ref (view_scalardata_display[2].widget);
1557 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1558 "view_sstrain",
1559 view_scalardata_display[2].widget,
1560 (GtkDestroyNotify) gtk_widget_unref);
1561 if (gpiv_par->display__scalar == SHOW_SC_SSTRAIN) {
1562 if (gpiv_par->verbose) g_message ("create_display_popupmenu:: display__scalar == SHOW_SC_SSTRAIN");
1563 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1564 (view_scalardata_display[2].widget),
1565 TRUE);
1567 gtk_object_set_data (GTK_OBJECT (view_scalardata_display[2].widget),
1568 "disp",
1569 disp);
1570 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1571 "view_scalardata_display2",
1572 view_scalardata_display[2].widget);
1576 gtk_widget_ref (view_scalardata_display[3].widget);
1577 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1578 "view_nstrain",
1579 view_scalardata_display[3].widget,
1580 (GtkDestroyNotify) gtk_widget_unref);
1581 if (gpiv_par->display__scalar == SHOW_SC_NSTRAIN) {
1582 if (gpiv_par->verbose) g_message ("create_display_popupmenu:: display__scalar == SHOW_SC_NSTRAIN");
1583 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1584 (view_scalardata_display[3].widget),
1585 TRUE);
1587 gtk_object_set_data (GTK_OBJECT (view_scalardata_display[3].widget),
1588 "disp",
1589 disp);
1590 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1591 "view_scalardata_display3",
1592 view_scalardata_display[3].widget);
1595 * vectorscale menu widgets
1597 gtk_widget_ref (vectorscale_menu_display[0].widget);
1598 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1599 "vs_mv_0",
1600 vectorscale_menu_display[0].widget,
1601 (GtkDestroyNotify) gtk_widget_unref);
1602 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1603 "vs_mv_0",
1604 vectorscale_menu_display[0].widget);
1605 if (gpiv_par->display__vector_scale == 1) {
1606 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1607 (vectorscale_menu_display[0].widget),
1608 TRUE);
1613 gtk_widget_ref (vectorscale_menu_display[1].widget);
1614 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1615 "vs_mv_1",
1616 vectorscale_menu_display[1].widget,
1617 (GtkDestroyNotify) gtk_widget_unref);
1618 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1619 "vs_mv_1",
1620 vectorscale_menu_display[1].widget);
1621 if (gpiv_par->display__vector_scale == 2) {
1622 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1623 (vectorscale_menu_display[1].widget),
1624 TRUE);
1629 gtk_widget_ref (vectorscale_menu_display[2].widget);
1630 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1631 "vs_mv_2",
1632 vectorscale_menu_display[2].widget,
1633 (GtkDestroyNotify) gtk_widget_unref);
1634 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1635 "vs_mv_2",
1636 vectorscale_menu_display[2].widget);
1637 if (gpiv_par->display__vector_scale == 4) {
1638 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1639 (vectorscale_menu_display[2].widget),
1640 TRUE);
1645 gtk_widget_ref (vectorscale_menu_display[3].widget);
1646 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1647 "vs_mv_3",
1648 vectorscale_menu_display[3].widget,
1649 (GtkDestroyNotify) gtk_widget_unref);
1650 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1651 "vs_mv_3",
1652 vectorscale_menu_display[3].widget);
1653 if (gpiv_par->display__vector_scale == 8) {
1654 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1655 (vectorscale_menu_display[3].widget),
1656 TRUE);
1661 gtk_widget_ref (vectorscale_menu_display[4].widget);
1662 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1663 "vs_mv_4",
1664 vectorscale_menu_display[0].widget,
1665 (GtkDestroyNotify) gtk_widget_unref);
1666 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1667 "vs_mv_4",
1668 vectorscale_menu_display[4].widget);
1669 if (gpiv_par->display__vector_scale == 16) {
1670 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1671 (vectorscale_menu_display[4].widget),
1672 TRUE);
1677 gtk_widget_ref (vectorscale_menu_display[5].widget);
1678 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1679 "vs_mv_5",
1680 vectorscale_menu_display[5].widget,
1681 (GtkDestroyNotify) gtk_widget_unref);
1682 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1683 "vs_mv_5",
1684 vectorscale_menu_display[5].widget);
1685 if (gpiv_par->display__vector_scale == 32) {
1686 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1687 (vectorscale_menu_display[5].widget),
1688 TRUE);
1693 gtk_widget_ref (vectorscale_menu_display[6].widget);
1694 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1695 "vs_mv_6",
1696 vectorscale_menu_display[6].widget,
1697 (GtkDestroyNotify) gtk_widget_unref);
1698 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1699 "vs_mv_6",
1700 vectorscale_menu_display[6].widget);
1701 if (gpiv_par->display__vector_scale == 64) {
1702 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1703 (vectorscale_menu_display[6].widget),
1704 TRUE);
1709 gtk_widget_ref (vectorscale_menu_display[7].widget);
1710 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1711 "vs_mv_7",
1712 vectorscale_menu_display[7].widget,
1713 (GtkDestroyNotify) gtk_widget_unref);
1714 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1715 "vs_mv_7",
1716 vectorscale_menu_display[7].widget);
1717 if (gpiv_par->display__vector_scale == 128) {
1718 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1719 (vectorscale_menu_display[7].widget),
1720 TRUE);
1725 gtk_widget_ref (vectorscale_menu_display[8].widget);
1726 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1727 "vs_mv_8",
1728 vectorscale_menu_display[8].widget,
1729 (GtkDestroyNotify) gtk_widget_unref);
1730 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1731 "vs_mv_8",
1732 vectorscale_menu_display[8].widget);
1733 if (gpiv_par->display__vector_scale == 256) {
1734 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1735 (vectorscale_menu_display[8].widget),
1736 TRUE);
1741 * vectorcolor menu widgets
1743 gtk_widget_ref (vectorcolor_menu_display[0].widget);
1744 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1745 "vc_mv_0",
1746 vectorcolor_menu_display[0].widget,
1747 (GtkDestroyNotify) gtk_widget_unref);
1748 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1749 "vectorcolor_menu_display0",
1750 vectorcolor_menu_display[0].widget);
1751 if (gpiv_par->display__vector_color == SHOW_PEAKNR) {
1752 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1753 (vectorcolor_menu_display[0].widget),
1754 TRUE);
1759 gtk_widget_ref (vectorcolor_menu_display[1].widget);
1760 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1761 "vc_mv_1",
1762 vectorcolor_menu_display[1].widget,
1763 (GtkDestroyNotify) gtk_widget_unref);
1764 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1765 "vectorcolor_menu_display1",
1766 vectorcolor_menu_display[1].widget);
1767 if (gpiv_par->display__vector_color == SHOW_SNR) {
1768 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1769 (vectorcolor_menu_display[1].widget),
1770 TRUE);
1775 gtk_widget_ref (vectorcolor_menu_display[2].widget);
1776 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1777 "vc_mv_2",
1778 vectorcolor_menu_display[2].widget,
1779 (GtkDestroyNotify) gtk_widget_unref);
1780 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1781 "vectorcolor_menu_display2",
1782 vectorcolor_menu_display[2].widget);
1783 if (gpiv_par->display__vector_color == SHOW_MAGNITUDE_GRAY) {
1784 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1785 (vectorcolor_menu_display[2].widget),
1786 TRUE);
1791 gtk_widget_ref (vectorcolor_menu_display[3].widget);
1792 gtk_object_set_data_full (GTK_OBJECT (display_menu),
1793 "vc_mv_3",
1794 vectorcolor_menu_display[3].widget,
1795 (GtkDestroyNotify) gtk_widget_unref);
1796 gtk_object_set_data (GTK_OBJECT (disp->mwin),
1797 "vectorcolor_menu_display3",
1798 vectorcolor_menu_display[3].widget);
1799 if (gpiv_par->display__vector_color == SHOW_MAGNITUDE) {
1800 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM
1801 (vectorcolor_menu_display[3].widget),
1802 TRUE);
1807 return display_menu;