/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
#ifndef _MCW_IMSEQ_HEADER_
#define _MCW_IMSEQ_HEADER_
#include <X11/X.h>
#include <X11/Intrinsic.h>
#include <X11/Shell.h>
#include <X11/cursorfont.h>
#include <Xm/Xm.h>
#include <Xm/Form.h>
#include <Xm/Scale.h>
#include <Xm/PushB.h>
#include <Xm/DrawingA.h>
#include <Xm/Protocols.h>
#include <Xm/MwmUtil.h>
#include <Xm/DialogS.h>
#include <Xm/Label.h>
#include <Xm/AtomMgr.h>
#include <stdio.h>
#include <string.h>
#include <math.h>
#include <ctype.h>
#include <signal.h>
#include "mrilib.h"
#include "vecmat.h"
#include "display.h"
#include "bbox.h"
#include "xutil.h"
#include "machdep.h"
#include "coxplot.h" /* 30 Dec 1998 */
#ifdef __cplusplus
extern "C" {
#endif
/*** typedefs ***/
#ifndef HAVE_GET_PTR_TYPEDEF
# define HAVE_GET_PTR_TYPEDEF
typedef XtPointer (*get_ptr)() ; /* function type */
#endif
typedef struct {
int num_total , num_series ; /* # of images, # in "series" */
void (* send_CB)() ; /* callback, if non_NULL */
MCW_function_list * transforms0D ;
MCW_function_list * transforms2D ;
MCW_function_list * slice_proj ; /* 31 Jan 2002 */
XtPointer parent , aux ;
} MCW_imseq_status ;
#define ISQ_DOING_SLICE_PROJ(ss) \
( (ss)->slice_proj_range > 0 && \
(ss)->slice_proj_func != NULL )
#define IM_WIDTH(im) \
( ((im)->dx > 0) ? ((im)->nx * (im)->dx) : ((im)->nx) )
#define IM_HEIGHT(im) \
( ((im)->dy > 0) ? ((im)->ny * (im)->dy) : ((im)->ny) )
/* define dimensions used in the window */
#define FORM_FRAC_BASE 1000
#define IMAGE_FRAC 0.8
#define DFRAC 0.01
#define FRAC_MAX 0.95
#define FRAC_MIN 0.25
#define COLOR_BAR_WIDTH 16
#define COLOR_BAR_SPACE 4
/* button stuff */
#define NBUTTON_BOT 4 /* # buttons at bottom */
#define NBUTTON_RIG 3 /* # buttons at right */
#define LEADING_BOT XmNleftAttachment
#define LEADING_WIDGET_BOT XmNleftWidget
#define TRAILING_BOT XmNrightAttachment
#define EDGING_BOT XmNbottomAttachment
#define SPACING_BOT XmNleftOffset
#define LEADING_RIG XmNtopAttachment
#define LEADING_WIDGET_RIG XmNtopWidget
#define TRAILING_RIG XmNbottomAttachment
#define EDGING_RIG XmNrightAttachment
#define SPACING_RIG XmNtopOffset
#define NARROW 5
/* image destruction stuff */
#define KILL_2XIM(one,two) \
do { if( (two) != (one) ) MCW_kill_XImage(two) ; \
MCW_kill_XImage(one) ; (one) = (two) = NULL ; } while(0)
#define KILL_2ndXIM(one,two) \
do { if( (two) != (one) ) MCW_kill_XImage(two) ; \
(two) = NULL ; } while(0)
#define KILL_1MRI(one) \
do{ if( (one) != NULL ){ mri_free(one) ; (one) = NULL ; }} while(0)
#define ISQ_VALID(seq) ((seq)!=NULL && ((seq)->valid)>0)
#define ISQ_REALZ(seq) ((seq)!=NULL && ((seq)->valid)>1)
/*----------------------- button box stuff -----------------------*/
typedef struct {
int nbut ;
char ** lbut ;
int type , frame ;
XtPointer parent , aux ;
} ISQ_boxdef ;
#define NBOX_DISP 9 /* # button boxes in Disp dialog */
#define NBOX_MAX NBOX_DISP /* max # boxes to allow for in imseq */
#define ISQ_ROT_0 1 /* values returned by various button boxes */
#define ISQ_ROT_90 2 /* in the Disp dialog (will be transferred */
#define ISQ_ROT_180 4 /* to values in the options data) */
#define ISQ_ROT_270 8
#define ISQ_TO_MRI_ROT(x) (x) /* convert ISQ_ROT codes to MRI_ROT codes */
#define ISQ_SCL_AUTO 1
#define ISQ_SCL_GRP 2
#define ISQ_SCL_USER 65536
#define ISQ_RNG_MINTOMAX 1
#define ISQ_RNG_02TO98 2
#define ISQ_RNG_USER 4 /* 04 Nov 2003 */
#define ISQ_ASPECT 1
#define ISQ_SAV_NSIZE 1
#define ISQ_SAV_PNM 2
#define ISQ_SAV_ONE 4 /* 26 Jul 2001: no longer used */
#define ISQ_IMPROC_NONE 0 /* values returned by various button */
#define ISQ_IMPROC_FLAT 1
#define ISQ_IMPROC_SHARP 2 /* boxes in the Disp dialog improc box */
#define ISQ_IMPROC_SOBEL 4 /* (powers of 2 of button indexes) */
#define ISQ_CX_MAG 1 /* values returned by buttons in */
#define ISQ_CX_PHASE 2 /* the Disp dialog "complex" box */
#define ISQ_CX_REAL 4
#define ISQ_CX_IMAG 8
typedef struct {
int mirror , rot , no_overlay ,
scale_group , scale_range , free_aspect ,
save_nsize , save_pnm , save_one , improc_code , cx_code ;
XtPointer parent , aux ;
int save_filter ; /* 27 Jun 2001 */
int save_agif ; /* 27 Jul 2001 */
int save_mpeg ; /* 02 Jul 2001 */
} ISQ_options ;
#undef AGIF_MODE
#undef MPEG_MODE
#undef JPEG_MODE
#undef PNG_MODE
#define AGIF_MODE 1 /* 06 Dec 2006 - for ISQ_save_anim() */
#define MPEG_MODE 2
#define JPEG_MODE 3
#define PNG_MODE 4
#define ISQ_OPT_EQUAL(opta,optb) \
( ((opta).mirror == (optb).mirror ) && \
((opta).rot == (optb).rot ) && \
((opta).no_overlay == (optb).no_overlay ) && \
((opta).scale_group == (optb).scale_group) && \
((opta).scale_range == (optb).scale_range) && \
((opta).free_aspect == (optb).free_aspect) && \
((opta).improc_code == (optb).improc_code) && \
((opta).cx_code == (optb).cx_code ) )
/* 09 Oct 1998 */
#define ISQ_DEFAULT_OPT(opt) do{ (opt).mirror = FALSE ; \
(opt).rot = ISQ_ROT_0 ; \
(opt).no_overlay = False ; \
(opt).scale_group = ISQ_SCL_AUTO ; \
(opt).scale_range = ISQ_RNG_02TO98 ; \
(opt).free_aspect = False ; \
(opt).save_nsize = False ; \
(opt).save_pnm = False ; \
(opt).save_one = True ; \
(opt).improc_code = ISQ_IMPROC_NONE ; \
(opt).cx_code = ISQ_CX_MAG ; \
(opt).parent = NULL ; \
(opt).aux = NULL ; \
(opt).save_filter = -1 ; \
(opt).save_agif = 0 ; \
(opt).save_mpeg = 0 ; \
} while(0)
/*------------- statistics for image display scaling -------------*/
#define NHISTOG 500
typedef struct {
Boolean one_done , glob_done ;
float min,max , per02,per98 ,
scl_mm,lev_mm , scl_per,lev_per ;
float entropy ;
XtPointer parent , aux ;
} ISQ_indiv_statistics ;
typedef struct {
Boolean mm_done , per_done ;
float min,max , per02,per98 ,
scl_mm,lev_mm , scl_per,lev_per ;
int hist[NHISTOG] ;
XtWorkProcId worker ;
XtPointer parent , aux ;
} ISQ_glob_statistics ;
#define ISQ_SCLEV(mn,mx,dp,sc,lv) \
( (lv) = (mn) , (sc) = (((mx)>(mn)) ? (((dp)-0.49)/((mx)-(mn))) : 1.0) )
/*--- "callback" data stuff: info about events in image window ---*/
typedef struct {
int reason ; /* isqCR_??? defined below */
XEvent * event ; /* may be NULL */
int xim,yim ; /* original image coords, */
/* OR new image size */
int key ; /* keyvalue */
int nim ; /* new image number */
ISQ_options opt ; /* new options */
XtPointer userdata ; /* misc stuff */
XtPointer parent , aux ;
} ISQ_cbs ;
#define isqCR_buttonpress 1 /* button press in image */
#define isqCR_keypress 2 /* key press in image */
#define isqCR_geometry 3 /* the display geometry altered */
#define isqCR_newimage 4 /* moved to a new image */
#define isqCR_newmontage 5 /* a new image montage layout */
#define isqCR_destroy 99 /* the MCW_imseq was destroyed */
#define isqCR_getimage 401
#define isqCR_getoverlay 402
#define isqCR_getstatus 403
#define isqCR_getqimage 404
#define isqCR_getxynim 411 /* 30 Dec 1998 */
#define isqCR_getmemplot 421 /* 21 Feb 2001 */
#define isqCR_getlabel 422 /* 19 Sep 2001 */
#define isqCR_dxplus 301 /* arrowpad reasons */
#define isqCR_dxminus 302
#define isqCR_dyplus 303
#define isqCR_dyminus 304
#define isqCR_appress 309
#define isqCR_button2_points 501 /* Feb 1998 */
#define isqCR_button2_key 502 /* 20 Feb 2003 */
#define isqCR_force_redisplay 601 /* 22 Aug 1998 */
#define isqCR_setindex 602 /* 26 Apr 2007 */
#define COLORMAP_CHANGE(sq) \
do{ if( ISQ_REALZ((sq)) && (sq)->dc->visual_class == TrueColor ){ \
if( (sq)->status->send_CB != NULL ){ \
ISQ_cbs cbs ; \
cbs.reason = isqCR_force_redisplay ; \
AFNI_CALL_VOID_3ARG( (sq)->status->send_CB , \
MCW_imseq * , (sq) , \
XtPointer , (sq)->getaux , \
ISQ_cbs * , &cbs ) ; \
} else { \
KILL_2XIM( (sq)->given_xbar , (sq)->sized_xbar ) ; \
ISQ_redisplay( (sq) , -1 , isqDR_display ) ; \
} \
} } while(0)
/*------------------------------*/
#ifndef MONT_NMAX
#define MONT_NMAX 13
#endif
#ifndef MONT_SMAX
#define MONT_SMAX 199
#endif
#ifndef MONT_GMAX
#define MONT_GMAX 13
#endif
extern void ISQ_montage_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_montage_action_CB( Widget , XtPointer , XtPointer ) ;
/*------------- the central data type -------------*/
#define ISQ_NHELP 2047
#define ISQ_NWIDGET 128
struct MCW_imseq ; /* incomplete definition, completed below: */
typedef struct MCW_imseq {
int valid ; /* flag if this structure is valid:
0 => no good at all
1 => valid but unrealized
2 => valid and realized */
int ignore_redraws ; /* flag to ignore external redraws */
int horig , vorig ; /* horz and vert dimens, sans aspect */
int hbase , vbase ; /* horz and vert "standard" image dimensions */
int hactual , vactual ; /* dimensions, allowing for rotations */
int old_hact, old_vact; /* recent values */
float scl , lev ; /* for scaling intensities */
int bot , top ; /* for clipping intensities */
Boolean done_first ; /* for the done button */
MCW_DC * dc ; /* graphics data (copy of a pointer) */
MCW_imseq_status * status ; /* status of image sequence */
float last_width_mm , last_height_mm ; /* physical sizes (in mm, say)*/
ISQ_options opt, old_opt ; /* image display options */
Widget wtop, wform, wimage, wbar, wscale , winfo ,
wbut_bot[NBUTTON_BOT] , wbut_rig[NBUTTON_RIG] ; /* windows */
Widget wbar_menu , wbar_rng_but , wbar_zer_but , wbar_flat_but ,
wbar_sharp_but ;
float rng_bot,rng_top,rng_ztop , flat_bot,flat_top , sharp_fac ;
int zer_color , rng_extern ;
MCW_arrowval * arrow[NARROW] ; /* arrow controls */
MCW_arrowpad * arrowpad ; /* arrowpad in lower right corner */
int marg_bot , marg_rig , wf_wide , wf_high ;
int num_bbox ;
MCW_bbox * bbox[NBOX_MAX] ; /* button boxes */
Widget dialog ;
int dialog_starter ;
ISQ_options save_opt ;
get_ptr getim ; /* pointer to image retrieval procedure */
XtPointer getaux ; /* pointer to image retrieval auxiliary data */
int im_nr ; /* index of latest and greatest */
char im_label[64] ;
char im_helptext[ISQ_NHELP+1] ;
int onoff_num , onoff_state ;
Widget onoff_widgets[ISQ_NWIDGET] ; /* widgets on & off */
int last_image_type ;
int mont_nx , mont_ny , mont_skip , mont_gap , mont_gapcolor ;
int mont_nx_old, mont_ny_old, mont_skip_old, mont_gap_old, mont_gapcolor_old;
int mont_periodic ;
MCW_arrowval * mont_across_av , * mont_down_av , * mont_skip_av ,
* mont_gap_av , * mont_gapcolor_av ;
float image_frac ; /* 25 Oct 1996 */
MCW_arrowval * transform0D_av ; /* 30 Oct 1996 */
generic_func * transform0D_func ;
int transform0D_index ;
MCW_arrowval * transform2D_av ;
generic_func * transform2D_func ;
int transform2D_index ;
MCW_arrowval * slice_proj_av ; /* 31 Jan 2002 */
float_func * slice_proj_func ;
int slice_proj_index ;
MCW_arrowval * slice_proj_range_av ;
int slice_proj_range ;
MCW_arrowval * rowgraph_av ; /* 30 Dec 1998 */
int rowgraph_num ;
MEM_topshell_data * rowgraph_mtd ;
MCW_arrowval * surfgraph_av ; /* 21 Jan 1999 */
int surfgraph_num ;
MEM_topshell_data * surfgraph_mtd ;
MCW_arrowpad * surfgraph_arrowpad ;
float surfgraph_theta , surfgraph_phi ;
int never_drawn ;
int button2_enabled , button2_active , button2_drawmode ;
Pixel button2_pixel ;
int wimage_width , wimage_height ;
/*--- data below here should be freed before deletion ---*/
MRI_IMAGE * imim , * ovim ; /* latest and greatest (already processed) */
int need_orim , set_orim ; /* flag to compute orim */
MRI_IMAGE * orim ; /* input underlay image (for rowgraphs) */
XImage * given_xim , * sized_xim ; /* for actual displaying */
XImage * given_xbar , * sized_xbar ;
ISQ_indiv_statistics * imstat ;
ISQ_glob_statistics * glstat ;
/*--- temporary, I hope [Hah!] ---*/
int saver_from , saver_to ;
char * saver_prefix ;
/*--- the obligatory ---*/
XtPointer parent ;
/* extra text for winfo [07 Aug 1999] */
char winfo_extra[64] ;
/* text for sides of window in default orientation [01 Dec 1999] */
char winfo_sides[4][16] ;
/* opacity of overlay */
float ov_opacity ; /* 07 Mar 2001 */
MCW_arrowval * ov_opacity_av ;
Widget ov_opacity_sep ; /* 08 Mar 2001 */
Widget record_rc , record_cbut; /* 24 Apr 2001: recording stuff */
MCW_bbox * record_status_bbox ;
MCW_bbox * record_method_bbox ;
int record_status ;
int record_method ;
int record_mode ;
struct MCW_imseq * record_imseq ;
MRI_IMARR * record_imarr ;
MEM_plotdata ** record_mplot ; /* 05 Jan 2005 */
MCW_bbox * save_one_bbox ; /* 26 Jul 2001 */
MCW_bbox * save_agif_bbox ; /* 27 Jul 2001 */
float clbot,cltop , barbot,bartop ; /* 29 Jul 2001 */
MEM_plotdata * mplot ; /* 19 Sep 2001 */
MCW_bbox * wbar_plots_bbox ; /* 20 Sep 2001 */
MCW_arrowval * wbar_label_av ; /* 20 Sep 2001 */
MCW_arrowval * wbar_labsz_av ; /* 21 Sep 2001 */
Widget zoom_sep /* 11 Mar 2002 */;
MCW_arrowval *zoom_val_av ;
Widget zoom_drag_pb ;
int zoom_fac ;
float zoom_hor_off, zoom_ver_off ;
int zoom_pw , zoom_ph ;
Pixmap zoom_pixmap ;
XImage *zoom_xim ;
int zoom_button1 , zoom_xp,zoom_yp ; /* 15 Mar 2002 */
int cropit , crop_xa,crop_xb , crop_ya,crop_yb ; /* 11 Jun 2002 */
int crop_nxorg , crop_nyorg , crop_allowed ;
Widget crop_drag_pb ; /* 17 Jun 2002 */
int crop_drag ;
int button2_width ; /* 08 Oct 2002 */
int cursor_state ; /* 10 Mar 2003 */
MCW_bbox *pen_bbox ; /* 18 Jul 2003 */
int last_bx,last_by ; /* 23 Oct 2003 */
int cmap_changed ;
int do_graymap ; /* 24 Oct 2003 */
MEM_topshell_data * graymap_mtd ;
Widget wbar_graymap_pb ;
XtIntervalId timer_id ; /* 03 Dec 2003 */
int timer_func, timer_param, timer_delay ;
int dont_place_dialog ; /* 23 Jan 2004 */
MCW_arrowval *wbar_ticnum_av, *wbar_ticsiz_av ; /* 23 Feb 2004 */
float last_dx , last_dy ; /* 08 Jun 2004 */
float rgb_gamma ; /* 25 Apr 2005 */
float rgb_offset ;
char scl_label[16] ; /* 02 Nov 2005 */
} MCW_imseq ;
#define ISQ_TIMERFUNC_INDEX 701
#define ISQ_TIMERFUNC_BOUNCE 702
extern void ISQ_timer_CB( XtPointer , XtIntervalId * ) ; /* 03 Dec 2003 */
extern void ISQ_timer_stop( MCW_imseq * ) ;
extern void ISQ_zoom_av_CB( MCW_arrowval *, XtPointer ) ;
extern void ISQ_zoom_pb_CB( Widget, XtPointer, XtPointer ) ;
extern void ISQ_crop_pb_CB( Widget, XtPointer, XtPointer ) ;
extern void ISQ_actually_pan( MCW_imseq * , int , int ) ;
extern int ISQ_show_zoom( MCW_imseq *seq ) ;
#define CURSOR_NORMAL 0 /* 10 Mar 2003 */
#define CURSOR_PENCIL 1
#define CURSOR_CROSSHAIR 2 /* 18 Jul 2003 */
extern void ISQ_set_cursor_state( MCW_imseq * , int ) ;
extern void ISQ_pen_bbox_CB( Widget, XtPointer, XtPointer ) ; /* 18 Jul 2003 */
/*--------------------------------------------------------------------*/
#define ISQ_LABEL_OFF 0 /* 20 Sep 2001 */
#define ISQ_LABEL_UPLF 1
#define ISQ_LABEL_UPRT 2
#define ISQ_LABEL_DNLF 3
#define ISQ_LABEL_DNRT 4
#define ISQ_LABEL_UPMD 5
#define ISQ_LABEL_DNMD 6
/*--------------------------------------------------------------------*/
#define ISQ_USE_SIDES(isq) ( (isq)->winfo_sides[0][0] != '\0' || \
(isq)->winfo_sides[1][0] != '\0' || \
(isq)->winfo_sides[2][0] != '\0' || \
(isq)->winfo_sides[3][0] != '\0' )
/***---------- prototypes: user callable ----------***/
extern MCW_imseq * open_MCW_imseq( MCW_DC * , get_ptr , XtPointer ) ;
/* Drive Reasons for the next routine */
#define isqDR_imhelptext 101
#define isqDR_options 102
#define isqDR_numtotal 103
#define isqDR_cursor 104
#define isqDR_unrealize 105
#define isqDR_realize 106
#define isqDR_display 107
#define isqDR_overlay 108
#define isqDR_arrowpadon 109
#define isqDR_reimage 110
#define isqDR_reshow 111
#define isqDR_newseq 112
#define isqDR_arrowpadoff 113
#define isqDR_title 114
#define isqDR_clearstat 115
#define isqDR_onoffwid 116
#define isqDR_getimnr 117
#define isqDR_icon 118
#define isqDR_sendmontage 119
#define isqDR_periodicmont 120
#define isqDR_setmontage 121
#define isqDR_setifrac 130
#define isqDR_setrange 131
#define isqDR_bgicon 132
#define isqDR_arrowpadhint 201
#define isqDR_winfotext 202
#define isqDR_getoptions 203
#define isqDR_winfosides 204
#define isqDR_destroy 666
#define isqDR_offwid 0
#define isqDR_onwid 1
#define isqDR_togwid 2
#define isqDR_button2_enable 501
#define isqDR_button2_disable 502
#define isqDR_button2_pixel 503
#define isqDR_button2_mode 504
#define isqDR_button2_width 505
#define isqDR_ignore_redraws 521
#define isqDR_keypress 522 /* 18 Feb 2005 */
#define BUTTON2_OPENPOLY 0
#define BUTTON2_CLOSEDPOLY 1
#define BUTTON2_POINTS 2
#define BUTTON2_NODRAW 3
#define isqDR_rebar 602 /* 23 Aug 1998 */
#define isqDR_opacitybut 603 /* 07 Mar 2001 */
#define isqDR_record_mode 604 /* 24 Apr 2001 */
#define isqDR_record_disable 605 /* 24 Apr 2001 */
#define isqDR_zoombut 606 /* 11 Mar 2002 */
#define isqDR_getopacity 607 /* 21 Jan 2003 */
#define isqDR_setopacity 608 /* 21 Jan 2003 */
#define isqDR_setimsave 609 /* 23 Jan 2003 */
#define isqDR_penbbox 610 /* 18 Jul 2003 */
#define isqDR_get_crop 611 /* 03 May 2007 */
#define isqDR_set_crop 612 /* 03 May 2007 */
#define isqDR_plot_label 701 /* 20 Sep 2001 */
#define isqDR_plot_plot 702 /* 20 Sep 2001 */
#define isqDR_save_jpeg 703 /* 28 Jul 2005 */
#define isqDR_save_agif 704 /* 07 Dec 2006 */
#define isqDR_save_mpeg 705 /* 07 Dec 2006 */
#define isqDR_save_jpegall 706 /* 07 Dec 2006 */
#define isqDR_save_png 707 /* 11 Dec 2006 */
#define isqDR_save_filtered 708 /* 14 Dec 2006 */
#define isqDR_save_pngall 709 /* 15 Dec 2006 */
extern Boolean drive_MCW_imseq( MCW_imseq * , int , XtPointer ) ;
extern Boolean ISQ_setup_new( MCW_imseq * , XtPointer ) ;
/*** prototypes: internals ***/
extern void ISQ_redisplay( MCW_imseq * , int , int ) ;
extern MCW_imseq_status * ISQ_copy_status( MCW_imseq_status * ) ;
extern void ISQ_reset_dimen( MCW_imseq * , float , float ) ;
extern void ISQ_scale_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_wbar_plots_CB( Widget , XtPointer , XtPointer ) ; /* 20 Sep 2001 */
extern void ISQ_wbar_label_CB( MCW_arrowval * , XtPointer ) ;
extern void ISQ_wbar_menu_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_set_rng_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
extern void ISQ_set_zcol_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
extern void ISQ_set_flat_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
extern void ISQ_set_sharp_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
extern void ISQ_but_disp_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_but_save_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_but_done_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_but_color_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_but_cswap_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_but_cnorm_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_place_dialog( MCW_imseq * ) ; /* 05 Jan 1999 */
extern void ISQ_place_widget( Widget, Widget ) ; /* 27 Oct 2003 */
#undef REQUIRE_TWO_DONES
#ifdef REQUIRE_TWO_DONES
extern void ISQ_but_done_reset( MCW_imseq * ) ;
#else
# define ISQ_but_done_reset(xx) /* nada */
#endif
extern void ISQ_disp_act_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_drawing_EV( Widget , XtPointer , XEvent * , Boolean * ) ;
extern void ISQ_button2_EV( Widget , XtPointer , XEvent * , Boolean * ) ;
extern void ISQ_make_image( MCW_imseq * ) ;
extern void ISQ_show_image( MCW_imseq * ) ;
extern void ISQ_draw_winfo( MCW_imseq * ) ;
/* 06 Mar 2001 */
extern MRI_IMAGE * ISQ_overlay( MCW_DC *, MRI_IMAGE *, MRI_IMAGE *, float ) ;
#define ISQ_GOOD_OVERLAY_TYPE(dt) ( (dt)==MRI_short || (dt)==MRI_rgb )
/* 07 Mar 2001 */
extern void ISQ_opacity_CB( MCW_arrowval * , XtPointer ) ;
extern char * ISQ_opacity_label( int ) ;
extern MRI_IMAGE * ISQ_index_to_rgb( MCW_DC * , int , MRI_IMAGE * ) ;
#define ISQ_SKIP_OVERLAY(isq) ((isq)->opt.no_overlay || (isq)->ov_opacity == 0.0)
extern MRI_IMAGE * ISQ_manufacture_one( int nim , int overlay , MCW_imseq * seq ) ;
extern void ISQ_make_montage( MCW_imseq * ) ;
extern void ISQ_make_bar( MCW_imseq * ) ;
extern void ISQ_show_bar( MCW_imseq * ) ;
extern void ISQ_set_barhint( MCW_imseq * , char * ) ; /* 29 Jul 2001 */
extern MRI_IMAGE * ISQ_process_mri( int , MCW_imseq * , MRI_IMAGE * ) ;
extern MRI_IMAGE * ISQ_getimage ( int , MCW_imseq * ) ; /* 31 Jan 2002 */
extern MRI_IMAGE * ISQ_getoverlay( int , MCW_imseq * ) ; /* 11 Jun 2002 */
extern MEM_plotdata * ISQ_getmemplot( int , MCW_imseq * ) ;
extern char * ISQ_getlabel ( int , MCW_imseq * ) ;
extern void ISQ_free_alldata( MCW_imseq * ) ;
extern int ISQ_set_image_number( MCW_imseq * , int ) ;
extern Boolean ISQ_disp_options( MCW_imseq * , Boolean ) ;
/* type for defining buttons */
typedef struct {
char * name ;
XtCallbackProc func_CB ;
XtPointer parent , aux ;
} ISQ_bdef ;
Boolean ISQ_statistics_WP( XtPointer ) ;
void ISQ_statify_one( MCW_imseq * , int , MRI_IMAGE * ) ;
void ISQ_statify_all( MCW_imseq * , Boolean ) ;
void ISQ_perpoints( float,float , int h[] , float * , float * ) ;
void ISQ_mapxy ( MCW_imseq * , int,int , int *,int *,int * ) ;
void ISQ_flipxy ( MCW_imseq * , int *,int * ) ;
void ISQ_unflipxy( MCW_imseq * , int *,int * ) ;
void ISQ_arrow_CB( MCW_arrowval * , XtPointer ) ;
void ISQ_arrowpad_CB( MCW_arrowpad * , XtPointer ) ;
extern void ISQ_transform_CB ( MCW_arrowval * , XtPointer ) ;
extern char * ISQ_transform_label( MCW_arrowval * , XtPointer ) ;
extern void ISQ_slice_proj_CB ( MCW_arrowval * , XtPointer ) ;
#define ROWGRAPH_MAX 9
#define SURFGRAPH_MAX 2
#define ROWGRAPH_MASK 1
#define SURFGRAPH_MASK 2
#define GRAYMAP_MASK 4 /* 24 Oct 2003 */
extern void ISQ_rowgraph_CB ( MCW_arrowval * , XtPointer ) ;
extern char * ISQ_rowgraph_label( MCW_arrowval * , XtPointer ) ;
extern void ISQ_rowgraph_draw( MCW_imseq * seq ) ;
extern void ISQ_rowgraph_mtdkill( MEM_topshell_data * mp ) ;
extern void ISQ_graymap_draw( MCW_imseq * seq ) ; /* 24 Oct 2003 */
extern void ISQ_graymap_mtdkill( MEM_topshell_data * mp ) ;
extern void ISQ_surfgraph_CB ( MCW_arrowval * , XtPointer ) ;
extern char * ISQ_surfgraph_label( MCW_arrowval * , XtPointer ) ;
extern void ISQ_surfgraph_draw( MCW_imseq * seq ) ;
extern void ISQ_surfgraph_mtdkill( MEM_topshell_data * mp ) ;
extern MEM_plotdata * plot_image_surface( MRI_IMAGE * , float,float,float,int,int ) ;
extern void ISQ_surfgraph_arrowpad_CB( MCW_arrowpad * , XtPointer ) ;
/*---- temporary, I hope (yeah, sure, right, uh huh) ----*/
extern void ISQ_saver_CB( Widget , XtPointer , MCW_choose_cbs * ) ;
extern MEM_plotdata * ISQ_plot_label( MCW_imseq *, char * ) ; /* 20 Sep 2001 */
/*---- 24 Apr 2001: recording stuff ----*/
#define RECORD_STATUS_OFF (1<<0)
#define RECORD_STATUS_NEXTONE (1<<1)
#define RECORD_STATUS_ON (1<<2)
#define RECORD_ISON(ib) ((ib) > RECORD_STATUS_OFF)
#define RECORD_METHOD_AFTEREND (1<<0)
#define RECORD_METHOD_BEFORESTART (1<<1)
#define RECORD_METHOD_INSERT_MM (1<<2)
#define RECORD_METHOD_INSERT_PP (1<<3)
#define RECORD_METHOD_OVERWRITE (1<<4)
#define RECORD_METHOD_OVERWRITE_MM (1<<5)
#define RECORD_METHOD_OVERWRITE_PP (1<<6)
extern void ISQ_record_button( MCW_imseq * ) ;
extern void ISQ_record_CB( Widget,XtPointer,XtPointer ) ;
extern void ISQ_butsave_EV( Widget, XtPointer, XEvent *, Boolean * ) ;
extern void ISQ_record_open( MCW_imseq * ) ;
extern void ISQ_record_update( MCW_imseq * , int ) ;
extern void ISQ_record_addim( MCW_imseq * , int,int ) ;
extern XtPointer ISQ_record_getim( int , int , XtPointer ) ;
extern void ISQ_record_send_CB( MCW_imseq * , XtPointer , ISQ_cbs * ) ;
extern void ISQ_record_kill_CB( Widget , XtPointer , XtPointer ) ;
extern void ISQ_remove_widget( MCW_imseq * , Widget ) ;
extern void ISQ_cropper( MCW_imseq *, XButtonEvent *) ; /* 17 Jun 2002 */
#define MINCROP 9 /* moved here 03 May 2007 */
extern void ISQ_snapshot( Widget w ) ; /* 18 Jun 2003 */
extern void ISQ_snapsave( int,int, byte *, Widget ) ; /* 03 Jul 2003 */
extern void ISQ_snap_agif( char * ) ; /* 06 Dec 2006 */
extern void ISQ_snap_mpeg( char * ) ;
extern void ISQ_snap_jpeg( char * ) ;
extern void ISQ_snap_png ( char * ) ;
extern void ISQ_snap_agif_rng( char *,int,int ) ; /* 07 Dec 2006 */
extern void ISQ_snap_mpeg_rng( char *,int,int ) ;
extern void ISQ_snap_jpeg_rng( char *,int,int ) ;
extern void ISQ_snap_png_rng ( char *,int,int ) ;
extern int ISQ_handle_keypress( MCW_imseq * , unsigned long ); /* 18 Feb 2005 */
extern void mri_rgb_transform_nD( MRI_IMAGE *, int, generic_func * ) ;
extern void ISQ_save_jpeg( MCW_imseq *seq , char *fname ) ; /* 28 Jul 2005 */
extern void ISQ_save_png ( MCW_imseq *seq , char *fname ) ; /* 11 Dec 2006 */
extern void ISQ_save_anim( MCW_imseq *, char *, int,int,int ); /* 06 Dec 2006 */
extern void ISQ_save_image( MCW_imseq *, char *, char *, char *); /* 11 Dec 2006 */
extern void ISQ_setup_ppmto_filters(void); /* 11 May 2006 */
void SNAP_NoDuplicates (void);
void SNAP_OkDuplicates (void);
#ifdef __cplusplus
}
#endif
#endif /* _MCW_IMSEQ_HEADER_ */
syntax highlighted by Code2HTML, v. 0.9.1