Initial revision
[gpiv.git] / src / utils.c
blob96b09e2d4ccb659450cb5effcb90aade8621d392
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 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 * utility functions for gpiv
30 * $Log: utils.c,v $
31 * Revision 1.1 2003-06-17 17:10:52 gerber
32 * Initial revision
36 #include "gpiv_gtk.h"
37 #include "utils.h"
38 #include "display.h"
41 GnomeCanvasItem
42 **alloc_gci_matrix(long nr,
43 long nc
45 /*--------------------------------------------------------------------
46 Allocates 2-dimensional array for GnomeCanvasItem */
48 long i;
49 GnomeCanvasItem **item;
53 * allocate pointers to rows
55 item = (GnomeCanvasItem **) g_malloc((size_t)((nr - 1) *
56 sizeof(GnomeCanvasItem*)));
57 if (!item) gpiv_error("%s: allocation failure 1 in g_malloc()",
58 "alloc_gci_matrix");
59 item += 1;
62 * allocate rows and set pointers to them
64 item[0] = (GnomeCanvasItem *) g_malloc((size_t)((nr * nc - 1) *
65 sizeof(GnomeCanvasItem)));
66 if (!item[0]) gpiv_error("%s: allocation failure 2 in g_malloc()",
67 "alloc_gci_matrix");
68 item[0] += 1;
70 for(i = 1; i <= nr; i++) item[i] = item[i-1] + 1;
73 * return pointer to array of pointers to rows
75 return item;
78 void
79 free_gci_matrix(GnomeCanvasItem **item,
80 long nr,
81 long nc
83 /*--------------------------------------------------------------------
84 Frees 2-dimensional array for GnomeCanvasItem */
86 assert(item[0] != NULL);
88 free((char*) (item[0] - 1));
89 free((char*) (item - 1));
94 void
95 free_all_bufmems(Display * disp
97 /*-------------------------- Frees all dynamic memory of Buffer structure */
99 /* if (disp->mwin != NULL */
100 /* && GTK_WIDGET_VISIBLE(GTK_WIDGET(disp->mwin)) ) { */
101 /* gdk_window_show(GTK_WIDGET(disp->mwin)->window); */
102 /* gdk_window_raise(GTK_WIDGET(disp->mwin)->window); */
103 /* } */
105 free_img_bufmems(disp);
106 free_eval_bufmems(disp);
107 free_post_bufmems(disp);
112 void
113 free_img_bufmems(Display * disp
115 /*--------------------------------------------------------------------
116 * Frees all dynamic memory of Buffer structure of img
119 g_snprintf(disp->fname_base, MAX_CHARS,"");
121 if (disp->img.exist_img) {
122 free_img(disp->img.img1, image_par);
123 /* g_free(disp->img.graybuf_img); */
124 if (image_par.x_corr == 1)
125 free_img(disp->img.img2, image_par);
126 /* g_free(disp->img.graybuf_img2); */
129 destroy_background(disp);
130 if (disp->intreg.exist)
131 destroy_all_intregs(disp);
137 void
138 free_eval_bufmems(Display * disp
140 /*--------------------------------------------------------------------
141 * Frees all dynamic memory of Buffer structure of evaluation processing
144 if (disp->gpd.exist_piv) {
145 destroy_all_vectors(&disp->gpd);
146 gpiv_free_pivdata(&disp->gpd.piv_data);
147 disp->gpd.exist_piv = FALSE;
150 if (disp->gpd.scaled_piv) {
151 gpiv_free_pivdata(&disp->gpd.piv_data_scaled);
152 disp->gpd.scaled_piv = FALSE;
158 void
159 free_post_bufmems(Display * disp
161 /*--------------------------------------------------------------------
162 * Frees all dynamic memory of Buffer structure of post processing
166 if (disp->gpd.exist_vor) {
167 destroy_all_scalars(&display_act->gpd.vor_data, VORTICITY);
168 gpiv_free_scdata(&disp->gpd.vor_data);
169 display_act->gpd.exist_vor = FALSE;
170 display_act->gpd.piv_post_par.diff_type_logic = 0;
171 display_act->gpd.piv_post_par.operator_vorstra_logic = 0;
174 if (disp->gpd.exist_vor_scaled) {
175 gpiv_free_scdata(&disp->gpd.vor_data_scaled);
176 display_act->gpd.exist_vor_scaled = FALSE;
179 if (display_act->gpd.exist_sstrain) {
180 destroy_all_scalars(&display_act->gpd.sstrain_data, S_STRAIN);
181 gpiv_free_scdata (&display_act->gpd.sstrain_data);
182 display_act->gpd.exist_sstrain = FALSE;
183 display_act->gpd.piv_post_par.diff_type_logic = 0;
184 display_act->gpd.piv_post_par.operator_vorstra_logic = 0;
187 if (display_act->gpd.exist_sstrain_scaled) {
188 gpiv_free_scdata (&display_act->gpd.sstrain_data_scaled);
189 display_act->gpd.exist_sstrain_scaled = FALSE;
192 if (display_act->gpd.exist_nstrain) {
193 destroy_all_scalars(&display_act->gpd.nstrain_data, N_STRAIN);
194 gpiv_free_scdata (&display_act->gpd.nstrain_data);
195 display_act->gpd.exist_nstrain = FALSE;
196 display_act->gpd.piv_post_par.diff_type_logic = 0;
197 display_act->gpd.piv_post_par.operator_vorstra_logic = 0;
200 if (display_act->gpd.exist_nstrain_scaled) {
201 gpiv_free_scdata (&display_act->gpd.nstrain_data_scaled);
202 display_act->gpd.exist_nstrain_scaled = FALSE;
208 void
209 copy_img_par (ImagePar image_par_src,
210 ImagePar * image_par_dest,
211 int print_par
214 * copy image parameters from src to dest
217 if (image_par_src.nrows_logic && !image_par_dest->nrows_logic) {
218 image_par_dest->nrows = image_par_src.nrows;
219 image_par_dest->nrows_logic = 1;
220 if (print_par)
221 gpiv_warning("nrows = %d", image_par_dest->nrows);
224 if (image_par_src.ncolumns_logic && !image_par_dest->ncolumns_logic) {
225 image_par_dest->ncolumns = image_par_src.ncolumns;
226 image_par_dest->ncolumns_logic = 1;
227 if (print_par)
228 gpiv_warning("ncolumns = %d", image_par_dest->ncolumns);
231 if(image_par_src.nbits_logic && !image_par_dest->nbits_logic) {
232 image_par_dest->nbits = image_par_src.nbits;
233 image_par_dest->nbits_logic = 1;
234 if (print_par)
235 gpiv_warning("nbits = %d", image_par_dest->nbits);
238 if(image_par_src.x_corr_logic && !image_par_dest->x_corr_logic) {
239 image_par_dest->x_corr = image_par_src.x_corr;
240 image_par_dest->x_corr_logic = 1;
241 if (print_par)
242 gpiv_warning("x_corr = %d", image_par_dest->x_corr);
245 if (image_par_src.s_scale_logic && !image_par_dest->s_scale_logic) {
246 image_par_dest->s_scale = image_par_src.s_scale;
247 image_par_dest->s_scale_logic = 1;
248 if (print_par)
249 gpiv_warning("s_scale = %d", image_par_dest->s_scale);
252 if(image_par_src.t_scale_logic && !image_par_dest->t_scale_logic) {
253 image_par_dest->t_scale = image_par_src.t_scale;
254 image_par_dest->t_scale_logic = 1;
255 if (print_par)
256 gpiv_warning("t_scale = %d", image_par_dest->t_scale);
259 if (image_par_src.z_off_logic && !image_par_dest->z_off_logic) {
260 image_par_dest->z_off_x = image_par_src.z_off_x;
261 image_par_dest->z_off_y = image_par_src.z_off_y;
262 image_par_dest->z_off_logic = 1;
263 if (print_par) {
264 gpiv_warning("z_off_x = %f", image_par_dest->z_off_x);
265 gpiv_warning("z_off_y = %f", image_par_dest->z_off_x);
269 if (image_par.project_logic && !image_par_dest->project_logic) {
270 image_par_dest->project_logic = 1;
271 snprintf(image_par_dest->project, MAX_CHARS, "%s",
272 image_par_src.project);
273 if (print_par)
274 gpiv_warning("project = %S", image_par_dest->project);
278 if (image_par.creation_date_logic
279 && !image_par_dest->creation_date_logic) {
280 image_par_dest->creation_date_logic = 1;
281 snprintf(image_par_dest->creation_date, MAX_CHARS, "%s",
282 image_par_src.creation_date);
283 if (print_par)
284 gpiv_warning("creation_date = %s", image_par_dest->creation_date);
285 } else {
286 char time_string[MAX_CHARS];
287 struct tm time_struct;
288 time_t itime;
289 time(&itime);
290 time_struct = *gmtime(&itime);
291 strftime(time_string, MAX_CHARS, "%a %b %d %Y %T", &time_struct);
292 if (print_par)
293 gpiv_warning("Setting new time = %s", time_string);
294 snprintf(image_par.creation_date, MAX_CHARS, "%s", time_string);
295 image_par_dest->creation_date_logic = 1;
299 if (image_par_src.location_logic && !image_par_dest->location_logic) {
300 image_par_dest->location_logic = 1;
301 snprintf(image_par_dest->location, MAX_CHARS, "%s",
302 image_par_src.location);
303 if (print_par)
304 gpiv_warning("location = %s", image_par_dest->location);
308 if (image_par_src.comment_logic && !image_par_dest->comment_logic) {
309 image_par_dest->comment_logic = 1;
310 snprintf(image_par_dest->comment, MAX_CHARS, "%s",
311 image_par_src.comment);
312 if (print_par)
313 gpiv_warning("comment = %s", image_par_dest->comment);
320 * gtk routnies
323 void
324 sensitive(GpivConsole *gpiv,
325 enum WidgetSet wi_set,
326 gint sense)
327 /* ---------- Changes the sensitivity of a set of witgets ---------------*/
332 * Setting sensitivity of Image witgets
334 if (wi_set == IMG) {
335 /* gtk_widget_set_sensitive(gpiv->imgh->label_name, sense); */
336 /* gtk_widget_set_sensitive(gpiv->imgh->entry_name, sense); */
337 /* gtk_widget_set_sensitive(gpiv->imgh->spinbutton_ncols, sense); */
339 gtk_widget_set_sensitive(gpiv->imgh->label_colpos, sense);
340 gtk_widget_set_sensitive(gpiv->imgh->label_sscale, sense);
341 gtk_widget_set_sensitive(gpiv->imgh->label_ncols, sense);
342 gtk_widget_set_sensitive(gpiv->imgh->label_nrows, sense);
343 gtk_widget_set_sensitive(gpiv->imgh->label_rowpos, sense);
344 gtk_widget_set_sensitive(gpiv->imgh->label_tscale, sense);
345 gtk_widget_set_sensitive(gpiv->imgh->label_crdate, sense);
346 gtk_widget_set_sensitive(gpiv->imgh->label_location, sense);
347 gtk_widget_set_sensitive(gpiv->imgh->label_project, sense);
348 gtk_widget_set_sensitive(gpiv->imgh->label_comment, sense);
349 gtk_widget_set_sensitive(gpiv->imgh->spinbutton_colpos, sense);
350 gtk_widget_set_sensitive(gpiv->imgh->spinbutton_sscale, sense);
351 gtk_widget_set_sensitive(gpiv->imgh->spinbutton_rowpos, sense);
352 gtk_widget_set_sensitive(gpiv->imgh->spinbutton_tscale, sense);
353 gtk_widget_set_sensitive(gpiv->imgh->entry_crdate, sense);
354 gtk_widget_set_sensitive(gpiv->imgh->entry_location, sense);
355 gtk_widget_set_sensitive(gpiv->imgh->entry_project, sense);
356 gtk_widget_set_sensitive(gpiv->imgh->entry_comment, sense);
361 * Setting sensitivity of Image Processing witgets
363 if (wi_set == IMGPROC) {
368 * Setting sensitivity of PIV witgets
370 if (wi_set == EVAL) {
371 gtk_widget_set_sensitive(gpiv->piveval->spinbutton_colstart, sense);
372 gtk_widget_set_sensitive(gpiv->piveval->spinbutton_colend, sense);
373 gtk_widget_set_sensitive(gpiv->piveval->spinbutton_preshiftcol, sense);
374 gtk_widget_set_sensitive(gpiv->piveval->spinbutton_rowstart, sense);
375 gtk_widget_set_sensitive(gpiv->piveval->spinbutton_rowend, sense);
376 gtk_widget_set_sensitive(gpiv->piveval->spinbutton_preshiftrow, sense);
378 /* gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize1_1, sense); */
379 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize1_2, sense);
380 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize1_3, sense);
382 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize1_4, sense);
383 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize1_5, sense);
385 /* gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize2_1, sense); */
386 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize2_2, sense);
387 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize2_3, sense);
388 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize2_4, sense);
389 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intsize2_5, sense);
391 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intshift_1, sense);
392 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intshift_2, sense);
393 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intshift_3, sense);
394 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intshift_4, sense);
395 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_intshift_5, sense);
397 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_fit_none, sense);
398 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_fit_gauss, sense);
399 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_fit_power, sense);
400 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_fit_gravity, sense);
402 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_mouse_1, sense);
403 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_mouse_2, sense);
404 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_mouse_3, sense);
405 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_mouse_4, sense);
407 gtk_widget_set_sensitive(gpiv->piveval->checkbutton_disprocess, sense);
409 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_peak_1, sense);
410 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_peak_2, sense);
411 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_peak_3, sense);
413 gtk_widget_set_sensitive(gpiv->piveval->checkbutton_weightkernel, sense);
414 gtk_widget_set_sensitive(gpiv->piveval->checkbutton_zerooff, sense);
415 gtk_widget_set_sensitive(gpiv->piveval->checkbutton_centraldiff, sense);
417 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_cross_1, sense);
418 gtk_widget_set_sensitive(gpiv->piveval->radiobutton_cross_2, sense);
420 gtk_widget_set_sensitive(gpiv->piveval->button, sense);
425 * Setting sensitivity of a slection of PIV witgets
427 if (wi_set == INTREGS) {
428 /* if (piv_eval_par.int_size_1 >= 16) { */
429 /* gtk_widget_set_sensitive(GTK_WIDGET */
430 /* (gpiv->piveval->radiobutton_intsize2_1), sense); */
431 if (piv_eval_par.int_size_1 >= 32) {
432 gtk_widget_set_sensitive(GTK_WIDGET
433 (gpiv->piveval->radiobutton_intsize2_2),
434 sense);
435 if (piv_eval_par.int_size_1 >= 64) {
436 gtk_widget_set_sensitive(GTK_WIDGET
437 (gpiv->piveval->radiobutton_intsize2_3),
438 sense);
439 if (piv_eval_par.int_size_1 >= 128) {
440 gtk_widget_set_sensitive(GTK_WIDGET
441 (gpiv->piveval->radiobutton_intsize2_4),
442 sense);
446 /* } */
452 * Setting sensitivity of Validation witgets
454 if (wi_set == VALID) {
455 gtk_widget_set_sensitive(gpiv->pivvalid->radiobutton_errvec_residu_1, sense);
456 gtk_widget_set_sensitive(gpiv->pivvalid->radiobutton_errvec_residu_2, sense);
457 gtk_widget_set_sensitive(gpiv->pivvalid->radiobutton_disable_1, sense);
458 gtk_widget_set_sensitive(gpiv->pivvalid->label_errvec_res, sense);
459 gtk_widget_set_sensitive(gpiv->pivvalid->spinbutton_errvec_res, sense);
460 gtk_widget_set_sensitive(gpiv->pivvalid->checkbutton_errvec_disres, sense);
461 gtk_widget_set_sensitive(gpiv->pivvalid->button_errvec_resstats, sense);
463 gtk_widget_set_sensitive(gpiv->pivvalid->radiobutton_errvec_subst_1, sense);
464 /* gtk_widget_set_sensitive(gpiv->pivvalid->radiobutton_errvec_subst_2, sense); */
465 gtk_widget_set_sensitive(gpiv->pivvalid->radiobutton_errvec_subst_3, sense);
466 gtk_widget_set_sensitive(gpiv->pivvalid->button_errvec, sense);
468 gtk_widget_set_sensitive(gpiv->pivvalid->spinbutton_peaklck_bins, sense);
469 gtk_widget_set_sensitive(gpiv->pivvalid->button_peaklck, sense);
474 * Setting sensitivity of Post processing witgets
476 if (wi_set == POST) {
477 gtk_widget_set_sensitive(gpiv->pivpost->radiobutton_vorstra_output_1, sense);
478 gtk_widget_set_sensitive(gpiv->pivpost->radiobutton_vorstra_output_2, sense);
479 gtk_widget_set_sensitive(gpiv->pivpost->radiobutton_vorstra_output_3, sense);
481 gtk_widget_set_sensitive(gpiv->pivpost->radiobutton_vorstra_diffscheme_1,
482 sense);
483 gtk_widget_set_sensitive(gpiv->pivpost->radiobutton_vorstra_diffscheme_2,
484 sense);
485 gtk_widget_set_sensitive(gpiv->pivpost->radiobutton_vorstra_diffscheme_3,
486 sense);
487 gtk_widget_set_sensitive(gpiv->pivpost->radiobutton_vorstra_diffscheme_4,
488 sense);
489 gtk_widget_set_sensitive(gpiv->pivpost->button_vorstra, sense);
496 void destroy(GtkWidget * widget, gpointer data)
498 gtk_widget_destroy(widget);
502 void gtk_warning(gchar * msg, ...)
504 GtkWidget *gtk_warning_wi;
505 va_list args;
506 char local_msg[MAX_CHARS];
508 va_start(args, msg);
509 vsnprintf (local_msg, MAX_CHARS, msg, args);
510 gtk_warning_wi = create_messagebox(local_msg);
511 gtk_widget_show(gtk_warning_wi);
512 va_end(args);
516 void gtk_error(gchar * msg, ...)
518 GtkWidget *gtk_error_wi;
519 va_list args;
520 char local_msg[MAX_CHARS];
522 va_start(args, msg);
523 vsnprintf (local_msg, MAX_CHARS, msg, args);
524 gtk_error_wi = create_errorbox(local_msg);
525 gtk_widget_show(gtk_error_wi);
526 va_end(args);