1 /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
2 * filename: xmnuftry.c *
3 * *
4 * UTIL C-source: Medical Image Conversion Utility *
5 * *
6 * purpose : manual menu creation factory *
7 * *
8 * project : (X)MedCon by Erik Nolf *
9 * *
10 * Functions : XMdcAttachMainMenu() - Attach main menu to window *
11 * *
12 * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
13 /*
14 */
15
16 /*
17 Copyright (C) 1997-2021 by Erik Nolf
18
19 This program is free software; you can redistribute it and/or modify it
20 under the terms of the GNU General Public License as published by the
21 Free Software Foundation; either version 2, or (at your option) any later
22 version.
23
24 This program is distributed in the hope that it will be useful, but
25 WITHOUT ANY WARRANTY; without even the implied warranty of
26 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General
27 Public License for more details.
28
29 You should have received a copy of the GNU General Public License along
30 with this program; if not, write to the Free Software Foundation, Inc.,
31 59 Place - Suite 330, Boston, MA 02111-1307, USA. */
32
33 /****************************************************************************
34 H E A D E R S
35 ****************************************************************************/
36
37 #include "xmedcon.h"
38
39 /****************************************************************************
40 D E F I N E S
41 ****************************************************************************/
42
43 /* hack, need those for value by reference in callback functions, because
44 * we can't use #define values; opted to use real #defines for clarity */
45
46 /* FileSelOpen */
47 guint xmdc_file_normal = XMDC_NORMAL;
48 guint xmdc_file_raw = XMDC_RAW;
49 guint xmdc_file_predef = XMDC_PREDEF;
50
51 /* FileSelSave */
52 guint xmdc_frmt_raw = MDC_FRMT_RAW;
53 guint xmdc_frmt_ascii = MDC_FRMT_ASCII;
54 guint xmdc_frmt_acr = MDC_FRMT_ACR;
55 guint xmdc_frmt_anlz = MDC_FRMT_ANLZ;
56 guint xmdc_frmt_conc = MDC_FRMT_CONC;
57 guint xmdc_frmt_dicm = MDC_FRMT_DICM;
58 guint xmdc_frmt_ecat6 = MDC_FRMT_ECAT6;
59 guint xmdc_frmt_ecat7 = MDC_FRMT_ECAT7;
60 guint xmdc_frmt_gif = MDC_FRMT_GIF;
61 guint xmdc_frmt_intf = MDC_FRMT_INTF;
62 guint xmdc_frmt_inw = MDC_FRMT_INW;
63 guint xmdc_frmt_nifti = MDC_FRMT_NIFTI;
64 guint xmdc_frmt_png = MDC_FRMT_PNG;
65
66 guint xmdc_max_frmts = MDC_MAX_FRMTS;
67
68 /* Extract */
69 guint xmdc_extract_normal = MDC_INPUT_NORM_STYLE;
70 guint xmdc_extract_ecat = MDC_INPUT_ECAT_STYLE;
71
72 /* Reslice */
73 guint xmdc_reslice_transaxial = MDC_TRANSAXIAL;
74 guint xmdc_reslice_coronal = MDC_CORONAL;
75 guint xmdc_reslice_sagittal = MDC_SAGITTAL;
76
77 /* Transform */
78 guint xmdc_flip_horizontal = MDC_TRANSF_HORIZONTAL;
79 guint xmdc_flip_vertical = MDC_TRANSF_VERTICAL;
80 guint xmdc_sort_reverse = MDC_TRANSF_REVERSE;
81 guint xmdc_cine_apply = MDC_TRANSF_CINE_APPLY;
82 guint xmdc_cine_undo = MDC_TRANSF_CINE_UNDO;
83 guint xmdc_matrix_square = MDC_TRANSF_SQR1;
84 guint xmdc_matrix_square_pwr2 = MDC_TRANSF_SQR2;
85
86 /****************************************************************************
87 F U N C T I O N S
88 ****************************************************************************/
89
XMdcMenuCbFileOpen(GtkWidget * widget,gpointer data)90 void XMdcMenuCbFileOpen(GtkWidget *widget, gpointer data)
91 {
92 guint *otype = (guint *)data;
93
94 XMdcFileSelOpen(widget, *otype);
95 }
96
XMdcMenuCbFileSave(GtkWidget * widget,gpointer data)97 void XMdcMenuCbFileSave(GtkWidget *widget, gpointer data)
98 {
99 guint *format = (guint *)data;
100
101 XMdcFileSelSave(widget, *format);
102 }
103
XMdcMenuCbExtract(GtkWidget * widget,gpointer data)104 void XMdcMenuCbExtract(GtkWidget *widget, gpointer data)
105 {
106 guint *style = (guint *)data;
107
108 XMdcGetImages(widget, *style);
109 }
110
XMdcMenuCbReslice(GtkWidget * widget,gpointer data)111 void XMdcMenuCbReslice(GtkWidget *widget, gpointer data)
112 {
113 guint *projection = (guint *)data;
114
115 XMdcResliceImages(widget, *projection);
116 }
117
XMdcMenuCbTransform(GtkWidget * widget,gpointer data)118 void XMdcMenuCbTransform(GtkWidget *widget, gpointer data)
119 {
120 guint *transformation = (guint *)data;
121
122 XMdcTransformImages(widget, *transformation);
123 }
124
XMdcAttachMainMenu(GtkWidget * window)125 void XMdcAttachMainMenu(GtkWidget *window)
126 {
127 GtkWidget *menu_bar;
128 GtkWidget *file_item,
129 *file_menu,
130 *open_item,
131 *open_raw_item,
132 *open_raw_menu,
133 *interactive_item,
134 *predefined_item,
135 *separator1,
136 *raw_predef_load_item,
137 *raw_predef_save_item,
138 *separator2,
139 *info_show_item,
140 *info_edit_item,
141 *separator3,
142 *save_item,
143 *save_as_item,
144 *save_as_menu,
145 *save_as_raw_bin_item,
146 *save_as_raw_ascii_item,
147 #if MDC_INCLUDE_ACR
148 *save_as_acr_item,
149 #endif
150 #if MDC_INCLUDE_ANLZ
151 *save_as_anlz_item,
152 #endif
153 #if MDC_INCLUDE_CONC
154 *save_as_conc_item,
155 #endif
156 #if MDC_INCLUDE_DICM
157 *save_as_dicm_item,
158 #endif
159 #if MDC_INCLUDE_ECAT
160 *save_as_ecat6_item,
161 #if MDC_INCLUDE_TPC
162 *save_as_ecat7_item,
163 #endif
164 #endif
165 #if MDC_INCLUDE_GIF
166 *save_as_gif_item,
167 #endif
168 #if MDC_INCLUDE_INTF
169 *save_as_intf_item,
170 #endif
171 #if MDC_INCLUDE_INW
172 *save_as_inw_item,
173 #endif
174 #if MDC_INCLUDE_NIFTI
175 *save_as_nifti_item,
176 #endif
177 #if MDC_INCLUDE_PNG
178 *save_as_png_item,
179 #endif
180 *separator4,
181 *close_item,
182 *quit_item,
183 *images_item,
184 *images_menu,
185 *view_item,
186 *extract_item,
187 *extract_menu,
188 *extract_normal_item,
189 *extract_ecat_item,
190 *reslice_item,
191 *reslice_menu,
192 *reslice_tra_item,
193 *reslice_cor_item,
194 *reslice_sag_item,
195 *flip_item,
196 *flip_menu,
197 *flip_horizontal_item,
198 *flip_vertical_item,
199 *sort_item,
200 *sort_menu,
201 *reverse_item,
202 *cine_item,
203 *cine_menu,
204 *cine_apply_item,
205 *cine_undo_item,
206 *matrix_item,
207 *matrix_menu,
208 *square_item,
209 *square_pwr2_item,
210 *options_item,
211 *options_menu,
212 *medcon_item,
213 *render_item,
214 *labels_item,
215 *pages_item,
216 *resize_item,
217 *colormap_item,
218 *colormap_menu,
219 *colors_item,
220 *place_item,
221 *help_item,
222 *help_menu,
223 *online_info_item,
224 *console_logs_item,
225 *about_item;
226
227 GtkWidget *vbox;
228
229 /* vbox to put menu in */
230 vbox = gtk_vbox_new(FALSE, 0);
231 gtk_container_add(GTK_CONTAINER(window), vbox);
232 gtk_widget_show(vbox);
233
234 /* menu_bar to hold menus */
235 menu_bar = gtk_menu_bar_new();
236
237 /* create menu items for menu_bar */
238 file_item = gtk_menu_item_new_with_label("File");
239 images_item = gtk_menu_item_new_with_label("Images");
240 options_item = gtk_menu_item_new_with_label("Options");
241 help_item = gtk_menu_item_new_with_label("Help");
242
243 /* add menu items to menu_bar, left to right order */
244 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), file_item);
245 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), images_item);
246 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), options_item);
247 gtk_menu_shell_append(GTK_MENU_SHELL(menu_bar), help_item);
248
249 /*** create File menu ***/
250 file_menu = gtk_menu_new();
251
252 gtk_menu_item_set_submenu(GTK_MENU_ITEM(file_item), file_menu);
253
254 open_item = gtk_menu_item_new_with_label("Open");
255 open_raw_item = gtk_menu_item_new_with_label("Open Raw");
256 separator1 = gtk_separator_menu_item_new();
257 raw_predef_load_item = gtk_menu_item_new_with_label("Raw Predef Load");
258 raw_predef_save_item = gtk_menu_item_new_with_label("Raw Predef Save");
259 separator2 = gtk_separator_menu_item_new();
260 info_show_item = gtk_menu_item_new_with_label("Info Show");
261 info_edit_item = gtk_menu_item_new_with_label("Info Edit");
262 separator3 = gtk_separator_menu_item_new();
263 save_item = gtk_menu_item_new_with_label("Save");
264 save_as_item = gtk_menu_item_new_with_label("Save As");
265 separator4 = gtk_separator_menu_item_new();
266 close_item = gtk_menu_item_new_with_label("Close");
267 quit_item = gtk_menu_item_new_with_label("Quit");
268
269 /* attach file sub items */
270 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), open_item);
271 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), open_raw_item);
272 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), separator1);
273 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), raw_predef_load_item);
274 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), raw_predef_save_item);
275 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), separator2);
276 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), info_show_item);
277 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), info_edit_item);
278 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), separator3);
279 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), save_item);
280 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), save_as_item);
281 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), separator4);
282 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), close_item);
283 gtk_menu_shell_append(GTK_MENU_SHELL(file_menu), quit_item);
284
285 /* attach file sub callbacks */
286 g_signal_connect(GTK_OBJECT(open_item), "activate",
287 G_CALLBACK(XMdcFileSelOpen), (gpointer) &xmdc_file_normal);
288
289 g_signal_connect(GTK_OBJECT(raw_predef_load_item), "activate",
290 G_CALLBACK(XMdcRawPredefSelOpen), NULL);
291
292 g_signal_connect(GTK_OBJECT(raw_predef_save_item), "activate",
293 G_CALLBACK(XMdcRawPredefSelSave), NULL);
294
295 g_signal_connect(GTK_OBJECT(info_show_item), "activate",
296 G_CALLBACK(XMdcShowFileInfo), NULL);
297
298 g_signal_connect(GTK_OBJECT(info_edit_item), "activate",
299 G_CALLBACK(XMdcEditFileInfo), NULL);
300
301 g_signal_connect(GTK_OBJECT(save_item), "activate",
302 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_max_frmts);
303
304 g_signal_connect(GTK_OBJECT(close_item), "activate",
305 G_CALLBACK(XMdcCloseFile), NULL);
306
307 g_signal_connect(GTK_OBJECT(quit_item), "activate",
308 G_CALLBACK(XMdcMedconQuit), NULL);
309
310 /* open raw sub menus */
311 open_raw_menu = gtk_menu_new();
312
313 gtk_menu_item_set_submenu(GTK_MENU_ITEM(open_raw_item), open_raw_menu);
314
315 interactive_item = gtk_menu_item_new_with_label("Interactive");
316 predefined_item = gtk_menu_item_new_with_label("Predefined");
317
318 gtk_menu_shell_append(GTK_MENU_SHELL(open_raw_menu), interactive_item);
319 gtk_menu_shell_append(GTK_MENU_SHELL(open_raw_menu), predefined_item);
320
321 /* attach raw sub callbacks */
322 g_signal_connect(GTK_OBJECT(interactive_item), "activate",
323 G_CALLBACK(XMdcMenuCbFileOpen), (gpointer) &xmdc_file_raw);
324
325 g_signal_connect(GTK_OBJECT(predefined_item), "activate",
326 G_CALLBACK(XMdcMenuCbFileOpen), (gpointer) &xmdc_file_predef);
327
328 /* save as sub menus */
329 save_as_menu = gtk_menu_new();
330
331 gtk_menu_item_set_submenu(GTK_MENU_ITEM(save_as_item), save_as_menu);
332
333 save_as_raw_bin_item = gtk_menu_item_new_with_label("Raw Binary");
334 save_as_raw_ascii_item = gtk_menu_item_new_with_label("Raw Ascii");
335 #if MDC_INCLUDE_ACR
336 save_as_acr_item = gtk_menu_item_new_with_label("Acr/Nema");
337 #endif
338 #if MDC_INCLUDE_ANLZ
339 save_as_anlz_item = gtk_menu_item_new_with_label("Analyze");
340 #endif
341 #if MDC_INCLUDE_CONC
342 save_as_conc_item = gtk_menu_item_new_with_label("Concorde");
343 #endif
344 #if MDC_INCLUDE_DICM
345 save_as_dicm_item = gtk_menu_item_new_with_label("DICOM");
346 #endif
347 #if MDC_INCLUDE_ECAT
348 save_as_ecat6_item = gtk_menu_item_new_with_label("Ecat 6");
349 #if MDC_INCLUDE_TPC
350 save_as_ecat7_item = gtk_menu_item_new_with_label("Ecat 7");
351 #endif
352 #endif
353 #if MDC_INCLUDE_GIF
354 save_as_gif_item = gtk_menu_item_new_with_label("Gif89a");
355 #endif
356 #if MDC_INCLUDE_INTF
357 save_as_intf_item = gtk_menu_item_new_with_label("InterFile");
358 #endif
359 #if MDC_INCLUDE_INW
360 save_as_inw_item = gtk_menu_item_new_with_label("INW (RUG)");
361 #endif
362 #if MDC_INCLUDE_NIFTI
363 save_as_nifti_item = gtk_menu_item_new_with_label("NIfTI");
364 #endif
365 #if MDC_INCLUDE_PNG
366 save_as_png_item = gtk_menu_item_new_with_label("PNG");
367 #endif
368
369 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_raw_bin_item);
370 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_raw_ascii_item);
371 #if MDC_INCLUDE_ACR
372 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_acr_item);
373 #endif
374 #if MDC_INCLUDE_ANLZ
375 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_anlz_item);
376 #endif
377 #if MDC_INCLUDE_CONC
378 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_conc_item);
379 #endif
380 #if MDC_INCLUDE_DICM
381 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_dicm_item);
382 #endif
383 #if MDC_INCLUDE_ECAT
384 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_ecat6_item);
385 #if MDC_INCLUDE_TPC
386 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_ecat7_item);
387 #endif
388 #endif
389 #if MDC_INCLUDE_GIF
390 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_gif_item);
391 #endif
392 #if MDC_INCLUDE_INTF
393 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_intf_item);
394 #endif
395 #if MDC_INCLUDE_INW
396 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_inw_item);
397 #endif
398 #if MDC_INCLUDE_NIFTI
399 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_nifti_item);
400 #endif
401 #if MDC_INCLUDE_PNG
402 gtk_menu_shell_append(GTK_MENU_SHELL(save_as_menu), save_as_png_item);
403 #endif
404
405 /* attach save as callbacks */
406
407 g_signal_connect(GTK_OBJECT(save_as_raw_bin_item), "activate",
408 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_raw);
409
410 g_signal_connect(GTK_OBJECT(save_as_raw_ascii_item), "activate",
411 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_ascii);
412 #if MDC_INCLUDE_ACR
413 g_signal_connect(GTK_OBJECT(save_as_acr_item), "activate",
414 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_acr);
415 #endif
416 #if MDC_INCLUDE_ANLZ
417 g_signal_connect(GTK_OBJECT(save_as_anlz_item), "activate",
418 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_anlz);
419 #endif
420 #if MDC_INCLUDE_CONC
421 g_signal_connect(GTK_OBJECT(save_as_conc_item), "activate",
422 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_conc);
423 #endif
424 #if MDC_INCLUDE_DICM
425 g_signal_connect(GTK_OBJECT(save_as_dicm_item), "activate",
426 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_dicm);
427 #endif
428 #if MDC_INCLUDE_ECAT
429 g_signal_connect(GTK_OBJECT(save_as_ecat6_item), "activate",
430 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_ecat6);
431 #if MDC_INCLUDE_TPC
432 g_signal_connect(GTK_OBJECT(save_as_ecat7_item), "activate",
433 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_ecat7);
434 #endif
435 #endif
436 #if MDC_INCLUDE_GIF
437 g_signal_connect(GTK_OBJECT(save_as_gif_item), "activate",
438 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_gif);
439 #endif
440 #if MDC_INCLUDE_INTF
441 g_signal_connect(GTK_OBJECT(save_as_intf_item), "activate",
442 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_intf);
443 #endif
444 #if MDC_INCLUDE_INW
445 g_signal_connect(GTK_OBJECT(save_as_inw_item), "activate",
446 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_inw);
447 #endif
448 #if MDC_INCLUDE_NIFTI
449 g_signal_connect(GTK_OBJECT(save_as_nifti_item), "activate",
450 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_nifti);
451 #endif
452 #if MDC_INCLUDE_PNG
453 g_signal_connect(GTK_OBJECT(save_as_png_item), "activate",
454 G_CALLBACK(XMdcMenuCbFileSave), (gpointer) &xmdc_frmt_png);
455 #endif
456
457 /*** create Images menu ***/
458 images_menu = gtk_menu_new();
459
460 gtk_menu_item_set_submenu(GTK_MENU_ITEM(images_item), images_menu);
461
462 view_item = gtk_menu_item_new_with_label("View");
463 extract_item = gtk_menu_item_new_with_label("Extract");
464 reslice_item = gtk_menu_item_new_with_label("Reslice");
465 flip_item = gtk_menu_item_new_with_label("Flip");
466 sort_item = gtk_menu_item_new_with_label("Sort");
467 matrix_item = gtk_menu_item_new_with_label("Matrix");
468
469 gtk_menu_shell_append(GTK_MENU_SHELL(images_menu), view_item);
470 gtk_menu_shell_append(GTK_MENU_SHELL(images_menu), extract_item);
471 gtk_menu_shell_append(GTK_MENU_SHELL(images_menu), reslice_item);
472 gtk_menu_shell_append(GTK_MENU_SHELL(images_menu), flip_item);
473 gtk_menu_shell_append(GTK_MENU_SHELL(images_menu), sort_item);
474 gtk_menu_shell_append(GTK_MENU_SHELL(images_menu), matrix_item);
475
476 /* attach images callbacks */
477 g_signal_connect(GTK_OBJECT(view_item), "activate",
478 G_CALLBACK(XMdcImagesView), NULL);
479
480 /* extract sub menu */
481 extract_menu = gtk_menu_new();
482
483 gtk_menu_item_set_submenu(GTK_MENU_ITEM(extract_item), extract_menu);
484
485 extract_normal_item = gtk_menu_item_new_with_label("Normal");
486 extract_ecat_item = gtk_menu_item_new_with_label("Ecat");
487
488 gtk_menu_shell_append(GTK_MENU_SHELL(extract_menu), extract_normal_item);
489 gtk_menu_shell_append(GTK_MENU_SHELL(extract_menu), extract_ecat_item);
490
491 /* attacht extract callbacks */
492 g_signal_connect(GTK_OBJECT(extract_normal_item), "activate",
493 G_CALLBACK(XMdcMenuCbExtract), &xmdc_extract_normal);
494
495 g_signal_connect(GTK_OBJECT(extract_ecat_item), "activate",
496 G_CALLBACK(XMdcMenuCbExtract), &xmdc_extract_ecat);
497
498 /* reslice sub menu */
499 reslice_menu = gtk_menu_new();
500
501 gtk_menu_item_set_submenu(GTK_MENU_ITEM(reslice_item), reslice_menu);
502
503 reslice_tra_item = gtk_menu_item_new_with_label("Transaxial (XY)");
504 reslice_cor_item = gtk_menu_item_new_with_label("Coronal (XZ)");
505 reslice_sag_item = gtk_menu_item_new_with_label("Sagittal (YZ)");
506
507 gtk_menu_shell_append(GTK_MENU_SHELL(reslice_menu), reslice_tra_item);
508 gtk_menu_shell_append(GTK_MENU_SHELL(reslice_menu), reslice_cor_item);
509 gtk_menu_shell_append(GTK_MENU_SHELL(reslice_menu), reslice_sag_item);
510
511 /* attach reslice callbacks */
512 g_signal_connect(GTK_OBJECT(reslice_tra_item), "activate",
513 G_CALLBACK(XMdcMenuCbReslice), (gpointer) &xmdc_reslice_transaxial);
514
515 g_signal_connect(GTK_OBJECT(reslice_cor_item), "activate",
516 G_CALLBACK(XMdcMenuCbReslice), (gpointer) &xmdc_reslice_coronal);
517
518 g_signal_connect(GTK_OBJECT(reslice_sag_item), "activate",
519 G_CALLBACK(XMdcMenuCbReslice), (gpointer) &xmdc_reslice_sagittal);
520
521 /* flip sub menu */
522 flip_menu = gtk_menu_new();
523
524 gtk_menu_item_set_submenu(GTK_MENU_ITEM(flip_item), flip_menu);
525
526 flip_horizontal_item = gtk_menu_item_new_with_label("Horizontal");
527 flip_vertical_item = gtk_menu_item_new_with_label("Vertical");
528
529 gtk_menu_shell_append(GTK_MENU_SHELL(flip_menu), flip_horizontal_item);
530 gtk_menu_shell_append(GTK_MENU_SHELL(flip_menu), flip_vertical_item);
531
532 /* attach flip callbacks */
533
534 g_signal_connect(GTK_OBJECT(flip_horizontal_item), "activate",
535 G_CALLBACK(XMdcMenuCbTransform), (gpointer) &xmdc_flip_horizontal);
536
537 g_signal_connect(GTK_OBJECT(flip_vertical_item), "activate",
538 G_CALLBACK(XMdcMenuCbTransform), (gpointer) &xmdc_flip_vertical);
539
540 /* sort sub menu */
541 sort_menu = gtk_menu_new();
542
543 gtk_menu_item_set_submenu(GTK_MENU_ITEM(sort_item), sort_menu);
544
545 reverse_item = gtk_menu_item_new_with_label("Reverse");
546 cine_item = gtk_menu_item_new_with_label("Cine");
547
548 gtk_menu_shell_append(GTK_MENU_SHELL(sort_menu), reverse_item);
549 gtk_menu_shell_append(GTK_MENU_SHELL(sort_menu), cine_item);
550
551 /* attach sort callback */
552 g_signal_connect(GTK_OBJECT(reverse_item), "activate",
553 G_CALLBACK(XMdcMenuCbTransform), (gpointer) &xmdc_sort_reverse);
554
555 /* cine sub menu */
556 cine_menu = gtk_menu_new();
557
558 gtk_menu_item_set_submenu(GTK_MENU_ITEM(cine_item), cine_menu);
559
560 cine_apply_item = gtk_menu_item_new_with_label("Apply");
561 cine_undo_item = gtk_menu_item_new_with_label("Undo");
562
563 gtk_menu_shell_append(GTK_MENU_SHELL(cine_menu), cine_apply_item);
564 gtk_menu_shell_append(GTK_MENU_SHELL(cine_menu), cine_undo_item);
565
566 /* attach cine callbacks */
567 g_signal_connect(GTK_OBJECT(cine_apply_item), "activate",
568 G_CALLBACK(XMdcMenuCbTransform), (gpointer) &xmdc_cine_apply);
569
570 g_signal_connect(GTK_OBJECT(cine_undo_item), "activate",
571 G_CALLBACK(XMdcMenuCbTransform), (gpointer) &xmdc_cine_undo);
572
573 /* matrix sub menu */
574 matrix_menu = gtk_menu_new();
575
576 gtk_menu_item_set_submenu(GTK_MENU_ITEM(matrix_item), matrix_menu);
577
578 square_item = gtk_menu_item_new_with_label("Square");
579 square_pwr2_item = gtk_menu_item_new_with_label("Square Pwr2");
580
581 gtk_menu_shell_append(GTK_MENU_SHELL(matrix_menu), square_item);
582 gtk_menu_shell_append(GTK_MENU_SHELL(matrix_menu), square_pwr2_item);
583
584 /* attach matrix callbacks */
585 g_signal_connect(GTK_OBJECT(square_item), "activate",
586 G_CALLBACK(XMdcMenuCbTransform), (gpointer) &xmdc_matrix_square);
587
588 g_signal_connect(GTK_OBJECT(square_pwr2_item), "activate",
589 G_CALLBACK(XMdcMenuCbTransform), (gpointer) &xmdc_matrix_square_pwr2);
590
591 /*** create Options menu */
592 options_menu = gtk_menu_new();
593
594 gtk_menu_item_set_submenu(GTK_MENU_ITEM(options_item), options_menu);
595
596 medcon_item = gtk_menu_item_new_with_label("MedCon");
597 render_item = gtk_menu_item_new_with_label("Render");
598 labels_item = gtk_menu_item_new_with_label("Labels");
599 pages_item = gtk_menu_item_new_with_label("Pages");
600 resize_item = gtk_menu_item_new_with_label("Resize");
601 colormap_item = gtk_menu_item_new_with_label("Colormap");
602
603 gtk_menu_shell_append(GTK_MENU_SHELL(options_menu), medcon_item);
604 gtk_menu_shell_append(GTK_MENU_SHELL(options_menu), render_item);
605 gtk_menu_shell_append(GTK_MENU_SHELL(options_menu), labels_item);
606 gtk_menu_shell_append(GTK_MENU_SHELL(options_menu), pages_item);
607 gtk_menu_shell_append(GTK_MENU_SHELL(options_menu), resize_item);
608 gtk_menu_shell_append(GTK_MENU_SHELL(options_menu), colormap_item);
609
610 /* attacht options callbacks */
611 g_signal_connect(GTK_OBJECT(medcon_item), "activate",
612 G_CALLBACK(XMdcOptionsMedconSel), NULL);
613
614 g_signal_connect(GTK_OBJECT(render_item), "activate",
615 G_CALLBACK(XMdcOptionsRenderSel), NULL);
616
617 g_signal_connect(GTK_OBJECT(labels_item), "activate",
618 G_CALLBACK(XMdcOptionsLabelSel), NULL);
619
620 g_signal_connect(GTK_OBJECT(pages_item), "activate",
621 G_CALLBACK(XMdcOptionsPagesSel), NULL);
622
623 g_signal_connect(GTK_OBJECT(resize_item), "activate",
624 G_CALLBACK(XMdcOptionsResizeSel), NULL);
625
626 /* colormap sub menu */
627 colormap_menu = gtk_menu_new();
628
629 gtk_menu_item_set_submenu(GTK_MENU_ITEM(colormap_item), colormap_menu);
630
631 colors_item = gtk_menu_item_new_with_label("Colors");
632 place_item = gtk_menu_item_new_with_label("Place");
633
634 gtk_menu_shell_append(GTK_MENU_SHELL(colormap_menu), colors_item);
635 gtk_menu_shell_append(GTK_MENU_SHELL(colormap_menu), place_item);
636
637 /* attach colormap callbacks */
638 g_signal_connect(GTK_OBJECT(colors_item), "activate",
639 G_CALLBACK(XMdcOptionsColorMapSel), NULL);
640
641 g_signal_connect(GTK_OBJECT(place_item), "activate",
642 G_CALLBACK(XMdcOptionsMapPlaceSel), NULL);
643
644 /*** create Help menu ***/
645 help_menu = gtk_menu_new();
646
647 gtk_menu_item_set_submenu(GTK_MENU_ITEM(help_item), help_menu);
648
649 online_info_item = gtk_menu_item_new_with_label("Online Info");
650 console_logs_item = gtk_menu_item_new_with_label("Console Logs");
651 about_item = gtk_menu_item_new_with_label("About");
652
653 gtk_menu_shell_append(GTK_MENU_SHELL(help_menu), online_info_item);
654 gtk_menu_shell_append(GTK_MENU_SHELL(help_menu), console_logs_item);
655 gtk_menu_shell_append(GTK_MENU_SHELL(help_menu), about_item);
656
657 /* attach help callbacks */
658 g_signal_connect(GTK_OBJECT(online_info_item), "activate",
659 G_CALLBACK(XMdcHelp), NULL);
660
661 g_signal_connect(GTK_OBJECT(console_logs_item), "activate",
662 G_CALLBACK(XMdcShowLogConsole), NULL);
663
664 g_signal_connect(GTK_OBJECT(about_item), "activate",
665 G_CALLBACK(XMdcAbout), NULL);
666
667 /* finally show & attach menu */
668 gtk_widget_show_all(menu_bar);
669 gtk_box_pack_start(GTK_BOX(vbox), menu_bar, FALSE, FALSE, 2);
670
671 }
672
673