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  

bbox.h

Go to the documentation of this file.
00001 /*****************************************************************************
00002    Major portions of this software are copyrighted by the Medical College
00003    of Wisconsin, 1994-2000, and are released under the Gnu General Public
00004    License, Version 2.  See the file README.Copyright for details.
00005 ******************************************************************************/
00006 
00007 #ifndef _MCW_BBOX_HEADER_
00008 #define _MCW_BBOX_HEADER_
00009 
00010 #include <Xm/XmAll.h>
00011 
00012 #undef USE_TEXT_WIDGET
00013 
00014 #ifdef USE_TEXT_WIDGET
00015 #  define TEXT_CLASS xmTextWidgetClass
00016 #  define TEXT_GET   XmTextGetString
00017 #  define TEXT_SET   XmTextSetString
00018 #else
00019 #  define TEXT_CLASS xmTextFieldWidgetClass
00020 #  define TEXT_GET   XmTextFieldGetString
00021 #  define TEXT_SET   XmTextFieldSetString
00022 #endif
00023 
00024 #define LIST_MAX    25
00025 #define LIST_MAXMAX 29
00026 
00027 #include <stdio.h>
00028 #include <string.h>
00029 #include <math.h>
00030 
00031 #include "display.h"
00032 #include "xutil.h"
00033 #include "mrilib.h"
00034 
00035 #ifndef LABEL_ARG
00036 #define LABEL_ARG(str) \
00037   XtVaTypedArg , XmNlabelString , XmRString , (str) , strlen(str)+1
00038 #endif
00039 
00040 /*---------------------------------------------------------------------------------*/
00041 
00042 #define MCW_BB_noframe 0
00043 #define MCW_BB_frame   1
00044 
00045 #define MCW_BB_check      1
00046 #define MCW_BB_radio_one  2
00047 #define MCW_BB_radio_zero 3
00048 
00049 #define MCW_MAX_BB 16
00050 
00051 typedef struct {
00052           Widget wframe , wrowcol ; /* Frame (if any) & RowColumn holder */
00053           Widget wtop ;             /* topmost widget (=wframe or wrowcol) */
00054           int    nbut ;             /* number of buttons */
00055           Widget wbut[MCW_MAX_BB] ; /* array of ToggleButtonWidget */
00056           int    value ;            /* OR-ed mask of set buttons */
00057 
00058           XtPointer parent , aux ;
00059 } MCW_bbox ;
00060 
00061 /*** prototypes ***/
00062 
00063 extern MCW_bbox * new_MCW_bbox( Widget , int , char * lab[] , int , int ,
00064                                 XtCallbackProc , XtPointer ) ;
00065 
00066 extern void MCW_set_bbox( MCW_bbox * , int ) ;
00067 extern int  MCW_val_bbox( MCW_bbox * ) ;
00068 extern void MCW_bbox_hints( MCW_bbox * , int , char ** ) ;
00069 
00070 /*---------------------------------------------------------------------------------*/
00071 /***--- for arrowval ---***/
00072 
00073 #ifndef VOID_FUNC
00074 #define VOID_FUNC
00075 typedef void void_func() ;
00076 #endif
00077 
00078 typedef void gen_func() ;   /* generic functions */
00079 typedef char * str_func() ;
00080 
00081 typedef struct {
00082       Widget wrowcol ,                   /* Container */
00083              wlabel , wdown,wup , wtext ;/* left-to-right widgets */
00084 
00085       Widget wmenu ;                     /* for optmenu style only! */
00086       int block_assign_actions ;
00087 
00088       int ival , imin,imax , decimals ;  /* value, min & max, decim shift */
00089       float fval , fmin,fmax ;           /* float values (includes decim) */
00090 
00091       char * sval ;        /* current string value from TextField */
00092 
00093       int old_ival ;       /* values just before the last change */
00094       float old_fval ;
00095       char  * old_sval ;
00096 
00097       XtIntervalId timer_id ; /* id from XtAppAddTimeOut */
00098 
00099       gen_func * dval_CB ; /* non-NULL=function to call when value changes */
00100       XtPointer dval_data ;   /* data for call */
00101 
00102       str_func * text_CB ; /* if non-NULL, function to call to make text */
00103       XtPointer  text_data ;
00104 
00105       int incr , delay , fastdelay  ;  /* for the timer callback */
00106       int allow_wrap ;
00107 
00108       XEvent xev ;                     /* copy of event in callback */
00109 
00110       XtPointer parent , aux ;
00111 
00112       float fstep ;  /* 16 Feb 1999 */
00113 } MCW_arrowval ;
00114 
00115 /* 08 Mar 1999: this macro is defined
00116                 because I forget to free the string values (sval) */
00117 
00118 #define FREE_AV(av) do{ if( (av) != NULL ){                              \
00119                            XtFree((av)->sval) ; XtFree((av)->old_sval) ; \
00120                            XtFree((char*)(av)) ; (av) = NULL ;           \
00121                         }} while(0)
00122 
00123 #define MCW_AV_downup    1
00124 #define MCW_AV_leftright 2
00125 #define MCW_AV_optmenu   3
00126 #define MCW_AV_notext    11
00127 #define MCW_AV_editext   12
00128 #define MCW_AV_edittext  12
00129 #define MCW_AV_readtext  13
00130 #define MCW_AV_noactext  14     /* Feb 1999 */
00131 
00132 #define MCW_AV_longdelay  1000
00133 #define MCW_AV_shortdelay 111
00134 
00135 #define AV_NCOL           9     /* # columns visible */
00136 #define AV_MAXLEN         120   /* Feb 1999 */
00137 
00138 #define AVOPT_columnize(av,nc)                                 \
00139   do{ if( (av)!= NULL && (av)->wmenu != NULL && (nc) > 0 )     \
00140         XtVaSetValues( (av)->wmenu, XmNpacking,XmPACK_COLUMN , \
00141                         XmNnumColumns,(nc), NULL ) ; } while(0)
00142 
00143 extern int AV_colsize() ;  /* 11 Dec 2001 */
00144 
00145 extern MCW_arrowval * new_MCW_optmenu( Widget , char * ,
00146                                        int,int,int,int,
00147                                        gen_func * , XtPointer ,
00148                                        str_func * , XtPointer ) ;
00149 
00150 extern void refit_MCW_optmenu( MCW_arrowval * ,
00151                                int,int,int,int,
00152                                str_func * , XtPointer ) ;
00153 
00154 extern void allow_MCW_optmenu_popup(int) ;  /* 12 Dec 2001 */
00155 
00156 extern MCW_arrowval * new_MCW_colormenu( Widget , char * label , MCW_DC * ,
00157                                          int , int , int ,
00158                                          gen_func * , XtPointer ) ;
00159 
00160 extern MCW_arrowval * new_MCW_arrowval( Widget , char * ,
00161                                         int,int,int,int,int,int ,
00162                                         gen_func * , XtPointer ,
00163                                         str_func * , XtPointer ) ;
00164 
00165 extern void AV_press_CB( Widget , XtPointer , XtPointer ) ;
00166 extern void AVOPT_press_CB( Widget , XtPointer , XtPointer ) ;
00167 extern void AV_timer_CB( XtPointer , XtIntervalId * ) ;
00168 extern void AV_assign_ival( MCW_arrowval * , int ) ;
00169 extern void AV_assign_fval( MCW_arrowval * , float ) ;
00170 extern void AV_textact_CB( Widget , XtPointer , XtPointer ) ;
00171 
00172 extern void AV_leave_EV( Widget , XtPointer , XEvent * , Boolean * ) ;
00173 
00174 char * AV_default_text_CB( MCW_arrowval * , XtPointer ) ;
00175 
00176 extern void AV_fval_to_char( float , char * ) ;
00177 extern char * AV_format_fval( float ) ;   /* 12 Jul 1999 */
00178 extern char * AV_uformat_fval( float ) ;  /* 22 Jan 2003 */
00179 
00180 extern char * MCW_av_substring_CB( MCW_arrowval * , XtPointer ) ;
00181 
00182 /* macro to shift a value so many decimal points to the left */
00183 
00184 #define AV_SHIFT_VAL(decim,sv)                                 \
00185    { int iqqq ;                                                \
00186      if( (decim) > 0 )                                         \
00187         for( iqqq=0 ; iqqq < (decim) ; iqqq++ ) (sv) *= 0.10 ; \
00188      else if( (decim) < 0 )                                    \
00189         for( iqqq=0 ; iqqq > (decim) ; iqqq-- ) (sv) *= 10.0 ; \
00190    }
00191 
00192 /* macro to set sensitivity for an arrowval
00193    (needed because Motif 1.2 fails to draw correctly
00194     when simply using XtSetSensitive on av->wrowcol ) */
00195 
00196 #define AV_SENSITIZE(av,sss)                                    \
00197    do{ Boolean sen = (Boolean) sss ;                            \
00198        if( av != NULL ) {                                       \
00199       int exp = (XtIsSensitive(av->wrowcol) != sen) ;           \
00200       if( av->wlabel != NULL ) XtSetSensitive(av->wlabel ,sen); \
00201       if( av->wup    != NULL ) XtSetSensitive(av->wup    ,sen); \
00202       if( av->wdown  != NULL ) XtSetSensitive(av->wdown  ,sen); \
00203       if( av->wtext  != NULL ) XtSetSensitive(av->wtext  ,sen); \
00204                                XtSetSensitive(av->wrowcol,sen); \
00205       if( exp ) MCW_expose_widget(av->wrowcol) ;                \
00206    } } while(0)
00207 
00208 /* following 2 macros added 12 Mar 2002 */
00209 
00210 #define AV_SENSITIZE_UP(av,sss)                                 \
00211    do{ if( av != NULL && av->wup != NULL )                      \
00212          XtSetSensitive(av->wup,sss); } while(0)
00213 
00214 #define AV_SENSITIZE_DOWN(av,sss)                               \
00215    do{ if( av != NULL && av->wdown != NULL )                    \
00216          XtSetSensitive(av->wdown,sss); } while(0)
00217 
00218 /*---------------------------------------------------------------------------------*/
00219 
00220 #define POPDOWN_ovcolor_chooser    MCW_choose_ovcolor(NULL,NULL,0,NULL,NULL)
00221 #define POPDOWN_string_chooser     MCW_choose_string(NULL,NULL,NULL,NULL,NULL)
00222 #define POPDOWN_strlist_chooser    MCW_choose_strlist(NULL,NULL,0,0,NULL,NULL,NULL)
00223 #define POPDOWN_integer_chooser    MCW_choose_integer(NULL,NULL,0,0,0,NULL,NULL)
00224 #define POPDOWN_timeseries_chooser MCW_choose_timeseries(NULL,NULL,NULL,0,NULL,NULL)
00225 #define POPDOWN_vector_chooser     MCW_choose_vector(NULL,NULL,0,NULL,NULL,NULL,NULL)
00226 
00227 #define POPDOWN_editable_strlist_chooser \
00228                                    MCW_choose_editable_strlist(NULL,NULL,NULL,0,NULL,NULL)
00229 
00230 extern void MCW_list_mode_CB( MCW_arrowval * , XtPointer ) ;
00231 
00232 extern char * MCW_DC_ovcolor_text( MCW_arrowval * , MCW_DC * ) ;
00233 extern void   MCW_choose_ovcolor( Widget , MCW_DC * , int , gen_func * , XtPointer ) ;
00234 extern void   MCW_choose_CB( Widget , XtPointer , XtPointer ) ;
00235 
00236 extern void   MCW_destroy_chooser_CB( Widget , XtPointer , XtPointer ) ;
00237 extern void   MCW_kill_chooser_CB   ( Widget , XtPointer , XtPointer ) ;
00238 
00239 extern void   MCW_choose_integer( Widget , char * ,
00240                                   int,int,int , gen_func *, XtPointer );
00241 
00242 extern void   MCW_choose_vector ( Widget, char *,
00243                                   int, char **, int *, gen_func *, XtPointer ) ;
00244 
00245 extern void   MCW_choose_string ( Widget, char *,
00246                                   char *, gen_func *, XtPointer );
00247 
00248 extern void   MCW_choose_strlist( Widget, char *, int, int,
00249                                   char * strlist[], gen_func *, XtPointer );
00250 
00251 extern void   MCW_choose_multi_strlist( Widget, char *, int,
00252                                         int, int *, char * strlist[],
00253                                         gen_func *, XtPointer  );
00254 
00255 extern void   MCW_choose_timeseries( Widget, char *, MRI_IMARR *,
00256                                      int, gen_func *, XtPointer );
00257 
00258 extern void MCW_choose_editable_strlist( Widget, char *,
00259                                          THD_string_array *,
00260                                          int, gen_func *, XtPointer );
00261 
00262 extern void MCW_choose_multi_editable_strlist( Widget, char *, int,
00263                                                THD_string_array *,
00264                                                int *, gen_func *, XtPointer );
00265 
00266 extern void MCW_stradd_CB( Widget , XtPointer , XtPointer ) ;
00267 
00268 typedef struct {
00269       int            ctype ;   /* choice type */
00270       MCW_DC       * dc ;      /* display context */
00271       Widget         wpop ;    /* popup widget */
00272       Widget         wcaller ; /* widget that made the popup */
00273       MCW_arrowval * av ;      /* arrowval making the choices */
00274       Widget         wchoice ; /* widget making the choice */
00275       gen_func     * sel_CB ;  /* user callback */
00276       XtPointer      sel_cd ;  /* user callback data */
00277       MRI_IMARR    * tsarr ;   /* array of timeseries to choose from */
00278 
00279       XtPointer parent , aux ;
00280 
00281       THD_string_array * sar ; /* array of strings, for editable_strlist */
00282       Widget             wtf ; /* text field, for editable_strlist */
00283 
00284       int nvec ;               /* 19 Mar 2004: for vector chooser */
00285 } MCW_choose_data ;
00286 
00287 #define mcwCT_ovcolor    701
00288 #define mcwCT_integer    702
00289 #define mcwCT_string     703
00290 #define mcwCT_timeseries 707
00291 #define mcwCT_vector     708  /* 19 Mar 2004 */
00292 
00293 #define mcwCT_single_mode 222
00294 #define mcwCT_multi_mode  223
00295 
00296 /* for vector callbacks:
00297      ival = number of vector values
00298      (float *)cval = vector array   */
00299 
00300 typedef struct {
00301       int         reason ;  /* reason for callback */
00302       XEvent *    event ;   /* event, most likely NULL */
00303       int         ival ;    /* chosen value */
00304       float       fval ;    /* chosen value */
00305       char *      cval ;    /* chosen value */
00306       int         nilist ,
00307                   *ilist ;  /* many chosen values */
00308       MRI_IMAGE * imval ;   /* chosen value for timeseries */
00309 
00310       XtPointer parent , aux ;
00311 } MCW_choose_cbs ;
00312 
00313 #define mcwCR_ovcolor    201
00314 #define mcwCR_integer    202
00315 #define mcwCR_string     203
00316 #define mcwCR_timeseries 207
00317 #define mcwCR_vector     208  /* 19 Mar 2004 */
00318 
00319 /*---------------------------------------------------------------------------------*/
00320 /*---- arrowpad stuff ----*/
00321 
00322 #define AP_DOWN  0
00323 #define AP_UP    1
00324 #define AP_LEFT  2
00325 #define AP_RIGHT 3
00326 #define AP_MID   4
00327 
00328 #define AP_FBASE 3
00329 
00330 typedef struct {
00331       int atype , atop , abottom , aleft , aright ;
00332 } AP_define ;
00333 
00334 static AP_define AP_but_def[5] = {
00335   { XmARROW_DOWN , 2 , 3 , 1 , 2 } ,
00336   { XmARROW_UP   , 0 , 1 , 1 , 2 } ,
00337   { XmARROW_LEFT , 1 , 2 , 0 , 1 } ,
00338   { XmARROW_RIGHT, 1 , 2 , 2 , 3 } ,
00339   { 0            , 1 , 2 , 1 , 2 }
00340 } ;
00341 
00342 #define AP_MAXCOUNT 5000
00343 
00344 typedef struct {
00345       Widget wform ,            /* Containing Form widget */
00346              wbut[5] ;          /* 4 arrowbuttons and a pushbutton */
00347 
00348       XtIntervalId timer_id ;   /* id from XtAppAddTimeOut */
00349 
00350       int which_pressed ;
00351 
00352       gen_func * action_CB ;    /* non-NULL=function to call on changes */
00353       XtPointer action_data ;   /* data for call */
00354 
00355       int delay , fastdelay  ;  /* for the timer callback */
00356       int count ;
00357 
00358       XEvent xev ;              /* copy of event from callback */
00359 
00360       XtPointer parent , aux ;
00361 } MCW_arrowpad ;
00362 
00363 extern MCW_arrowpad * new_MCW_arrowpad( Widget , gen_func * , XtPointer ) ;
00364 
00365 extern void AP_press_CB( Widget , XtPointer , XtPointer ) ;
00366 extern void AP_timer_CB( XtPointer , XtIntervalId * ) ;
00367 
00368 /*! toggle sensitivity of an arrowpad */
00369 
00370 #define AP_SENSITIZE(ap,sss)                            \
00371    do{ Boolean sen = (Boolean) sss ;                    \
00372        if( ap != NULL ) {                               \
00373         int exp = (XtIsSensitive(ap->wform) != sen) ;   \
00374         XtSetSensitive(ap->wbut[0],sen);                \
00375         XtSetSensitive(ap->wbut[1],sen);                \
00376         XtSetSensitive(ap->wbut[2],sen);                \
00377         XtSetSensitive(ap->wbut[3],sen);                \
00378         XtSetSensitive(ap->wbut[4],sen);                \
00379         XtSetSensitive(ap->wform,sen);                  \
00380         if( exp ) MCW_expose_widget(ap->wform) ;        \
00381    } } while(0)
00382 
00383 #if 0
00384 #define AP_MANGLIZE(ap)                                   \
00385   do{ if( ap != NULL ){                                   \
00386          XtUnmanageChild( ap->wbut[4] ) ;                 \
00387          XtUnmanageChild( ap->wform ) ;                   \
00388          XtVaSetValues( ap->wform ,                       \
00389                         XmNfractionBase , 6 , NULL ) ;    \
00390          XtVaSetValues( ap->wbut[0] ,                     \
00391                         XmNtopPosition    , 4 ,           \
00392                         XmNbottomPosition , 6 ,           \
00393                         XmNleftPosition   , 3 ,           \
00394                         XmNrightPosition  , 5 , NULL ) ;  \
00395          XtVaSetValues( ap->wbut[1] ,                     \
00396                         XmNtopPosition    , 0 ,           \
00397                         XmNbottomPosition , 2 ,           \
00398                         XmNleftPosition   , 3 ,           \
00399                         XmNrightPosition  , 5 , NULL ) ;  \
00400          XtVaSetValues( ap->wbut[2] ,                     \
00401                         XmNtopPosition    , 2 ,           \
00402                         XmNbottomPosition , 4 ,           \
00403                         XmNleftPosition   , 2 ,           \
00404                         XmNrightPosition  , 4 , NULL ) ;  \
00405          XtVaSetValues( ap->wbut[3] ,                     \
00406                         XmNtopPosition    , 2 ,           \
00407                         XmNbottomPosition , 4 ,           \
00408                         XmNleftPosition   , 4 ,           \
00409                         XmNrightPosition  , 6 , NULL ) ;  \
00410          XtManageChild( ap->wform ) ;                     \
00411   } } while(0)
00412 #endif
00413 
00414 #endif /* _MCW_BBOX_HEADER_ */
 

Powered by Plone

This site conforms to the following standards: