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