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
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)
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 * (callback) functions for the display
31 * Revision 1.24 2007-12-19 08:42:35 gerber
34 * Revision 1.23 2007-11-23 16:24:07 gerber
35 * release 0.5.0: Kafka
37 * Revision 1.22 2007-03-22 16:00:32 gerber
38 * Added image processing tabulator
40 * Revision 1.21 2007/02/05 15:17:09 gerber
41 * auto stretching, broadcast display settings to buffers from preferences
43 * Revision 1.20 2007-01-29 11:27:43 gerber
44 * added image formats png, gif, tif png, bmp, improved buffer display
46 * Revision 1.19 2006/01/31 14:28:12 gerber
49 * Revision 1.18 2005/06/15 15:03:54 gerber
50 * Optional Anti Aliased canvas for viewer
52 * Revision 1.17 2005/06/15 09:40:40 gerber
55 * Revision 1.16 2005/02/26 09:17:13 gerber
56 * structured of interrogate function by using gpiv_piv_isiadapt
58 * Revision 1.15 2005/01/19 15:53:41 gerber
59 * Initiation of Data Acquisition (DAC); trigerring of lasers and camera
60 * by using RTAI and Realtime Linux, recording images from IEEE1394
61 * (Firewire) IIDC compliant camera's
63 * Revision 1.14 2004/10/15 19:24:05 gerber
64 * GPIV_ and Gpiv prefix to defines and structure names of libgpiv
66 * Revision 1.13 2004/06/14 21:19:23 gerber
67 * Image depth up to 16 bits.
68 * Improvement "single int" and "drag int" in Eval tab.
69 * Viewer's pop-up menu.
70 * Adaption for gpiv_matrix_* and gpiv_vector_*.
72 * See Changelog for further info.
74 * Revision 1.12 2003/09/01 11:17:14 gerber
75 * improved monitoring of interrogation process
77 * Revision 1.11 2003/08/22 15:24:52 gerber
78 * interactive spatial scaling
80 * Revision 1.10 2003/07/31 11:43:26 gerber
81 * display images in gnome canvas (HOERAreset)
83 * Revision 1.9 2003/07/13 14:38:18 gerber
84 * changed error handling of libgpiv
86 * Revision 1.8 2003/07/12 21:21:15 gerber
87 * changed error handling libgpiv
89 * Revision 1.6 2003/07/10 11:56:07 gerber
92 * Revision 1.5 2003/07/05 13:14:57 gerber
93 * drag and drop of a _series_ of filenames from NAUTILUS
95 * Revision 1.4 2003/07/04 10:47:00 gerber
98 * Revision 1.3 2003/07/03 17:08:02 gerber
99 * display ruler adjusted for scaled data
101 * Revision 1.2 2003/06/27 13:47:26 gerber
102 * display ruler, line/point evaluation
104 * Revision 1.1.1.1 2003/06/17 17:10:52 gerber
109 #include "gpiv_gui.h"
111 #include "display_interface.h"
113 #include "display_event.h"
114 #include "display_zoom.h"
116 #include "dialog_interface.h"
121 on_adj_changed__adapt_hcanvas (Display
*disp
124 on_adj_changed__adapt_vcanvas (Display
*disp
127 on_adj_changed__adapt_hruler (Display
*disp
130 on_adj_changed__adapt_vruler (Display
*disp
134 synchronize_menu (GtkWidget
*menu_src
,
140 * Callback display functions
143 on_button_display_origin_press_event (GtkWidget
*widget
,
144 GdkEventButton
*event
,
147 /*-----------------------------------------------------------------------------
150 gtk_menu_popup (GTK_MENU (display_act
->display_popupmenu
), NULL
, NULL
,
151 NULL
, NULL
, event
->button
, event
->time
);
157 on_display_set_focus (GtkWidget
*widget
,
160 /*-----------------------------------------------------------------------------
163 Display
*disp
= gtk_object_get_data(GTK_OBJECT (widget
), "disp");
164 GpivConsole
*gpiv
= gtk_object_get_data (GTK_OBJECT (widget
), "gpiv");
165 gint i
= 0, row_selected
= 0;
166 gchar
*text
, labelno
[GPIV_MAX_CHARS
];
167 gtk_clist_set_selection_mode (GTK_CLIST (gpiv
->clist_buf
),
168 GTK_SELECTION_SINGLE
);
170 g_snprintf (labelno
, GPIV_MAX_CHARS
,"%d", disp
->id
);
173 for (i
= 0; i
< nbufs
; i
++) {
174 gtk_clist_get_text (GTK_CLIST (gpiv
->clist_buf
), i
, 0, &text
);
176 if (strcmp(labelno
, text
) == 0) {
182 gtk_clist_select_row (GTK_CLIST (gpiv
->clist_buf
), row_selected
, 0);
184 /* g_warning("on_display_set_focus:: disp->id=%d row_selected=%d", */
185 /* disp->id, row_selected); */
187 gtk_clist_set_selection_mode (GTK_CLIST (gpiv
->clist_buf
),
188 GTK_SELECTION_EXTENDED
);
194 delete_display (GtkWidget
*widget
,
198 /*-----------------------------------------------------------------------------
201 GpivConsole
*gpiv
= gtk_object_get_data (GTK_OBJECT (widget
), "gpiv");
202 Display
*disp
= gtk_object_get_data (GTK_OBJECT (widget
), "disp");
205 close_buffer__check_saved (gpiv
, disp
);
211 on_adj_changed (GtkAdjustment
*adj
,
214 /*-----------------------------------------------------------------------------
217 Display
*disp
= gtk_object_get_data (GTK_OBJECT (adj
), "disp");
224 var_type
= atoi (gtk_object_get_data (GTK_OBJECT (adj
), "var_type"));
225 /* g_message ("ON_ADJ_CHANGED:: " */
226 /* "value = %f lower = %f upper = %f page_size = %f", */
227 /* adj->value, adj->lower, adj->upper, adj->page_size); */
229 if (var_type
== X_ADJ
) {
230 disp
->x_adj_value
= (gdouble
) adj
->value
;
231 disp
->x_adj_upper
= (gdouble
) adj
->upper
;
232 disp
->x_adj_lower
= (gdouble
) adj
->lower
;
233 disp
->x_page_size
= (gdouble
) adj
->page_size
;
235 on_adj_changed__adapt_hcanvas (disp
);
236 on_adj_changed__adapt_hruler (disp
);
239 if (var_type
== Y_ADJ
) {
240 disp
->y_adj_value
= (gdouble
) adj
->value
;
241 disp
->y_adj_upper
= (gdouble
) adj
->upper
;
242 disp
->y_adj_lower
= (gdouble
) adj
->lower
;
243 disp
->y_page_size
= (gdouble
) adj
->page_size
;
245 on_adj_changed__adapt_vcanvas (disp
);
246 on_adj_changed__adapt_vruler (disp
);
248 /* g_message ("N_SCROLLEDWINDOW_DISPLAY_ADJ_CHANGED:: x_adj_value = %f" */
249 /* " x_adj_lower = %f x_adj_upper = %f x_page_size = %f", */
250 /* disp->x_adj_value, disp->x_adj_lower, disp->x_adj_upper, */
251 /* disp->x_page_size); */
256 * Callbacks for menus
259 on_menu_synchronize_popup (GtkMenuItem
*menuitem
,
261 /*-----------------------------------------------------------------------------
262 * Synchronizing with popup menu item, which will actually change the
263 * displaying of the menubar.
266 Display
*disp
= display_act
;
267 gint menu_id
= (int) user_data
;
268 GtkWidget
*popupmenu
;
271 if (menu_id
== VIEW_MENUBAR
) {
272 popupmenu
= gtk_object_get_data(GTK_OBJECT(disp
->mwin
),
273 "view_menubar_popup_menu");
274 if (GTK_CHECK_MENU_ITEM(menuitem
)->active
== TRUE
) {
275 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
277 synchronize_menu (GTK_WIDGET (menuitem
), FALSE
, popupmenu
);
281 } else if (menu_id
== VIEW_RULERS
) {
282 popupmenu
= gtk_object_get_data( GTK_OBJECT (disp
->mwin
),
283 "view_rulers_popup_menu");
284 if (GTK_CHECK_MENU_ITEM (menuitem
)->active
== TRUE
) {
285 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
287 synchronize_menu (GTK_WIDGET (menuitem
), FALSE
, popupmenu
);
291 } else if (menu_id
== STRETCH_AUTO
) {
292 popupmenu
= gtk_object_get_data( GTK_OBJECT (disp
->mwin
),
293 "stretch_auto_popup_menu");
294 if (GTK_CHECK_MENU_ITEM (menuitem
)->active
== TRUE
) {
295 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
297 synchronize_menu (GTK_WIDGET (menuitem
), FALSE
, popupmenu
);
301 } else if (menu_id
== VIEW_BLUE
) {
302 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
303 "view_background_display0");
304 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
307 } else if (menu_id
== VIEW_BLACK
) {
308 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
309 "view_background_display1");
310 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
313 } else if (menu_id
== VIEW_IMAGE_A
) {
314 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
315 "view_background_display2");
316 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
319 } else if (menu_id
== VIEW_IMAGE_B
) {
320 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
321 "view_background_display3");
322 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
325 } else if (menu_id
== VIEW_INTERROGATION_AREAS
) {
326 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
327 "view_piv_display0");
328 if (GTK_CHECK_MENU_ITEM(menuitem
)->active
== TRUE
) {
329 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
331 synchronize_menu (GTK_WIDGET (menuitem
), FALSE
, popupmenu
);
335 } else if (menu_id
== VIEW_VELOCITY_VECTORS
) {
336 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
337 "view_piv_display1");
338 if (GTK_CHECK_MENU_ITEM (menuitem
)->active
== TRUE
) {
339 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
341 synchronize_menu (GTK_WIDGET (menuitem
), FALSE
, popupmenu
);
345 } else if (menu_id
== VIEW_NONE_SCALARS
) {
346 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
347 "view_scalardata_display0");
348 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
351 } else if (menu_id
== VIEW_VORTICITY
) {
352 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
353 "view_scalardata_display1");
354 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
357 } else if (menu_id
== VIEW_SHEAR_STRAIN
) {
358 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
359 "view_scalardata_display2");
360 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
363 } else if (menu_id
== VIEW_NORMAL_STRAIN
) {
364 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
365 "view_scalardata_display3");
366 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
369 } else if (menu_id
== VECTOR_COLOR_PEAK
) {
370 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
371 "vectorcolor_menu_display0");
372 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
375 } else if (menu_id
== VECTOR_COLOR_SNR
) {
376 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
377 "vectorcolor_menu_display1");
378 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
381 } else if (menu_id
== VECTOR_COLOR_MAGNGRAY
) {
382 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
383 "vectorcolor_menu_display2");
384 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
387 } else if (menu_id
== VECTOR_COLOR_MAGNCOLOR
) {
388 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
389 "vectorcolor_menu_display3");
390 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
397 on_stretch_activate (GtkMenuItem
*menuitem
,
399 /*-----------------------------------------------------------------------------
402 Display
*disp
= display_act
;
403 GtkAdjustment
*hadj
= GTK_ADJUSTMENT (disp
->hadj
);
405 GtkAdjustment
*vadj
= GTK_ADJUSTMENT (disp
->vadj
) ;
407 check__zoom_factor (&disp
->zoom_factor
);
408 stretch_window (disp
);
411 vadj
->upper
= (gdouble
) disp
->img
->image
->header
->nrows
* disp
->zoom_factor
;
412 vadj
->page_size
= (gdouble
) (disp
->img
->image
->header
->nrows
413 * disp
->zoom_factor
);
415 hadj
->upper
= (gdouble
) disp
->img
->image
->header
->ncolumns
* disp
->zoom_factor
;
416 hadj
->page_size
= (gdouble
) (disp
->img
->image
->header
->ncolumns
417 * disp
->zoom_factor
);
422 on_zoom_activate (GtkMenuItem
*menuitem
,
424 /*-----------------------------------------------------------------------------
427 Display
*disp
= display_act
;
428 gint zoom_index
= (int) user_data
;
430 GtkWidget
*popupmenu
;
433 key
= g_strdup_printf ("zmv_%d", (int) zoom_index
);
434 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
), key
);
436 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
442 on_vector_scale_activate (GtkMenuItem
*menuitem
,
444 /*-----------------------------------------------------------------------------
447 Display
*disp
= display_act
;
449 GtkWidget
*popupmenu
;
452 fact
= fact
<< (int) user_data
;
453 gpiv_par
->display__vector_scale
= fact
;
455 key
= g_strdup_printf ("vs_mv_%d", (int) user_data
);
456 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
), key
);
457 synchronize_menu (GTK_WIDGET (menuitem
), TRUE
, popupmenu
);
463 * Callbacks for popup menus
466 view_toggle_menubar (GtkWidget
*widget
,
469 /*-----------------------------------------------------------------------------
472 Display
*disp
= display_act
;
474 gtk_object_get_data (GTK_OBJECT(disp
->mwin
),
478 * Synchronizing menu item from menu bar.
480 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
481 synchronize_menu (widget
, TRUE
, menu
);
483 synchronize_menu (widget
, FALSE
, menu
);
487 * Changing the displaying of menubar
489 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
490 gtk_widget_show (GTK_WIDGET (disp
->menubar
));
492 gtk_widget_hide (GTK_WIDGET (disp
->menubar
));
499 view_toggle_rulers (GtkWidget
*widget
,
502 /*-----------------------------------------------------------------------------
505 Display
*disp
= display_act
;
509 * Synchronizing menu item from menu bar.
511 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
512 synchronize_menu (widget
, TRUE
, disp
->view_rulers
);
514 synchronize_menu (widget
, FALSE
, disp
->view_rulers
);
518 * Changing the displaying of rulers
520 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
521 gtk_widget_show (GTK_WIDGET (disp
->hruler
));
522 gtk_widget_show (GTK_WIDGET (disp
->vruler
));
524 gtk_widget_hide (GTK_WIDGET (disp
->hruler
));
525 gtk_widget_hide (GTK_WIDGET (disp
->vruler
));
532 view_toggle_stretch_display_auto (GtkWidget
*widget
,
535 /*-----------------------------------------------------------------------------
538 Display
*disp
= display_act
;
542 * Synchronizing menu item from menu bar.
544 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
545 synchronize_menu (widget
, TRUE
, disp
->stretch_auto
);
547 synchronize_menu (widget
, FALSE
, disp
->stretch_auto
);
551 * Changing the displaying of rulers
553 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
554 gpiv_par
->display__stretch_auto
= TRUE
;
555 check__zoom_factor (&disp
->zoom_factor
);
556 stretch_window (disp
);
558 gpiv_par
->display__stretch_auto
= FALSE
;
565 view_toggle_stretch_display (GtkWidget
*widget
,
568 /*-----------------------------------------------------------------------------
571 Display
*disp
= display_act
;
572 gint screen_width
= gdk_screen_width ();
573 gint screen_height
= gdk_screen_height ();
576 check__zoom_factor (&disp
->zoom_factor
);
577 stretch_window (disp
);
582 select_zoomscale (gpointer data
,
586 /*-----------------------------------------------------------------------------
589 Display
*disp
= display_act
;
590 gint zoom_index
= action
;
591 gchar
*key1
= NULL
, *key2
= NULL
;
592 GtkWidget
*popupmenu
, *menu
;
595 key1
= g_strdup_printf ("zmv_%d", (int) zoom_index
);
596 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
), key1
);
598 key2
= g_strdup_printf ("zoom_menu_%d", (int) zoom_index
);
599 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
), key2
);
601 synchronize_menu (popupmenu
, TRUE
, menu
);
603 zoom_display (disp
, zoom_index
);
611 select_view_background (gpointer data
,
614 /*-----------------------------------------------------------------------------
618 Display
*disp
= display_act
;
619 GtkWidget
*menu
= NULL
, *popupmenu
= NULL
;
621 gpiv_par
->display__backgrnd
= action
;
626 * Select menu and popup menu widgets
628 if (action
== SHOW_BG_DARKBLUE
) {
629 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
630 "blue_background_menu");
631 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
632 "view_background_display0");
634 } else if (action
== SHOW_BG_BLACK
) {
635 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
636 "black_background_menu");
637 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
638 "view_background_display1");
640 } else if (action
== SHOW_BG_IMG1
) {
641 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
642 "image_a_background_menu");
643 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
644 "view_background_display2");
646 } else if (action
== SHOW_BG_IMG2
) {
647 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
648 "image_b_background_menu");
649 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
650 "view_background_display3");
656 synchronize_menu (popupmenu
, TRUE
, menu
);
661 if (action
== SHOW_BG_DARKBLUE
) {
663 if (disp
->gci_bg
!= NULL
) {
664 gnome_canvas_item_set (GNOME_CANVAS_ITEM (disp
->gci_bg
),
669 } else if (action
== SHOW_BG_BLACK
) {
671 if (disp
->gci_bg
!= NULL
) {
672 gnome_canvas_item_set (GNOME_CANVAS_ITEM (disp
->gci_bg
),
677 } else if (action
== SHOW_BG_IMG1
) {
678 show_img1 (display_act
);
680 } else if (action
== SHOW_BG_IMG2
) {
681 show_img2 (display_act
);
685 if (disp
->gci_bg
!= NULL
) {
686 gnome_canvas_item_set (GNOME_CANVAS_ITEM (disp
->gci_bg
),
690 g_warning (_("select_view_background: should not arrive here"));
699 view_toggle_intregs (GtkWidget
*widget
,
702 /*-----------------------------------------------------------------------------
705 Display
*disp
= display_act
;
708 * Synchronizing menu item from menu bar.
710 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
711 synchronize_menu (widget
, TRUE
, disp
->view_interrogation_areas
);
713 synchronize_menu (widget
, FALSE
, disp
->view_interrogation_areas
);
717 * Changing the displaying of interrogation area's
719 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
720 if (view_toggle_intregs_flag
) {
721 if (display_act
->display_intregs
== FALSE
) {
722 display_act
->display_intregs
= TRUE
;
723 create_all_intregs (display_act
);
724 show_all_intregs (display_act
);
728 if (display_act
->display_intregs
== TRUE
) {
729 destroy_all_intregs(display_act
);
730 display_act
->display_intregs
= FALSE
;
738 view_toggle_piv (GtkWidget
*widget
,
741 /*-----------------------------------------------------------------------------
744 Display
*disp
= display_act
;
747 * Synchronizing menu item from menu bar.
749 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
750 synchronize_menu (widget
, TRUE
, disp
->view_velocity_vectors
);
752 synchronize_menu (widget
, FALSE
, disp
->view_velocity_vectors
);
756 * Changing the displaying of piv data (velocity vectors)
758 if (display_act
->pida
->exist_piv
) {
759 if (GTK_CHECK_MENU_ITEM (widget
)->active
== TRUE
) {
760 if (display_act
->display_piv
== FALSE
) {
761 display_act
->display_piv
= TRUE
;
762 create_all_vectors (display_act
->pida
);
765 if (display_act
->display_piv
== TRUE
) {
766 display_act
->display_piv
= FALSE
;
767 destroy_all_vectors (display_act
->pida
);
776 select_view_scalardata (gpointer data
,
780 /*-----------------------------------------------------------------------------
784 Display
*disp
= display_act
;
785 GtkWidget
*menu
= NULL
, *popupmenu
= NULL
;
788 gpiv_par
->display__scalar
= action
;
790 hide_all_scalars (disp
, GPIV_VORTICITY
);
791 hide_all_scalars (disp
, GPIV_S_STRAIN
);
792 hide_all_scalars (disp
, GPIV_N_STRAIN
);
795 * Select menu and popup menu widgets
797 if (action
== SHOW_SC_NONE
) {
798 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
799 "view_none_scalars");
800 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
801 "view_scalardata_display0");
803 } else if (action
== SHOW_SC_VORTICITY
) {
804 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
806 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
807 "view_scalardata_display1");
809 } else if (action
== SHOW_SC_SSTRAIN
) {
810 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
811 "view_shear_strain");
812 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
813 "view_scalardata_display2");
815 } else if (action
== SHOW_SC_NSTRAIN
) {
816 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
817 "view_normal_strain");
818 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
819 "view_scalardata_display3");
823 synchronize_menu (popupmenu
, TRUE
, menu
);
828 if (action
== SHOW_SC_NONE
) {
829 hide_all_scalars (disp
, GPIV_VORTICITY
);
830 hide_all_scalars (disp
, GPIV_S_STRAIN
);
831 hide_all_scalars (disp
, GPIV_N_STRAIN
);
833 } else if (action
== SHOW_SC_VORTICITY
) {
834 show_all_scalars (display_act
, GPIV_VORTICITY
);
836 } else if (action
== SHOW_SC_SSTRAIN
) {
837 show_all_scalars (display_act
, GPIV_S_STRAIN
);
839 } else if (action
== SHOW_SC_NSTRAIN
) {
840 show_all_scalars (display_act
, GPIV_N_STRAIN
);
844 if (disp
->gci_bg
!= NULL
) {
845 gnome_canvas_item_set (GNOME_CANVAS_ITEM (disp
->gci_bg
),
849 g_warning (_("select_view_scalardata: should not arrive here"));
858 select_vectorscale (gpointer data
,
862 /*-----------------------------------------------------------------------------
863 Setting vector_scale from display pop-up menu */
865 Display
*disp
= display_act
;
866 gchar
*key1
= NULL
, *key2
= NULL
;
867 GtkWidget
*menu
, *popupmenu
;
870 gpiv_par
->display__vector_scale
= fact
<< (int) action
;;
872 key1
= g_strdup_printf ("vector_scale_menu_%d", (int) action
);
873 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
), key1
);
875 key2
= g_strdup_printf ("vs_mv_%d", (int) action
);
876 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
), key2
);
878 synchronize_menu (popupmenu
, TRUE
, menu
);
880 update_all_vectors (display_act
->pida
);
888 select_vectorcolor (gpointer data
,
892 /*-----------------------------------------------------------------------------
893 Setting vector_color from display pop-up menu */
895 Display
*disp
= display_act
;
896 GtkWidget
*menu
, *popupmenu
;
899 * Select menu and popup menu widgets
901 if (action
== SHOW_PEAKNR
) {
902 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
903 "vector_color_peak_nr");
904 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
905 "vectorcolor_menu_display0");
907 } else if (action
== SHOW_SNR
) {
908 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
910 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
911 "vectorcolor_menu_display1");
913 } else if (action
== SHOW_MAGNITUDE_GRAY
) {
914 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
915 "vector_color_magngray");
916 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
917 "vectorcolor_menu_display2");
919 } else if (action
== SHOW_MAGNITUDE
) {
920 menu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
921 "vector_color_magncolor");
922 popupmenu
= gtk_object_get_data (GTK_OBJECT (disp
->mwin
),
923 "vectorcolor_menu_display3");
929 synchronize_menu (popupmenu
, TRUE
, menu
);
934 gpiv_par
->display__vector_color
= action
;
935 update_all_vectors (display_act
->pida
);
941 nav_popup_click_handler (GtkWidget
*widget
,
942 GdkEventButton
*event
,
945 /*-----------------------------------------------------------------------------
948 /* Seee gimp: nav_window.c */
954 on_view_options_clicked (GtkButton
*button
,
957 /*-----------------------------------------------------------------------------
968 on_adj_changed__adapt_hcanvas (Display
*disp
970 /*-----------------------------------------------------------------------------
974 gnome_canvas_get_scroll_offsets (GNOME_CANVAS (disp
->canvas
),
977 gnome_canvas_scroll_to (GNOME_CANVAS (disp
->canvas
),
978 (int) disp
->x_adj_value
,
984 on_adj_changed__adapt_vcanvas (Display
*disp
986 /*-----------------------------------------------------------------------------
990 gnome_canvas_get_scroll_offsets (GNOME_CANVAS (disp
->canvas
),
993 gnome_canvas_scroll_to (GNOME_CANVAS (disp
->canvas
),
995 (int) disp
->y_adj_value
);
999 on_adj_changed__adapt_hruler (Display
*disp
1001 /*-----------------------------------------------------------------------------
1004 set__hrulerscale (disp
);
1009 on_adj_changed__adapt_vruler (Display
*disp
1011 /*-----------------------------------------------------------------------------
1014 set__vrulerscale (disp
);
1019 synchronize_menu (GtkWidget
*menu_src
,
1021 GtkWidget
*menu_dest
1023 /*-----------------------------------------------------------------------------
1024 * Synchronizes menu_dest with menu_src, which is in 'state' position.
1025 * Only change if the state between menu_src and menu_dest differ in order
1029 if (GTK_CHECK_MENU_ITEM (menu_src
) != NULL
1030 && GTK_CHECK_MENU_ITEM (menu_src
)->active
== state
) {
1031 if (GTK_CHECK_MENU_ITEM (menu_dest
) != NULL
1032 && gtk_check_menu_item_get_active (GTK_CHECK_MENU_ITEM (menu_dest
))
1034 gtk_check_menu_item_set_active (GTK_CHECK_MENU_ITEM (menu_dest
),