1
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
4
* UTIL C-source: Medical Image Conversion Utility *
6
* purpose : display info text routines *
8
* project : (X)MedCon by Erik Nolf *
10
* Functions : XMdcImagesInfo() - Display images info *
11
* XMdcShowFileInfo() - Display general file info *
13
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
14
/* $Id: xinfo.c,v 1.47 2004/02/18 23:48:39 enlf Exp $
18
Copyright (C) 1997-2004 by Erik Nolf
20
This program is free software; you can redistribute it and/or modify it
21
under the terms of the GNU General Public License as published by the
22
Free Software Foundation; either version 2, or (at your option) any later
25
This program is distributed in the hope that it will be useful, but
26
WITHOUT ANY WARRANTY; without even the implied warranty of
27
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
28
Public License for more details.
30
You should have received a copy of the GNU General Public License along
31
with this program; if not, write to the Free Software Foundation, Inc.,
32
59 Place - Suite 330, Boston, MA 02111-1307, USA. */
34
/****************************************************************************
36
****************************************************************************/
52
/****************************************************************************
54
****************************************************************************/
56
void XMdcImagesInfo(GtkWidget *widget, Uint32 nr)
58
GtkWidget *window = NULL;
64
GtkWidget *hscrollbar;
65
GtkWidget *vscrollbar;
72
i = my.realnumber[nr];
73
id = &my.fi->image[i];
75
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
76
gtk_widget_set_usize(window, 500, 500);
77
gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
79
gtk_signal_connect(GTK_OBJECT(window), "destroy",
80
GTK_SIGNAL_FUNC(gtk_widget_destroy), NULL);
82
gtk_window_set_title(GTK_WINDOW(window),XMdcGetImageLabelIndex(nr));
83
gtk_container_set_border_width(GTK_CONTAINER(window),0);
85
box1 = gtk_vbox_new(FALSE,0);
86
gtk_container_add(GTK_CONTAINER(window),box1);
87
gtk_widget_show(box1);
89
box2 = gtk_vbox_new(FALSE, 0);
90
gtk_container_set_border_width(GTK_CONTAINER(box2), 0);
91
gtk_box_pack_start(GTK_BOX(box1),box2,TRUE,TRUE,0);
92
gtk_widget_show(box2);
94
table = gtk_table_new(2, 2, FALSE);
95
gtk_table_set_row_spacing(GTK_TABLE(table), 0, 2);
96
gtk_table_set_col_spacing(GTK_TABLE(table), 0, 2);
97
gtk_box_pack_start(GTK_BOX(box2),table,TRUE,TRUE,0);
98
gtk_widget_show(table);
100
text = gtk_text_new(NULL,NULL);
101
gtk_text_set_editable(GTK_TEXT(text),FALSE);
102
gtk_text_set_word_wrap (GTK_TEXT(text), TRUE);
103
gtk_table_attach(GTK_TABLE(table),text, 0, 1, 0, 1,
104
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
105
GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
106
gtk_widget_show(text);
107
hscrollbar = gtk_hscrollbar_new(GTK_TEXT(text)->hadj);
108
gtk_table_attach(GTK_TABLE(table), hscrollbar, 0, 1, 1, 2,
109
GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0);
110
gtk_widget_show(hscrollbar);
112
vscrollbar = gtk_vscrollbar_new(GTK_TEXT(text)->vadj);
113
gtk_table_attach(GTK_TABLE(table), vscrollbar, 1, 2, 0, 1,
114
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
115
gtk_widget_show(vscrollbar);
117
gtk_text_freeze(GTK_TEXT(text));
119
gtk_widget_realize(text);
121
/* create the info text */
122
gdk_color_alloc(gtk_widget_get_colormap(window), &Blue);
124
sprintf(xmdcstr,"IMAGE: %02u PAGE: %02u NR: %03u\n\n",
125
nr+1, my.curpage+1, i+1);
126
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
128
sprintf(xmdcstr,"\nPixel Dimensions\n");
129
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
130
sprintf(xmdcstr,"dimension: %ux%u\npixeltype: %s\n",
131
id->width, id->height, MdcGetStrPixelType(id->type));
132
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
134
sprintf(xmdcstr,"\nReal Dimensions\n");
135
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
136
sprintf(xmdcstr,"pixel xsize : %+e mm\npixel ysize : %+e mm\n",
137
id->pixel_xsize, id->pixel_ysize);
138
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
139
sprintf(xmdcstr,"slice width : %+e mm\n", id->slice_width);
140
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
141
sprintf(xmdcstr,"slice spacing : %+e mm\n", id->slice_spacing);
142
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
143
sprintf(xmdcstr,"\nct zoom factor: %+e\n", id->ct_zoom_fctr);
144
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
146
sprintf(xmdcstr,"\nRescale Factors\n");
147
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
148
sprintf(xmdcstr,"rescale slope : %+e ", id->rescale_slope);
149
if (MDC_QUANTIFY == MDC_YES) {
150
strcat(xmdcstr,"(= quantification)\n");
151
}else if (MDC_CALIBRATE == MDC_YES) {
152
strcat(xmdcstr,"(= quantification * calibration)\n");
154
strcat(xmdcstr,"(= none)\n");
156
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
157
sprintf(xmdcstr,"rescale intercept: %+e\n", id->rescale_intercept);
158
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
159
sprintf(xmdcstr,"quantification : %+e\n", id->quant_scale);
160
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
161
sprintf(xmdcstr,"calibration : %+e\n", id->calibr_fctr);
162
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
163
sprintf(xmdcstr,"intercept : %+e\n", id->intercept);
164
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
166
sprintf(xmdcstr,"\nPixel Values\n");
167
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
168
sprintf(xmdcstr,"image min value: %+e\t\timage max value: %+e\n",
170
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
171
sprintf(xmdcstr,"frame min value: %+e\t\tframe max value: %+e\n",
173
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
175
sprintf(xmdcstr,"\nQuantified Values\n");
176
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
177
sprintf(xmdcstr,"image qmin value: %+e\t\timage qmax value: %+e\n",
179
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
180
sprintf(xmdcstr,"frame qmin value: %+e\t\tframe qmax value: %+e\n",
181
id->qfmin, id->qfmax);
182
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
184
sprintf(xmdcstr,"\nTime Specifications\n");
185
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
186
sprintf(xmdcstr,"frame number : %u\n",id->frame_number);
187
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
188
sprintf(xmdcstr,"slice start : %+e [ms] = %s\n"
189
,id->slice_start,MdcGetStrHHMMSS(id->slice_start));
190
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
192
f = MdcSingleImageDuration(my.fi,id->frame_number-1);
193
sprintf(xmdcstr,"slice duration: %+e [ms] = %s (auto-filled)\n"
194
,f,MdcGetStrHHMMSS(f));
195
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
197
sprintf(xmdcstr,"\nModality & Position\n");
198
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
200
sprintf(xmdcstr,"image modality : %s\n",id->image_mod);
201
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
202
sprintf(xmdcstr,"image position device : %+e\\%+e\\%+e\n",
203
id->image_pos_dev[0],
204
id->image_pos_dev[1],
205
id->image_pos_dev[2]);
206
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
207
sprintf(xmdcstr,"image position patient : %+e\\%+e\\%+e\n",
208
id->image_pos_pat[0],
209
id->image_pos_pat[1],
210
id->image_pos_pat[2]);
211
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
212
sprintf(xmdcstr,"image orientation device : %+e\\%+e\\%+e\n",
213
id->image_orient_dev[0],
214
id->image_orient_dev[1],
215
id->image_orient_dev[2]);
216
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
217
sprintf(xmdcstr," %+e\\%+e\\%+e\n",
218
id->image_orient_dev[3],
219
id->image_orient_dev[4],
220
id->image_orient_dev[5]);
221
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
222
sprintf(xmdcstr,"image orientation patient : %+e\\%+e\\%+e\n",
223
id->image_orient_pat[0],
224
id->image_orient_pat[1],
225
id->image_orient_pat[2]);
226
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
227
sprintf(xmdcstr," %+e\\%+e\\%+e\n",
228
id->image_orient_pat[3],
229
id->image_orient_pat[4],
230
id->image_orient_pat[5]);
231
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
233
if (id->sdata != NULL) {
234
STATIC_DATA *sd = id->sdata;
235
sprintf(xmdcstr,"\nStatic Data\n");
236
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
238
sprintf(xmdcstr,"label : %s\n",sd->label);
239
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
240
sprintf(xmdcstr,"total counts : %g\n",sd->total_counts);
241
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
242
sprintf(xmdcstr,"image duration : %e [ms] = %s\n"
243
,sd->image_duration,MdcGetStrHHMMSS(sd->image_duration));
244
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
245
sprintf(xmdcstr,"image start time : %02hd:%02hd:%02hd\n"
247
,sd->start_time_minute
248
,sd->start_time_second);
249
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
252
gtk_text_thaw(GTK_TEXT(text));
254
/* create separator and close button */
255
separator = gtk_hseparator_new();
256
gtk_box_pack_start(GTK_BOX(box1),separator,FALSE,TRUE,0);
257
gtk_widget_show(separator);
259
box2 = gtk_vbox_new(FALSE, 0);
260
gtk_container_set_border_width(GTK_CONTAINER(box2), 0);
261
gtk_box_pack_start(GTK_BOX(box1),box2, FALSE, FALSE, 0);
262
gtk_widget_show(box2);
264
button = gtk_button_new_with_label("Close");
265
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",
266
GTK_SIGNAL_FUNC(gtk_widget_destroy),
269
gtk_box_pack_start(GTK_BOX(box2),button,FALSE,FALSE,0);
270
gtk_widget_show(button);
272
gtk_widget_show(window);
276
void XMdcShowFileInfo(GtkWidget *widget, gpointer data)
278
GtkWidget *window = NULL;
282
GtkWidget *separator;
284
GtkWidget *hscrollbar;
285
GtkWidget *vscrollbar;
291
if (XMdcNoFileOpened()) return;
293
window = gtk_window_new(GTK_WINDOW_TOPLEVEL);
294
gtk_widget_set_usize(window,500,500);
295
gtk_window_set_policy(GTK_WINDOW(window), TRUE, TRUE, FALSE);
297
gtk_signal_connect(GTK_OBJECT(window),"destroy",
298
GTK_SIGNAL_FUNC(gtk_widget_destroy), NULL);
300
sprintf(mdcbufr,"FileInfo: %s",my.fi->ifname);
301
gtk_window_set_title(GTK_WINDOW(window),mdcbufr);
302
gtk_container_set_border_width(GTK_CONTAINER(window),0);
304
box1 = gtk_vbox_new(FALSE,0);
305
gtk_container_add(GTK_CONTAINER(window),box1);
306
gtk_widget_show(box1);
308
box2 = gtk_vbox_new(FALSE,0);
309
gtk_container_set_border_width(GTK_CONTAINER(box2), 0);
310
gtk_box_pack_start(GTK_BOX(box1),box2,TRUE,TRUE,0);
311
gtk_widget_show(box2);
313
table = gtk_table_new(2, 2, FALSE);
314
gtk_table_set_row_spacing(GTK_TABLE(table), 0, 2);
315
gtk_table_set_col_spacing(GTK_TABLE(table), 0, 2);
316
gtk_box_pack_start(GTK_BOX(box2),table,TRUE,TRUE,0);
317
gtk_widget_show(table);
319
text = gtk_text_new(NULL,NULL);
320
gtk_text_set_editable(GTK_TEXT(text),FALSE);
321
gtk_text_set_word_wrap(GTK_TEXT(text), TRUE);
322
gtk_table_attach(GTK_TABLE(table),text, 0, 1, 0, 1,
323
GTK_EXPAND | GTK_SHRINK | GTK_FILL,
324
GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
325
gtk_widget_show(text);
326
hscrollbar = gtk_hscrollbar_new(GTK_TEXT(text)->hadj);
327
gtk_table_attach(GTK_TABLE(table), hscrollbar, 0, 1, 1, 2,
328
GTK_EXPAND | GTK_SHRINK | GTK_FILL, GTK_FILL, 0, 0);
329
gtk_widget_show(hscrollbar);
331
vscrollbar = gtk_vscrollbar_new(GTK_TEXT(text)->vadj);
332
gtk_table_attach(GTK_TABLE(table), vscrollbar, 1, 2, 0, 1,
333
GTK_FILL, GTK_EXPAND | GTK_SHRINK | GTK_FILL, 0, 0);
334
gtk_widget_show(vscrollbar);
336
gtk_text_freeze(GTK_TEXT(text));
338
gtk_widget_realize(text);
340
/* create the general info text */
341
gdk_color_alloc(gtk_widget_get_colormap(window), &Blue);
343
sprintf(xmdcstr,"\nGeneral File Information\n");
344
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
345
sprintf(xmdcstr,"FILE *ifp : ");
346
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
347
if (my.fi->ifp == NULL)
348
sprintf(xmdcstr,"<null>\n");
350
sprintf(xmdcstr,"%p\n",(void *)my.fi->ifp);
351
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
353
sprintf(xmdcstr,"FILE *ofp : ");
354
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
355
if (my.fi->ofp == NULL)
356
sprintf(xmdcstr,"<null>\n");
358
sprintf(xmdcstr,"%p\n",(void *)my.fi->ofp);
359
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
361
sprintf(xmdcstr,"ipath : %s\n",my.fi->ipath);
362
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
363
sprintf(xmdcstr,"opath : %s\n",my.fi->opath);
364
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
365
if (my.fi->idir != NULL)
366
sprintf(xmdcstr,"idir : %s\n",my.fi->idir);
368
sprintf(xmdcstr,"idir : <null>\n");
369
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
370
if (my.fi->odir != NULL)
371
sprintf(xmdcstr,"odir : %s\n",my.fi->odir);
373
sprintf(xmdcstr,"odir : <null>\n");
374
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
375
sprintf(xmdcstr,"ifname : %s\n",my.fi->ifname);
376
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
377
sprintf(xmdcstr,"ofname : %s\n",my.fi->ofname);
378
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
379
v = (int)my.fi->iformat;
380
sprintf(xmdcstr,"iformat : %d (= %s)\n",v,FrmtString[v]);
381
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
382
v = (int)my.fi->rawconv;
383
sprintf(xmdcstr,"rawconv : %d (= %s)\n",v,MdcGetStrRawConv(v));
384
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
385
v = (int)my.fi->endian;
386
sprintf(xmdcstr,"endian : %d (= %s)\n",v,MdcGetStrEndian(v));
387
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
388
v = (int)my.fi->compression;
389
sprintf(xmdcstr,"compression : %d (= %s)\n",v,MdcGetStrCompression(v));
390
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
391
v = (int)my.fi->truncated;
392
sprintf(xmdcstr,"truncated : %d (= %s)\n",v,MdcGetStrYesNo(v));
393
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
394
v = (int)my.fi->diff_type;
395
sprintf(xmdcstr,"diff_type : %d (= %s)\n",v,MdcGetStrYesNo(v));
396
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
397
v = (int)my.fi->diff_size;
398
sprintf(xmdcstr,"diff_size : %d (= %s)\n",v,MdcGetStrYesNo(v));
399
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
401
sprintf(xmdcstr,"\nGeneral Image Information\n");
402
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
403
sprintf(xmdcstr,"number : %u\n",my.fi->number);
404
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
405
sprintf(xmdcstr,"mwidth : %u\n",my.fi->mwidth);
406
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
407
sprintf(xmdcstr,"mheight : %u\n",my.fi->mheight);
408
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
409
sprintf(xmdcstr,"bits : %hu\n",my.fi->bits);
410
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
411
v = (int)my.fi->type;
412
sprintf(xmdcstr,"type : %hu (= %s)\n",v,MdcGetStrPixelType(v));
413
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
415
sprintf(xmdcstr,"dim[0] : %-5hd (= total in use)\n",my.fi->dim[0]);
416
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
417
sprintf(xmdcstr,"dim[1] : %-5hd (= pixels X-dim)\n",my.fi->dim[1]);
418
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
419
sprintf(xmdcstr,"dim[2] : %-5hd (= pixels Y-dim)\n",my.fi->dim[2]);
420
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
421
sprintf(xmdcstr,"dim[3] : %-5hd (= planes | (time) slices)\n",my.fi->dim[3]);
422
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
423
sprintf(xmdcstr,"dim[4] : %-5hd (= frames | time slots | phases)\n",my.fi->dim[4]);
424
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
425
sprintf(xmdcstr,"dim[5] : %-5hd (= gates | R-R intervals)\n",my.fi->dim[5]);
426
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
427
sprintf(xmdcstr,"dim[6] : %-5hd (= beds | detector heads)\n",my.fi->dim[6]);
428
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
429
sprintf(xmdcstr,"dim[7] : %-5hd (= ... | energy windows)\n",my.fi->dim[7]);
430
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
431
sprintf(xmdcstr,"pixdim[0] : %+e\n",my.fi->pixdim[0]);
432
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
433
sprintf(xmdcstr,"pixdim[1] : %+e [mm]\n",my.fi->pixdim[1]);
434
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
435
sprintf(xmdcstr,"pixdim[2] : %+e [mm]\n",my.fi->pixdim[2]);
436
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
437
sprintf(xmdcstr,"pixdim[3] : %+e [mm]\n",my.fi->pixdim[3]);
438
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
439
for (i=4; i<MDC_MAX_DIMS; i++) {
440
sprintf(xmdcstr,"pixdim[%u] : %+e\n",i,my.fi->pixdim[i]);
441
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
443
sprintf(xmdcstr,"glmin : %+e\n",my.fi->glmin);
444
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
445
sprintf(xmdcstr,"glmax : %+e\n",my.fi->glmax);
446
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
447
sprintf(xmdcstr,"qglmin : %+e\n",my.fi->qglmin);
448
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
449
sprintf(xmdcstr,"qglmax : %+e\n",my.fi->qglmax);
450
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
452
sprintf(xmdcstr,"\nOrientation Information\n");
453
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
454
sprintf(xmdcstr,"slice projection : %d (= %s)\n",
455
my.fi->slice_projection,MdcGetStrSlProjection(my.fi->slice_projection));
456
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
457
sprintf(xmdcstr,"patient/slice orientation : %d (= %s)\n",
458
my.fi->pat_slice_orient,MdcGetStrPatSlOrient(my.fi->pat_slice_orient));
459
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
460
sprintf(xmdcstr,"patient position : %s\n",my.fi->pat_pos);
461
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
462
sprintf(xmdcstr,"patient orientation : %s\n",my.fi->pat_orient);
463
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
465
sprintf(xmdcstr,"\nPatient Information\n");
466
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
467
sprintf(xmdcstr,"patient_sex : %s\n",my.fi->patient_sex);
468
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
469
sprintf(xmdcstr,"patient_name : %s\n",my.fi->patient_name);
470
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
471
sprintf(xmdcstr,"patient_id : %s\n",my.fi->patient_id);
472
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
473
sprintf(xmdcstr,"patient_dob : %s\n",my.fi->patient_dob);
474
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
475
sprintf(xmdcstr,"patient_weight: %.2f [kg]\n",my.fi->patient_weight);
476
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
478
sprintf(xmdcstr,"\nStudy Information\n");
479
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
480
sprintf(xmdcstr,"study_descr : %s\n",my.fi->study_descr);
481
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
482
sprintf(xmdcstr,"study_id : %s\n",my.fi->study_id);
483
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
484
sprintf(xmdcstr,"study_date_day : %d\n",my.fi->study_date_day);
485
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
486
sprintf(xmdcstr,"study_date_month : %d\n",my.fi->study_date_month);
487
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
488
sprintf(xmdcstr,"study_date_year : %d\n",my.fi->study_date_year);
489
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
490
sprintf(xmdcstr,"study_time_hour : %d\n",my.fi->study_time_hour);
491
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
492
sprintf(xmdcstr,"study_time_minute: %d\n",my.fi->study_time_minute);
493
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
494
sprintf(xmdcstr,"study_time_second: %d\n",my.fi->study_time_second);
495
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
496
sprintf(xmdcstr,"nr_series : %hd\n",my.fi->nr_series);
497
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
498
sprintf(xmdcstr,"nr_acquisition : %hd\n",my.fi->nr_acquisition);
499
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
500
sprintf(xmdcstr,"nr_instance : %hd\n",my.fi->nr_instance);
501
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
502
v = (int)my.fi->decay_corrected;
503
sprintf(xmdcstr,"decay_corrected : %d (= %s)\n",v,MdcGetStrYesNo(v));
504
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
505
v = (int)my.fi->flood_corrected;
506
sprintf(xmdcstr,"flood_corrected : %d (= %s)\n",v,MdcGetStrYesNo(v));
507
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
508
v = (int)my.fi->acquisition_type;
509
sprintf(xmdcstr,"acquisition_type : %d (= %s)\n",v,MdcGetStrAcquisition(v));
510
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
511
v = (int)my.fi->planar;
512
sprintf(xmdcstr,"planar : %d (= %s)\n",v,MdcGetStrYesNo(v));
513
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
514
v = (int)my.fi->reconstructed;
515
sprintf(xmdcstr,"reconstructed : %d (= %s)\n",v,MdcGetStrYesNo(v));
516
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
517
sprintf(xmdcstr,"recon_method : %s\n",my.fi->recon_method);
518
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
519
sprintf(xmdcstr,"institution : %s\n",my.fi->institution);
520
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
521
sprintf(xmdcstr,"manufacturer : %s\n",my.fi->manufacturer);
522
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
523
sprintf(xmdcstr,"series_descr : %s\n",my.fi->series_descr);
524
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
525
sprintf(xmdcstr,"radiopharma : %s\n",my.fi->radiopharma);
526
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
527
sprintf(xmdcstr,"filter_type : %s\n",my.fi->filter_type);
528
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
529
sprintf(xmdcstr,"organ_code : %s\n",my.fi->organ_code);
530
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
531
sprintf(xmdcstr,"isotope_code : %s\n",my.fi->isotope_code);
532
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
533
sprintf(xmdcstr,"isotope_halflife : %+e [sec]\n",my.fi->isotope_halflife);
534
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
535
sprintf(xmdcstr,"injected_dose : %+e [MBq]\n",my.fi->injected_dose);
536
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
537
sprintf(xmdcstr,"gantry_tilt : %+e [degrees]\n",my.fi->gantry_tilt);
538
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
540
if ((my.fi->gatednr > 0) && (my.fi->gdata != NULL)) {
541
sprintf(xmdcstr,"\nGated (SPECT) Data\n");
542
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
543
sprintf(xmdcstr,"gatednr : %u\n",my.fi->gatednr);
544
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
545
for (i=0; i<my.fi->gatednr; i++) {
546
GATED_DATA *gd = &my.fi->gdata[i];
547
sprintf(xmdcstr,"------- [ %.3u ] --------\n",i+1);
548
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
549
v = (int)gd->gspect_nesting;
550
sprintf(xmdcstr,"gspect_nesting : %d (= %s)\n",gd->gspect_nesting
551
,MdcGetStrGSpectNesting(gd->gspect_nesting));
552
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
553
sprintf(xmdcstr,"nr_projections : %g\n",gd->nr_projections);
554
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
555
sprintf(xmdcstr,"extent_rotation : %g\n",gd->extent_rotation);
556
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
557
sprintf(xmdcstr,"study_duration : %+e [ms] = %s\n"
558
,gd->study_duration,MdcGetStrHHMMSS(gd->study_duration));
559
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
560
sprintf(xmdcstr,"image_duration : %+e [ms] = %s\n"
561
,gd->image_duration,MdcGetStrHHMMSS(gd->image_duration));
562
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
563
sprintf(xmdcstr,"time_per_proj : %+e [ms] = %s\n"
564
,gd->time_per_proj,MdcGetStrHHMMSS(gd->time_per_proj));
565
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
566
sprintf(xmdcstr,"limit window_low : %+e [ms] = %s\n"
567
,gd->window_low,MdcGetStrHHMMSS(gd->window_low));
568
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
569
sprintf(xmdcstr,"limit window_high: %+e [ms] = %s\n"
570
,gd->window_high,MdcGetStrHHMMSS(gd->window_high));
571
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
572
sprintf(xmdcstr,"cycles_observed : %+e\n",gd->cycles_observed);
573
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
574
sprintf(xmdcstr,"cycles_acquired : %+e\n\n",gd->cycles_acquired);
575
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
576
sprintf(xmdcstr,"heart rate (observed): %d [bpm] (auto-filled)\n"
577
,(int)MdcGetHeartRate(gd,MDC_HEART_RATE_OBSERVED));
578
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
579
sprintf(xmdcstr,"heart rate (acquired): %d [bpm] (auto-filled)\n"
580
,(int)MdcGetHeartRate(gd,MDC_HEART_RATE_ACQUIRED));
581
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
584
if ((my.fi->acqnr > 0) && (my.fi->acqdata != NULL)) {
585
sprintf(xmdcstr,"\nAcquisition Data\n");
586
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
587
sprintf(xmdcstr,"acqnr : %u\n",my.fi->acqnr);
588
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
589
for (i=0; i<my.fi->acqnr; i++) {
590
ACQ_DATA *acq = &my.fi->acqdata[i];
591
sprintf(xmdcstr,"-------- [ %.3u ] --------\n",i+1);
592
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
593
v = (int)acq->rotation_direction;
594
sprintf(xmdcstr,"rotation_direction : %d (= %s)\n",v,MdcGetStrRotation(v));
595
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
596
v = (int)acq->detector_motion;
597
sprintf(xmdcstr,"detector_motion : %d (= %s)\n",v,MdcGetStrMotion(v));
598
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
599
sprintf(xmdcstr,"rotation_offset : %g [mm]\n",acq->rotation_offset);
600
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
601
sprintf(xmdcstr,"radial_position : %g [mm]\n",acq->radial_position);
602
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
603
sprintf(xmdcstr,"angle_start : %g [degrees]\n",acq->angle_start);
604
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
605
sprintf(xmdcstr,"angle_step : %g [degrees]\n",acq->angle_step);
606
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
607
sprintf(xmdcstr,"scan_arc : %g [degrees]\n",acq->scan_arc);
608
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
611
if ((my.fi->dynnr > 0) && (my.fi->dyndata != NULL)) {
612
sprintf(xmdcstr,"\nDynamic Data\n");
613
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
614
sprintf(xmdcstr,"dynnr : %u\n",my.fi->dynnr);
615
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
616
for (i=0; i<my.fi->dynnr; i++) {
617
DYNAMIC_DATA *dd = &my.fi->dyndata[i];
618
sprintf(xmdcstr,"-------- [ %.3u ] --------\n",i+1);
619
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
620
sprintf(xmdcstr,"nr_of_slices : %u\n",dd->nr_of_slices);
621
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
622
sprintf(xmdcstr,"time_frame_start : %+e [ms] = %s\n"
623
,dd->time_frame_start,MdcGetStrHHMMSS(dd->time_frame_start));
624
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
625
sprintf(xmdcstr,"time_frame_delay : %+e [ms] = %s\n"
626
,dd->time_frame_delay,MdcGetStrHHMMSS(dd->time_frame_delay));
627
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
628
sprintf(xmdcstr,"time_frame_duration: %+e [ms] = %s\n"
629
,dd->time_frame_duration,MdcGetStrHHMMSS(dd->time_frame_duration));
630
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
631
sprintf(xmdcstr,"delay_slices : %+e [ms] = %s\n"
632
,dd->delay_slices,MdcGetStrHHMMSS(dd->delay_slices));
633
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
636
if ((my.fi->bednr > 0) && (my.fi->beddata != NULL)) {
637
sprintf(xmdcstr,"\nBed Data\n");
638
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
639
sprintf(xmdcstr,"bednr : %u\n",my.fi->bednr);
640
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
641
for (i=0; i<my.fi->bednr; i++) {
642
BED_DATA *bd = &my.fi->beddata[i];
643
sprintf(xmdcstr,"-------- [ %.3u ] --------\n",i+1);
644
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
645
sprintf(xmdcstr,"bed horiz. offset : %+e [mm]\n",bd->hoffset);
646
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
647
sprintf(xmdcstr,"bed vert. offset : %+e [mm]\n", bd->voffset);
648
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
651
sprintf(xmdcstr,"\nInternal Information\n");
652
gtk_text_insert(GTK_TEXT(text),NULL,&Blue,NULL,xmdcstr,-1);
653
sprintf(xmdcstr,"map : %u (= %s)\n",my.fi->map,
654
MdcGetStrColorMap((int)my.fi->map));
655
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
656
sprintf(xmdcstr,"comm_length : %u\n",my.fi->comm_length);
657
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
658
sprintf(xmdcstr,"comment : ");
659
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
660
if (my.fi->comm_length != 0 && my.fi->comment != NULL) {
661
strncpy(xmdcstr,my.fi->comment,my.fi->comm_length);
662
xmdcstr[my.fi->comm_length]='\0';
664
sprintf(xmdcstr,"<null>\n");
666
gtk_text_insert(GTK_TEXT(text),NULL,NULL,NULL,xmdcstr,-1);
668
gtk_text_thaw(GTK_TEXT(text));
670
/* create separator and close button */
671
separator = gtk_hseparator_new();
672
gtk_box_pack_start(GTK_BOX(box1),separator,FALSE,TRUE,0);
673
gtk_widget_show(separator);
675
box2 = gtk_vbox_new(FALSE, 0);
676
gtk_container_set_border_width(GTK_CONTAINER(box2), 0);
677
gtk_box_pack_start(GTK_BOX(box1),box2, FALSE, FALSE, 0);
678
gtk_widget_show(box2);
680
button = gtk_button_new_with_label("Close");
681
gtk_signal_connect_object(GTK_OBJECT(button),"clicked",
682
GTK_SIGNAL_FUNC(gtk_widget_destroy),
685
gtk_box_pack_start(GTK_BOX(box2),button,FALSE,FALSE,0);
686
gtk_widget_show(button);
688
gtk_widget_show(window);