00001
00002
00003
00004
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 ;
00053 Widget wtop ;
00054 int nbut ;
00055 Widget wbut[MCW_MAX_BB] ;
00056 int value ;
00057
00058 XtPointer parent , aux ;
00059 } MCW_bbox ;
00060
00061
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
00072
00073 #ifndef VOID_FUNC
00074 #define VOID_FUNC
00075 typedef void void_func() ;
00076 #endif
00077
00078 typedef void gen_func() ;
00079 typedef char * str_func() ;
00080
00081 typedef struct {
00082 Widget wrowcol ,
00083 wlabel , wdown,wup , wtext ;
00084
00085 Widget wmenu ;
00086 int block_assign_actions ;
00087
00088 int ival , imin,imax , decimals ;
00089 float fval , fmin,fmax ;
00090
00091 char * sval ;
00092
00093 int old_ival ;
00094 float old_fval ;
00095 char * old_sval ;
00096
00097 XtIntervalId timer_id ;
00098
00099 gen_func * dval_CB ;
00100 XtPointer dval_data ;
00101
00102 str_func * text_CB ;
00103 XtPointer text_data ;
00104
00105 int incr , delay , fastdelay ;
00106 int allow_wrap ;
00107
00108 XEvent xev ;
00109
00110 XtPointer parent , aux ;
00111
00112 float fstep ;
00113 } MCW_arrowval ;
00114
00115
00116
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
00131
00132 #define MCW_AV_longdelay 1000
00133 #define MCW_AV_shortdelay 111
00134
00135 #define AV_NCOL 9
00136 #define AV_MAXLEN 120
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() ;
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) ;
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 ) ;
00178 extern char * AV_uformat_fval( float ) ;
00179
00180 extern char * MCW_av_substring_CB( MCW_arrowval * , XtPointer ) ;
00181
00182
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
00193
00194
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
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 ;
00270 MCW_DC * dc ;
00271 Widget wpop ;
00272 Widget wcaller ;
00273 MCW_arrowval * av ;
00274 Widget wchoice ;
00275 gen_func * sel_CB ;
00276 XtPointer sel_cd ;
00277 MRI_IMARR * tsarr ;
00278
00279 XtPointer parent , aux ;
00280
00281 THD_string_array * sar ;
00282 Widget wtf ;
00283
00284 int nvec ;
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
00292
00293 #define mcwCT_single_mode 222
00294 #define mcwCT_multi_mode 223
00295
00296
00297
00298
00299
00300 typedef struct {
00301 int reason ;
00302 XEvent * event ;
00303 int ival ;
00304 float fval ;
00305 char * cval ;
00306 int nilist ,
00307 *ilist ;
00308 MRI_IMAGE * imval ;
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
00318
00319
00320
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 ,
00346 wbut[5] ;
00347
00348 XtIntervalId timer_id ;
00349
00350 int which_pressed ;
00351
00352 gen_func * action_CB ;
00353 XtPointer action_data ;
00354
00355 int delay , fastdelay ;
00356 int count ;
00357
00358 XEvent xev ;
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
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