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 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 * utility functions for gpiv
31 * Revision 1.22 2008-04-28 12:00:58 gerber
32 * hdf-formatted files are now with .hdf extension (previously: .gpi)
34 * Revision 1.21 2007-12-19 08:42:35 gerber
37 * Revision 1.20 2007-11-23 16:24:08 gerber
38 * release 0.5.0: Kafka
40 * Revision 1.19 2007-06-06 17:00:48 gerber
41 * Retreives images/data from URI using Gnome Virtual File System.
43 * Revision 1.18 2007-03-22 16:00:32 gerber
44 * Added image processing tabulator
46 * Revision 1.17 2007-01-29 11:27:44 gerber
47 * added image formats png, gif, tif png, bmp, improved buffer display
49 * Revision 1.16 2006-09-18 07:27:06 gerber
50 * *** empty log message ***
52 * Revision 1.15 2006/01/29 15:36:56 gerber
53 * repaired a few annoying bugs
55 * Revision 1.13 2005/03/03 16:21:09 gerber
58 * Revision 1.12 2005/02/26 09:43:31 gerber
59 * parameter flags (parameter_logic) defined as gboolean
61 * Revision 1.11 2005/02/26 09:17:14 gerber
62 * structured of interrogate function by using gpiv_piv_isiadapt
64 * Revision 1.10 2005/01/19 15:53:43 gerber
65 * Initiation of Data Acquisition (DAC); trigerring of lasers and camera
66 * by using RTAI and Realtime Linux, recording images from IEEE1394
67 * (Firewire) IIDC compliant camera's
69 * Revision 1.9 2004/10/15 19:24:05 gerber
70 * GPIV_ and Gpiv prefix to defines and structure names of libgpiv
72 * Revision 1.8 2004/06/14 21:19:23 gerber
73 * Image depth up to 16 bits.
74 * Improvement "single int" and "drag int" in Eval tab.
75 * Viewer's pop-up menu.
76 * Adaption for gpiv_matrix_* and gpiv_vector_*.
78 * See Changelog for further info.
80 * Revision 1.7 2003/09/04 13:31:55 gerber
81 * init of printing (unfinished)
83 * Revision 1.6 2003/09/01 11:17:15 gerber
84 * improved monitoring of interrogation process
86 * Revision 1.5 2003/08/22 15:24:53 gerber
87 * interactive spatial scaling
89 * Revision 1.4 2003/07/31 11:43:26 gerber
90 * display images in gnome canvas (HOERAreset)
92 * Revision 1.3 2003/07/25 15:40:24 gerber
93 * removed/disabled setting of correlation in Eval tab, Correlation type in Image info tab
95 * Revision 1.2 2003/06/27 13:47:26 gerber
96 * display ruler, line/point evaluation
98 * Revision 1.1.1.1 2003/06/17 17:10:52 gerber
103 #include "gpiv_gui.h"
106 #include "dialog_interface.h"
107 #include "console_interface.h"
109 #include "dac_interface.h"
113 update_imgh_entries (GpivConsole
*gpiv
,
114 GpivImagePar
*image_par
116 /*-----------------------------------------------------------------------------
118 * Refreshes image header entries and labels (when a different buffer is
121 * PROTOTYPE LOCATATION:
125 * gpiv: console structure
126 * image_par: image parameters
129 *---------------------------------------------------------------------------*/
131 gchar label
[GPIV_MAX_CHARS
];
132 gchar
*tmp_name
, *text_uri
;
133 GnomeVFSURI
* uri
= NULL
;
135 if (display_act
!= NULL
) {
136 g_snprintf (label
, GPIV_MAX_CHARS
,"%d", display_act
->id
);
137 gtk_label_set_text (GTK_LABEL (gpiv
->imgh
->label_bufno
),
140 text_uri
= gnome_vfs_make_uri_from_input
141 ((const gchar
*) display_act
->file_uri_name
);
142 if ((uri
= gnome_vfs_uri_new (text_uri
)) == NULL
) return;
144 if (gnome_vfs_uri_is_local (uri
)) {
145 gtk_label_set_text (GTK_LABEL (gpiv
->imgh
->label_label_name
),
148 gtk_label_set_text (GTK_LABEL (gpiv
->imgh
->label_label_name
),
151 gtk_label_set_text (GTK_LABEL (gpiv
->imgh
->label_name
),
152 display_act
->file_uri_name
);
153 g_snprintf (label
, GPIV_MAX_CHARS
, "%d", display_act
->img
->image
->header
->ncolumns
);
154 gtk_label_set_text (GTK_LABEL (gpiv
->imgh
->label_ncols
),
156 g_snprintf (label
, GPIV_MAX_CHARS
, "%d", display_act
->img
->image
->header
->nrows
);
157 gtk_label_set_text (GTK_LABEL (gpiv
->imgh
->label_nrows
),
162 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_imgtitle
),
166 gtk_spin_button_set_value (GTK_SPIN_BUTTON (gpiv
->imgh
->spinbutton_colpos
),
168 gtk_spin_button_set_value (GTK_SPIN_BUTTON (gpiv
->imgh
->spinbutton_rowpos
),
170 gtk_spin_button_set_value (GTK_SPIN_BUTTON (gpiv
->imgh
->spinbutton_sscale
),
172 gtk_spin_button_set_value (GTK_SPIN_BUTTON (gpiv
->imgh
->spinbutton_tscale
),
176 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_crdate
),
177 image_par
->creation_date
);
178 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_location
),
179 image_par
->location
);
180 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_author
),
182 gtk_entry_set_text (GTK_ENTRY(gpiv
->imgh
->entry_software
),
183 image_par
->software
);
184 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_source
),
186 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_usertext
),
187 image_par
->usertext
);
188 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_warning
),
190 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_disclaimer
),
191 image_par
->disclaimer
);
192 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_comment
),
194 gtk_entry_set_text (GTK_ENTRY(gpiv
->imgh
->entry_copyright
),
195 image_par
->copyright
);
196 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_email
),
198 gtk_entry_set_text (GTK_ENTRY (gpiv
->imgh
->entry_url
),
205 update_eval_entries (GpivConsole
*gpiv
,
206 GpivImagePar
*image_par
208 /*-----------------------------------------------------------------------------
210 * Refreshes spinners of col/row start/ end/ shift for image size
211 * (when a different buffer is selected)
213 * PROTOTYPE LOCATATION:
217 * gpiv: console structure
218 * image_par: image parameters
221 *---------------------------------------------------------------------------*/
223 if (display_act
!= NULL
) {
224 gtk_spin_button_set_range (GTK_SPIN_BUTTON
225 (gpiv
->piveval
->spinbutton_colstart
),
227 image_par
->ncolumns
- 1);
228 gtk_spin_button_set_range (GTK_SPIN_BUTTON
229 (gpiv
->piveval
->spinbutton_colend
),
231 image_par
->ncolumns
- 1);
232 gtk_spin_button_set_range (GTK_SPIN_BUTTON
233 (gpiv
->piveval
->spinbutton_preshiftcol
),
234 0.0 - (image_par
->ncolumns
- 1),
235 image_par
->ncolumns
- 1);
236 gtk_spin_button_set_range (GTK_SPIN_BUTTON
237 (gpiv
->piveval
->spinbutton_rowstart
),
239 image_par
->nrows
- 1);
240 gtk_spin_button_set_range (GTK_SPIN_BUTTON
241 (gpiv
->piveval
->spinbutton_rowend
),
243 display_act
->img
->image
->header
->nrows
- 1);
244 gtk_spin_button_set_range (GTK_SPIN_BUTTON
245 (gpiv
->piveval
->spinbutton_preshiftrow
),
246 0.0 - (image_par
->nrows
- 1),
247 image_par
->nrows
- 1);
251 * Adjust spinbutton values if they are invalid
254 if (gl_piv_par
->col_start
> image_par
->ncolumns
- 1) {
255 gl_piv_par
->col_start
= image_par
->ncolumns
- 1;
256 gtk_spin_button_set_value (GTK_SPIN_BUTTON
257 (gpiv
->piveval
->spinbutton_colstart
),
258 gl_piv_par
->col_start
);
261 if (gl_piv_par
->col_end
> image_par
->ncolumns
- 1) {
262 gl_piv_par
->col_end
= image_par
->ncolumns
- 1;
263 gtk_spin_button_set_value (GTK_SPIN_BUTTON
264 (gpiv
->piveval
->spinbutton_colend
),
265 gl_piv_par
->col_end
);
269 if (gl_piv_par
->pre_shift_col
> image_par
->ncolumns
- 1) {
270 gl_piv_par
->pre_shift_col
= image_par
->ncolumns
- 1;
271 gtk_spin_button_set_value (GTK_SPIN_BUTTON
272 (gpiv
->piveval
->spinbutton_preshiftcol
),
273 gl_piv_par
->pre_shift_col
);
276 if (gl_piv_par
->pre_shift_col
< (0.0 - (image_par
->ncolumns
- 1))) {
277 gl_piv_par
->pre_shift_col
= - (image_par
->ncolumns
- 1);
278 gtk_spin_button_set_value (GTK_SPIN_BUTTON
279 (gpiv
->piveval
->spinbutton_preshiftcol
),
280 gl_piv_par
->pre_shift_col
);
286 if (gl_piv_par
->row_start
> image_par
->nrows
- 1) {
287 gl_piv_par
->row_start
= image_par
->nrows
- 1;
288 gtk_spin_button_set_value (GTK_SPIN_BUTTON
289 (gpiv
->piveval
->spinbutton_rowstart
),
290 gl_piv_par
->row_start
);
293 if (gl_piv_par
->row_end
> image_par
->nrows
- 1) {
294 gl_piv_par
->row_end
= image_par
->nrows
- 1;
295 gtk_spin_button_set_value (GTK_SPIN_BUTTON
296 (gpiv
->piveval
->spinbutton_rowend
),
297 gl_piv_par
->row_end
);
301 if (gl_piv_par
->pre_shift_row
> image_par
->nrows
- 1) {
302 gl_piv_par
->pre_shift_row
= image_par
->nrows
- 1;
303 gtk_spin_button_set_value (GTK_SPIN_BUTTON
304 (gpiv
->piveval
->spinbutton_preshiftrow
),
305 gl_piv_par
->pre_shift_row
);
308 if (gl_piv_par
->pre_shift_row
< (0.0 - (image_par
->nrows
- 1))) {
309 gl_piv_par
->pre_shift_row
= - (image_par
->nrows
- 1);
310 gtk_spin_button_set_value (GTK_SPIN_BUTTON
311 (gpiv
->piveval
->spinbutton_preshiftrow
),
312 gl_piv_par
->pre_shift_row
);
321 month_name (GDateMonth month
)
322 /*--------------------------------------------------------------------
323 * returns the month name
328 if (month
== G_DATE_JANUARY
) {
329 name
= g_strdup ( _("January"));
330 } else if (month
== G_DATE_FEBRUARY
) {
331 name
= g_strdup ( _("February"));
332 } else if (month
== G_DATE_MARCH
) {
333 name
= g_strdup ( _("March"));
334 } else if (month
== G_DATE_APRIL
) {
335 name
= g_strdup ( _("April"));
336 } else if (month
== G_DATE_MAY
) {
337 name
= g_strdup ( _("May"));
338 } else if (month
== G_DATE_JUNE
) {
339 name
= g_strdup ( _("June"));
340 } else if (month
== G_DATE_JULY
) {
341 name
= g_strdup ( _("July"));
342 } else if (month
== G_DATE_AUGUST
) {
343 name
= g_strdup ( _("August"));
344 } else if (month
== G_DATE_SEPTEMBER
) {
345 name
= g_strdup ( _("September"));
346 } else if (month
== G_DATE_OCTOBER
) {
347 name
= g_strdup ( _("October"));
348 } else if (month
== G_DATE_NOVEMBER
) {
349 name
= g_strdup ( _("November"));
350 } else if (month
== G_DATE_DECEMBER
) {
351 name
= g_strdup ( _("December"));
352 } else if (month
== G_DATE_BAD_MONTH
) {
353 name
= g_strdup ( _("Bad month"));
355 name
= g_strdup ( _("month_name: Unvalid month"));
365 /*--------------------------------------------------------------------
366 * Frees all allocated memory data from the application
371 for (i
= 1; i
< gpiv_var
->number_fnames_last
; i
++) {
372 g_free (gpiv_var
->fn_last
[i
]);
379 push_list_lastfnames (gchar
*fname
381 /*--------------------------------------------------------------------
382 * Pushes fname on gpiv_var fn_last[0]
383 * Eventually removes fn_last[MAX_LIST]
386 gchar fname_nr
[GPIV_MAX_CHARS
];
389 gnome_config_push_prefix ("/gpiv/RuntimeVariables/");
390 if (gpiv_var
->number_fnames_last
< MAX_LIST
) {
391 gpiv_var
->number_fnames_last
++;
392 gnome_config_set_int ("number_fnames_last",
393 gpiv_var
->number_fnames_last
);
396 for (i
= gpiv_var
->number_fnames_last
- 1; i
> 0; i
--) {
397 gpiv_var
->fn_last
[i
] = g_strdup (gpiv_var
->fn_last
[i
- 1]);
400 gpiv_var
->fn_last
[0] = g_strdup (fname
);
401 for (i
= 0; i
< gpiv_var
->number_fnames_last
; i
++) {
402 g_snprintf (fname_nr
, GPIV_MAX_CHARS
,"fname_last_%d", i
);
403 gnome_config_set_string (fname_nr
, gpiv_var
->fn_last
[i
]);
405 if (gpiv_par
->verbose
)
406 g_message ("push_list_lastfnames: fn_last[0]=%s", gpiv_var
->fn_last
[0]);
408 gnome_config_pop_prefix ();
409 gnome_config_sync ();
415 get_row_from_id (GpivConsole
*gpiv
,
418 /*-----------------------------------------------------------------------------
419 * Searches the row of buffer clist that belongs to deplay identity.
423 Display
*display_loc
= NULL
;
426 for (i
= 0; i
< nbufs
; i
++) {
427 display_loc
= gtk_clist_get_row_data (GTK_CLIST (gpiv
->clist_buf
), i
);
428 if (disp
->id
== display_loc
->id
) row
= i
;
438 point_to_existbuffer (GpivConsole
*gpiv
440 /*-----------------------------------------------------------------------------
441 * Point display_act to first existing buffer
448 display_act
= gtk_clist_get_row_data (GTK_CLIST (gpiv
->clist_buf
), 0);
449 gtk_clist_select_row (GTK_CLIST (gpiv
->clist_buf
), 0, 0);
456 close_buffer__check_saved (GpivConsole
*gpiv
,
459 /*-----------------------------------------------------------------------------
460 * closes buffer, checks if (modified) image and data have been saved.
461 * If unsaved, close_buffer_dialog will direct to on_close_buffer_response,
465 char message
[2 * GPIV_MAX_CHARS
];
466 GtkDialog
*close_buffer_dialog
;
467 guint row
= get_row_from_id (gpiv
, disp
);
470 if (disp
== NULL
) return;
473 g_message ("close_buffer__check_saved:: id = %d saved_img = %d",
474 disp
->id
, display_act
->img
->saved_img
);
477 if (!disp
->img
->saved_img
478 || !disp
->pida
->saved_piv
479 || !disp
->pida
->saved_histo
480 || !disp
->pida
->saved_vor
481 || !disp
->pida
->saved_nstrain
482 || !disp
->pida
->saved_sstrain
) {
484 * Data not stored, deleting buffer only after permission
486 g_snprintf (message
, 2 * GPIV_MAX_CHARS
,
487 _("There are unsaved data that will be lost.\n\
488 Are you sure you want to close buffer #%d ?"),
490 close_buffer_dialog
= create_close_buffer_dialog (gpiv
, disp
, message
);
491 gtk_widget_show (GTK_WIDGET (close_buffer_dialog
));
495 * No modified / new data or already stored, deleting buffer unconditionally
497 close_buffer (gpiv
, disp
);
505 close_buffer (GpivConsole
*gpiv
,
508 /*-----------------------------------------------------------------------------
509 * closes all data of a display and cleans up clist of buffer
512 guint row
= get_row_from_id (gpiv
, disp
);
514 free_all_bufmems (disp
);
515 g_free (disp
->file_uri_name
);
516 gtk_widget_destroy (GTK_WIDGET (disp
->mwin
));
522 gtk_clist_remove (GTK_CLIST (gpiv
->clist_buf
),
527 * Point display to an existing buffer
530 update_imgh_entries (gpiv
, gl_image_par
);
533 point_to_existbuffer (gpiv
);
541 image_mean (guint16
**img
,
544 /*-----------------------------------------------------------------------------
547 int i
, j
, ncount
= ncols
* nrows
;
548 float img_sum
= 0.0, mean
= 0.0;
550 for (i
= 0; i
< nrows
; i
++) {
551 for (j
= 0; j
< ncols
; j
++) {
552 img_sum
+= (float) img
[i
][j
];
556 mean
= img_sum
/ (float) ncount
;
563 **alloc_gci_matrix (long nr
,
566 /*-----------------------------------------------------------------------------
567 * Allocates 2-dimensional array for GnomeCanvasItem
571 GnomeCanvasItem
**item
;
575 * allocate pointers to rows
577 item
= (GnomeCanvasItem
**) g_malloc ((size_t) ((nr
- 1) *
578 sizeof (GnomeCanvasItem
*)));
579 if (!item
) gpiv_error ("%s: allocation failure 1 in g_malloc()",
584 * allocate rows and set pointers to them
586 item
[0] = (GnomeCanvasItem
*) g_malloc ((size_t) ((nr
* nc
- 1) *
587 sizeof (GnomeCanvasItem
)));
588 if (!item
[0]) gpiv_error ("%s: allocation failure 2 in g_malloc()",
592 for (i
= 1; i
<= nr
; i
++) item
[i
] = item
[i
-1] + 1;
595 * return pointer to array of pointers to rows
603 free_gci_matrix (GnomeCanvasItem
**item
,
607 /*-----------------------------------------------------------------------------
608 * Frees 2-dimensional array for GnomeCanvasItem
611 assert (item
[0] != NULL
);
613 free ((char*) (item
[0] - 1));
614 free ((char*) (item
- 1));
620 free_all_bufmems (Display
* disp
)
621 /*-----------------------------------------------------------------------------
622 * Frees all dynamic memory of Buffer structure
626 free_img_bufmems (disp
);
627 free_eval_bufmems (disp
);
628 free_valid_bufmems (disp
);
629 free_post_bufmems (disp
);
636 free_img_bufmems (Display
* disp
)
637 /*-----------------------------------------------------------------------------
638 * Frees all dynamic memory of Buffer structure of img
641 /* char *foo = '\0'; */
642 /* g_snprintf (disp->file_uri_name, GPIV_MAX_CHARS, ""); */
645 if (disp
->img
->exist_img
) {
646 gdk_pixbuf_unref (disp
->img
->pixbuf1
);
647 if (disp
->img
->rgbbuf_img1
!= NULL
) {
648 g_free (disp
->img
->rgbbuf_img1
);
649 disp
->img
->rgbbuf_img1
= NULL
;
652 gdk_pixbuf_unref (disp
->img
->pixbuf2
);
653 if (disp
->img
->rgbbuf_img2
!= NULL
) {
654 g_free (disp
->img
->rgbbuf_img2
);
655 disp
->img
->rgbbuf_img2
= NULL
;
659 gpiv_free_img (disp
->img
->image
);
661 disp
->img
->exist_img
= FALSE
;
664 /* destroy_background (disp); */
665 destroy_background(display_act
->gci_bg
);
666 if (disp
->intreg
->exist_int
) {
667 destroy_all_intregs (disp
);
668 disp
->intreg
->exist_int
= FALSE
;
676 free_eval_bufmems (Display
* disp
)
677 /*-----------------------------------------------------------------------------
678 * Frees all dynamic memory of Buffer structure of evaluation processing
682 if (disp
->pida
->exist_piv
) {
683 destroy_all_vectors (disp
->pida
);
684 gpiv_free_pivdata (disp
->pida
->piv_data
);
685 disp
->pida
->exist_piv
= FALSE
;
688 if (disp
->pida
->scaled_piv
) {
689 gpiv_free_pivdata (disp
->pida
->piv_data_scaled
);
690 disp
->pida
->scaled_piv
= FALSE
;
693 disp
->pida
->averaged_piv
= FALSE
;
699 free_valid_bufmems (Display
* disp
)
700 /*-----------------------------------------------------------------------------
701 * Frees all dynamic memory of Buffer structure of validation processing
705 if (disp
->pida
->exist_histo
) {
706 gpiv_free_bindata (disp
->pida
->klass
);
707 disp
->pida
->exist_valid
= FALSE
;
714 free_post_bufmems (Display
* disp
716 /*-----------------------------------------------------------------------------
717 * Frees all dynamic memory of Buffer structure of post processing
721 if (disp
->pida
->exist_vor
) {
722 destroy_all_scalars (disp
, GPIV_VORTICITY
);
723 gpiv_free_scdata (disp
->pida
->vor_data
);
724 disp
->pida
->exist_vor
= FALSE
;
725 disp
->pida
->post_par
->diff_type__set
= FALSE
;
726 disp
->pida
->post_par
->operator_vorstra__set
= FALSE
;
729 if (disp
->pida
->exist_vor_scaled
) {
730 gpiv_free_scdata (disp
->pida
->vor_data_scaled
);
731 disp
->pida
->exist_vor_scaled
= FALSE
;
734 if (disp
->pida
->exist_sstrain
) {
735 destroy_all_scalars (disp
, GPIV_S_STRAIN
);
736 gpiv_free_scdata (disp
->pida
->sstrain_data
);
737 disp
->pida
->exist_sstrain
= FALSE
;
738 disp
->pida
->post_par
->diff_type__set
= FALSE
;
739 disp
->pida
->post_par
->operator_vorstra__set
= FALSE
;
742 if (disp
->pida
->exist_sstrain_scaled
) {
743 gpiv_free_scdata (disp
->pida
->sstrain_data_scaled
);
744 disp
->pida
->exist_sstrain_scaled
= FALSE
;
747 if (disp
->pida
->exist_nstrain
) {
748 destroy_all_scalars (disp
, GPIV_N_STRAIN
);
749 gpiv_free_scdata (disp
->pida
->nstrain_data
);
750 disp
->pida
->exist_nstrain
= FALSE
;
751 disp
->pida
->post_par
->diff_type__set
= FALSE
;
752 disp
->pida
->post_par
->operator_vorstra__set
= FALSE
;
755 if (disp
->pida
->exist_nstrain_scaled
) {
756 gpiv_free_scdata (disp
->pida
->nstrain_data_scaled
);
757 disp
->pida
->exist_nstrain_scaled
= FALSE
;
769 on_widget_leave (GtkContainer
* container
,
770 GtkDirectionType direction
,
773 /*-----------------------------------------------------------------------------
774 * Resets text in application bar to default after poiner leaves
778 GpivConsole
*gpiv
= gtk_object_get_data (GTK_OBJECT (container
), "gpiv");
779 gnome_appbar_push (GNOME_APPBAR (gpiv
->appbar
), msg_default
);
785 sensitive (GpivConsole
*gpiv
,
786 enum WidgetSet wi_set
,
788 /*-----------------------------------------------------------------------------
789 * Changes the sensitivity of a set of witgets
794 Dac
*dac
= gpiv
->dac
;
796 Trig
*trig
= dac
->trig
;
799 Dac
*dac
= gpiv
->dac
;
800 Trig
*trig
= dac
->trig
;
801 #endif /* ENABLE_TRIG */
802 #endif /* ENABLE_CAM */
804 * Setting sensitivity of Dac witgets
808 gtk_widget_set_sensitive (gpiv
->tablabel_dac
, sense
);
809 gtk_widget_set_sensitive (gpiv
->dac
->label_title
, sense
);
810 gtk_widget_set_sensitive (gpiv
->dac
->label_fname
, sense
);
811 gtk_widget_set_sensitive (gpiv
->dac
->entry_fname
, sense
);
816 if (wi_set
== DAC_TRIG
) {
817 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
818 (gpiv
->button_toolbar_trig
),
819 gpiv_par
->process__trig
);
820 gtk_widget_set_sensitive (gpiv
->button_toolbar_trig
, sense
);
821 gtk_widget_set_sensitive (trig
->frame_trigger
, sense
);
822 gtk_widget_set_sensitive (trig
->radiobutton_mouse_3
, sense
);
823 gtk_widget_set_sensitive (trig
->radiobutton_mouse_4
, sense
);
824 gtk_widget_set_sensitive (trig
->radiobutton_mouse_5
, sense
);
825 gtk_widget_set_sensitive (trig
->radiobutton_mouse_6
, sense
);
826 gtk_widget_set_sensitive (trig
->label_trigger_dt
, sense
);
827 gtk_widget_set_sensitive (trig
->spinbutton_trigger_dt
, sense
);
828 gtk_widget_set_sensitive (trig
->label_trigger_incrdt
, sense
);
829 gtk_widget_set_sensitive (trig
->spinbutton_trigger_incrdt
, sense
);
830 gtk_widget_set_sensitive (trig
->label_trigger_cap
, sense
);
831 gtk_widget_set_sensitive (trig
->spinbutton_trigger_cap
, sense
);
832 gtk_widget_set_sensitive (trig
->button_trigger_start
, sense
);
833 gtk_widget_set_sensitive (trig
->button_trigger_stop
, sense
);
835 #endif /* ENABLE_TRIG */
838 if (wi_set
== DAC_TIMING
) {
839 gtk_widget_set_sensitive (trig
->frame_trigger
, sense
);
840 gtk_widget_set_sensitive (trig
->radiobutton_mouse_1
, sense
);
841 gtk_widget_set_sensitive (trig
->radiobutton_mouse_2
, sense
);
842 gtk_widget_set_sensitive (trig
->label_trigger_nf
, sense
);
843 gtk_widget_set_sensitive (trig
->spinbutton_trigger_nf
, sense
);
847 if (wi_set
== DAC_TIMING
) {
848 gtk_widget_set_sensitive (trig
->frame_trigger
, sense
);
849 gtk_widget_set_sensitive (trig
->radiobutton_mouse_1
, sense
);
850 gtk_widget_set_sensitive (trig
->radiobutton_mouse_2
, sense
);
851 gtk_widget_set_sensitive (trig
->label_trigger_nf
, sense
);
852 gtk_widget_set_sensitive (trig
->spinbutton_trigger_nf
, sense
);
854 #endif /* ENABLE_TRIG */
855 #endif /* ENABLE_CAM */
859 if (wi_set
== DAC_CAM
) {
860 gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON
861 (gpiv
->button_toolbar_cam
),
862 gpiv_par
->process__cam
);
863 gtk_widget_set_sensitive (gpiv
->button_toolbar_cam
, sense
);
864 gtk_widget_set_sensitive (cam
->frame_cam
, sense
);
865 gtk_widget_set_sensitive (cam
->camera_select
, sense
);
866 gtk_widget_set_sensitive (cam
->camera_select_menu
, sense
);
867 gtk_widget_set_sensitive (cam
->menu_item
, sense
);
868 gtk_widget_set_sensitive (cam
->label_temp
, sense
);
869 gtk_widget_set_sensitive (cam
->label_label_temp
, sense
);
870 gtk_widget_set_sensitive (cam
->button_cam_start
, sense
);
871 gtk_widget_set_sensitive (cam
->button_cam_stop
, sense
);
873 #endif /* ENABLE_CAM */
876 * Setting sensitivity of Image witgets
880 /* gtk_widget_set_sensitive (gpiv->imgh->label_name, sense); */
881 /* gtk_widget_set_sensitive (gpiv->imgh->entry_name, sense); */
882 /* gtk_widget_set_sensitive (gpiv->imgh->spinbutton_ncols, sense); */
884 gtk_widget_set_sensitive (gpiv
->imgh
->label_colpos
, sense
);
885 gtk_widget_set_sensitive (gpiv
->imgh
->label_sscale
, sense
);
886 gtk_widget_set_sensitive (gpiv
->imgh
->label_ncols
, sense
);
887 gtk_widget_set_sensitive (gpiv
->imgh
->label_nrows
, sense
);
888 gtk_widget_set_sensitive (gpiv
->imgh
->label_depth
, sense
);
889 gtk_widget_set_sensitive (gpiv
->imgh
->label_rowpos
, sense
);
890 gtk_widget_set_sensitive (gpiv
->imgh
->label_tscale
, sense
);
891 gtk_widget_set_sensitive (gpiv
->imgh
->label_imgtitle
, sense
);
892 gtk_widget_set_sensitive (gpiv
->imgh
->label_crdate
, sense
);
893 gtk_widget_set_sensitive (gpiv
->imgh
->label_location
, sense
);
894 gtk_widget_set_sensitive (gpiv
->imgh
->label_author
, sense
);
895 gtk_widget_set_sensitive (gpiv
->imgh
->label_software
, sense
);
896 gtk_widget_set_sensitive (gpiv
->imgh
->label_source
, sense
);
897 gtk_widget_set_sensitive (gpiv
->imgh
->label_usertext
, sense
);
898 gtk_widget_set_sensitive (gpiv
->imgh
->label_warning
, sense
);
899 gtk_widget_set_sensitive (gpiv
->imgh
->label_disclaimer
, sense
);
900 gtk_widget_set_sensitive (gpiv
->imgh
->label_comment
, sense
);
901 gtk_widget_set_sensitive (gpiv
->imgh
->label_copyright
, sense
);
902 gtk_widget_set_sensitive (gpiv
->imgh
->label_email
, sense
);
903 gtk_widget_set_sensitive (gpiv
->imgh
->label_url
, sense
);
905 gtk_widget_set_sensitive (gpiv
->imgh
->spinbutton_colpos
, sense
);
906 gtk_widget_set_sensitive (gpiv
->imgh
->spinbutton_sscale
, sense
);
907 gtk_widget_set_sensitive (gpiv
->imgh
->spinbutton_rowpos
, sense
);
908 gtk_widget_set_sensitive (gpiv
->imgh
->spinbutton_tscale
, sense
);
909 gtk_widget_set_sensitive (gpiv
->imgh
->entry_imgtitle
, sense
);
910 gtk_widget_set_sensitive (gpiv
->imgh
->entry_crdate
, sense
);
911 gtk_widget_set_sensitive (gpiv
->imgh
->entry_location
, sense
);
912 gtk_widget_set_sensitive (gpiv
->imgh
->entry_author
, sense
);
913 gtk_widget_set_sensitive (gpiv
->imgh
->entry_software
, sense
);
914 gtk_widget_set_sensitive (gpiv
->imgh
->entry_source
, sense
);
915 gtk_widget_set_sensitive (gpiv
->imgh
->entry_usertext
, sense
);
916 gtk_widget_set_sensitive (gpiv
->imgh
->entry_warning
, sense
);
917 gtk_widget_set_sensitive (gpiv
->imgh
->entry_disclaimer
, sense
);
918 gtk_widget_set_sensitive (gpiv
->imgh
->entry_comment
, sense
);
919 gtk_widget_set_sensitive (gpiv
->imgh
->entry_copyright
, sense
);
920 gtk_widget_set_sensitive (gpiv
->imgh
->entry_email
, sense
);
921 gtk_widget_set_sensitive (gpiv
->imgh
->entry_url
, sense
);
926 * Setting sensitivity of Image Processing witgets
928 if (wi_set
== IMGPROC
) {
933 * Setting sensitivity of PIV witgets
935 if (wi_set
== EVAL
) {
936 gtk_widget_set_sensitive (gpiv
->piveval
->spinbutton_colstart
, sense
);
937 gtk_widget_set_sensitive (gpiv
->piveval
->spinbutton_colend
, sense
);
938 gtk_widget_set_sensitive (gpiv
->piveval
->spinbutton_preshiftcol
, sense
);
939 gtk_widget_set_sensitive (gpiv
->piveval
->spinbutton_rowstart
, sense
);
940 gtk_widget_set_sensitive (gpiv
->piveval
->spinbutton_rowend
, sense
);
941 gtk_widget_set_sensitive (gpiv
->piveval
->spinbutton_preshiftrow
, sense
);
943 /* gtk_widget_set_sensitive (gpiv->piveval->radiobutton_intsize_f_1, sense); */
944 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intsize_f_2
, sense
);
945 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intsize_f_3
, sense
);
947 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intsize_f_4
, sense
);
948 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intsize_f_5
, sense
);
950 /* gtk_widget_set_sensitive (gpiv->piveval->radiobutton_intsize_i_1, sense); */
951 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intsize_i_2
, sense
);
952 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intsize_i_3
, sense
);
953 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intsize_i_4
, sense
);
954 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intsize_i_5
, sense
);
956 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intshift_1
, sense
);
957 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intshift_2
, sense
);
958 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intshift_3
, sense
);
959 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intshift_4
, sense
);
960 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_intshift_5
, sense
);
962 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_fit_none
, sense
);
963 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_fit_gauss
, sense
);
964 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_fit_power
, sense
);
965 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_fit_gravity
, sense
);
967 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_mouse_1
, sense
);
968 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_mouse_2
, sense
);
969 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_mouse_3
, sense
);
970 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_mouse_4
, sense
);
972 gtk_widget_set_sensitive (gpiv
->piveval
->checkbutton_monitor
, sense
);
974 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_peak_1
, sense
);
975 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_peak_2
, sense
);
976 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_peak_3
, sense
);
978 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_weightkernel
, sense
);
979 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_zerooff
, sense
);
980 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_centraldiff
, sense
);
982 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_cross_1
, FALSE
);
983 gtk_widget_set_sensitive (gpiv
->piveval
->radiobutton_cross_2
, FALSE
);
985 gtk_widget_set_sensitive (gpiv
->piveval
->button
, sense
);
990 * Setting sensitivity of a slection of PIV witgets
992 if (wi_set
== INTREGS
) {
993 /* if (piv_par->int_size_f >= 16) { */
994 /* gtk_widget_set_sensitive (GTK_WIDGET */
995 /* (gpiv->piveval->radiobutton_intsize_i_1), sense); */
996 if (gl_piv_par
->int_size_f
>= 32) {
997 gtk_widget_set_sensitive (GTK_WIDGET
998 (gpiv
->piveval
->radiobutton_intsize_i_2
),
1000 if (gl_piv_par
->int_size_f
>= 64) {
1001 gtk_widget_set_sensitive (GTK_WIDGET
1002 (gpiv
->piveval
->radiobutton_intsize_i_3
),
1004 if (gl_piv_par
->int_size_f
>= 128) {
1005 gtk_widget_set_sensitive (GTK_WIDGET
1006 (gpiv
->piveval
->radiobutton_intsize_i_4
),
1017 * Setting sensitivity of Validation witgets
1019 if (wi_set
== VALID
) {
1020 gtk_widget_set_sensitive (gpiv
->pivvalid
->radiobutton_errvec_residu_snr
, sense
);
1021 gtk_widget_set_sensitive (gpiv
->pivvalid
->radiobutton_errvec_residu_median
, sense
);
1022 gtk_widget_set_sensitive (gpiv
->pivvalid
->radiobutton_errvec_residu_normmedian
, sense
);
1023 gtk_widget_set_sensitive (gpiv
->pivvalid
->radiobutton_disable_1
, sense
);
1024 gtk_widget_set_sensitive (gpiv
->pivvalid
->label_errvec_res
, sense
);
1025 gtk_widget_set_sensitive (gpiv
->pivvalid
->spinbutton_errvec_res
, sense
);
1026 gtk_widget_set_sensitive (gpiv
->pivvalid
->checkbutton_errvec_disres
, sense
);
1027 gtk_widget_set_sensitive (gpiv
->pivvalid
->button_errvec_resstats
, sense
);
1029 gtk_widget_set_sensitive (gpiv
->pivvalid
->radiobutton_errvec_subst_1
, sense
);
1030 /* gtk_widget_set_sensitive (gpiv->pivvalid->radiobutton_errvec_subst_2, sense); */
1031 gtk_widget_set_sensitive (gpiv
->pivvalid
->radiobutton_errvec_subst_3
, sense
);
1032 gtk_widget_set_sensitive (gpiv
->pivvalid
->button_errvec
, sense
);
1034 gtk_widget_set_sensitive (gpiv
->pivvalid
->spinbutton_histo_bins
, sense
);
1035 gtk_widget_set_sensitive (gpiv
->pivvalid
->button_peaklck
, sense
);
1036 gtk_widget_set_sensitive (gpiv
->pivvalid
->button_uhisto
, sense
);
1037 gtk_widget_set_sensitive (gpiv
->pivvalid
->button_vhisto
, sense
);
1042 * Setting sensitivity of Post processing witgets
1044 if (wi_set
== POST
) {
1045 gtk_widget_set_sensitive (gpiv
->pivpost
->radiobutton_vorstra_output_1
, sense
);
1046 gtk_widget_set_sensitive (gpiv
->pivpost
->radiobutton_vorstra_output_2
, sense
);
1047 gtk_widget_set_sensitive (gpiv
->pivpost
->radiobutton_vorstra_output_3
, sense
);
1049 gtk_widget_set_sensitive (gpiv
->pivpost
->radiobutton_vorstra_diffscheme_1
,
1051 gtk_widget_set_sensitive (gpiv
->pivpost
->radiobutton_vorstra_diffscheme_2
,
1053 gtk_widget_set_sensitive (gpiv
->pivpost
->radiobutton_vorstra_diffscheme_3
,
1055 gtk_widget_set_sensitive (gpiv
->pivpost
->radiobutton_vorstra_diffscheme_4
,
1057 gtk_widget_set_sensitive (gpiv
->pivpost
->button_vorstra
, sense
);
1065 on_my_popup_handler (GtkWidget
*widget
,
1067 /*-----------------------------------------------------------------------------
1068 * Callback function for pop-up menus
1072 GdkEventButton
*event_button
;
1074 g_return_val_if_fail (widget
!= NULL
, FALSE
);
1075 g_return_val_if_fail (GTK_IS_MENU (widget
), FALSE
);
1076 g_return_val_if_fail (event
!= NULL
, FALSE
);
1078 /* The "widget" is the menu that was supplied when
1079 * gtk_signal_connect_object was called.
1081 menu
= GTK_MENU (widget
);
1083 if (event
->type
== GDK_BUTTON_PRESS
)
1085 event_button
= (GdkEventButton
*) event
;
1086 if (event_button
->button
== 3)
1088 gtk_menu_popup (menu
, NULL
, NULL
, NULL
, NULL
,
1089 event_button
->button
, event_button
->time
);
1100 replace_home_dir_with_tilde (const gchar
*uri
)
1101 /*-----------------------------------------------------------------------------
1102 * I stole this from gedit
1103 * return value will have to be freed
1109 g_return_val_if_fail (uri
!= NULL
, NULL
);
1111 /* Note that g_get_home_dir returns a const string */
1112 tmp
= (gchar
*)g_get_home_dir ();
1115 return g_strdup (uri
);
1117 home
= g_filename_to_utf8 (tmp
, -1, NULL
, NULL
, NULL
);
1119 return g_strdup (uri
);
1121 if (strcmp (uri
, home
) == 0) {
1124 return g_strdup ("~");
1128 home
= g_strdup_printf ("%s/", tmp
);
1131 if (g_str_has_prefix (uri
, home
))
1135 res
= g_strdup_printf ("~/%s", uri
+ strlen (home
));
1144 return g_strdup (uri
);
1150 replace_tilde_with_home_dir (const gchar
*uri
)
1151 /*-----------------------------------------------------------------------------
1152 * And wrote this by myself :) (What a genius that guy)
1159 g_return_val_if_fail (uri
!= NULL
, NULL
);
1161 if ((tmp
=(gchar
*)g_get_home_dir ()) == NULL
) {
1162 return g_strdup (uri
);
1165 if ((home
= g_filename_to_utf8 (tmp
, -1, NULL
, NULL
, NULL
)) == NULL
) {
1167 return g_strdup (uri
);
1170 if (g_str_has_prefix (uri
, "~/")) {
1171 home_name
= g_strdup_printf ("%s/%s", home
, uri
+ strlen ("~/"));
1174 return g_strdup (uri
);
1183 destroy (GtkWidget
* widget
,
1185 /*-----------------------------------------------------------------------------
1189 gtk_widget_destroy (widget
);
1194 void message_gpiv (gchar
* msg
, ...)
1195 /*-----------------------------------------------------------------------------
1196 * Message box with warning
1199 /* GtkWidget */ GtkDialog
*gtk_message_wi
;
1201 char local_msg
[3 * GPIV_MAX_CHARS
];
1203 va_start (args
, msg
);
1204 g_vsnprintf (local_msg
, 3 * GPIV_MAX_CHARS
, msg
, args
);
1205 gtk_message_wi
= create_message_dialog (local_msg
);
1206 gtk_widget_show (GTK_WIDGET (gtk_message_wi
));
1207 /* gtk_widget_show_all (gtk_message_wi); */
1213 void warning_gpiv (gchar
* msg
, ...)
1214 /*-----------------------------------------------------------------------------
1215 * Message box with warning
1218 GtkDialog
*gtk_warning_wi
;
1220 char lo_msg
[3 * GPIV_MAX_CHARS
];
1222 va_start (args
, msg
);
1223 g_vsnprintf (lo_msg
, 3 * GPIV_MAX_CHARS
, msg
, args
);
1224 gtk_warning_wi
= create_message_dialog (lo_msg
);
1225 gtk_widget_show (GTK_WIDGET (gtk_warning_wi
));
1231 void error_gpiv (gchar
* msg
, ...)
1232 /*-----------------------------------------------------------------------------
1233 * Message box with error
1236 GtkDialog
*gtk_error_wi
;
1238 char lo_msg
[2 * GPIV_MAX_CHARS
];
1240 va_start (args
, msg
);
1241 g_vsnprintf (lo_msg
, 2 * GPIV_MAX_CHARS
, msg
, args
);
1242 gtk_error_wi
= create_error_dialog (lo_msg
);
1243 gtk_widget_show (GTK_WIDGET (gtk_error_wi
));