00001
00002
00003
00004
00005
00006
00007 #ifndef _MCW_IMSEQ_HEADER_
00008 #define _MCW_IMSEQ_HEADER_
00009
00010 #include <X11/X.h>
00011 #include <X11/Intrinsic.h>
00012 #include <X11/Shell.h>
00013 #include <X11/cursorfont.h>
00014
00015 #include <Xm/Xm.h>
00016 #include <Xm/Form.h>
00017 #include <Xm/Scale.h>
00018 #include <Xm/PushB.h>
00019 #include <Xm/DrawingA.h>
00020 #include <Xm/Protocols.h>
00021 #include <Xm/MwmUtil.h>
00022 #include <Xm/DialogS.h>
00023 #include <Xm/Label.h>
00024 #include <Xm/AtomMgr.h>
00025
00026 #include <stdio.h>
00027 #include <string.h>
00028 #include <math.h>
00029 #include <ctype.h>
00030 #include <signal.h>
00031
00032 #include "mrilib.h"
00033 #include "vecmat.h"
00034
00035 #include "display.h"
00036 #include "bbox.h"
00037 #include "xutil.h"
00038 #include "machdep.h"
00039
00040 #include "coxplot.h"
00041
00042
00043
00044 #ifndef HAVE_GET_PTR_TYPEDEF
00045 # define HAVE_GET_PTR_TYPEDEF
00046 typedef XtPointer (*get_ptr)() ;
00047 #endif
00048
00049 typedef struct {
00050 int num_total , num_series ;
00051
00052 void (* send_CB)() ;
00053
00054 MCW_function_list * transforms0D ;
00055 MCW_function_list * transforms2D ;
00056 MCW_function_list * slice_proj ;
00057
00058 XtPointer parent , aux ;
00059 } MCW_imseq_status ;
00060
00061 #define ISQ_DOING_SLICE_PROJ(ss) \
00062 ( (ss)->slice_proj_range > 0 && \
00063 (ss)->slice_proj_func != NULL )
00064
00065 #define IM_WIDTH(im) \
00066 ( ((im)->dx > 0) ? ((im)->nx * (im)->dx) : ((im)->nx) )
00067
00068 #define IM_HEIGHT(im) \
00069 ( ((im)->dy > 0) ? ((im)->ny * (im)->dy) : ((im)->ny) )
00070
00071
00072
00073 #define FORM_FRAC_BASE 1000
00074 #define IMAGE_FRAC 0.8
00075 #define DFRAC 0.01
00076 #define FRAC_MAX 0.95
00077 #define FRAC_MIN 0.25
00078
00079 #define COLOR_BAR_WIDTH 16
00080 #define COLOR_BAR_SPACE 4
00081
00082
00083
00084 #define NBUTTON_BOT 4
00085 #define NBUTTON_RIG 3
00086
00087 #define LEADING_BOT XmNleftAttachment
00088 #define LEADING_WIDGET_BOT XmNleftWidget
00089 #define TRAILING_BOT XmNrightAttachment
00090 #define EDGING_BOT XmNbottomAttachment
00091 #define SPACING_BOT XmNleftOffset
00092
00093 #define LEADING_RIG XmNtopAttachment
00094 #define LEADING_WIDGET_RIG XmNtopWidget
00095 #define TRAILING_RIG XmNbottomAttachment
00096 #define EDGING_RIG XmNrightAttachment
00097 #define SPACING_RIG XmNtopOffset
00098
00099 #define NARROW 5
00100
00101
00102
00103 #define KILL_2XIM(one,two) \
00104 do { if( (two) != (one) ) MCW_kill_XImage(two) ; \
00105 MCW_kill_XImage(one) ; (one) = (two) = NULL ; } while(0)
00106
00107 #define KILL_2ndXIM(one,two) \
00108 do { if( (two) != (one) ) MCW_kill_XImage(two) ; \
00109 (two) = NULL ; } while(0)
00110
00111 #define KILL_1MRI(one) \
00112 do{ if( (one) != NULL ){ mri_free(one) ; (one) = NULL ; }} while(0)
00113
00114 #define ISQ_VALID(seq) ((seq)!=NULL && ((seq)->valid)>0)
00115 #define ISQ_REALZ(seq) ((seq)!=NULL && ((seq)->valid)>1)
00116
00117
00118
00119 typedef struct {
00120 int nbut ;
00121 char ** lbut ;
00122 int type , frame ;
00123
00124 XtPointer parent , aux ;
00125 } ISQ_boxdef ;
00126
00127 #define NBOX_DISP 9
00128
00129 #define NBOX_MAX NBOX_DISP
00130
00131 #define ISQ_ROT_0 1
00132 #define ISQ_ROT_90 2
00133 #define ISQ_ROT_180 4
00134 #define ISQ_ROT_270 8
00135
00136 #define ISQ_TO_MRI_ROT(x) (x)
00137
00138 #define ISQ_SCL_AUTO 1
00139 #define ISQ_SCL_GRP 2
00140 #define ISQ_SCL_USER 65536
00141
00142 #define ISQ_RNG_MINTOMAX 1
00143 #define ISQ_RNG_02TO98 2
00144 #define ISQ_RNG_USER 4
00145
00146 #define ISQ_ASPECT 1
00147
00148 #define ISQ_SAV_NSIZE 1
00149 #define ISQ_SAV_PNM 2
00150 #define ISQ_SAV_ONE 4
00151
00152 #define ISQ_IMPROC_NONE 0
00153 #define ISQ_IMPROC_FLAT 1
00154 #define ISQ_IMPROC_SHARP 2
00155 #define ISQ_IMPROC_SOBEL 4
00156
00157 #define ISQ_CX_MAG 1
00158 #define ISQ_CX_PHASE 2
00159 #define ISQ_CX_REAL 4
00160 #define ISQ_CX_IMAG 8
00161
00162 typedef struct {
00163 int mirror , rot , no_overlay ,
00164 scale_group , scale_range , free_aspect ,
00165 save_nsize , save_pnm , save_one , improc_code , cx_code ;
00166
00167 XtPointer parent , aux ;
00168
00169 int save_filter ;
00170 int save_agif ;
00171 int save_mpeg ;
00172 } ISQ_options ;
00173
00174 #define ISQ_OPT_EQUAL(opta,optb) \
00175 ( ((opta).mirror == (optb).mirror ) && \
00176 ((opta).rot == (optb).rot ) && \
00177 ((opta).no_overlay == (optb).no_overlay ) && \
00178 ((opta).scale_group == (optb).scale_group) && \
00179 ((opta).scale_range == (optb).scale_range) && \
00180 ((opta).free_aspect == (optb).free_aspect) && \
00181 ((opta).improc_code == (optb).improc_code) && \
00182 ((opta).cx_code == (optb).cx_code ) )
00183
00184
00185
00186 #define ISQ_DEFAULT_OPT(opt) do{ (opt).mirror = FALSE ; \
00187 (opt).rot = ISQ_ROT_0 ; \
00188 (opt).no_overlay = False ; \
00189 (opt).scale_group = ISQ_SCL_AUTO ; \
00190 (opt).scale_range = ISQ_RNG_02TO98 ; \
00191 (opt).free_aspect = False ; \
00192 (opt).save_nsize = False ; \
00193 (opt).save_pnm = False ; \
00194 (opt).save_one = True ; \
00195 (opt).improc_code = ISQ_IMPROC_NONE ; \
00196 (opt).cx_code = ISQ_CX_MAG ; \
00197 (opt).parent = NULL ; \
00198 (opt).aux = NULL ; \
00199 (opt).save_filter = -1 ; \
00200 (opt).save_agif = 0 ; \
00201 (opt).save_mpeg = 0 ; \
00202 } while(0)
00203
00204
00205
00206 #define NHISTOG 500
00207
00208 typedef struct {
00209 Boolean one_done , glob_done ;
00210 float min,max , per02,per98 ,
00211 scl_mm,lev_mm , scl_per,lev_per ;
00212 float entropy ;
00213
00214 XtPointer parent , aux ;
00215 } ISQ_indiv_statistics ;
00216
00217 typedef struct {
00218 Boolean mm_done , per_done ;
00219 float min,max , per02,per98 ,
00220 scl_mm,lev_mm , scl_per,lev_per ;
00221 int hist[NHISTOG] ;
00222 XtWorkProcId worker ;
00223
00224 XtPointer parent , aux ;
00225 } ISQ_glob_statistics ;
00226
00227 #define ISQ_SCLEV(mn,mx,dp,sc,lv) \
00228 ( (lv) = (mn) , (sc) = (((mx)>(mn)) ? (((dp)-0.49)/((mx)-(mn))) : 1.0) )
00229
00230
00231
00232 typedef struct {
00233 int reason ;
00234 XEvent * event ;
00235 int xim,yim ;
00236
00237
00238 int key ;
00239 int nim ;
00240 ISQ_options opt ;
00241 XtPointer userdata ;
00242
00243 XtPointer parent , aux ;
00244 } ISQ_cbs ;
00245
00246 #define isqCR_buttonpress 1
00247 #define isqCR_keypress 2
00248 #define isqCR_geometry 3
00249 #define isqCR_newimage 4
00250 #define isqCR_newmontage 5
00251 #define isqCR_destroy 99
00252
00253 #define isqCR_getimage 401
00254 #define isqCR_getoverlay 402
00255 #define isqCR_getstatus 403
00256 #define isqCR_getqimage 404
00257
00258 #define isqCR_getxynim 411
00259
00260 #define isqCR_getmemplot 421
00261 #define isqCR_getlabel 422
00262
00263 #define isqCR_dxplus 301
00264 #define isqCR_dxminus 302
00265 #define isqCR_dyplus 303
00266 #define isqCR_dyminus 304
00267 #define isqCR_appress 309
00268
00269 #define isqCR_button2_points 501
00270 #define isqCR_button2_key 502
00271
00272 #define isqCR_force_redisplay 601
00273
00274 #define COLORMAP_CHANGE(sq) \
00275 do{ if( ISQ_REALZ((sq)) && (sq)->dc->visual_class == TrueColor ){ \
00276 if( (sq)->status->send_CB != NULL ){ \
00277 ISQ_cbs cbs ; \
00278 cbs.reason = isqCR_force_redisplay ; \
00279 AFNI_CALL_VOID_3ARG( (sq)->status->send_CB , \
00280 MCW_imseq * , (sq) , \
00281 XtPointer , (sq)->getaux , \
00282 ISQ_cbs * , &cbs ) ; \
00283 } else { \
00284 KILL_2XIM( (sq)->given_xbar , (sq)->sized_xbar ) ; \
00285 ISQ_redisplay( (sq) , -1 , isqDR_display ) ; \
00286 } \
00287 } } while(0)
00288
00289
00290
00291 #ifndef MONT_NMAX
00292 #define MONT_NMAX 13
00293 #endif
00294
00295 #ifndef MONT_SMAX
00296 #define MONT_SMAX 199
00297 #endif
00298
00299 #ifndef MONT_GMAX
00300 #define MONT_GMAX 13
00301 #endif
00302
00303 extern void ISQ_montage_CB( Widget , XtPointer , XtPointer ) ;
00304 extern void ISQ_montage_action_CB( Widget , XtPointer , XtPointer ) ;
00305
00306
00307
00308 #define ISQ_NHELP 2047
00309 #define ISQ_NWIDGET 128
00310
00311 struct MCW_imseq ;
00312
00313 typedef struct MCW_imseq {
00314
00315 int valid ;
00316
00317
00318
00319
00320 int ignore_redraws ;
00321
00322 int horig , vorig ;
00323
00324 int hbase , vbase ;
00325 int hactual , vactual ;
00326 int old_hact, old_vact;
00327 float scl , lev ;
00328 int bot , top ;
00329
00330 Boolean done_first ;
00331
00332 MCW_DC * dc ;
00333
00334 MCW_imseq_status * status ;
00335
00336 float last_width_mm , last_height_mm ;
00337
00338 ISQ_options opt, old_opt ;
00339
00340 Widget wtop, wform, wimage, wbar, wscale , winfo ,
00341 wbut_bot[NBUTTON_BOT] , wbut_rig[NBUTTON_RIG] ;
00342
00343 Widget wbar_menu , wbar_rng_but , wbar_zer_but , wbar_flat_but ,
00344 wbar_sharp_but ;
00345 float rng_bot,rng_top,rng_ztop , flat_bot,flat_top , sharp_fac ;
00346 int zer_color ;
00347
00348 MCW_arrowval * arrow[NARROW] ;
00349
00350 MCW_arrowpad * arrowpad ;
00351
00352 int marg_bot , marg_rig , wf_wide , wf_high ;
00353
00354 int num_bbox ;
00355 MCW_bbox * bbox[NBOX_MAX] ;
00356 Widget dialog ;
00357 int dialog_starter ;
00358 ISQ_options save_opt ;
00359
00360 get_ptr getim ;
00361 XtPointer getaux ;
00362
00363 int im_nr ;
00364 char im_label[64] ;
00365 char im_helptext[ISQ_NHELP+1] ;
00366
00367 int onoff_num , onoff_state ;
00368 Widget onoff_widgets[ISQ_NWIDGET] ;
00369
00370 int last_image_type ;
00371
00372 int mont_nx , mont_ny , mont_skip , mont_gap , mont_gapcolor ;
00373 int mont_nx_old, mont_ny_old, mont_skip_old, mont_gap_old, mont_gapcolor_old;
00374 int mont_periodic ;
00375 MCW_arrowval * mont_across_av , * mont_down_av , * mont_skip_av ,
00376 * mont_gap_av , * mont_gapcolor_av ;
00377
00378 float image_frac ;
00379
00380 MCW_arrowval * transform0D_av ;
00381 generic_func * transform0D_func ;
00382 int transform0D_index ;
00383
00384 MCW_arrowval * transform2D_av ;
00385 generic_func * transform2D_func ;
00386 int transform2D_index ;
00387
00388 MCW_arrowval * slice_proj_av ;
00389 float_func * slice_proj_func ;
00390 int slice_proj_index ;
00391 MCW_arrowval * slice_proj_range_av ;
00392 int slice_proj_range ;
00393
00394 MCW_arrowval * rowgraph_av ;
00395 int rowgraph_num ;
00396 MEM_topshell_data * rowgraph_mtd ;
00397
00398 MCW_arrowval * surfgraph_av ;
00399 int surfgraph_num ;
00400 MEM_topshell_data * surfgraph_mtd ;
00401 MCW_arrowpad * surfgraph_arrowpad ;
00402 float surfgraph_theta , surfgraph_phi ;
00403
00404 int never_drawn ;
00405
00406 int button2_enabled , button2_active , button2_drawmode ;
00407 Pixel button2_pixel ;
00408 int wimage_width , wimage_height ;
00409
00410
00411
00412 MRI_IMAGE * imim , * ovim ;
00413
00414 int need_orim , set_orim ;
00415 MRI_IMAGE * orim ;
00416
00417 XImage * given_xim , * sized_xim ;
00418 XImage * given_xbar , * sized_xbar ;
00419
00420 ISQ_indiv_statistics * imstat ;
00421 ISQ_glob_statistics * glstat ;
00422
00423
00424
00425 int saver_from , saver_to ;
00426 char * saver_prefix ;
00427
00428
00429
00430 XtPointer parent ;
00431
00432
00433
00434 char winfo_extra[64] ;
00435
00436
00437
00438 char winfo_sides[4][16] ;
00439
00440
00441
00442 float ov_opacity ;
00443 MCW_arrowval * ov_opacity_av ;
00444 Widget ov_opacity_sep ;
00445
00446 Widget record_rc , record_cbut;
00447 MCW_bbox * record_status_bbox ;
00448 MCW_bbox * record_method_bbox ;
00449 int record_status ;
00450 int record_method ;
00451 int record_mode ;
00452 struct MCW_imseq * record_imseq ;
00453 MRI_IMARR * record_imarr ;
00454 MEM_plotdata ** record_mplot ;
00455
00456 MCW_bbox * save_one_bbox ;
00457 MCW_bbox * save_agif_bbox ;
00458
00459 float clbot,cltop , barbot,bartop ;
00460
00461 MEM_plotdata * mplot ;
00462 MCW_bbox * wbar_plots_bbox ;
00463 MCW_arrowval * wbar_label_av ;
00464 MCW_arrowval * wbar_labsz_av ;
00465
00466 Widget zoom_sep ;
00467 MCW_arrowval *zoom_val_av ;
00468 Widget zoom_drag_pb ;
00469 int zoom_fac ;
00470 float zoom_hor_off, zoom_ver_off ;
00471 int zoom_pw , zoom_ph ;
00472 Pixmap zoom_pixmap ;
00473 XImage *zoom_xim ;
00474 int zoom_button1 , zoom_xp,zoom_yp ;
00475
00476 int cropit , crop_xa,crop_xb , crop_ya,crop_yb ;
00477 int crop_nxorg , crop_nyorg , crop_allowed ;
00478 Widget crop_drag_pb ;
00479 int crop_drag ;
00480
00481 int button2_width ;
00482
00483 int cursor_state ;
00484
00485 MCW_bbox *pen_bbox ;
00486
00487 int last_bx,last_by ;
00488 int cmap_changed ;
00489
00490 int do_graymap ;
00491 MEM_topshell_data * graymap_mtd ;
00492 Widget wbar_graymap_pb ;
00493
00494 XtIntervalId timer_id ;
00495 int timer_func, timer_param, timer_delay ;
00496
00497 int dont_place_dialog ;
00498
00499 MCW_arrowval *wbar_ticnum_av, *wbar_ticsiz_av ;
00500
00501 float last_dx , last_dy ;
00502
00503 float rgb_gamma ;
00504 float rgb_offset ;
00505 } MCW_imseq ;
00506
00507 #define ISQ_TIMERFUNC_INDEX 701
00508 #define ISQ_TIMERFUNC_BOUNCE 702
00509
00510 extern void ISQ_timer_CB( XtPointer , XtIntervalId * ) ;
00511 extern void ISQ_timer_stop( MCW_imseq * ) ;
00512
00513 extern void ISQ_zoom_av_CB( MCW_arrowval *, XtPointer ) ;
00514 extern void ISQ_zoom_pb_CB( Widget, XtPointer, XtPointer ) ;
00515 extern void ISQ_crop_pb_CB( Widget, XtPointer, XtPointer ) ;
00516 extern void ISQ_actually_pan( MCW_imseq * , int , int ) ;
00517 extern int ISQ_show_zoom( MCW_imseq *seq ) ;
00518
00519 #define CURSOR_NORMAL 0
00520 #define CURSOR_PENCIL 1
00521 #define CURSOR_CROSSHAIR 2
00522
00523 extern void ISQ_set_cursor_state( MCW_imseq * , int ) ;
00524
00525 extern void ISQ_pen_bbox_CB( Widget, XtPointer, XtPointer ) ;
00526
00527
00528
00529 #define ISQ_LABEL_OFF 0
00530 #define ISQ_LABEL_UPLF 1
00531 #define ISQ_LABEL_UPRT 2
00532 #define ISQ_LABEL_DNLF 3
00533 #define ISQ_LABEL_DNRT 4
00534 #define ISQ_LABEL_UPMD 5
00535 #define ISQ_LABEL_DNMD 6
00536
00537
00538
00539 #define ISQ_USE_SIDES(isq) ( (isq)->winfo_sides[0][0] != '\0' || \
00540 (isq)->winfo_sides[1][0] != '\0' || \
00541 (isq)->winfo_sides[2][0] != '\0' || \
00542 (isq)->winfo_sides[3][0] != '\0' )
00543
00544
00545
00546 extern MCW_imseq * open_MCW_imseq( MCW_DC * , get_ptr , XtPointer ) ;
00547
00548
00549
00550 #define isqDR_imhelptext 101
00551 #define isqDR_options 102
00552 #define isqDR_numtotal 103
00553 #define isqDR_cursor 104
00554 #define isqDR_unrealize 105
00555 #define isqDR_realize 106
00556 #define isqDR_display 107
00557 #define isqDR_overlay 108
00558 #define isqDR_arrowpadon 109
00559 #define isqDR_reimage 110
00560 #define isqDR_reshow 111
00561 #define isqDR_newseq 112
00562 #define isqDR_arrowpadoff 113
00563 #define isqDR_title 114
00564 #define isqDR_clearstat 115
00565 #define isqDR_onoffwid 116
00566 #define isqDR_getimnr 117
00567 #define isqDR_icon 118
00568 #define isqDR_sendmontage 119
00569 #define isqDR_periodicmont 120
00570 #define isqDR_setmontage 121
00571 #define isqDR_setifrac 130
00572 #define isqDR_setrange 131
00573 #define isqDR_bgicon 132
00574
00575 #define isqDR_arrowpadhint 201
00576 #define isqDR_winfotext 202
00577 #define isqDR_getoptions 203
00578 #define isqDR_winfosides 204
00579
00580 #define isqDR_destroy 666
00581
00582 #define isqDR_offwid 0
00583 #define isqDR_onwid 1
00584 #define isqDR_togwid 2
00585
00586 #define isqDR_button2_enable 501
00587 #define isqDR_button2_disable 502
00588 #define isqDR_button2_pixel 503
00589 #define isqDR_button2_mode 504
00590 #define isqDR_button2_width 505
00591
00592 #define isqDR_ignore_redraws 521
00593 #define isqDR_keypress 522
00594
00595 #define BUTTON2_OPENPOLY 0
00596 #define BUTTON2_CLOSEDPOLY 1
00597 #define BUTTON2_POINTS 2
00598 #define BUTTON2_NODRAW 3
00599
00600 #define isqDR_rebar 602
00601 #define isqDR_opacitybut 603
00602 #define isqDR_record_mode 604
00603 #define isqDR_record_disable 605
00604 #define isqDR_zoombut 606
00605 #define isqDR_getopacity 607
00606 #define isqDR_setopacity 608
00607 #define isqDR_setimsave 609
00608 #define isqDR_penbbox 610
00609
00610 #define isqDR_plot_label 701
00611 #define isqDR_plot_plot 702
00612 #define isqDR_save_jpeg 703
00613
00614 extern Boolean drive_MCW_imseq( MCW_imseq * , int , XtPointer ) ;
00615
00616 extern Boolean ISQ_setup_new( MCW_imseq * , XtPointer ) ;
00617
00618
00619
00620 extern void ISQ_redisplay( MCW_imseq * , int , int ) ;
00621
00622 extern MCW_imseq_status * ISQ_copy_status( MCW_imseq_status * ) ;
00623
00624 extern void ISQ_reset_dimen( MCW_imseq * , float , float ) ;
00625
00626 extern void ISQ_scale_CB( Widget , XtPointer , XtPointer ) ;
00627
00628 extern void ISQ_wbar_plots_CB( Widget , XtPointer , XtPointer ) ;
00629 extern void ISQ_wbar_label_CB( MCW_arrowval * , XtPointer ) ;
00630
00631 extern void ISQ_wbar_menu_CB( Widget , XtPointer , XtPointer ) ;
00632 extern void ISQ_set_rng_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
00633 extern void ISQ_set_zcol_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
00634 extern void ISQ_set_flat_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
00635 extern void ISQ_set_sharp_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
00636
00637 extern void ISQ_but_disp_CB( Widget , XtPointer , XtPointer ) ;
00638 extern void ISQ_but_save_CB( Widget , XtPointer , XtPointer ) ;
00639 extern void ISQ_but_done_CB( Widget , XtPointer , XtPointer ) ;
00640 extern void ISQ_but_color_CB( Widget , XtPointer , XtPointer ) ;
00641 extern void ISQ_but_cswap_CB( Widget , XtPointer , XtPointer ) ;
00642 extern void ISQ_but_cnorm_CB( Widget , XtPointer , XtPointer ) ;
00643
00644 extern void ISQ_place_dialog( MCW_imseq * ) ;
00645 extern void ISQ_place_widget( Widget, Widget ) ;
00646
00647 #undef REQUIRE_TWO_DONES
00648 #ifdef REQUIRE_TWO_DONES
00649 extern void ISQ_but_done_reset( MCW_imseq * ) ;
00650 #else
00651 # define ISQ_but_done_reset(xx)
00652 #endif
00653
00654 extern void ISQ_disp_act_CB( Widget , XtPointer , XtPointer ) ;
00655
00656 extern void ISQ_drawing_EV( Widget , XtPointer , XEvent * , Boolean * ) ;
00657 extern void ISQ_button2_EV( Widget , XtPointer , XEvent * , Boolean * ) ;
00658
00659 extern void ISQ_make_image( MCW_imseq * ) ;
00660 extern void ISQ_show_image( MCW_imseq * ) ;
00661 extern void ISQ_draw_winfo( MCW_imseq * ) ;
00662
00663
00664 extern MRI_IMAGE * ISQ_overlay( MCW_DC *, MRI_IMAGE *, MRI_IMAGE *, float ) ;
00665 #define ISQ_GOOD_OVERLAY_TYPE(dt) ( (dt)==MRI_short || (dt)==MRI_rgb )
00666
00667
00668 extern void ISQ_opacity_CB( MCW_arrowval * , XtPointer ) ;
00669 extern char * ISQ_opacity_label( int ) ;
00670 extern MRI_IMAGE * ISQ_index_to_rgb( MCW_DC * , int , MRI_IMAGE * ) ;
00671 #define ISQ_SKIP_OVERLAY(isq) ((isq)->opt.no_overlay || (isq)->ov_opacity == 0.0)
00672
00673 extern MRI_IMAGE * ISQ_manufacture_one( int nim , int overlay , MCW_imseq * seq ) ;
00674 extern void ISQ_make_montage( MCW_imseq * ) ;
00675
00676 extern void ISQ_make_bar( MCW_imseq * ) ;
00677 extern void ISQ_show_bar( MCW_imseq * ) ;
00678 extern void ISQ_set_barhint( MCW_imseq * , char * ) ;
00679
00680 extern MRI_IMAGE * ISQ_process_mri( int , MCW_imseq * , MRI_IMAGE * ) ;
00681
00682 extern MRI_IMAGE * ISQ_getimage ( int , MCW_imseq * ) ;
00683 extern MRI_IMAGE * ISQ_getoverlay( int , MCW_imseq * ) ;
00684 extern MEM_plotdata * ISQ_getmemplot( int , MCW_imseq * ) ;
00685 extern char * ISQ_getlabel ( int , MCW_imseq * ) ;
00686
00687 extern void ISQ_free_alldata( MCW_imseq * ) ;
00688
00689 extern int ISQ_set_image_number( MCW_imseq * , int ) ;
00690
00691 extern Boolean ISQ_disp_options( MCW_imseq * , Boolean ) ;
00692
00693
00694
00695 typedef struct {
00696 char * name ;
00697 XtCallbackProc func_CB ;
00698
00699 XtPointer parent , aux ;
00700 } ISQ_bdef ;
00701
00702 Boolean ISQ_statistics_WP( XtPointer ) ;
00703
00704 void ISQ_statify_one( MCW_imseq * , int , MRI_IMAGE * ) ;
00705 void ISQ_statify_all( MCW_imseq * , Boolean ) ;
00706
00707 void ISQ_perpoints( float,float , int h[] , float * , float * ) ;
00708
00709 void ISQ_mapxy ( MCW_imseq * , int,int , int *,int *,int * ) ;
00710 void ISQ_flipxy ( MCW_imseq * , int *,int * ) ;
00711 void ISQ_unflipxy( MCW_imseq * , int *,int * ) ;
00712
00713 void ISQ_arrow_CB( MCW_arrowval * , XtPointer ) ;
00714
00715 void ISQ_arrowpad_CB( MCW_arrowpad * , XtPointer ) ;
00716
00717 extern void ISQ_transform_CB ( MCW_arrowval * , XtPointer ) ;
00718 extern char * ISQ_transform_label( MCW_arrowval * , XtPointer ) ;
00719
00720 extern void ISQ_slice_proj_CB ( MCW_arrowval * , XtPointer ) ;
00721
00722 #define ROWGRAPH_MAX 9
00723 #define SURFGRAPH_MAX 2
00724
00725 #define ROWGRAPH_MASK 1
00726 #define SURFGRAPH_MASK 2
00727 #define GRAYMAP_MASK 4
00728
00729 extern void ISQ_rowgraph_CB ( MCW_arrowval * , XtPointer ) ;
00730 extern char * ISQ_rowgraph_label( MCW_arrowval * , XtPointer ) ;
00731 extern void ISQ_rowgraph_draw( MCW_imseq * seq ) ;
00732 extern void ISQ_rowgraph_mtdkill( MEM_topshell_data * mp ) ;
00733
00734 extern void ISQ_graymap_draw( MCW_imseq * seq ) ;
00735 extern void ISQ_graymap_mtdkill( MEM_topshell_data * mp ) ;
00736
00737 extern void ISQ_surfgraph_CB ( MCW_arrowval * , XtPointer ) ;
00738 extern char * ISQ_surfgraph_label( MCW_arrowval * , XtPointer ) ;
00739 extern void ISQ_surfgraph_draw( MCW_imseq * seq ) ;
00740 extern void ISQ_surfgraph_mtdkill( MEM_topshell_data * mp ) ;
00741 extern MEM_plotdata * plot_image_surface( MRI_IMAGE * , float,float,float,int,int ) ;
00742 extern void ISQ_surfgraph_arrowpad_CB( MCW_arrowpad * , XtPointer ) ;
00743
00744
00745
00746 extern void ISQ_saver_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
00747
00748 extern MEM_plotdata * ISQ_plot_label( MCW_imseq *, char * ) ;
00749
00750
00751
00752 #define RECORD_STATUS_OFF (1<<0)
00753 #define RECORD_STATUS_NEXTONE (1<<1)
00754 #define RECORD_STATUS_ON (1<<2)
00755
00756 #define RECORD_ISON(ib) ((ib) > RECORD_STATUS_OFF)
00757
00758 #define RECORD_METHOD_AFTEREND (1<<0)
00759 #define RECORD_METHOD_BEFORESTART (1<<1)
00760 #define RECORD_METHOD_INSERT_MM (1<<2)
00761 #define RECORD_METHOD_INSERT_PP (1<<3)
00762 #define RECORD_METHOD_OVERWRITE (1<<4)
00763 #define RECORD_METHOD_OVERWRITE_MM (1<<5)
00764 #define RECORD_METHOD_OVERWRITE_PP (1<<6)
00765
00766 extern void ISQ_record_button( MCW_imseq * ) ;
00767 extern void ISQ_record_CB( Widget,XtPointer,XtPointer ) ;
00768 extern void ISQ_butsave_EV( Widget, XtPointer, XEvent *, Boolean * ) ;
00769
00770 extern void ISQ_record_open( MCW_imseq * ) ;
00771 extern void ISQ_record_update( MCW_imseq * , int ) ;
00772 extern void ISQ_record_addim( MCW_imseq * , int,int ) ;
00773 extern XtPointer ISQ_record_getim( int , int , XtPointer ) ;
00774 extern void ISQ_record_send_CB( MCW_imseq * , XtPointer , ISQ_cbs * ) ;
00775 extern void ISQ_record_kill_CB( Widget , XtPointer , XtPointer ) ;
00776
00777 extern void ISQ_remove_widget( MCW_imseq * , Widget ) ;
00778 extern void ISQ_cropper( MCW_imseq *, XButtonEvent *) ;
00779
00780 extern void ISQ_snapshot( Widget w ) ;
00781 extern void ISQ_snapsave( int,int, byte *, Widget ) ;
00782
00783 extern int ISQ_handle_keypress( MCW_imseq * , unsigned long );
00784
00785 extern void mri_rgb_transform_nD( MRI_IMAGE *, int, generic_func * ) ;
00786
00787 extern void ISQ_save_jpeg( MCW_imseq *seq , char *fname ) ;
00788
00789 #endif