Skip to content

AFNI/NIfTI Server

Sections
Personal tools
You are here: Home » AFNI » Documentation

Doxygen Source Code Documentation


Main Page   Alphabetical List   Data Structures   File List   Data Fields   Globals   Search  

afni_widg.c File Reference

#include "afni.h"
#include "afni_plugout.h"
#include "logo.h"
#include "afni48.xbm"
#include "afni48cor.xbm"
#include "afni48axi.xbm"
#include "afni48sag.xbm"
#include "afni48gra.xbm"
#include "afni48gracor.xbm"
#include "afni48grasag.xbm"
#include "afni48graaxi.xbm"
#include "afni16.xbm"
#include "rwc.xbm"
#include "lll.h"

Go to the source code of this file.


Defines

#define WANT_LOGO_BITMAP
#define WANT_AFNI_BITMAP
#define COLSIZE   AV_colsize()
#define AVOPT_STYLE   MCW_AV_optmenu
#define REPORT_PROGRESS(str)   do{ if(AFNI_VERBOSE){printf(str);fflush(stdout);} } while(0)
#define REFRESH
#define AFNI_tlrc_big_bbox_help
#define AFNI_see_marks_bbox_help
#define AFNI_see_func_bbox_help
#define AFNI_marks_edits_bbox_help
#define AFNI_crosshair_av_help
#define AFNI_crosshair_color_help
#define AFNI_crosshair_gap_help
#define AFNI_crosshair_label_help
#define AFNI_view_help
#define AFNI_disp_pcolor_help
#define AFNI_disp_scolor_help
#define AFNI_disp_size_help
#define AFNI_disp_gap_help
#define AFNI_marks_set_help
#define AFNI_marks_clear_help
#define AFNI_marks_quality_help
#define AFNI_help_help
#define AFNI_quit_help
#define AFNI_marks_transform_help
#define AFNI_disp_resam_vox_help
#define AFNI_FORM_SPACING   9
#define ICON_bg   bg_pix
#define ICON_fg   fg_pix
#define xyz_3DIM   "Axial "
#define yzx_3DIM   "Sagittal"
#define zxy_3DIM   "Coronal "
#define SELECTOR_HEIGHT   240
#define SCALE_EXTRA   66

Functions

void AFNI_make_wid1 (Three_D_View *)
void AFNI_make_wid2 (Three_D_View *)
void AFNI_make_wid3 (Three_D_View *)
void AFNI_make_widgets (Three_D_View *im3d)
void AFNI_raiseup_CB (Widget w, XtPointer cd, XtPointer cb)
int AFNI_count_controllers (void)
Three_D_ViewAFNI_find_open_controller (void)
void AFNI_popup_message (char *str)
int AFNI_controller_index (Three_D_View *im3d)
Three_D_Viewnew_AFNI_controller (Widget shell, MCW_DC *dc, int im3d_type)
float DSET_bigness (THD_3dim_dataset *dset)
void AFNI_initialize_controller (Three_D_View *im3d)
void AFNI_make_controller (int cii)
void AFNI_clone_controller_CB (Widget wcall, XtPointer cd, XtPointer cbs)
void AFNI_controller_clonify (void)
void AFNI_lock_button (Three_D_View *im3d)
void AFNI_misc_button (Three_D_View *im3d)

Variables

int num_entry = 0
char * AFNI_dummy_av_label [2] = { "Nothing 1" , "Nothing 2" }
char * AFNI_crosshair_av_label [9]
char * AFNI_see_marks_bbox_label [1] = { "See Markers" }
char * AFNI_see_func_bbox_label [1] = { "See OverLay" }
char * AFNI_wrap_bbox_label [1] = {"Wrap"}
char * AFNI_xhall_bbox_label [1] = {"X+"}
char * AFNI_marks_edits_bbox_label [1] = { "Allow edits" }
char * AFNI_range_bbox_label [1] = { "autoRange:xxxxxxxxx" }
char * AFNI_inten_bbox_label [1] = { "Pos?" }
char * AFNI_tlrc_big_bbox_label [1] = { "Big Talairach Box?" }
char * AFNI_anatmode_bbox_label [2]
char * AFNI_funcmode_bbox_label [2]
AFNI_widget_setvwid
AFNI_imaging_widgetsimag
AFNI_viewing_widgetsview
AFNI_marks_widgetsmarks
AFNI_function_widgetsfunc
AFNI_program_widgetsprog
AFNI_datamode_widgetsdmode
XmString xstr
XmFontList xflist
char str [256]
int id
int npane
int last_color
int view_count
int view_height
int sel_height
int cii_override = -1

Define Documentation

#define AFNI_crosshair_av_help
 

Value:

"Off:    no display of crosshairs\n"          \
   "Single: display of single crosshairs\n"      \
   "Multi:  display of crosshairs for each\n"    \
   "         slice in the 'montage' layouts\n"   \
   "LR+AP:  display crosshairs only parallel\n"  \
   "         to the L-R and A-P axes [etc.]\n\n" \
   "N.B.: When a slice has an image viewer\n"    \
   " and a grapher open at the same time,\n"     \
   " then a 'frame' will be drawn around\n"      \
   " the voxels being graphed.  In Single\n"     \
   " crosshair mode, only this frame will\n"     \
   " be drawn.  In Multi mode, the actual\n"     \
   " crosshairs will also be drawn.\n"           \
   "N.B.: You can set AFNI_CROSSHAIR_LINES\n"    \
   " in Datamode->Misc->Edit Environment\n"      \
   " to have crosshairs drawn as thin lines\n"   \
   " rather than as overlaid voxels."

Definition at line 146 of file afni_widg.c.

#define AFNI_crosshair_color_help
 

Value:

"Controls the\n"               \
   "crosshair color\n"            \
   "in the image\n"               \
   "viewing windows."

Definition at line 165 of file afni_widg.c.

#define AFNI_crosshair_gap_help
 

Value:

"Controls the crosshair\n"    \
   "gap (in voxels).\n\n"        \
   "N.B.: When a grapher is\n"   \
   "  opened with an image\n"    \
   "  viewer, then the gap\n"    \
   "  in that viewer will\n"     \
   "  be replaced by a\n"        \
   "  frame drawn around the\n"  \
   "  voxels being graphed."

Definition at line 171 of file afni_widg.c.

#define AFNI_crosshair_label_help
 

Value:

"Displays coordinates of\n"         \
   "the crosshair point in the\n"      \
   "DICOM coordinates (3D input)\n"    \
   "or voxel indices (image input)\n"  \
   "\n"                                \
   "A Button-3 popup menu lets you\n"  \
   "change coordinate display order."

Definition at line 182 of file afni_widg.c.

#define AFNI_disp_gap_help
 

Value:

"Controls the gap\n"       \
   "in the markers'\n"        \
   "cross (in pixels)"

Definition at line 224 of file afni_widg.c.

#define AFNI_disp_pcolor_help
 

Value:

"Controls the color used\n" \
   "to display the selected\n" \
   "marker (the 'primary').\n" \
   "\n"                        \
   "Oct 1998: Also controls\n" \
   "   the color for 'tags'."

Definition at line 206 of file afni_widg.c.

#define AFNI_disp_resam_vox_help
 

Value:

"Use the arrows (or type) to set the\n"  \
   "(cubical) voxel dimensions for the\n"   \
   "data resampling"

Definition at line 280 of file afni_widg.c.

#define AFNI_disp_scolor_help
 

Value:

"Controls the color used\n"  \
   "to display non-selected\n"  \
   "markers (the 'secondaries')"

Definition at line 214 of file afni_widg.c.

#define AFNI_disp_size_help
 

Value:

"Controls the size\n"      \
   "of the markers on\n"      \
   "the screen (pixels)"

Definition at line 219 of file afni_widg.c.

#define AFNI_FORM_SPACING   9
 

#define AFNI_help_help
 

Value:

"Click the hand\n"   \
   "on any button to\n"  \
   "get a little help\n"  \
   " ----- OR -----\n"     \
   "Use the Motif Help\n"   \
   "key (usually F1) if\n"   \
   "the cursor is over\n"     \
   "a button."

Definition at line 245 of file afni_widg.c.

#define AFNI_marks_clear_help
 

Value:

"Use this button to\n"       \
   "clear (unset) the chosen\n" \
   "marker point"

Definition at line 234 of file afni_widg.c.

#define AFNI_marks_edits_bbox_help
 

Value:

"pressed IN:  you are allowed to change the markers\n"     \
   "pressed OUT: you aren't allowed to change the markers\n\n"\
   "WARNING: if you previously executed a geometric\n"        \
   "transformation, and then re-execute it with\n"            \
   "altered markers, you will re-write the old transformed\n" \
   "dataset, AND also destroy any `downstream' transformed\n" \
   "datasets -- for example, re-doing a AC-PC aligned view\n" \
   "will destroy the Talairach view (if any) that follows it"

Definition at line 136 of file afni_widg.c.

#define AFNI_marks_quality_help
 

Value:

"Use this button to run quality\n" \
 "checks on the marker set\n"       \
 "after all markers are defined\n"  \
 "and to enable the transformation"

Definition at line 239 of file afni_widg.c.

#define AFNI_marks_set_help
 

Value:

"Use this button to\n"      \
   "set or reset the chosen\n" \
   "marker point"

Definition at line 229 of file afni_widg.c.

#define AFNI_marks_transform_help
 

Value:

"Use this button to execute the geometric\n"               \
   "transformation when all the marker points\n"              \
   "have been properly defined.\n\n"                          \
   "WARNING: if you previously executed a geometric\n"        \
   "transformation, and then re-execute it with\n"            \
   "altered markers, you will re-write the old transformed\n" \
   "dataset, AND also destroy any `downstream' transformed\n" \
   "datasets -- for example, re-doing a AC-PC aligned view\n" \
   "will destroy the Talairach view (if any) that follows it"

Definition at line 269 of file afni_widg.c.

#define AFNI_quit_help
 

Value:

"  Press (twice) to\n"  \
   "  close this AFNI\n"   \
   "  control window.\n\n" \
   "N.B.: when the last\n" \
   "  control window is\n" \
   "  closed, AFNI will\n" \
   "  quit.\n\n"            \
   "Pressing this button\n"  \
   "with the Shift or Ctrl\n" \
   "keys, or with the other\n" \
   "mouse buttons also down,\n" \
   "will also make AFNI quit."

Definition at line 255 of file afni_widg.c.

#define AFNI_see_func_bbox_help
 

Value:

"pressed IN:  overlay dataset will display\n"       \
   "pressed OUT: overlay dataset won't display"        \
   "\n"                                                \
   "This is useful for seeing what anatomical\n"       \
   "features are 'under' a particular overlay color."

Definition at line 129 of file afni_widg.c.

#define AFNI_see_marks_bbox_help
 

Value:

"pressed IN:  markers for this view will display\n" \
   "pressed OUT: markers for this view won't display\n"\
   "\n"                                                \
   "Markers are used to specify anatomical locations\n"\
   "required for transformation of coordinates.\n"     \
   "\n"                                                \
   "Oct 1998: Also controls the display of dataset\n"  \
   "          'tags' -- see the 'Edit Tagset' plugin."

Definition at line 119 of file afni_widg.c.

#define AFNI_tlrc_big_bbox_help
 

Value:

"pressed IN:  Uses a larger 'bounding box' when creating\n"        \
   "             the Talairach view; this extends 10 mm more\n"       \
   "             inferior than the old box, which will encompass\n"   \
   "             all of the cerebellum and more of the brainstem.\n"  \
   "\n"                                                               \
   "pressed OUT: Uses the old 'bounding box' size when creating\n"    \
   "             the Talairach view; this is for compatibility\n"     \
   "             with BRIKs created with older versions of AFNI.\n"   \
   "\n"                                                               \
   "Nota Bene:   The state of this button is only used by AFNI at\n"  \
   "             moment the 'Transform Data' button is used to\n"     \
   "             transform from the AC-PC aligned view to the\n"      \
   "             Talairach view."

Definition at line 98 of file afni_widg.c.

#define AFNI_view_help
 

Value:

"Normal:   button opens viewing window\n"      \
   "Inverted: button raises opened window\n"      \
   "     * Right-click on inverted button\n"      \
   "       'fetches' image/graph window\n\n"      \
   "N.B.: AFNI does not read datasets from\n"     \
   "      disk until a window is opened.\n"       \
   "      This can make opening the first\n"      \
   "      viewing window be quite slow.\n"        \
   "\n"                                           \
   "The Graph buttons are only enabled for\n"     \
   "datasets that are viewing their data files\n" \
   "directly (NOT warping on demand -- see the\n" \
   "top of the 'Define Datamode' control panel)"

Definition at line 191 of file afni_widg.c.

#define AVOPT_STYLE   MCW_AV_optmenu
 

Definition at line 53 of file afni_widg.c.

#define COLSIZE   AV_colsize()
 

if USE_OPTMENUS is defined, then option menus will be used in place of MCW_arrowvals wherever possible *

Definition at line 50 of file afni_widg.c.

#define ICON_bg   bg_pix
 

#define ICON_fg   fg_pix
 

#define REFRESH
 

Value:

if( num_entry == 1 ){ \
     XmUpdateDisplay(im3d->vwid->top_shell); REPORT_PROGRESS("."); }

Definition at line 67 of file afni_widg.c.

Referenced by AFNI_make_widgets().

#define REPORT_PROGRESS str       do{ if(AFNI_VERBOSE){printf(str);fflush(stdout);} } while(0)
 

Definition at line 61 of file afni_widg.c.

#define SCALE_EXTRA   66
 

#define SELECTOR_HEIGHT   240
 

#define WANT_AFNI_BITMAP
 

Definition at line 14 of file afni_widg.c.

#define WANT_LOGO_BITMAP
 

Definition at line 13 of file afni_widg.c.

#define xyz_3DIM   "Axial "
 

#define yzx_3DIM   "Sagittal"
 

#define zxy_3DIM   "Coronal "
 


Function Documentation

void AFNI_clone_controller_CB Widget    wcall,
XtPointer    cd,
XtPointer    cbs
 

Definition at line 7606 of file afni_widg.c.

Referenced by RT_start_dataset().

void AFNI_controller_clonify void   
 

at this point, ii = index of a controller to use *

Definition at line 7687 of file afni_widg.c.

Referenced by AFNI_drive_open_window(), and AFNI_quit_CB().

int AFNI_controller_index Three_D_View   im3d
 

Definition at line 7204 of file afni_widg.c.

Referenced by AFNI_controller_label(), AFNI_equate_pbars(), AFNI_finalsave_layout_CB(), AFNI_imag_pop_CB(), AFNI_lock_carryout(), AFNI_pbar_lock_carryout(), AFNI_range_lock_carryout(), AFNI_setup_viewing(), AFNI_thrdrag_lock_carryout(), AFNI_thresh_lock_carryout(), AFNI_time_lock_carryout(), AFNI_view_xyz_CB(), DRAW_main(), and RT_tell_afni_one().

int AFNI_count_controllers void   
 

popup on picture widget (right of Quit button) *

Definition at line 7160 of file afni_widg.c.

Referenced by AFNI_drive_close_window(), AFNI_quit_CB(), and RT_start_dataset().

Three_D_View* AFNI_find_open_controller void   
 

Find first open controller [05 Mar 2002]. ---------------------------------------------------------------------

Definition at line 7176 of file afni_widg.c.

Referenced by new_RT_input(), PLUG_startup_plugin_CB(), PLUTO_popup_worker(), process_NIML_AFNI_dataset(), process_NIML_Node_ROI(), process_NIML_SUMA_crosshair_xyz(), process_NIML_SUMA_ixyz(), and RT_start_dataset().

void AFNI_initialize_controller Three_D_View   im3d
 

Definition at line 7418 of file afni_widg.c.

Referenced by AFNI_drive_open_window(), and MAIN_workprocess().

void AFNI_lock_button Three_D_View   im3d
 

Definition at line 7715 of file afni_widg.c.

void AFNI_make_controller int    cii
 

Definition at line 7587 of file afni_widg.c.

Referenced by AFNI_drive_open_window(), and AFNI_startup_layout_CB().

void AFNI_make_wid1 Three_D_View  
 

Definition at line 3391 of file afni_widg.c.

References AFNI_anatmode_bbox_label, MCW_BB_frame, and MCW_BB_radio_one.

Referenced by AFNI_make_widgets().

03415    { char * hh[] = { "View data direct from brick" ,
03416                      "View data resampled to new grid" } ;
03417      MCW_bbox_hints( dmode->anatmode_bbox , 2 , hh ) ;
03418    }
03419 
03420    ADDTO_KILL(im3d->kl,dmode->anatmode_bbox) ;
03421 
03422    /*-- resampling control: anat mode --*/
03423 
03424    dmode->anat_resam_av = new_MCW_arrowval(
03425                              dmode->rowcol ,
03426                              "ULay resam mode" ,
03427                              AVOPT_STYLE ,
03428                              FIRST_RESAM_TYPE ,
03429                              LAST_RESAM_TYPE ,
03430                              im3d->vinfo->anat_resam_mode ,
03431                              MCW_AV_readtext , 0 ,
03432                              AFNI_resam_av_CB , (XtPointer) im3d ,
03433                              AFNI_resam_texter , NULL ) ;
03434 
03435    dmode->anat_resam_av->parent     = (XtPointer) im3d ;
03436    dmode->anat_resam_av->allow_wrap = 1 ;         /* wrap values */
03437    dmode->anat_resam_av->fastdelay  = 1000 ;      /* slow it down */
03438 
03439 #ifndef USE_OPTMENUS
03440    XtVaSetValues( dmode->anat_resam_av->wtext ,
03441                      XmNcolumns   , NSTR_SHORT_RESAM ,
03442                      XmNmaxLength , NSTR_SHORT_RESAM ,
03443                   NULL ) ;
03444 #endif
03445 
03446    MCW_reghelp_children( dmode->anat_resam_av->wrowcol ,
03447      "This controls the resampling mode for\n"
03448      "underlay data (for display and writing):\n\n"
03449      "NN = nearest neighbor resampling [fastest]\n"
03450      "Li = linear interpolation        [OK]\n"
03451      "Cu = cubic interpolation         [nice but slow]\n"
03452      "Bk = blocky interpolation        [between NN & Li]"  ) ;
03453    MCW_reghint_children( dmode->anat_resam_av->wrowcol , "Resampling method" ) ;
03454 
03455    ADDTO_KILL(im3d->kl,dmode->anat_resam_av) ;
03456 
03457    /*----- resampling: voxel size -----*/
03458 
03459    dmode->resam_vox_av =
03460       new_MCW_arrowval(
03461          dmode->rowcol ,                  /* parent */
03462          "Resam (mm)" ,                   /* label */
03463          MCW_AV_downup ,                  /* arrow directions */
03464          1  ,                             /* min value (0.1 mm from decim) */
03465          40 ,                             /* max value (4.0 mm) */
03466          (int)(10*INIT_resam_vox) ,       /* init value */
03467          MCW_AV_editext ,                 /* input/output text display */
03468          1 ,                              /* decimal shift */
03469          AFNI_resam_vox_av_CB ,           /* routine to call when button */
03470          (XtPointer) im3d ,               /* is pressed, and its data */
03471          NULL,NULL                        /* no special display */
03472       ) ;
03473 
03474    XtVaSetValues( dmode->resam_vox_av->wtext , XmNcolumns , 7 , NULL ) ;
03475 
03476    dmode->resam_vox_av->parent = (XtPointer) im3d ;
03477 
03478    MCW_reghelp_children( dmode->resam_vox_av->wrowcol ,
03479                          AFNI_disp_resam_vox_help ) ;
03480    MCW_reghint_children( dmode->resam_vox_av->wrowcol ,
03481                          "Resampled voxel size" ) ;
03482 
03483    ADDTO_KILL(im3d->kl,dmode->resam_vox_av) ;
03484 
03485    /*--- separator between anat and func stuff ---*/
03486 
03487    (void) XtVaCreateManagedWidget(
03488             "dialog" , xmSeparatorWidgetClass , dmode->rowcol ,
03489                 XmNseparatorType , XmDOUBLE_LINE ,
03490             NULL ) ;
03491 
03492    /*--- bbox to control how we see the func data ---*/
03493 
03494    dmode->funcmode_bbox =
03495       new_MCW_bbox( dmode->rowcol ,
03496                     2 , AFNI_funcmode_bbox_label ,
03497                     MCW_BB_radio_one ,
03498                     MCW_BB_frame ,
03499                     AFNI_funcmode_CB , (XtPointer) im3d ) ;
03500 
03501    dmode->funcmode_bbox->parent = (XtPointer) im3d ;
03502 
03503    MCW_reghelp_children( dmode->funcmode_bbox->wrowcol ,
03504      "View OLay Data Brick ==> data from overlay file is displayed\n"
03505      "                   (will be grayed-out if data is not available)\n"
03506      "Warp OLay on Demand  ==> data is resampled as needed for display\n\n"
03507      "N.B.: Overlay data is always on top of underlay data.\n"
03508      "  To be displayed directly from the overlay data brick,\n"
03509      "  this brick must conform in dimensions to the underlay\n"
03510      "  data being displayed.  Even if the overlay brick exists,\n"
03511      "  if its dimensions do not correspond to the underlay brick\n"
03512      "  or the resampling dimension (below), then the overlay data\n"
03513      "  being displayed will be 'warped-on-demand'.  Such warping\n"
03514      "  always occurs from the 'most original' source.  For example,\n"
03515      "  if a Talairach view brick is altered (via a plugin, or another\n"
03516      "  external editing program), then viewing the brick may be quite\n"
03517      "  different from viewing the warped data, which will be recomputed\n"
03518      "  from the Original view brick (if available), without reference\n"
03519      "  to whatever alterations may have been made in the Talairach view."
03520    ) ;
03521 
03522    { char * hh[] = { "View data direct from brick" ,
03523                      "View data resampled to new grid" } ;
03524      MCW_bbox_hints( dmode->funcmode_bbox , 2 , hh ) ;
03525    }
03526 
03527    ADDTO_KILL(im3d->kl,dmode->funcmode_bbox) ;
03528 
03529    /*-- func resampling control (moved here 03 Nov 1996) --*/
03530 
03531    dmode->func_resam_av = new_MCW_arrowval(
03532                              dmode->rowcol ,
03533 #ifdef USE_OPTMENUS
03534                              "OLay resam mode" ,
03535 #else
03536                              "OLay mode " ,
03537 #endif
03538                              AVOPT_STYLE ,
03539                              FIRST_RESAM_TYPE ,
03540                              LAST_RESAM_TYPE ,
03541                              im3d->vinfo->func_resam_mode ,
03542                              MCW_AV_readtext , 0 ,
03543                              AFNI_resam_av_CB , (XtPointer) im3d ,
03544                              AFNI_resam_texter , NULL ) ;
03545 
03546    dmode->func_resam_av->parent     = (XtPointer) im3d ;
03547    dmode->func_resam_av->allow_wrap = 1 ;       /* wrap values */
03548    dmode->func_resam_av->fastdelay  = 1000 ;    /* slow it down */
03549 
03550 #ifndef USE_OPTMENUS
03551    XtVaSetValues( dmode->func_resam_av->wtext ,
03552                      XmNcolumns   , NSTR_SHORT_RESAM ,
03553                      XmNmaxLength , NSTR_SHORT_RESAM ,
03554                   NULL ) ;
03555 #endif
03556 
03557    MCW_reghelp_children( dmode->func_resam_av->wrowcol ,
03558      "This controls the resampling mode for\n"
03559      "overlay data (display and writing):\n\n"
03560      "NN = nearest neighbor resampling [fastest]\n"
03561      "Li = linear interpolation        [OK]\n"
03562      "Cu = cubic interpolation         [nice but slow]\n"
03563      "Bk = blocky interpolation        [between NN & Li]\n\n"
03564      "N.B.: Dataset sub-bricks without statistical\n"
03565      "  parameters attached will be interpolated using\n"
03566      "  this method.  Those with statistical parameters\n"
03567      "  will be interpolated using the method chosen below." ) ;
03568 
03569    MCW_reghint_children( dmode->func_resam_av->wrowcol , "Resampling method" ) ;
03570 
03571    /*-- thr resampling control (09 Dec 1997) --*/
03572 
03573    dmode->thr_resam_av = new_MCW_arrowval(
03574                              dmode->rowcol ,
03575 #ifdef USE_OPTMENUS
03576                              "Stat resam mode" ,
03577 #else
03578                              "Stat mode " ,
03579 #endif
03580                              AVOPT_STYLE ,
03581                              FIRST_RESAM_TYPE ,
03582                              LAST_RESAM_TYPE ,
03583                              im3d->vinfo->thr_resam_mode ,
03584                              MCW_AV_readtext , 0 ,
03585                              AFNI_resam_av_CB , (XtPointer) im3d ,
03586                              AFNI_resam_texter , NULL ) ;
03587 
03588    dmode->thr_resam_av->parent     = (XtPointer) im3d ;
03589    dmode->thr_resam_av->allow_wrap = 1 ;       /* wrap values */
03590    dmode->thr_resam_av->fastdelay  = 1000 ;    /* slow it down */
03591 
03592 #ifndef USE_OPTMENUS
03593    XtVaSetValues( dmode->thr_resam_av->wtext ,
03594                      XmNcolumns   , NSTR_SHORT_RESAM ,
03595                      XmNmaxLength , NSTR_SHORT_RESAM ,
03596                   NULL ) ;
03597 #endif
03598 
03599    MCW_reghelp_children( dmode->thr_resam_av->wrowcol ,
03600      "This controls the resampling mode for\n"
03601      "overlay data (threshold only):\n\n"
03602      "NN = nearest neighbor resampling [fastest]\n"
03603      "Li = linear interpolation        [OK]\n"
03604      "Cu = cubic interpolation         [nice but slow]\n"
03605      "Bk = blocky interpolation        [between NN & Li]\n\n"
03606      "N.B.: Dataset sub-bricks without statistical\n"
03607      "  parameters attached will be interpolated using\n"
03608      "  the method chosen above.  Those with statistical\n"
03609      "   parameters will be interpolated using this method." ) ;
03610 
03611    MCW_reghint_children( dmode->thr_resam_av->wrowcol , "Resampling method" ) ;
03612 
03613    /*--- separator between func stuff and write buttons ---*/
03614 
03615    (void) XtVaCreateManagedWidget(
03616             "dialog" , xmSeparatorWidgetClass , dmode->rowcol ,
03617                 XmNseparatorType , XmDOUBLE_LINE ,
03618             NULL ) ;
03619 
03620    /*---- 23 Nov 1996: rowcol for Write buttons ----*/
03621 
03622    dmode->write_rowcol =
03623         XtVaCreateWidget(
03624            "dialog" , xmRowColumnWidgetClass , dmode->rowcol ,
03625               XmNorientation , XmHORIZONTAL ,
03626               XmNpacking , XmPACK_TIGHT ,
03627               XmNmarginHeight , 0 ,
03628               XmNmarginWidth  , 0 ,
03629               XmNspacing      , 1 ,
03630               XmNtraversalOn , False ,
03631               XmNinitialResourcesPersistent , False ,
03632            NULL ) ;
03633 
03634    /*-- 23 Nov 1996: label at left --*/
03635 
03636    (void) XtVaCreateManagedWidget(
03637          "dialog" , xmLabelWidgetClass , dmode->write_rowcol ,
03638             LABEL_ARG("Write ") ,
03639             XmNalignment , XmALIGNMENT_BEGINNING ,
03640             XmNrecomputeSize , False ,
03641             XmNtraversalOn , False ,
03642             XmNinitialResourcesPersistent , False ,
03643          NULL ) ;
03644 
03645    /*--- write pushbuttons ---*/
03646 
03647    dmode->write_anat_pb =
03648       XtVaCreateManagedWidget(
03649          "dialog" , xmPushButtonWidgetClass , dmode->write_rowcol ,
03650             LABEL_ARG("ULay") ,
03651             XmNtraversalOn , False ,
03652             XmNinitialResourcesPersistent , False ,
03653          NULL ) ;
03654 
03655    XtAddCallback( dmode->write_anat_pb , XmNactivateCallback ,
03656                   AFNI_write_dataset_CB , im3d ) ;
03657 
03658    MCW_register_hint( dmode->write_anat_pb ,
03659                       "Write current anatomy to disk" ) ;
03660 
03661    dmode->write_func_pb =
03662       XtVaCreateManagedWidget(
03663          "dialog" , xmPushButtonWidgetClass , dmode->write_rowcol ,
03664             LABEL_ARG("OLay") ,
03665             XmNtraversalOn , False ,
03666             XmNinitialResourcesPersistent , False ,
03667          NULL ) ;
03668 
03669    XtAddCallback( dmode->write_func_pb , XmNactivateCallback ,
03670                   AFNI_write_dataset_CB , im3d ) ;
03671 
03672    MCW_register_hint( dmode->write_func_pb ,
03673                       "Write current overlay dataset to disk" ) ;
03674 
03675    dmode->write_many_pb =
03676       XtVaCreateManagedWidget(
03677          "dialog" , xmPushButtonWidgetClass , dmode->write_rowcol ,
03678             LABEL_ARG("Many") ,
03679             XmNtraversalOn , False ,
03680             XmNinitialResourcesPersistent , False ,
03681          NULL ) ;
03682 
03683    XtAddCallback( dmode->write_many_pb , XmNactivateCallback ,
03684                   AFNI_write_many_dataset_CB , im3d ) ;
03685 
03686    MCW_register_hint( dmode->write_many_pb ,
03687                       "Write multiple datasets to disk" ) ;
03688 
03689    MCW_reghelp_children( dmode->write_rowcol ,
03690         "The purpose of the `Write' buttons is to recompute\n"
03691         "entire dataset bricks in the current coordinate\n"
03692         "system (`view') and write them to disk.\n"
03693         "\n"
03694         "The `Resam' controls determine the resolution and\n"
03695         "interpolation used in creating the new bricks.\n"
03696         "\n"
03697         "ULay --> current overlay dataset brick.\n"
03698         "OLay --> current underlay dataset brick.\n"
03699         "Many --> select one or more datasets from a list.\n"
03700         "\n"
03701         "N.B.:\n"
03702         " + Only dataset bricks that are warped from\n"
03703         "    a `parent' dataset can be written out.\n"
03704         "    AFNI will not destroy original data (I hope).\n"
03705         " + This operation may be very time-consuming,\n"
03706         "    especially for 3D+time datasets!"
03707       ) ;
03708 
03709    /*---- 23 Nov 1996: Row of Buttons for Rescan Session ----*/
03710 
03711    dmode->rescan_rowcol =
03712         XtVaCreateWidget(
03713            "dialog" , xmRowColumnWidgetClass , dmode->rowcol ,
03714               XmNorientation , XmHORIZONTAL ,
03715               XmNpacking , XmPACK_TIGHT ,
03716               XmNmarginHeight , 0 ,
03717               XmNmarginWidth  , 0 ,
03718               XmNspacing      , 1 ,
03719               XmNtraversalOn , False ,
03720               XmNinitialResourcesPersistent , False ,
03721            NULL ) ;
03722 
03723    /*-- 23 Nov 1996: label at left --*/
03724 
03725    (void) XtVaCreateManagedWidget(
03726          "dialog" , xmLabelWidgetClass , dmode->rescan_rowcol ,
03727             LABEL_ARG("Rescan") ,
03728             XmNalignment , XmALIGNMENT_BEGINNING ,
03729             XmNrecomputeSize , False ,
03730             XmNtraversalOn , False ,
03731             XmNinitialResourcesPersistent , False ,
03732          NULL ) ;
03733 
03734    /*-- pushbutton for one session rescan --*/
03735 
03736    dmode->rescan_pb =
03737       XtVaCreateManagedWidget(
03738          "dialog" , xmPushButtonWidgetClass , dmode->rescan_rowcol ,
03739             LABEL_ARG("This") ,
03740             XmNmarginHeight , 0 ,
03741             XmNtraversalOn , False ,
03742             XmNinitialResourcesPersistent , False ,
03743          NULL ) ;
03744 
03745    XtAddCallback( dmode->rescan_pb , XmNactivateCallback ,
03746                   AFNI_rescan_CB , im3d ) ;
03747 
03748    MCW_register_hint( dmode->rescan_pb ,
03749                       "Read current session again" ) ;
03750 
03751    /*-- 23 Nov 1996: pushbutton for all session rescan --*/
03752 
03753    dmode->rescan_all_pb =
03754       XtVaCreateManagedWidget(
03755          "dialog" , xmPushButtonWidgetClass , dmode->rescan_rowcol ,
03756             LABEL_ARG("All ") ,
03757             XmNmarginHeight , 0 ,
03758             XmNtraversalOn , False ,
03759             XmNinitialResourcesPersistent , False ,
03760          NULL ) ;
03761 
03762    XtAddCallback( dmode->rescan_all_pb , XmNactivateCallback ,
03763                   AFNI_rescan_all_CB , im3d ) ;
03764 
03765    MCW_register_hint( dmode->rescan_all_pb ,
03766                       "Read all sessions again" ) ;
03767 
03768    dmode->rescan_timeseries_pb =
03769       XtVaCreateManagedWidget(
03770          "dialog" , xmPushButtonWidgetClass , dmode->rescan_rowcol ,
03771             LABEL_ARG("*.1D") ,
03772             XmNmarginHeight , 0 ,
03773             XmNtraversalOn , False ,
03774             XmNinitialResourcesPersistent , False ,
03775          NULL ) ;
03776 
03777    XtAddCallback( dmode->rescan_timeseries_pb , XmNactivateCallback ,
03778                   AFNI_rescan_timeseries_CB , im3d ) ;
03779 
03780    MCW_register_hint( dmode->rescan_timeseries_pb ,
03781                       "Read directories for new time series files" ) ;
03782 
03783    MCW_reghelp_children( dmode->rescan_rowcol ,
03784          "The purpose of the `Rescan' buttons is to read\n"
03785          "the contents of session directories again in\n"
03786          "order to make newly created datasets (e.g., from\n"
03787          "the 3dmerge program) available for AFNI viewing.\n"
03788          "\n"
03789          "This --> rescan just the current session.\n"
03790          "All  --> rescan all session directories.\n"
03791          "*.1D --> rescan for timeseries files instead\n"
03792          "         of AFNI datasets.  Note that the program\n"
03793          "         won't re-read a filename that has already\n"
03794          "         been read in.  This means that if you change\n"
03795          "         the contents of a .1D file, AFNI will not\n"
03796          "         be aware of that fact even after this rescan\n"
03797          "         operation."
03798       ) ;
03799 
03800    /*---- 04 Mar 1997: Row of Buttons for Reading ----*/
03801 
03802    dmode->read_rowcol =
03803         XtVaCreateWidget(
03804            "dialog" , xmRowColumnWidgetClass , dmode->rowcol ,
03805               XmNorientation , XmHORIZONTAL ,
03806               XmNpacking , XmPACK_TIGHT ,
03807               XmNmarginHeight , 0 ,
03808               XmNmarginWidth  , 0 ,
03809               XmNspacing      , 1 ,
03810               XmNtraversalOn , False ,
03811               XmNinitialResourcesPersistent , False ,
03812            NULL ) ;
03813 
03814    /*-- label at left --*/
03815 
03816    (void) XtVaCreateManagedWidget(
03817          "dialog" , xmLabelWidgetClass , dmode->read_rowcol ,
03818             LABEL_ARG("Read  ") ,
03819             XmNalignment , XmALIGNMENT_BEGINNING ,
03820             XmNrecomputeSize , False ,
03821             XmNtraversalOn , False ,
03822             XmNinitialResourcesPersistent , False ,
03823          NULL ) ;
03824 
03825    /*-- pushbutton for session input --*/
03826 
03827    dmode->read_sess_pb =
03828       XtVaCreateManagedWidget(
03829          "dialog" , xmPushButtonWidgetClass , dmode->read_rowcol ,
03830             LABEL_ARG("Sess") ,
03831             XmNmarginHeight , 0 ,
03832             XmNtraversalOn , False ,
03833             XmNinitialResourcesPersistent , False ,
03834          NULL ) ;
03835 
03836    XtAddCallback( dmode->read_sess_pb , XmNactivateCallback ,
03837                   AFNI_read_sess_CB , im3d ) ;
03838 
03839    MCW_register_hint( dmode->read_sess_pb ,
03840                       "Read in a new session directory" ) ;
03841 
03842    /*-- pushbutton for timeseries input --*/
03843 
03844    dmode->read_1D_pb =
03845       XtVaCreateManagedWidget(
03846          "dialog" , xmPushButtonWidgetClass , dmode->read_rowcol ,
03847             LABEL_ARG(" 1D ") ,
03848             XmNmarginHeight , 0 ,
03849             XmNtraversalOn , False ,
03850             XmNinitialResourcesPersistent , False ,
03851          NULL ) ;
03852 
03853    XtAddCallback( dmode->read_1D_pb , XmNactivateCallback ,
03854                   AFNI_read_1D_CB , im3d ) ;
03855 
03856    MCW_register_hint( dmode->read_1D_pb ,
03857                       "Read in a new time series file" ) ;
03858 
03859    /*-- pushbutton for Web input --*/
03860 
03861    dmode->read_Web_pb =
03862       XtVaCreateManagedWidget(
03863          "dialog" , xmPushButtonWidgetClass , dmode->read_rowcol ,
03864             LABEL_ARG("Web ") ,
03865             XmNmarginHeight , 0 ,
03866             XmNtraversalOn , False ,
03867             XmNinitialResourcesPersistent , False ,
03868          NULL ) ;
03869 
03870    XtAddCallback( dmode->read_Web_pb , XmNactivateCallback ,
03871                   AFNI_read_Web_CB , im3d ) ;
03872 
03873    MCW_register_hint( dmode->read_Web_pb ,
03874                       "Read dataset via http:// or ftp://" ) ;
03875 
03876    MCW_reghelp_children( dmode->read_rowcol ,
03877          "The purpose of the `Read' buttons is to read\n"
03878          "in new data.  (The `Rescan' buttons are to\n"
03879          "re-read data from old directories.)\n"
03880          "\n"
03881          "Sess --> Read a new session directory.\n\n"
03882          "1D   --> Read a new timeseries file.\n\n"
03883          "Web  --> Read datasets from the Web:\n"
03884          "   e.g., http://some.place/dir/anat+orig\n"
03885          "         ftp://some.place/dir/func+orig\n"
03886          "   or    http://some.place/dir/AFNILIST\n"
03887          "   where AFNILIST is a text file with one\n"
03888          "         dataset name per line (will be\n"
03889          "         fetched from same Web directory;\n"
03890          "         do NOT put ftp:// or http:// in\n"
03891          "         the AFNILIST file!)."
03892       ) ;
03893 
03894    /*---- 04 Nov 1996: a place to put menubars ----*/
03895 
03896    dmode->mbar_rowcol =
03897         XtVaCreateWidget(
03898            "dialog" , xmRowColumnWidgetClass , dmode->rowcol ,
03899               XmNorientation , XmHORIZONTAL ,
03900               XmNpacking , XmPACK_TIGHT ,
03901               XmNmarginHeight , 0 ,
03902               XmNmarginWidth  , 0 ,
03903               XmNspacing      , 1 ,
03904               XmNtraversalOn , False ,
03905               XmNinitialResourcesPersistent , False ,
03906            NULL ) ;
03907 
03908    /* 04 Nov 1996: make the "Lock" menubar */
03909 
03910    AFNI_lock_button( im3d ) ;
03911 
03912    /* 30 Oct 1996: make the "Misc" menubar */
03913 
03914    AFNI_misc_button( im3d ) ;
03915 
03916    /*-- manage the managers --*/
03917 
03918    XtManageChild( dmode->write_rowcol ) ;
03919    XtManageChild( dmode->rescan_rowcol ) ;
03920    XtManageChild( dmode->read_rowcol ) ;
03921    XtManageChild( dmode->mbar_rowcol ) ;
03922    XtManageChild( dmode->rowcol ) ;
03923 
03924    /*--------------------------------------------------*/
03925    /*************** Program controls *******************/
03926    /*--------------------------------------------------*/
03927 
03928    /*----- rowcol to hold all program controls stuff -----*/
03929 
03930 STATUS("making prog->rowcol") ;
03931 
03932    prog->rowcol =
03933       XtVaCreateWidget(
03934          "dialog" , xmRowColumnWidgetClass , prog->frame ,
03935             XmNpacking     , XmPACK_TIGHT ,
03936             XmNorientation , XmVERTICAL ,
03937             XmNtraversalOn , False ,
03938             XmNinitialResourcesPersistent , False ,
03939          NULL ) ;
03940 
03941    if( im3d->type == AFNI_3DDATA_VIEW ){
03942       prog->rc_top =
03943          XtVaCreateWidget(
03944             "dialog" , xmRowColumnWidgetClass , prog->rowcol ,
03945                XmNpacking     , XmPACK_TIGHT ,
03946                XmNorientation , XmHORIZONTAL ,
03947                XmNspacing     , 1 ,
03948                XmNmarginHeight, 0 ,
03949                XmNmarginWidth , 0 ,
03950                XmNtraversalOn , False ,
03951                XmNinitialResourcesPersistent , False ,
03952             NULL ) ;
03953 
03954       if( MAX_CONTROLLERS > 1 ){
03955          prog->clone_pb =
03956             XtVaCreateManagedWidget(
03957                "dialog" , xmPushButtonWidgetClass , prog->rc_top ,
03958                  LABEL_ARG("New  ") ,
03959                  XmNtraversalOn , False ,
03960                  XmNinitialResourcesPersistent , False ,
03961                NULL ) ;
03962 
03963          XtAddCallback( prog->clone_pb , XmNactivateCallback ,
03964                         AFNI_clone_controller_CB , im3d ) ;
03965 
03966          MCW_register_help( prog->clone_pb ,
03967                             "Use this to open\n"
03968                             "a new AFNI control\n"
03969                             "window."
03970                           ) ;
03971          MCW_register_hint( prog->clone_pb ,
03972                             "Open a new AFNI controller window" ) ;
03973       } else {
03974           prog->clone_pb = NULL ;
03975       }
03976 
03977       prog->panel_pb =
03978          XtVaCreateManagedWidget(
03979             "dialog" , xmPushButtonWidgetClass , prog->rc_top ,
03980               LABEL_ARG("Views") ,
03981               XmNtraversalOn , False ,
03982               XmNinitialResourcesPersistent , False ,
03983             NULL ) ;
03984 
03985       prog->panel_pb_inverted = True ;
03986       MCW_invert_widget( prog->panel_pb ) ;
03987 
03988       MCW_register_help( prog->panel_pb ,
03989                          "Use this to close and open\n"
03990                          "the viewing control panel\n"
03991                          "located to the right."
03992                        ) ;
03993       MCW_register_hint( prog->panel_pb ,
03994                          "Open/close control panel to right" ) ;
03995 
03996       XtAddCallback( prog->panel_pb , XmNactivateCallback ,
03997                      AFNI_controller_panel_CB , im3d ) ;
03998 
03999    } else {
04000       prog->rc_top = prog->clone_pb = prog->panel_pb = NULL ;
04001    }
04002 
04003    /*----- pushbutton: button help -----*/
04004 
04005    prog->rc_bot =
04006       XtVaCreateWidget(
04007          "dialog" , xmRowColumnWidgetClass , prog->rowcol ,
04008             XmNpacking     , XmPACK_TIGHT ,
04009             XmNorientation , XmHORIZONTAL ,
04010             XmNspacing     , 1 ,
04011             XmNmarginHeight, 0 ,
04012             XmNmarginWidth , 0 ,
04013             XmNtraversalOn , False ,
04014             XmNinitialResourcesPersistent , False ,
04015          NULL ) ;
04016 
04017    prog->button_help_pb =
04018       XtVaCreateManagedWidget(
04019          "dialog" , xmPushButtonWidgetClass , prog->rc_bot ,
04020            LABEL_ARG("BHelp") ,
04021            XmNtraversalOn , False ,
04022            XmNinitialResourcesPersistent , False ,
04023          NULL ) ;
04024 
04025    XtAddCallback( prog->button_help_pb , XmNactivateCallback ,
04026                   MCW_click_help_CB , im3d ) ;
04027 
04028    MCW_register_help( prog->button_help_pb , AFNI_help_help ) ;
04029    MCW_register_hint( prog->button_help_pb , "Gets more help for a button" ) ;
04030 
04031    /*----- pushbutton: quit -----*/
04032 
04033    prog->quit_pb =
04034       XtVaCreateManagedWidget(
04035          "dialog" , xmPushButtonWidgetClass , prog->rc_bot ,
04036             LABEL_ARG("done ") ,
04037             XmNrecomputeSize , False ,
04038             XmNtraversalOn , False ,
04039             XmNinitialResourcesPersistent , False ,
04040             XmNuserData , (XtPointer) im3d ,
04041          NULL ) ;
04042 
04043    MCW_set_widget_bg( prog->quit_pb , MCW_hotcolor(prog->quit_pb) , 0 ) ;
04044 
04045    XtAddCallback( prog->quit_pb , XmNactivateCallback ,
04046                   AFNI_quit_CB , im3d ) ;
04047 
04048    MCW_register_help( prog->quit_pb , AFNI_quit_help ) ;
04049    MCW_register_hint( prog->quit_pb , "Click twice to close window" ) ;
04050 
04051    prog->quit_first = True ;  /* mark this button as not pressed yet */
04052 
04053    /*----- manage the managers -----*/
04054 
04055    if( prog->rc_top != NULL ) XtManageChild( prog->rc_top ) ;
04056    XtManageChild( prog->rc_bot ) ;
04057    XtManageChild( prog->rowcol ) ;
04058 
04059    /*----------------------------------------*/
04060    /*  for the overlapping panels, make the  */
04061    /*  help callback raise them to the top   */
04062    /*----------------------------------------*/
04063 
04064 #if 0
04065    XtAddCallback( marks->rowcol , XmNhelpCallback , AFNI_raiseup_CB , NULL ) ;
04066    XtAddCallback( func->rowcol  , XmNhelpCallback , AFNI_raiseup_CB , NULL ) ;
04067    XtAddCallback( dmode->rowcol , XmNhelpCallback , AFNI_raiseup_CB , NULL ) ;
04068 #endif
04069 
04070    /*-------------------------------------------------------------*/
04071    /*----- stuff here that goes below all else on popup menu -----*/
04072    /*-------------------------------------------------------------*/
04073 
04074    (void) XtVaCreateManagedWidget(
04075             "dialog" , xmSeparatorWidgetClass , imag->popmenu ,
04076                 XmNseparatorType , XmDOUBLE_LINE ,
04077             NULL ) ;
04078 
04079    /*--- label for background pixel ---*/
04080 
04081    imag->pop_bkgd_lab =
04082       XtVaCreateWidget(
04083          "dialog" , xmLabelWidgetClass , imag->popmenu ,
04084             LABEL_ARG("   bkgd =xxxxxx") ,
04085             XmNalignment , XmALIGNMENT_BEGINNING ,
04086             XmNrecomputeSize , True ,
04087             XmNtraversalOn , False ,
04088             XmNinitialResourcesPersistent , False ,
04089          NULL ) ;
04090 
04091    imag->do_bkgd_lab = False ;
04092 
04093    /*----------------------------------------------*/
04094    /**************  make a picture  ****************/
04095    /*----------------------------------------------*/
04096 
04097    vwid->picture       = NULL ;  /* default ==> no picture */
04098    vwid->picture_index = 0 ;
04099 
04100 #ifdef WANT_LOGO_BITMAP
04101    if( im3d->type == AFNI_3DDATA_VIEW ){
04102       vwid->picture =
04103           XtVaCreateManagedWidget(
04104              "dialog" , xmLabelWidgetClass , vwid->top_form ,
04105                  XmNtopAttachment    , XmATTACH_WIDGET ,
04106                  XmNtopWidget        , imag->frame ,
04107                  XmNtopOffset        , 0 ,
04108                  XmNleftAttachment   , XmATTACH_WIDGET ,
04109                  XmNleftWidget       , prog->frame ,
04110                  XmNleftOffset       , 0 ,
04111                  XmNlabelType        , XmPIXMAP ,
04112                  XmNalignment        , XmALIGNMENT_CENTER ,
04113                  XmNwidth            , logo_width ,
04114                  XmNheight           , logo_height ,
04115                  XmNmarginWidth      , 0 ,
04116                  XmNmarginHeight     , 0 ,
04117                  XmNrecomputeSize    , False ,
04118                  XmNtraversalOn      , False ,
04119                  XmNinitialResourcesPersistent , False ,
04120              NULL ) ;
04121       MCW_register_help( vwid->picture , AFNI_abohelp ) ;
04122    }
04123 #else
04124    MCW_register_help( imag->rowcol  , AFNI_abohelp ) ;
04125    MCW_register_help( view->rowcol  , AFNI_abohelp ) ;
04126    MCW_register_help( marks->rowcol , AFNI_abohelp ) ;
04127    MCW_register_help( func->rowcol  , AFNI_abohelp ) ;
04128    MCW_register_help( dmode->rowcol , AFNI_abohelp ) ;
04129    MCW_register_help( prog->rowcol  , AFNI_abohelp ) ;
04130 #endif
04131 
04132    /*** load icon, if desired and possible ***/
04133 
04134 #ifdef WANT_AFNI_BITMAP
04135 #ifndef DONT_INSTALL_ICONS
04136    if( afni48_pixmap != XmUNSPECIFIED_PIXMAP ){
04137       Boolean good ;
04138 
04139       good = MCW_check_iconsize( afni48_width,afni48_height , im3d->dc ) ;
04140 
04141       if( good ){
04142          XtVaSetValues( im3d->vwid->top_shell ,
04143                            XmNiconPixmap , afni48_pixmap ,
04144                         NULL ) ;
04145          afni48_good = 1 ;
04146       }
04147    }
04148 #endif
04149 #endif
04150 
04151    /*---------------------------------------------------*/
04152    /*********** hidden popup menu on picture ************/
04153    /*---------------------------------------------------*/
04154 
04155    prog->hidden_menu = NULL ;
04156 
04157 #ifdef USE_HIDDEN
04158    if( vwid->picture != NULL ){
04159 
04160      /** popup on picture widget (right of Quit button) **/
04161 
04162 #ifdef BAD_BUTTON3_POPUPS   /* 21 Jul 2003 */
04163      prog->hidden_menu =
04164         XmCreatePopupMenu( prog->quit_pb , "menu" , NULL , 0 ) ;
04165 #else
04166      prog->hidden_menu =
04167         XmCreatePopupMenu( vwid->picture , "menu" , NULL , 0 ) ;
04168 #endif
04169 
04170      if( prog->hidden_menu != NULL ){
04171       SAVEUNDERIZE(XtParent(prog->hidden_menu)) ; /* 27 Feb 2001 */
04172 
04173       VISIBILIZE_WHEN_MAPPED(prog->hidden_menu) ;
04174 
04175 /***
04176       XtAddCallback( prog->hidden_menu ,
04177                      XmNunmapCallback , AFNI_hidden_CB , im3d ) ;
04178 ***/
04179 
04180 /***
04181       XtVaSetValues( prog->hidden_menu ,
04182                         XmNspacing      , 1 ,
04183                         XmNmarginHeight , 0 ,
04184                         XmNmarginWidth  , 0 ,
04185                      NULL ) ;
04186 ***/
04187 
04188       XtInsertEventHandler( vwid->picture ,      /* handle events in picture */
04189 
04190                                0
04191                              | ButtonPressMask   /* button presses */
04192                              | KeyPressMask      /* get keystrokes */
04193                             ,
04194                             FALSE ,              /* nonmaskable events? */
04195                             AFNI_hidden_EV ,     /* handler */
04196                             (XtPointer) im3d ,   /* client data */
04197                             XtListTail           /* last in queue */
04198                           ) ;
04199 
04200 #ifdef ALLOW_DATASET_VLIST
04201       /**--- pullright menu for points ---**/
04202 
04203       prog->hidden_pts_menu =
04204          XmCreatePulldownMenu( prog->hidden_menu , "menu" , NULL , 0 ) ;
04205 
04206       VISIBILIZE_WHEN_MAPPED(prog->hidden_pts_menu) ;
04207 
04208       /** cascade button to bring this menu up **/
04209 
04210       prog->hidden_pts_cbut =
04211          XtVaCreateManagedWidget(
04212             "dialog" , xmCascadeButtonWidgetClass , prog->hidden_menu ,
04213                LABEL_ARG("Points List") ,
04214                XmNsubMenuId , prog->hidden_pts_menu ,
04215                XmNtraversalOn , False ,
04216                XmNinitialResourcesPersistent , False ,
04217             NULL ) ;
04218 
04219       /** "Read Pts: IJK" button in pts menu **/
04220 
04221       prog->hidden_readpts_ijk_pb =
04222          XtVaCreateManagedWidget(
04223             "dialog" , xmPushButtonWidgetClass , prog->hidden_pts_menu ,
04224                LABEL_ARG("Read Pts:  IJK") ,
04225                XmNmarginHeight , 0 ,
04226                XmNtraversalOn , False ,
04227                XmNinitialResourcesPersistent , False ,
04228             NULL ) ;
04229 
04230       XtAddCallback( prog->hidden_readpts_ijk_pb , XmNactivateCallback ,
04231                      AFNI_hidden_CB , im3d ) ;
04232 
04233       /** "Read Pts: XYZ" button in pts menu **/
04234 
04235       prog->hidden_readpts_xyz_pb =
04236          XtVaCreateManagedWidget(
04237             "dialog" , xmPushButtonWidgetClass , prog->hidden_pts_menu ,
04238                LABEL_ARG("Read Pts:  XYZ") ,
04239                XmNmarginHeight , 0 ,
04240                XmNtraversalOn , False ,
04241                XmNinitialResourcesPersistent , False ,
04242             NULL ) ;
04243 
04244       XtAddCallback( prog->hidden_readpts_xyz_pb , XmNactivateCallback ,
04245                      AFNI_hidden_CB , im3d ) ;
04246 
04247       /** "Write Pts: IJK" button in pts menu **/
04248 
04249       prog->hidden_writepts_ijk_pb =
04250          XtVaCreateManagedWidget(
04251             "dialog" , xmPushButtonWidgetClass , prog->hidden_pts_menu ,
04252                LABEL_ARG("Write Pts: IJK") ,
04253                XmNmarginHeight , 0 ,
04254                XmNtraversalOn , False ,
04255                XmNinitialResourcesPersistent , False ,
04256             NULL ) ;
04257 
04258       XtAddCallback( prog->hidden_writepts_ijk_pb , XmNactivateCallback ,
04259                      AFNI_hidden_CB , im3d ) ;
04260 
04261       /** "Write Pts: XYZ" button in pts menu **/
04262 
04263       prog->hidden_writepts_xyz_pb =
04264          XtVaCreateManagedWidget(
04265             "dialog" , xmPushButtonWidgetClass , prog->hidden_pts_menu ,
04266                LABEL_ARG("Write Pts: XYZ") ,
04267                XmNmarginHeight , 0 ,
04268                XmNtraversalOn , False ,
04269                XmNinitialResourcesPersistent , False ,
04270             NULL ) ;
04271 
04272       XtAddCallback( prog->hidden_writepts_xyz_pb , XmNactivateCallback ,
04273                      AFNI_hidden_CB , im3d ) ;
04274 
04275       /** "Set Pts: COLOR" button in pts menu **/
04276 
04277       prog->hidden_colorpts_pb =
04278          XtVaCreateManagedWidget(
04279             "dialog" , xmPushButtonWidgetClass , prog->hidden_pts_menu ,
04280                LABEL_ARG("Set Pts: COLOR") ,
04281                XmNmarginHeight , 0 ,
04282                XmNtraversalOn , False ,
04283                XmNinitialResourcesPersistent , False ,
04284             NULL ) ;
04285 
04286       XtAddCallback( prog->hidden_colorpts_pb , XmNactivateCallback ,
04287                      AFNI_hidden_CB , im3d ) ;
04288 
04289       /*---- END OF PTS STUFF ----*/
04290 #endif
04291 
04292       /*---- Various Poetry Options ----*/
04293 
04294       xstr = XmStringCreateLtoR( "---- Poetry ----" , XmFONTLIST_DEFAULT_TAG ) ;
04295       (void) XtVaCreateManagedWidget(
04296                "dialog" , xmLabelWidgetClass , prog->hidden_menu ,
04297                   XmNlabelString , xstr ,
04298                   XmNrecomputeSize , False ,
04299                   XmNinitialResourcesPersistent , False ,
04300                NULL ) ;
04301       XmStringFree(xstr) ;
04302 
04303       (void) XtVaCreateManagedWidget(
04304                "dialog" , xmSeparatorWidgetClass , prog->hidden_menu ,
04305                   XmNseparatorType , XmSINGLE_LINE ,
04306             NULL ) ;
04307 
04308       /*----------*/
04309 
04310       prog->hidden_mission_pb =
04311             XtVaCreateManagedWidget(
04312                "dialog" , xmPushButtonWidgetClass , prog->hidden_menu ,
04313                   LABEL_ARG("Mission Statement") ,
04314                   XmNmarginHeight , 0 ,
04315                   XmNtraversalOn , False ,
04316                   XmNinitialResourcesPersistent , False ,
04317                NULL ) ;
04318       XtAddCallback( prog->hidden_mission_pb , XmNactivateCallback ,
04319                      AFNI_hidden_CB , im3d ) ;
04320 
04321       /*----------*/
04322 
04323 #ifdef USE_SONNETS
04324       if( ! NO_frivolities ){
04325          prog->hidden_sonnet_pb =
04326             XtVaCreateManagedWidget(
04327                "dialog" , xmPushButtonWidgetClass , prog->hidden_menu ,
04328                   LABEL_ARG("Shakespeare") ,
04329                   XmNmarginHeight , 0 ,
04330                   XmNtraversalOn , False ,
04331                   XmNinitialResourcesPersistent , False ,
04332                NULL ) ;
04333 
04334          XtAddCallback( prog->hidden_sonnet_pb , XmNactivateCallback ,
04335                         AFNI_sonnet_CB , im3d ) ;
04336       }
04337 #endif
04338 
04339       /*----------*/
04340 
04341       prog->hidden_gamberi_pb =
04342             XtVaCreateManagedWidget(
04343                "dialog" , xmPushButtonWidgetClass , prog->hidden_menu ,
04344                   LABEL_ARG("Gamberi Cattivi") ,
04345                   XmNmarginHeight , 0 ,
04346                   XmNtraversalOn , False ,
04347                   XmNinitialResourcesPersistent , False ,
04348                NULL ) ;
04349       XtAddCallback( prog->hidden_gamberi_pb , XmNactivateCallback ,
04350                      AFNI_hidden_CB , im3d ) ;
04351 
04352       /*----------*/
04353 
04354       (void) XtVaCreateManagedWidget(
04355                "dialog" , xmSeparatorWidgetClass , prog->hidden_menu ,
04356                   XmNseparatorType , XmSINGLE_LINE ,
04357             NULL ) ;
04358 
04359       prog->hidden_ranpoem_pb =
04360             XtVaCreateManagedWidget(
04361                "dialog" , xmPushButtonWidgetClass , prog->hidden_menu ,
04362                   LABEL_ARG("Random Poem") ,
04363                   XmNmarginHeight , 0 ,
04364                   XmNtraversalOn , False ,
04365                   XmNinitialResourcesPersistent , False ,
04366                NULL ) ;
04367       XtAddCallback( prog->hidden_ranpoem_pb , XmNactivateCallback ,
04368                      AFNI_hidden_CB , im3d ) ;
04369 
04370       /*----------*/
04371 
04372 #if !defined(NO_FRIVOLITIES)
04373       prog->hidden_faces_pb =
04374             XtVaCreateManagedWidget(
04375                "dialog" , xmPushButtonWidgetClass , prog->hidden_menu ,
04376                   LABEL_ARG("All AFNI Faces") ,
04377                   XmNmarginHeight , 0 ,
04378                   XmNtraversalOn , False ,
04379                   XmNinitialResourcesPersistent , False ,
04380                NULL ) ;
04381       XtAddCallback( prog->hidden_faces_pb , XmNactivateCallback ,
04382                      AFNI_hidden_CB , im3d ) ;
04383 #else
04384       prog->hidden_faces_pb = NULL ;
04385 #endif
04386 
04387       prog->hidden_broutim_pb =            /* 06 Jun 2005 */
04388             XtVaCreateManagedWidget(
04389                "dialog" , xmPushButtonWidgetClass , prog->hidden_menu ,
04390                   LABEL_ARG("Brodmann Areas") ,
04391                   XmNmarginHeight , 0 ,
04392                   XmNtraversalOn , False ,
04393                   XmNinitialResourcesPersistent , False ,
04394                NULL ) ;
04395       XtAddCallback( prog->hidden_broutim_pb , XmNactivateCallback ,
04396                      AFNI_broutim_CB , im3d ) ;
04397 
04398       /*----------*/
04399 
04400 #if !defined(NO_FRIVOLITIES) && defined(DARWIN)
04401       (void) XtVaCreateManagedWidget(
04402                "dialog" , xmSeparatorWidgetClass , prog->hidden_menu ,
04403                   XmNseparatorType , XmSINGLE_LINE ,
04404             NULL ) ;
04405 
04406       prog->hidden_speech_pb =
04407             XtVaCreateManagedWidget(
04408                "dialog" , xmPushButtonWidgetClass , prog->hidden_menu ,
04409                   LABEL_ARG("Say Something") ,
04410                   XmNmarginHeight , 0 ,
04411                   XmNtraversalOn , False ,
04412                   XmNinitialResourcesPersistent , False ,
04413                NULL ) ;
04414       XtAddCallback( prog->hidden_speech_pb , XmNactivateCallback ,
04415                      AFNI_hidden_CB , im3d ) ;
04416 #else
04417       prog->hidden_speech_pb = NULL ;
04418 #endif
04419 
04420       /*----------*/
04421 
04422 #if !defined(NO_FRIVOLITIES) && defined(DARWIN)
04423       prog->hidden_browser_pb =
04424             XtVaCreateManagedWidget(
04425                "dialog" , xmPushButtonWidgetClass , prog->hidden_menu ,
04426                   LABEL_ARG("Web Browser") ,
04427                   XmNmarginHeight , 0 ,
04428                   XmNtraversalOn , False ,
04429                   XmNinitialResourcesPersistent , False ,
04430                NULL ) ;
04431       XtAddCallback( prog->hidden_browser_pb , XmNactivateCallback ,
04432                      AFNI_hidden_CB , im3d ) ;
04433 #else
04434       prog->hidden_browser_pb = NULL ;
04435 #endif
04436 
04437     } /* if prog->hidden_menu isn't NULL */
04438    }
04439 #endif  /* USE_HIDDEN */
04440 
04441    EXRETURN ;
04442 }
04443 
04444 /*--------------------------------------------------------------------------
04445    Find out how many controller windows are active at this instant
04446 ----------------------------------------------------------------------------*/
04447 
04448 int AFNI_count_controllers(void)
04449 {
04450    int ii , cnt ;
04451 
04452 ENTRY("AFNI_count_controllers") ;
04453 
04454    for( ii=0,cnt=0 ; ii < MAX_CONTROLLERS ; ii++ )
04455       if( IM3D_OPEN(GLOBAL_library.controllers[ii]) ) cnt++ ;
04456 
04457    RETURN(cnt) ;
04458 }
04459 
04460 /*-------------------------------------------------------------------*/
04461 /*! Find first open controller [05 Mar 2002].
04462 ---------------------------------------------------------------------*/
04463 
04464 Three_D_View * AFNI_find_open_controller(void)
04465 {
04466    int ii ;
04467    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
04468      if( IM3D_OPEN(GLOBAL_library.controllers[ii]) )
04469        return GLOBAL_library.controllers[ii] ;
04470 
04471    return NULL ;  /* should be impossible */
04472 }
04473 
04474 /*-------------------------------------------------------------------*/
04475 /*! Popup a message, somewhere, anywhere [05 Mar 2002].
04476 ---------------------------------------------------------------------*/
04477 
04478 void AFNI_popup_message( char *str )
04479 {
04480    Three_D_View *im3d ;
04481    if( str == NULL || str[0] == '\0' ) return ;
04482    im3d = AFNI_find_open_controller() ;
04483    (void) MCW_popup_message( im3d->vwid->prog->clone_pb ,
04484                              str, MCW_USER_KILL|MCW_TIMER_KILL ) ;
04485    return ;
04486 }
04487 
04488 /*-------------------------------------------------------------------
04489   Find out which controller this is.  Return -1 if there is an error.
04490 ---------------------------------------------------------------------*/
04491 
04492 int AFNI_controller_index( Three_D_View *im3d )
04493 {
04494    int ii ;
04495 
04496 ENTRY("AFNI_controller_index") ;
04497 
04498    if( ! IM3D_VALID(im3d) ) RETURN(-1) ;
04499 
04500    for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ )
04501      if( GLOBAL_library.controllers[ii] == im3d ) RETURN(ii) ;
04502 
04503    RETURN(-1) ;
04504 }
04505 
04506 /*---------------------------------------------------------------------------
04507    Create and return a new controller for AFNI.
04508    Inputs:
04509    "shell" is a top level shell, to contain the entire widget hierarchy.
04510       If this shell is NULL, then the routine will create it.
04511       Normally, you would pass in the results of XtVaAppInitialize
04512       as the first controller's shell, and let the routine create
04513       any subsequent shells needed.
04514    "dc" must be created by MCW_new_DC before this routine.  It contains
04515       all the information pertaining to the X11 display.
04516    "im3d_type" is one of AFNI_3DDATA_VIEW or AFNI_IMAGES_VIEW.  The former
04517       is for viewing 3D datasets; the latter is a restricted version for
04518       viewing images only (mostly obsolete now -- use program aiv instead).
04519 -----------------------------------------------------------------------------*/
04520 
04521 Three_D_View * new_AFNI_controller( Widget shell , MCW_DC *dc , int im3d_type )
04522 {
04523    Three_D_View *im3d ;
04524    int ii , last_color ;
04525 
04526 ENTRY("new_AFNI_controller") ;
04527 
04528    /*-- create the basic stuff --*/
04529 
04530    im3d = myXtNew(Three_D_View) ; INIT_KILL(im3d->kl) ;
04531 
04532    im3d->vwid   = myXtNew(AFNI_widget_set) ; ADDTO_KILL(im3d->kl,im3d->vwid) ;
04533    im3d->type   = im3d_type ;
04534    im3d->opened = 0 ;          /* not yet opened up */
04535    im3d->dc     = dc ;
04536    im3d->vinfo  = myXtNew( AFNI_view_info ); ADDTO_KILL(im3d->kl,im3d->vinfo);
04537 
04538    im3d->brand_new = 1 ; /* 07 Dec 2001 */
04539 
04540    /* 27 Jan 2004: mark if this currently looking at dummy dataset */
04541 
04542    im3d->dummied = GLOBAL_library.have_dummy_dataset ;
04543 
04544    im3d->fimdata = myXtNew( AFNI_fimmer_type ); ADDTO_KILL(im3d->kl,im3d->fimdata);
04545    CLEAR_FIMDATA(im3d) ;
04546 
04547    strcpy( im3d->window_title , "GPL AFNI" ) ;
04548 
04549    if( shell != NULL ){
04550       im3d->vwid->top_shell = shell ;
04551    } else {
04552       im3d->vwid->top_shell = XtVaAppCreateShell(
04553                                  "AFNI" , "AFNI" ,
04554                                     topLevelShellWidgetClass , dc->display ,
04555                                     XmNinitialResourcesPersistent , False ,
04556                                  NULL ) ;
04557    }
04558 
04559    DC_yokify( im3d->vwid->top_shell , dc ) ;
04560 
04561    XtVaSetValues( im3d->vwid->top_shell ,
04562                      XmNtitle    , im3d->window_title ,
04563                      XmNallowShellResize , True ,       /* let code resize shell */
04564                      XmNdeleteResponse , XmDO_NOTHING , /* deletion handled below */
04565                   NULL ) ;
04566 
04567    XmAddWMProtocolCallback(           /* make "Close" window menu work */
04568            im3d->vwid->top_shell ,
04569            XmInternAtom( dc->display , "WM_DELETE_WINDOW" , False ) ,
04570            AFNI_quit_CB , im3d ) ;
04571 
04572    if( MCW_isitmwm( im3d->vwid->top_shell ) )
04573       XtVaSetValues( im3d->vwid->top_shell ,
04574                         XmNmwmDecorations ,
04575                         MWM_DECOR_ALL | MWM_DECOR_RESIZEH | MWM_DECOR_MAXIMIZE ,
04576                      NULL ) ;
04577 
04578    /*----- null out datasets  -----*/
04579 
04580    for( ii=0 ; ii <= LAST_VIEW_TYPE ; ii++ ){
04581       im3d->anat_dset[ii] = im3d->fim_dset[ii] = NULL ;

void AFNI_make_wid2 Three_D_View   im3d
 

compute height of widgets in the view-> column *

Definition at line 4585 of file afni_widg.c.

References AFNI_IGNORE_NOTHING, DATAXES_TYPE, DEFAULT_FIM_SCALE, DRAWING_LINES, GLOBAL_argopt, INIT_crosshair_color, INIT_crosshair_gap, INIT_montage_periodic, INIT_resam_anat, INIT_resam_func, INIT_resam_thr, INIT_resam_vox, last_color, UNDERLAY_ANAT, and VIEW_ORIGINAL_TYPE.

Referenced by AFNI_make_widgets().

04630               : receive stuff, including drawing */
04631    /* Mar 1999: modified to allow for multiple receivers */
04632 
04633    im3d->vinfo->receiver          = AFMALL( AFNI_receiver*,
04634                                             sizeof(AFNI_receiver *));
04635    im3d->vinfo->receiver[0]       = NULL ;
04636    im3d->vinfo->num_receiver      = 0 ;
04637    im3d->vinfo->drawing_enabled   = 0 ;
04638    im3d->vinfo->drawing_mode      = DRAWING_LINES ;
04639    im3d->vinfo->drawing_pixel     = 0 ;
04640 
04641    /** July 1996: set up the montage crosshair stuff **/
04642 
04643    LOAD_IVEC3(im3d->vinfo->xhairs_ndown,0,0,0) ;
04644    LOAD_IVEC3(im3d->vinfo->xhairs_nup  ,0,0,0) ;
04645    LOAD_IVEC3(im3d->vinfo->xhairs_nskip,0,0,0) ;
04646    im3d->vinfo->xhairs_show_montage = True ;
04647    im3d->vinfo->xhairs_periodic     = INIT_montage_periodic ;
04648    im3d->vinfo->xhairs_all          = False ;
04649 
04650    /** June 1996: stuff for interactive FIM **/
04651 
04652    im3d->s123 = im3d->s231 = im3d->s312 = NULL ; /* no viewing windows yet */
04653    im3d->g123 = im3d->g231 = im3d->g312 = NULL ; /* no graphing windows yet */
04654 
04655    im3d->b123_anat = im3d->b231_anat = im3d->b312_anat =           /* created later */
04656     im3d->b123_fim  = im3d->b231_fim  = im3d->b312_fim  =
04657      im3d->b123_ulay = im3d->b231_ulay = im3d->b312_ulay = NULL ;
04658 
04659    im3d->ignore_seq_callbacks = AFNI_IGNORE_NOTHING ;   /* don't ignore these now */
04660 
04661    /* set up which datasets to deal with (defaults) */
04662 
04663    im3d->vinfo->sess_num = 0 ;  /* 1st session */
04664    im3d->vinfo->anat_num = 0 ;  /* 1st anatomy */
04665    im3d->vinfo->func_num = 0 ;  /* 1st function */
04666 
04667    AFNI_make_widgets( im3d ) ;  /* rest of the widgets */
04668 
04669    /* 02 Nov 1996: create daxes and voxwarp spaces for viewing */
04670 
04671    im3d->wod_daxes          = myXtNew(THD_dataxes) ;
04672    im3d->wod_daxes->type    = DATAXES_TYPE ;
04673 
04674    im3d->anat_voxwarp       = myXtNew(THD_warp) ;
04675    im3d->anat_voxwarp->type = ILLEGAL_TYPE ;
04676 
04677    im3d->fim_voxwarp        = myXtNew(THD_warp) ;
04678    im3d->fim_voxwarp->type  = ILLEGAL_TYPE ;
04679 
04680    im3d->fim_selfwarp       = NULL ;  /* 27 Aug 2002 */
04681 
04682    RETURN(im3d) ;
04683 }
04684 
04685 /*---------------------------------------------------------------*/
04686 
04687 static float DSET_bigness( THD_3dim_dataset *dset ) /* 07 Dec 2001 */
04688 {
04689    float bb ;
04690 
04691    if( !DSET_ONDISK(dset) ) return -1 ;
04692 
04693    bb =  DSET_NVOX(dset)
04694        * DSET_NVALS(dset)
04695        * mri_datum_size(DSET_BRICK_TYPE(dset,0)) ;
04696 
04697    if( DSET_COMPRESSED(dset) || DSET_IS_MINC(dset) ) bb *= 1.5 ;
04698 
04699    return bb ;
04700 }
04701 
04702 /*---------------------------------------------------------------
04703    Set up the controller with some data to view!
04704 -----------------------------------------------------------------*/
04705 
04706 void AFNI_initialize_controller( Three_D_View * im3d )
04707 {
04708    int ii ;
04709    char ttl[16] ;
04710 
04711 ENTRY("AFNI_initialize_controller") ;
04712 
04713    /*--- check for various criminal behavior;
04714          the sentence for anything illegal is death ---*/
04715 
04716    if( ! IM3D_VALID(im3d) ){
04717       fprintf(stderr,
04718               "\n*** AFNI_initialize_controller: invalid input ***\n") ;
04719       EXIT(1) ;
04720    }
04721 
04722    if( GLOBAL_library.sslist == NULL ){  /* any data to use? */
04723       fprintf(stderr,
04724               "\n*** AFNI_initialize_controller: no sessions to view ***\n") ;
04725       EXIT(1) ;
04726    }
04727 
04728    im3d->ss_now = GLOBAL_library.sslist->ssar[ im3d->vinfo->sess_num ] ;
04729 
04730    if( im3d->ss_now == NULL ){     /* bad choice of initial session! */
04731 
04732       im3d->vinfo->sess_num = 0 ;  /* reset 1st session */
04733       im3d->vinfo->anat_num = 0 ;  /* reset 1st anatomy */
04734       im3d->vinfo->func_num = 0 ;  /* reset 1st function */
04735 
04736       im3d->ss_now = GLOBAL_library.sslist->ssar[ im3d->vinfo->sess_num ] ;
04737 
04738       if( im3d->ss_now == NULL ){  /* still no data? */
04739         fprintf(stderr,
04740                 "\n*** AFNI_initialize_controller: illegal initial session ***\n") ;
04741         EXIT(1) ;
04742       }
04743    }
04744 
04745    /* 07 Dec 2001: find "smallest" datasets */
04746 
04747    if( im3d->brand_new && AFNI_yesenv("AFNI_START_SMALL") ){
04748      int jj,jb=0,qb ; float bb,mm ;
04749      for( mm=1.e+33,jb=jj=0 ; jj < im3d->ss_now->num_dsset ; jj++ ){
04750        if( ISANAT(im3d->ss_now->dsset[jj][0]) ){
04751          bb = DSET_bigness(im3d->ss_now->dsset[jj][0]) ;
04752          if( bb > 0 && bb < mm ){ mm = bb; jb = jj; }
04753        }
04754      }
04755      if( mm < 1.e+33 ) im3d->vinfo->anat_num = qb = jb ;
04756 
04757      for( mm=1.e+33,jb=jj=0 ; jj < im3d->ss_now->num_dsset ; jj++ ){
04758        if( ISFUNC(im3d->ss_now->dsset[jj][0]) ){
04759          bb = DSET_bigness(im3d->ss_now->dsset[jj][0]) ;
04760          if( jj != qb && bb > 0 && bb < mm ){ mm = bb; jb = jj; }
04761        }
04762      }
04763      if( mm < 1.e+33 ) im3d->vinfo->func_num = jb ;
04764 
04765    } else if( im3d->brand_new ){  /* 29 Jul 2003 */
04766      int jj ;
04767      for( jj=0 ; jj < im3d->ss_now->num_dsset ; jj++ )
04768        if( ISANAT(im3d->ss_now->dsset[jj][0]) ) break ;
04769      if( jj < im3d->ss_now->num_dsset ) im3d->vinfo->anat_num = jj ;
04770 
04771      for( jj=0 ; jj < im3d->ss_now->num_dsset ; jj++ )
04772        if( ISFUNC(im3d->ss_now->dsset[jj][0]) ) break ;
04773      if( jj < im3d->ss_now->num_dsset ) im3d->vinfo->func_num = jj ;
04774    }
04775 
04776    /* copy pointers from this session into the controller for fast access */
04777 
04778    for( ii=0 ; ii <= LAST_VIEW_TYPE ; ii++ )
04779       im3d->anat_dset[ii] = im3d->ss_now->dsset[im3d->vinfo->anat_num][ii] ;
04780 
04781    /*--- 11/23/94 addition: scan for a good view in the
04782         initial setup (to allow for input of datasets w/o +orig view) */
04783 
04784    for( ii=0 ; ii <= LAST_VIEW_TYPE ; ii++ )
04785       if( ISVALID_3DIM_DATASET(im3d->anat_dset[ii]) ) break ;
04786 
04787    if( ii > LAST_VIEW_TYPE ){
04788       fprintf(stderr,"\n*** AFNI_initialize_controller: cannot initialize view ***\n") ;
04789       EXIT(1) ;
04790    }
04791    im3d->vinfo->view_type = ii ;  /* first view with a good anat */
04792 
04793    /* now find a function that can be viewed here */
04794 
04795    if( !ISVALID_3DIM_DATASET(im3d->ss_now->dsset[im3d->vinfo->func_num][ii]) ){
04796       for( ii=0 ; ii < im3d->ss_now->num_dsset ; ii++ )
04797          if(ISVALID_3DIM_DATASET(im3d->ss_now->dsset[ii][im3d->vinfo->view_type])){
04798             im3d->vinfo->func_num = ii ; break ;
04799          }
04800    }
04801 
04802    for( ii=0 ; ii <= LAST_VIEW_TYPE ; ii++ )
04803       im3d->fim_dset[ii] = im3d->ss_now->dsset[im3d->vinfo->func_num][ii] ;
04804 
04805    /*--- 11/23/94 addition end */
04806 
04807    im3d->anat_now = im3d->anat_dset[im3d->vinfo->view_type] ;  /* will not be NULL */
04808    im3d->fim_now  = im3d->fim_dset [im3d->vinfo->view_type] ;  /* this may be NULL */
04809 
04810    /* initial point of view = middle of dataset brick */
04811 
04812    im3d->vinfo->i1 = im3d->anat_now->daxes->nxx / 2 ;  /* integer indexes */
04813    im3d->vinfo->j2 = im3d->anat_now->daxes->nyy / 2 ;
04814    im3d->vinfo->k3 = im3d->anat_now->daxes->nzz / 2 ;
04815    SAVE_VPT(im3d) ;
04816 
04817    if( im3d->type == AFNI_3DDATA_VIEW ){  /* compute float coordinates, too */
04818       THD_fvec3 fv ;
04819 
04820       im3d->anat_now->wod_flag = 0 ;  /* 02 Nov 1996 */
04821 
04822       fv = THD_3dind_to_3dmm( im3d->anat_now ,
04823                               TEMP_IVEC3( im3d->vinfo->i1 ,
04824                                           im3d->vinfo->j2 ,
04825                                           im3d->vinfo->k3  ) ) ;
04826 
04827       fv = THD_3dmm_to_dicomm( im3d->anat_now , fv ) ;
04828 
04829       im3d->vinfo->xi = fv.xyz[0] ;  /* set display coords */
04830       im3d->vinfo->yj = fv.xyz[1] ;  /* to Dicom standard  */
04831       im3d->vinfo->zk = fv.xyz[2] ;
04832 
04833    } else {
04834       im3d->vinfo->xi = im3d->vinfo->i1 ;  /* probably never used */
04835       im3d->vinfo->yj = im3d->vinfo->j2 ;
04836       im3d->vinfo->zk = im3d->vinfo->k3 ;
04837    }
04838 
04839    /** set various widgets and values **/
04840 
04841    MCW_set_bbox( im3d->vwid->view->view_bbox     , 1 << im3d->vinfo->view_type ) ;
04842    MCW_set_bbox( im3d->vwid->view->see_func_bbox , (im3d->vinfo->func_visible) ? 1 : 0 ) ;
04843 
04844    LOAD_IVEC3(im3d->vinfo->xhairs_ndown,0,0,0) ;
04845    LOAD_IVEC3(im3d->vinfo->xhairs_nup  ,0,0,0) ;
04846    LOAD_IVEC3(im3d->vinfo->xhairs_nskip,0,0,0) ;
04847    im3d->vinfo->xhairs_periodic = INIT_montage_periodic ;
04848    MCW_set_bbox( im3d->vwid->imag->wrap_bbox  , im3d->vinfo->xhairs_periodic ? 1 : 0 ) ;
04849    MCW_set_bbox( im3d->vwid->imag->xhall_bbox , im3d->vinfo->xhairs_all      ? 1 : 0 ) ;
04850 
04851    CLEAR_FIMDATA(im3d) ;
04852 
04853    sprintf(ttl , "%sAFNI" , AFNI_controller_label(im3d) ) ;
04854    XtVaSetValues( im3d->vwid->top_shell , XmNiconName , ttl , NULL ) ;
04855 
04856    /* 06 Dec 2001: cool cursor stuff */
04857 
04858    WAIT_for_window( im3d->vwid->top_shell ) ;
04859 
04860    POPUP_cursorize( im3d->vwid->func->inten_label ) ;
04861    POPUP_cursorize( im3d->vwid->picture ) ;
04862    POPUP_cursorize( imag->crosshair_label ) ;
04863 
04864    RESET_AFNI_QUIT(im3d) ;
04865    EXRETURN ;
04866 }
04867 
04868 /*---------------------------------------------------------------------------
04869   23 Sep 2000: A hack to allow the creation of a specific controller,
04870                instead of letting AFNI_clone_controller_CB choose the index.
04871 -----------------------------------------------------------------------------*/
04872 
04873 static int cii_override = -1 ;
04874 
04875 void AFNI_make_controller( int cii )
04876 {
04877    int ii ;
04878 
04879 ENTRY("AFNI_make_controller") ;
04880 
04881    if( cii < 0 || cii >= MAX_CONTROLLERS ||
04882        IM3D_VALID(GLOBAL_library.controllers[cii]) ) EXRETURN ;
04883 
04884    cii_override = cii ;
04885    AFNI_clone_controller_CB( GLOBAL_library.controllers[0]->vwid->prog->clone_pb ,
04886                              GLOBAL_library.controllers[0] , NULL ) ;
04887 
04888    cii_override = -1 ;
04889    EXRETURN ;
04890 }
04891 
04892 /*---------------------------------------------------------------------------*/
04893 
04894 void AFNI_clone_controller_CB( Widget wcall , XtPointer cd , XtPointer cbs )
04895 {
04896    int ii , xx , yy ;
04897    Three_D_View * im3d ;
04898    Three_D_View * caller_im3d = (Three_D_View *) cd ;
04899    MCW_DC * new_dc , * old_dc ;
04900 
04901 ENTRY("AFNI_clone_controller_CB") ;
04902 
04903    ii = AFNI_count_controllers() ;
04904    if( ii >= MAX_CONTROLLERS ) EXRETURN ;
04905 
04906    SHOW_AFNI_PAUSE ;
04907 
04908    /** 23 Sep 2000: if cii_override is set, use that for
04909                     the index of the controller to create **/
04910 
04911    if( cii_override < 0 ){
04912       /** look for a previously opened but now closed controller **/
04913 
04914       for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
04915          im3d = GLOBAL_library.controllers[ii] ;
04916          if( IM3D_VALID(im3d) && ! im3d->opened ) break ;  /* found it */
04917       }
04918    } else {
04919       ii = MAX_CONTROLLERS ;  /* skip this step */
04920    }
04921 
04922    if( ii >= MAX_CONTROLLERS ){          /* look for an empty one to create */
04923 
04924       if( cii_override < 0 ){
04925          for( ii=0 ; ii < MAX_CONTROLLERS ; ii++ ){
04926             im3d = GLOBAL_library.controllers[ii] ;
04927             if( im3d == NULL ) break ;
04928          }
04929       } else {
04930          ii = cii_override ;
04931       }
04932       if( ii >= MAX_CONTROLLERS ){       /* something funny has happened! */
04933          SHOW_AFNI_READY ; EXRETURN ;
04934       }
04935 
04936       /* 06 Nov 1996: allow creation of unique dc's for each controller */
04937 
04938       new_dc = NULL ;
04939       old_dc = GLOBAL_library.dc ;
04940       if( GLOBAL_argopt.unique_dcs )
04941          new_dc = MCW_new_DC( wcall , GLOBAL_argopt.ncolor ,
04942                               INIT_ncolovr , INIT_colovr , INIT_labovr ,
04943                               GLOBAL_argopt.gamma , 0 ) ;
04944 
04945       if( new_dc == NULL ) new_dc = old_dc ;
04946 
04947       GLOBAL_library.controllers[ii] =
04948            new_AFNI_controller( NULL , new_dc , AFNI_3DDATA_VIEW ) ;
04949 
04950       if( caller_im3d != NULL ){
04951          MCW_widget_geom( caller_im3d->vwid->top_shell , NULL,NULL , &xx,&yy ) ;
04952          xx += 15 ; yy += 15 ;
04953          XtVaSetValues( GLOBAL_library.controllers[ii]->vwid->top_shell ,
04954                            XmNx , xx , XmNy , yy , NULL ) ;
04955       }
04956    }
04957 
04958    /** at this point, ii = index of a controller to use **/
04959 
04960    im3d = GLOBAL_library.controllers[ii] ;
04961 
04962    OPEN_CONTROLLER( im3d ) ;
04963    AFNI_initialize_controller( im3d ) ;  /* decide what to see */
04964    AFNI_initialize_view( NULL , im3d ) ; /* set up to see it */
04965 
04966    AFNI_controller_clonify() ;
04967 
04968    SHOW_AFNI_READY ; EXRETURN ;
04969 }
04970 
04971 /*-----------------------------------------------------------------------
04972    Called to determine if the "New" button should be active
04973 -------------------------------------------------------------------------*/
04974 
04975 void AFNI_controller_clonify(void)
04976 {
04977    Three_D_View * im3d ;
04978    int id ;
04979    Boolean clone_on ;
04980 
04981 ENTRY("AFNI_controller_clonify") ;
04982 
04983    if( MAX_CONTROLLERS == 1 ) EXRETURN ;
04984 
04985    clone_on = (Boolean)( AFNI_count_controllers() < MAX_CONTROLLERS ) ;
04986 
04987    for( id=0 ; id < MAX_CONTROLLERS ; id++ ){
04988       im3d = GLOBAL_library.controllers[id] ;
04989       if( IM3D_OPEN(im3d) && im3d->vwid->prog->clone_pb != NULL ){
04990          SENSITIZE( im3d->vwid->prog->clone_pb , clone_on ) ;
04991          RESET_AFNI_QUIT(im3d) ;
04992       }
04993    }
04994 
04995    EXRETURN ;
04996 }
04997 
04998 /*-------------------------------------------------------------------------
04999    04 Nov 1996: make a menubar to control the coordinate locking
05000                 of the various controller windows
05001 ---------------------------------------------------------------------------*/
05002 
05003 void AFNI_lock_button( Three_D_View * im3d )
05004 {
05005    Widget rc , mbar , menu , cbut , wpar ;
05006    XmString xstr ;
05007 
05008    static char * clabel[] = {
05009       "Lock [A]", "Lock [B]", "Lock [C]", "Lock [D]", "Lock [E]",
05010       "Lock [F]", "Lock [G]", "Lock [H]", "Lock [I]", "Lock [J]",
05011       "Lock [K]", "Lock [L]", "Lock [M]", "Lock [N]", "Lock [O]",
05012       "Lock [P]", "Lock [Q]", "Lock [R]", "Lock [S]", "Lock [T]",
05013       "Lock [U]", "Lock [V]", "Lock [W]", "Lock [X]", "Lock [Y]", "Lock [Z]" } ;
05014 
05015    static char * tlabel[] = { "Time Lock" } ;
05016 
05017    static char * ijklabel[] = { "IJK lock" } ;
05018 
05019 ENTRY("AFNI_lock_button") ;
05020 
05021    wpar = im3d->vwid->dmode->mbar_rowcol ;
05022 
05023    rc =  XtVaCreateWidget(
05024            "dialog" , xmRowColumnWidgetClass , wpar ,
05025               XmNorientation , XmHORIZONTAL ,
05026               XmNpacking , XmPACK_TIGHT ,
05027               XmNtraversalOn , False ,
05028               XmNinitialResourcesPersistent , False ,
05029            NULL ) ;
05030 
05031    mbar = XmCreateMenuBar( rc , "dialog" , NULL,0 ) ;
05032    XtVaSetValues( mbar ,
05033                      XmNmarginWidth  , 0 ,
05034                      XmNmarginHeight , 0 ,
05035                      XmNspacing      , 3 ,
05036                      XmNborderWidth  , 0 ,
05037                      XmNborderColor  , 0 ,
05038                      XmNtraversalOn  , False ,
05039                      XmNbackground   , im3d->dc->ovc->pixov_brightest ,
05040                   NULL ) ;
05041    XtManageChild( mbar ) ;
05042 
05043    menu = XmCreatePulldownMenu( mbar , "menu" , NULL,0 ) ;
05044 
05045    VISIBILIZE_WHEN_MAPPED(menu) ;
05046 
05047    xstr = XmStringCreateLtoR( "Lock" , XmFONTLIST_DEFAULT_TAG ) ;
05048    cbut = XtVaCreateManagedWidget(
05049             "dialog" , xmCascadeButtonWidgetClass , mbar ,
05050                XmNlabelString , xstr ,
05051                XmNsubMenuId , menu ,
05052                XmNmarginWidth  , 0 ,
05053                XmNmarginHeight , 0 ,
05054                XmNmarginBottom , 0 ,
05055                XmNmarginTop    , 0 ,
05056                XmNmarginRight  , 0 ,
05057                XmNmarginLeft   , 0 ,
05058                XmNtraversalOn  , False ,
05059                XmNinitialResourcesPersistent , False ,
05060             NULL ) ;
05061    XmStringFree( xstr ) ;
05062 
05063    MCW_register_help( cbut , "Pressing this drops down\n"
05064                              "the menu of controllers\n"
05065                              "which should be 'locked'\n"
05066                              "together in their viewpoint\n"
05067                              "coordinates.\n"
05068                              "N.B.: The lock will only take\n"
05069                              "  effect when you next move\n"
05070                              "  the crosshairs, or click\n"
05071                              "  on the 'Enforce' button."
05072                     ) ;
05073    MCW_register_hint( cbut , "Lock AFNI controller viewpoints" ) ;
05074 
05075    /*** top of menu = a label to click on that does nothing at all ***/
05076 
05077    xstr = XmStringCreateLtoR( "-- Cancel --" , XmFONTLIST_DEFAULT_TAG ) ;
05078    (void) XtVaCreateManagedWidget(
05079             "dialog" , xmLabelWidgetClass , menu ,
05080                XmNlabelString , xstr ,
05081                XmNrecomputeSize , False ,
05082                XmNinitialResourcesPersistent , False ,
05083             NULL ) ;
05084    XmStringFree(xstr) ;
05085 
05086    (void) XtVaCreateManagedWidget(
05087             "dialog" , xmSeparatorWidgetClass , menu ,
05088                XmNseparatorType , XmSINGLE_LINE ,
05089             NULL ) ;
05090 
05091    /*** button box to select locks ***/
05092 
05093    dmode->lock_bbox = new_MCW_bbox( menu ,
05094                                     MAX_CONTROLLERS , clabel ,
05095                                     MCW_BB_check , MCW_BB_noframe ,
05096                                     AFNI_lock_change_CB , (XtPointer)im3d ) ;
05097 
05098    MCW_set_bbox( dmode->lock_bbox , GLOBAL_library.controller_lock ) ;
05099 
05100    MCW_reghint_children( dmode->lock_bbox->wrowcol ,
05101                          "Which ones are locked together?" ) ;
05102 
05103    /*** button box to control the time lock ***/
05104 
05105    (void) XtVaCreateManagedWidget(
05106             "dialog" , xmSeparatorWidgetClass , menu ,
05107                XmNseparatorType , XmSINGLE_LINE ,
05108             NULL ) ;
05109 
05110    dmode->time_lock_bbox = new_MCW_bbox( menu ,
05111                                          1 , tlabel ,
05112                                          MCW_BB_check , MCW_BB_noframe ,
05113                                          AFNI_time_lock_change_CB , (XtPointer)im3d ) ;
05114 
05115    MCW_set_bbox( dmode->time_lock_bbox , GLOBAL_library.time_lock ) ;
05116 
05117    MCW_reghint_children( dmode->time_lock_bbox->wrowcol ,
05118                          "Lock time index as well?" ) ;
05119 
05120    dmode->ijk_lock_bbox = new_MCW_bbox( menu ,
05121                                         1 , ijklabel ,
05122                                         MCW_BB_check , MCW_BB_noframe ,
05123                                         AFNI_ijk_lock_change_CB , (XtPointer)im3d ) ;
05124 
05125    MCW_set_bbox( dmode->ijk_lock_bbox , GLOBAL_library.ijk_lock ) ;
05126 
05127    MCW_reghint_children( dmode->ijk_lock_bbox->wrowcol ,
05128                          "Lock using voxel indices?" ) ;
05129 
05130    /*** pushbuttons ***/
05131 
05132    (void) XtVaCreateManagedWidget(
05133             "dialog" , xmSeparatorWidgetClass , menu ,
05134                XmNseparatorType , XmSINGLE_LINE ,
05135             NULL ) ;
05136 
05137    /*** to clear all locks right now ***/
05138 
05139    xstr = XmStringCreateLtoR( "Clear All" , XmFONTLIST_DEFAULT_TAG ) ;
05140    dmode->lock_clear_pb =
05141          XtVaCreateManagedWidget(
05142             "dialog" , xmPushButtonWidgetClass , menu ,
05143                XmNlabelString , xstr ,
05144                XmNmarginHeight , 0 ,
05145                XmNtraversalOn , False ,
05146                XmNinitialResourcesPersistent , False ,
05147             NULL ) ;
05148    XtAddCallback( dmode->lock_clear_pb , XmNactivateCallback ,
05149                   AFNI_lock_clear_CB , (XtPointer)im3d ) ;
05150    XmStringFree(xstr) ;
05151    MCW_register_hint( dmode->lock_clear_pb , "Clear all locked controllers" ) ;
05152 
05153    /*** to set all locks right now [19 Apr 1999] ***/
05154 
05155    xstr = XmStringCreateLtoR( "Set All" , XmFONTLIST_DEFAULT_TAG ) ;
05156    dmode->lock_setall_pb =
05157          XtVaCreateManagedWidget(
05158             "dialog" , xmPushButtonWidgetClass , menu ,
05159                XmNlabelString , xstr ,
05160                XmNmarginHeight , 0 ,
05161                XmNtraversalOn , False ,
05162                XmNinitialResourcesPersistent , False ,
05163             NULL ) ;
05164    XtAddCallback( dmode->lock_setall_pb , XmNactivateCallback ,
05165                   AFNI_lock_setall_CB , (XtPointer)im3d ) ;
05166    XmStringFree(xstr) ;
05167    MCW_register_hint( dmode->lock_setall_pb , "Set all locked controllers" ) ;
05168 
05169    /*** to enforce locks right now ***/
05170 
05171    xstr = XmStringCreateLtoR( "Enforce" , XmFONTLIST_DEFAULT_TAG ) ;
05172    dmode->lock_enforce_pb =
05173          XtVaCreateManagedWidget(
05174             "dialog" , xmPushButtonWidgetClass , menu ,
05175                XmNlabelString , xstr ,
05176                XmNmarginHeight , 0 ,
05177                XmNtraversalOn , False ,
05178                XmNinitialResourcesPersistent , False ,
05179             NULL ) ;
05180    XtAddCallback( dmode->lock_enforce_pb , XmNactivateCallback ,
05181                   AFNI_lock_enforce_CB , (XtPointer)im3d ) ;
05182    XmStringFree(xstr) ;
05183    MCW_register_hint( dmode->lock_enforce_pb , "Make lock work NOW" ) ;
05184 
05185    XtManageChild( rc ) ;
05186    EXRETURN ;
05187 }
05188 
05189 /*---------------------------------------------------------------------
05190    30 Oct 1997: make a menubar for miscellaneous options
05191 -----------------------------------------------------------------------*/
05192 
05193 void AFNI_misc_button( Three_D_View * im3d )
05194 {
05195    Widget rc , mbar , menu , cbut , wpar ;
05196    XmString xstr ;
05197 
05198 ENTRY("AFNI_misc_button") ;
05199 
05200    wpar = im3d->vwid->dmode->mbar_rowcol ;
05201 
05202    rc =  XtVaCreateWidget(
05203            "dialog" , xmRowColumnWidgetClass , wpar ,
05204               XmNorientation , XmHORIZONTAL ,
05205               XmNpacking , XmPACK_TIGHT ,
05206               XmNtraversalOn , False ,
05207               XmNinitialResourcesPersistent , False ,
05208            NULL ) ;
05209 
05210    mbar = XmCreateMenuBar( rc , "dialog" , NULL,0 ) ;
05211    XtVaSetValues( mbar ,
05212                      XmNmarginWidth  , 0 ,
05213                      XmNmarginHeight , 0 ,
05214                      XmNspacing      , 3 ,
05215                      XmNborderWidth  , 0 ,
05216                      XmNborderColor  , 0 ,
05217                      XmNtraversalOn  , False ,
05218                      XmNbackground   , im3d->dc->ovc->pixov_brightest ,
05219                   NULL ) ;
05220    XtManageChild( mbar ) ;
05221 
05222    menu = XmCreatePulldownMenu( mbar , "menu" , NULL,0 ) ;
05223 
05224    VISIBILIZE_WHEN_MAPPED(menu) ;
05225 
05226    xstr = XmStringCreateLtoR( "Misc" , XmFONTLIST_DEFAULT_TAG ) ;
05227    cbut = XtVaCreateManagedWidget(
05228             "dialog" , xmCascadeButtonWidgetClass , mbar ,
05229                XmNlabelString , xstr ,
05230                XmNsubMenuId , menu ,
05231                XmNmarginWidth  , 0 ,
05232                XmNmarginHeight , 0 ,
05233                XmNmarginBottom , 0 ,
05234                XmNmarginTop    , 0 ,
05235                XmNmarginRight  , 0 ,
05236                XmNmarginLeft   , 0 ,
05237                XmNtraversalOn  , False ,
05238                XmNinitialResourcesPersistent , False ,
05239             NULL ) ;
05240    XmStringFree( xstr ) ;
05241 
05242    MCW_register_help( cbut , "Pressing this drops down the menu\n"
05243                              "of miscellaneous options:\n"
05244 #ifdef USE_WRITEOWNSIZE
05245                              " Write=Own size?   = Write dataset using current\n"
05246                              "                      anat dimensions, or using\n"
05247                              "                      size of dataset in its own\n"
05248                              "                      .HEAD file.\n"
05249 #endif
05250                              " Voxel Coords?     = Show crosshair location\n"
05251                              "                      in mm or voxel indexes\n"
05252 #ifndef DONT_USE_HINTS
05253                              " Show Hints?       = Turn popup hints\n"
05254                              "                      off or on\n"
05255 #endif
05256                              " ULay Info         = Show 3dinfo output\n"
05257                              " OLay Info         = for current datasets\n"
05258 #ifdef ALLOW_PLUGINS
05259                              " Edit Environment  = Control environment vars\n"
05260                              " Edit 2DChain      = Control 2DChain function\n"
05261 #endif
05262                              " Save Layout       = Save windows layout/setup\n"
05263                              " Run Script        = Run an AFNI script file\n"
05264                              " License Info      = GPL & Copyright notice\n"
05265                              " Version Check     = Check AFNI version\n"
05266                              " Purge Memory      = Of dataset BRIKs\n"
05267 #ifdef USE_TRACING
05268                              " Trace=MODE        = Set trace mode to\n"
05269                              "                      next legal setting\n"
05270 #endif
05271 #ifdef USING_MCW_MALLOC
05272                              " Malloc Summary    = Show memory usage\n"
05273                              " Dump Malloc Table = Memory usage to a file"
05274 #endif
05275                            ) ;
05276    MCW_register_hint( cbut , "Miscellaneous options" ) ;
05277 
05278    /*** top of menu = a label to click on that does nothing at all ***/
05279 
05280    xstr = XmStringCreateLtoR( "-- Cancel --" , XmFONTLIST_DEFAULT_TAG ) ;
05281    (void) XtVaCreateManagedWidget(
05282             "dialog" , xmLabelWidgetClass , menu ,
05283                XmNlabelString , xstr ,
05284                XmNrecomputeSize , False ,
05285                XmNinitialResourcesPersistent , False ,
05286             NULL ) ;
05287    XmStringFree(xstr) ;
05288 
05289    (void) XtVaCreateManagedWidget(
05290             "dialog" , xmSeparatorWidgetClass , menu ,
05291                XmNseparatorType , XmSINGLE_LINE ,
05292             NULL ) ;
05293 
05294 #ifdef USE_WRITEOWNSIZE
05295    /*-- 01 Aug 1999: Toggle for Write dimensions --*/
05296 
05297    { char * blab[1] = { "Write=Own Size?" } ;
05298      dmode->misc_writeownsize_bbox = new_MCW_bbox( menu ,
05299                                                    1 , blab ,
05300                                                    MCW_BB_check , MCW_BB_noframe ,
05301                                                    AFNI_misc_CB , (XtPointer)im3d ) ;
05302      dmode->misc_writeownsize_pb = dmode->misc_writeownsize_bbox->wbut[0] ;
05303    }
05304    MCW_register_hint( dmode->misc_writeownsize_pb , "Controls dimensions using Write" ) ;
05305 #else
05306    dmode->misc_writeownsize_pb = NULL ;
05307 #endif
05308 
05309    /*-- pushbutton for voxel index toggle --*/
05310 
05311    /* 01 Aug 1999: replace pushbutton with toggle button */
05312 
05313    { char * blab[1] = { "Voxel Coords?" } ;
05314      dmode->misc_voxind_bbox = new_MCW_bbox( menu ,
05315                                              1 , blab ,
05316                                              MCW_BB_check , MCW_BB_noframe ,
05317                                              AFNI_misc_CB , (XtPointer)im3d ) ;
05318      dmode->misc_voxind_pb = dmode->misc_voxind_bbox->wbut[0] ;
05319    }
05320    MCW_register_hint( dmode->misc_voxind_pb , "Toggle coordinate display" ) ;
05321 
05322     /*-- pushbutton to turn hints on and off --*/
05323 
05324 #ifndef DONT_USE_HINTS
05325    { char * hh = getenv("AFNI_HINTS") ;
05326      if( hh != NULL && ( strncmp(hh,"KILL",4)==0 ||
05327                          strncmp(hh,"kill",4)==0 ||
05328                          strncmp(hh,"Kill",4)==0 ) ){
05329 
05330             dmode->misc_hints_pb =
05331                XtVaCreateManagedWidget(
05332                   "dialog" , xmLabelWidgetClass , menu ,
05333                      LABEL_ARG("*Hints Killed*") ,
05334                      XmNmarginHeight , 0 ,
05335                      XmNrecomputeSize , False ,
05336                      XmNinitialResourcesPersistent , False ,
05337                   NULL ) ;
05338 
05339          } else {
05340             { char * blab[1] = { "Show Hints?" } ;
05341               dmode->misc_hints_bbox = new_MCW_bbox( menu ,
05342                                                      1 , blab ,
05343                                                      MCW_BB_check , MCW_BB_noframe ,
05344                                                      AFNI_misc_CB , (XtPointer)im3d ) ;
05345               dmode->misc_hints_pb = dmode->misc_hints_bbox->wbut[0] ;
05346             }
05347             MCW_register_hint( dmode->misc_hints_pb , "Toggle hints display" ) ;
05348             MCW_set_bbox( dmode->misc_hints_bbox , GLOBAL_library.hints_on ) ;
05349          }
05350    }
05351 #else
05352    dmode->misc_hints_pb = NULL ;
05353 #endif
05354 
05355    /*-- pushbuttons to popup info about datasets --*/
05356 
05357    dmode->misc_anat_info_pb =
05358          XtVaCreateManagedWidget(
05359             "dialog" , xmPushButtonWidgetClass , menu ,
05360                LABEL_ARG("ULay Info") ,
05361                XmNmarginHeight , 0 ,
05362                XmNtraversalOn , False ,
05363                XmNinitialResourcesPersistent , False ,
05364             NULL ) ;
05365    XtAddCallback( dmode->misc_anat_info_pb , XmNactivateCallback ,
05366                   AFNI_misc_CB , im3d ) ;
05367    MCW_register_hint( dmode->misc_anat_info_pb , "Popup anat dataset info" ) ;
05368 
05369    dmode->misc_func_info_pb =
05370          XtVaCreateManagedWidget(
05371             "dialog" , xmPushButtonWidgetClass , menu ,
05372                LABEL_ARG("OLay Info") ,
05373                XmNmarginHeight , 0 ,
05374                XmNtraversalOn , False ,
05375                XmNinitialResourcesPersistent , False ,
05376             NULL ) ;
05377    XtAddCallback( dmode->misc_func_info_pb , XmNactivateCallback ,
05378                   AFNI_misc_CB , im3d ) ;
05379    MCW_register_hint( dmode->misc_func_info_pb , "Popup func dataset info" ) ;
05380 
05381    /*--- 20 Jun 2000: pushbutton to popup the Environment pseudo-plugin ---*/
05382 
05383 #ifdef ALLOW_PLUGINS
05384    (void) XtVaCreateManagedWidget(
05385             "dialog" , xmSeparatorWidgetClass , menu ,
05386                XmNseparatorType , XmSINGLE_LINE ,
05387             NULL ) ;
05388 
05389    dmode->misc_environ_pb =                              /* 20 Jun 2000 */
05390          XtVaCreateManagedWidget(
05391             "dialog" , xmPushButtonWidgetClass , menu ,
05392                LABEL_ARG("Edit Environment") ,
05393                XmNmarginHeight , 0 ,
05394                XmNtraversalOn , False ,
05395                XmNinitialResourcesPersistent , False ,
05396             NULL ) ;
05397    XtAddCallback( dmode->misc_environ_pb , XmNactivateCallback ,
05398                   AFNI_misc_CB , im3d ) ;
05399    MCW_register_hint( dmode->misc_environ_pb , "Control environment variables" ) ;
05400 
05401    dmode->misc_1dchain_pb =                              /* 03 Jul 2000 */
05402          XtVaCreateManagedWidget(
05403             "dialog" , xmPushButtonWidgetClass , menu ,
05404                LABEL_ARG("Edit 1DChain") ,
05405                XmNmarginHeight , 0 ,
05406                XmNtraversalOn , False ,
05407                XmNinitialResourcesPersistent , False ,
05408             NULL ) ;
05409    XtAddCallback( dmode->misc_1dchain_pb , XmNactivateCallback ,
05410                   AFNI_misc_CB , im3d ) ;
05411    MCW_register_hint( dmode->misc_1dchain_pb , "Control 1DChain function" ) ;
05412    AFNI_misc_CB( dmode->misc_1dchain_pb , im3d , NULL ) ;
05413 
05414    dmode->misc_2dchain_pb =                              /* 03 Jul 2000 */
05415          XtVaCreateManagedWidget(
05416             "dialog" , xmPushButtonWidgetClass , menu ,
05417                LABEL_ARG("Edit 2DChain") ,
05418                XmNmarginHeight , 0 ,
05419                XmNtraversalOn , False ,
05420                XmNinitialResourcesPersistent , False ,
05421             NULL ) ;
05422    XtAddCallback( dmode->misc_2dchain_pb , XmNactivateCallback ,
05423                   AFNI_misc_CB , im3d ) ;
05424    MCW_register_hint( dmode->misc_2dchain_pb , "Control 2DChain function" ) ;
05425    AFNI_misc_CB( dmode->misc_2dchain_pb , im3d , NULL ) ;
05426 #endif
05427 
05428    /*--- 23 Sep 2000: Save Layout [see afni_splash.c] ---*/
05429 
05430    dmode->misc_savelayout_pb =
05431          XtVaCreateManagedWidget(
05432             "dialog" , xmPushButtonWidgetClass , menu ,
05433                LABEL_ARG("Save Layout") ,
05434                XmNmarginHeight , 0 ,
05435                XmNtraversalOn , False ,
05436                XmNinitialResourcesPersistent , False ,
05437             NULL ) ;
05438    XtAddCallback( dmode->misc_savelayout_pb , XmNactivateCallback ,
05439                   AFNI_save_layout_CB , im3d ) ;
05440    MCW_register_hint( dmode->misc_savelayout_pb , "Save windows layout to file" ) ;
05441 
05442    /*--- 22 Jan 2003: Run Script [see afni_splash.c] ---*/
05443 
05444    dmode->misc_runscript_pb =
05445          XtVaCreateManagedWidget(
05446             "dialog" , xmPushButtonWidgetClass , menu ,
05447                LABEL_ARG("Run Script") ,
05448                XmNmarginHeight , 0 ,
05449                XmNtraversalOn , False ,
05450                XmNinitialResourcesPersistent , False ,
05451             NULL ) ;
05452    XtAddCallback( dmode->misc_runscript_pb , XmNactivateCallback ,
05453                   AFNI_run_script_CB , im3d ) ;
05454    MCW_register_hint( dmode->misc_runscript_pb , "Run an AFNI script file" ) ;
05455 
05456    /*--- 07 Nov 2001: start plugouts [see afni_plugout.c] ---*/
05457 
05458 #ifdef ALLOW_PLUGINS
05459    if( !AFNI_have_plugouts() ){
05460       dmode->misc_plugout_pb =
05461             XtVaCreateManagedWidget(
05462                "dialog" , xmPushButtonWidgetClass , menu ,
05463                   LABEL_ARG("Start Plugouts") ,
05464                   XmNmarginHeight , 0 ,
05465                   XmNtraversalOn , False ,
05466                   XmNinitialResourcesPersistent , False ,
05467                NULL ) ;
05468       XtAddCallback( dmode->misc_plugout_pb , XmNactivateCallback ,
05469                      AFNI_misc_CB , im3d ) ;
05470       MCW_register_hint( dmode->misc_plugout_pb ,
05471                          "Start listening for plugouts" ) ;
05472    } else {
05473       dmode->misc_plugout_pb = NULL ;
05474    }
05475 #else
05476    dmode->misc_plugout_pb = NULL ;
05477 #endif
05478 
05479    /*-- 02 Mar 2002: button to start NIML --*/
05480 
05481    dmode->misc_niml_pb =
05482          XtVaCreateManagedWidget(
05483             "dialog" , xmPushButtonWidgetClass , menu ,
05484                LABEL_ARG("Start NIML") ,
05485                XmNmarginHeight , 0 ,
05486                XmNtraversalOn , False ,
05487                XmNinitialResourcesPersistent , False ,
05488             NULL ) ;
05489    XtAddCallback( dmode->misc_niml_pb , XmNactivateCallback ,
05490                   AFNI_misc_CB , im3d ) ;
05491    MCW_register_hint( dmode->misc_niml_pb ,
05492                       "Start listening for NIML connections" ) ;
05493 
05494    /*--- Utility buttons ---*/
05495 
05496    (void) XtVaCreateManagedWidget(
05497             "dialog" , xmSeparatorWidgetClass , menu ,
05498                XmNseparatorType , XmSINGLE_LINE ,
05499             NULL ) ;
05500 
05501    dmode->misc_readme_env_pb =
05502          XtVaCreateManagedWidget(
05503             "dialog" , xmPushButtonWidgetClass , menu ,
05504                LABEL_ARG("README.environment") ,
05505                XmNmarginHeight , 0 ,
05506                XmNtraversalOn , False ,
05507                XmNinitialResourcesPersistent , False ,
05508             NULL ) ;
05509    XtAddCallback( dmode->misc_readme_env_pb , XmNactivateCallback ,
05510                   AFNI_misc_CB , im3d ) ;
05511    MCW_register_hint( dmode->misc_readme_env_pb,"Display README.environment file" );
05512 
05513    dmode->misc_license_pb =
05514          XtVaCreateManagedWidget(
05515             "dialog" , xmPushButtonWidgetClass , menu ,
05516                LABEL_ARG("License Info") ,
05517                XmNmarginHeight , 0 ,
05518                XmNtraversalOn , False ,
05519                XmNinitialResourcesPersistent , False ,
05520             NULL ) ;
05521    XtAddCallback( dmode->misc_license_pb , XmNactivateCallback ,
05522                   AFNI_misc_CB , im3d ) ;
05523    MCW_register_hint( dmode->misc_license_pb,"Display GPL & Copyright Notice" );
05524 
05525    if( !ALLOW_real_time ){    /* 01 May 2000: only if not doing realtime */
05526       dmode->misc_vcheck_pb =
05527             XtVaCreateManagedWidget(
05528                "dialog" , xmPushButtonWidgetClass , menu ,
05529                   LABEL_ARG("Version Check") ,
05530                   XmNmarginHeight , 0 ,
05531                   XmNtraversalOn , False ,
05532                   XmNinitialResourcesPersistent , False ,
05533                NULL ) ;
05534       XtAddCallback( dmode->misc_vcheck_pb , XmNactivateCallback ,
05535                      AFNI_misc_CB , im3d ) ;
05536       MCW_register_hint( dmode->misc_vcheck_pb,"Compare to master distribution" );
05537    } else {
05538       dmode->misc_vcheck_pb = NULL ;
05539    }
05540 
05541    /*--- pushbutton to purge unused datasets ---*/
05542 
05543    dmode->misc_purge_pb =
05544          XtVaCreateManagedWidget(
05545             "dialog" , xmPushButtonWidgetClass , menu ,
05546                LABEL_ARG("Purge Memory") ,
05547                XmNmarginHeight , 0 ,
05548                XmNtraversalOn , False ,
05549                XmNinitialResourcesPersistent , False ,
05550             NULL ) ;
05551    XtAddCallback( dmode->misc_purge_pb , XmNactivateCallback ,
05552                   AFNI_misc_CB , im3d ) ;
05553    MCW_register_hint( dmode->misc_purge_pb , "Purge unused datasets" ) ;
05554 
05555    /*--- pushbutton to toggle routine tracing ---*/
05556 
05557 #if defined(USE_TRACING) || defined(USING_MCW_MALLOC)
05558    (void) XtVaCreateManagedWidget(
05559             "dialog" , xmSeparatorWidgetClass , menu ,
05560                XmNseparatorType , XmSINGLE_LINE ,
05561             NULL ) ;
05562 #endif
05563 
05564 #ifdef USE_TRACING
05565    if( !ALLOW_real_time ){    /* 26 Jan 2001: don't do this if realtime is on */
05566      dmode->misc_tracing_pb =
05567            XtVaCreateManagedWidget(
05568               "dialog" , xmPushButtonWidgetClass , menu ,
05569                  LABEL_ARG( DBG_label ) ,
05570                  XmNmarginHeight , 0 ,
05571                  XmNtraversalOn , False ,
05572                  XmNinitialResourcesPersistent , False ,
05573               NULL ) ;
05574      XtAddCallback( dmode->misc_tracing_pb , XmNactivateCallback ,
05575                     AFNI_misc_CB , im3d ) ;
05576      MCW_register_hint( dmode->misc_tracing_pb , "A Debugging Option" ) ;
05577    } else {
05578      dmode->misc_tracing_pb = NULL ;
05579    }
05580 #else
05581    dmode->misc_tracing_pb = NULL ;
05582 #endif
05583 
05584    /*--- pushbutton to query malloc table ---*/
05585 #ifdef USING_MCW_MALLOC
05586    if( MCW_MALLOC_enabled ){  /* 06 Mar 1999 */
05587       dmode->misc_showmalloc_pb =
05588             XtVaCreateManagedWidget(
05589                "dialog" , xmPushButtonWidgetClass , menu ,
05590                   LABEL_ARG("Malloc Summary") ,
05591                   XmNmarginHeight , 0 ,
05592                   XmNtraversalOn , False ,
05593                   XmNinitialResourcesPersistent , False ,
05594                NULL ) ;
05595       XtAddCallback( dmode->misc_showmalloc_pb , XmNactivateCallback ,
05596                      AFNI_misc_CB , im3d ) ;
05597 
05598       dmode->misc_dumpmalloc_pb =
05599             XtVaCreateManagedWidget(
05600                "dialog" , xmPushButtonWidgetClass , menu ,
05601                   LABEL_ARG("Dump Malloc Table") ,
05602                   XmNmarginHeight , 0 ,
05603                   XmNtraversalOn , False ,
05604                   XmNinitialResourcesPersistent , False ,
05605                NULL ) ;
05606       XtAddCallback( dmode->misc_dumpmalloc_pb , XmNactivateCallback ,
05607                      AFNI_misc_CB , im3d ) ;
05608 
05609       MCW_register_hint( dmode->misc_showmalloc_pb , "A Debugging Option" ) ;
05610       MCW_register_hint( dmode->misc_dumpmalloc_pb , "A Debugging Option" ) ;
05611    } else {
05612       dmode->misc_showmalloc_pb = dmode->misc_dumpmalloc_pb = NULL ;
05613    }
05614 #else
05615    dmode->misc_showmalloc_pb = dmode->misc_dumpmalloc_pb = NULL ;
05616 #endif
05617 
05618    /*--- done ---*/
05619 
05620    XtManageChild( rc ) ;
05621    EXRETURN ;
05622 }

void AFNI_make_wid3 Three_D_View   im3d
 

-- Color pbar to control intensity-to-color mapping --*

Definition at line 6091 of file afni_widg.c.

Referenced by AFNI_make_widgets().

void AFNI_make_widgets Three_D_View   im3d
 

Definition at line 312 of file afni_widg.c.

References ADDTO_KILL, afni16_pixmap, AFNI_3DDATA_VIEW, AFNI_make_wid1(), AFNI_make_wid2(), AFNI_make_wid3(), AFNI_plugin_button(), AFNI_tophelp, AFNI_yesenv(), AFNI_widget_set::butx, AFNI_widget_set::buty, Three_D_View::dc, DC_find_closest_overlay_color(), MCW_DC::display, AFNI_widget_set::dmode, ENTRY, FatalError, AFNI_widget_set::file_dialog, AFNI_program_widgets::frame, AFNI_datamode_widgets::frame, AFNI_function_widgets::frame, AFNI_marks_widgets::frame, AFNI_viewing_widgets::frame, AFNI_imaging_widgets::frame, AFNI_widget_set::func, getenv(), IM3D_VALID, AFNI_widget_set::imag, MRI_IMAGE::kind, Three_D_View::kl, last_color, logo_pixmap, AFNI_widget_set::marks, MCW_kill_XImage(), MCW_register_help(), mri_clear_data_pointer, mri_fix_data_pointer(), mri_free(), mri_new_vol_empty(), mri_read_just_one(), myXtNew, MCW_DC::ncol_im, MCW_DCOV::ncol_ov, AFNI_widget_set::nplugbut, num_entry, MRI_IMAGE::nx, MRI_IMAGE::ny, MCW_DC::origGC, MCW_DCOV::ov_darkest, MCW_DC::ovc, AFNI_widget_set::parent, MCW_DC::pix_im, MCW_DCOV::pix_ov, MCW_DC::planes, AFNI_widget_set::prog, REFRESH, rgb_to_XImage(), MCW_DC::screen, STATUS, AFNI_widget_set::top_form, AFNI_widget_set::top_shell, Three_D_View::type, vers_pixmap, AFNI_widget_set::view, MCW_DC::visual_class, and Three_D_View::vwid.

00313 {
00314 
00315 ENTRY("AFNI_make_widgets") ;
00316 
00317    /*---- initialize -----*/
00318 
00319    if( ! IM3D_VALID(im3d) )
00320      FatalError("illegal call to AFNI_make_widgets") ;
00321 
00322    num_entry++ ;
00323 
00324    last_color = im3d->dc->ovc->ncol_ov - 1 ;
00325 
00326    vwid         = im3d->vwid ;
00327    vwid->parent = im3d ;
00328 
00329    vwid->butx = vwid->buty = 9 ; /* 17 May 2005 */
00330 
00331 #define AFNI_FORM_SPACING 9
00332 
00333 STATUS("creating top_form") ;
00334 
00335    vwid->top_form =
00336       XtVaCreateWidget(
00337          "dialog" , xmFormWidgetClass , vwid->top_shell ,
00338             XmNborderWidth , 0 ,
00339             XmNmarginHeight , AFNI_FORM_SPACING ,
00340             XmNmarginWidth  , AFNI_FORM_SPACING ,
00341             XmNtraversalOn , False ,
00342             XmNinitialResourcesPersistent , False ,
00343          NULL ) ;
00344 
00345    MCW_register_help( vwid->top_form , AFNI_tophelp ) ;
00346 
00347    vwid->file_dialog = NULL ; /* Mar 1997 */
00348 
00349    /* create pixmaps, if desired */
00350 
00351 #if defined(WANT_LOGO_BITMAP) || defined(WANT_AFNI_BITMAP)
00352    {  Pixel bg_pix  , fg_pix  ;  /* colors: from control window */
00353       Pixel bot_pix , top_pix ;  /* colors: from image windows  */
00354 
00355 #ifdef USE_IMPIX              /** which colors to use for program icons **/
00356 #  define ICON_bg bot_pix     /* use image display pixels */
00357 #  define ICON_fg top_pix
00358 #else
00359 #  define ICON_bg bg_pix      /* use widget pixels (e.g., FALLback in afni.h) */
00360 #  define ICON_fg fg_pix
00361 #endif
00362 
00363       XtVaGetValues( vwid->top_form ,
00364                        XmNforeground , &bg_pix ,  /* note reversal of roles here! */
00365                        XmNbackground , &fg_pix ,
00366                       NULL ) ;
00367 
00368       bot_pix = im3d->dc->pix_im[0] ;
00369       top_pix = im3d->dc->pix_im[im3d->dc->ncol_im-1] ;
00370 
00371 #ifdef WANT_LOGO_BITMAP
00372 STATUS("WANT_LOGO_BITMAP") ;
00373       if( logo_pixmap == XmUNSPECIFIED_PIXMAP ){
00374 
00375 #ifndef NO_FRIVOLITIES
00376 #include "lll.h"
00377         if( im3d->dc->visual_class == TrueColor ){  /* 23 Sep 2001 */
00378           MRI_IMAGE *bim ; XImage *xim ;
00379           bim = mri_new_vol_empty( lll_width,lll_height,1 , MRI_rgb ) ;
00380           mri_fix_data_pointer( lll_rgb , bim ) ;
00381           logo_pixmap = XCreatePixmap( im3d->dc->display ,
00382                                        RootWindowOfScreen(im3d->dc->screen) ,
00383                                        lll_width , lll_height ,
00384                                        im3d->dc->planes ) ;
00385           xim = rgb_to_XImage( im3d->dc , bim ) ;
00386           if( xim != NULL )
00387              XPutImage( im3d->dc->display ,
00388                         logo_pixmap ,
00389                         im3d->dc->origGC ,
00390                         xim , 0,0 , 0,0 , lll_width , lll_height ) ;
00391           MCW_kill_XImage( xim );
00392 
00393           mri_fix_data_pointer( vvv_rgb , bim ) ;      /* 08 Aug 2005 */
00394           vers_pixmap = XCreatePixmap( im3d->dc->display ,
00395                                        RootWindowOfScreen(im3d->dc->screen) ,
00396                                        lll_width , lll_height ,
00397                                        im3d->dc->planes ) ;
00398           xim = rgb_to_XImage( im3d->dc , bim ) ;
00399           if( xim != NULL )
00400              XPutImage( im3d->dc->display ,
00401                         vers_pixmap ,
00402                         im3d->dc->origGC ,
00403                         xim , 0,0 , 0,0 , lll_width , lll_height ) ;
00404           MCW_kill_XImage( xim );
00405           mri_clear_data_pointer(bim); mri_free(bim);
00406         }
00407 #endif
00408 
00409         if( logo_pixmap == XmUNSPECIFIED_PIXMAP )         /* original code */
00410           logo_pixmap = XCreatePixmapFromBitmapData(      /* B&W pixmap logo */
00411                           XtDisplay(vwid->top_shell) ,
00412                           RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00413                           logo_bits , logo_width , logo_height ,
00414                           fg_pix , bg_pix ,
00415                           DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00416       }
00417 #endif
00418 
00419 #ifdef WANT_AFNI_BITMAP
00420 STATUS("WANT_AFNI_BITMAP") ;
00421       if( afni48_pixmap == XmUNSPECIFIED_PIXMAP )
00422         afni48_pixmap = XCreatePixmapFromBitmapData(
00423                          XtDisplay(vwid->top_shell) ,
00424                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00425                          afni48_bits , afni48_width , afni48_height ,
00426                          ICON_fg , ICON_bg ,
00427                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00428 
00429       if( afni48cor_pixmap == XmUNSPECIFIED_PIXMAP )
00430         afni48cor_pixmap = XCreatePixmapFromBitmapData(
00431                          XtDisplay(vwid->top_shell) ,
00432                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00433                          afni48cor_bits , afni48cor_width , afni48cor_height ,
00434                          ICON_fg , ICON_bg ,
00435                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00436 
00437       if( afni48sag_pixmap == XmUNSPECIFIED_PIXMAP )
00438         afni48sag_pixmap = XCreatePixmapFromBitmapData(
00439                          XtDisplay(vwid->top_shell) ,
00440                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00441                          afni48sag_bits , afni48sag_width , afni48sag_height ,
00442                          ICON_fg , ICON_bg ,
00443                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00444 
00445       if( afni48axi_pixmap == XmUNSPECIFIED_PIXMAP )
00446         afni48axi_pixmap = XCreatePixmapFromBitmapData(
00447                          XtDisplay(vwid->top_shell) ,
00448                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00449                          afni48axi_bits , afni48axi_width , afni48axi_height ,
00450                          ICON_fg , ICON_bg ,
00451                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00452 
00453       if( afni48gra_pixmap == XmUNSPECIFIED_PIXMAP )
00454         afni48gra_pixmap = XCreatePixmapFromBitmapData(
00455                          XtDisplay(vwid->top_shell) ,
00456                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00457                          afni48gra_bits , afni48gra_width , afni48gra_height ,
00458                          ICON_fg , ICON_bg ,
00459                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00460 
00461       if( afni48graaxi_pixmap == XmUNSPECIFIED_PIXMAP )
00462         afni48graaxi_pixmap = XCreatePixmapFromBitmapData(
00463                          XtDisplay(vwid->top_shell) ,
00464                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00465                          afni48graaxi_bits , afni48graaxi_width , afni48graaxi_height ,
00466                          ICON_fg , ICON_bg ,
00467                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00468 
00469       if( afni48grasag_pixmap == XmUNSPECIFIED_PIXMAP )
00470         afni48grasag_pixmap = XCreatePixmapFromBitmapData(
00471                          XtDisplay(vwid->top_shell) ,
00472                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00473                          afni48grasag_bits , afni48grasag_width , afni48grasag_height ,
00474                          ICON_fg , ICON_bg ,
00475                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00476 
00477       if( afni48gracor_pixmap == XmUNSPECIFIED_PIXMAP )
00478         afni48gracor_pixmap = XCreatePixmapFromBitmapData(
00479                          XtDisplay(vwid->top_shell) ,
00480                          RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00481                          afni48gracor_bits , afni48gracor_width , afni48gracor_height ,
00482                          ICON_fg , ICON_bg ,
00483                          DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00484 
00485       /* 28 Jan 2004: just for fun, background pixmaps for top forms */
00486 
00487       if( im3d->dc->visual_class == TrueColor &&
00488           AFNI_yesenv("AFNI_LOGO16")          &&
00489           afni16_pixmap[num_entry-1] == XmUNSPECIFIED_PIXMAP ){
00490 
00491         MRI_IMAGE *bim ; XImage *xim ; char ename[32], *ept ;
00492         sprintf(ename,"AFNI_LOGO16_IMAGE_%c" , 'A'+num_entry-1 ) ;
00493         ept = getenv(ename) ;
00494         if( ept == NULL ) ept = getenv( "AFNI_LOGO16_IMAGE" ) ;
00495         if( ept != NULL ){
00496           bim = mri_read_just_one( ept ) ;
00497           if( bim != NULL ){
00498             if( bim->kind == MRI_rgb ){
00499               xim = rgb_to_XImage( im3d->dc , bim ) ;
00500               if( xim != NULL ){
00501                 afni16_pixmap[num_entry-1] = XCreatePixmap( im3d->dc->display ,
00502                                                  RootWindowOfScreen(im3d->dc->screen) ,
00503                                                  bim->nx , bim->ny , im3d->dc->planes ) ;
00504                 XPutImage( im3d->dc->display , afni16_pixmap[num_entry-1] ,
00505                            im3d->dc->origGC , xim , 0,0 , 0,0 , bim->nx , bim->ny ) ;
00506                 MCW_kill_XImage( xim ) ;
00507               }
00508             }
00509             mri_free(bim) ;
00510           }
00511         }
00512       }
00513 
00514 #if 0
00515       if( afni16_pixmap[num_entry-1] == XmUNSPECIFIED_PIXMAP && AFNI_yesenv("AFNI_LOGO16") ){
00516         Pixel fg16=ICON_bg, bg16=ICON_fg ; int ic ; char ename[32] ;
00517         char *fgn[7] = { "red", "blue-cyan", "green", "violet", "orange", "gray70", "yellow" };
00518 
00519         sprintf(ename,"AFNI_LOGO16_FOREGROUND_%c" , 'A'+num_entry-1 ) ;
00520                      ic = DC_find_closest_overlay_color(im3d->dc, getenv(ename) ) ;
00521         if( ic < 0 ) ic = DC_find_closest_overlay_color(im3d->dc, getenv("AFNI_LOGO16_FOREGROUND")) ;
00522         if( ic < 0 ) ic = DC_find_closest_overlay_color(im3d->dc, fgn[(num_entry-1)%7] ) ;
00523         if( ic >= 0 ) fg16 = im3d->dc->ovc->pix_ov[ic] ;
00524 
00525         sprintf(ename,"AFNI_LOGO16_BACKGROUND_%c" , 'A'+num_entry-1 ) ;
00526                      ic = DC_find_closest_overlay_color(im3d->dc, getenv(ename) ) ;
00527         if( ic < 0 ) ic = DC_find_closest_overlay_color(im3d->dc, getenv("AFNI_LOGO16_BACKGROUND")) ;
00528 #if 0
00529         if( ic < 0 ) ic = im3d->dc->ovc->ov_darkest ;
00530 #endif
00531         if( ic >= 0 ) bg16 = im3d->dc->ovc->pix_ov[ic] ;
00532 
00533         afni16_pixmap[num_entry-1] = XCreatePixmapFromBitmapData(
00534                                       XtDisplay(vwid->top_shell) ,
00535                                       RootWindowOfScreen(XtScreen(vwid->top_shell)) ,
00536                                       afni16_bits , afni16_width , afni16_height ,
00537                                       fg16 , bg16 ,
00538                                       DefaultDepthOfScreen(XtScreen(vwid->top_shell)) ) ;
00539       }
00540 #endif
00541 
00542 #endif  /* WANT_AFNI_BITMAP */
00543    }
00544 #endif  /* if WANT any of the BITMAPs */
00545 
00546    if( afni16_pixmap[num_entry-1] != XmUNSPECIFIED_PIXMAP )
00547      XtVaSetValues( vwid->top_form , XmNbackgroundPixmap,afni16_pixmap[num_entry-1] , NULL ) ;
00548 
00549    /* create each control panel, and a container frame for each */
00550 
00551 STATUS("creating control panels") ;
00552 
00553    imag =vwid->imag = myXtNew(AFNI_imaging_widgets) ;ADDTO_KILL(im3d->kl,imag);
00554    view =vwid->view = myXtNew(AFNI_viewing_widgets) ;ADDTO_KILL(im3d->kl,view);
00555    marks=vwid->marks= myXtNew(AFNI_marks_widgets)   ;ADDTO_KILL(im3d->kl,marks);
00556    func =vwid->func = myXtNew(AFNI_function_widgets);ADDTO_KILL(im3d->kl,func);
00557    prog =vwid->prog = myXtNew(AFNI_program_widgets) ;ADDTO_KILL(im3d->kl,prog);
00558    dmode=vwid->dmode= myXtNew(AFNI_datamode_widgets);ADDTO_KILL(im3d->kl,dmode);
00559 
00560    imag->frame =
00561       XtVaCreateWidget(
00562          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00563             XmNleftAttachment , XmATTACH_FORM ,
00564             XmNtopAttachment  , XmATTACH_FORM ,
00565             XmNleftOffset     , AFNI_FORM_SPACING ,
00566             XmNtopOffset      , AFNI_FORM_SPACING ,
00567             XmNshadowType , XmSHADOW_ETCHED_IN ,
00568             XmNshadowThickness , 5 ,
00569             XmNtraversalOn , False ,
00570             XmNinitialResourcesPersistent , False ,
00571          NULL ) ;
00572 
00573    view->frame =
00574       XtVaCreateWidget(
00575          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00576             XmNleftAttachment , XmATTACH_WIDGET ,
00577             XmNleftWidget     , imag->frame ,
00578             XmNtopAttachment  , XmATTACH_FORM ,
00579             XmNleftOffset     , AFNI_FORM_SPACING ,
00580             XmNtopOffset      , AFNI_FORM_SPACING ,
00581             XmNshadowType , XmSHADOW_ETCHED_IN ,
00582             XmNshadowThickness , 5 ,
00583             XmNtraversalOn , False ,
00584             XmNinitialResourcesPersistent , False ,
00585          NULL ) ;
00586 
00587    marks->frame =
00588       XtVaCreateWidget(
00589          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00590             XmNleftAttachment , XmATTACH_WIDGET ,
00591             XmNleftWidget     , view->frame ,
00592             XmNtopAttachment  , XmATTACH_FORM ,
00593             XmNleftOffset     , AFNI_FORM_SPACING ,
00594             XmNtopOffset      , AFNI_FORM_SPACING ,
00595             XmNshadowType , XmSHADOW_ETCHED_IN ,
00596             XmNshadowThickness , 5 ,
00597             XmNtraversalOn , False ,
00598             XmNinitialResourcesPersistent , False ,
00599          NULL ) ;
00600 
00601    func->frame =
00602       XtVaCreateWidget(
00603          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00604             XmNleftAttachment , XmATTACH_WIDGET ,
00605             XmNleftWidget     , view->frame ,
00606             XmNtopAttachment  , XmATTACH_FORM ,
00607             XmNleftOffset     , AFNI_FORM_SPACING ,
00608             XmNtopOffset      , AFNI_FORM_SPACING ,
00609             XmNshadowType , XmSHADOW_ETCHED_IN ,
00610             XmNshadowThickness , 5 ,
00611             XmNtraversalOn , False ,
00612             XmNinitialResourcesPersistent , False ,
00613          NULL ) ;
00614 
00615    dmode->frame =
00616       XtVaCreateWidget(
00617          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00618             XmNleftAttachment   , XmATTACH_WIDGET ,
00619             XmNleftWidget       , view->frame ,
00620             XmNtopAttachment    , XmATTACH_FORM ,
00621             XmNleftOffset       , AFNI_FORM_SPACING ,
00622             XmNtopOffset        , AFNI_FORM_SPACING ,
00623             XmNshadowType , XmSHADOW_ETCHED_IN ,
00624             XmNshadowThickness , 5 ,
00625             XmNtraversalOn , False ,
00626             XmNinitialResourcesPersistent , False ,
00627          NULL ) ;
00628 
00629    prog->frame =
00630       XtVaCreateWidget(
00631          "dialog" , xmFrameWidgetClass , vwid->top_form ,
00632             XmNtopAttachment    , XmATTACH_WIDGET ,
00633             XmNtopWidget        , imag->frame ,
00634             XmNleftAttachment   , XmATTACH_FORM ,
00635             XmNleftOffset     , AFNI_FORM_SPACING ,
00636             XmNtopOffset      , AFNI_FORM_SPACING ,
00637             XmNshadowType , XmSHADOW_ETCHED_IN ,
00638             XmNshadowThickness , 5 ,
00639             XmNtraversalOn , False ,
00640             XmNinitialResourcesPersistent , False ,
00641          NULL ) ;
00642 
00643    /************* call other routines to create rest of widgets  *************/
00644 
00645                             REFRESH ;
00646    AFNI_make_wid1( im3d ) ; REFRESH ;
00647    AFNI_make_wid2( im3d ) ; REFRESH ;
00648    AFNI_make_wid3( im3d ) ; REFRESH ;
00649 
00650 #ifdef ALLOW_PLUGINS
00651    im3d->vwid->nplugbut = 0 ;
00652    AFNI_plugin_button( im3d ) ; /* 07 Oct 1996 */
00653 #endif
00654 
00655    /*---------------------------------------------------*/
00656    /**************  finish up widgets *******************/
00657    /*---------------------------------------------------*/
00658 
00659    XtManageChild( imag->frame ) ;
00660    if( im3d->type == AFNI_3DDATA_VIEW ){
00661       XtManageChild( view->frame ) ;
00662    }
00663    XtManageChild( prog->frame ) ;
00664 
00665    XtManageChild( vwid->top_form ) ;
00666 
00667    EXRETURN ;
00668 }
00669 
00670 /*------------------------------------------------------------------*/
00671 
00672 void AFNI_raiseup_CB( Widget w , XtPointer cd , XtPointer cb )
00673 {
00674    XMapRaised( XtDisplay(w) , XtWindow(XtParent(w)) ) ;
00675 }
00676 
00677 /*--------------------------------------------------------------------*/
00678 
00679 void AFNI_make_wid1( Three_D_View * im3d )
00680 {
00681    int ii ;
00682 
00683 ENTRY("AFNI_make_wid1") ;
00684 
00685    /*----------------------------------------------------------*/
00686    /***************** imaging controls *************************/
00687    /*----------------------------------------------------------*/
00688 
00689    /*--- vertical rowcol to hold all imaging stuff ---*/
00690 
00691 STATUS("making imag->rowcol") ;
00692 
00693    imag->rowcol =
00694       XtVaCreateWidget(
00695          "dialog" , xmRowColumnWidgetClass , imag->frame ,
00696             XmNpacking      , XmPACK_TIGHT ,
00697             XmNorientation  , XmVERTICAL   ,
00698             XmNtraversalOn , False ,
00699             XmNinitialResourcesPersistent , False ,
00700          NULL ) ;
00701 
00702    /*--- popup menu to handle special imaging concerns ---*/
00703 
00704    imag->topper =           /* invisible widget to be parent of popup */
00705       XtVaCreateManagedWidget(
00706          "dialog" , xmSeparatorWidgetClass , imag->rowcol ,
00707             XmNseparatorType , XmNO_LINE ,
00708          NULL ) ;
00709 
00710 #ifdef BAD_BUTTON3_POPUPS   /* 21 Jul 2003 */
00711    imag->popmenu =
00712       XmCreatePopupMenu( vwid->top_form, "menu" , NULL , 0 ) ;
00713 #else
00714    imag->popmenu =
00715       XmCreatePopupMenu( imag->topper  , "menu" , NULL , 0 ) ;
00716 #endif
00717 
00718    SAVEUNDERIZE(XtParent(imag->popmenu)) ; /* 27 Feb 2001 */
00719 
00720    VISIBILIZE_WHEN_MAPPED(imag->popmenu) ;
00721 
00722 /***
00723    XtAddCallback( imag->popmenu ,
00724                   XmNunmapCallback , AFNI_imag_pop_CB , im3d ) ;
00725 ***/
00726 
00727    XtVaSetValues( imag->popmenu ,
00728                      XmNradioBehavior , True ,
00729                      XmNradioAlwaysOne , False ,
00730                      XmNspacing      , 1 ,
00731                      XmNmarginHeight , 0 ,
00732                      XmNmarginWidth  , 0 ,
00733                   NULL ) ;
00734 
00735    /*--- jumpback button in menu ---*/
00736 
00737    imag->pop_jumpback_pb =
00738       XtVaCreateManagedWidget(
00739          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00740             LABEL_ARG("Jumpback") ,
00741             XmNmarginHeight , 0 ,
00742             XmNtraversalOn , False ,
00743             XmNinitialResourcesPersistent , False ,
00744          NULL ) ;
00745 
00746    XtAddCallback( imag->pop_jumpback_pb , XmNactivateCallback ,
00747                   AFNI_imag_pop_CB , im3d ) ;
00748 
00749    /*--- jumpto button in menu ---*/
00750 
00751    if( im3d->type == AFNI_3DDATA_VIEW ){
00752       imag->pop_jumpto_pb =
00753          XtVaCreateManagedWidget(
00754             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00755                LABEL_ARG("Jump to (xyz)") ,
00756                XmNmarginHeight , 0 ,
00757                XmNtraversalOn , False ,
00758                XmNinitialResourcesPersistent , False ,
00759             NULL ) ;
00760 
00761       XtAddCallback( imag->pop_jumpto_pb , XmNactivateCallback ,
00762                      AFNI_imag_pop_CB , im3d ) ;
00763    } else {
00764       imag->pop_jumpto_pb = NULL ;
00765    }
00766 
00767    if( im3d->type == AFNI_3DDATA_VIEW ){
00768       imag->pop_jumpto_ijk_pb =
00769          XtVaCreateManagedWidget(
00770             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00771                LABEL_ARG("Jump to (ijk)") ,
00772                XmNmarginHeight , 0 ,
00773                XmNtraversalOn , False ,
00774                XmNinitialResourcesPersistent , False ,
00775             NULL ) ;
00776 
00777       XtAddCallback( imag->pop_jumpto_ijk_pb , XmNactivateCallback ,
00778                      AFNI_imag_pop_CB , im3d ) ;
00779    } else {
00780       imag->pop_jumpto_ijk_pb = NULL ;
00781    }
00782 
00783    /*--- mnito button in menu [01 May 2002] ---*/
00784 
00785    if( im3d->type == AFNI_3DDATA_VIEW ){
00786       imag->pop_mnito_pb =
00787          XtVaCreateManagedWidget(
00788             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00789                LABEL_ARG("Jump to (MNI)") ,
00790                XmNmarginHeight , 0 ,
00791                XmNtraversalOn , False ,
00792                XmNinitialResourcesPersistent , False ,
00793             NULL ) ;
00794 
00795       XtAddCallback( imag->pop_mnito_pb , XmNactivateCallback ,
00796                      AFNI_imag_pop_CB , im3d ) ;
00797    } else {
00798       imag->pop_mnito_pb = NULL ;
00799    }
00800 
00801    /*--- sumato button in menu ---*/
00802 
00803    if( im3d->type == AFNI_3DDATA_VIEW ){
00804       imag->pop_sumato_pb =
00805          XtVaCreateManagedWidget(
00806             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00807                LABEL_ARG("SUMA to (node)") ,
00808                XmNmarginHeight , 0 ,
00809                XmNtraversalOn , False ,
00810                XmNinitialResourcesPersistent , False ,
00811             NULL ) ;
00812 
00813       XtAddCallback( imag->pop_sumato_pb , XmNactivateCallback ,
00814                      AFNI_imag_pop_CB , im3d ) ;
00815    } else {
00816       imag->pop_sumato_pb = NULL ;
00817    }
00818 
00819    /*--- Talairach To button in menu ---*/
00820 
00821    if( im3d->type == AFNI_3DDATA_VIEW ){
00822       imag->pop_talto_pb =
00823          XtVaCreateManagedWidget(
00824             "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00825                LABEL_ARG("-Talairach to") ,
00826                XmNmarginHeight , 0 ,
00827                XmNtraversalOn , False ,
00828                XmNinitialResourcesPersistent , False ,
00829             NULL ) ;
00830 
00831       XtAddCallback( imag->pop_talto_pb , XmNactivateCallback ,
00832                      AFNI_imag_pop_CB , im3d ) ;
00833 
00834       if( TT_load_atlas() > 0 ){
00835          imag->pop_whereami_pb =        /* 10 Jul 2001 */
00836             XtVaCreateManagedWidget(
00837                "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00838                   LABEL_ARG("-Where Am I?") ,
00839                   XmNmarginHeight , 0 ,
00840                   XmNtraversalOn , False ,
00841                   XmNinitialResourcesPersistent , False ,
00842                NULL ) ;
00843 
00844          XtAddCallback( imag->pop_whereami_pb , XmNactivateCallback ,
00845                         AFNI_imag_pop_CB , im3d ) ;
00846 
00847          imag->pop_ttren_pb =
00848             XtVaCreateManagedWidget(
00849                "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00850                   LABEL_ARG("-Atlas Colors") ,
00851                   XmNmarginHeight , 0 ,
00852                   XmNtraversalOn , False ,
00853                   XmNinitialResourcesPersistent , False ,
00854                NULL ) ;
00855 
00856          XtAddCallback( imag->pop_ttren_pb , XmNactivateCallback ,
00857                         AFNI_imag_pop_CB , im3d ) ;
00858 
00859       } else {
00860         static int first=1 ;
00861         imag->pop_ttren_pb = imag->pop_whereami_pb = NULL ;
00862         if( first ){
00863           first = 0 ;
00864           fprintf(stderr,
00865            "\n++ WARNING: Can't find TTatlas+tlrc or TTatlas.nii.gz dataset for 'whereami'!\n"
00866              "++--------- See http://afni.nimh.nih.gov/pub/dist/data/\n" ) ;
00867         }
00868       }
00869       imag->pop_whereami_twin = NULL ;
00870    } else {
00871       imag->pop_talto_pb = NULL ;
00872       imag->pop_ttren_pb = imag->pop_whereami_pb = NULL ; /* 10 Jul 2001 */
00873       imag->pop_whereami_twin = NULL ;
00874    }
00875 
00876    /*--- imageonly button in menu ---*/
00877 
00878    imag->pop_imageonly_pb =
00879       XtVaCreateManagedWidget(
00880          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00881             LABEL_ARG("Image display") ,
00882             XmNmarginHeight , 0 ,
00883             XmNtraversalOn , False ,
00884             XmNinitialResourcesPersistent , False ,
00885          NULL ) ;
00886 
00887    XtAddCallback( imag->pop_imageonly_pb , XmNactivateCallback ,
00888                   AFNI_imag_pop_CB , im3d ) ;
00889 
00890    /*--- environment button in menu [05 Nov 2003] ---*/
00891 
00892 #ifdef ALLOW_PLUGINS
00893    imag->pop_environment_pb =
00894       XtVaCreateManagedWidget(
00895          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00896             LABEL_ARG("Edit Environment") ,
00897             XmNmarginHeight , 0 ,
00898             XmNtraversalOn , False ,
00899             XmNinitialResourcesPersistent , False ,
00900          NULL ) ;
00901    XtAddCallback( imag->pop_environment_pb , XmNactivateCallback ,
00902                   AFNI_imag_pop_CB , im3d ) ;
00903 
00904    imag->pop_drawdataset_pb =
00905       XtVaCreateManagedWidget(
00906          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
00907             LABEL_ARG("Draw ROI plugin") ,
00908             XmNmarginHeight , 0 ,
00909             XmNtraversalOn , False ,
00910             XmNinitialResourcesPersistent , False ,
00911          NULL ) ;
00912    XtAddCallback( imag->pop_drawdataset_pb , XmNactivateCallback ,
00913                   AFNI_imag_pop_CB , im3d ) ;
00914 #else
00915    imag->pop_environment_pb = NULL ;
00916    imag->pop_drawdataset_pb = NULL ;
00917 #endif
00918 
00919    /*--- frame to hold all crosshair stuff ---*/
00920 
00921    imag->crosshair_frame =
00922       XtVaCreateManagedWidget(
00923          "dialog" , xmFrameWidgetClass , imag->rowcol ,
00924             XmNshadowType , XmSHADOW_ETCHED_IN ,
00925             XmNshadowThickness , 2 ,
00926             XmNtraversalOn , False ,
00927             XmNinitialResourcesPersistent , False ,
00928          NULL ) ;
00929 
00930    /*--- rowcol to manage crosshair stuff ---*/
00931 
00932    imag->crosshair_rowcol =
00933       XtVaCreateWidget(
00934          "dialog" , xmRowColumnWidgetClass , imag->crosshair_frame ,
00935             XmNpacking      , XmPACK_TIGHT ,
00936             XmNorientation  , XmVERTICAL   ,
00937             XmNtraversalOn , False ,
00938             XmNinitialResourcesPersistent , False ,
00939          NULL ) ;
00940 
00941    /*--- label to display the crosshair location ---*/
00942 
00943    im3d->vinfo->old_crosshair_label = xstr = AFNI_crosshair_label( im3d ) ;
00944 
00945    im3d->vinfo->view_setter = -1 ;  /* 20 Feb 2003 */
00946 
00947    imag->crosshair_label =
00948       XtVaCreateManagedWidget(
00949          "dialog" , xmLabelWidgetClass , imag->crosshair_rowcol ,
00950             XmNrecomputeSize , False ,
00951             XmNlabelString , xstr ,
00952             XmNtraversalOn , False ,
00953             XmNinitialResourcesPersistent , False ,
00954          NULL ) ;
00955 
00956    MCW_register_help( imag->crosshair_label , AFNI_crosshair_label_help ) ;
00957    MCW_register_hint( imag->crosshair_label , "Coordinates of crosshair point" ) ;
00958 
00959    /*--- 12 Mar 2004: coordinate order popup menu ---*/
00960 
00961    if( im3d->type == AFNI_3DDATA_VIEW ){
00962     imag->crosshair_menu =
00963       XmCreatePopupMenu( imag->crosshair_label  , "menu" , NULL , 0 ) ;
00964 
00965     SAVEUNDERIZE(XtParent(imag->crosshair_menu)) ;
00966     VISIBILIZE_WHEN_MAPPED(imag->crosshair_menu) ;
00967 
00968     XtInsertEventHandler( imag->crosshair_label , /* handle events in label */
00969                              ButtonPressMask ,    /* button presses */
00970                              FALSE ,              /* nonmaskable events? */
00971                              AFNI_crosshair_EV ,  /* handler */
00972                              (XtPointer) im3d ,   /* client data */
00973                              XtListTail           /* last in queue */
00974                          ) ;
00975 
00976     (void) XtVaCreateManagedWidget(
00977              "menu" , xmLabelWidgetClass , imag->crosshair_menu ,
00978                 LABEL_ARG("-Set Coord Order-") ,
00979                 XmNrecomputeSize , False ,
00980                 XmNinitialResourcesPersistent , False ,
00981              NULL ) ;
00982 
00983     (void) XtVaCreateManagedWidget(
00984              "menu" , xmSeparatorWidgetClass , imag->crosshair_menu ,
00985               XmNseparatorType , XmSINGLE_LINE , NULL ) ;
00986 
00987     imag->crosshair_dicom_pb =
00988        XtVaCreateManagedWidget(
00989           "menu" , xmPushButtonWidgetClass , imag->crosshair_menu ,
00990              LABEL_ARG(" RAI=DICOM order") ,
00991              XmNmarginHeight , 0 ,
00992              XmNtraversalOn , False ,
00993              XmNinitialResourcesPersistent , False ,
00994           NULL ) ;
00995     XtAddCallback( imag->crosshair_dicom_pb , XmNactivateCallback ,
00996                    AFNI_crosshair_pop_CB , im3d ) ;
00997 
00998     imag->crosshair_spm_pb =
00999        XtVaCreateManagedWidget(
01000           "menu" , xmPushButtonWidgetClass , imag->crosshair_menu ,
01001              LABEL_ARG(" LPI=SPM order") ,
01002              XmNmarginHeight , 0 ,
01003              XmNtraversalOn , False ,
01004              XmNinitialResourcesPersistent , False ,
01005           NULL ) ;
01006     XtAddCallback( imag->crosshair_spm_pb , XmNactivateCallback ,
01007                    AFNI_crosshair_pop_CB , im3d ) ;
01008 
01009    } /*- end of crosshair_label popup menu -*/
01010 
01011    /*--- 01 Jan 1997: horizontal rowcol for crosshair stuff ---*/
01012 
01013 STATUS("making imag->xhair_rowcol") ;
01014 
01015      imag->xhair_rowcol =
01016         XtVaCreateWidget(
01017          "dialog" , xmRowColumnWidgetClass , imag->crosshair_rowcol ,
01018             XmNpacking     , XmPACK_TIGHT ,
01019             XmNorientation , XmHORIZONTAL ,
01020             XmNmarginHeight, 0 ,
01021             XmNmarginWidth , 0 ,
01022             XmNtraversalOn , False ,
01023             XmNinitialResourcesPersistent , False ,
01024          NULL ) ;
01025 
01026    /*--- arrowval to control crosshair visibility ---*/
01027 
01028    if( im3d->vinfo->crosshair_visible )
01029       ii = (im3d->vinfo->xhairs_show_montage) ? AFNI_XHAIRS_MULTI
01030                                               : AFNI_XHAIRS_SINGLE ;
01031    else
01032       ii = AFNI_XHAIRS_OFF ;
01033 
01034    im3d->vinfo->xhairs_orimask = ORIMASK_ALL ;  /* 31 Dec 1998 */
01035 
01036 STATUS("making imag->crosshair_av") ;
01037 
01038    imag->crosshair_av = new_MCW_arrowval(
01039                           imag->xhair_rowcol ,        /* parent Widget */
01040                           "Xhairs" ,                  /* label */
01041                           AVOPT_STYLE ,               /* option menu style */
01042                           AFNI_XHAIRS_OFF ,           /* first option */
01043                           AFNI_XHAIRS_LASTOPTION ,    /* last option */
01044                           ii ,                        /* initial selection */
01045                           MCW_AV_readtext ,           /* ignored but needed */
01046                           0 ,                         /* ditto */
01047                           AFNI_crosshair_visible_CB , /* callback when changed */
01048                           (XtPointer) im3d ,          /* data for above */
01049                           MCW_av_substring_CB ,       /* text creation routine */
01050                           AFNI_crosshair_av_label     /* data for above */
01051                         ) ;
01052 
01053    if( AVOPT_STYLE == MCW_AV_optmenu )
01054       AVOPT_columnize( imag->crosshair_av , 3 ) ;
01055 
01056    imag->crosshair_av->parent     = (XtPointer) im3d ;
01057    imag->crosshair_av->allow_wrap = True ;
01058 
01059    MCW_reghelp_children( imag->crosshair_av->wrowcol , AFNI_crosshair_av_help ) ;
01060    MCW_reghint_children( imag->crosshair_av->wrowcol , "Crosshairs style" ) ;
01061 
01062    ADDTO_KILL(im3d->kl,imag->crosshair_av) ;
01063 
01064    /*--- 01 Jan 1997: buttonbox to control "all" or "one" xhairs in montage ---*/
01065 
01066 STATUS("making imag->xhall_bbox") ;
01067 
01068    imag->xhall_bbox = new_MCW_bbox( imag->xhair_rowcol ,
01069                                      1 , AFNI_xhall_bbox_label ,
01070                                      MCW_BB_check ,
01071                                      MCW_BB_noframe ,
01072                                      AFNI_xhall_bbox_CB , (XtPointer) im3d ) ;
01073 
01074    MCW_set_bbox( imag->xhall_bbox , im3d->vinfo->xhairs_all ? 1 : 0 ) ;
01075 
01076    ADDTO_KILL(im3d->kl , imag->xhall_bbox) ;
01077 
01078    MCW_reghelp_children( imag->xhall_bbox->wrowcol ,
01079       "IN:  Montage will show crosshairs in all slices\n"
01080       "OUT: Montage will show crosshairs in one slice"
01081    ) ;
01082    MCW_reghint_children( imag->xhall_bbox->wrowcol ,
01083                          "All-or-One Montage crosshairs" ) ;
01084 
01085 STATUS("managing imag->xhair_rowcol") ;
01086 
01087    XtManageChild( imag->xhair_rowcol ) ;
01088 
01089    /*--- arrowval to control crosshair color ---*/
01090 
01091    ii = AVOPT_STYLE ;
01092 
01093 STATUS("making imag->crosshair_color_av") ;
01094 
01095    if( ii == MCW_AV_downup ){
01096       imag->crosshair_color_av =
01097          new_MCW_arrowval( imag->crosshair_rowcol ,        /* parent */
01098                            "Color " ,                      /* label */
01099                            MCW_AV_downup ,                 /* arrow directions */
01100                            1 ,                             /* min value */
01101                            last_color ,                    /* max value */
01102                            im3d->vinfo->crosshair_ovcolor ,/* init value */
01103                            MCW_AV_readtext ,               /* readonly text */
01104                            0 ,                             /* 0 decimal shift */
01105                            AFNI_crosshair_color_CB ,       /* click routine */
01106                            (XtPointer) im3d ,              /* data for above */
01107                            MCW_DC_ovcolor_text ,           /* text routine */
01108                            (XtPointer) im3d->dc            /* data for text */
01109                          ) ;
01110 
01111       (void) MCW_DC_ovcolor_text( imag->crosshair_color_av ,
01112                                   im3d->dc ) ;    /* set color now! */
01113 
01114       imag->crosshair_color_av->fastdelay  = 333 ;  /* slow down repeat action */
01115       imag->crosshair_color_av->allow_wrap = 1 ;
01116 
01117    } else {
01118       imag->crosshair_color_av =
01119          new_MCW_colormenu( imag->crosshair_rowcol , "Color " , im3d->dc ,
01120                             1 , last_color , im3d->vinfo->crosshair_ovcolor ,
01121                             AFNI_crosshair_color_CB , (XtPointer) im3d ) ;
01122    }
01123 
01124    imag->crosshair_color_av->parent     = (XtPointer) im3d ;
01125    imag->crosshair_color_av->fastdelay  = 333 ;  /* slow down repeat action */
01126    imag->crosshair_color_av->allow_wrap = 1 ;
01127 
01128    MCW_reghelp_children( imag->crosshair_color_av->wrowcol ,
01129                          AFNI_crosshair_color_help ) ;
01130    MCW_reghint_children( imag->crosshair_color_av->wrowcol , "Crosshairs color" ) ;
01131 
01132    ADDTO_KILL(im3d->kl,imag->crosshair_color_av) ;
01133 
01134    /**** 1 Aug 1996:
01135          put crosshair gap into a horizontal rowcol so
01136          can attach a toggle for periodic montages here, too ****/
01137 
01138 STATUS("making imag->gap_wrap_rowcol") ;
01139 
01140    imag->gap_wrap_rowcol =
01141       XtVaCreateWidget(
01142          "dialog" , xmRowColumnWidgetClass , imag->crosshair_rowcol ,
01143             XmNpacking     , XmPACK_TIGHT ,
01144             XmNorientation , XmHORIZONTAL ,
01145             XmNmarginHeight, 0 ,
01146             XmNmarginWidth , 0 ,
01147             XmNtraversalOn , False ,
01148             XmNinitialResourcesPersistent , False ,
01149          NULL ) ;
01150 
01151    /*--- arrowval to control crosshair gap ---*/
01152 
01153 STATUS("making imag->crosshair_gap_av") ;
01154 
01155    imag->crosshair_gap_av =
01156       new_MCW_arrowval( imag->gap_wrap_rowcol ,      /* parent */
01157                         "Gap   " ,                   /* label */
01158                         AVOPT_STYLE ,                /* arrow directions */
01159                         -1  ,                        /* min value */
01160                         MAXOVSIZE ,                  /* max value */
01161                         im3d->vinfo->crosshair_gap , /* init value */
01162                         MCW_AV_editext ,             /* input/output text */
01163                         0 ,                          /* 0 decimal shift */
01164                         AFNI_crosshair_gap_CB ,      /* click routine */
01165                         (XtPointer) im3d ,           /* data */
01166                         NULL , NULL
01167                       ) ;
01168 
01169    if( AVOPT_STYLE == MCW_AV_optmenu && MAXOVSIZE >= COLSIZE )
01170       AVOPT_columnize( imag->crosshair_gap_av , 1+(MAXOVSIZE+1)/COLSIZE ) ;
01171 
01172    imag->crosshair_gap_av->parent    = (XtPointer) im3d ;
01173    imag->crosshair_gap_av->fastdelay = 333 ;  /* slow down repeat action */
01174 
01175    MCW_reghelp_children( imag->crosshair_gap_av->wrowcol ,
01176                          AFNI_crosshair_gap_help ) ;
01177    MCW_reghint_children( imag->crosshair_gap_av->wrowcol ,
01178                          "Gap in crosshairs" ) ;
01179 
01180    ADDTO_KILL(im3d->kl,imag->crosshair_gap_av) ;
01181 
01182    /*--- 1 Aug 1996:
01183          toggle button box to control periodic montages ---*/
01184 
01185 STATUS("making imag->wrap_bbox") ;
01186 
01187    imag->wrap_bbox = new_MCW_bbox( imag->gap_wrap_rowcol ,
01188                                      1 , AFNI_wrap_bbox_label ,
01189                                      MCW_BB_check ,
01190                                      MCW_BB_noframe ,
01191                                      AFNI_wrap_bbox_CB , (XtPointer) im3d ) ;
01192 
01193    MCW_set_bbox( imag->wrap_bbox , im3d->vinfo->xhairs_periodic ? 1 : 0 ) ;
01194 
01195    ADDTO_KILL(im3d->kl , imag->wrap_bbox) ;
01196 
01197    MCW_reghelp_children( imag->wrap_bbox->wrowcol ,
01198       "IN:  Montage layout wraps around when slices\n"
01199       "       go past an edge of the dataset.\n"
01200       "OUT: Montage layout shows blanks for slices\n"
01201       "       past an edge of the dataset."
01202    ) ;
01203    MCW_reghint_children( imag->wrap_bbox->wrowcol ,
01204                          "Wrap montage past edge of volume?" ) ;
01205 
01206 STATUS("managing imag->gap_wrap_rowcol") ;
01207 
01208    XtManageChild( imag->gap_wrap_rowcol ) ;
01209 
01210    /*--- arrowval to control time index we are viewing ---*/
01211 
01212 STATUS("making imag->time_index_av") ;
01213 
01214    imag->time_index_av =
01215       new_MCW_arrowval( imag->crosshair_rowcol ,     /* parent */
01216                         "Index " ,                   /* label */
01217                         MCW_AV_downup ,              /* arrow directions */
01218                         0  ,                         /* min value */
01219                         im3d->vinfo->top_index ,     /* max value */
01220                         im3d->vinfo->time_index ,    /* init value */
01221                         MCW_AV_editext ,             /* input/output text */
01222                         0 ,                          /* 0 decimal shift */
01223                         AFNI_time_index_CB ,         /* click routine */
01224                         (XtPointer) im3d ,           /* data */
01225                         NULL , NULL
01226                       ) ;
01227    imag->time_index_av->parent     = (XtPointer) im3d ;
01228    imag->time_index_av->allow_wrap = 1 ;
01229 
01230    MCW_reghelp_children( imag->time_index_av->wrowcol ,
01231                          "Controls the time index\n"
01232                          "of the images being viewed.\n"
01233                          "[For time-dependent datasets.]" ) ;
01234    MCW_reghint_children( imag->time_index_av->wrowcol ,
01235                          "Set index in time" ) ;
01236 
01237    ADDTO_KILL(im3d->kl,imag->time_index_av) ;
01238 
01239    /*--- frame to hold all viewing control stuff ---*/
01240 
01241 STATUS("imag->view_frame") ;
01242 
01243    imag->view_frame =
01244       XtVaCreateManagedWidget(
01245          "dialog" , xmFrameWidgetClass , imag->rowcol ,
01246             XmNshadowType , XmSHADOW_ETCHED_IN ,
01247             XmNshadowThickness , 2 ,
01248             XmNinitialResourcesPersistent , False ,
01249          NULL ) ;
01250 
01251    /*--- rowcol to manage viewing control stuff ---*/
01252 
01253    imag->view_rowcol =
01254       XtVaCreateWidget(
01255          "dialog" , xmRowColumnWidgetClass , imag->view_frame ,
01256             XmNpacking      , XmPACK_TIGHT ,
01257             XmNorientation  , XmVERTICAL   ,
01258             XmNtraversalOn , False ,
01259             XmNinitialResourcesPersistent , False ,
01260          NULL ) ;
01261 
01262    /*--- pushbuttons to turn different views on ---*/
01263 
01264 #define xyz_3DIM "Axial   "
01265 #define yzx_3DIM "Sagittal"
01266 #define zxy_3DIM "Coronal "
01267 
01268    /*--------------------------------------------------------------*/
01269    imag->xyz_rowcol =
01270       XtVaCreateWidget(
01271          "dialog" , xmRowColumnWidgetClass , imag->view_rowcol ,
01272             XmNpacking     , XmPACK_TIGHT ,
01273             XmNorientation , XmHORIZONTAL ,
01274             XmNmarginHeight, 0 ,
01275             XmNmarginWidth , 0 ,
01276             XmNtraversalOn , False ,
01277             XmNinitialResourcesPersistent , False ,
01278          NULL ) ;
01279 
01280    imag->name_xyz_lab =
01281       XtVaCreateManagedWidget(
01282          "dialog" , xmLabelWidgetClass , imag->xyz_rowcol ,
01283             LABEL_ARG( xyz_3DIM ) ,
01284             XmNmarginHeight, 0 ,
01285             XmNmarginWidth , 0 ,
01286             XmNrecomputeSize , False ,
01287             XmNtraversalOn   , False ,
01288             XmNinitialResourcesPersistent , False ,
01289          NULL ) ;
01290 
01291    imag->image_xyz_pb =
01292       XtVaCreateManagedWidget(
01293          "dialog" , xmPushButtonWidgetClass , imag->xyz_rowcol ,
01294             LABEL_ARG("Image") ,
01295             XmNmarginHeight, 0 ,
01296             XmNmarginWidth , 0 ,
01297             XmNrecomputeSize , False ,
01298             XmNtraversalOn   , False ,
01299             XmNinitialResourcesPersistent , False ,
01300          NULL ) ;
01301 
01302    imag->graph_xyz_pb =
01303       XtVaCreateManagedWidget(
01304          "dialog" , xmPushButtonWidgetClass , imag->xyz_rowcol ,
01305             LABEL_ARG("Graph") ,
01306             XmNmarginHeight, 0 ,
01307             XmNmarginWidth , 0 ,
01308             XmNrecomputeSize , False ,
01309             XmNtraversalOn   , False ,
01310             XmNinitialResourcesPersistent , False ,
01311          NULL ) ;
01312 
01313    XtManageChild( imag->xyz_rowcol ) ;
01314    /*----------------------------------------------------------------*/
01315 
01316    /*--------------------------------------------------------------*/
01317    imag->yzx_rowcol =
01318       XtVaCreateWidget(
01319          "dialog" , xmRowColumnWidgetClass , imag->view_rowcol ,
01320             XmNpacking     , XmPACK_TIGHT ,
01321             XmNorientation , XmHORIZONTAL ,
01322             XmNmarginHeight, 0 ,
01323             XmNmarginWidth , 0 ,
01324             XmNtraversalOn , False ,
01325             XmNinitialResourcesPersistent , False ,
01326          NULL ) ;
01327 
01328    imag->name_yzx_lab =
01329       XtVaCreateManagedWidget(
01330          "dialog" , xmLabelWidgetClass , imag->yzx_rowcol ,
01331             LABEL_ARG( yzx_3DIM ) ,
01332             XmNmarginHeight, 0 ,
01333             XmNmarginWidth , 0 ,
01334             XmNrecomputeSize , False ,
01335             XmNtraversalOn   , False ,
01336             XmNinitialResourcesPersistent , False ,
01337          NULL ) ;
01338 
01339    imag->image_yzx_pb =
01340       XtVaCreateManagedWidget(
01341          "dialog" , xmPushButtonWidgetClass , imag->yzx_rowcol ,
01342             LABEL_ARG("Image") ,
01343             XmNmarginHeight, 0 ,
01344             XmNmarginWidth , 0 ,
01345             XmNrecomputeSize , False ,
01346             XmNtraversalOn   , False ,
01347             XmNinitialResourcesPersistent , False ,
01348          NULL ) ;
01349 
01350    imag->graph_yzx_pb =
01351       XtVaCreateManagedWidget(
01352          "dialog" , xmPushButtonWidgetClass , imag->yzx_rowcol ,
01353             LABEL_ARG("Graph") ,
01354             XmNmarginHeight, 0 ,
01355             XmNmarginWidth , 0 ,
01356             XmNrecomputeSize , False ,
01357             XmNtraversalOn   , False ,
01358             XmNinitialResourcesPersistent , False ,
01359          NULL ) ;
01360 
01361    XtManageChild( imag->yzx_rowcol ) ;
01362    /*----------------------------------------------------------------*/
01363 
01364    /*--------------------------------------------------------------*/
01365    imag->zxy_rowcol =
01366       XtVaCreateWidget(
01367          "dialog" , xmRowColumnWidgetClass , imag->view_rowcol ,
01368             XmNpacking     , XmPACK_TIGHT ,
01369             XmNorientation , XmHORIZONTAL ,
01370             XmNmarginHeight, 0 ,
01371             XmNmarginWidth , 0 ,
01372             XmNtraversalOn , False ,
01373             XmNinitialResourcesPersistent , False ,
01374          NULL ) ;
01375 
01376    imag->name_zxy_lab =
01377       XtVaCreateManagedWidget(
01378          "dialog" , xmLabelWidgetClass , imag->zxy_rowcol ,
01379             LABEL_ARG( zxy_3DIM ) ,
01380             XmNmarginHeight, 0 ,
01381             XmNmarginWidth , 0 ,
01382             XmNrecomputeSize , False ,
01383             XmNtraversalOn   , False ,
01384             XmNinitialResourcesPersistent , False ,
01385          NULL ) ;
01386 
01387    imag->image_zxy_pb =
01388       XtVaCreateManagedWidget(
01389          "dialog" , xmPushButtonWidgetClass , imag->zxy_rowcol ,
01390             LABEL_ARG("Image") ,
01391             XmNmarginHeight, 0 ,
01392             XmNmarginWidth , 0 ,
01393             XmNrecomputeSize , False ,
01394             XmNtraversalOn   , False ,
01395             XmNinitialResourcesPersistent , False ,
01396          NULL ) ;
01397 
01398    imag->graph_zxy_pb =
01399       XtVaCreateManagedWidget(
01400          "dialog" , xmPushButtonWidgetClass , imag->zxy_rowcol ,
01401             LABEL_ARG("Graph") ,
01402             XmNmarginHeight, 0 ,
01403             XmNmarginWidth , 0 ,
01404             XmNrecomputeSize , False ,
01405             XmNtraversalOn   , False ,
01406             XmNinitialResourcesPersistent , False ,
01407          NULL ) ;
01408 
01409    XtManageChild( imag->zxy_rowcol ) ;
01410    /*----------------------------------------------------------------*/
01411 
01412    XtAddCallback( imag->image_xyz_pb , XmNactivateCallback ,
01413                   AFNI_view_xyz_CB , im3d ) ;
01414 
01415    XtAddCallback( imag->image_yzx_pb , XmNactivateCallback ,
01416                   AFNI_view_xyz_CB , im3d ) ;
01417 
01418    XtAddCallback( imag->image_zxy_pb , XmNactivateCallback ,
01419                   AFNI_view_xyz_CB , im3d ) ;
01420 
01421    XtAddCallback( imag->graph_xyz_pb , XmNactivateCallback ,
01422                   AFNI_view_xyz_CB , im3d ) ;
01423 
01424    XtAddCallback( imag->graph_yzx_pb , XmNactivateCallback ,
01425                   AFNI_view_xyz_CB , im3d ) ;
01426 
01427    XtAddCallback( imag->graph_zxy_pb , XmNactivateCallback ,
01428                   AFNI_view_xyz_CB , im3d ) ;
01429 
01430    MCW_reghelp_children( imag->xyz_rowcol , AFNI_view_help ) ;
01431    MCW_reghelp_children( imag->yzx_rowcol , AFNI_view_help ) ;
01432    MCW_reghelp_children( imag->zxy_rowcol , AFNI_view_help ) ;
01433 
01434    MCW_reghint_children( imag->xyz_rowcol , "Open/raise viewing window" ) ;
01435    MCW_reghint_children( imag->yzx_rowcol , "Open/raise viewing window" ) ;
01436    MCW_reghint_children( imag->zxy_rowcol , "Open/raise viewing window" ) ;
01437 
01438    XtInsertEventHandler( imag->image_xyz_pb ,
01439                            ButtonPressMask , FALSE ,
01440                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01441    XtInsertEventHandler( imag->graph_xyz_pb ,
01442                            ButtonPressMask , FALSE ,
01443                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01444    XtInsertEventHandler( imag->image_yzx_pb ,
01445                            ButtonPressMask , FALSE ,
01446                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01447    XtInsertEventHandler( imag->graph_yzx_pb ,
01448                            ButtonPressMask , FALSE ,
01449                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01450    XtInsertEventHandler( imag->image_zxy_pb ,
01451                            ButtonPressMask , FALSE ,
01452                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01453    XtInsertEventHandler( imag->graph_zxy_pb ,
01454                            ButtonPressMask , FALSE ,
01455                            AFNI_viewbut_EV , (XtPointer)im3d , XtListTail ) ;
01456 
01457    /* imaging column finished, so manage its pieces */
01458 
01459    XtManageChild( imag->crosshair_rowcol ) ;
01460    XtManageChild( imag->view_rowcol ) ;
01461    XtManageChild( imag->rowcol ) ;
01462 
01463    /*-------------------------------------------------------*/
01464    /************ Controls for which view we see *************/
01465    /*-------------------------------------------------------*/
01466 
01467    marks->ov_visible = marks->tag_visible = False ;
01468 
01469    /*--- vertical rowcol to hold all viewing controls stuff ---*/
01470 
01471 STATUS("making view->rowcol") ;
01472 
01473    view->rowcol =
01474       XtVaCreateWidget(
01475          "dialog" , xmRowColumnWidgetClass , view->frame ,
01476             XmNpacking      , XmPACK_TIGHT ,
01477             XmNorientation  , XmVERTICAL   ,
01478             XmNtraversalOn , False ,
01479             XmNinitialResourcesPersistent , False ,
01480          NULL ) ;
01481 
01482    view_count = 0 ;  /* count of widgets in this column */
01483 
01484    /*--- radio box to control which view we see ---*/
01485 
01486    view->view_bbox =
01487       new_MCW_bbox( view->rowcol ,
01488                     LAST_VIEW_TYPE+1 ,
01489                     VIEW_typestr ,
01490                     MCW_BB_radio_one ,
01491                     MCW_BB_frame ,
01492                     AFNI_switchview_CB , (XtPointer) im3d ) ;
01493 
01494    for( id=0 ; id <= LAST_VIEW_TYPE ; id++ ){
01495       if( im3d->anat_dset[id] == NULL )
01496          XtSetSensitive( view->view_bbox->wbut[id] , False ) ;
01497    }
01498 
01499    MCW_set_bbox( view->view_bbox , 1 << im3d->vinfo->view_type ) ;
01500 
01501    ADDTO_KILL(im3d->kl,view->view_bbox) ;
01502 
01503    MCW_reghelp_children( view->view_bbox->wrowcol ,
01504       "Use these to select the\n"
01505       "type of view for your data" ) ;
01506 
01507    { char * hh[] = { "View data in original coordinates" ,
01508                      "View data in AC-PC aligned coordinates" ,
01509                      "View data in Talairach coordinates" } ;
01510      MCW_bbox_hints( view->view_bbox , 3 , hh ) ;
01511    }
01512 
01513    view_count += LAST_VIEW_TYPE+1 ;
01514 
01515    /*--- frame for marks buttons ---*/
01516 
01517    view->marks_frame =
01518       XtVaCreateManagedWidget(
01519          "dialog" , xmFrameWidgetClass , view->rowcol ,
01520             XmNshadowType , XmSHADOW_ETCHED_IN ,
01521             XmNshadowThickness , 2 ,
01522             XmNtraversalOn , False ,
01523             XmNinitialResourcesPersistent , False ,
01524          NULL ) ;
01525 
01526    view->marks_rowcol =
01527       XtVaCreateWidget(
01528          "dialog" , xmRowColumnWidgetClass , view->marks_frame ,
01529             XmNpacking      , XmPACK_TIGHT ,
01530             XmNorientation  , XmVERTICAL   ,
01531             XmNtraversalOn , False ,
01532             XmNinitialResourcesPersistent , False ,
01533          NULL ) ;
01534 
01535    /*--- pushbutton to allow user to define marks ---*/
01536 
01537    view->define_marks_pb =
01538       XtVaCreateManagedWidget(
01539          "dialog" , xmPushButtonWidgetClass , view->marks_rowcol ,
01540             LABEL_ARG("Define Markers") ,
01541             XmNmarginHeight , 1 ,
01542             XmNtraversalOn , False ,
01543             XmNinitialResourcesPersistent , False ,
01544          NULL ) ;
01545 
01546    view->marks_pb_inverted = False ;
01547 
01548    XtAddCallback( view->define_marks_pb , XmNactivateCallback ,
01549                   AFNI_define_CB , im3d ) ;
01550 
01551    MCW_register_help( view->define_marks_pb ,
01552       "Use this to allow you to define\n"
01553       "the markers for this view type" ) ;
01554    MCW_register_hint( view->define_marks_pb ,
01555                       "Open/close Talairach markers control panel" ) ;
01556 
01557    view_count ++ ;
01558 
01559    /*--- bbox to allow the user to turn marks off and on ---*/
01560 
01561    view->see_marks_bbox =
01562       new_MCW_bbox( view->marks_rowcol ,
01563                     1 , AFNI_see_marks_bbox_label ,
01564                     MCW_BB_check ,
01565                     MCW_BB_noframe ,
01566                     AFNI_see_marks_CB , (XtPointer) im3d ) ;
01567 
01568    view->see_marks_bbox->parent = (XtPointer) im3d ;
01569 
01570    MCW_set_bbox( view->see_marks_bbox , (marks->ov_visible) ? 0 : 1 ) ;
01571 
01572    MCW_reghelp_children( view->see_marks_bbox->wrowcol ,
01573                          AFNI_see_marks_bbox_help ) ;
01574    MCW_reghint_children( view->see_marks_bbox->wrowcol ,
01575                          "Visibility of Talairach markers and Tags" ) ;
01576 
01577    ADDTO_KILL(im3d->kl,view->see_marks_bbox) ;
01578 
01579    view_count ++ ;
01580 
01581    /*--- frame for func buttons ---*/
01582 
01583    im3d->vinfo->func_visible = False ;
01584 
01585    view->func_frame =
01586       XtVaCreateManagedWidget(
01587          "dialog" , xmFrameWidgetClass , view->rowcol ,
01588             XmNshadowType , XmSHADOW_ETCHED_IN ,
01589             XmNshadowThickness , 2 ,
01590             XmNtraversalOn , False ,
01591             XmNinitialResourcesPersistent , False ,
01592          NULL ) ;
01593 
01594    view->func_rowcol =
01595       XtVaCreateWidget(
01596          "dialog" , xmRowColumnWidgetClass , view->func_frame ,
01597             XmNpacking      , XmPACK_TIGHT ,
01598             XmNorientation  , XmVERTICAL   ,
01599             XmNtraversalOn , False ,
01600             XmNinitialResourcesPersistent , False ,
01601          NULL ) ;
01602 
01603    /*--- pushbutton to allow user to define functions ---*/
01604 
01605    view->define_func_pb =
01606       XtVaCreateManagedWidget(
01607          "dialog" , xmPushButtonWidgetClass , view->func_rowcol ,
01608             LABEL_ARG("Define OverLay") ,
01609             XmNmarginHeight , 1 ,
01610             XmNtraversalOn , False ,
01611             XmNinitialResourcesPersistent , False ,
01612          NULL ) ;
01613 
01614    view->func_pb_inverted = False ;
01615 
01616    XtAddCallback( view->define_func_pb , XmNactivateCallback ,
01617                   AFNI_define_CB , im3d ) ;
01618 
01619    MCW_register_help( view->define_func_pb ,
01620      "Use this to control the thresholds,\n"
01621       "colors, etc. for overlays" ) ;
01622    MCW_register_hint( view->define_func_pb ,
01623                       "Open/close overlay control panel" ) ;
01624 
01625    view_count ++ ;
01626 
01627    /*--- bbox to allow the user to turn function overlay off and on ---*/
01628 
01629    view->see_func_bbox =
01630       new_MCW_bbox( view->func_rowcol ,
01631                     1 , AFNI_see_func_bbox_label ,
01632                     MCW_BB_check ,
01633                     MCW_BB_noframe ,
01634                     AFNI_see_func_CB , (XtPointer) im3d ) ;
01635 
01636    view->see_func_bbox->parent = (XtPointer) im3d ;
01637 
01638    MCW_set_bbox( view->see_func_bbox , (im3d->vinfo->func_visible) ? 1 : 0 ) ;
01639 
01640    MCW_reghelp_children( view->see_func_bbox->wrowcol ,
01641                          AFNI_see_func_bbox_help ) ;
01642    MCW_reghint_children( view->see_func_bbox->wrowcol ,
01643                          "Visibility of color overlay" ) ;
01644 
01645    ADDTO_KILL(im3d->kl,view->see_func_bbox) ;
01646 
01647    view_count ++ ;
01648 
01649    /*--- pushbutton to allow user to define datamode ---*/
01650 
01651    view->define_dmode_pb =
01652       XtVaCreateManagedWidget(
01653          "dialog" , xmPushButtonWidgetClass , view->rowcol ,
01654             LABEL_ARG("Define Datamode") ,
01655             XmNmarginHeight , 1 ,
01656             XmNtraversalOn , False ,
01657             XmNinitialResourcesPersistent , False ,
01658          NULL ) ;
01659 
01660    view->dmode_pb_inverted = False ;
01661 
01662    XtAddCallback( view->define_dmode_pb , XmNactivateCallback ,
01663                   AFNI_define_CB , im3d ) ;
01664 
01665    MCW_register_help( view->define_dmode_pb ,
01666      "Use this to control the mode in which\n"
01667      "the anatomy data is viewed, and also\n"
01668      "to save 3D datasets to disk" ) ;
01669    MCW_register_hint( view->define_dmode_pb ,
01670                       "Open/close data manipulation control panel" ) ;
01671 
01672    view_count ++ ;
01673 
01674    /*--- frame for dataset choosers ---*/
01675 
01676    view->dataset_frame =
01677       XtVaCreateManagedWidget(
01678          "dialog" , xmFrameWidgetClass , view->rowcol ,
01679             XmNshadowType , XmSHADOW_ETCHED_IN ,
01680             XmNshadowThickness , 2 ,
01681             XmNtraversalOn , False ,
01682             XmNinitialResourcesPersistent , False ,
01683          NULL ) ;
01684 
01685    view->dataset_rowcol =
01686       XtVaCreateWidget(
01687          "dialog" , xmRowColumnWidgetClass , view->dataset_frame ,
01688             XmNpacking      , XmPACK_TIGHT ,
01689             XmNorientation  , XmVERTICAL   ,
01690             XmNtraversalOn , False ,
01691             XmNinitialResourcesPersistent , False ,
01692          NULL ) ;
01693 
01694    /*--- pushbuttons for dataset choice ---*/
01695 
01696    view->choose_sess_pb =
01697       XtVaCreateManagedWidget(
01698          "dialog" , xmPushButtonWidgetClass , view->dataset_rowcol ,
01699             LABEL_ARG("Switch Session") ,
01700             XmNmarginHeight , 1 ,
01701             XmNtraversalOn , False ,
01702             XmNinitialResourcesPersistent , False ,
01703          NULL ) ;
01704 
01705    XtAddCallback( view->choose_sess_pb , XmNactivateCallback ,
01706                   AFNI_choose_dataset_CB , im3d ) ;
01707 
01708    MCW_register_help( view->choose_sess_pb ,
01709      "Use this to choose from which\n"
01710      "session 3D datasets may be viewed." ) ;
01711    MCW_register_hint( view->choose_sess_pb ,
01712                       "Switch between session directories" ) ;
01713 
01714    view_count ++ ;
01715 
01716    view->choose_anat_pb =
01717       XtVaCreateManagedWidget(
01718          "dialog" , xmPushButtonWidgetClass , view->dataset_rowcol ,
01719             LABEL_ARG("Switch UnderLay") ,
01720             XmNmarginHeight , 1 ,
01721             XmNtraversalOn , False ,
01722             XmNinitialResourcesPersistent , False ,
01723          NULL ) ;
01724 
01725    XtAddCallback( view->choose_anat_pb , XmNactivateCallback ,
01726                   AFNI_choose_dataset_CB , im3d ) ;
01727 
01728    MCW_register_help( view->choose_anat_pb ,
01729         "Use this to choose which 3D\n"
01730         "dataset to view as the underlay\n"
01731         "(from the current session).\n\n"
01732         "N.B.: Datasets which can be\n"
01733         "  graphed are marked with a\n"
01734         "  '*' after their names.\n"
01735         "  Datasets that are compressed\n"
01736         "  have 'z' after their names."
01737    ) ;
01738    MCW_register_hint( view->choose_anat_pb ,
01739                       "Switch datasets for underlay/graphs" ) ;
01740 
01741    view_count ++ ;
01742 
01743    view->choose_func_pb =
01744       XtVaCreateManagedWidget(
01745          "dialog" , xmPushButtonWidgetClass , view->dataset_rowcol ,
01746             LABEL_ARG("Switch OverLay") ,
01747             XmNmarginHeight , 1 ,
01748             XmNtraversalOn , False ,
01749             XmNinitialResourcesPersistent , False ,
01750          NULL ) ;
01751 
01752    XtAddCallback( view->choose_func_pb , XmNactivateCallback ,
01753                   AFNI_choose_dataset_CB , im3d ) ;
01754 
01755    MCW_register_help( view->choose_func_pb ,
01756      "Use this to choose which\n"
01757      "overlay 3D dataset to view\n"
01758      "(from the current session).\n"
01759      "N.B.: Datasets that are compressed\n"
01760      "  have 'z' after their names."
01761     ) ;
01762    MCW_register_hint( view->choose_func_pb ,
01763                       "Switch datasets for color overlay" ) ;
01764 
01765    view_count ++ ;
01766 
01767    /* 19 Aug 2002: Surface chooser! */
01768 
01769    view->choose_surf_pb =
01770       XtVaCreateManagedWidget(
01771          "dialog" , xmPushButtonWidgetClass , view->dataset_rowcol ,
01772             LABEL_ARG("Control Surface") ,
01773             XmNmarginHeight , 1 ,
01774             XmNtraversalOn , False ,
01775             XmNinitialResourcesPersistent , False ,
01776          NULL ) ;
01777 
01778    XtAddCallback( view->choose_surf_pb , XmNactivateCallback ,
01779                   AFNI_choose_surface_CB , im3d ) ;
01780 
01781    MCW_register_help( view->choose_surf_pb ,
01782                        "Use this to control the display of\n"
01783                        "overlaid surfaces in image viewers:\n"
01784                        "\n"
01785                        "Surface nodes will have little boxes\n"
01786                        "  drawn, when they appear inside a slice.\n"
01787                        "Surface triangles will have line segments\n"
01788                        "  drawn, where they intersect a slice\n"
01789                        "  center-plane."
01790                     ) ;
01791    MCW_register_hint( view->choose_surf_pb ,
01792                       "Control surface overlay" ) ;
01793 
01794    view->swid = NULL ;   /* no widgets for surface yet */
01795 
01796    view_count ++ ;
01797 
01798 #ifdef POPUP_CHOOSERS
01799    (void) XtVaCreateManagedWidget(
01800             "dialog" , xmSeparatorWidgetClass , imag->popmenu ,
01801                 XmNseparatorType , XmDOUBLE_LINE ,
01802             NULL ) ;
01803 
01804    view->popchoose_sess_pb =
01805       XtVaCreateManagedWidget(
01806          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
01807             LABEL_ARG("Switch Session") ,
01808             XmNmarginHeight , 0 ,
01809             XmNtraversalOn , False ,
01810             XmNinitialResourcesPersistent , False ,
01811          NULL ) ;
01812 
01813    XtAddCallback( view->popchoose_sess_pb , XmNactivateCallback ,
01814                   AFNI_choose_dataset_CB , im3d ) ;
01815 
01816    view->popchoose_anat_pb =
01817       XtVaCreateManagedWidget(
01818          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
01819             LABEL_ARG("Switch UnderLay") ,
01820             XmNmarginHeight , 0 ,
01821             XmNtraversalOn , False ,
01822             XmNinitialResourcesPersistent , False ,
01823          NULL ) ;
01824 
01825    XtAddCallback( view->popchoose_anat_pb , XmNactivateCallback ,
01826                   AFNI_choose_dataset_CB , im3d ) ;
01827 
01828    view->popchoose_func_pb =
01829       XtVaCreateManagedWidget(
01830          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
01831             LABEL_ARG("Switch OverLay") ,
01832             XmNmarginHeight , 0 ,
01833             XmNtraversalOn , False ,
01834             XmNinitialResourcesPersistent , False ,
01835          NULL ) ;
01836 
01837    XtAddCallback( view->popchoose_func_pb , XmNactivateCallback ,
01838                   AFNI_choose_dataset_CB , im3d ) ;
01839 
01840    if( im3d->type == AFNI_IMAGES_VIEW ){
01841       XtUnmanageChild( view->popchoose_func_pb ) ;
01842       XtUnmanageChild( view->popchoose_anat_pb ) ;
01843       XtUnmanageChild( view->popchoose_sess_pb ) ;
01844    }
01845 
01846 #else  /* don't POPUP_CHOOSERS */
01847 
01848    view->popchoose_func_pb =
01849      view->popchoose_anat_pb =
01850        view->popchoose_sess_pb = NULL ;
01851 
01852 #endif /* POPUP_CHOOSERS*/
01853 
01854    /*--- all view controls made, now manage them ---*/
01855 
01856    XtManageChild( view->marks_rowcol ) ;
01857    XtManageChild( view->func_rowcol ) ;
01858    XtManageChild( view->dataset_rowcol ) ;
01859    XtManageChild( view->rowcol ) ;
01860 
01861    /** compute height of widgets in the view-> column **/
01862 
01863    xstr = XmStringCreateLtoR("(y[M",XmFONTLIST_DEFAULT_TAG );
01864    XtVaGetValues( view->choose_func_pb , XmNfontList , &xflist , NULL ) ;
01865    view_height = (10 + XmStringHeight(xflist,xstr)) * view_count ;
01866    XmStringFree( xstr ) ;
01867 
01868    EXRETURN ;
01869 }
01870 
01871 /*--------------------------------------------------------------------*/
01872 
01873 void AFNI_make_wid2( Three_D_View * im3d )
01874 {
01875    int ii ;
01876    Widget hrc ;  /* 30 Mar 2001 */
01877 
01878 ENTRY("AFNI_make_wid2") ;
01879 
01880    /*-------------------------------------------------------*/
01881    /************  Marker controls (lots of them) ************/
01882    /*-------------------------------------------------------*/
01883 
01884    /*----- horizontal rowcol to hold the two columns of controls -----*/
01885 
01886 STATUS("making marks->rowcol") ;
01887 
01888    marks->rowcol =
01889       XtVaCreateWidget(
01890          "dialog" , xmRowColumnWidgetClass , marks->frame ,
01891             XmNpacking     , XmPACK_TIGHT ,
01892             XmNorientation , XmHORIZONTAL ,
01893             XmNtraversalOn , False ,
01894             XmNinitialResourcesPersistent , False ,
01895          NULL ) ;
01896 
01897    /*---------------------------------------------------------------*/
01898    /*----- COLUMN 1: the toggle switches for selecting markers -----*/
01899    /*---------------------------------------------------------------*/
01900 
01901    marks->tog_frame =
01902       XtVaCreateManagedWidget(
01903          "dialog" , xmFrameWidgetClass , marks->rowcol ,
01904             XmNshadowType , XmSHADOW_ETCHED_IN ,
01905             XmNshadowThickness , 2 ,
01906             XmNinitialResourcesPersistent , False ,
01907          NULL ) ;
01908 
01909    /*--- rowcol to manage toggle buttons stuff ---*/
01910 
01911    marks->tog_rowcol =
01912       XtVaCreateWidget(
01913          "dialog" , xmRowColumnWidgetClass , marks->tog_frame ,
01914             XmNpacking     , XmPACK_TIGHT ,
01915             XmNorientation , XmVERTICAL   ,
01916             XmNtraversalOn , False ,
01917             XmNinitialResourcesPersistent , False ,
01918          NULL ) ;
01919 
01920    /*----- create radio buttons in pairs,
01921            one in the rowcol and one in the popmenu;
01922            N.B.: they are created unmanaged and will be managed
01923                  later, depending on defined marks for the view -----*/
01924 
01925    XtVaSetValues( marks->tog_rowcol ,
01926                      XmNradioBehavior , True ,
01927                      XmNradioAlwaysOne , False ,
01928                      XmNspacing      , 1 ,
01929                      XmNmarginHeight , 0 ,
01930                      XmNmarginWidth  , 0 ,
01931                   NULL ) ;
01932 
01933    marks->num_sometimes_popup = 0 ;
01934    marks->num_always_popup    = 0 ;
01935 
01936    marks->always_popup[(marks->num_always_popup)++] =
01937       XtVaCreateWidget(
01938          "dialog" , xmSeparatorWidgetClass , imag->popmenu ,
01939              XmNseparatorType , XmDOUBLE_LINE ,
01940          NULL ) ;
01941 
01942    { int ib ;
01943      Dimension isiz ;
01944      Pixel  fg_pix ;
01945 
01946      XtVaGetValues( marks->tog_rowcol , XmNforeground , &fg_pix , NULL ) ;
01947 
01948      for( ib=0 ; ib < MARKS_MAXNUM ; ib++ ){
01949 
01950         marks->tog[ib] =
01951            XtVaCreateWidget(
01952               "dialog" , xmToggleButtonWidgetClass , marks->tog_rowcol ,
01953                  XmNvisibleWhenOff , True ,
01954                  XmNmarginHeight , 0 ,
01955                  XmNmarginWidth  , 0 ,
01956                  XmNselectColor  , fg_pix ,
01957                  XmNtraversalOn  , False ,
01958                  XmNinitialResourcesPersistent , False ,
01959               NULL ) ;
01960 
01961      /* we set XmNindicatorSize resource for the popup to same as the
01962         menu above, since menu default size is tiny and looks bad! */
01963 
01964         if( ib==0 )
01965            XtVaGetValues( marks->tog[0],XmNindicatorSize,&isiz,NULL ) ;
01966 
01967         marks->sometimes_popup[(marks->num_sometimes_popup)++] =
01968         marks->poptog[ib] =
01969            XtVaCreateWidget(
01970               "dialog" , xmToggleButtonWidgetClass , imag->popmenu ,
01971                  XmNindicatorSize , isiz ,
01972                  XmNvisibleWhenOff , True ,
01973                  XmNmarginHeight , 0 ,
01974                  XmNmarginWidth  , 0 ,
01975                  XmNselectColor  , fg_pix ,
01976                  XmNtraversalOn  , False ,
01977                  XmNinitialResourcesPersistent , False ,
01978               NULL ) ;
01979 
01980         MCW_register_help( marks->tog[ib],&(marks->tog_help[ib][0]) ) ;
01981 
01982         XtAddCallback( marks->tog[ib] ,
01983                        XmNdisarmCallback ,
01984                        AFNI_marktog_CB , im3d ) ;
01985 
01986         XtAddCallback( marks->poptog[ib] ,
01987                        XmNvalueChangedCallback ,
01988                        AFNI_marktog_CB , im3d ) ;
01989 
01990         marks->inverted[ib] = False ;
01991      }  /* end of loop creating toggle buttons */
01992    }  /* end of radio toggle creation */
01993 
01994    /*----------------------------------------------------*/
01995    /*----- COLUMN 2: controls to manage the markers -----*/
01996    /*----------------------------------------------------*/
01997 
01998    marks->control_frame =
01999       XtVaCreateManagedWidget(
02000          "dialog" , xmFrameWidgetClass , marks->rowcol ,
02001             XmNshadowType , XmSHADOW_ETCHED_IN ,
02002             XmNshadowThickness , 2 ,
02003             XmNinitialResourcesPersistent , False ,
02004          NULL ) ;
02005 
02006    /*--- rowcol to manage marker control stuff ---*/
02007 
02008    marks->control_rowcol =
02009       XtVaCreateWidget(
02010          "dialog" , xmRowColumnWidgetClass , marks->control_frame ,
02011             XmNpacking     , XmPACK_TIGHT ,
02012             XmNorientation , XmVERTICAL   ,
02013             XmNtraversalOn , False ,
02014             XmNinitialResourcesPersistent , False ,
02015          NULL ) ;
02016 
02017    /*--- bbox to control editability of marks ---*/
02018 
02019    marks->edits_bbox =
02020       new_MCW_bbox( marks->control_rowcol ,
02021                     1 , AFNI_marks_edits_bbox_label ,
02022                     MCW_BB_check ,
02023                     MCW_BB_noframe ,
02024                     AFNI_marks_edits_CB , (XtPointer) im3d ) ;
02025 
02026    marks->edits_bbox->parent = (XtPointer) im3d ;
02027 
02028    MCW_reghelp_children( marks->edits_bbox->wrowcol ,
02029                          AFNI_marks_edits_bbox_help ) ;
02030    MCW_reghint_children( marks->edits_bbox->wrowcol ,
02031                          "Press IN to allow changes to markers" ) ;
02032 
02033    ADDTO_KILL(im3d->kl,marks->edits_bbox) ;
02034 
02035    /*----- frame to hold markers display stuff -----*/
02036 
02037    marks->disp_frame =
02038       XtVaCreateManagedWidget(
02039          "frame" , xmFrameWidgetClass , marks->control_rowcol ,
02040             XmNshadowType , XmSHADOW_ETCHED_IN ,
02041             XmNshadowThickness , 2 ,
02042             XmNinitialResourcesPersistent , False ,
02043          NULL ) ;
02044 
02045    /*----- rowcol to hold markers display stuff -----*/
02046 
02047    marks->disp_rowcol =
02048       XtVaCreateWidget(
02049          "dialog" , xmRowColumnWidgetClass , marks->disp_frame ,
02050             XmNpacking      , XmPACK_TIGHT ,
02051             XmNorientation  , XmVERTICAL   ,
02052             XmNtraversalOn , False ,
02053             XmNinitialResourcesPersistent , False ,
02054          NULL ) ;
02055 
02056    /*--- arrowval to control primary color ---*/
02057 
02058    marks->ov_pcolor = MIN(last_color,INIT_marks1_color) ;
02059    marks->ov_scolor = MIN(last_color,INIT_marks2_color) ;
02060 
02061    ii = AVOPT_STYLE ;
02062 
02063    if( ii == MCW_AV_downup ){
02064       marks->disp_pcolor_av =
02065          new_MCW_arrowval(
02066             marks->disp_rowcol ,    /* parent */
02067             "Pcolor" ,              /* label */
02068             MCW_AV_downup ,         /* arrow directions */
02069             0 ,                     /* min value */
02070             last_color ,            /* max value */
02071             marks->ov_pcolor ,      /* init value */
02072             MCW_AV_readtext ,       /* readonly text display */
02073             0 ,                     /* 0 decimal shift */
02074             AFNI_marks_disp_av_CB , /* click routine */
02075             (XtPointer) im3d ,      /* data */
02076             MCW_DC_ovcolor_text ,   /* text routine */
02077             (XtPointer) im3d->dc    /* data */
02078           ) ;
02079       marks->disp_pcolor_av->fastdelay  = 333 ;  /* slow down repeat action */
02080       marks->disp_pcolor_av->allow_wrap = 1 ;
02081       (void) MCW_DC_ovcolor_text( marks->disp_pcolor_av ,
02082                                   im3d->dc               ) ;  /* set color! */
02083    } else {
02084       marks->disp_pcolor_av =
02085          new_MCW_colormenu( marks->disp_rowcol , "Pcolor" , im3d->dc ,
02086                             0 , last_color , marks->ov_pcolor ,
02087                             AFNI_marks_disp_av_CB , (XtPointer) im3d ) ;
02088    }
02089 
02090    marks->disp_pcolor_av->parent = (XtPointer) im3d ;
02091 
02092    MCW_reghelp_children( marks->disp_pcolor_av->wrowcol ,
02093                          AFNI_disp_pcolor_help ) ;
02094    MCW_reghint_children( marks->disp_pcolor_av->wrowcol ,
02095                          "Color of primary marker" ) ;
02096 
02097    ADDTO_KILL(im3d->kl,marks->disp_pcolor_av) ;
02098 
02099    /*--- arrowval to control secondary color ---*/
02100 
02101    if( ii == MCW_AV_downup ){
02102       marks->disp_scolor_av =
02103          new_MCW_arrowval(
02104             marks->disp_rowcol ,    /* parent */
02105             "Scolor" ,              /* label */
02106             MCW_AV_downup ,         /* arrow directions */
02107             0 ,                     /* min value */
02108             last_color ,            /* max value */
02109             marks->ov_scolor ,      /* init value */
02110             MCW_AV_readtext ,       /* readonly text display */
02111             0 ,                     /* 0 decimal shift */
02112             AFNI_marks_disp_av_CB , /* click routine */
02113             (XtPointer) im3d ,      /* data */
02114             MCW_DC_ovcolor_text ,   /* text routine */
02115             (XtPointer) im3d->dc    /* data */
02116           ) ;
02117       marks->disp_scolor_av->fastdelay  = 333 ;  /* slow down repeat action */
02118       marks->disp_scolor_av->allow_wrap = 1 ;
02119       (void) MCW_DC_ovcolor_text( marks->disp_scolor_av ,
02120                                   im3d->dc               ) ;  /* set color! */
02121    } else {
02122       marks->disp_scolor_av =
02123          new_MCW_colormenu( marks->disp_rowcol , "Scolor" , im3d->dc ,
02124                             0 , last_color , marks->ov_scolor ,
02125                             AFNI_marks_disp_av_CB , (XtPointer) im3d ) ;
02126    }
02127 
02128    marks->disp_scolor_av->parent = (XtPointer) im3d ;
02129 
02130    MCW_reghelp_children( marks->disp_scolor_av->wrowcol ,
02131                          AFNI_disp_scolor_help ) ;
02132    MCW_reghint_children( marks->disp_scolor_av->wrowcol ,
02133                          "Color of secondary markers" ) ;
02134 
02135    ADDTO_KILL(im3d->kl,marks->disp_scolor_av) ;
02136 
02137    /*--- arrowval to control point size  ---*/
02138 
02139    marks->ov_size = INIT_marks_size ;  /* initialize overlay mask */
02140    marks->ov_gap  = INIT_marks_gap ;
02141    AFNI_make_ptmask( marks->ov_size , marks->ov_gap , &(marks->ov_mask) ) ;
02142 
02143    marks->disp_size_av =
02144       new_MCW_arrowval(
02145          marks->disp_rowcol ,    /* parent */
02146          "Size  " ,              /* label */
02147          AVOPT_STYLE ,           /* arrow directions */
02148          1  ,                    /* min value */
02149          MAXOVSIZE ,             /* max value */
02150          marks->ov_size ,        /* init value */
02151          MCW_AV_editext ,        /* input/output text display */
02152          0 ,                     /* 0 decimal shift */
02153          AFNI_marks_disp_av_CB , /* routine to call after click */
02154          (XtPointer) im3d ,      /* data to pass */
02155          NULL ,                  /* routine to call for text display */
02156          NULL                    /* data for text display routine */
02157       ) ;
02158 
02159    if( AVOPT_STYLE == MCW_AV_optmenu && MAXOVSIZE >= COLSIZE )
02160       AVOPT_columnize( marks->disp_size_av , 1+(MAXOVSIZE+1)/COLSIZE ) ;
02161 
02162    marks->disp_size_av->parent    = (XtPointer) im3d ;
02163    marks->disp_size_av->fastdelay = 333 ;  /* slow down repeat action */
02164 
02165    MCW_reghelp_children( marks->disp_size_av->wrowcol ,
02166                          AFNI_disp_size_help ) ;
02167    MCW_reghint_children( marks->disp_size_av->wrowcol ,
02168                          "Size of markers" ) ;
02169 
02170    ADDTO_KILL(im3d->kl,marks->disp_size_av) ;
02171 
02172    /*--- arrowval to control point gap  ---*/
02173 
02174    marks->disp_gap_av =
02175       new_MCW_arrowval(
02176          marks->disp_rowcol ,    /* parent */
02177          "Gap   " ,              /* label */
02178          AVOPT_STYLE ,           /* arrow directions */
02179          1  ,                    /* min value */
02180          MAXOVSIZE ,             /* max value */
02181          marks->ov_gap ,         /* init value */
02182          MCW_AV_editext ,        /* input/output text display */
02183          0 ,                     /* 0 decimal shift */
02184          AFNI_marks_disp_av_CB , /* routine to call after click */
02185          (XtPointer) im3d ,      /* data to pass */
02186          NULL ,                  /* routine to call for text display */
02187          NULL                    /* data for text display routine */
02188       ) ;
02189 
02190    if( AVOPT_STYLE == MCW_AV_optmenu && MAXOVSIZE >= COLSIZE )
02191       AVOPT_columnize( marks->disp_gap_av , 1+(MAXOVSIZE+1)/COLSIZE ) ;
02192 
02193    marks->disp_size_av->parent    = (XtPointer) im3d ;
02194    marks->disp_size_av->fastdelay = 333 ;  /* slow down repeat action */
02195 
02196    MCW_reghelp_children( marks->disp_gap_av->wrowcol ,
02197                          AFNI_disp_gap_help ) ;
02198    MCW_reghint_children( marks->disp_gap_av->wrowcol ,
02199                          "Size of gap in markers" ) ;
02200 
02201    ADDTO_KILL(im3d->kl,marks->disp_size_av) ;
02202 
02203    /*----- rowcol to hold action pushbuttons -----*/
02204 
02205    marks->action_rowcol =
02206       XtVaCreateWidget(
02207          "dialog" , xmRowColumnWidgetClass , marks->control_rowcol ,
02208             XmNorientation  , XmHORIZONTAL ,
02209             XmNtraversalOn , False ,
02210             XmNinitialResourcesPersistent , False ,
02211          NULL ) ;
02212 
02213    /*----- set point pushbutton -----*/
02214 
02215    marks->action_set_pb =
02216       XtVaCreateManagedWidget(
02217          "dialog" , xmPushButtonWidgetClass , marks->action_rowcol ,
02218             LABEL_ARG("Set") ,
02219             XmNtraversalOn , False ,
02220             XmNinitialResourcesPersistent , False ,
02221          NULL ) ;
02222 
02223    XtAddCallback( marks->action_set_pb , XmNactivateCallback ,
02224                   AFNI_marks_action_CB , im3d ) ;
02225 
02226    MCW_register_help( marks->action_set_pb , AFNI_marks_set_help ) ;
02227    MCW_register_hint( marks->action_set_pb , "Set marker at crosshairs" ) ;
02228 
02229    /*----- clear point pushbutton -----*/
02230 
02231    marks->action_clear_pb =
02232       XtVaCreateManagedWidget(
02233          "dialog" , xmPushButtonWidgetClass , marks->action_rowcol ,
02234             LABEL_ARG("Clear") ,
02235             XmNtraversalOn , False ,
02236             XmNinitialResourcesPersistent , False ,
02237          NULL ) ;
02238 
02239    XtAddCallback( marks->action_clear_pb , XmNactivateCallback ,
02240                   AFNI_marks_action_CB , im3d ) ;
02241 
02242    MCW_register_help( marks->action_clear_pb , AFNI_marks_clear_help ) ;
02243    MCW_register_hint( marks->action_clear_pb , "Un-set primary marker" ) ;
02244 
02245    /*----- copies of these pushbuttons on the popup menu -----*/
02246 
02247    marks->always_popup[(marks->num_always_popup)++] =
02248       XtVaCreateManagedWidget(
02249              "dialog" , xmSeparatorWidgetClass , imag->popmenu ,
02250                  XmNseparatorType , XmDOUBLE_LINE ,
02251              NULL ) ;
02252 
02253    marks->always_popup[(marks->num_always_popup)++] =
02254    marks->pop_set_pb =
02255       XtVaCreateWidget(
02256          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
02257             LABEL_ARG("Set") ,
02258             XmNmarginHeight , 0 ,
02259             XmNtraversalOn , False ,
02260             XmNinitialResourcesPersistent , False ,
02261          NULL ) ;
02262 
02263    XtAddCallback( marks->pop_set_pb , XmNactivateCallback ,
02264                   AFNI_marks_action_CB , im3d ) ;
02265 
02266    marks->always_popup[(marks->num_always_popup)++] =
02267    marks->pop_clear_pb =
02268       XtVaCreateWidget(
02269          "dialog" , xmPushButtonWidgetClass , imag->popmenu ,
02270             LABEL_ARG("Clear") ,
02271             XmNmarginHeight , 0 ,
02272             XmNtraversalOn , False ,
02273             XmNinitialResourcesPersistent , False ,
02274          NULL ) ;
02275 
02276    XtAddCallback( marks->pop_clear_pb , XmNactivateCallback ,
02277                   AFNI_marks_action_CB , im3d ) ;
02278 
02279    /*----- a "quality" button (not on the popup menu) -----*/
02280 
02281    marks->action_quality_pb =
02282       XtVaCreateManagedWidget(
02283          "dialog" , xmPushButtonWidgetClass , marks->action_rowcol ,
02284             LABEL_ARG("Quality?") ,
02285             XmNtraversalOn , False ,
02286             XmNinitialResourcesPersistent , False ,
02287          NULL ) ;
02288 
02289    XtAddCallback( marks->action_quality_pb , XmNactivateCallback ,
02290                   AFNI_marks_action_CB , im3d ) ;
02291 
02292    MCW_register_help( marks->action_quality_pb , AFNI_marks_quality_help ) ;
02293    MCW_register_hint( marks->action_quality_pb , "Check markers for consistency" ) ;
02294 
02295    /*----- below the line, put the transformation controls -----*/
02296 
02297    (void) XtVaCreateManagedWidget(
02298              "dialog" , xmSeparatorWidgetClass , marks->control_rowcol ,
02299                  XmNseparatorType , XmDOUBLE_LINE ,
02300              NULL ) ;
02301 
02302    /*----- the transformation control -----*/
02303 
02304    marks->transform_pb =
02305       XtVaCreateManagedWidget(
02306          "dialog" , xmPushButtonWidgetClass , marks->control_rowcol ,
02307             LABEL_ARG("Transform Data") ,
02308             XmNtraversalOn , False ,
02309             XmNinitialResourcesPersistent , False ,
02310          NULL ) ;
02311 
02312    XtAddCallback( marks->transform_pb , XmNactivateCallback ,
02313                   AFNI_marks_transform_CB , im3d ) ;
02314 
02315    MCW_register_help( marks->transform_pb , AFNI_marks_transform_help ) ;
02316    MCW_register_hint( marks->transform_pb , "Compute transformation from markers" ) ;
02317 
02318    /*----- 3/06/96: the "big Talairach box" button -----*/
02319 
02320    marks->tlrc_big_bbox =
02321       new_MCW_bbox( marks->control_rowcol ,
02322                     1 , AFNI_tlrc_big_bbox_label ,
02323                     MCW_BB_check , MCW_BB_noframe ,
02324                     NULL , NULL                    ) ;    /* no callback */
02325 
02326    marks->tlrc_big_bbox->parent = (XtPointer) im3d ;
02327 
02328    MCW_reghelp_children( marks->tlrc_big_bbox->wrowcol ,
02329                          AFNI_tlrc_big_bbox_help ) ;
02330    MCW_reghint_children( marks->tlrc_big_bbox->wrowcol ,
02331                          "Use 'big' Talairach bounding box" ) ;
02332 
02333    ADDTO_KILL(im3d->kl,marks->tlrc_big_bbox) ;
02334 
02335    if( GLOBAL_argopt.tlrc_big )
02336       MCW_set_bbox( marks->tlrc_big_bbox , 1 ) ;
02337 
02338    /*----- manage the managers -----*/
02339 
02340    XtManageChild( marks->tog_rowcol ) ;
02341    XtManageChild( marks->disp_rowcol ) ;
02342    XtManageChild( marks->action_rowcol ) ;
02343    XtManageChild( marks->control_rowcol ) ;
02344    XtManageChild( marks->rowcol ) ;
02345 
02346    /*-----------------------------------------------------*/
02347    /**************** Function controls ********************/
02348    /*-----------------------------------------------------*/
02349 
02350 /** old hard-wired definition */
02351 #define SELECTOR_HEIGHT 240
02352 
02353    sel_height = view_height - 19 ;
02354 
02355 STATUS("making func->rowcol") ;
02356 
02357    func->rowcol =
02358       XtVaCreateWidget(
02359          "dialog" , xmRowColumnWidgetClass , func->frame ,
02360             XmNorientation , XmHORIZONTAL ,
02361             XmNpacking , XmPACK_TIGHT ,
02362             XmNtraversalOn , False ,
02363             XmNinitialResourcesPersistent , False ,
02364          NULL ) ;
02365 
02366    /*-- threshold stuff --*/
02367 
02368    func->thr_rowcol =
02369       XtVaCreateWidget(
02370          "dialog" , xmRowColumnWidgetClass , func->rowcol ,
02371             XmNorientation , XmVERTICAL ,
02372             XmNpacking , XmPACK_TIGHT ,
02373             XmNmarginHeight, 0 ,
02374             XmNmarginWidth , 0 ,
02375             XmNtraversalOn , False ,
02376             XmNinitialResourcesPersistent , False ,
02377          NULL ) ;
02378 
02379    func->thr_label =
02380       XtVaCreateManagedWidget(
02381          "dialog" , xmLabelWidgetClass , func->thr_rowcol ,
02382             LABEL_ARG("Thr") ,
02383             XmNrecomputeSize , False ,
02384             XmNinitialResourcesPersistent , False ,
02385          NULL ) ;
02386 
02387 #ifdef FIX_SCALE_VALUE_PROBLEM
02388    MCW_register_help( func->thr_label ,
02389       "This version of AFNI has been\n"
02390       "compiled to show the slider value\n"
02391       "here, since there is a bug in the\n"
02392       "Motif library for this computer system."
02393    ) ;
02394 #else
02395 #endif
02396    MCW_register_help( func->thr_label ,
02397       "Shows the type of threshold\n"
02398       "statistic that is available\n"
02399       "at this moment.  Names mean:\n\n"
02400       FUNC_THR_LABEL " = " FUNC_THR_DESCRIPTOR "\n"
02401       FUNC_COR_LABEL " = " FUNC_COR_DESCRIPTOR "\n"
02402       FUNC_TT_LABEL  " = " FUNC_TT_DESCRIPTOR  "\n"
02403       FUNC_FT_LABEL  " = " FUNC_FT_DESCRIPTOR  "\n"
02404       FUNC_ZT_LABEL  " = " FUNC_ZT_DESCRIPTOR  "\n"
02405       FUNC_CT_LABEL  " = " FUNC_CT_DESCRIPTOR  "\n"
02406       FUNC_BT_LABEL  " = " FUNC_BT_DESCRIPTOR  "\n"
02407       FUNC_BN_LABEL  " = " FUNC_BN_DESCRIPTOR  "\n"
02408       FUNC_GT_LABEL  " = " FUNC_GT_DESCRIPTOR  "\n"
02409       FUNC_PT_LABEL  " = " FUNC_PT_DESCRIPTOR  "\n"
02410    ) ;
02411    MCW_register_hint( func->thr_label , "Type of threshold statistic" ) ;
02412 
02413    FIX_SCALE_VALUE(im3d) ;
02414 
02415 #define SCALE_EXTRA 66
02416 
02417   {Widget qqq ; int iqqq ;
02418    char thr_str[] = "-----------" ;
02419    char zork[2] ;
02420 
02421    int smax , stop , decim , sstep ;                  /* 30 Nov 1997:       */
02422    decim = THR_TOP_EXPON ;                            /* compute parameters */
02423    smax  = (int)( pow(10.0,decim) + 0.001 ) ;         /* for scale display. */
02424    stop  = smax - 1 ;
02425    sstep = smax / 1000 ;
02426    { char *eee = getenv("AFNI_THRESH_BIGSTEP") ;      /* 09 May 2003 */
02427      if( eee != NULL ){ iqqq=strtol(eee,NULL,10); if(iqqq > 0) sstep=iqqq; }
02428    }
02429    if( sstep < 1 ) sstep = 1 ; else if( sstep > (smax/10) ) sstep = (smax/10) ;
02430 
02431 #ifdef BOXUP_SCALE
02432    qqq = XtVaCreateManagedWidget(
02433            "dialog" , xmFrameWidgetClass , func->thr_rowcol ,
02434             XmNshadowType , XmSHADOW_ETCHED_IN ,
02435             XmNtraversalOn , False ,
02436             XmNinitialResourcesPersistent , False ,
02437          NULL ) ;
02438 #else
02439    qqq = func->thr_rowcol ;
02440 #endif
02441 
02442    func->thr_scale =
02443       XtVaCreateManagedWidget(
02444          "scale" , xmScaleWidgetClass , qqq ,
02445             XmNminimum , 0 ,             /* 30 Nov 1997: changed */
02446             XmNmaximum , stop ,          /* range to be computed */
02447             XmNscaleMultiple , sstep ,
02448             XmNdecimalPoints , decim ,
02449 #ifdef FIX_SCALE_VALUE_PROBLEM
02450             XmNshowValue , False ,
02451 #else
02452             XmNshowValue , True ,
02453 #endif
02454             XmNvalue , (int)(smax*im3d->vinfo->func_threshold) ,
02455             XmNorientation , XmVERTICAL ,
02456             XmNheight , sel_height ,
02457             XmNborderWidth , 0 ,
02458             XmNtraversalOn , False ,
02459             XmNinitialResourcesPersistent , False ,
02460          NULL ) ;
02461 
02462 #ifdef FIX_SCALE_SIZE_PROBLEM
02463    XtVaSetValues( func->thr_scale ,
02464                     XmNuserData , (XtPointer) sel_height ,
02465                   NULL ) ;
02466 #endif
02467 
02468 #ifdef USING_LESSTIF
02469    XtVaSetValues( func->thr_scale , XmNscaleWidth,24 , NULL ) ;
02470 #endif
02471 
02472 #ifdef FIX_SCALE_VALUE_PROBLEM
02473    for( iqqq=0 ; iqqq < strlen(thr_str) ; iqqq++ ){
02474       zork[0] = thr_str[iqqq] ; zork[1] = '\0' ;
02475       XtVaCreateManagedWidget( zork,xmLabelWidgetClass,func->thr_scale,NULL ) ;
02476    }
02477 #endif
02478   }
02479 
02480    XtAddCallback( func->thr_scale , XmNvalueChangedCallback ,
02481                   AFNI_thr_scale_CB , im3d ) ;
02482 
02483    XtAddCallback( func->thr_scale , XmNdragCallback ,
02484                   AFNI_thr_scale_drag_CB , im3d ) ;
02485 
02486    MCW_reghelp_children( func->thr_scale ,
02487       "Drag the slider bar to\n"
02488       "adjust the threshold\n"
02489       "for overlay display.\n\n"
02490       "* Threshold doesn't apply\n"
02491       "  if dataset is RGB-format.\n"
02492       "* Threshold applies to 'Thr'\n"
02493       "  sub-brick.\n"
02494     ) ;
02495 #if 0
02496    MCW_register_hint( func->thr_scale , "Threshold for color overlay" ) ;
02497 #endif
02498 
02499    /** Mar 1996: label for computed p-value, under scale **/
02500 
02501    func->thr_pval_label =
02502       XtVaCreateManagedWidget(
02503          "dialog" , xmLabelWidgetClass , func->thr_rowcol ,
02504             LABEL_ARG( THR_PVAL_LABEL_NONE ) ,
02505             XmNrecomputeSize , False ,
02506             XmNinitialResourcesPersistent , False ,
02507          NULL ) ;
02508 
02509    MCW_register_help( func->thr_pval_label ,
02510          "Shows the estimated significance\n"
02511          "(p value) of the threshold above,\n"
02512          "if possible.\n"
02513          "* If not possible, will display as\n"
02514          "   '[N/A]' instead.\n"
02515          "* p's that display as 1.2-7 should\n"
02516          "   be interpreted as 1.2 x 10^(-7).\n"
02517          "* This is the significance PER VOXEL." ) ;
02518    MCW_register_hint( func->thr_pval_label , "Nominal p-value per voxel" ) ;
02519 
02520    /** Jul 1997: optmenu to choose top value for scale **/
02521 
02522    func->thr_top_av = new_MCW_arrowval( func->thr_rowcol ,
02523                                         "**" ,
02524                                         AVOPT_STYLE ,
02525                                         0,THR_TOP_EXPON,0 ,
02526                                         MCW_AV_notext , 0 ,
02527                                         AFNI_thresh_top_CB , (XtPointer) im3d ,
02528                                         AFNI_thresh_tlabel_CB , NULL ) ;
02529 
02530    im3d->vinfo->func_thresh_top = 1.0 ;
02531 
02532    MCW_reghelp_children( func->thr_top_av->wrowcol ,
02533                            "Use this to set\n"
02534                            "the power-of-10\n"
02535                            "range of the\n"
02536                            "threshold slider\n"
02537                            "above."
02538                        ) ;
02539 
02540    MCW_reghint_children( func->thr_top_av->wrowcol ,
02541                          "Power-of-10 range of slider" ) ;
02542 
02543    /*-- intensity threshold stuff --*/
02544 
02545    func->inten_rowcol =
02546       XtVaCreateWidget(
02547          "dialog" , xmRowColumnWidgetClass , func->rowcol ,
02548             XmNorientation , XmVERTICAL ,
02549             XmNmarginHeight, 0 ,
02550             XmNmarginWidth , 0 ,
02551             XmNpacking , XmPACK_TIGHT ,
02552             XmNtraversalOn , False ,
02553             XmNinitialResourcesPersistent , False ,
02554          NULL ) ;
02555 
02556    func->inten_label =
02557       XtVaCreateManagedWidget(
02558          "dialog" , xmLabelWidgetClass , func->inten_rowcol ,
02559             LABEL_ARG("Inten") ,
02560             XmNinitialResourcesPersistent , False ,
02561          NULL ) ;
02562 
02563    /**-- 17 Dec 1997: pbar menu hidden on the inten_label --**/
02564 
02565 #ifdef BAD_BUTTON3_POPUPS   /* 21 Jul 2003 */
02566    func->pbar_menu = XmCreatePopupMenu( func->inten_rowcol, "menu", NULL, 0 ) ;
02567 #else
02568    func->pbar_menu = XmCreatePopupMenu( func->inten_label , "menu", NULL, 0 ) ;
02569 #endif
02570 
02571    SAVEUNDERIZE(XtParent(func->pbar_menu)) ; /* 27 Feb 2001 */
02572 
02573    VISIBILIZE_WHEN_MAPPED(func->pbar_menu) ;
02574 
02575    XtInsertEventHandler( func->inten_label ,      /* handle events in label */
02576 
02577                                0
02578                              | ButtonPressMask   /* button presses */
02579                             ,
02580                             FALSE ,              /* nonmaskable events? */
02581                             AFNI_pbar_EV ,       /* handler */
02582                             (XtPointer) im3d ,   /* client data */
02583                             XtListTail           /* last in queue */
02584                           ) ;
02585 
02586 #if 0
02587    allow_MCW_optmenu_popup(0) ;  /* 12 Dec 2001 */
02588 #endif
02589 
02590    (void) XtVaCreateManagedWidget(
02591             "dialog" , xmLabelWidgetClass , func->pbar_menu ,
02592                LABEL_ARG("--- Cancel ---") ,
02593                XmNrecomputeSize , False ,
02594                XmNinitialResourcesPersistent , False ,
02595             NULL ) ;
02596 
02597    (void) XtVaCreateManagedWidget(
02598             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02599              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02600 
02601    /*--- environment button in menu [10 Feb 2004] ---*/
02602 
02603 #ifdef ALLOW_PLUGINS
02604    func->pbar_environment_pb =
02605       XtVaCreateManagedWidget(
02606          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02607             LABEL_ARG("Edit Environment") ,
02608             XmNmarginHeight , 0 ,
02609             XmNtraversalOn , False ,
02610             XmNinitialResourcesPersistent , False ,
02611          NULL ) ;
02612    XtAddCallback( func->pbar_environment_pb , XmNactivateCallback ,
02613                   AFNI_pbar_CB , im3d ) ;
02614 #else
02615    func->pbar_environment_pb = NULL ;
02616 #endif
02617 
02618    func->pbar_equalize_pb =
02619       XtVaCreateManagedWidget(
02620          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02621             LABEL_ARG("Equalize Spacing") ,
02622             XmNmarginHeight , 0 ,
02623             XmNtraversalOn , False ,
02624             XmNinitialResourcesPersistent , False ,
02625          NULL ) ;
02626 
02627    XtAddCallback( func->pbar_equalize_pb , XmNactivateCallback ,
02628                   AFNI_pbar_CB , im3d ) ;
02629 
02630    MCW_register_hint( func->pbar_equalize_pb , "Space separators equally" ) ;
02631 
02632    func->pbar_settop_pb =
02633       XtVaCreateManagedWidget(
02634          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02635             LABEL_ARG("Set Top Value") ,
02636             XmNmarginHeight , 0 ,
02637             XmNtraversalOn , False ,
02638             XmNinitialResourcesPersistent , False ,
02639          NULL ) ;
02640 
02641    XtAddCallback( func->pbar_settop_pb , XmNactivateCallback ,
02642                   AFNI_pbar_CB , im3d ) ;
02643 
02644    MCW_register_hint( func->pbar_settop_pb , "Is scaled by 'range' controls" ) ;
02645 
02646    (void) XtVaCreateManagedWidget(
02647             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02648              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02649 
02650    func->pbar_readin_pb =
02651       XtVaCreateManagedWidget(
02652          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02653             LABEL_ARG("Read in palette") ,
02654             XmNmarginHeight , 0 ,
02655             XmNtraversalOn , False ,
02656             XmNinitialResourcesPersistent , False ,
02657          NULL ) ;
02658 
02659    MCW_register_hint( func->pbar_readin_pb , "Read in a palette file" ) ;
02660 
02661    XtAddCallback( func->pbar_readin_pb , XmNactivateCallback ,
02662                   AFNI_pbar_CB , im3d ) ;
02663 
02664    func->pbar_writeout_pb =
02665       XtVaCreateManagedWidget(
02666          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02667             LABEL_ARG("Write out palette") ,
02668             XmNmarginHeight , 0 ,
02669             XmNtraversalOn , False ,
02670             XmNinitialResourcesPersistent , False ,
02671          NULL ) ;
02672 
02673    MCW_register_hint( func->pbar_writeout_pb ,
02674                       "Write out a palette file" ) ;
02675 
02676    XtAddCallback( func->pbar_writeout_pb , XmNactivateCallback ,
02677                   AFNI_pbar_CB , im3d ) ;
02678 
02679    /* 15 Jun 2000: image save button */
02680 
02681    func->pbar_saveim_pb =
02682       XtVaCreateManagedWidget(
02683          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02684             LABEL_ARG("Save to PPM") ,
02685             XmNmarginHeight , 0 ,
02686             XmNtraversalOn , False ,
02687             XmNinitialResourcesPersistent , False ,
02688          NULL ) ;
02689 
02690    MCW_register_hint( func->pbar_saveim_pb ,
02691                       "Write out as image file" );
02692 
02693    XtAddCallback( func->pbar_saveim_pb , XmNactivateCallback ,
02694                   AFNI_pbar_CB , im3d ) ;
02695 
02696    func->pbar_showtable_pb =
02697       XtVaCreateManagedWidget(
02698          "dialog" , xmPushButtonWidgetClass , func->pbar_menu ,
02699             LABEL_ARG("Show Palette Table") ,
02700             XmNmarginHeight , 0 ,
02701             XmNtraversalOn , False ,
02702             XmNinitialResourcesPersistent , False ,
02703          NULL ) ;
02704 
02705    XtAddCallback( func->pbar_showtable_pb , XmNactivateCallback ,
02706                   AFNI_pbar_CB , im3d ) ;
02707 
02708    MCW_register_hint( func->pbar_showtable_pb , "Will popup a listing window" ) ;
02709 
02710    (void) XtVaCreateManagedWidget(
02711             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02712              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02713 
02714    func->pbar_palette_av = new_MCW_arrowval(
02715                              func->pbar_menu ,     /* parent Widget */
02716                              "Set Pal " ,          /* label */
02717                              MCW_AV_optmenu ,      /* option menu style */
02718                              0 ,                   /* first option */
02719                              1 ,                   /* last option */
02720                              0 ,                   /* initial selection */
02721                              MCW_AV_readtext ,     /* ignored but needed */
02722                              0 ,                   /* ditto */
02723                              AFNI_palette_av_CB ,  /* callback when changed */
02724                              (XtPointer) im3d ,    /* data for above */
02725                              MCW_av_substring_CB , /* text creation routine */
02726                              AFNI_dummy_av_label   /* data for above */
02727                            ) ;
02728 
02729    MCW_reghint_children( func->pbar_palette_av->wrowcol , "Choose a palette" ) ;
02730 
02731    if( GPT != NULL && PALTAB_NUM(GPT) > 0 ){
02732       refit_MCW_optmenu( func->pbar_palette_av ,
02733                            0 ,                     /* new minval */
02734                            PALTAB_NUM(GPT)-1 ,     /* new maxval */
02735                            0 ,                     /* new inival */
02736                            0 ,                     /* new decim? */
02737                            AFNI_palette_label_CB , /* text routine */
02738                            NULL                    /* text data */
02739                         ) ;
02740    } else {
02741       XtUnmanageChild( func->pbar_palette_av->wrowcol ) ;
02742    }
02743 
02744    /*-- 15 Jun 2000: 0D func list --*/
02745 
02746    (void) XtVaCreateManagedWidget(
02747             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02748              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02749 
02750    func->pbar_transform0D_av = new_MCW_arrowval(
02751                              func->pbar_menu ,     /* parent Widget */
02752                              "Tran 0D " ,          /* label */
02753                              MCW_AV_optmenu ,      /* option menu style */
02754                              0 ,                   /* first option */
02755                              1 ,                   /* last option */
02756                              0 ,                   /* initial selection */
02757                              MCW_AV_readtext ,     /* ignored but needed */
02758                              0 ,                   /* ditto */
02759                              AFNI_palette_tran_CB, /* callback when changed */
02760                              (XtPointer) im3d ,    /* data for above */
02761                              MCW_av_substring_CB , /* text creation routine */
02762                              AFNI_dummy_av_label   /* data for above */
02763                            ) ;
02764 
02765    MCW_reghint_children( func->pbar_transform0D_av->wrowcol ,
02766                          "Transform overlay image values" ) ;
02767    XtUnmanageChild( func->pbar_transform0D_av->wrowcol ) ;
02768    func->pbar_transform0D_index = 0 ;
02769    func->pbar_transform0D_func  = NULL ;
02770 
02771    /*-- 16 Jun 2000: 2D func list --*/
02772 
02773    (void) XtVaCreateManagedWidget(
02774             "dialog" , xmSeparatorWidgetClass , func->pbar_menu ,
02775              XmNseparatorType , XmSINGLE_LINE , NULL ) ;
02776 
02777    func->pbar_transform2D_av = new_MCW_arrowval(
02778                              func->pbar_menu ,     /* parent Widget */
02779                              "Tran 2D " ,          /* label */
02780                              MCW_AV_optmenu ,      /* option menu style */
02781                              0 ,                   /* first option */
02782                              1 ,                   /* last option */
02783                              0 ,                   /* initial selection */
02784                              MCW_AV_readtext ,     /* ignored but needed */
02785                              0 ,                   /* ditto */
02786                              AFNI_palette_tran_CB, /* callback when changed */
02787                              (XtPointer) im3d ,    /* data for above */
02788                              MCW_av_substring_CB , /* text creation routine */
02789                              AFNI_dummy_av_label   /* data for above */
02790                            ) ;
02791 
02792    MCW_reghint_children( func->pbar_transform2D_av->wrowcol ,
02793                          "Transform overlay image values" ) ;
02794    XtUnmanageChild( func->pbar_transform2D_av->wrowcol ) ;
02795    func->pbar_transform2D_index = 0 ;
02796    func->pbar_transform2D_func  = NULL ;
02797 
02798 #if 0
02799    allow_MCW_optmenu_popup(1) ;  /* 12 Dec 2001 */
02800 #endif
02801 
02802    /**-- Color pbar to control intensity-to-color mapping --**/
02803 
02804    { float pmin , pmax ;  /* posfunc added 3/21/95 */
02805 
02806      pmax  = 1.0 ;
02807      pmin  = (im3d->vinfo->use_posfunc) ? (0.0) : (-1.0) ;
02808      npane = (im3d->vinfo->use_posfunc) ? INIT_panes_pos
02809                                         : INIT_panes_sgn ;
02810 
02811 #if 0
02812      sel_height -= (8+view_height/view_count) * 1 ; /* 1 = widgets below pbar */
02813 #else
02814      sel_height -= (8+view_height/view_count) * 0.5 ;
02815 #endif
02816 
02817      func->inten_pbar = new_MCW_pbar(
02818                           func->inten_rowcol ,        /* parent */
02819                           im3d->dc ,                  /* display */
02820                           npane ,                     /* number panes */
02821                           sel_height / npane ,        /* init pane height */
02822                           pmin , pmax ,               /* value range */
02823                           AFNI_inten_pbar_CB ,        /* callback */
02824                           (XtPointer) im3d    );      /* callback data */
02825 
02826      /* 04 Feb 2002: colorscale-ize? */
02827 
02828      if( im3d->dc->visual_class == TrueColor ){
02829        char *eee = getenv("AFNI_COLORSCALE_DEFAULT") ;
02830        if( eee == NULL ) eee = getenv("AFNI_COLOR_SCALE_DEFAULT") ;
02831        if( eee == NULL || strcmp(eee,"NO") != 0 ){
02832          PBAR_set_bigmode( func->inten_pbar , 1 , pmin,pmax ) ;
02833          PBAR_set_bigmap( func->inten_pbar , eee ) ;
02834        }
02835      }
02836    }
02837 
02838    func->inten_pbar->parent       = (XtPointer) im3d ;
02839    func->inten_pbar->mode         = (im3d->vinfo->use_posfunc) ? (1) : (0) ;
02840    func->inten_pbar->npan_save[0] = INIT_panes_sgn ;
02841    func->inten_pbar->npan_save[1] = INIT_panes_pos ;
02842    func->inten_pbar->hide_changes = INIT_panes_hide ;
02843 
02844    AFNI_setup_inten_pbar( im3d ) ;  /* other setup stuff (afni_func.c) */
02845 
02846    MCW_reghelp_children( func->inten_pbar->panew ,
02847       "Drag the separator bars to alter the thresholds.\n"
02848       "Click in a pane to alter the color for that range.\n\n"
02849       "The overlay dataset value that maps to 1.0 is\n"
02850       "determined by the 'autoRange' controls to the right.\n"
02851       "\n"
02852       "In 'continuous' colorscale mode, Button-1 click flips\n"
02853       "colors top-to-bottom;  Button-3 click shows a menu of\n"
02854       "available colorscales.\n"
02855    ) ;
02856 
02857    MCW_reghelp_children( func->inten_pbar->top ,
02858       "Drag the separator bars to alter the thresholds.\n"
02859       "Click in a pane to alter the color for that range.\n\n"
02860       "The overlay dataset value that maps to 1.0 is\n"
02861       "determined by the 'autoRange' controls to the right.\n"
02862       "\n"
02863       "In 'continuous' colorscale mode, Button-1 click flips\n"
02864       "colors top-to-bottom;  Button-3 click shows a menu of\n"
02865       "available colorscales.\n"
02866    ) ;
02867 
02868    MCW_register_help( func->inten_label ,
02869       "Drag the separator bars to alter the thresholds.\n"
02870       "Click in a pane to alter the color for that range.\n\n"
02871       "The overlay dataset value that maps to 1.0 is\n"
02872       "determined by the 'autoRange' controls to the right.\n\n"
02873       "N.B.: A popup menu to control the palette\n"
02874       "      setup is 'hidden' under this label."
02875    ) ;
02876 
02877    MCW_register_hint( func->inten_label ,
02878                       "Control overlay colors" ) ;
02879 
02880    (void) XtVaCreateManagedWidget(
02881             "dialog" , xmSeparatorWidgetClass , func->inten_rowcol ,
02882                 XmNseparatorType , XmSINGLE_LINE ,
02883             NULL ) ;
02884 
02885    func->inten_av = new_MCW_arrowval(
02886                        func->inten_rowcol ,
02887                         "#" ,
02888                         AVOPT_STYLE ,
02889                         NPANE_MIN , NPANE_MAX+1 ,
02890                         (func->inten_pbar->bigmode) ? NPANE_MAX+1 : npane ,
02891                         MCW_AV_notext , 0 ,
02892                         AFNI_inten_av_CB , func->inten_pbar ,
02893                         AFNI_inten_av_texter,NULL ) ;
02894 
02895    if( AVOPT_STYLE == MCW_AV_optmenu )
02896       AVOPT_columnize( func->inten_av , 2 ) ;
02897 
02898    func->inten_av->fastdelay  = 4000 ;  /* slow down repeat action */
02899    func->inten_av->parent     = im3d ;  /* Daddy! */
02900    func->inten_av->allow_wrap = 1 ;
02901 
02902    MCW_reghelp_children( func->inten_av->wrowcol ,
02903      "Controls the number of panes\n"
02904      "in the intensity color/threshold\n"
02905      "selector above (the 'pbar')"
02906    ) ;
02907    MCW_reghint_children( func->inten_av->wrowcol ,
02908                          "Number of color panes" ) ;
02909 
02910    /*--- toggle button to control posfunc option for pbar ---*/
02911 
02912    func->inten_bbox =
02913       new_MCW_bbox( func->inten_rowcol ,
02914                     1 , AFNI_inten_bbox_label ,
02915                     MCW_BB_check ,
02916                     MCW_BB_noframe ,
02917                     AFNI_inten_bbox_CB , (XtPointer) im3d ) ;
02918 
02919    func->inten_bbox->parent = (XtPointer) im3d ;
02920 
02921    MCW_set_bbox( func->inten_bbox ,
02922                  (im3d->vinfo->use_posfunc) ? (1) : (0) ) ;
02923 
02924    MCW_reghelp_children( func->inten_bbox->wrowcol ,
02925                          "Pressed In: Displays only positive overlay\n"
02926                          "            values in the 'pbar' above and\n"
02927                          "            in the color overlays.\n"
02928                          "       Out: Displays positive and negative\n"
02929                          "            overlay values.\n\n"
02930                          "N.B.: Zero overlay values are never overlaid." ) ;
02931    MCW_reghint_children( func->inten_bbox->wrowcol ,
02932                          "Use positive-only or signed overlay values" ) ;
02933 
02934    ADDTO_KILL(im3d->kl,func->inten_bbox) ;
02935 
02936    /*-- options controls --*/
02937 
02938    func->options_rowcol =
02939       XtVaCreateWidget(
02940          "dialog" , xmRowColumnWidgetClass , func->rowcol ,
02941             XmNorientation , XmVERTICAL ,
02942             XmNpacking , XmPACK_TIGHT ,
02943             XmNmarginHeight, 0 ,
02944             XmNmarginWidth , 0 ,
02945             XmNtraversalOn , False ,
02946             XmNinitialResourcesPersistent , False ,
02947          NULL ) ;
02948 
02949    func->options_label =
02950       XtVaCreateManagedWidget(
02951          "dialog" , xmLabelWidgetClass , func->options_rowcol ,
02952             LABEL_ARG("Options") ,
02953             XmNinitialResourcesPersistent , False ,
02954          NULL ) ;
02955 
02956    /*-- underlay type --*/
02957 
02958    func->underlay_bbox =
02959       new_MCW_bbox( func->options_rowcol ,
02960                     LAST_UNDERLAY_TYPE+1 , UNDERLAY_typestr ,
02961                     MCW_BB_radio_one ,
02962                     MCW_BB_frame ,
02963                     AFNI_underlay_CB , (XtPointer) im3d ) ;
02964 
02965    func->underlay_bbox->parent = (XtPointer) im3d ;
02966 
02967    MCW_set_bbox( func->underlay_bbox , 1 << im3d->vinfo->underlay_type ) ;
02968 
02969    MCW_reghelp_children( func->underlay_bbox->wrowcol ,
02970       "Use these buttons to choose\n"
02971       "whether the underlay or\n"
02972       "overlay images appear\n"
02973       "as the background display" ) ;
02974 
02975    { char * hh[] = { "Use underlay dataset for background" ,
02976                      "Use overlay dataset for background" ,
02977                      "Use thresholded overlay dataset for background" } ;
02978      MCW_bbox_hints( func->underlay_bbox , 3 , hh ) ;
02979    }
02980 
02981    ADDTO_KILL(im3d->kl,func->underlay_bbox) ;
02982 
02983    /*--- 30 Nov 1997: bucket managers ---*/
02984 
02985    func->buck_frame =
02986       XtVaCreateWidget(
02987          "dialog" , xmFrameWidgetClass , func->options_rowcol ,
02988             XmNshadowType , XmSHADOW_ETCHED_IN ,
02989             XmNshadowThickness , 2 ,
02990             XmNtraversalOn , False ,
02991             XmNinitialResourcesPersistent , False ,
02992          NULL ) ;
02993 
02994    func->buck_rowcol =
02995       XtVaCreateWidget(
02996          "dialog" , xmRowColumnWidgetClass , func->buck_frame ,
02997             XmNorientation , XmVERTICAL ,
02998             XmNpacking , XmPACK_TIGHT ,
02999             XmNtraversalOn , False ,
03000             XmNinitialResourcesPersistent , False ,
03001          NULL ) ;
03002 
03003    /*--- 30 Nov 1997: anatomy bucket arrowval ---*/
03004    /*    (Actual labels are set when used)       */
03005 
03006    func->anat_buck_av = new_MCW_arrowval(
03007                           func->buck_rowcol    ,  /* parent Widget */
03008                           "ULay" ,                /* label */
03009                           MCW_AV_optmenu ,        /* option menu style */
03010                           0 ,                     /* first option */
03011                           1 ,                     /* last option */
03012                           0 ,                     /* initial selection */
03013                           MCW_AV_readtext ,       /* ignored but needed */
03014                           0 ,                     /* ditto */
03015                           AFNI_bucket_CB ,        /* callback when changed */
03016                           (XtPointer) im3d ,      /* data for above */
03017                           MCW_av_substring_CB ,   /* text creation routine */
03018                           AFNI_dummy_av_label     /* data for above */
03019                         ) ;
03020 
03021    func->anat_buck_av->parent     = (XtPointer) im3d ;
03022    func->anat_buck_av->allow_wrap = True ;
03023 
03024    MCW_reghelp_children( func->anat_buck_av->wrowcol ,
03025                          "Use this to choose which\n"
03026                          "sub-brick of the overlay\n"
03027                          "dataset to display (='ULay').\n"
03028                          "(The sub-brick labels are\n"
03029                          " assigned when the dataset\n"
03030                          " is created.  The [index]\n"
03031                          " values show the numerical\n"
03032                          " location of the sub-brick\n"
03033                          " in the dataset.)"           ) ;
03034    MCW_reghint_children( func->anat_buck_av->wrowcol ,
03035                          "Choose UnderLay sub-brick" ) ;
03036 
03037    ADDTO_KILL(im3d->kl,func->anat_buck_av) ;
03038 
03039    XtUnmanageChild( func->anat_buck_av->wrowcol ) ;
03040 
03041    /*--- 30 Nov 1997: function bucket arrowval ---*/
03042 
03043    func->fim_buck_av = new_MCW_arrowval(
03044                           func->buck_rowcol    ,  /* parent Widget */
03045                           "OLay" ,                /* label */
03046                           MCW_AV_optmenu ,        /* option menu style */
03047                           0 ,                     /* first option */
03048                           1 ,                     /* last option */
03049                           0 ,                     /* initial selection */
03050                           MCW_AV_readtext ,       /* ignored but needed */
03051                           0 ,                     /* ditto */
03052                           AFNI_bucket_CB ,        /* callback when changed */
03053                           (XtPointer) im3d ,      /* data for above */
03054                           MCW_av_substring_CB ,   /* text creation routine */
03055                           AFNI_dummy_av_label     /* data for above */
03056                         ) ;
03057 
03058    func->fim_buck_av->parent     = (XtPointer) im3d ;
03059    func->fim_buck_av->allow_wrap = True ;
03060 
03061    MCW_reghelp_children( func->fim_buck_av->wrowcol ,
03062                          "Use this to choose which\n"
03063                          "sub-brick of the overlay\n"
03064                          "dataset to display (='OLay').\n"
03065                          "(The sub-brick labels are\n"
03066                          " assigned when the dataset\n"
03067                          " is created.  The [index]\n"
03068                          " values show the numerical\n"
03069                          " location of the sub-brick\n"
03070                          " in the dataset.)"           ) ;
03071    MCW_reghint_children( func->fim_buck_av->wrowcol ,
03072                          "Choose overlay sub-brick" ) ;
03073 
03074    ADDTO_KILL(im3d->kl,func->fim_buck_av) ;
03075 
03076    XtUnmanageChild( func->fim_buck_av->wrowcol ) ;
03077 
03078    /*--- 30 Nov 1997: threshold bucket arrowval ---*/
03079 
03080    func->thr_buck_av = new_MCW_arrowval(
03081                           func->buck_rowcol    ,  /* parent Widget */
03082                           "Thr " ,                /* label */
03083                           MCW_AV_optmenu ,        /* option menu style */
03084                           0 ,                     /* first option */
03085                           1 ,                     /* last option */
03086                           0 ,                     /* initial selection */
03087                           MCW_AV_readtext ,       /* ignored but needed */
03088                           0 ,                     /* ditto */
03089                           AFNI_bucket_CB ,        /* callback when changed */
03090                           (XtPointer) im3d ,      /* data for above */
03091                           MCW_av_substring_CB ,   /* text creation routine */
03092                           AFNI_dummy_av_label     /* data for above */
03093                         ) ;
03094 
03095    func->thr_buck_av->parent     = (XtPointer) im3d ;
03096    func->thr_buck_av->allow_wrap = True ;
03097 
03098    MCW_reghelp_children( func->thr_buck_av->wrowcol ,
03099                          "Use this to choose which\n"
03100                          "sub-brick of the overlay\n"
03101                          "dataset with which to threshold\n"
03102                          "the OLay sub-brick (='Thr').\n"
03103                          "(The sub-brick labels are\n"
03104                          " assigned when the dataset\n"
03105                          " is created.  The [index]\n"
03106                          " values show the numerical\n"
03107                          " location of the sub-brick\n"
03108                          " in the dataset.)"           ) ;
03109    MCW_reghint_children( func->thr_buck_av->wrowcol ,
03110                          "Choose Thr sub-brick" ) ;
03111 
03112    ADDTO_KILL(im3d->kl,func->thr_buck_av) ;
03113 
03114    XtUnmanageChild( func->thr_buck_av->wrowcol ) ;
03115 
03116    /*--- range controls ---*/
03117 
03118    func->range_frame =
03119       XtVaCreateManagedWidget(
03120          "dialog" , xmFrameWidgetClass , func->options_rowcol ,
03121             XmNshadowType , XmSHADOW_ETCHED_IN ,
03122             XmNshadowThickness , 2 ,
03123             XmNtraversalOn , False ,
03124             XmNinitialResourcesPersistent , False ,
03125          NULL ) ;
03126 
03127    func->range_rowcol =
03128       XtVaCreateWidget(
03129          "dialog" , xmRowColumnWidgetClass , func->range_frame ,
03130             XmNorientation , XmVERTICAL ,
03131             XmNpacking , XmPACK_TIGHT ,
03132             XmNtraversalOn , False ,
03133             XmNinitialResourcesPersistent , False ,
03134          NULL ) ;
03135 
03136    /*--- label to show the ranges ---*/
03137 
03138    im3d->vinfo->old_range_label = xstr = AFNI_range_label( NULL ) ;
03139 
03140    func->range_label =
03141       XtVaCreateManagedWidget(
03142          "dialog" , xmLabelWidgetClass , func->range_rowcol ,
03143             XmNrecomputeSize , False ,
03144             XmNlabelString , xstr ,
03145             XmNtraversalOn , False ,
03146             XmNinitialResourcesPersistent , False ,
03147          NULL ) ;
03148 
03149    MCW_register_help( func->range_label ,
03150                         "These are the range of values in the\n"
03151                         "UnderLay and OverLay 3D datasets.\n"
03152                         "The overlay values may be useful\n"
03153                         "for choosing the Range for the pbar.\n"
03154                         "[If a dataset is warped from a\n"
03155                         " 'parent', these statistics are\n"
03156                         " taken from the parent dataset.]"   ) ;
03157 
03158    MCW_register_hint( func->range_label , "Ranges of dataset values" ) ;
03159 
03160    /*--- toggle button to control automatic range scaling for pbar ---*/
03161 
03162    im3d->vinfo->autorange_label =
03163       XmStringCreateLtoR( AFNI_range_bbox_label[0] , XmFONTLIST_DEFAULT_TAG ) ;
03164 
03165    func->range_bbox =
03166       new_MCW_bbox( func->range_rowcol ,
03167                     1 , AFNI_range_bbox_label ,
03168                     MCW_BB_check ,
03169                     MCW_BB_noframe ,
03170                     AFNI_range_bbox_CB , (XtPointer) im3d ) ;
03171 
03172    func->range_bbox->parent = (XtPointer) im3d ;
03173 
03174    MCW_set_bbox( func->range_bbox ,
03175                  (im3d->vinfo->use_autorange) ? (1) : (0) ) ;
03176 
03177    MCW_reghelp_children( func->range_bbox->wrowcol ,
03178                          "This button determines whether the program\n"
03179                          "or the user sets the OLay value that maps\n"
03180                          "to the color pbar level 1.0:\n\n"
03181                          "Pressed In: use 'autoRange' value for pbar 1.0\n"
03182                          "       Out: user controls Range value (below)"
03183                        ) ;
03184    MCW_reghint_children( func->range_bbox->wrowcol ,
03185                          "Automatic or user-controlled color range scaling" ) ;
03186 
03187    ADDTO_KILL(im3d->kl,func->range_bbox) ;
03188 
03189    /*--- 30 Mar 2001: put the next 2 things in a horizontal rowcol ---*/
03190 
03191    hrc = XtVaCreateWidget(
03192          "dialog" , xmRowColumnWidgetClass , func->range_rowcol ,
03193             XmNorientation , XmHORIZONTAL ,
03194             XmNpacking , XmPACK_TIGHT ,
03195             XmNtraversalOn , False ,
03196             XmNinitialResourcesPersistent , False ,
03197          NULL ) ;
03198 
03199    /*--- arrowval to provide user control for pbar scaling ---*/
03200 
03201    func->range_av =
03202       new_MCW_arrowval(
03203          hrc ,                             /* parent */
03204          NULL ,                            /* label */
03205          MCW_AV_downup ,                   /* arrow directions */
03206          0  ,                              /* min value */
03207          9999999 ,                         /* max value */
03208          (int) (im3d->vinfo->fim_range) ,  /* init value */
03209          MCW_AV_editext ,                  /* input/output text display */
03210          0 ,                               /* decimal shift */
03211          AFNI_range_av_CB ,                /* routine to call when button */
03212          (XtPointer) im3d ,                /* is pressed, and its data */
03213          NULL,NULL                         /* no special display */
03214       ) ;
03215 
03216    func->range_av->parent = (XtPointer) im3d ;
03217 
03218    MCW_reghelp_children( func->range_av->wrowcol ,
03219                          "When the autoRange button above is Out, this\n"
03220                          "selector is used to set the OLay level which\n"
03221                          "maps to 1.0 on the color pbar."
03222                        ) ;
03223    MCW_reghint_children( func->range_av->wrowcol ,
03224                          "OLay value that maps to 1.0 for color overlay" ) ;
03225 
03226    ADDTO_KILL(im3d->kl,func->range_av) ;
03227 
03228    AV_SENSITIZE( func->range_av , ! im3d->vinfo->use_autorange ) ;
03229 
03230    /*--- 30 Mar 2001: rotate pbar ---*/
03231 
03232    func->range_rotate_av = new_MCW_arrowval(
03233                              hrc , "Rota" ,
03234                              MCW_AV_downup , 0,0,0 ,
03235                              MCW_AV_notext , 0 ,
03236                              AFNI_range_rotate_av_CB , (XtPointer) func->inten_pbar ,
03237                              NULL,NULL ) ;
03238 
03239    func->range_rotate_av->parent = (XtPointer) im3d ;
03240 
03241    MCW_reghelp_children( func->range_rotate_av->wrowcol ,
03242                          "Rotate the colors on\n"
03243                          "the 'pbar' up or down.\n"
03244                          "[Press with Shift  to]\n"
03245                          "[rotate in steps of 4]"  ) ;
03246    MCW_reghint_children( func->range_rotate_av->wrowcol ,
03247                          "Rotate pbar colors" ) ;
03248 
03249    ADDTO_KILL(im3d->kl,func->range_rotate_av) ;
03250 
03251    XtManageChild( hrc ) ;
03252 
03253 #ifdef USE_FUNC_FIM
03254    /*--- fim execution controls ---*/
03255 
03256    func->fim_frame =
03257       XtVaCreateManagedWidget(
03258          "dialog" , xmFrameWidgetClass , func->options_rowcol ,
03259             XmNshadowType , XmSHADOW_ETCHED_IN ,
03260             XmNshadowThickness , 2 ,
03261             XmNtraversalOn , False ,
03262             XmNinitialResourcesPersistent , False ,
03263          NULL ) ;
03264 
03265    func->fim_rowcol =
03266       XtVaCreateWidget(
03267          "dialog" , xmRowColumnWidgetClass , func->fim_frame ,
03268             XmNorientation , XmHORIZONTAL ,
03269             XmNpacking , XmPACK_TIGHT ,
03270             XmNtraversalOn , False ,
03271             XmNinitialResourcesPersistent , False ,
03272          NULL ) ;
03273 
03274    func->fim_mbar =
03275          XmCreateMenuBar( func->fim_rowcol, "dialog" , NULL,0 ) ;
03276    XtVaSetValues( func->fim_mbar ,
03277                      XmNmarginWidth  , 0 ,
03278                      XmNmarginHeight , 0 ,
03279                      XmNspacing      , 3 ,
03280                      XmNborderWidth  , 0 ,
03281                      XmNtraversalOn  , False ,
03282                   NULL ) ;
03283    XtManageChild( func->fim_mbar ) ;
03284 
03285    func->fim_menu = AFNI_new_fim_menu( func->fim_mbar , AFNI_fimmer_menu_CB , 0 ) ;
03286    func->fim_menu->parent = (XtPointer) im3d ;
03287 
03288    xstr = XmStringCreateLtoR("1234567890123456789",XmFONTLIST_DEFAULT_TAG );
03289    func->fim_dset_label =
03290       XtVaCreateManagedWidget(
03291          "dialog" , xmLabelWidgetClass , func->fim_rowcol ,
03292             XmNrecomputeSize , False ,
03293             XmNlabelString , xstr ,
03294             XmNtraversalOn , False ,
03295             XmNinitialResourcesPersistent , False ,
03296          NULL ) ;
03297    XmStringFree(xstr) ;
03298    MCW_register_help( func->fim_dset_label ,
03299          "Shows the name of the\n"
03300          "dataset for which FIM\n"
03301          "is currently set up."
03302    ) ;
03303    MCW_register_hint( func->fim_dset_label , "Dataset to be FIM-ed") ;
03304 #endif
03305 
03306    /* 25 Jul 2001: a toggle box to show the TT Atlas */
03307 
03308    { char *see_ttatlas_label[1] = { "See TT Atlas Regions" } ;
03309      func->see_ttatlas_bbox =
03310       new_MCW_bbox( func->options_rowcol ,
03311                     1 , see_ttatlas_label ,
03312                     MCW_BB_check ,
03313                     MCW_BB_frame ,
03314                     AFNI_see_ttatlas_CB , (XtPointer) im3d ) ;
03315 
03316      func->see_ttatlas_bbox->parent = (XtPointer) im3d ;
03317 
03318      MCW_set_bbox( func->see_ttatlas_bbox ,
03319                    (im3d->vinfo->see_ttatlas) ? (1) : (0) ) ;
03320 
03321      MCW_reghelp_children( func->see_ttatlas_bbox->wrowcol ,
03322                            "This button determines whether to show\n"
03323                            "the Talairach-Tournoux Atlas regions,\n"
03324                            "which are controlled by the 'Atlas Colors'\n"
03325                            "item on the image viewing window popup menu."
03326                          ) ;
03327      MCW_reghint_children( func->see_ttatlas_bbox->wrowcol ,
03328                            "Use 'Atlas Colors' from image popup menu" ) ;
03329 
03330      ADDTO_KILL(im3d->kl,func->see_ttatlas_bbox) ;
03331    }
03332 
03333    xstr = XmStringCreateLtoR( "ULay = xxxxxxxxxxxxxxxx\n"
03334                               "OLay = xxxxxxxxxxxxxxxx\n"
03335                               "Thr  = xxxxxxxxxxxxxxxx" ,
03336                             XmFONTLIST_DEFAULT_TAG ) ;
03337 
03338    func->bkgd_lab =
03339       XtVaCreateWidget(
03340          "dialog" , xmLabelWidgetClass , func->options_rowcol ,
03341             XmNrecomputeSize , False ,
03342             XmNlabelString , xstr ,
03343             XmNmarginHeight, 0 ,
03344             XmNtraversalOn , False ,
03345             XmNinitialResourcesPersistent , False ,
03346          NULL ) ;
03347    XmStringFree( xstr ) ;
03348 
03349    im3d->vinfo->anat_val[0] =
03350     im3d->vinfo->func_val[0] =
03351      im3d->vinfo->thr_val[0]  = '\0' ;
03352 
03353    MCW_register_help( func->bkgd_lab ,
03354                       "Shows the values at the\n"
03355                       "current crosshair voxel.\n"
03356                       "\n"
03357                       "N.B.: Is only active when\n"
03358                       " all 3 image windows are\n"
03359                       " open!"
03360                     ) ;
03361    MCW_register_hint( func->bkgd_lab , "Values at crosshairs voxel" ) ;
03362 
03363    /*-- manage the managers --*/
03364 
03365    XtManageChild( func->thr_rowcol ) ;
03366    XtManageChild( func->inten_rowcol ) ;
03367    XtManageChild( func->range_rowcol ) ;
03368    XtManageChild( func->options_rowcol ) ;
03369 #ifdef USE_FUNC_FIM
03370    XtManageChild( func->fim_rowcol ) ;
03371 #endif
03372    XtManageChild( func->rowcol ) ;
03373 
03374    EXRETURN ;
03375 }
03376 
03377 /*--------------------------------------------------------------------*/
03378 
03379 void AFNI_make_wid3( Three_D_View * im3d )
03380 {

void AFNI_misc_button Three_D_View   im3d
 

Definition at line 7905 of file afni_widg.c.

void AFNI_popup_message char *    str
 

Popup a message, somewhere, anywhere [05 Mar 2002]. ---------------------------------------------------------------------

Definition at line 7190 of file afni_widg.c.

Referenced by AFNI_process_NIML_data(), process_NIML_AFNI_dataset(), process_NIML_Node_ROI(), process_NIML_SUMA_ijk(), process_NIML_SUMA_ixyz(), and process_NIML_SUMA_node_normals().

void AFNI_raiseup_CB Widget    w,
XtPointer    cd,
XtPointer    cb
 

"AFNI Version Check!" logo *

Definition at line 3384 of file afni_widg.c.

03415    { char * hh[] = { "View data direct from brick" ,

float DSET_bigness THD_3dim_dataset   dset [static]
 

June 1996: stuff for interactive FIM *

Definition at line 7399 of file afni_widg.c.

Three_D_View* new_AFNI_controller Widget    shell,
MCW_DC   dc,
int    im3d_type
 

Definition at line 7233 of file afni_widg.c.

Referenced by MAIN_workprocess().


Variable Documentation

char* AFNI_anatmode_bbox_label[2] [static]
 

Initial value:

   { "View ULay Data Brick" , "Warp ULay on Demand" }

Definition at line 113 of file afni_widg.c.

Referenced by AFNI_make_wid1().

char* AFNI_crosshair_av_label[9] [static]
 

Initial value:

 {  
    "Off"   , "Single" , "Multi" ,
    " LR+AP", " LR+IS" , " AP+IS",
    "  LR"  , "  AP"   , "  IS"    }

Definition at line 78 of file afni_widg.c.

char* AFNI_dummy_av_label[2] = { "Nothing 1" , "Nothing 2" } [static]
 

Definition at line 76 of file afni_widg.c.

char* AFNI_funcmode_bbox_label[2] [static]
 

Initial value:

   { "View OLay Data Brick" , "Warp OLay on Demand" }

Definition at line 116 of file afni_widg.c.

char* AFNI_inten_bbox_label[1] = { "Pos?" } [static]
 

Definition at line 94 of file afni_widg.c.

char* AFNI_marks_edits_bbox_label[1] = { "Allow edits" } [static]
 

Definition at line 90 of file afni_widg.c.

char* AFNI_range_bbox_label[1] = { "autoRange:xxxxxxxxx" } [static]
 

Definition at line 92 of file afni_widg.c.

char* AFNI_see_func_bbox_label[1] = { "See OverLay" } [static]
 

Definition at line 85 of file afni_widg.c.

char* AFNI_see_marks_bbox_label[1] = { "See Markers" } [static]
 

Definition at line 83 of file afni_widg.c.

char* AFNI_tlrc_big_bbox_label[1] = { "Big Talairach Box?" } [static]
 

Definition at line 96 of file afni_widg.c.

char* AFNI_wrap_bbox_label[1] = {"Wrap"} [static]
 

Definition at line 87 of file afni_widg.c.

char* AFNI_xhall_bbox_label[1] = {"X+"} [static]
 

Definition at line 88 of file afni_widg.c.

int cii_override = -1 [static]
 

set various widgets and values *

Definition at line 7585 of file afni_widg.c.

AFNI_datamode_widgets* dmode [static]
 

Definition at line 298 of file afni_widg.c.

AFNI_function_widgets* func [static]
 

Definition at line 296 of file afni_widg.c.

int id [static]
 

Definition at line 303 of file afni_widg.c.

AFNI_imaging_widgets* imag [static]
 

Definition at line 293 of file afni_widg.c.

int last_color [static]
 

Definition at line 303 of file afni_widg.c.

Referenced by AFNI_make_wid2(), and AFNI_make_widgets().

AFNI_marks_widgets* marks [static]
 

Definition at line 295 of file afni_widg.c.

int npane [static]
 

Definition at line 303 of file afni_widg.c.

int num_entry = 0 [static]
 

Definition at line 65 of file afni_widg.c.

Referenced by AFNI_make_widgets().

AFNI_program_widgets* prog [static]
 

Definition at line 297 of file afni_widg.c.

int sel_height [static]
 

Definition at line 303 of file afni_widg.c.

char str[256] [static]
 

Definition at line 302 of file afni_widg.c.

AFNI_viewing_widgets* view [static]
 

Definition at line 294 of file afni_widg.c.

int view_count [static]
 

Definition at line 303 of file afni_widg.c.

int view_height [static]
 

Definition at line 303 of file afni_widg.c.

AFNI_widget_set* vwid [static]
 

Definition at line 292 of file afni_widg.c.

XmFontList xflist [static]
 

Definition at line 301 of file afni_widg.c.

XmString xstr [static]
 

Definition at line 300 of file afni_widg.c.

 

Powered by Plone

This site conforms to the following standards: