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_graph.c File Reference

#include "afni_graph.h"
#include "afni.h"
#include <X11/keysym.h>

Go to the source code of this file.


Defines

#define CALL_getser(gr, aa, bb, rtyp, rval)
#define CALL_sendback(gr, scb)
#define MENU_DLINE(wmenu)
#define MENU_SLINE(wmenu)
#define OPT_MENU_BUT(wname, label, hhh)
#define OPT_MENU_PULLRIGHT(wmenu, wcbut, label, hhh)
#define OPT_MENU_PULL_BUT(wmenu, wname, label, hhh)
#define OPT_MENU_OPTMENU(wmenu, wname, label, cb, hhh)
#define COLSIZE   AV_colsize()
#define NCIR   12
#define NBAL   21
#define NBAX   25
#define NBTOP   NBAX
#define SHORT_NAME_WIDTH   384
#define GRID_MAX   12
#define OVI_MAX   19
#define NPLOT_INIT   9999
#define XPIX(ii)
#define REFTS_FRAC   0.38
#define REFTS_TOP   0.98
#define ORTTS_FRAC   0.38
#define ORTTS_TOP   0.78
#define SETSHIFT_quit_label   "Quit"
#define SETSHIFT_apply_label   "Apply"
#define SETSHIFT_done_label   "Set"
#define SETSHIFT_quit_help   "Press to close\nthis control box"
#define SETSHIFT_apply_help   "Press to apply this choice\nand keep this control box"
#define SETSHIFT_done_help   "Press to apply this choice\nand close this control box"
#define NUM_SETSHIFT_ACT   3
#define SETSHIFT_QUIT   0
#define SETSHIFT_APPLY   1
#define SETSHIFT_DONE   2
#define MENU_DLINE(wmenu)
#define MENU_SLINE(wmenu)
#define FIM_MENU_BUT(wname, label, hhh)
#define FIM_MENU_PULLRIGHT(wmenu, wcbut, label, hhh)
#define FIM_MENU_PULL_BUT(wmenu, wname, label, hhh)
#define EMPTY_BUT(wname)   fmenu -> wname = NULL
#define FIM_MENU_QBUT(wname, label, qlab, hhh)

Functions

void fd_line (MCW_grapher *, int, int, int, int)
MCW_graphernew_MCW_grapher (MCW_DC *dc, get_ptr getser, XtPointer aux)
void end_fd_graph_CB (Widget w, XtPointer client_data, XtPointer call_data)
void erase_fdw (MCW_grapher *grapher)
void plot_fdX (MCW_grapher *grapher, int x, int y, int mod)
void fd_px_store (MCW_grapher *grapher)
void GRA_small_circle (MCW_grapher *grapher, int xwin, int ywin, int filled)
void GRA_overlay_circle (MCW_grapher *grapher, int xwin, int ywin, int filled)
void GRA_draw_circle (MCW_grapher *grapher, int xc, int yc, int rad)
void GRA_redraw_overlay (MCW_grapher *grapher)
void redraw_graph (MCW_grapher *grapher, int code)
void fd_txt (MCW_grapher *grapher, int x, int y, char *str)
void overlay_txt (MCW_grapher *grapher, int x, int y, char *str)
void auto_grid (MCW_grapher *grapher, int npoints)
void init_const (MCW_grapher *grapher)
void text_graphs (MCW_grapher *grapher)
void plot_graphs (MCW_grapher *grapher, int code)
void draw_grids (MCW_grapher *grapher)
void send_newinfo (MCW_grapher *grapher)
void init_mat (MCW_grapher *grapher)
void scale_up (MCW_grapher *grapher)
void scale_down (MCW_grapher *grapher)
void mat_down (MCW_grapher *grapher)
void mat_up (MCW_grapher *grapher)
void grid_down (MCW_grapher *grapher)
void grid_up (MCW_grapher *grapher)
void GRA_drawing_EV (Widget w, XtPointer client_data, XEvent *ev, Boolean *continue_to_dispatch)
void GRA_new_pixmap (MCW_grapher *grapher, int new_width, int new_height, int redraw)
void GRA_handle_keypress (MCW_grapher *grapher, char *buf, XEvent *ev)
void GRA_quit_timeout_CB (XtPointer client_data, XtIntervalId *id)
void GRA_opt_CB (Widget w, XtPointer client_data, XtPointer call_data)
void GRA_fixup_xaxis (MCW_grapher *grapher)
void GRA_pick_xaxis_CB (Widget wcall, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_wcsuffix_choose_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_mat_choose_CB (MCW_arrowval *cbs, XtPointer cd)
void GRA_scale_choose_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_grid_choose_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_pin_choose_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_ggap_CB (MCW_arrowval *cbs, XtPointer cd)
void GRA_gthick_CB (MCW_arrowval *cbs, XtPointer cd)
void GRA_slice_choose_CB (MCW_arrowval *cbs, XtPointer cd)
void GRA_ignore_choose_CB (MCW_arrowval *cbs, XtPointer cd)
void GRA_polort_choose_CB (MCW_arrowval *cbs, XtPointer cd)
void GRA_bkthr_choose_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_refread_choose_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_refstore_choose_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_refwrite_choose_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
Boolean drive_MCW_grapher (MCW_grapher *grapher, int drive_code, XtPointer drive_data)
void GRA_fim_CB (Widget w, XtPointer client_data, XtPointer call_data)
void GRA_setshift_startup (MCW_grapher *grapher)
void GRA_setshift_action_CB (Widget w, XtPointer client_data, XtPointer call_data)
void GRA_doshift (MCW_grapher *grapher)
FIM_menuAFNI_new_fim_menu (Widget parent, XtCallbackProc cbfunc, int graphable)
char * GRA_transform_label (MCW_arrowval *av, XtPointer cd)
void GRA_transform_CB (MCW_arrowval *av, XtPointer cd)
void GRA_textgraph_CB (Widget w, XtPointer client_data, XtPointer call_data)
void GRA_baseline_CB (Widget w, XtPointer client_data, XtPointer call_data)
void GRA_finalize_global_baseline_CB (Widget w, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_winaver_CB (Widget w, XtPointer client_data, XtPointer call_data)
void GRA_winavertimer_CB (XtPointer cd, XtIntervalId *id)
void GRA_winaver_setref (MCW_grapher *grapher)
void GRA_dplot_change_CB (Widget w, XtPointer client_data, XtPointer call_data)
void GRA_fix_optmenus (MCW_grapher *grapher)
void GRA_fmenu_av_CB (MCW_arrowval *av, XtPointer cd)
void GRA_color_CB (MCW_arrowval *av, XtPointer cd)
void GRA_thick_CB (Widget w, XtPointer cd, XtPointer call_data)
void GRA_saver_CB (Widget wcaller, XtPointer cd, MCW_choose_cbs *cbs)
void GRA_file_pixmap (MCW_grapher *grapher, char *fname)
void GRA_mapmenu_CB (Widget w, XtPointer client_data, XtPointer call_data)
void GRA_timer_CB (XtPointer cd, XtIntervalId *id)
void GRA_timer_stop (MCW_grapher *grapher)

Variables

int show_grapher_pixmap = 1
XPoint xball []
char * long_index_name = "index="
char * short_index_name = "#"
char * long_value_name = " value="
char * short_value_name = "="
char * long_time_name = " at "
char * short_time_name = "@"
int grid_ar [GRID_MAX]
MCW_action_item SETSHIFT_act [NUM_SETSHIFT_ACT]

Define Documentation

#define CALL_getser gr,
aa,
bb,
rtyp,
rval   
 

Value:

do{ XtPointer (*gs)(int,int,XtPointer) =                       \
      (XtPointer (*)(int,int,XtPointer))(gr->getser) ;          \
    rval = (rtyp) gs(aa,bb,gr->getaux) ;                        \
 } while(0)
Macro to call the getser function with correct prototype.

Definition at line 27 of file afni_graph.c.

Referenced by drive_MCW_grapher(), GRA_fim_CB(), GRA_handle_keypress(), new_MCW_grapher(), plot_graphs(), and text_graphs().

#define CALL_sendback gr,
scb   
 

Value:

do{ void (*sb)(MCW_grapher *,XtPointer,GRA_cbs *) =                          \
      (void (*)(MCW_grapher *,XtPointer,GRA_cbs *))(gr->status->send_CB) ;    \
     if( sb != NULL ) sb(gr,gr->getaux,&scb) ;                                \
 } while(0)
And to call the send_CB function with a good prototype.

Definition at line 37 of file afni_graph.c.

Referenced by end_fd_graph_CB(), GRA_doshift(), GRA_drawing_EV(), GRA_fim_CB(), GRA_handle_keypress(), GRA_ignore_choose_CB(), GRA_polort_choose_CB(), GRA_refread_choose_CB(), GRA_refwrite_choose_CB(), GRA_timer_CB(), GRA_winaver_CB(), GRA_winavertimer_CB(), and send_newinfo().

#define COLSIZE   AV_colsize()
 

#define EMPTY_BUT wname       fmenu -> wname = NULL
 

#define FIM_MENU_BUT wname,
label,
hhh   
 

Value:

fmenu -> wname =                                                \
         XtVaCreateManagedWidget(                                  \
            "dialog" , xmPushButtonWidgetClass , fmenu->fim_menu , \
               LABEL_ARG( label ) ,                                \
               XmNmarginHeight , 0 ,                               \
               XmNtraversalOn , False ,                            \
               XmNinitialResourcesPersistent , False ,             \
            NULL ) ;                                               \
      XtAddCallback( fmenu -> wname , XmNactivateCallback ,        \
                     cbfunc , (XtPointer) fmenu ) ;                \
      MCW_register_hint( fmenu -> wname , hhh ) ;

#define FIM_MENU_PULL_BUT wmenu,
wname,
label,
hhh   
 

Value:

fmenu -> wname =                                               \
         XtVaCreateManagedWidget(                                 \
            "dialog" , xmPushButtonWidgetClass , fmenu -> wmenu , \
               LABEL_ARG( label ) ,                               \
               XmNmarginHeight , 0 ,                              \
               XmNtraversalOn , False ,                           \
               XmNinitialResourcesPersistent , False ,            \
            NULL ) ;                                              \
      XtAddCallback( fmenu -> wname , XmNactivateCallback ,       \
                     cbfunc , (XtPointer) fmenu ) ;               \
      MCW_register_hint( fmenu -> wname , hhh ) ;

#define FIM_MENU_PULLRIGHT wmenu,
wcbut,
label,
hhh   
 

Value:

fmenu -> wmenu =                                                \
     XmCreatePulldownMenu( fmenu->fim_menu , "menu" , NULL , 0 ) ; \
   fmenu -> wcbut =                                                \
     XtVaCreateManagedWidget(                                      \
       "dialog" , xmCascadeButtonWidgetClass , fmenu->fim_menu ,   \
          LABEL_ARG( label ) ,                                     \
          XmNsubMenuId , fmenu -> wmenu ,                          \
          XmNtraversalOn , False ,                                 \
          XmNinitialResourcesPersistent , False ,                  \
       NULL ) ;                                                    \
   MCW_register_hint( fmenu -> wcbut , hhh ) ;                     \
   XtAddCallback( fmenu -> wmenu, XmNmapCallback, GRA_mapmenu_CB, NULL ) ;

#define FIM_MENU_QBUT wname,
label,
qlab,
hhh   
 

Value:

do { Widget ccc ;                                                        \
      qbut_menu = XmCreatePulldownMenu(fmenu->fim_menu,"menu",NULL,0);    \
            ccc = XtVaCreateManagedWidget( "dialog" ,                     \
                     xmCascadeButtonWidgetClass , fmenu->fim_menu ,       \
                     LABEL_ARG( label ) ,                                 \
                     XmNsubMenuId , qbut_menu ,                           \
                     XmNtraversalOn , False ,                             \
                     XmNinitialResourcesPersistent , False , NULL ) ;     \
      fmenu -> wname = XtVaCreateManagedWidget( "dialog" ,                \
                         xmPushButtonWidgetClass , qbut_menu ,            \
                         LABEL_ARG( qlab ) ,                              \
                         XmNmarginHeight , 0 ,                            \
                         XmNtraversalOn , False ,                         \
                         XmNinitialResourcesPersistent , False , NULL ) ; \
      MCW_register_hint( fmenu -> wname , hhh ) ;                         \
      XtAddCallback( fmenu -> wname , XmNactivateCallback ,               \
                     cbfunc , (XtPointer) fmenu ) ;                       \
      XtAddCallback( qbut_menu, XmNmapCallback, GRA_mapmenu_CB, NULL ) ;  \
 } while(0)

#define GRID_MAX   12
 

Definition at line 1524 of file afni_graph.c.

Referenced by auto_grid(), GRA_opt_CB(), and grid_up().

#define MENU_DLINE wmenu   
 

Value:

(void) XtVaCreateManagedWidget(                               \
            "dialog" , xmSeparatorWidgetClass , fmenu -> wmenu , \
             XmNseparatorType , XmDOUBLE_LINE , NULL )

#define MENU_DLINE wmenu   
 

Value:

(void) XtVaCreateManagedWidget(                                 \
            "dialog" , xmSeparatorWidgetClass , grapher -> wmenu , \
             XmNseparatorType , XmDOUBLE_LINE , NULL )

#define MENU_SLINE wmenu   
 

Value:

(void) XtVaCreateManagedWidget(                               \
            "dialog" , xmSeparatorWidgetClass , fmenu -> wmenu , \
             XmNseparatorType , XmSINGLE_LINE , NULL )

#define MENU_SLINE wmenu   
 

Value:

(void) XtVaCreateManagedWidget(                                 \
            "dialog" , xmSeparatorWidgetClass , grapher -> wmenu , \
             XmNseparatorType , XmSINGLE_LINE , NULL )

#define NBAL   21
 

Definition at line 1116 of file afni_graph.c.

Referenced by GRA_overlay_circle(), and GRA_small_circle().

#define NBAX   25
 

Definition at line 1117 of file afni_graph.c.

Referenced by GRA_overlay_circle(), and GRA_small_circle().

#define NBTOP   NBAX
 

Definition at line 1119 of file afni_graph.c.

Referenced by GRA_overlay_circle(), and GRA_small_circle().

#define NCIR   12
 

Definition at line 1115 of file afni_graph.c.

Referenced by GRA_overlay_circle(), and GRA_small_circle().

#define NPLOT_INIT   9999
 

#define NUM_SETSHIFT_ACT   3
 

Definition at line 4844 of file afni_graph.c.

Referenced by GRA_setshift_action_CB(), and GRA_setshift_startup().

#define OPT_MENU_BUT wname,
label,
hhh   
 

Value:

grapher -> wname =                                                \
         XtVaCreateManagedWidget(                                    \
            "dialog" , xmPushButtonWidgetClass , grapher->opt_menu , \
               LABEL_ARG( label ) ,                                  \
               XmNmarginHeight , 0 ,                                 \
               XmNtraversalOn , False ,                              \
               XmNinitialResourcesPersistent , False ,               \
            NULL ) ;                                                 \
      XtAddCallback( grapher -> wname , XmNactivateCallback ,        \
                     GRA_opt_CB , (XtPointer) grapher ) ;            \
      MCW_register_hint( grapher -> wname , hhh ) ;

#define OPT_MENU_OPTMENU wmenu,
wname,
label,
cb,
hhh   
 

Value:

grapher -> wname =                                               \
      new_MCW_optmenu( grapher -> wmenu , label , 0,1,0,0 ,         \
                       cb , (XtPointer) grapher , NULL , NULL ) ;   \
   MCW_reghint_children( grapher -> wname -> wrowcol , hhh ) ;

#define OPT_MENU_PULL_BUT wmenu,
wname,
label,
hhh   
 

Value:

grapher -> wname =                                               \
         XtVaCreateManagedWidget(                                   \
            "dialog" , xmPushButtonWidgetClass , grapher -> wmenu , \
               LABEL_ARG( label ) ,                                 \
               XmNmarginHeight , 0 ,                                \
               XmNtraversalOn , False ,                             \
               XmNinitialResourcesPersistent , False ,              \
            NULL ) ;                                                \
      XtAddCallback( grapher -> wname , XmNactivateCallback ,       \
                     GRA_opt_CB , (XtPointer) grapher ) ;           \
   MCW_register_hint( grapher -> wname , hhh ) ;

#define OPT_MENU_PULLRIGHT wmenu,
wcbut,
label,
hhh   
 

Value:

grapher -> wmenu =                                                  \
     XmCreatePulldownMenu( grapher->opt_menu , "menu" , NULL , 0 ) ;   \
   grapher -> wcbut =                                                  \
     XtVaCreateManagedWidget(                                          \
       "dialog" , xmCascadeButtonWidgetClass , grapher->opt_menu ,     \
          LABEL_ARG( label ) ,                                         \
          XmNsubMenuId , grapher -> wmenu ,                            \
          XmNtraversalOn , False ,                                     \
          XmNinitialResourcesPersistent , False ,                      \
       NULL ) ;                                                        \
   MCW_register_hint( grapher -> wcbut , hhh ) ;                       \
   XtAddCallback( grapher -> wmenu, XmNmapCallback, GRA_mapmenu_CB, NULL ) ;

#define ORTTS_FRAC   0.38
 

#define ORTTS_TOP   0.78
 

#define OVI_MAX   19
 

#define REFTS_FRAC   0.38
 

#define REFTS_TOP   0.98
 

#define SETSHIFT_APPLY   1
 

Definition at line 4853 of file afni_graph.c.

Referenced by GRA_setshift_action_CB().

#define SETSHIFT_apply_help   "Press to apply this choice\nand keep this control box"
 

Definition at line 4841 of file afni_graph.c.

#define SETSHIFT_apply_label   "Apply"
 

Definition at line 4837 of file afni_graph.c.

#define SETSHIFT_DONE   2
 

Definition at line 4854 of file afni_graph.c.

Referenced by GRA_setshift_action_CB().

#define SETSHIFT_done_help   "Press to apply this choice\nand close this control box"
 

Definition at line 4842 of file afni_graph.c.

#define SETSHIFT_done_label   "Set"
 

Definition at line 4838 of file afni_graph.c.

#define SETSHIFT_QUIT   0
 

Definition at line 4852 of file afni_graph.c.

Referenced by GRA_setshift_action_CB().

#define SETSHIFT_quit_help   "Press to close\nthis control box"
 

Definition at line 4840 of file afni_graph.c.

#define SETSHIFT_quit_label   "Quit"
 

Definition at line 4836 of file afni_graph.c.

#define SHORT_NAME_WIDTH   384
 

Definition at line 1199 of file afni_graph.c.

Referenced by GRA_redraw_overlay().

#define XPIX ii   
 

Value:

( (grapher->xax_tsim != NULL && (ii) < grapher->xax_tsim->nx)        \
     ? (MRI_FLOAT_PTR(grapher->xax_tsim)[MAX((ii),ibot)] * grapher->gx) \
     : (((ii)-pbot) * ftemp) )

Function Documentation

FIM_menu* AFNI_new_fim_menu Widget    parent,
XtCallbackProc    cbfunc,
int    graphable
 

Definition at line 5112 of file afni_graph.c.

References FIM_menu::cbfunc, ENTRY, FIM_menu::fim_cbut, FIM_DEFAULT_MASK, FIM_menu::fim_editref_menu, FIM_menu::fim_editref_winaver_bbox, FIM_menu::fim_execfimp_pb, FIM_menu::fim_execute_pb, FIM_menu::fim_ignore_choose_av, FIM_menu::fim_ignore_choose_pb, FIM_menu::fim_ignore_menu, FIM_menu::fim_menu, FIM_NUM_OPTS, FIM_menu::fim_opt_bbox, fim_opt_labels, FIM_menu::fim_polort_choose_av, FIM_menu::fim_polort_choose_pb, FIM_menu::fimp_opt_bbox, FIM_menu::fimp_setall_pb, FIM_menu::fimp_setdefault_pb, FIM_menu::fimp_unsetall_pb, FIM_menu::fimp_user_bbox, GLOBAL_library, GRA_fmenu_av_CB(), GRA_winaver_CB(), LABEL_ARG, MCW_function_list::labels, MCW_BB_check, MCW_BB_noframe, MCW_BB_radio_one, MCW_reghint_children(), MCW_register_help(), MCW_register_hint(), MCW_set_bbox(), MCW_set_widget_bg(), my_getenv(), myXtNew, new_MCW_bbox(), new_MCW_optmenu(), MCW_function_list::num, AFNI_library_type::registered_fim, RETURN, VISIBILIZE_WHEN_MAPPED, MCW_bbox::wrowcol, and MCW_arrowval::wrowcol.

Referenced by new_MCW_grapher().

05113 {
05114    FIM_menu *fmenu ;
05115    Widget qbut_menu = NULL ;
05116 
05117 ENTRY("AFNI_new_fim_menu") ;
05118 
05119    fmenu = myXtNew(FIM_menu) ;
05120    fmenu->cbfunc = cbfunc ;
05121 
05122    /*------------------------*/
05123    /*--- FIM Menu Buttons ---*/
05124    /*------------------------*/
05125 
05126    fmenu->fim_menu =
05127          XmCreatePulldownMenu( parent , "menu" , NULL,0 ) ;
05128 
05129    VISIBILIZE_WHEN_MAPPED(fmenu->fim_menu) ;  /* 27 Sep 2000 */
05130 
05131    fmenu->fim_cbut =
05132          XtVaCreateManagedWidget(
05133             "dialog" , xmCascadeButtonWidgetClass , parent ,
05134                LABEL_ARG("FIM") ,
05135                XmNsubMenuId , fmenu->fim_menu ,
05136                XmNmarginWidth  , 0 ,
05137                XmNmarginHeight , 0 ,
05138                XmNmarginBottom , 0 ,
05139                XmNmarginTop    , 0 ,
05140                XmNmarginRight  , 0 ,
05141                XmNmarginLeft   , 0 ,
05142                XmNtraversalOn  , False ,
05143                XmNinitialResourcesPersistent , False ,
05144             NULL ) ;
05145 
05146    if( graphable ){
05147       MCW_register_hint( fmenu->fim_cbut , "Functional Imaging menu" ) ;
05148       MCW_register_help( fmenu->fim_cbut ,
05149                       "*******  Functional Imaging Controls:  *******\n"
05150                       "\n"
05151                       "Ideal Vector Operations:\n"
05152                       " Pick Ideal --> Choose from a list\n"
05153                       " Pick Ort   --> Choose from a list\n"
05154                       " Edit: = Center --> Use voxel timeseries\n"
05155                       "      += Center --> Average with voxel\n"
05156                       "      Smooth    --> A 3 point filter\n"
05157                       "      Shift     --> Time-shifted copies\n"
05158                       "      Clear     --> Turn ideal off\n"
05159                       "      WinAver   --> Average of sub-graphs\n"
05160                       "      Read      --> Input from external file\n"
05161                       "      Write     --> Output to external file\n"
05162                       "      Store     --> Save in internal list\n"
05163                       " Ignore: Set how many points to ignore\n"
05164                       "         at beginning of time series\n"
05165                       "         [ Applies both to graphing ]\n"
05166                       "         [ and to FIM computations. ]\n"
05167                       "\n"
05168                       "FIM Plots:\n"
05169                       "  Can choose to graph only first vector in\n"
05170                       "  ideal family, or all of them superimposed.\n"
05171                       "\n"
05172                       "Refresh Freq --> Choose number of time steps\n"
05173                       "   between redisplay of the functional overlay\n"
05174                       "   during FIM computations (0 == no redisplay).\n"
05175                       "Compute FIM  --> Use the recursive method to\n"
05176                       "   compute the correlation of each voxel time\n"
05177                       "   series with each ideal vector;  uses the best\n"
05178                       "   correlation as the 'correct' waveform for\n"
05179                       "   each voxel, individually.  Time points that\n"
05180                       "   have an ideal vector value >= 33333 will be\n"
05181                       "   ignored in the computations, as will those\n"
05182                       "   at the beginning specified in the Opt menu\n"
05183                       "   'Ignore' function."
05184                     ) ;
05185    } else {
05186       MCW_register_hint( fmenu->fim_cbut , "Functional Imaging menu" ) ;
05187       MCW_register_help( fmenu->fim_cbut ,
05188                       "*******  Functional Imaging Controls:  *******\n"
05189                       "\n"
05190                       "Pick Dataset --> Choose time-dependent dataset\n"
05191                       "   from a list.  If there is only one possible\n"
05192                       "   choice, it will be selected for you without\n"
05193                       "   displaying the list.\n"
05194                       "\n"
05195                       "Pick Ideal --> Choose time series from a list.\n"
05196                       "Pick Ort   --> Choose time series from a list.\n"
05197                       "\n"
05198                       "Ignore --> Set how many points to ignore at the\n"
05199                       "   beginning of time series.\n"
05200                       "   [ Applies both to graphing and FIM-ing. ]\n"
05201                       "\n"
05202                       "Refresh Freq --> Choose number of time steps\n"
05203                       "   between redisplay of the functional overlay\n"
05204                       "   during FIM computations (0 == no redisplay).\n"
05205                       "\n"
05206                       "Compute FIM --> Use the recursive method to\n"
05207                       "   compute the correlation of each voxel time\n"
05208                       "   series with each ideal vector;  uses the best\n"
05209                       "   correlation as the 'correct' waveform for\n"
05210                       "   each voxel, individually.  Time points that\n"
05211                       "   have an ideal vector value >= 33333 will be\n"
05212                       "   ignored in the computations, as will those\n"
05213                       "   at the beginning specified in the Opt menu\n"
05214                       "   'Ignore' function."
05215                     ) ;
05216    }
05217 
05218    /* macros to put double and single separator lines in a menu */
05219 
05220 #undef MENU_DLINE
05221 #define MENU_DLINE(wmenu)                                        \
05222    (void) XtVaCreateManagedWidget(                               \
05223             "dialog" , xmSeparatorWidgetClass , fmenu -> wmenu , \
05224              XmNseparatorType , XmDOUBLE_LINE , NULL )
05225 
05226 #undef MENU_SLINE
05227 #define MENU_SLINE(wmenu)                                        \
05228    (void) XtVaCreateManagedWidget(                               \
05229             "dialog" , xmSeparatorWidgetClass , fmenu -> wmenu , \
05230              XmNseparatorType , XmSINGLE_LINE , NULL )
05231 
05232    /* macro to create a new FIM menu button */
05233 
05234 #define FIM_MENU_BUT(wname,label,hhh)                              \
05235    fmenu -> wname =                                                \
05236          XtVaCreateManagedWidget(                                  \
05237             "dialog" , xmPushButtonWidgetClass , fmenu->fim_menu , \
05238                LABEL_ARG( label ) ,                                \
05239                XmNmarginHeight , 0 ,                               \
05240                XmNtraversalOn , False ,                            \
05241                XmNinitialResourcesPersistent , False ,             \
05242             NULL ) ;                                               \
05243       XtAddCallback( fmenu -> wname , XmNactivateCallback ,        \
05244                      cbfunc , (XtPointer) fmenu ) ;                \
05245       MCW_register_hint( fmenu -> wname , hhh ) ;
05246 
05247    /** macro to create a new fim pullright menu **/
05248    /** 07 Jan 1999: added the mapCallback to fix position **/
05249 
05250 #define FIM_MENU_PULLRIGHT(wmenu,wcbut,label,hhh)                  \
05251    fmenu -> wmenu =                                                \
05252      XmCreatePulldownMenu( fmenu->fim_menu , "menu" , NULL , 0 ) ; \
05253    fmenu -> wcbut =                                                \
05254      XtVaCreateManagedWidget(                                      \
05255        "dialog" , xmCascadeButtonWidgetClass , fmenu->fim_menu ,   \
05256           LABEL_ARG( label ) ,                                     \
05257           XmNsubMenuId , fmenu -> wmenu ,                          \
05258           XmNtraversalOn , False ,                                 \
05259           XmNinitialResourcesPersistent , False ,                  \
05260        NULL ) ;                                                    \
05261    MCW_register_hint( fmenu -> wcbut , hhh ) ;                     \
05262    XtAddCallback( fmenu -> wmenu, XmNmapCallback, GRA_mapmenu_CB, NULL ) ;
05263 
05264    /** macro to create a new button on a pullright menu **/
05265 
05266 #define FIM_MENU_PULL_BUT(wmenu,wname,label,hhh)                  \
05267    fmenu -> wname =                                               \
05268          XtVaCreateManagedWidget(                                 \
05269             "dialog" , xmPushButtonWidgetClass , fmenu -> wmenu , \
05270                LABEL_ARG( label ) ,                               \
05271                XmNmarginHeight , 0 ,                              \
05272                XmNtraversalOn , False ,                           \
05273                XmNinitialResourcesPersistent , False ,            \
05274             NULL ) ;                                              \
05275       XtAddCallback( fmenu -> wname , XmNactivateCallback ,       \
05276                      cbfunc , (XtPointer) fmenu ) ;               \
05277       MCW_register_hint( fmenu -> wname , hhh ) ;
05278 
05279 #define EMPTY_BUT(wname) fmenu -> wname = NULL
05280 
05281    /** 15 Dec 1997: a pullright menu with a single button **/
05282 
05283 #define FIM_MENU_QBUT(wname,label,qlab,hhh)                               \
05284  do { Widget ccc ;                                                        \
05285       qbut_menu = XmCreatePulldownMenu(fmenu->fim_menu,"menu",NULL,0);    \
05286             ccc = XtVaCreateManagedWidget( "dialog" ,                     \
05287                      xmCascadeButtonWidgetClass , fmenu->fim_menu ,       \
05288                      LABEL_ARG( label ) ,                                 \
05289                      XmNsubMenuId , qbut_menu ,                           \
05290                      XmNtraversalOn , False ,                             \
05291                      XmNinitialResourcesPersistent , False , NULL ) ;     \
05292       fmenu -> wname = XtVaCreateManagedWidget( "dialog" ,                \
05293                          xmPushButtonWidgetClass , qbut_menu ,            \
05294                          LABEL_ARG( qlab ) ,                              \
05295                          XmNmarginHeight , 0 ,                            \
05296                          XmNtraversalOn , False ,                         \
05297                          XmNinitialResourcesPersistent , False , NULL ) ; \
05298       MCW_register_hint( fmenu -> wname , hhh ) ;                         \
05299       XtAddCallback( fmenu -> wname , XmNactivateCallback ,               \
05300                      cbfunc , (XtPointer) fmenu ) ;                       \
05301       XtAddCallback( qbut_menu, XmNmapCallback, GRA_mapmenu_CB, NULL ) ;  \
05302  } while(0)
05303 
05304    /*** top of menu = a label to click on that does nothing at all ***/
05305 
05306    (void) XtVaCreateManagedWidget(
05307             "dialog" , xmLabelWidgetClass , fmenu->fim_menu ,
05308                LABEL_ARG("--- Cancel ---") ,
05309                XmNrecomputeSize , False ,
05310                XmNinitialResourcesPersistent , False ,
05311             NULL ) ;
05312 
05313    MENU_SLINE(fim_menu) ;
05314 
05315    if( graphable ){
05316       EMPTY_BUT(fim_pickdset_pb) ;
05317    } else {
05318       FIM_MENU_BUT( fim_pickdset_pb , "Pick Dataset" , "Choose Dataset to Graph" ) ;
05319    }
05320 
05321    FIM_MENU_BUT( fim_pickref_pb , "Pick Ideal" , "Pick Ideal Timeseries to Graph" ) ;
05322    FIM_MENU_BUT( fim_pickort_pb , "Pick Ort"   , "Pick Ort Timeseries to Graph"   ) ;
05323 
05324    if( graphable ){
05325       char *bbox_label[1] = { "Ideal=WinAver" } ;
05326       MENU_SLINE(fim_menu) ;
05327       FIM_MENU_PULLRIGHT(fim_editref_menu,fim_editref_cbut       ,"Edit Ideal"    , "Modify Ideal Timeseries" ) ;
05328       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editref_equals_pb  ,"Ideal = Center", "Set to Center Sub-graph" ) ;
05329       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editref_add_pb     ,"Ideal+= Center", "Add in Center Sub-graph" ) ;
05330       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editref_smooth_pb  ,"Smooth Ideal"  , "Lowpass Filter Ideal"    ) ;
05331       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editref_setshift_pb,"Shift Ideal"   , "Time Shift Ideal"        ) ;
05332       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editref_clear_pb   ,"Clear Ideal"   , "Turn Ideal Off"          ) ;
05333       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editort_clear_pb   ,"Clear Ort"     , "Turn Ort Off"            ) ;
05334 
05335       fmenu->fim_editref_winaver_bbox                      /* 27 Jan 2004 */
05336        = new_MCW_bbox( fmenu->fim_editref_menu ,
05337                        1 , bbox_label , MCW_BB_check , MCW_BB_noframe ,
05338                        GRA_winaver_CB , (XtPointer)fmenu ) ;
05339       MCW_reghint_children( fmenu->fim_editref_winaver_bbox->wrowcol ,
05340                             "Ideal = Average of all Graphs in Window" ) ;
05341 #ifdef USE_OPTMENUS
05342       fmenu->fim_polort_choose_av =
05343          new_MCW_optmenu( fmenu->fim_editref_menu , "Polort " , 0,MAX_POLORT,1,0 ,
05344                           GRA_fmenu_av_CB , (XtPointer) fmenu , NULL , NULL ) ;
05345       fmenu->fim_polort_choose_pb = fmenu->fim_polort_choose_av->wrowcol ;
05346       MCW_reghint_children( fmenu->fim_polort_choose_av->wrowcol , "Order of Polynomial Baseline for FIM" ) ;
05347 #else
05348       FIM_MENU_PULL_BUT( fim_editref_menu,fim_polort_choose_pb ,"Polort?", "Order of Polynomial Baseline for FIM") ;
05349 #endif
05350       FIM_MENU_PULL_BUT( fim_editref_menu,fim_bkthr_choose_pb  ,"Bkg Thresh" , "Choose Background Threshold for FIM") ;
05351       MENU_SLINE        (fim_editref_menu) ;
05352       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editref_read_pb    ,"Read Ideal" , "Read from .1D file"   ) ;
05353       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editref_write_pb   ,"Write Ideal", "Write to .1D file"    ) ;
05354       FIM_MENU_PULL_BUT (fim_editref_menu,fim_editref_store_pb   ,"Store Ideal", "Save in internal list of timeseries" ) ;
05355    } else {
05356       EMPTY_BUT(fim_editref_cbut) ;
05357       EMPTY_BUT(fim_editref_equals_pb) ;
05358       EMPTY_BUT(fim_editref_add_pb) ;
05359       EMPTY_BUT(fim_editref_smooth_pb) ;
05360       EMPTY_BUT(fim_editref_setshift_pb) ;
05361       EMPTY_BUT(fim_editref_clear_pb) ;
05362       EMPTY_BUT(fim_editref_read_pb) ;
05363       EMPTY_BUT(fim_editref_write_pb) ;
05364       EMPTY_BUT(fim_editref_store_pb) ;
05365       EMPTY_BUT(fim_editort_clear_pb) ;
05366       EMPTY_BUT(fim_polort_choose_pb) ;
05367       fmenu->fim_editref_winaver_bbox = NULL ;  /* 27 Jan 2004 */
05368    }
05369 
05370    FIM_MENU_PULLRIGHT(fim_ignore_menu,fim_ignore_cbut      ,"Ignore", "Number of initial timepoints to ignore" ) ;
05371    FIM_MENU_PULL_BUT( fim_ignore_menu,fim_ignore_down_pb   ,"Down"  , "Ignore fewer points" ) ;
05372    FIM_MENU_PULL_BUT( fim_ignore_menu,fim_ignore_up_pb     ,"Up"    , "Ignore more points"  ) ;
05373 #ifdef USE_OPTMENUS
05374    fmenu->fim_ignore_choose_av =
05375       new_MCW_optmenu( fmenu->fim_ignore_menu , "# " , 0,2,0,0 ,
05376                        GRA_fmenu_av_CB , (XtPointer) fmenu , NULL , NULL ) ;
05377    fmenu->fim_ignore_choose_pb = fmenu->fim_ignore_choose_av->wrowcol ;
05378    MCW_reghint_children( fmenu->fim_ignore_choose_av->wrowcol , "Pick number of ignored points" ) ;
05379 #else
05380    FIM_MENU_PULL_BUT( fim_ignore_menu,fim_ignore_choose_pb ,"Choose" , "Pick number of ignored points") ;
05381 #endif
05382 
05383    if( graphable ){
05384       FIM_MENU_PULLRIGHT(fim_plot_menu,fim_plot_cbut        ,"FIM Plots"   , "Number of Ideals to plot" ) ;
05385       FIM_MENU_PULL_BUT( fim_plot_menu,fim_plot_firstref_pb ,"First Ideal" , "Only plot 1 Ideal" ) ;
05386       FIM_MENU_PULL_BUT( fim_plot_menu,fim_plot_allrefs_pb  ,"All Ideals"  , "Plot all Ideals"   ) ;
05387    } else {
05388       EMPTY_BUT(fim_plot_cbut) ;
05389       EMPTY_BUT(fim_plot_firstref_pb) ;
05390       EMPTY_BUT(fim_plot_allrefs_pb) ;
05391    }
05392 
05393    MENU_DLINE(fim_menu) ;
05394    FIM_MENU_QBUT( fim_execute_pb   , "Compute FIM" , "-> fico" , "Correlation Analysis" ) ;
05395    MCW_set_widget_bg( fmenu->fim_execute_pb ,
05396                       MCW_hotcolor(fmenu->fim_execute_pb) , 0 ) ;
05397 
05398    { static char * blab[] = {"Fit Coef", "% Change", "% From Ave", "% From Top"};
05399      (void) XtVaCreateManagedWidget(
05400              "dialog" , xmSeparatorWidgetClass , qbut_menu ,
05401               XmNseparatorType , XmSINGLE_LINE , NULL ) ;
05402 
05403      fmenu->fim_opt_bbox = new_MCW_bbox( qbut_menu , 4 , blab ,
05404                                          MCW_BB_radio_one , MCW_BB_noframe ,
05405                                          NULL , NULL ) ;
05406      MCW_reghint_children( fmenu->fim_opt_bbox->wrowcol , "What to Compute" ) ;
05407    }
05408 
05409    MENU_DLINE(fim_menu) ;
05410    FIM_MENU_QBUT( fim_execfimp_pb  , "Compute FIM+" , "-> fbuc" , "Extended Correlation Analysis" ) ;
05411    MCW_set_widget_bg( fmenu->fim_execfimp_pb ,
05412                       MCW_hotcolor(fmenu->fim_execfimp_pb) , 0 ) ;
05413 
05414    (void) XtVaCreateManagedWidget(
05415            "dialog" , xmSeparatorWidgetClass , qbut_menu ,
05416             XmNseparatorType , XmSINGLE_LINE , NULL ) ;
05417 
05418    fmenu->fimp_opt_bbox = new_MCW_bbox( qbut_menu, FIM_NUM_OPTS, fim_opt_labels,
05419                                         MCW_BB_check , MCW_BB_noframe ,
05420                                         NULL , NULL ) ;
05421    MCW_reghint_children( fmenu->fimp_opt_bbox->wrowcol , "What to Compute" ) ;
05422 
05423    { char * ff = my_getenv( "AFNI_FIM_MASK" ) ; int mm=0 ;
05424      if( ff != NULL ) mm = strtol(ff,NULL,10) ;
05425      if( mm <= 0 ) mm = FIM_DEFAULT_MASK ;
05426      MCW_set_bbox( fmenu->fimp_opt_bbox , mm ) ;
05427    }
05428 
05429    /* 04 Jan 2000: add some more buttons */
05430 
05431    (void) XtVaCreateManagedWidget(
05432            "dialog" , xmSeparatorWidgetClass , qbut_menu ,
05433             XmNseparatorType , XmSINGLE_LINE , NULL ) ;
05434 
05435    fmenu->fimp_setdefault_pb =
05436       XtVaCreateManagedWidget( "dialog" , xmPushButtonWidgetClass , qbut_menu ,
05437                                  LABEL_ARG( "Set Defaults" ) ,
05438                                  XmNmarginHeight , 0 ,
05439                                  XmNtraversalOn , False ,
05440                                  XmNinitialResourcesPersistent , False ,
05441                                NULL ) ;
05442    XtAddCallback( fmenu->fimp_setdefault_pb ,
05443                   XmNactivateCallback , cbfunc , (XtPointer) fmenu ) ;
05444    MCW_register_hint( fmenu->fimp_setdefault_pb , "Default computing options" ) ;
05445 
05446    fmenu->fimp_setall_pb =
05447       XtVaCreateManagedWidget( "dialog" , xmPushButtonWidgetClass , qbut_menu ,
05448                                  LABEL_ARG( "Set All" ) ,
05449                                  XmNmarginHeight , 0 ,
05450                                  XmNtraversalOn , False ,
05451                                  XmNinitialResourcesPersistent , False ,
05452                                NULL ) ;
05453    XtAddCallback( fmenu->fimp_setall_pb ,
05454                   XmNactivateCallback , cbfunc , (XtPointer) fmenu ) ;
05455    MCW_register_hint( fmenu->fimp_setall_pb , "Set all computing options on" ) ;
05456 
05457    fmenu->fimp_unsetall_pb =
05458       XtVaCreateManagedWidget( "dialog" , xmPushButtonWidgetClass , qbut_menu ,
05459                                  LABEL_ARG( "Unset All" ) ,
05460                                  XmNmarginHeight , 0 ,
05461                                  XmNtraversalOn , False ,
05462                                  XmNinitialResourcesPersistent , False ,
05463                                NULL ) ;
05464    XtAddCallback( fmenu->fimp_unsetall_pb ,
05465                   XmNactivateCallback , cbfunc , (XtPointer) fmenu ) ;
05466    MCW_register_hint( fmenu->fimp_unsetall_pb , "Set all computing options off" ) ;
05467 
05468    /* 01 Feb 2000: add user-contributed options (if any) */
05469 
05470    fmenu->fimp_user_bbox = NULL ; /* default = no menu */
05471 
05472    if( GLOBAL_library.registered_fim.num > 0 ){
05473 
05474       (void) XtVaCreateManagedWidget(
05475               "dialog" , xmSeparatorWidgetClass , qbut_menu ,
05476                XmNseparatorType , XmDOUBLE_LINE , NULL ) ;
05477 
05478       (void) XtVaCreateManagedWidget(
05479                "dialog" , xmLabelWidgetClass , qbut_menu ,
05480                   LABEL_ARG("--Extra Funcs--") ,
05481                   XmNrecomputeSize , False ,
05482                   XmNinitialResourcesPersistent , False ,
05483                NULL ) ;
05484 
05485       fmenu->fimp_user_bbox = new_MCW_bbox( qbut_menu,
05486                                             GLOBAL_library.registered_fim.num ,
05487                                             GLOBAL_library.registered_fim.labels ,
05488                                             MCW_BB_check , MCW_BB_noframe ,
05489                                             NULL , NULL ) ;
05490       MCW_reghint_children( fmenu->fimp_user_bbox->wrowcol , "Other correlation functions" ) ;
05491    }
05492 
05493    RETURN(fmenu) ;
05494 }

void auto_grid MCW_grapher   grapher,
int    npoints
[static]
 

Definition at line 1528 of file afni_graph.c.

References grid_ar, MCW_grapher::grid_fixed, MCW_grapher::grid_index, GRID_MAX, and MCW_grapher::grid_spacing.

Referenced by drive_MCW_grapher(), GRA_opt_CB(), and init_const().

01529 {
01530    int ii ;
01531    if( npoints < 2 ) return ;            /* 02 Apr 2004 */
01532    for( ii=GRID_MAX-1 ; ii > 0 ; ii-- )
01533      if( grid_ar[ii] <= npoints/3 ) break;
01534    grapher->grid_index   = ii ;
01535    grapher->grid_spacing = grid_ar[ii] ;
01536    grapher->grid_fixed   = 0 ;           /* 02 Apr 2004 */
01537    return ;
01538 }

void draw_grids MCW_grapher   grapher
 

cast away the data timeseries!

Definition at line 2472 of file afni_graph.c.

References MCW_grapher::dc, DC_fg_color(), DC_linewidth(), MCW_grapher::dont_redraw, ENTRY, FG_COLOR, FG_THICK, GRID_COLOR, MCW_grapher::grid_spacing, GRID_THICK, gx, MCW_grapher::gx, gy, MCW_grapher::gy, i, mat, MCW_grapher::mat, MIN, NPTS, plot_fdX(), xc, MCW_grapher::xc, MCW_grapher::xorigin, yc, MCW_grapher::yc, and MCW_grapher::yorigin.

Referenced by redraw_graph().

02473 {
02474    int i , mat=grapher->mat , gx=grapher->gx , gy=grapher->gy ;
02475    int j, k, g, xo, yo, npoints , m ;
02476    int xc = grapher->xc , yc = grapher->yc ;
02477    float ftemp ;
02478 
02479 ENTRY("draw_grids") ;
02480    if( grapher->dont_redraw ) EXRETURN ;  /* 27 Jan 2004 */
02481 
02482    /* draw grid lines in the chosen color */
02483 
02484    if( GRID_COLOR(grapher) > 0 ){
02485       DC_fg_color ( grapher->dc , GRID_COLOR(grapher) ) ;
02486       DC_linewidth( grapher->dc , GRID_THICK(grapher) ) ;
02487 
02488       g       = grapher->grid_spacing ;
02489       npoints = NPTS(grapher) ;  /* number time points in 1 sub-graph window */
02490 
02491       if( npoints > 1 ){                /* this if: 22 Sep 2000 */
02492         ftemp = gx / (npoints-1.0) ;
02493         for( i=0 ; i < mat ; i++ ){
02494           for( m=0 ; m < mat ; m++ ){
02495             xo = grapher->xorigin[i][m] ; yo = grapher->yorigin[i][m] ;
02496             for( j=1 ; j <= (npoints-1)/g ; j++ ){
02497               k = xo + j * g * ftemp ;
02498               plot_fdX( grapher , k , yo    , 0 ) ;
02499               plot_fdX( grapher , k , yo+gy , 1 ) ;
02500             }
02501           }
02502         }
02503       }
02504 
02505       /* draw an interior framing box at the central square */
02506 
02507       xo = grapher->xorigin[xc][yc] ; yo = grapher->yorigin[xc][yc] ;
02508       g  = MIN( grapher->gy/3 , grapher->gx/3 ) ; g  = MIN( g , 4 ) ;
02509       for( j=1 ; j <= g ; j++ ){
02510          plot_fdX( grapher , xo+j    , yo+j    , 0 ) ;
02511          plot_fdX( grapher , xo+j    , yo+gy-j , 1 ) ;
02512          plot_fdX( grapher , xo+gx-j , yo+gy-j , 1 ) ;
02513          plot_fdX( grapher , xo+gx-j , yo+j    , 1 ) ;
02514          plot_fdX( grapher , xo+j    , yo+j    , 1 ) ;
02515       }
02516    }
02517 
02518    /* draw exterior frames */
02519 
02520    DC_fg_color ( grapher->dc , FG_COLOR(grapher) ) ;
02521    DC_linewidth( grapher->dc , FG_THICK(grapher) ) ;
02522 
02523    for( i=0 ; i < mat ; i++ ){
02524       for( j=0 ; j < mat ; j++ ){
02525          xo = grapher->xorigin[i][j] ; yo = grapher->yorigin[i][j] ;
02526          plot_fdX( grapher , xo    , yo    , 0 ) ;
02527          plot_fdX( grapher , xo+gx , yo    , 1 ) ;
02528          plot_fdX( grapher , xo+gx , yo+gy , 1 ) ;
02529          plot_fdX( grapher , xo    , yo+gy , 1 ) ;
02530          plot_fdX( grapher , xo    , yo    , 1 ) ;
02531       }
02532    }
02533 
02534    EXRETURN ;
02535 }

Boolean drive_MCW_grapher MCW_grapher   grapher,
int    drive_code,
XtPointer    drive_data
 

Definition at line 4125 of file afni_graph.c.

References ADDTO_IMARR, AFNI_sleep(), auto_grid(), MCW_grapher::button2_enabled, CALL_getser, MCW_grapher::dc, MCW_DC::display, MCW_grapher::draw_fd, end_fd_graph_CB(), ENTRY, MCW_grapher::fd_pxWind, MCW_grapher::fdw_graph, FIM_menu::fim_cbut, FIM_menu::fim_editref_winaver_bbox, MCW_grapher::fmenu, FREE_IMARR, MCW_choose_cbs::fval, MCW_grapher::getaux, MCW_grapher::getser, MCW_grapher::glogo_height, MCW_grapher::glogo_pixmap, MCW_grapher::glogo_width, GRA_finalize_global_baseline_CB(), GRA_fix_optmenus(), GRA_new_pixmap(), GRA_REALZ, GRA_redraw_overlay(), GRA_timer_stop(), GRA_VALID, graCR_getstatus, graDR_addort_ts, graDR_addref_ts, graDR_button2_disable, graDR_button2_enable, graDR_cursor, graDR_destroy, graDR_fim_disable, graDR_icon, graDR_mirror, graDR_newdata, graDR_newlength, graDR_polort, graDR_realize, graDR_redraw, graDR_setglobalbaseline, graDR_setgrid, graDR_setignore, graDR_setindex, graDR_setmatrix, graDR_setpinbot, graDR_setpins, graDR_title, graDR_unrealize, graDR_winaver, MCW_grapher::grid_fixed, MCW_grapher::grid_spacing, IMARR_COUNT, IMARR_SUBIMAGE, init_const(), MCW_grapher::init_ignore, INIT_IMARR, init_mat(), ISONE, MCW_grapher::mat, MCW_grapher::mat_max, MAX_PIN, MCW_alter_widget_cursor(), MCW_set_bbox(), MCW_widget_geom(), mcwCR_integer, MIN, MIN_PIN, MCW_grapher::mirror, NORMAL_cursorize, NPTS, NUM_COLOR_ITEMS, MCW_grapher_status::num_series, MCW_grapher::opt_color_av, MCW_grapher::opt_points_bbox, MCW_grapher::opt_thick_bbox, MCW_grapher::opt_xaxis_cbut, MCW_grapher::option_rowcol, MCW_grapher::ort_ts, MCW_grapher::pin_bot, MCW_grapher::pin_top, PLOTCODE_AUTOSCALE, MCW_grapher::polort, POPUP_cursorize, MCW_choose_cbs::reason, redraw_graph(), MCW_grapher::ref_ts, RETURN, send_newinfo(), MCW_grapher::status, STATUS, MCW_grapher::textgraph, thd_floatscan(), MCW_grapher::time_index, TTOP, MCW_grapher::valid, WAIT_for_window, MCW_arrowval::wrowcol, MCW_bbox::wtop, MCW_grapher::xpoint, MCW_grapher::ypoint, and MCW_grapher::zpoint.

Referenced by AFNI_closedown_3dview(), AFNI_drive_close_window(), AFNI_drive_open_window(), AFNI_fimmer_setignore(), AFNI_fimmer_setort(), AFNI_fimmer_setpolort(), AFNI_fimmer_setref(), AFNI_gra_send_CB(), AFNI_set_viewpoint(), AFNI_set_window_titles(), AFNI_startup_layout_CB(), AFNI_toggle_drawing(), AFNI_underlay_CB(), AFNI_view_xyz_CB(), GRA_drawing_EV(), GRA_handle_keypress(), GRA_pin_choose_CB(), GRA_timer_CB(), and RT_set_grapher_pinnums().

04127 {
04128 
04129 ENTRY("drive_MCW_grapher") ;
04130 
04131    if( ! GRA_VALID(grapher) ) RETURN(False) ;
04132 
04133    switch( drive_code ){
04134 
04135       /*------- error! -------*/
04136 
04137       default:{
04138          fprintf(stderr,"\a\n*** drive_MCW_grapher: code=%d illegal!\n",
04139                  drive_code) ;
04140          XBell( grapher->dc->display , 100 ) ;
04141          RETURN( False ) ;
04142       }
04143 
04144       /*------ winaver [27 Jan 2004] -----*/
04145 
04146       case graDR_winaver:{
04147         int vvv = (int)drive_data ;
04148         MCW_set_bbox( grapher->fmenu->fim_editref_winaver_bbox , vvv ) ;
04149         RETURN( True ) ;
04150       }
04151 
04152       /*------ setglobalbaseline [07 Aug 2001] -----*/
04153 
04154       case graDR_setglobalbaseline:{
04155          float *vvv = (float *) drive_data ;   /* get value   */
04156          int ii = thd_floatscan( 1 , vvv ) ;   /* check value */
04157          MCW_choose_cbs cb ;
04158          if( ii != 0 ) RETURN( False ) ;       /* this is bad */
04159          cb.reason = mcwCR_integer ;
04160          cb.fval   = *vvv ;
04161          GRA_finalize_global_baseline_CB(NULL,(XtPointer)grapher,&cb) ;
04162          RETURN( True ) ;
04163       }
04164 
04165       /*------ setmatrix [22 Sep 2000] -----*/
04166 
04167       case graDR_setmatrix:{
04168          int mm = (int) drive_data ;
04169          if( mm < 0 ) RETURN( False ) ;
04170          grapher->mat = MIN( grapher->mat_max , mm ) ;
04171          init_mat    ( grapher ) ;
04172          redraw_graph( grapher, PLOTCODE_AUTOSCALE ); /* 12 Oct 2000: autoscale */
04173          send_newinfo( grapher ) ;
04174          RETURN( True ) ;
04175       }
04176 
04177       /*------ setgrid [22 Sep 2000] -----*/
04178 
04179       case graDR_setgrid:{
04180          int mm = (int) drive_data ;
04181          if( mm < 2 ) RETURN( False ) ;
04182          grapher->grid_spacing = mm ;
04183          grapher->grid_fixed   = 1 ;  /* 02 Apr 2004 */
04184          redraw_graph(grapher,0) ;
04185          RETURN( True ) ;
04186       }
04187 
04188       /*------ mirroring (Jul 2000) -----*/
04189 
04190       case graDR_mirror:{
04191          int ii = (int) drive_data ;
04192 
04193          if( ii != grapher->mirror ){
04194            grapher->mirror = ii ;
04195            init_mat( grapher ) ; redraw_graph( grapher , 0 ) ;
04196          }
04197       }
04198       break ;
04199 
04200       /*------ fim disabling -----*/
04201 
04202       case graDR_fim_disable:{
04203          int ii ;
04204          XtUnmanageChild( grapher->fmenu->fim_cbut ) ;
04205          XtUnmanageChild( grapher->opt_xaxis_cbut ) ;
04206          for( ii=0 ; ii < NUM_COLOR_ITEMS ; ii++ ){
04207            if( gr_unfim[ii] ){
04208              if( grapher->opt_color_av[ii] != NULL )
04209                XtUnmanageChild( grapher->opt_color_av[ii]->wrowcol ) ;
04210              if( grapher->opt_thick_bbox[ii] != NULL )
04211                XtUnmanageChild( grapher->opt_thick_bbox[ii]->wtop  ) ;
04212              if( grapher->opt_points_bbox[ii] != NULL )
04213                XtUnmanageChild( grapher->opt_points_bbox[ii]->wtop ) ;
04214            }
04215          }
04216       }
04217       break ;
04218 
04219       /*------ button2 stuff -----*/
04220 
04221       case graDR_button2_enable:{
04222         grapher->button2_enabled = 1 ;
04223         GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
04224         RETURN( True ) ;
04225       }
04226 
04227       case graDR_button2_disable:{
04228         grapher->button2_enabled = 0 ;
04229         RETURN( True ) ;
04230       }
04231 
04232       /*------ set time index -----*/
04233 
04234       case graDR_setindex:{
04235          int new_index = (int) drive_data ;
04236 
04237          if( new_index < 0 || new_index >= grapher->status->num_series )
04238            RETURN( False ) ;
04239 
04240          if( new_index != grapher->time_index ){
04241            grapher->time_index = new_index ;
04242            if( grapher->textgraph )
04243              redraw_graph( grapher , 0 ) ;
04244            else
04245              GRA_redraw_overlay( grapher ) ;
04246          }
04247          RETURN( True ) ;
04248       }
04249 
04250       /*------ reset top of time series plotting ------*/
04251       /* (same as graDR_setpinnum and graDR_setpintop) */
04252 
04253       case graDR_newlength:{
04254          int newtop=(int)drive_data ;
04255 
04256          if( newtop < MIN_PIN ) newtop = 0 ;
04257          if( newtop > MAX_PIN ) newtop = MAX_PIN ;
04258 
04259          grapher->pin_top = newtop ;
04260          if( NPTS(grapher) < 2 ) grapher->pin_bot = 0 ;
04261 
04262 #ifdef USE_OPTMENUS
04263          GRA_fix_optmenus( grapher ) ;
04264 #endif
04265          redraw_graph( grapher, 0 ) ;
04266          RETURN( True ) ;
04267       }
04268 
04269       /*------ reset bottom of time series plotting [17 Mar 2004] -----*/
04270 
04271       case graDR_setpinbot:{
04272          int newbot=(int)drive_data ;
04273 
04274          if( newbot < 0               ) newbot = 0 ;
04275          if( newbot >= TTOP(grapher)  ) newbot = 0 ;
04276 
04277          grapher->pin_bot = newbot ;
04278 
04279 #ifdef USE_OPTMENUS
04280          GRA_fix_optmenus( grapher ) ;
04281 #endif
04282          redraw_graph( grapher, 0 ) ;
04283          RETURN( True ) ;
04284       }
04285 
04286       /*------ reset bot and top of time series plotting [19 Mar 2004] -----*/
04287 
04288       case graDR_setpins:{
04289          int ii=(int)drive_data , newbot,newtop ;
04290 
04291          if( ii <= 0 ){
04292            newbot = newtop = 0 ;
04293          } else {
04294            newbot = ii % 100000 ;
04295            newtop = ii / 100000 ;
04296            if( newtop < MIN_PIN ) newtop = 0 ;
04297          }
04298          if( newtop > 0 && newtop-newbot < 2 ) newbot = 0 ;
04299          if( newbot >= TTOP(grapher)         ) newbot = 0 ;
04300 
04301          grapher->pin_bot = newbot ;
04302          grapher->pin_top = newtop ;
04303 
04304 #ifdef USE_OPTMENUS
04305          GRA_fix_optmenus( grapher ) ;
04306 #endif
04307          redraw_graph( grapher, 0 ) ;
04308          RETURN( True ) ;
04309       }
04310 
04311       /*------ set ignore count -----*/
04312 
04313       case graDR_setignore:{
04314          int new_ignore = (int) drive_data ;
04315 
04316          if( new_ignore >= 0 && new_ignore < TTOP(grapher)-1 ){
04317            grapher->init_ignore = new_ignore ;
04318            redraw_graph( grapher , PLOTCODE_AUTOSCALE ) ;
04319            RETURN( True ) ;
04320          } else {
04321            RETURN( False ) ;
04322          }
04323       }
04324 
04325       /*------- set polort [27 May 1999] --------*/
04326 
04327       case graDR_polort:{
04328          int new_polort = (int) drive_data ;
04329 
04330          if( new_polort >= 0 ){
04331             grapher->polort = new_polort ;
04332 #ifdef USE_OPTMENUS
04333             GRA_fix_optmenus( grapher ) ;
04334 #endif
04335          }
04336          RETURN( True ) ;
04337       }
04338 
04339       /*----- set reference time series (currently limited to one) -----*/
04340 
04341       case graDR_addref_ts:{
04342          MRI_IMAGE *im = (MRI_IMAGE *) drive_data ;
04343 
04344          if( im == NULL ){                /* no input --> kill kill kill */
04345 STATUS("freeing reference timeseries") ;
04346             FREE_IMARR(grapher->ref_ts) ;
04347             grapher->ref_ts = NULL ;
04348          } else{
04349             if( grapher->ref_ts == NULL ) INIT_IMARR( grapher->ref_ts ) ;
04350 
04351             if( IMARR_COUNT(grapher->ref_ts) == 0 ){
04352 STATUS("adding reference timeseries") ;
04353                ADDTO_IMARR( grapher->ref_ts , im ) ;     /* create first one */
04354             } else {
04355 STATUS("replacing reference timeseries") ;
04356                IMARR_SUBIMAGE(grapher->ref_ts,0) = im ;  /* replace first one */
04357             }
04358          }
04359 
04360          redraw_graph( grapher , 0 ) ;
04361          RETURN( True ) ;
04362       }
04363 
04364       /*----- set ort time series (currently limited to one) -----*/
04365 
04366       case graDR_addort_ts:{
04367          MRI_IMAGE *im = (MRI_IMAGE *) drive_data ;
04368 
04369          if( im == NULL ){                /* no input --> kill kill kill */
04370 STATUS("freeing ort timeseries") ;
04371             FREE_IMARR(grapher->ort_ts) ;
04372             grapher->ort_ts = NULL ;
04373          } else{
04374             if( grapher->ort_ts == NULL ) INIT_IMARR( grapher->ort_ts ) ;
04375 
04376             if( IMARR_COUNT(grapher->ort_ts) == 0 ){
04377 STATUS("adding ort timeseries") ;
04378                ADDTO_IMARR( grapher->ort_ts , im ) ;     /* create first one */
04379             } else {
04380 STATUS("replacing ort timeseries") ;
04381                IMARR_SUBIMAGE(grapher->ort_ts,0) = im ;  /* replace first one */
04382             }
04383          }
04384 
04385          redraw_graph( grapher , 0 ) ;
04386          RETURN( True ) ;
04387       }
04388 
04389       /*------ set icon pixmap -----*/
04390 
04391       case graDR_icon:{
04392          int xret , yret ;
04393          unsigned int wret,hret,bret,dret ;
04394          Window rret ;
04395 
04396          XtVaSetValues( grapher->fdw_graph , XmNiconPixmap , (Pixmap) drive_data , NULL ) ;
04397          grapher->glogo_pixmap = (Pixmap) drive_data ;
04398 
04399          /* get geometry for later use */
04400 
04401          if( grapher->glogo_pixmap != XmUNSPECIFIED_PIXMAP ){
04402             (void) XGetGeometry( grapher->dc->display , grapher->glogo_pixmap ,
04403                                  &rret , &xret , &yret , &wret , &hret , &bret , &dret ) ;
04404 
04405             grapher->glogo_width  = wret ;
04406             grapher->glogo_height = hret ;
04407          } else {
04408             grapher->glogo_width  = 0 ;
04409             grapher->glogo_height = 0 ;
04410          }
04411          RETURN( True ) ;
04412       }
04413 
04414       /*------- title --------*/
04415 
04416       case graDR_title:{
04417          char * title = (char *) drive_data ;
04418 
04419          if( title == NULL || strlen(title) == 0 ) RETURN( False ) ;
04420 
04421          XtVaSetValues( grapher->fdw_graph , XmNtitle , title , NULL ) ;
04422          RETURN( True ) ;
04423       }
04424 
04425       /*------- death! -------*/
04426 
04427       case graDR_destroy:{
04428          end_fd_graph_CB( NULL , (XtPointer) grapher , NULL ) ;
04429          RETURN( True ) ;
04430       }
04431 
04432       /*------- unrealize! -------*/
04433 
04434       case graDR_unrealize:{
04435          GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
04436          if( GRA_REALZ(grapher) ) XtUnrealizeWidget( grapher->fdw_graph ) ;
04437          grapher->valid = 1 ;
04438 
04439          if( grapher->fd_pxWind != (Pixmap) 0 )
04440             XFreePixmap( grapher->dc->display , grapher->fd_pxWind ) ;
04441          RETURN( True ) ;
04442       }
04443 
04444       /*------- realize! -------*/
04445 
04446       case graDR_realize:{
04447          if( ! GRA_REALZ(grapher) ){
04448             int width , height ;
04449 
04450             grapher->valid = 2 ;
04451 
04452             XtRealizeWidget( grapher->fdw_graph ) ;
04453 
04454             WAIT_for_window(grapher->fdw_graph) ;
04455 
04456             /* 29 Sep 2000: next 2 lines of code are for the Form change */
04457 
04458             XtVaSetValues( grapher->option_rowcol ,
04459                              XmNleftAttachment   , XmATTACH_NONE ,
04460                              XmNtopAttachment    , XmATTACH_NONE ,
04461                              XmNrightAttachment  , XmATTACH_FORM ,
04462                              XmNbottomAttachment , XmATTACH_FORM ,
04463                            NULL ) ;
04464             XMapRaised( XtDisplay(grapher->option_rowcol) ,
04465                         XtWindow(grapher->option_rowcol)   ) ;
04466 
04467             NORMAL_cursorize( grapher->fdw_graph ) ;
04468 
04469             if( ISONE(grapher) )
04470               NORMAL_cursorize( grapher->draw_fd ) ;  /* 07 Dec 2001 */
04471             else
04472               POPUP_cursorize( grapher->draw_fd ) ;
04473 
04474             MCW_widget_geom( grapher->draw_fd , &width , &height , NULL,NULL ) ;
04475             GRA_new_pixmap( grapher , width , height , 0 ) ;
04476 #ifdef USE_OPTMENUS
04477             GRA_fix_optmenus( grapher ) ;
04478 #endif
04479             AFNI_sleep(1) ;  /* 08 Mar 2002: for good luck */
04480          }
04481          RETURN( True ) ;
04482       }
04483 
04484       /*------- new cursor for image -------*/
04485 
04486       case graDR_cursor:{
04487          int cur = (int) drive_data ;
04488 
04489          MCW_alter_widget_cursor( grapher->fdw_graph , cur , "yellow" , "blue" ) ;
04490          RETURN( True ) ;
04491       }
04492 
04493       /*------- new data sequence!!! -------*/
04494 
04495       case graDR_newdata:{
04496          int npold = grapher->status->num_series ;  /* 22 Sep 2000 */
04497 
04498          GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
04499 
04500          grapher->getaux = drive_data ;
04501 #if 0
04502          grapher->status = (MCW_grapher_status *)
04503                               grapher->getser(0,graCR_getstatus,drive_data) ;
04504 #else
04505          CALL_getser( grapher , 0,graCR_getstatus , MCW_grapher_status *,grapher->status ) ;
04506 #endif
04507          init_const( grapher ) ;
04508 
04509          /* mustn't allow bottom of plotting range to be beyond top of data! */
04510 
04511          if( grapher->pin_bot >= grapher->status->num_series-1 ) grapher->pin_bot = 0 ;
04512 
04513          if( npold < 2 || !grapher->grid_fixed ){ /* 22 Sep 2000 */
04514            auto_grid( grapher , NPTS(grapher) ) ;
04515          }
04516 
04517 #ifdef USE_OPTMENUS
04518          GRA_fix_optmenus( grapher ) ;
04519 #endif
04520 
04521         if( ISONE(grapher) )                        /* 07 Dec 2001 */
04522           NORMAL_cursorize( grapher->draw_fd ) ;
04523         else
04524           POPUP_cursorize( grapher->draw_fd ) ;
04525 
04526          RETURN( True ) ;
04527       }
04528 
04529       /*------- redraw -------*/
04530 
04531       case graDR_redraw:{
04532          int *xym = (int *) drive_data ;
04533 
04534 STATUS("graDR_redraw") ;
04535 
04536          if( xym != NULL ){
04537             if( xym[0] >= 0 ) grapher->xpoint = xym[0] ;
04538             if( xym[1] >= 0 ) grapher->ypoint = xym[1] ;
04539             if( xym[2] >= 0 ) grapher->zpoint = xym[2] ;
04540             if( xym[3] >  0 ) grapher->mat    = xym[3] ;
04541             init_mat(grapher) ;
04542          }
04543          redraw_graph( grapher , 0 ) ;
04544          RETURN( True ) ;
04545       }
04546 
04547    }  /* end of switch on drive_code */
04548 
04549    RETURN( False ) ;  /* should never be reached! */
04550 }

void end_fd_graph_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

for the present, don't realize widgets (make the user do it later) *

Definition at line 942 of file afni_graph.c.

References MCW_grapher::ave_tsim, CALL_sendback, MCW_grapher::cen_line, MCW_grapher::cen_tsim, client_data, MCW_grapher::dc, MCW_DC::display, ENTRY, MCW_grapher::fd_pxWind, MCW_grapher::fdw_graph, FIM_menu::fim_editref_winaver_bbox, FIM_menu::fim_ignore_choose_av, FIM_menu::fim_opt_bbox, FIM_menu::fim_polort_choose_av, FIM_menu::fimp_opt_bbox, FIM_menu::fimp_user_bbox, MCW_grapher::fmenu, FREE_AV, MCW_grapher::getaux, GRA_CLEAR_tuser, GRA_timer_stop(), GRA_VALID, graCR_destroy, mri_free(), myXtFree, NUM_COLOR_ITEMS, MCW_grapher::opt_baseline_bbox, MCW_grapher::opt_color_av, MCW_grapher::opt_dplot_bbox, MCW_grapher::opt_ggap_av, MCW_grapher::opt_gthick_av, MCW_grapher::opt_mat_choose_av, MCW_grapher::opt_points_bbox, MCW_grapher::opt_slice_choose_av, MCW_grapher::opt_textgraph_bbox, MCW_grapher::opt_thick_bbox, GRA_cbs::reason, MCW_grapher_status::send_CB, MCW_grapher::setshift_inc_av, MCW_grapher::setshift_left_av, MCW_grapher::setshift_right_av, STATUS, MCW_grapher::status, MCW_grapher::transform0D_av, MCW_grapher::transform1D_av, MCW_grapher::tschosen, MCW_grapher::valid, and MCW_grapher::xax_tsim.

Referenced by drive_MCW_grapher(), GRA_handle_keypress(), and new_MCW_grapher().

00943 {
00944    MCW_grapher * grapher = (MCW_grapher *) client_data ;
00945    int ii ;
00946 
00947 ENTRY("end_fd_graph_CB") ;
00948 
00949    if( ! GRA_VALID(grapher) ) EXRETURN ;
00950 
00951    GRA_timer_stop( grapher ) ;  /* 04 Dec 2003 */
00952 
00953    grapher->valid = 0 ;  /* can't do anything with this anymore */
00954 
00955    if( grapher->fd_pxWind != (Pixmap) 0 ){
00956 STATUS("freeing Pixmap") ;
00957      XFreePixmap( grapher->dc->display , grapher->fd_pxWind ) ;
00958    }
00959 
00960 #ifdef USE_OPTMENUS
00961 STATUS("destroying optmenus") ;
00962    FREE_AV(grapher->opt_mat_choose_av) ;
00963    FREE_AV(grapher->opt_slice_choose_av) ;
00964    FREE_AV(grapher->fmenu->fim_ignore_choose_av) ;
00965    FREE_AV(grapher->fmenu->fim_polort_choose_av) ;
00966 #endif
00967 
00968 STATUS("destroying arrowvals") ;
00969    FREE_AV( grapher->setshift_right_av)    ;
00970    FREE_AV( grapher->setshift_left_av)     ;
00971    FREE_AV( grapher->setshift_inc_av)      ;
00972    FREE_AV( grapher->transform0D_av )      ;  /* 22 Oct 1996 */
00973    FREE_AV( grapher->transform1D_av )      ;  /* 03 Nov 1996 */
00974    FREE_AV( grapher->opt_ggap_av )         ;  /* 28 Sep 1998: via Purify */
00975    FREE_AV( grapher->opt_gthick_av )       ;  /* 06 Oct 2004 */
00976 
00977    for( ii=0 ; ii < NUM_COLOR_ITEMS ; ii++ )  /* 16 Jun 1997 */
00978      FREE_AV( grapher->opt_color_av[ii] ) ;
00979 
00980 STATUS("destroying fmenu") ;
00981    myXtFree( grapher->fmenu->fim_editref_winaver_bbox );  /* 27 Jan 2004 */
00982    myXtFree( grapher->fmenu->fim_opt_bbox ) ;  /* Jan 1998 */
00983    myXtFree( grapher->fmenu->fimp_opt_bbox );  /* Jan 1998 */
00984    myXtFree( grapher->fmenu->fimp_user_bbox);  /* Feb 2000 */
00985    myXtFree( grapher->fmenu )               ;
00986    myXtFree( grapher->cen_line )            ;
00987 
00988 STATUS("destroying bboxes") ;
00989    myXtFree( grapher->opt_dplot_bbox ) ;         /* 08 Nov 1996 */
00990 
00991    for( ii=0 ; ii < NUM_COLOR_ITEMS ; ii++ ){
00992      myXtFree( grapher->opt_thick_bbox[ii] ) ;   /* 16 Jun 1997 */
00993      myXtFree( grapher->opt_points_bbox[ii] ) ;  /* 09 Jan 1998 */
00994    }
00995 
00996    myXtFree( grapher->opt_baseline_bbox ) ;      /* 07 Aug 2001 */
00997    myXtFree( grapher->opt_textgraph_bbox ) ;
00998 
00999 STATUS("freeing cen_tsim") ;
01000    mri_free( grapher->cen_tsim ) ;
01001    mri_free( grapher->xax_tsim ) ;  /* 09 Jan 1998 */
01002    mri_free( grapher->ave_tsim ) ;  /* 27 Jan 2004 */
01003 
01004 STATUS("freeing tuser") ;
01005    GRA_CLEAR_tuser( grapher ) ;  /* 22 Apr 1997 */
01006 
01007    /* 31 Mar 2004:
01008       On the Mac, destroying widgets after the timeseries
01009       chooser is opened causes death for unknown reasons.
01010       So in that case, just hide them.  What the ....?    */
01011 
01012 STATUS("destroying widgets") ;
01013 #ifdef DARWIN
01014    if( grapher->tschosen ) XtUnrealizeWidget( grapher->fdw_graph ) ;
01015    else                    XtDestroyWidget  ( grapher->fdw_graph ) ;
01016 #else
01017    XtUnrealizeWidget( grapher->fdw_graph ) ;
01018 #endif
01019 STATUS("widgets now destroyed") ;
01020 
01021    /** if AFNI has a notify callback, it will free the data **/
01022 
01023    if( grapher->status->send_CB != NULL ){
01024       GRA_cbs cbs ;
01025       cbs.reason = graCR_destroy ;
01026 STATUS("calling AFNI") ;
01027 #if 0
01028       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
01029 #else
01030       CALL_sendback( grapher , cbs ) ;
01031 #endif
01032    } else {
01033 STATUS("freeing grapher") ;
01034       myXtFree( grapher ) ;    /* otherwise, we will free the data */
01035    }
01036 
01037    EXRETURN ;
01038 }

void erase_fdw MCW_grapher   grapher
 

if AFNI has a notify callback, it will free the data *

Definition at line 1044 of file afni_graph.c.

References BG_COLOR, MCW_grapher::dc, DC_fg_color(), DC_linewidth(), MCW_DC::display, MCW_grapher::dont_redraw, ENTRY, MCW_grapher::fd_pxWind, MCW_grapher::fHIGH, MCW_grapher::fWIDE, MCW_grapher::glogo_height, MCW_grapher::glogo_pixmap, MCW_grapher::glogo_width, MCW_DC::myGC, and show_grapher_pixmap.

Referenced by redraw_graph().

01045 {
01046 ENTRY("erase_fdw") ;
01047 
01048    if( grapher->dont_redraw ) EXRETURN ;  /* 27 Jan 2004 */
01049 
01050    DC_fg_color ( grapher->dc , BG_COLOR(grapher) ) ;
01051    DC_linewidth( grapher->dc , 0 ) ;
01052 
01053    XFillRectangle( grapher->dc->display ,
01054                    grapher->fd_pxWind , grapher->dc->myGC ,
01055                    0 , 0 , grapher->fWIDE , grapher->fHIGH ) ;
01056 
01057    if( show_grapher_pixmap &&
01058        grapher->glogo_pixmap != XmUNSPECIFIED_PIXMAP &&
01059        grapher->glogo_height > 0 && grapher->glogo_width > 0 ){
01060 
01061       XCopyArea( grapher->dc->display ,
01062                  grapher->glogo_pixmap , grapher->fd_pxWind , grapher->dc->myGC ,
01063                  0,0 , grapher->glogo_width,grapher->glogo_height ,
01064                  0,grapher->fHIGH - grapher->glogo_height + 1 ) ;
01065    }
01066 
01067    EXRETURN ;
01068 }

void fd_line MCW_grapher  ,
int   ,
int   ,
int   ,
int   
[static]
 

Definition at line 1515 of file afni_graph.c.

References MCW_grapher::dc, MCW_DC::display, MCW_grapher::fd_pxWind, MCW_grapher::fHIGH, MCW_DC::myGC, x2, and y1.

Referenced by redraw_graph().

01516 {
01517    XDrawLine( grapher->dc->display , grapher->fd_pxWind ,
01518               grapher->dc->myGC , x1,grapher->fHIGH-y1,x2,grapher->fHIGH-y2 ) ;
01519    return ;
01520 }

void fd_px_store MCW_grapher   grapher
 

Definition at line 1093 of file afni_graph.c.

References MCW_grapher::dc, MCW_DC::display, MCW_grapher::draw_fd, ENTRY, MCW_grapher::fd_pxWind, and MCW_widget_visible().

Referenced by redraw_graph().

01094 {
01095 ENTRY("fd_px_store") ;
01096 
01097    if( ! MCW_widget_visible(grapher->draw_fd) ) EXRETURN ;  /* 03 Jan 1999 */
01098 
01099    XtVaSetValues( grapher->draw_fd ,
01100                      XmNbackgroundPixmap , grapher->fd_pxWind ,
01101                   NULL ) ;
01102 
01103    XClearWindow( grapher->dc->display , XtWindow(grapher->draw_fd) ) ;
01104    XFlush( grapher->dc->display ) ;
01105    EXRETURN ;
01106 }

void fd_txt MCW_grapher   grapher,
int    x,
int    y,
char *    str
 

27 Jan 2004 *

Definition at line 1495 of file afni_graph.c.

References MCW_grapher::dc, MCW_DC::display, MCW_grapher::fd_pxWind, MCW_grapher::fHIGH, and MCW_DC::myGC.

Referenced by redraw_graph(), and text_graphs().

01496 {
01497    XDrawString( grapher->dc->display, grapher->fd_pxWind,
01498                 grapher->dc->myGC , x , grapher->fHIGH-y ,
01499                 str , strlen(str) ) ;
01500    return ;
01501 }

void GRA_baseline_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

Definition at line 5590 of file afni_graph.c.

References client_data, MCW_grapher::common_base, ENTRY, GRA_VALID, MCW_val_bbox(), MCW_grapher::opt_baseline_bbox, and redraw_graph().

Referenced by new_MCW_grapher().

05591 {
05592    MCW_grapher *grapher = (MCW_grapher *) client_data ;
05593    int bbb ;
05594 
05595 ENTRY("GRA_baseline_CB") ;
05596 
05597    if( ! GRA_VALID(grapher) ) EXRETURN ;
05598 
05599    bbb = MCW_val_bbox( grapher->opt_baseline_bbox ) ;
05600    if( bbb != grapher->common_base ){
05601      grapher->common_base = bbb ;
05602      redraw_graph( grapher , 0 ) ;
05603    }
05604    EXRETURN ;
05605 }

void GRA_bkthr_choose_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3928 of file afni_graph.c.

References ENTRY, MCW_choose_cbs::fval, and SET_FIM_bkthr.

Referenced by GRA_fim_CB().

03929 {
03930 ENTRY("GRA_bkthr_choose_CB") ;
03931    SET_FIM_bkthr( cbs->fval ) ;
03932    EXRETURN ;
03933 }

void GRA_color_CB MCW_arrowval   av,
XtPointer    cd
 

Definition at line 5769 of file afni_graph.c.

References MCW_grapher::color_index, ENTRY, GRA_VALID, MCW_arrowval::ival, NUM_COLOR_ITEMS, MCW_grapher::opt_color_av, and redraw_graph().

Referenced by new_MCW_grapher().

05770 {
05771    MCW_grapher *grapher = (MCW_grapher *) cd ;
05772    int ii , jj ;
05773 
05774 ENTRY("GRA_color_CB") ;
05775 
05776    if( ! GRA_VALID(grapher) ) EXRETURN ;
05777 
05778    for( ii=0 ; ii < NUM_COLOR_ITEMS ; ii++ )
05779      if( av == grapher->opt_color_av[ii] ) break ;
05780 
05781    if( ii < NUM_COLOR_ITEMS ){
05782      jj = grapher->color_index[ii] ;
05783      grapher->color_index[ii] = av->ival ;
05784      if( jj != grapher->color_index[ii] ) redraw_graph( grapher , 0 ) ;
05785    }
05786    EXRETURN ;
05787 }

void GRA_doshift MCW_grapher   grapher
 

Definition at line 5045 of file afni_graph.c.

References CALL_sendback, MCW_grapher::dc, MCW_DC::display, ENTRY, FIM_menu::fim_editref_winaver_bbox, MCW_grapher::fmenu, MCW_grapher::getaux, GRA_VALID, graCR_refequals, graCR_winaver, IMARR_COUNT, IMARR_SUBIMAGE, MCW_grapher::init_ignore, MCW_set_bbox(), MRI_FLOAT_PTR, mri_free(), mri_new(), mri_shift_1D(), MRI_IMAGE::nx, GRA_cbs::reason, MCW_grapher::ref_ts, MCW_grapher_status::send_CB, MCW_grapher::setshift_inc, MCW_grapher::setshift_left, MCW_grapher::setshift_right, MCW_grapher::status, and GRA_cbs::userdata.

Referenced by GRA_setshift_action_CB().

05046 {
05047    MRI_IMAGE * tsim , * newim , * tim ;
05048    float * tsar , * nar , * tar ;
05049    int ii,ivec , nx , newny , nleft,nright ;
05050    float shinc ;
05051    GRA_cbs gbs ;
05052 
05053 ENTRY("GRA_doshift") ;
05054 
05055    if( !GRA_VALID(grapher) ) EXRETURN ;
05056 
05057    if( grapher->status->send_CB == NULL                       ||
05058        grapher->setshift_inc <= 0.0                           ||
05059        grapher->setshift_left + grapher->setshift_right <= 0  ||
05060        grapher->ref_ts == NULL                                ||
05061        IMARR_COUNT(grapher->ref_ts) == 0                        ){
05062 
05063       XBell( grapher->dc->display , 100 ) ; EXRETURN ;
05064    }
05065 
05066    tsim = IMARR_SUBIMAGE(grapher->ref_ts,0) ; /* current ref */
05067    tsar = MRI_FLOAT_PTR(tsim) ;
05068    nx   = tsim->nx ;
05069 
05070    shinc  = grapher->setshift_inc ;
05071    nleft  = grapher->setshift_left ;
05072    nright = grapher->setshift_right ;
05073    newny  = 1 + nleft + nright ;
05074    newim  = mri_new( nx , newny , MRI_float ) ;
05075    nar    = MRI_FLOAT_PTR(newim) ;
05076 
05077    for( ii=0 ; ii < nx ; ii++ )
05078       nar[ii] = (ii < grapher->init_ignore) ? WAY_BIG : tsar[ii] ;
05079 
05080    for( ivec=1 ; ivec <= nleft ; ivec++ ){
05081       tim = mri_shift_1D( newim , -ivec * shinc ) ;
05082       tar = MRI_FLOAT_PTR(tim) ;
05083       for( ii=0 ; ii < nx ; ii++ ) nar[ii+ivec*nx] = tar[ii] ;
05084       mri_free(tim) ;
05085    }
05086 
05087    for( ivec=1 ; ivec <= nright ; ivec++ ){
05088       tim = mri_shift_1D( newim , ivec * shinc ) ;
05089       tar = MRI_FLOAT_PTR(tim) ;
05090       for( ii=0 ; ii < nx ; ii++ ) nar[ii+(ivec+nleft)*nx] = tar[ii] ;
05091       mri_free(tim) ;
05092    }
05093 
05094    { GRA_cbs cbs; cbs.reason=graCR_winaver; CALL_sendback(grapher,cbs); }
05095    MCW_set_bbox( grapher->fmenu->fim_editref_winaver_bbox , 0 ) ;
05096    gbs.reason   = graCR_refequals ;
05097    gbs.userdata = (XtPointer) newim ;
05098 #if 0
05099    grapher->status->send_CB( grapher , grapher->getaux , &gbs ) ;
05100 #else
05101    CALL_sendback( grapher , gbs ) ;
05102 #endif
05103    mri_free( newim ) ;
05104    EXRETURN ;
05105 }

void GRA_dplot_change_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

Definition at line 5689 of file afni_graph.c.

References client_data, ENTRY, GRA_REALZ, and redraw_graph().

Referenced by new_MCW_grapher().

05690 {
05691    MCW_grapher *grapher = (MCW_grapher *) client_data ;
05692 
05693 ENTRY("GRA_dplot_change_CB") ;
05694 
05695    if( ! GRA_REALZ(grapher) ) EXRETURN ;
05696    redraw_graph( grapher , 0 ) ;
05697    EXRETURN ;
05698 }

void GRA_draw_circle MCW_grapher   grapher,
int    xc,
int    yc,
int    rad
 

Definition at line 1183 of file afni_graph.c.

References MCW_grapher::dc, MCW_DC::display, MCW_grapher::draw_fd, MCW_DC::myGC, xc, and yc.

Referenced by GRA_redraw_overlay().

01184 {
01185    int xb,yb ;
01186    unsigned int ww ;
01187 
01188    if( rad < 0 ) rad = 0 ;
01189    xb = xc-rad ; yb = yc-rad ; ww = 2*rad ;
01190    XDrawArc( grapher->dc->display , XtWindow(grapher->draw_fd) ,
01191              grapher->dc->myGC , xb,yb , ww,ww , 0,360*64 ) ;
01192 }

void GRA_drawing_EV Widget    w,
XtPointer    client_data,
XEvent *    ev,
Boolean *    continue_to_dispatch
 

Definition at line 2710 of file afni_graph.c.

References abs, AFMALL, AV_fval_to_char(), MCW_grapher::but3_label, MCW_grapher::but3_menu, MCW_grapher::button2_enabled, CALL_sendback, MCW_grapher::cen_line, client_data, MCW_grapher::draw_fd, drive_MCW_grapher(), ENTRY, ev, event, GRA_cbs::event, MCW_grapher::fd_pxWind, MCW_grapher::fdw_graph, MCW_grapher::fHIGH, free, MCW_grapher::fWIDE, MCW_grapher::getaux, getenv(), MCW_grapher::glogo_height, MCW_grapher::glogo_pixmap, MCW_grapher::glogo_width, GRA_handle_keypress(), GRA_new_pixmap(), GRA_REALZ, GRA_redraw_overlay(), GRA_timer_stop(), graCR_button2_points, graCR_setindex, graDR_setindex, gx, MCW_grapher::gx, gy, MCW_grapher::gy, i, THD_ivec3::ijk, ISONE, GRA_cbs::key, mat, MCW_grapher::mat, MCW_discard_events(), MCW_widget_geom(), NBOT, new_MCW_textwin(), MCW_grapher::nncen, NPTS, MCW_grapher_status::nx, MCW_grapher_status::ny, MCW_grapher::option_rowcol, GRA_cbs::reason, redraw_graph(), MCW_grapher::sbot, MCW_grapher_status::send_CB, send_newinfo(), show_grapher_pixmap, STATUS, MCW_grapher::status, MCW_grapher::stop, MCW_grapher::tbot, TEMP_IVEC3, TEXT_READONLY, MCW_grapher::textgraph, THD_fdind_to_3dind(), MCW_grapher::tmad, MCW_grapher::tmean, MCW_grapher::tmed, MCW_grapher::tstd, TTOP, MCW_grapher::ttop, MCW_grapher::tuser, MCW_grapher::valid, MCW_grapher::xc, GRA_cbs::xcen, MCW_grapher::xorigin, MCW_grapher::xpoint, MCW_grapher::yc, GRA_cbs::ycen, MCW_grapher::yorigin, MCW_grapher::ypoint, GRA_cbs::zcen, and MCW_grapher::zpoint.

Referenced by new_MCW_grapher().

02712 {
02713    MCW_grapher * grapher = (MCW_grapher *) client_data ;
02714 
02715 ENTRY("GRA_drawing_EV") ;
02716 
02717    if( ! GRA_REALZ(grapher) ){
02718 if(PRINT_TRACING){
02719 char str[256] ;
02720 sprintf(str,"unrealized grapher! Event type = %d",(int)ev->type) ;
02721 STATUS(str) ; }
02722       EXRETURN ;
02723    }
02724 
02725    if( grapher->valid == 666 ){  /* 06 Jan 1999 */
02726 if(PRINT_TRACING){
02727 char str[256] ;
02728 sprintf(str,"dying grapher! Event type = %d",(int)ev->type) ;
02729 STATUS(str) ; }
02730       EXRETURN ;
02731    }
02732 
02733    switch( ev->type ){
02734 
02735       /*----- redraw -----*/
02736 
02737       case Expose:{
02738          XExposeEvent * event = (XExposeEvent *) ev ;
02739 
02740 if(PRINT_TRACING){
02741 char str[256] ;
02742 sprintf(str,"Expose event with count = %d",event->count) ;
02743 STATUS(str) ; }
02744 
02745          /**
02746              With the first expose, create the new pixmap.
02747              For subsequent ones, just redraw the non-pixmap (overlay) stuff.
02748 
02749              06 Jan 1999: check event count
02750          **/
02751 
02752          XSync( XtDisplay(w) , False ) ;  /* 05 Feb 1999 */
02753 
02754          if( event->count == 0 ){
02755             if( grapher->fd_pxWind == (Pixmap) 0 ){
02756                int width , height ;
02757                MCW_widget_geom( grapher->draw_fd , &width , &height , NULL,NULL ) ;
02758                GRA_new_pixmap( grapher , width , height , 1 ) ;
02759             } else {
02760                GRA_redraw_overlay( grapher ) ;
02761             }
02762          }
02763       }
02764       break ;
02765 
02766       /*----- take key press -----*/
02767 
02768       case KeyPress:{
02769          XKeyEvent * event = (XKeyEvent *) ev ;
02770          char           buf[32] ;
02771          KeySym         ks=0 ;
02772          int            nbuf ;
02773 
02774 STATUS("KeyPress event") ;
02775 
02776          GRA_timer_stop( grapher ) ;  /* 04 Dec 2003 */
02777 
02778          if( grapher->fd_pxWind != (Pixmap) 0 ){
02779             buf[0] = '\0' ;
02780             nbuf = XLookupString( event , buf , 32 , &ks , NULL ) ;
02781             if( nbuf == 0 ){   /* 24 Jan 2003: substitution for special keys */
02782               switch(ks){
02783                 case XK_KP_Left:
02784                 case XK_Left:      buf[0] = '<' ; break ;
02785                 case XK_KP_Right:
02786                 case XK_Right:     buf[0] = '>' ; break ;
02787                 case XK_KP_Page_Up:
02788                 case XK_Page_Up:   buf[0] = 'Z' ; break ;
02789                 case XK_KP_Page_Down:
02790                 case XK_Page_Down: buf[0] = 'z' ; break ;
02791               }
02792             }
02793             if( buf[0] != '\0' ) GRA_handle_keypress( grapher , buf , ev ) ;
02794             else if(PRINT_TRACING){
02795                char str[256] ;
02796                sprintf(str,"*** KeyPress was empty!?  nbuf=%d",nbuf) ;
02797                STATUS(str) ;
02798             }
02799          }
02800       }
02801       break ;
02802 
02803       /*----- take button press -----*/
02804 
02805       case ButtonPress:{
02806          XButtonEvent * event = (XButtonEvent *) ev ;
02807          int bx,by , width,height , but ;
02808          int i, j, gx , gy , mat , xloc,yloc ;
02809          unsigned int but_state ;
02810          int xd,yd,zd ;  /* 19 Mar 2004: for mangling to AFNI indexes */
02811 
02812 STATUS("button press") ;
02813 
02814          bx  = event->x ;
02815          by  = event->y ;
02816          but = event->button ; but_state = event->state ;
02817          MCW_discard_events( w , ButtonPressMask ) ;
02818 
02819          /* Button 1 in pixmap logo = toggle on or off */
02820 
02821          if( but == Button1                                &&
02822              grapher->glogo_pixmap != XmUNSPECIFIED_PIXMAP &&
02823              bx < grapher->glogo_width                     &&
02824              grapher->fHIGH - by < grapher->glogo_height     ){
02825 
02826             show_grapher_pixmap = ! show_grapher_pixmap ;
02827 
02828             if( XtIsManaged(grapher->option_rowcol) )     /* 04 Nov 1996 */
02829               XtUnmanageChild(grapher->option_rowcol) ;
02830             else
02831               XtManageChild(grapher->option_rowcol) ;
02832 
02833             redraw_graph( grapher , 0 )  ;
02834             break ; /* break out of ButtonPress case */
02835          }
02836 
02837          /* compute which dataset pixel (xloc,yloc) the button press was in */
02838 
02839          /* X11 box for graph (i,j):
02840             x = xorigin[i][j]          .. xorigin[i][j]+gx    (L..R)
02841             y = fHIGH-yorigin[i][j]-gy .. fHIGH-yorigin[i][j] (T..B) */
02842 
02843          gx = grapher->gx ; gy = grapher->gy ; mat = grapher->mat ;
02844 
02845          for( i=0 ; i < mat ; i++ )
02846            if( bx > grapher->xorigin[i][0]      &&
02847                bx < grapher->xorigin[i][0] + gx   ) break ;  /* find in x */
02848 
02849          if( i == mat ) break ; /* break out of ButtonPress case */
02850 
02851          xloc = grapher->xpoint + i - grapher->xc ;
02852 
02853          for( j=0 ; j < mat ; j++ )                           /* find in y */
02854            if( by > grapher->fHIGH - grapher->yorigin[0][j] - gy &&
02855                by < grapher->fHIGH - grapher->yorigin[0][j]        ) break ;
02856 
02857          if( j == mat ) break ; /* break out of ButtonPress case */
02858 
02859          yloc = grapher->ypoint - j + grapher->yc ;
02860 
02861          /* adjust for possible wraparound */
02862 
02863          if (xloc < 0)                    xloc += grapher->status->nx ;
02864          if (xloc >= grapher->status->nx) xloc -= grapher->status->nx ;
02865          if (yloc < 0)                    yloc += grapher->status->ny ;
02866          if (yloc >= grapher->status->ny) yloc -= grapher->status->ny ;
02867 
02868          /* Feb 1998: button 2 --> send message back to AFNI, maybe */
02869          /* 03 Oct 2002: Shift+Button1 has the same effect */
02870 
02871          if( but == Button2 ||
02872              ( but == Button1 && (event->state & ShiftMask) &&
02873                                 !(event->state & ControlMask) ) ){
02874 
02875             if( grapher->button2_enabled && (bx > GL_DLX) ){
02876                GRA_cbs cbs ;
02877                cbs.reason = graCR_button2_points ;
02878                cbs.xcen   = xloc ;
02879                cbs.ycen   = yloc ;
02880                cbs.zcen   = grapher->zpoint ;
02881 #if 0
02882                grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
02883 #else
02884                CALL_sendback( grapher , cbs ) ;
02885 #endif
02886             } else {
02887                XBell(XtDisplay(w),100) ;
02888             }
02889          }
02890 
02891          /* button 1 --> move to new square as center of matrix,
02892                          if it is actually a new center, that is,
02893                          and if graphing is enabled, and if not off left edge */
02894 
02895          if( grapher->fd_pxWind != (Pixmap) 0 &&
02896              but == Button1                   && (bx > GL_DLX) &&
02897              ( (xloc != grapher->xpoint) || (yloc != grapher->ypoint) ) ){
02898 
02899                grapher->xpoint = xloc ;
02900                grapher->ypoint = yloc ;
02901                redraw_graph( grapher , 0 ) ;
02902                send_newinfo( grapher ) ;
02903          }
02904 
02905          /* 22 July 1996:
02906             button 1 in central graph of matrix causes jump to time_index */
02907 
02908          else if( grapher->fd_pxWind != (Pixmap)0 &&
02909                   NPTS(grapher) > 1               && !grapher->textgraph     &&
02910                   (but==Button1)                  && (bx > GL_DLX)           &&
02911                   (xloc == grapher->xpoint)       && yloc == grapher->ypoint &&
02912                   grapher->cen_line != NULL       && grapher->nncen > 1        ){
02913 
02914            float dist , dmin=999999.9 ;
02915            int imin = 0 ;
02916 
02917            /*-- 09 Jan 1998: find closest pixel in central graph --*/
02918 
02919            for( i=0 ; i < grapher->nncen ; i++ ){
02920              dist =  abs( bx - grapher->cen_line[i].x )   /* L1 distance */
02921                    + abs( by - grapher->cen_line[i].y ) ;
02922              if( dist < dmin ){ dmin = dist; imin = i; if(dmin == 0) break; }
02923            }
02924            i = imin + NBOT(grapher) ;
02925 
02926            if( i >= 0 && i < TTOP(grapher) ){
02927              if( grapher->status->send_CB != NULL ){
02928                GRA_cbs cbs ;
02929 
02930                cbs.reason = graCR_setindex ;
02931                cbs.key    = i ;
02932                cbs.event  = ev ;
02933 #if 0
02934                grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
02935 #else
02936                CALL_sendback( grapher , cbs ) ;
02937 #endif
02938              } else {
02939                (void) drive_MCW_grapher( grapher,graDR_setindex,(XtPointer)i );
02940              }
02941            }
02942          }
02943 
02944          /* Button 3 --> popup statistics of this graph */
02945 
02946          if( but == Button3 && !ISONE(grapher) && !grapher->textgraph ){
02947             int ix , iy ;
02948 
02949             ix = xloc - grapher->xpoint + grapher->xc ;
02950                  if( ix <  0            ) ix += grapher->status->nx ;
02951             else if( ix >= grapher->mat ) ix -= grapher->status->nx ;
02952 
02953             iy = grapher->ypoint - yloc + grapher->yc ;
02954                  if( iy <  0            ) iy += grapher->status->ny ;
02955             else if( iy >= grapher->mat ) iy -= grapher->status->ny ;
02956 
02957             if( ix >= 0 && ix < grapher->mat && iy >= 0 && iy < grapher->mat ){
02958                XmString xstr ;
02959                char bmin[16],bmax[16],bmean[16],bstd[16] ;
02960                char bmed[16] , bmad[16] ; /* 08 Mar 2001 */
02961                char *qstr , *eee ;        /* 07 Mar 2002 */
02962                int nlin , nltop=40 ;      /* 07 Mar 2002 */
02963 
02964                AV_fval_to_char( grapher->tbot[ix][iy]  , bmin ) ;
02965                AV_fval_to_char( grapher->ttop[ix][iy]  , bmax ) ;
02966                AV_fval_to_char( grapher->tmean[ix][iy] , bmean) ;
02967                AV_fval_to_char( grapher->tstd[ix][iy]  , bstd ) ;
02968 
02969                AV_fval_to_char( grapher->tmed[ix][iy]  , bmed ) ; /* 08 Mar 2001 */
02970                AV_fval_to_char( grapher->tmad[ix][iy]  , bmad ) ;
02971 
02972                if( grapher->tuser[ix][iy] == NULL )
02973                  qstr = AFMALL(char, 912) ;
02974                else
02975                  qstr = AFMALL(char, 912+strlen(grapher->tuser[ix][iy])) ;
02976 
02977                /* 19 Mar 2004: mangle FD_brick indexes to AFNI indexes */
02978 
02979                xd = xloc; yd = yloc; zd = grapher->zpoint ;
02980 #ifndef DONT_MANGLE_XYZ
02981                { THD_ivec3 id ;
02982                  id = THD_fdind_to_3dind( grapher->getaux , TEMP_IVEC3(xd,yd,zd) ) ;
02983                  xd = id.ijk[0] ; yd = id.ijk[1] ; zd = id.ijk[2] ; }
02984 #endif
02985                sprintf( qstr, "Data Statistics\n"
02986                               "---------------\n"
02987                               "Indexes = %d:%-d\n" /* 19 Mar 2004 */
02988                               "x voxel = %d\n"
02989                               "y voxel = %d\n"
02990                               "z voxel = %d\n"
02991                               "Min     =%s\n"
02992                               "Max     =%s\n"
02993                               "Mean    =%s\n"
02994                               "Sigma   =%s\n"
02995                               "Median  =%s\n"     /* 08 Mar 2001 */
02996                               "MAD     =%s" ,
02997                         grapher->sbot[ix][iy], grapher->stop[ix][iy], /* 19 Mar 2004 */
02998                         xd , yd , zd ,
02999                         bmin,bmax,bmean,bstd,bmed,bmad ) ;
03000 
03001                 /** 22 Apr 1997: incorporate user string for this voxel **/
03002 
03003                 if( grapher->tuser[ix][iy] != NULL ){
03004                   strcat( qstr , "\n------------------\n" ) ;
03005                   strcat( qstr , grapher->tuser[ix][iy] ) ;
03006                 }
03007 
03008                 /* 07 Mar 2002: if string is too long, popup textwin,
03009                                 otherwise just open a popup window    */
03010 
03011                 eee = getenv( "AFNI_GRAPH_TEXTLIMIT" ) ;
03012                 if( eee != NULL ){
03013                   nlin = strtol( eee , NULL , 10 ) ;
03014                   if( nlin > 0 ) nltop = nlin ;
03015                 }
03016 
03017                 for( nlin=1,eee=qstr ; *eee != '\0' ; eee++ )
03018                   if( *eee == '\n' ) nlin++ ;
03019 
03020                 if( nlin < nltop ){
03021                   xstr = XmStringCreateLtoR( qstr, XmFONTLIST_DEFAULT_TAG ) ;
03022                   XtVaSetValues( grapher->but3_label,XmNlabelString,xstr,NULL );
03023                   XmStringFree( xstr ) ;
03024                   XmMenuPosition( grapher->but3_menu , event ) ; /* where */
03025                   XtManageChild ( grapher->but3_menu ) ;         /* popup */
03026                 } else {
03027                   (void) new_MCW_textwin(grapher->fdw_graph,qstr,TEXT_READONLY);
03028                 }
03029                 free(qstr) ;
03030 
03031             } else {
03032               redraw_graph(grapher,0) ;  /* 11 Nov 1996 */
03033             }
03034          }
03035       }
03036       break ;
03037 
03038       /*----- window changed size -----*/
03039 
03040       case ConfigureNotify:{
03041          XConfigureEvent * event = (XConfigureEvent *) ev ;
03042          int new_width , new_height ;
03043 
03044 STATUS("ConfigureNotify event") ;
03045 
03046          XSync( XtDisplay(w) , False ) ;
03047 
03048          new_width  = event->width ;
03049          new_height = event->height ;
03050 
03051          if( new_width != grapher->fWIDE || new_height != grapher->fHIGH ){
03052            GRA_new_pixmap( grapher , new_width , new_height , 1 ) ;
03053          }
03054       }
03055       break ;
03056 
03057       /*----- ignore all other events -----*/
03058 
03059       default:
03060 #ifdef AFNI_DEBUG
03061 {char str[256]; sprintf(str,"Event code = %d\n",(int)ev->type); STATUS(str);}
03062 #endif
03063       break ;
03064 
03065    } /* end of switch ev->type */
03066 
03067    EXRETURN ;
03068 }

void GRA_file_pixmap MCW_grapher   grapher,
char *    fname
 

Definition at line 5871 of file afni_graph.c.

References MCW_grapher::dc, MCW_DC::display, ENTRY, MCW_grapher::fd_pxWind, MCW_grapher::fHIGH, MCW_grapher::fWIDE, GRA_REALZ, INFO_message(), MCW_kill_XImage(), mri_free(), mri_write_pnm(), MCW_DC::myGC, and XImage_to_mri().

Referenced by AFNI_drive_save_jpeg(), and GRA_saver_CB().

05872 {
05873    XImage *xim ;
05874    XGCValues gcv ;
05875    MRI_IMAGE *tim ;
05876    int ii ;
05877 
05878 ENTRY("GRA_file_pixmap") ;
05879 
05880    if( ! GRA_REALZ(grapher) ) EXRETURN ;
05881    if( grapher->fd_pxWind == (Pixmap) 0 ) EXRETURN ;
05882 
05883    ii = XGetGCValues( grapher->dc->display ,
05884                       grapher->dc->myGC , GCPlaneMask , &gcv ) ;
05885    if( ii == 0 ) EXRETURN ;
05886 
05887    xim = XGetImage( grapher->dc->display , grapher->fd_pxWind ,
05888                     0 , 0 , grapher->fWIDE , grapher->fHIGH ,
05889                     gcv.plane_mask , ZPixmap ) ;
05890    if( xim == NULL ) EXRETURN ;
05891 
05892    tim = XImage_to_mri( grapher->dc , xim , 0 ) ;
05893    if( tim == NULL ){ MCW_kill_XImage( xim ) ; EXRETURN ; }
05894 
05895    mri_write_pnm( fname , tim ) ;
05896    INFO_message("Writing grapher image to file %s\n",fname) ;
05897    mri_free( tim ) ;
05898    MCW_kill_XImage( xim ) ;  /* 10 Mar 1999 */
05899    EXRETURN ;
05900 }

void GRA_fim_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

Definition at line 4556 of file afni_graph.c.

References CALL_getser, CALL_sendback, client_data, MCW_grapher::dc, MCW_DC::display, ENTRY, EXRONE, FIM_ALPHA_MASK, FIM_menu::fim_bkthr_choose_pb, FIM_CORR_MASK, FIM_DEFAULT_MASK, FIM_menu::fim_editort_clear_pb, FIM_menu::fim_editref_add_pb, FIM_menu::fim_editref_clear_pb, FIM_menu::fim_editref_equals_pb, FIM_menu::fim_editref_read_pb, FIM_menu::fim_editref_setshift_pb, FIM_menu::fim_editref_smooth_pb, FIM_menu::fim_editref_store_pb, FIM_menu::fim_editref_winaver_bbox, FIM_menu::fim_editref_write_pb, FIM_menu::fim_execfimp_pb, FIM_menu::fim_execute_pb, FIM_menu::fim_ignore_choose_av, FIM_menu::fim_ignore_choose_pb, FIM_menu::fim_ignore_down_pb, FIM_menu::fim_ignore_up_pb, FIM_NUM_OPTS, FIM_menu::fim_opt_bbox, FIM_PAVE_MASK, FIM_PERC_MASK, FIM_menu::fim_pickort_pb, FIM_menu::fim_pickref_pb, FIM_menu::fim_plot_allrefs_pb, FIM_menu::fim_plot_firstref_pb, FIM_menu::fim_polort_choose_av, FIM_menu::fim_polort_choose_pb, FIM_PTOP_MASK, FIM_menu::fimp_opt_bbox, FIM_menu::fimp_setall_pb, FIM_menu::fimp_setdefault_pb, FIM_menu::fimp_unsetall_pb, FIM_menu::fimp_user_bbox, MCW_grapher::fmenu, MCW_grapher::getaux, MCW_grapher::getser, GRA_bkthr_choose_CB(), GRA_ignore_choose_CB(), GRA_polort_choose_CB(), GRA_refread_choose_CB(), GRA_refstore_choose_CB(), GRA_refwrite_choose_CB(), GRA_setshift_startup(), GRA_timer_stop(), GRA_VALID, graCR_clearfim, graCR_clearort, graCR_dofim, graCR_getseries, graCR_pickort, graCR_pickref, graCR_refadd, graCR_refequals, graCR_refsmooth, graCR_setignore, graCR_winaver, IMARR_COUNT, MCW_grapher::init_ignore, GRA_cbs::key, GRA_cbs::mat, MCW_choose_integer(), MCW_choose_string(), MCW_set_bbox(), MCW_val_bbox(), mri_free(), my_getenv(), MCW_grapher_status::num_series, MCW_grapher_status::nx, MCW_grapher_status::ny, MCW_grapher::option_rowcol, FIM_menu::parent, MCW_grapher::polort, GRA_cbs::reason, redraw_graph(), MCW_grapher::ref_ts, MCW_grapher::ref_ts_plotall, MCW_grapher_status::send_CB, MCW_grapher::status, MCW_grapher::tschosen, GRA_cbs::userdata, MCW_grapher::xpoint, MCW_grapher::ypoint, and MCW_grapher::zpoint.

Referenced by new_MCW_grapher().

04557 {
04558    FIM_menu * fm = (FIM_menu *) client_data ;
04559    MCW_grapher * grapher = (MCW_grapher *) fm->parent ;
04560    GRA_cbs cbs ;
04561 
04562 ENTRY("GRA_fim_CB") ;
04563 
04564    if( ! GRA_VALID(grapher) || grapher->status->send_CB == NULL ) EXRETURN ;
04565 
04566    EXRONE(grapher) ;  /* 22 Sep 2000 */
04567 
04568    /*--- carry out action, depending on which widget called me ---*/
04569 
04570    /*** Pick reference ***/
04571 
04572    if( w == grapher->fmenu->fim_pickref_pb ){
04573       cbs.reason = graCR_pickref ;
04574 #if 0
04575       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04576 #else
04577       CALL_sendback( grapher , cbs ) ;
04578 #endif
04579       grapher->tschosen = 1 ;  /* 31 Mar 2004 */
04580    }
04581 
04582    /*** Pick ort ***/
04583 
04584    else if( w == grapher->fmenu->fim_pickort_pb ){
04585       cbs.reason = graCR_pickort ;
04586 #if 0
04587       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04588 #else
04589       CALL_sendback( grapher , cbs ) ;
04590 #endif
04591       grapher->tschosen = 1 ;  /* 31 Mar 2004 */
04592    }
04593 
04594    /*** Clear FIM ***/
04595 
04596    else if( w == grapher->fmenu->fim_editref_clear_pb ){
04597       cbs.reason = graCR_clearfim ;
04598 #if 0
04599       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04600 #else
04601       CALL_sendback( grapher , cbs ) ;
04602 #endif
04603    }
04604 
04605    /*** Clear Ort ***/
04606 
04607    else if( w == grapher->fmenu->fim_editort_clear_pb ){
04608       cbs.reason = graCR_clearort ;
04609 #if 0
04610       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04611 #else
04612       CALL_sendback( grapher , cbs ) ;
04613 #endif
04614    }
04615 
04616    /*** set ref to central time series ***/
04617 
04618    else if( w == grapher->fmenu->fim_editref_equals_pb ||
04619             w == grapher->fmenu->fim_editref_add_pb      ){
04620       int ll ;
04621       MRI_IMAGE * tsim ;
04622 
04623       ll = grapher->xpoint +
04624            grapher->ypoint * grapher->status->nx +
04625            grapher->zpoint * grapher->status->nx * grapher->status->ny ;
04626 
04627 #if 0
04628       tsim  = (MRI_IMAGE *) grapher->getser( ll , graCR_getseries ,
04629                                                   grapher->getaux ) ;
04630 #else
04631       CALL_getser( grapher , ll,graCR_getseries , MRI_IMAGE *,tsim ) ;
04632 #endif
04633 
04634       if( tsim != NULL ){
04635          { GRA_cbs cbs; cbs.reason=graCR_winaver; CALL_sendback(grapher,cbs); }
04636          MCW_set_bbox( grapher->fmenu->fim_editref_winaver_bbox , 0 ) ;
04637          cbs.reason   = (w == grapher->fmenu->fim_editref_equals_pb)
04638                         ? graCR_refequals : graCR_refadd ;
04639          cbs.userdata = (XtPointer) tsim ;
04640 #if 0
04641          grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04642 #else
04643          CALL_sendback( grapher , cbs ) ;
04644 #endif
04645          mri_free( tsim ) ;
04646       }
04647    }
04648 
04649    /*** read or write or smooth ***/
04650 
04651    else if( w == grapher->fmenu->fim_editref_read_pb ){
04652       MCW_choose_string( grapher->option_rowcol ,
04653                          "Ideal Input Filename:" , NULL ,
04654                          GRA_refread_choose_CB , (XtPointer) grapher ) ;
04655    }
04656 
04657    else if( w == grapher->fmenu->fim_editref_write_pb ){
04658       if( grapher->ref_ts != NULL && IMARR_COUNT(grapher->ref_ts) > 0 ){
04659          MCW_choose_string( grapher->option_rowcol ,
04660                             "Ideal Output Filename:" , NULL ,
04661                             GRA_refwrite_choose_CB , (XtPointer) grapher ) ;
04662       } else {
04663          XBell( grapher->dc->display , 100 ) ;
04664       }
04665    }
04666 
04667    else if( w == grapher->fmenu->fim_editref_store_pb ){
04668       if( grapher->ref_ts != NULL && IMARR_COUNT(grapher->ref_ts) > 0 ){
04669          MCW_choose_string( grapher->option_rowcol ,
04670                             "Label to Store Ideal:" , NULL ,
04671                             GRA_refstore_choose_CB , (XtPointer) grapher ) ;
04672       } else {
04673          XBell( grapher->dc->display , 100 ) ;
04674       }
04675    }
04676 
04677    else if( w == grapher->fmenu->fim_editref_smooth_pb ){
04678       cbs.reason = graCR_refsmooth ;
04679       if( grapher->ref_ts != NULL && IMARR_COUNT(grapher->ref_ts) > 0 ){
04680          { GRA_cbs cbs; cbs.reason=graCR_winaver; CALL_sendback(grapher,cbs); }
04681          MCW_set_bbox( grapher->fmenu->fim_editref_winaver_bbox , 0 ) ;
04682 #if 0
04683          grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04684 #else
04685          CALL_sendback( grapher , cbs ) ;
04686 #endif
04687       } else {
04688          XBell( grapher->dc->display , 100 ) ;
04689       }
04690    }
04691 
04692    /*** Set shifts ***/
04693 
04694    else if( w == grapher->fmenu->fim_editref_setshift_pb ){
04695       GRA_setshift_startup( grapher ) ;
04696    }
04697 
04698    /*** Execute FIM ***/
04699 
04700    else if( w == grapher->fmenu->fim_execute_pb ){
04701       int val = MCW_val_bbox(grapher->fmenu->fim_opt_bbox) ;
04702       cbs.reason = graCR_dofim ;
04703       switch(val){
04704          default:  cbs.key = FIM_ALPHA_MASK | FIM_CORR_MASK ; break ;
04705          case 2:   cbs.key = FIM_PERC_MASK  | FIM_CORR_MASK ; break ;
04706          case 4:   cbs.key = FIM_PAVE_MASK  | FIM_CORR_MASK ; break ;
04707          case 3:   cbs.key = FIM_PTOP_MASK  | FIM_CORR_MASK ; break ;
04708       }
04709       cbs.mat = 0 ; /* Feb 2000 */
04710       GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
04711 #if 0
04712       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04713 #else
04714       CALL_sendback( grapher , cbs ) ;
04715 #endif
04716    }
04717 
04718    else if( w == grapher->fmenu->fim_execfimp_pb ){
04719       cbs.reason = graCR_dofim ;
04720       cbs.key    = MCW_val_bbox(grapher->fmenu->fimp_opt_bbox) ;
04721       cbs.mat    = MCW_val_bbox(grapher->fmenu->fimp_user_bbox) ; /* Feb 2000 */
04722       GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
04723       if( cbs.key || cbs.mat )
04724 #if 0
04725          grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04726 #else
04727          CALL_sendback( grapher , cbs ) ;
04728 #endif
04729       else
04730          XBell( grapher->dc->display , 100 ) ;
04731    }
04732 
04733    /*** 04 Jan 2000: modify the FIM+ button settings ***/
04734 
04735    else if( w == grapher->fmenu->fimp_setdefault_pb ){
04736      char * ff = my_getenv( "AFNI_FIM_MASK" ) ; int mm=0 ;
04737      if( ff != NULL ) mm = strtol(ff,NULL,10) ;
04738      if( mm <= 0 ) mm = FIM_DEFAULT_MASK ;
04739      MCW_set_bbox( grapher->fmenu->fimp_opt_bbox , mm ) ;
04740    }
04741 
04742    else if( w == grapher->fmenu->fimp_setall_pb ){
04743       int mm = (2 << FIM_NUM_OPTS) - 1 ;
04744       MCW_set_bbox( grapher->fmenu->fimp_opt_bbox , mm ) ;
04745    }
04746 
04747    else if( w == grapher->fmenu->fimp_unsetall_pb ){
04748       MCW_set_bbox( grapher->fmenu->fimp_opt_bbox , 0 ) ;
04749    }
04750 
04751    /*** FIM plotting buttons ***/
04752 
04753    else if( w == grapher->fmenu->fim_plot_firstref_pb ){
04754       if( grapher->ref_ts_plotall != 0 ){
04755          grapher->ref_ts_plotall = 0 ;
04756          redraw_graph( grapher , 0 ) ;
04757       }
04758    }
04759 
04760    else if( w == grapher->fmenu->fim_plot_allrefs_pb ){
04761       if( grapher->ref_ts_plotall == 0 ){
04762          grapher->ref_ts_plotall = 1 ;
04763          redraw_graph( grapher , 0 ) ;
04764       }
04765    }
04766 
04767    /*** Ignore stuff ***/
04768 
04769    else if( w == grapher->fmenu->fim_ignore_down_pb && grapher->status->send_CB != NULL ){
04770       GRA_cbs cbs ;
04771 
04772       cbs.reason = graCR_setignore ;
04773       cbs.key    = grapher->init_ignore - 1 ;
04774 #if 0
04775       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04776 #else
04777       CALL_sendback( grapher , cbs ) ;
04778 #endif
04779    }
04780 
04781    else if( w == grapher->fmenu->fim_ignore_up_pb && grapher->status->send_CB != NULL ){
04782       GRA_cbs cbs ;
04783 
04784       cbs.reason = graCR_setignore ;
04785       cbs.key    = grapher->init_ignore + 1 ;
04786 #if 0
04787       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
04788 #else
04789       CALL_sendback( grapher , cbs ) ;
04790 #endif
04791    }
04792 
04793    else if( w == grapher->fmenu->fim_ignore_choose_pb && grapher->status->send_CB != NULL ){
04794 #ifdef USE_OPTMENUS
04795       GRA_ignore_choose_CB( grapher->fmenu->fim_ignore_choose_av , grapher ) ;
04796 #else
04797       MCW_choose_integer( grapher->option_rowcol , "Initial Ignore" ,
04798                           0 , grapher->status->num_series-1 , grapher->init_ignore ,
04799                           GRA_ignore_choose_CB , (XtPointer) grapher ) ;
04800 #endif
04801    }
04802 
04803    /* 27 May 1999: set polort */
04804 
04805    else if( w == grapher->fmenu->fim_polort_choose_pb && grapher->status->send_CB != NULL ){
04806 #ifdef USE_OPTMENUS
04807       GRA_polort_choose_CB( grapher->fmenu->fim_polort_choose_av , grapher ) ;
04808 #else
04809       MCW_choose_integer( grapher->option_rowcol , "Polort Order" ,
04810                           0 , MAX_POLORT , grapher->polort ,
04811                           GRA_polort_choose_CB , (XtPointer) grapher ) ;
04812 #endif
04813    }
04814 
04815    /* 02 Jun 1999: set FIM bkg threshold */
04816 
04817    else if( w == grapher->fmenu->fim_bkthr_choose_pb ){
04818       MCW_choose_integer( grapher->option_rowcol , "Bkg Thresh %" ,
04819                           0 , 99 , (int)(100*FIM_THR) ,
04820                           GRA_bkthr_choose_CB , (XtPointer) grapher ) ;
04821    }
04822 
04823    /*** Unimplemented Button ***/
04824 
04825    else {
04826       XBell( grapher->dc->display , 100 ) ;
04827    }
04828 
04829    /*--- Done!!! ---*/
04830 
04831    EXRETURN ;
04832 }

void GRA_finalize_global_baseline_CB Widget    w,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 5611 of file afni_graph.c.

References AV_fval_to_char(), BASELINE_GLOBAL, MCW_grapher::common_base, ENTRY, MCW_choose_cbs::fval, MCW_grapher::global_base, GRA_VALID, MCW_grapher::opt_baseline_global_label, and redraw_graph().

Referenced by drive_MCW_grapher(), and GRA_opt_CB().

05613 {
05614    MCW_grapher *grapher = (MCW_grapher *) cd ;
05615    XmString xstr ;
05616    char str[32] ;
05617 
05618 ENTRY("GRA_finalize_global_baseline_CB") ;
05619 
05620    if( !GRA_VALID(grapher) ) EXRETURN ;
05621 
05622    grapher->global_base = cbs->fval ;
05623    if( grapher->common_base == BASELINE_GLOBAL ) redraw_graph(grapher,0) ;
05624 
05625    strcpy(str,"Global:") ;
05626    AV_fval_to_char(grapher->global_base,str+7) ;
05627    xstr = XmStringCreateLtoR( str,XmFONTLIST_DEFAULT_TAG ) ;
05628    XtVaSetValues( grapher->opt_baseline_global_label ,
05629                      XmNlabelString,xstr ,
05630                   NULL ) ;
05631    XmStringFree(xstr) ;
05632    EXRETURN ;
05633 }

void GRA_fix_optmenus MCW_grapher   grapher
 

Definition at line 5706 of file afni_graph.c.

References AV_assign_ival(), ENTRY, FIM_menu::fim_ignore_choose_av, FIM_menu::fim_polort_choose_av, MCW_grapher::fmenu, GRA_REALZ, MCW_arrowval::imax, MCW_grapher::init_ignore, MCW_grapher::mat, MCW_grapher::mat_max, MAX, MIN, MCW_grapher_status::num_series, MCW_grapher_status::nz, MCW_grapher::opt_mat_choose_av, MCW_grapher::opt_slice_choose_av, MCW_grapher::polort, refit_MCW_optmenu(), MCW_grapher::status, and MCW_grapher::zpoint.

Referenced by drive_MCW_grapher(), new_MCW_grapher(), and redraw_graph().

05707 {
05708    int igtop ;
05709 
05710 ENTRY("GRA_fix_optmenus") ;
05711 
05712    if( ! GRA_REALZ(grapher) ) EXRETURN ;
05713 
05714    /** matrix selection **/
05715 
05716    if( grapher->opt_mat_choose_av->imax != grapher->mat_max )
05717       refit_MCW_optmenu( grapher->opt_mat_choose_av ,
05718                          1 , grapher->mat_max , grapher->mat , 0 ,
05719                          NULL , NULL ) ;
05720 
05721    else
05722       AV_assign_ival( grapher->opt_mat_choose_av , grapher->mat ) ;
05723 
05724    /** slice selection **/
05725 
05726    if( grapher->opt_slice_choose_av->imax != grapher->status->nz-1 )
05727       refit_MCW_optmenu( grapher->opt_slice_choose_av ,
05728                          0, grapher->status->nz - 1, grapher->zpoint, 0,
05729                          NULL , NULL ) ;
05730 
05731    else
05732       AV_assign_ival( grapher->opt_slice_choose_av , grapher->zpoint ) ;
05733 
05734    /** fim ignoration **/
05735 
05736    igtop = MIN( grapher->status->num_series-2 , 99 ) ;
05737    igtop = MAX( igtop , 1 ) ;
05738 
05739    if( grapher->fmenu->fim_ignore_choose_av->imax != igtop )
05740       refit_MCW_optmenu( grapher->fmenu->fim_ignore_choose_av ,
05741                          0 , igtop , grapher->init_ignore, 0,
05742                          NULL , NULL ) ;
05743    else
05744       AV_assign_ival( grapher->fmenu->fim_ignore_choose_av , grapher->init_ignore ) ;
05745 
05746    /** 27 May 1999: fim polort **/
05747 
05748    AV_assign_ival( grapher->fmenu->fim_polort_choose_av , grapher->polort ) ;
05749 
05750    EXRETURN ;
05751 }

void GRA_fixup_xaxis MCW_grapher   grapher
 

shouldn't get to here, but who knows? *

Definition at line 3635 of file afni_graph.c.

References ENTRY, GRA_VALID, MCW_grapher::init_ignore, MAX, MIN, MRI_FLOAT_PTR, mri_free(), MRI_IMAGE::nx, TBOT, top, TTOP, and MCW_grapher::xax_tsim.

Referenced by plot_graphs().

03636 {
03637    int ii , npt , nx , ibot , nover=0 , pbot,ptop ;
03638    float top,bot , fac ;
03639    float * xxx ;
03640 
03641 ENTRY("GRA_fixup_xaxis") ;
03642 
03643    if( !GRA_VALID(grapher) || grapher->xax_tsim == NULL ) EXRETURN ;
03644 
03645    ptop = TTOP(grapher) ; pbot = TBOT(grapher) ;
03646    npt = ptop ; nx = grapher->xax_tsim->nx ; npt = MIN(npt,nx) ;
03647    xxx = MRI_FLOAT_PTR(grapher->xax_tsim) ;
03648 
03649    ibot = grapher->init_ignore ;
03650    if( ibot >= npt-1 ) ibot = 0 ;
03651    ibot = MAX(ibot,pbot) ;
03652 
03653    /* find range over plotting interval (ibot..npt-1) */
03654 
03655    top = -WAY_BIG ; bot = WAY_BIG ;
03656    for( ii=ibot ; ii < npt ; ii++ ){
03657      if( xxx[ii] < WAY_BIG ){
03658        top = MAX(top,xxx[ii]) ; bot = MIN(bot,xxx[ii]) ;
03659      } else {
03660        nover++ ;
03661      }
03662    }
03663    if( bot >= top ){
03664      mri_free(grapher->xax_tsim) ;
03665      grapher->xax_tsim = NULL ;
03666      EXRETURN ;
03667    }
03668 
03669    /* scale all of the timeseries */
03670 
03671    fac = 1.0 / (top-bot) ;
03672    for( ii=0 ; ii < nx ; ii++ ){
03673      if( xxx[ii] < WAY_BIG ) xxx[ii] = fac * (xxx[ii]-bot) ;
03674      else                    xxx[ii] = 0.0 ;
03675    }
03676 
03677    EXRETURN ;
03678 }

void GRA_fmenu_av_CB MCW_arrowval   av,
XtPointer    cd
 

27 May 1999: fim polort *

Definition at line 5755 of file afni_graph.c.

References FIM_menu::cbfunc, ENTRY, and MCW_arrowval::wrowcol.

Referenced by AFNI_new_fim_menu().

05756 {
05757    FIM_menu *fmenu = (FIM_menu *) cd ;
05758 
05759 ENTRY("GRA_fmenu_av_CB") ;
05760    fmenu->cbfunc( av->wrowcol , cd , NULL ) ;
05761    EXRETURN ;
05762 }

void GRA_ggap_CB MCW_arrowval   cbs,
XtPointer    cd
 

Definition at line 3812 of file afni_graph.c.

References ENTRY, MCW_grapher::ggap, GRA_VALID, init_mat(), MCW_arrowval::ival, and redraw_graph().

Referenced by new_MCW_grapher().

03813 {
03814    MCW_grapher *grapher = (MCW_grapher *) cd ;
03815    int gg ;
03816 
03817 ENTRY("GRA_ggap_CB") ;
03818 
03819    if( ! GRA_VALID(grapher) ) EXRETURN ;
03820 
03821    gg = grapher->ggap ; grapher->ggap = cbs->ival ;
03822    if( gg != grapher->ggap ){
03823      init_mat( grapher ) ; redraw_graph( grapher , 0 ) ;
03824    }
03825 
03826    EXRETURN ;
03827 }

void GRA_grid_choose_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3773 of file afni_graph.c.

References ENTRY, GRA_VALID, MCW_grapher::grid_fixed, MCW_grapher::grid_spacing, MCW_choose_cbs::ival, and redraw_graph().

Referenced by GRA_opt_CB().

03774 {
03775    MCW_grapher *grapher = (MCW_grapher *) cd ;
03776 
03777 ENTRY("GRA_grid_choose_CB") ;
03778 
03779    if( ! GRA_VALID(grapher) ) EXRETURN ;
03780    grapher->grid_spacing = cbs->ival ;
03781    grapher->grid_fixed   = 1 ;  /* 02 Apr 2004 */
03782    redraw_graph(grapher,0) ;
03783    EXRETURN ;
03784 }

void GRA_gthick_CB MCW_arrowval   cbs,
XtPointer    cd
 

Definition at line 3831 of file afni_graph.c.

References ENTRY, GRA_VALID, MCW_grapher::gthick, init_mat(), MCW_arrowval::ival, and redraw_graph().

Referenced by new_MCW_grapher().

03832 {
03833    MCW_grapher *grapher = (MCW_grapher *) cd ;
03834    int gg ;
03835 
03836 ENTRY("GRA_gthick_CB") ;
03837 
03838    if( ! GRA_VALID(grapher) ) EXRETURN ;
03839 
03840    gg = grapher->gthick ; grapher->gthick = cbs->ival ;
03841    if( gg != grapher->gthick ){
03842      init_mat( grapher ) ; redraw_graph( grapher , 0 ) ;
03843    }
03844 
03845    EXRETURN ;
03846 }

void GRA_handle_keypress MCW_grapher   grapher,
char *    buf,
XEvent *    ev
 

Definition at line 3121 of file afni_graph.c.

References AFNI_numenv(), BASELINE_GLOBAL, BASELINE_INDIVIDUAL, CALL_getser, CALL_sendback, MCW_grapher::common_base, MCW_grapher::dc, MCW_DC::display, MCW_grapher::draw_fd, drive_MCW_grapher(), end_fd_graph_CB(), ENTRY, ev, GRA_cbs::event, EXRONE, MCW_grapher::fdw_graph, MCW_grapher::getaux, MCW_grapher::getser, MCW_grapher::glogo_pixmap, GRA_saver_CB(), GRA_timer_CB(), GRA_TIMERFUNC_BOUNCE, GRA_TIMERFUNC_INDEX, graCR_getseries, graCR_keypress, graCR_setignore, graCR_setindex, graDR_setindex, Grapher_Stuff, grid_down(), grid_up(), HAND_cursorize, MCW_grapher::HorZ, THD_ivec3::ijk, MCW_grapher::init_ignore, init_mat(), ISONE, GRA_cbs::key, MCW_grapher::key_lock_sum, MCW_grapher::key_Nlock, MCW_grapher::mat, mat_down(), MCW_grapher::mat_max, mat_up(), MAX, MCW_choose_string(), MCW_discard_events(), MCW_set_bbox(), MIN, mri_free(), mri_write_1D(), myXtFree, NORMAL_cursorize, MCW_grapher_status::num_series, MCW_grapher_status::nx, MCW_grapher_status::ny, MCW_grapher_status::nz, MCW_grapher::opt_baseline_bbox, MCW_grapher::opt_quit_pb, MCW_grapher::opt_textgraph_bbox, MCW_grapher::option_rowcol, PLOTCODE_AUTOSCALE, POPUP_cursorize, GRA_cbs::reason, redraw_graph(), scale_down(), scale_up(), MCW_grapher_status::send_CB, send_newinfo(), show_grapher_pixmap, STATUS, MCW_grapher::status, TEMP_IVEC3, MCW_grapher::textgraph, THD_fdind_to_3dind(), MCW_grapher::time_index, MCW_grapher::timer_delay, MCW_grapher::timer_func, MCW_grapher::timer_id, MCW_grapher::timer_param, GRA_miscellaneous::wcsuffix, MCW_grapher::xpoint, XtMalloc, MCW_grapher::ypoint, and MCW_grapher::zpoint.

Referenced by AFNI_drive_open_window(), AFNI_seq_send_CB(), GRA_drawing_EV(), GRA_opt_CB(), and GRA_quit_timeout_CB().

03122 {
03123    int ii ;
03124 
03125 ENTRY("GRA_handle_keypress") ;
03126 
03127    if( buf[0] == '\0' ) EXRETURN ;
03128 
03129 if(PRINT_TRACING){
03130 char str[256] ;
03131 sprintf(str,"buf[0]=%c (%x)",(int)buf[0],(int)buf[0]) ;
03132 STATUS(str); }
03133 
03134    /*** deal with the key sequence 'N <digits> <Enter>' ***/
03135 
03136    /* first 'N' */
03137 
03138    if( grapher->key_Nlock==0 && buf[0]=='N' ){
03139      grapher->key_Nlock = 1 ;
03140      HAND_cursorize( grapher->fdw_graph ) ;
03141      HAND_cursorize( grapher->draw_fd ) ;
03142      grapher->key_lock_sum = 0 ;
03143      EXRETURN ;
03144    }
03145 
03146    /* last <Enter> */
03147 
03148    if( grapher->key_Nlock && buf[0] == 13 ){
03149 
03150       /* if have a number, set the graph matrix size */
03151 
03152       if( grapher->key_lock_sum > 0 )
03153          grapher->mat = MIN( grapher->mat_max , grapher->key_lock_sum ) ;
03154 
03155       NORMAL_cursorize( grapher->fdw_graph ) ;
03156       if( ISONE(grapher) )
03157         NORMAL_cursorize( grapher->draw_fd ) ;
03158       else
03159         POPUP_cursorize( grapher->draw_fd ) ;
03160 
03161       init_mat    ( grapher ) ;
03162       redraw_graph( grapher , 0 ) ;
03163       send_newinfo( grapher ) ;
03164       grapher->key_Nlock = grapher->key_lock_sum = 0 ;
03165       EXRETURN ;
03166    }
03167 
03168    /* intermediate <digit> */
03169 
03170    if( grapher->key_Nlock ){
03171       if( isdigit(buf[0]) ){
03172          ii = buf[0] - 48;
03173          grapher->key_lock_sum = MIN( 10000, 10*grapher->key_lock_sum + ii ) ;
03174       }
03175       EXRETURN ;
03176    }
03177 
03178    /*-- other keys are single stroke commands --*/
03179 
03180    MCW_discard_events( grapher->draw_fd , KeyPressMask ) ;
03181 
03182    switch (buf[0]) {
03183 
03184       case '-':
03185       case '+':
03186         if( buf[0] == '-' ) scale_down( grapher ) ;
03187         else                scale_up  ( grapher ) ;
03188         redraw_graph( grapher , 0 ) ;
03189       break;
03190 
03191       case 'a':
03192         redraw_graph( grapher , PLOTCODE_AUTOSCALE ) ;         /* 03 Feb 1998 */
03193       break ;
03194 
03195       case 'i':
03196         if( !grapher->textgraph && grapher->init_ignore > 0 ){ /* 24 May 2005 */
03197           GRA_cbs cbs ;
03198           cbs.reason = graCR_setignore ; cbs.key = grapher->init_ignore - 1 ;
03199           CALL_sendback( grapher , cbs ) ;
03200         } else {
03201           XBell(grapher->dc->display,100) ;
03202         }
03203       break ;
03204 
03205       case 'I':
03206         if( !grapher->textgraph ){                             /* 24 May 2005 */
03207           GRA_cbs cbs ;
03208           cbs.reason = graCR_setignore ; cbs.key = grapher->init_ignore + 1 ;
03209           CALL_sendback( grapher , cbs ) ;
03210         } else {
03211           XBell(grapher->dc->display,100) ;
03212         }
03213       break ;
03214 
03215       case 'm':
03216       case 'M':
03217         if( buf[0] == 'm' ) mat_down( grapher ) ;
03218         else                mat_up  ( grapher ) ;
03219         send_newinfo( grapher ) ;
03220       break;
03221 
03222       case 'g':
03223         grid_down( grapher ) ;
03224       break;
03225 
03226       case 'G':
03227         grid_up( grapher ) ;
03228       break;
03229 
03230       case 'h':   /* 05 Jan 1999 */
03231         grapher->HorZ = ! grapher->HorZ ;
03232         redraw_graph( grapher , 0 ) ;
03233       break ;
03234 
03235       case 'q':
03236       case 'Q':
03237         end_fd_graph_CB( NULL , (XtPointer) grapher , NULL ) ;
03238       break ;
03239 
03240       /* modified 07 Aug 2001 to account for more complex baseline scenario */
03241 
03242       case 'b':{
03243         int bbb = grapher->common_base << 1 ;
03244         if( bbb > BASELINE_GLOBAL ) bbb = BASELINE_INDIVIDUAL ;
03245         MCW_set_bbox( grapher->opt_baseline_bbox , bbb ) ;
03246         grapher->common_base = bbb ;
03247         redraw_graph( grapher , 0 ) ;
03248       }
03249       break ;
03250 
03251       case 't':{                                                  /* 22 Sep 2000 */
03252         int bbb = ! grapher->textgraph ;
03253         MCW_set_bbox( grapher->opt_textgraph_bbox , bbb ) ;
03254         grapher->textgraph = bbb ;
03255         redraw_graph( grapher , 0 ) ;
03256       }
03257       break ;
03258 
03259       case 'S':
03260         MCW_choose_string( grapher->option_rowcol ,
03261                            "Save PNM Prefix:" , NULL ,
03262                            GRA_saver_CB , (XtPointer) grapher ) ;
03263       break ;
03264 
03265       case 'L':
03266         show_grapher_pixmap = ! show_grapher_pixmap ;
03267         if( grapher->glogo_pixmap != XmUNSPECIFIED_PIXMAP )
03268            redraw_graph( grapher , 0 ) ;
03269       break ;
03270 
03271       case '<': case ',':   /* change time point */
03272       case '>': case '.':
03273       case '1':
03274       case 'l':
03275          EXRONE(grapher) ;  /* 22 Sep 2000 */
03276 
03277               if( buf[0] == '<' || buf[0] == ',' ) ii = grapher->time_index - 1;
03278          else if( buf[0] == '>' || buf[0] == '.' ) ii = grapher->time_index + 1;
03279          else if( buf[0] == '1'                  ) ii = 1 ;
03280          else if( buf[0] == 'l'                  ) ii = grapher->status->num_series-1;
03281 
03282          ii = (ii+grapher->status->num_series) % grapher->status->num_series ;
03283          if( ii >= 0 && ii < grapher->status->num_series ){
03284            if( grapher->status->send_CB != NULL ){
03285              GRA_cbs cbs ;
03286 
03287              cbs.reason = graCR_setindex ;
03288              cbs.key    = ii;
03289              cbs.event  = NULL ;
03290 #if 0
03291              grapher->status->send_CB( grapher, grapher->getaux, &cbs ) ;
03292 #else
03293              CALL_sendback( grapher , cbs ) ;
03294 #endif
03295            } else {
03296              (void) drive_MCW_grapher( grapher, graDR_setindex, (XtPointer)ii) ;
03297            }
03298          }
03299       break ;
03300 
03301       case 'v':  /* 04 Dec 2003: video */
03302       case 'V':
03303         if( grapher->status->num_series > 1 ){
03304           grapher->timer_func  = GRA_TIMERFUNC_INDEX ;
03305           grapher->timer_delay = (int) AFNI_numenv("AFNI_VIDEO_DELAY") ;
03306           if( grapher->timer_delay <= 0 ) grapher->timer_delay = 1 ;
03307           grapher->timer_param = (buf[0] == 'v') ? 1 : -1 ;
03308           grapher->timer_id    =
03309            XtAppAddTimeOut( XtWidgetToApplicationContext(grapher->opt_quit_pb),
03310                             grapher->timer_delay , GRA_timer_CB , grapher ) ;
03311         } else {
03312           XBell(grapher->dc->display,100) ;
03313         }
03314       break ;
03315 
03316       case 'r':
03317       case 'R':
03318         if( grapher->status->num_series > 1 ){
03319           grapher->timer_func  = GRA_TIMERFUNC_BOUNCE ;
03320           grapher->timer_delay = (int) AFNI_numenv("AFNI_VIDEO_DELAY") ;
03321           if( grapher->timer_delay <= 0 ) grapher->timer_delay = 1 ;
03322           grapher->timer_param = (buf[0] == 'r') ? 1 : -1 ;
03323           grapher->timer_id    =
03324            XtAppAddTimeOut( XtWidgetToApplicationContext(grapher->opt_quit_pb),
03325                             grapher->timer_delay , GRA_timer_CB , grapher ) ;
03326         } else {
03327           XBell(grapher->dc->display,100) ;
03328         }
03329       break ;
03330 
03331       case 'z':  /* change slice */
03332       case 'Z':
03333         if( buf[0] == 'z' ){
03334           grapher->zpoint -- ;
03335           if( grapher->zpoint < 0 ) grapher->zpoint = grapher->status->nz - 1 ;
03336         } else {
03337           grapher->zpoint ++ ;
03338           if( grapher->zpoint >= grapher->status->nz ) grapher->zpoint = 0 ;
03339         }
03340         redraw_graph( grapher , 0 ) ;
03341         send_newinfo( grapher ) ;
03342       break ;
03343 
03344       case 'w':{
03345          char * wcfname ;
03346          int ndig , ll ;
03347          MRI_IMAGE * tsim ;
03348          int xd,yd,zd ;     /* 24 Sep 1999 */
03349 
03350          EXRONE(grapher) ;  /* 22 Sep 2000 */
03351 
03352          ll   = MAX( grapher->status->nx , grapher->status->ny ) ;
03353          ll   = MAX( grapher->status->nz , ll ) ;
03354          ndig = (ll < 1000) ? 3 : 4 ;
03355 
03356          ll   = 3*ndig + 16 ;
03357          if( Grapher_Stuff.wcsuffix != NULL )
03358             ll += strlen(Grapher_Stuff.wcsuffix) ;
03359          wcfname = (char *) XtMalloc(ll) ;
03360 
03361          /* 24 Sep 1999: mangle the name for the output */
03362 
03363          xd = grapher->xpoint; yd = grapher->ypoint; zd = grapher->zpoint;
03364 #ifndef DONT_MANGLE_XYZ
03365          { THD_ivec3 id;
03366            id = THD_fdind_to_3dind( grapher->getaux, TEMP_IVEC3(xd,yd,zd) );
03367            xd = id.ijk[0]; yd = id.ijk[1]; zd = id.ijk[2]; }
03368 #endif
03369 
03370          if( Grapher_Stuff.wcsuffix != NULL )
03371             sprintf(wcfname,"%0*d_%0*d_%0*d.%s.1D" ,
03372                     ndig,xd , ndig,yd , ndig,zd ,
03373                               Grapher_Stuff.wcsuffix ) ;
03374          else
03375             sprintf(wcfname,"%0*d_%0*d_%0*d.1D" ,
03376                     ndig,xd , ndig,yd , ndig,zd  ) ;
03377 
03378          ll = grapher->xpoint +
03379               grapher->ypoint * grapher->status->nx +
03380               grapher->zpoint * grapher->status->nx * grapher->status->ny ;
03381 
03382 #if 0
03383          tsim  = (MRI_IMAGE *) grapher->getser( ll , graCR_getseries ,
03384                                                      grapher->getaux ) ;
03385 #else
03386          CALL_getser( grapher , ll,graCR_getseries , MRI_IMAGE *,tsim ) ;
03387 #endif
03388 
03389          if( tsim != NULL ){
03390            mri_write_1D( wcfname , tsim ) ;  /* 16 Nov 1999: replaces mri_write_ascii */
03391            mri_free( tsim ) ;
03392          }
03393          myXtFree(wcfname) ;
03394       }
03395       break ;
03396 
03397       /*--- At this point, have a key not handled here.
03398             Call the creator to see if it wishes to deal with it. ---*/
03399 
03400       default:
03401         if( grapher->status->send_CB != NULL ){
03402           GRA_cbs cbs ;
03403 
03404           cbs.reason = graCR_keypress ;
03405           cbs.key    = buf[0] ;
03406           cbs.event  = ev ;
03407 #if 0
03408           grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
03409 #else
03410           CALL_sendback( grapher , cbs ) ;
03411 #endif
03412         }
03413       break ;
03414    }
03415 
03416    EXRETURN ;
03417 }

void GRA_ignore_choose_CB MCW_arrowval   cbs,
XtPointer    cd
 

Definition at line 3873 of file afni_graph.c.

References CALL_sendback, ENTRY, MCW_grapher::getaux, GRA_VALID, graCR_setignore, GRA_cbs::key, GRA_cbs::reason, MCW_grapher_status::send_CB, MCW_grapher::status, and TTOP.

Referenced by GRA_fim_CB().

03877 {
03878    MCW_grapher *grapher = (MCW_grapher *) cd ;
03879 
03880 ENTRY("GRA_ignore_choose_CB") ;
03881 
03882    if( ! GRA_VALID(grapher) || grapher->status->send_CB == NULL ) EXRETURN ;
03883 
03884    if( cbs->ival >= 0 && cbs->ival < TTOP(grapher)-1 ){
03885       GRA_cbs gbs ;
03886 
03887       gbs.reason = graCR_setignore ;
03888       gbs.key    = cbs->ival ;
03889 #if 0
03890       grapher->status->send_CB( grapher , grapher->getaux , &gbs ) ;
03891 #else
03892       CALL_sendback( grapher , gbs ) ;
03893 #endif
03894    }
03895    EXRETURN ;
03896 }

void GRA_mapmenu_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

Definition at line 5906 of file afni_graph.c.

References AFNI_yesenv(), client_data, ENTRY, MCW_widget_geom(), RWC_xineramize(), and STATUS.

05907 {
05908    int ww,hh,xx,yy ;
05909    int pw,ph,px,py ;
05910 
05911 ENTRY("GRA_mapmenu_CB") ;
05912 
05913    if( AFNI_yesenv("AFNI_DONT_MOVE_MENUS") ) EXRETURN ;  /* 08 Aug 2001 */
05914 
05915    MCW_widget_geom( w                     , &ww,&hh , &xx,&yy ) ;
05916    MCW_widget_geom( XtParent(XtParent(w)) , &pw,&ph , &px,&py ) ;
05917 
05918 #if 1
05919 if(PRINT_TRACING){
05920  char str[256] ;
05921  sprintf(str,"menu:   width=%d height=%d x=%d y=%d",ww,hh,xx,yy); STATUS(str);
05922  sprintf(str,"parent: width=%d height=%d x=%d y=%d",pw,ph,px,py); STATUS(str); }
05923 #endif
05924 
05925    pw = pw >> 3 ;
05926    if( ! ( xx > px+7*pw || xx+ww < px+pw ) ){
05927       xx = px - ww ;  if( xx < 0 ) xx = 0 ;
05928 #if 1
05929 if(PRINT_TRACING){
05930  char str[256]; sprintf(str,"moving menu to x=%d",xx); STATUS(str); }
05931 #endif
05932       XtVaSetValues( w , XmNx , xx , NULL ) ;
05933    }
05934 
05935    RWC_xineramize( XtDisplay(w) , xx,yy,ww,hh , &xx,&yy ) ; /* 27 Sep 2000 */
05936    XtVaSetValues( w , XmNx,xx , XmNy,yy , NULL ) ;
05937    EXRETURN ;
05938 }

void GRA_mat_choose_CB MCW_arrowval   cbs,
XtPointer    cd
 

Definition at line 3738 of file afni_graph.c.

References ENTRY, GRA_VALID, init_mat(), MCW_grapher::mat, MCW_grapher::mat_max, MIN, redraw_graph(), and send_newinfo().

Referenced by GRA_opt_CB(), and new_MCW_grapher().

03742 {
03743    MCW_grapher *grapher = (MCW_grapher *) cd ;
03744 
03745 ENTRY("GRA_mat_choose_CB") ;
03746 
03747    if( ! GRA_VALID(grapher) || cbs->ival < 1 ) EXRETURN ;
03748 
03749    grapher->mat = MIN( grapher->mat_max , cbs->ival ) ;
03750    init_mat    ( grapher ) ;
03751    redraw_graph( grapher , 0 ) ;
03752    send_newinfo( grapher ) ;
03753    EXRETURN ;
03754 }

void GRA_new_pixmap MCW_grapher   grapher,
int    new_width,
int    new_height,
int    redraw
 

22 Apr 1997: incorporate user string for this voxel *

Definition at line 3074 of file afni_graph.c.

References MCW_grapher::dc, MCW_DC::display, MCW_grapher::draw_fd, ENTRY, MCW_grapher::fd_pxWind, MCW_grapher::fHIGH, MCW_grapher::fWIDE, GRA_REALZ, MCW_grapher::gx_max, MCW_grapher::gy_max, init_mat(), MCW_widget_geom(), MCW_grapher::option_rowcol, MCW_DC::planes, redraw_graph(), and STATUS.

Referenced by drive_MCW_grapher(), and GRA_drawing_EV().

03076 {
03077    int ww,hh ;
03078 
03079 ENTRY("GRA_new_pixmap") ;
03080 
03081    if( ! GRA_REALZ(grapher) ) EXRETURN ;
03082 
03083    grapher->fWIDE  = new_width ;
03084    grapher->fHIGH  = new_height ;
03085    grapher->gx_max = new_width  - (GL_DLX + GR_DLX) ;
03086    grapher->gy_max = new_height - (GT_DLY + GB_DLY) ;
03087 
03088    if( grapher->fd_pxWind != (Pixmap) 0 ){
03089 STATUS("freeing old Pixmap") ;
03090       XFreePixmap( grapher->dc->display , grapher->fd_pxWind ) ;
03091    }
03092 
03093 STATUS("allocating new Pixmap") ;
03094    grapher->fd_pxWind = XCreatePixmap( grapher->dc->display ,
03095                                        XtWindow(grapher->draw_fd) ,
03096                                        grapher->fWIDE , grapher->fHIGH,
03097                                        grapher->dc->planes ) ;
03098 
03099    MCW_widget_geom( grapher->option_rowcol , &ww , &hh , NULL,NULL ) ;
03100    XtVaSetValues( grapher->option_rowcol ,
03101 #ifdef WANT_AFNI_BITMAP
03102                      XmNx , grapher->fWIDE - ww - 2 ,
03103 #else
03104                      XmNx , 2 ,
03105 #endif
03106                      XmNy , grapher->fHIGH - hh - 2 ,
03107                   NULL ) ;
03108 
03109    if( redraw ){
03110      init_mat( grapher ) ;
03111      redraw_graph( grapher , 0 ) ;
03112    }
03113 
03114    EXRETURN ;
03115 }

void GRA_opt_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

Definition at line 3436 of file afni_graph.c.

References auto_grid(), MCW_grapher::cen_tsim, client_data, ENTRY, EXRONE, MCW_grapher::fdw_graph, MCW_grapher::fscale, MCW_grapher::global_base, GLOBAL_library, GRA_finalize_global_baseline_CB(), GRA_grid_choose_CB(), GRA_handle_keypress(), GRA_mat_choose_CB(), GRA_pick_xaxis_CB(), GRA_pin_choose_CB(), GRA_quit_timeout_CB(), GRA_scale_choose_CB(), GRA_slice_choose_CB(), GRA_timer_stop(), GRA_wcsuffix_choose_CB(), Grapher_Stuff, grid_ar, GRID_MAX, MCW_grapher::grid_spacing, IMARR_COUNT, MCW_grapher::mat, MCW_grapher::mat_max, MCW_choose_integer(), MCW_choose_string(), MCW_choose_timeseries(), MCW_choose_vector(), MCW_popup_message(), MCW_TIMER_KILL, MCW_USER_KILL, mri_free(), mri_to_float(), NPTS, MCW_grapher_status::nz, MCW_grapher::opt_baseline_setglobal_pb, MCW_grapher::opt_color_up_pb, MCW_grapher::opt_grid_auto_pb, MCW_grapher::opt_grid_choose_pb, MCW_grapher::opt_grid_down_pb, MCW_grapher::opt_grid_HorZ_pb, MCW_grapher::opt_grid_up_pb, MCW_grapher::opt_mat_down_pb, MCW_grapher::opt_mat_up_pb, MCW_grapher::opt_pin_choose_pb, MCW_grapher::opt_quit_pb, MCW_grapher::opt_save_pb, MCW_grapher::opt_scale_auto_pb, MCW_grapher::opt_scale_choose_pb, MCW_grapher::opt_scale_down_pb, MCW_grapher::opt_scale_up_pb, MCW_grapher::opt_slice_down_pb, MCW_grapher::opt_slice_up_pb, MCW_grapher::opt_write_center_pb, MCW_grapher::opt_write_suffix_pb, MCW_grapher::opt_xaxis_center_pb, MCW_grapher::opt_xaxis_clear_pb, MCW_grapher::opt_xaxis_pick_pb, MCW_grapher::option_rowcol, MCW_grapher::pin_bot, MCW_grapher::pin_top, redraw_graph(), STATUS, MCW_grapher::status, AFNI_library_type::timeseries, MCW_grapher::valid, GRA_miscellaneous::wcsuffix, MCW_grapher::xax_tsim, and MCW_grapher::zpoint.

03437 {
03438    MCW_grapher * grapher = (MCW_grapher *) client_data ;
03439 
03440 ENTRY("GRA_opt_CB") ;
03441 
03442    if( w == grapher->opt_scale_down_pb ){
03443       GRA_handle_keypress( grapher , "-" , NULL ) ;
03444       EXRETURN ;
03445    }
03446 
03447    if( w == grapher->opt_scale_up_pb ){
03448       GRA_handle_keypress( grapher , "+" , NULL ) ;
03449       EXRETURN ;
03450    }
03451 
03452    if( w == grapher->opt_scale_auto_pb ){
03453       GRA_handle_keypress( grapher , "a" , NULL ) ;
03454       EXRETURN ;
03455    }
03456 
03457    if( w == grapher->opt_grid_down_pb ){
03458       GRA_handle_keypress( grapher , "g" , NULL ) ;
03459       EXRETURN ;
03460    }
03461 
03462    if( w == grapher->opt_grid_up_pb ){
03463       GRA_handle_keypress( grapher , "G" , NULL ) ;
03464       EXRETURN ;
03465    }
03466 
03467    if( w == grapher->opt_grid_auto_pb ){     /* 02 Apr 2004 */
03468      auto_grid( grapher , NPTS(grapher) ) ;
03469      redraw_graph(grapher,0) ;
03470      EXRETURN ;
03471    }
03472 
03473    if( w == grapher->opt_grid_HorZ_pb ){     /* 05 Jan 1999 */
03474       GRA_handle_keypress( grapher , "h" , NULL ) ;
03475       EXRETURN ;
03476    }
03477 
03478    if( w == grapher->opt_slice_down_pb ){
03479       GRA_handle_keypress( grapher , "z" , NULL ) ;
03480       EXRETURN ;
03481    }
03482 
03483    if( w == grapher->opt_slice_up_pb ){
03484       GRA_handle_keypress( grapher , "Z" , NULL ) ;
03485       EXRETURN ;
03486    }
03487 
03488    if( w == grapher->opt_mat_down_pb ){
03489       GRA_handle_keypress( grapher , "m" , NULL ) ;
03490       EXRETURN ;
03491    }
03492 
03493    if( w == grapher->opt_mat_up_pb ){
03494       GRA_handle_keypress( grapher , "M" , NULL ) ;
03495       EXRETURN ;
03496    }
03497 
03498 #if 0
03499    if( w == grapher->opt_color_up_pb ){
03500       GRA_handle_keypress( grapher , "r" , NULL ) ;
03501       EXRETURN ;
03502    }
03503 #endif
03504 
03505    if( w == grapher->opt_quit_pb ){
03506 #if 0
03507       GRA_handle_keypress( grapher , "q" , NULL ) ;
03508 #else
03509 STATUS("User pressed Done button: starting timeout") ;
03510       grapher->valid = 666 ;
03511       (void) XtAppAddTimeOut( XtWidgetToApplicationContext(w) ,
03512                               50 , GRA_quit_timeout_CB , grapher ) ;
03513 #endif
03514       EXRETURN ;
03515    }
03516 
03517    if( w == grapher->opt_save_pb ){
03518       GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
03519       GRA_handle_keypress( grapher , "S" , NULL ) ;
03520       EXRETURN ;
03521    }
03522 
03523    if( w == grapher->opt_write_center_pb ){
03524       GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
03525       GRA_handle_keypress( grapher , "w" , NULL ) ;
03526       EXRETURN ;
03527    }
03528 
03529    if( w == grapher->opt_write_suffix_pb ){
03530       EXRONE(grapher) ;  /* 22 Sep 2000 */
03531       GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
03532       MCW_choose_string( grapher->option_rowcol ,
03533                          "'Write Center' Suffix:" , Grapher_Stuff.wcsuffix ,
03534                          GRA_wcsuffix_choose_CB , NULL ) ;
03535       EXRETURN ;
03536    }
03537 
03538    if( w == grapher->opt_scale_choose_pb ){
03539      MCW_choose_integer( grapher->option_rowcol , "Scale" ,
03540                          -9999 , 9999 , (int)(grapher->fscale) ,
03541                          GRA_scale_choose_CB , (XtPointer) grapher ) ;
03542      EXRETURN ;
03543    }
03544 
03545 #ifndef USE_OPTMENUS
03546    if( w == grapher->opt_mat_choose_pb ){
03547      MCW_choose_integer( grapher->option_rowcol , "Matrix" ,
03548                          1 , grapher->mat_max , grapher->mat ,
03549                          GRA_mat_choose_CB , (XtPointer) grapher ) ;
03550      EXRETURN ;
03551    }
03552 #endif
03553 
03554    if( w == grapher->opt_grid_choose_pb ){
03555      MCW_choose_integer( grapher->option_rowcol , "Grid" ,
03556                          grid_ar[0] , grid_ar[GRID_MAX-1] , grapher->grid_spacing ,
03557                          GRA_grid_choose_CB , (XtPointer) grapher ) ;
03558      EXRETURN ;
03559    }
03560 
03561    if( w == grapher->opt_pin_choose_pb ){   /* 19 Mar 2004 */
03562      char *lvec[2] = { "Bot" , "Top" } ;
03563      int   ivec[2] ;
03564      ivec[0] = grapher->pin_bot ; ivec[1] = grapher->pin_top ;
03565      MCW_choose_vector( grapher->option_rowcol , "Graph Pins: Bot..Top-1" ,
03566                         2 , lvec,ivec ,
03567                         GRA_pin_choose_CB , (XtPointer) grapher ) ;
03568      EXRETURN ;
03569    }
03570 
03571 #ifndef USE_OPTMENUS
03572    if( w == grapher->opt_slice_choose_pb && grapher->status->nz > 1 ){
03573      MCW_choose_integer( grapher->option_rowcol , "Slice" ,
03574                          0 , grapher->status->nz - 1 , grapher->zpoint ,
03575                          GRA_slice_choose_CB , (XtPointer) grapher ) ;
03576      EXRETURN ;
03577    }
03578 #endif
03579 
03580    /*** 09 Jan 1998: x-axis stuff ***/
03581 
03582    if( w == grapher->opt_xaxis_clear_pb ){
03583      mri_free( grapher->xax_tsim ) ;
03584      grapher->xax_tsim = NULL ;
03585      GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
03586      redraw_graph( grapher , 0 ) ;
03587      EXRETURN ;
03588    }
03589 
03590    if( w == grapher->opt_xaxis_pick_pb ){
03591      GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
03592      if( IMARR_COUNT(GLOBAL_library.timeseries) > 0 ){
03593        MCW_choose_timeseries( grapher->fdw_graph , "Graph x-axis" ,
03594                               GLOBAL_library.timeseries , -1 ,
03595                               GRA_pick_xaxis_CB , (XtPointer) grapher ) ;
03596      } else {
03597        (void) MCW_popup_message(
03598                  grapher->option_rowcol ,
03599                  "No timeseries library\nexists to pick from!" ,
03600                  MCW_USER_KILL | MCW_TIMER_KILL ) ;
03601      }
03602      EXRETURN ;
03603    }
03604 
03605    if( w == grapher->opt_xaxis_center_pb ){
03606      EXRONE(grapher) ;  /* 22 Sep 2000 */
03607      GRA_timer_stop(grapher) ;   /* 04 Dec 2003 */
03608      if( grapher->cen_tsim != NULL ){
03609        mri_free( grapher->xax_tsim ) ;
03610        grapher->xax_tsim = mri_to_float( grapher->cen_tsim ) ;
03611        redraw_graph(grapher,0) ;
03612      } else {
03613        XBell(XtDisplay(w),100) ;
03614      }
03615      EXRETURN ;
03616    }
03617 
03618    /** 07 Aug 2001: Set Global baseline **/
03619 
03620    if( w == grapher->opt_baseline_setglobal_pb ){
03621      MCW_choose_integer( grapher->option_rowcol , "Global Baseline" ,
03622                          -29999 , 29999 , (int)(grapher->global_base) ,
03623                          GRA_finalize_global_baseline_CB ,
03624                          (XtPointer) grapher ) ;
03625      EXRETURN ;
03626    }
03627 
03628    /** shouldn't get to here, but who knows? **/
03629 
03630    EXRETURN ;
03631 }

void GRA_overlay_circle MCW_grapher   grapher,
int    xwin,
int    ywin,
int    filled
 

Definition at line 1158 of file afni_graph.c.

References a, MCW_grapher::dc, DC_linewidth(), MCW_DC::display, MCW_grapher::draw_fd, i, MCW_DC::myGC, NBAL, NBAX, NBTOP, NCIR, and xball.

Referenced by GRA_redraw_overlay().

01159 {
01160    int  i, ncirc ;
01161    XPoint a[NBTOP] ;
01162 
01163    switch( filled ){
01164       default: ncirc = NCIR ; break ;
01165       case 1:  ncirc = NBAL ; break ;
01166       case 2:  ncirc = NBAX ; break ;
01167    }
01168 
01169    for( i=0 ; i < ncirc ; i++ ){
01170       a[i].x = xball[i].x + xwin ;
01171       a[i].y = xball[i].y + ywin ;
01172    }
01173 
01174    DC_linewidth( grapher->dc, 0 ) ;
01175 
01176    XDrawPoints( grapher->dc->display, XtWindow(grapher->draw_fd),
01177                 grapher->dc->myGC, a, ncirc, CoordModeOrigin ) ;
01178    return ;
01179 }

void GRA_pick_xaxis_CB Widget    wcall,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3682 of file afni_graph.c.

References ENTRY, GLOBAL_library, GRA_timer_stop(), GRA_VALID, IMARR_COUNT, IMARR_SUBIMAGE, MCW_choose_cbs::ival, mcwCR_timeseries, mri_free(), mri_to_float(), MCW_choose_cbs::reason, redraw_graph(), AFNI_library_type::timeseries, and MCW_grapher::xax_tsim.

Referenced by GRA_opt_CB().

03683 {
03684    MCW_grapher *grapher = (MCW_grapher *) cd ;
03685    int its ;
03686    MRI_IMAGE *tsim ;
03687 
03688 ENTRY("GRA_pick_xaxis_CB") ;
03689 
03690    if( !GRA_VALID(grapher) || cbs->reason != mcwCR_timeseries ) EXRETURN ;
03691    GRA_timer_stop( grapher ) ;
03692 
03693    its = cbs->ival ;
03694    if( its >= 0 && its < IMARR_COUNT(GLOBAL_library.timeseries) ){
03695      tsim = IMARR_SUBIMAGE(GLOBAL_library.timeseries,its) ;
03696      mri_free( grapher->xax_tsim ) ;
03697      grapher->xax_tsim = mri_to_float(tsim) ;
03698      redraw_graph( grapher , 0 ) ;
03699    }
03700 
03701    EXRETURN ;
03702 }

void GRA_pin_choose_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3788 of file afni_graph.c.

References MCW_choose_cbs::cval, MCW_grapher::dc, MCW_DC::display, drive_MCW_grapher(), ENTRY, GRA_timer_stop(), graDR_setpins, MCW_grapher_status::num_series, MCW_grapher::status, and vec.

Referenced by GRA_opt_CB().

03789 {
03790    MCW_grapher *grapher = (MCW_grapher *) cd ;
03791    float *vec = (float *)(cbs->cval) ;
03792    int pb=(int)vec[0] , pt=(int)vec[1] , ii ;
03793 
03794 ENTRY("GRA_pin_choose_CB") ;
03795 
03796    GRA_timer_stop( grapher ) ;
03797 
03798    if( pb >= grapher->status->num_series-2 ||
03799        pb <  0                             ||
03800        (pt > 0 && pt-pb < 2)                 ){   /* stupid user */
03801 
03802       XBell(grapher->dc->display,100) ; EXRETURN ;
03803    }
03804 
03805    ii = 100000*pt + pb ;
03806    drive_MCW_grapher( grapher , graDR_setpins , (XtPointer)(ii) ) ;
03807    EXRETURN ;
03808 }

void GRA_polort_choose_CB MCW_arrowval   cbs,
XtPointer    cd
 

Definition at line 3901 of file afni_graph.c.

References CALL_sendback, ENTRY, MCW_grapher::getaux, GRA_VALID, graCR_polort, GRA_cbs::key, GRA_cbs::reason, MCW_grapher_status::send_CB, and MCW_grapher::status.

Referenced by GRA_fim_CB().

03905 {
03906    MCW_grapher * grapher = (MCW_grapher *) cd ;
03907 
03908 ENTRY("GRA_polort_choose_CB") ;
03909 
03910    if( ! GRA_VALID(grapher) || grapher->status->send_CB == NULL ) EXRETURN ;
03911 
03912    if( cbs->ival >= 0 && cbs->ival <= MAX_POLORT ){
03913       GRA_cbs gbs ;
03914 
03915       gbs.reason = graCR_polort ;
03916       gbs.key    = cbs->ival ;
03917 #if 0
03918       grapher->status->send_CB( grapher , grapher->getaux , &gbs ) ;
03919 #else
03920       CALL_sendback( grapher , gbs ) ;
03921 #endif
03922    }
03923    EXRETURN ;
03924 }

void GRA_quit_timeout_CB XtPointer    client_data,
XtIntervalId *    id
 

Definition at line 3423 of file afni_graph.c.

References client_data, ENTRY, and GRA_handle_keypress().

Referenced by GRA_opt_CB().

03424 {
03425    MCW_grapher * grapher = (MCW_grapher *) client_data ;
03426 
03427 ENTRY("GRA_quit_timeout_CB") ;
03428    GRA_handle_keypress( grapher , "q" , NULL ) ;
03429    EXRETURN ;
03430 }

void GRA_redraw_overlay MCW_grapher   grapher
 

Definition at line 1208 of file afni_graph.c.

References AV_fval_to_char(), MCW_grapher::cen_line, MCW_grapher::cen_tsim, MCW_grapher::dc, DC_fg_color(), MCW_DC::display, MCW_grapher::dont_redraw, MCW_grapher::draw_fd, MRI_IMAGE::dx, ENTRY, EXRONE, MCW_grapher::fWIDE, GRA_draw_circle(), GRA_overlay_circle(), GRA_REALZ, IDEAL_COLOR, IGNORE_COLOR, MCW_grapher::init_ignore, long_index_name, long_time_name, long_value_name, MAX, MCW_widget_visible(), MIN, MRI_FLOAT_PTR, NBOT, MCW_grapher::nncen, NTOP, MRI_IMAGE::nx, overlay_txt(), short_index_name, SHORT_NAME_WIDTH, short_time_name, short_value_name, STATUS, strp, MCW_grapher::textgraph, MCW_grapher::time_index, win, MCW_grapher::xc, MRI_IMAGE::xo, MCW_grapher::xorigin, MCW_grapher::xx_text_2, MCW_grapher::xx_text_2p, and MCW_grapher::yc.

Referenced by drive_MCW_grapher(), GRA_drawing_EV(), and redraw_graph().

01209 {
01210    Window    win ;
01211    Display * dis ;
01212    int       ii , xxx , jj ;
01213    float     val ;
01214    char buf[16] , strp[128] ;
01215    char * vbuf , *iname , *vname ;
01216 
01217 ENTRY("GRA_redraw_overlay") ;
01218 
01219    if( ! GRA_REALZ(grapher) ){ STATUS("ILLEGAL CALL") ; EXRETURN ; }
01220 
01221    if( ! MCW_widget_visible(grapher->draw_fd) ) EXRETURN ;  /* 03 Jan 1999 */
01222    if( grapher->dont_redraw ) EXRETURN ;                    /* 27 Jan 2004 */
01223 
01224    /* erase contents of window (that aren't in the pixmap) */
01225 
01226    dis = grapher->dc->display ;
01227    win = XtWindow(grapher->draw_fd) ;
01228    XClearWindow( dis , win ) ;
01229 
01230    EXRONE(grapher) ;  /* 22 Sep 2000 */
01231 
01232    /* draw some circles over ignored data points [23 May 2005] */
01233 
01234    if( grapher->init_ignore > 0 && !grapher->textgraph ){
01235      DC_fg_color( grapher->dc , IGNORE_COLOR(grapher) ) ;
01236      jj  = NBOT(grapher) ;                     /* first point to plot */
01237      xxx = NTOP(grapher) ;                     /* last */
01238      xxx = MIN (xxx , grapher->init_ignore) ;  /* point */
01239      xxx = MIN (xxx , ii+grapher->nncen) ;     /* to plot */
01240      for( ii=jj ; ii < xxx ; ii++ )
01241 #if 0
01242        GRA_overlay_circle( grapher , grapher->cen_line[ii-jj].x ,
01243                                      grapher->cen_line[ii-jj].y , 1 ) ;
01244 #else
01245        GRA_draw_circle( grapher , grapher->cen_line[ii-jj].x ,
01246                                   grapher->cen_line[ii-jj].y , 4 ) ;
01247 #endif
01248    }
01249 
01250    /* 22 July 1996:
01251       draw a ball on the graph at the currently display time_index */
01252 
01253    ii = grapher->time_index ; jj = NBOT(grapher) ;
01254    if( ii >= jj            &&
01255        ii <  NTOP(grapher) && ii-jj < grapher->nncen && !grapher->textgraph ){
01256 
01257       DC_fg_color( grapher->dc , IDEAL_COLOR(grapher) ) ;
01258       GRA_overlay_circle( grapher , grapher->cen_line[ii-jj].x ,
01259                                     grapher->cen_line[ii-jj].y , 2 ) ;
01260    }
01261 
01262    /* draw text showing value at currently displayed time_index */
01263 
01264    if( ii >= 0 && grapher->cen_tsim != NULL && ii < grapher->cen_tsim->nx ){
01265       val = MRI_FLOAT_PTR(grapher->cen_tsim)[ii] ;
01266       AV_fval_to_char( val , buf ) ;
01267       vbuf = (buf[0]==' ') ? buf+1 : buf ;
01268 
01269       if( grapher->fWIDE < SHORT_NAME_WIDTH ){
01270         iname = short_index_name ; vname = short_value_name ;
01271       } else {
01272         iname = long_index_name ; vname = long_value_name ;
01273       }
01274 
01275       sprintf( strp , "%s%d%s%s" , iname,ii , vname,vbuf ) ;
01276 
01277       if( grapher->cen_tsim->dx != 0.0 ){
01278         val = grapher->cen_tsim->xo + ii * grapher->cen_tsim->dx ;
01279         AV_fval_to_char( val , buf ) ;
01280         vbuf = (buf[0]==' ') ? buf+1 : buf ;
01281         ii = strlen(strp) ;
01282         sprintf( strp+ii , "%s%s" ,
01283                  (grapher->fWIDE < SHORT_NAME_WIDTH) ? short_time_name
01284                                                      : long_time_name, vbuf ) ;
01285       }
01286 
01287       xxx = MAX( grapher->xx_text_2 ,
01288                  grapher->xorigin[grapher->xc][grapher->yc] ) ;
01289 
01290       if( grapher->init_ignore > 0 ) xxx = MAX( xxx , grapher->xx_text_2p ) ;
01291 
01292       DC_fg_color( grapher->dc , IDEAL_COLOR(grapher) ) ;
01293       overlay_txt( grapher, xxx , GB_DLY-15 , strp ) ;
01294    }
01295 
01296    /* no more to do now */
01297 
01298    XFlush( dis ) ;
01299    EXRETURN ;
01300 }

void GRA_refread_choose_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3937 of file afni_graph.c.

References CALL_sendback, MCW_choose_cbs::cval, MCW_grapher::dc, MCW_DC::display, ENTRY, EXRONE, far, FIM_menu::fim_editref_winaver_bbox, MCW_grapher::fmenu, MCW_grapher::getaux, GRA_VALID, graCR_refequals, graCR_winaver, MCW_set_bbox(), mcwCR_string, MRI_FLOAT_PTR, mri_free(), mri_read_1D(), MRI_IMAGE::nvox, MRI_IMAGE::nx, MCW_choose_cbs::reason, GRA_cbs::reason, MCW_grapher_status::send_CB, MCW_grapher::status, and GRA_cbs::userdata.

Referenced by GRA_fim_CB().

03938 {
03939    MCW_grapher * grapher = (MCW_grapher *) cd ;
03940    MRI_IMAGE * flim ;
03941    float * far ;
03942    int ii ;
03943    GRA_cbs gbs ;
03944 
03945 ENTRY("GRA_refread_choose_CB") ;
03946 
03947    if( ! GRA_VALID(grapher)             ||
03948        grapher->status->send_CB == NULL ||
03949        cbs->reason != mcwCR_string      ||
03950        cbs->cval == NULL                || strlen(cbs->cval) == 0 ) EXRETURN ;
03951 
03952    EXRONE(grapher) ;  /* 22 Sep 2000 */
03953 
03954    flim = mri_read_1D( cbs->cval ) ;     /* 16 Nov 1999: replaces mri_read_ascii */
03955    if( flim == NULL || flim->nx < 2 ){
03956       XBell(grapher->dc->display,100) ; mri_free(flim) ; EXRETURN ;
03957    }
03958 
03959    far = MRI_FLOAT_PTR(flim) ;
03960    for( ii=0 ; ii < flim->nvox ; ii++ )
03961       if( fabs(far[ii]) >= 33333.0 ) far[ii] = WAY_BIG ;
03962 
03963    { GRA_cbs cbs; cbs.reason=graCR_winaver; CALL_sendback(grapher,cbs); }
03964    MCW_set_bbox( grapher->fmenu->fim_editref_winaver_bbox , 0 ) ;
03965    gbs.reason   = graCR_refequals ;
03966    gbs.userdata = (XtPointer) flim ;
03967 #if 0
03968    grapher->status->send_CB( grapher , grapher->getaux , &gbs ) ;
03969 #else
03970    CALL_sendback( grapher , gbs ) ;
03971 #endif
03972    mri_free(flim) ;
03973    EXRETURN ;
03974 }

void GRA_refstore_choose_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3978 of file afni_graph.c.

References MCW_choose_cbs::cval, ENTRY, EXRONE, GRA_VALID, IMARR_COUNT, IMARR_SUBIMAGE, mcwCR_string, PLUTO_register_timeseries(), MCW_choose_cbs::reason, and MCW_grapher::ref_ts.

Referenced by GRA_fim_CB().

03979 {
03980    MCW_grapher * grapher = (MCW_grapher *) cd ;
03981 
03982 ENTRY("GRA_refstore_choose_CB") ;
03983 
03984    if( ! GRA_VALID(grapher)             ||
03985        grapher->ref_ts == NULL          ||
03986        IMARR_COUNT(grapher->ref_ts) < 1 ||
03987        cbs->reason != mcwCR_string      ||
03988        cbs->cval == NULL                || strlen(cbs->cval) == 0 ) EXRETURN ;
03989 
03990    EXRONE(grapher) ;  /* 22 Sep 2000 */
03991 
03992    PLUTO_register_timeseries( cbs->cval , IMARR_SUBIMAGE(grapher->ref_ts,0) ) ;
03993    EXRETURN ;
03994 }

void GRA_refwrite_choose_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3998 of file afni_graph.c.

References CALL_sendback, MCW_choose_cbs::cval, ENTRY, EXRONE, MCW_grapher::getaux, GRA_VALID, graCR_timeseries_library, IMARR_COUNT, IMARR_SUBIMAGE, mcwCR_string, mri_add_name(), mri_free(), mri_transpose(), mri_write_1D(), mri_write_ascii(), MCW_choose_cbs::reason, GRA_cbs::reason, MCW_grapher::ref_ts, MCW_grapher_status::send_CB, MCW_grapher::status, and GRA_cbs::userdata.

Referenced by GRA_fim_CB().

03999 {
04000    MCW_grapher * grapher = (MCW_grapher *) cd ;
04001    MRI_IMAGE * tsim ;
04002    int ii , ll ;
04003    GRA_cbs gbs ;
04004 
04005 ENTRY("GRA_refwrite_choose_CB") ;
04006 
04007    if( ! GRA_VALID(grapher)             ||
04008        grapher->ref_ts == NULL          ||
04009        IMARR_COUNT(grapher->ref_ts) < 1 ||
04010        cbs->reason != mcwCR_string      ||
04011        cbs->cval == NULL                || (ll=strlen(cbs->cval)) == 0 ) EXRETURN ;
04012 
04013    EXRONE(grapher) ;  /* 22 Sep 2000 */
04014 
04015    for( ii=0 ; ii < ll ; ii++ ){
04016       if( iscntrl(cbs->cval[ii]) || isspace(cbs->cval[ii]) ||
04017           cbs->cval[ii] == '/'   || cbs->cval[ii] == ';'   ||
04018           cbs->cval[ii] == '*'   || cbs->cval[ii] == '?'   ||
04019           cbs->cval[ii] == '&'   || cbs->cval[ii] == '|'   ||
04020           cbs->cval[ii] == '"'   || cbs->cval[ii] == '>'   ||
04021           cbs->cval[ii] == '<'   || cbs->cval[ii] == '\''  ||
04022           cbs->cval[ii] == '['   || cbs->cval[ii] == ']'     ){
04023 
04024          XBell( XtDisplay(wcaller) , 100 ) ; EXRETURN ;
04025       }
04026    }
04027 
04028 #if 0
04029    tsim = mri_transpose( IMARR_SUBIMAGE(grapher->ref_ts,0) ) ;
04030    mri_write_ascii( cbs->cval , tsim ) ;
04031    mri_free( tsim ) ;
04032 #else
04033    mri_write_1D( cbs->cval , IMARR_SUBIMAGE(grapher->ref_ts,0) ) ; /* 16 Nov 1999 */
04034 #endif
04035 
04036    /* 12 Nov 1996: put this in AFNI's list of library files */
04037 
04038    if( grapher->status->send_CB != NULL ){
04039       mri_add_name( cbs->cval , IMARR_SUBIMAGE(grapher->ref_ts,0) ) ;
04040       gbs.reason   = graCR_timeseries_library ;
04041       gbs.userdata = (XtPointer) IMARR_SUBIMAGE(grapher->ref_ts,0) ;
04042 #if 0
04043       grapher->status->send_CB( grapher , grapher->getaux , &gbs ) ;
04044 #else
04045       CALL_sendback( grapher , gbs ) ;
04046 #endif
04047    }
04048    EXRETURN ;
04049 }

void GRA_saver_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 5832 of file afni_graph.c.

References MCW_choose_cbs::cval, ENTRY, free, GRA_file_pixmap(), GRA_REALZ, malloc, mcwCR_string, POPDOWN_string_chooser, and MCW_choose_cbs::reason.

Referenced by GRA_handle_keypress().

05833 {
05834    int ll , ii ;
05835    MCW_grapher * grapher = (MCW_grapher *) cd ;
05836    char * fname , * ppnm ;
05837 
05838 ENTRY("GRA_saver_CB") ;
05839 
05840    if( ! GRA_REALZ(grapher) ) EXRETURN ;
05841 
05842    if( cbs->reason != mcwCR_string ||
05843        cbs->cval   == NULL         || (ll=strlen(cbs->cval)) == 0 ){
05844 
05845       XBell( XtDisplay(wcaller) , 100 ) ; EXRETURN ;
05846    }
05847 
05848    fname = (char *) malloc( sizeof(char) * (ll+8) ) ;
05849    strcpy( fname , cbs->cval ) ;
05850 
05851    for( ii=0 ; ii < ll ; ii++ )
05852       if( iscntrl(fname[ii]) || isspace(fname[ii]) ) break ;
05853 
05854    if( ii < ll || ll < 2 || ll > 240 ){
05855       XBell( XtDisplay(wcaller) , 100 ) ;
05856       free( fname ) ; EXRETURN ;
05857    }
05858 
05859                       ppnm = strstr( fname , ".ppm" ) ;
05860    if( ppnm == NULL ) ppnm = strstr( fname , ".pnm" ) ;
05861    if( ppnm == NULL ) ppnm = strstr( fname , ".jpg" ) ;
05862    if( ppnm == NULL ) strcat(fname,".ppm") ;
05863 
05864    GRA_file_pixmap( grapher , fname ) ;
05865    POPDOWN_string_chooser ;
05866    free(fname) ; EXRETURN ;
05867 }

void GRA_scale_choose_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3758 of file afni_graph.c.

References ENTRY, MCW_grapher::fscale, MCW_choose_cbs::fval, GRA_VALID, and redraw_graph().

Referenced by GRA_opt_CB().

03759 {
03760    MCW_grapher *grapher = (MCW_grapher *) cd ;
03761 
03762 ENTRY("GRA_scale_choose_CB") ;
03763 
03764    if( ! GRA_VALID(grapher) ) EXRETURN ;
03765 
03766    grapher->fscale = cbs->fval ;
03767    redraw_graph( grapher , 0 ) ;
03768    EXRETURN ;
03769 }

void GRA_setshift_action_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

Definition at line 4994 of file afni_graph.c.

References client_data, MCW_grapher::dialog, ENTRY, FREE_AV, MCW_arrowval::fval, GRA_doshift(), GRA_REALZ, MCW_arrowval::ival, NUM_SETSHIFT_ACT, RWC_XtPopdown(), SETSHIFT_APPLY, SETSHIFT_DONE, MCW_grapher::setshift_inc, MCW_grapher::setshift_inc_av, MCW_grapher::setshift_left, MCW_grapher::setshift_left_av, SETSHIFT_QUIT, MCW_grapher::setshift_right, and MCW_grapher::setshift_right_av.

Referenced by GRA_setshift_startup().

04995 {
04996    MCW_grapher * grapher = (MCW_grapher *) client_data ;
04997    XmAnyCallbackStruct * cbs = (XmAnyCallbackStruct *) call_data ;
04998    char * wname ;
04999    int ib , close_window ;
05000 
05001 ENTRY("GRA_setshift_action_CB") ;
05002 
05003    if( !GRA_REALZ(grapher) || grapher->dialog==NULL ) EXRETURN ;
05004 
05005    wname = XtName(w) ;
05006 
05007    for( ib=0 ; ib < NUM_SETSHIFT_ACT ; ib++ )           /* button index, if any */
05008       if( strcmp(wname,SETSHIFT_act[ib].label) == 0 ) break ;
05009 
05010    close_window = (ib == SETSHIFT_DONE ||
05011                    ib == SETSHIFT_QUIT || ib == NUM_SETSHIFT_ACT) ;
05012 
05013    if( close_window ){
05014       RWC_XtPopdown( grapher->dialog ) ;
05015       XSync( XtDisplay(w) , False ) ;
05016       XmUpdateDisplay( w ) ;
05017    }
05018 
05019    switch( ib ){
05020 
05021       case SETSHIFT_APPLY:
05022       case SETSHIFT_DONE:{
05023          grapher->setshift_inc   = grapher->setshift_inc_av->fval ;
05024          grapher->setshift_left  = grapher->setshift_left_av->ival ;
05025          grapher->setshift_right = grapher->setshift_right_av->ival ;
05026 
05027          GRA_doshift( grapher ) ;
05028       }
05029       break ;
05030    }
05031 
05032    if( close_window ){                          /* close the window */
05033       XtDestroyWidget( grapher->dialog ) ;
05034       grapher->dialog = NULL ;
05035       FREE_AV( grapher->setshift_right_av ) ;
05036       FREE_AV( grapher->setshift_left_av )  ;
05037       FREE_AV( grapher->setshift_inc_av )   ;
05038    }
05039 
05040    EXRETURN ;
05041 }

void GRA_setshift_startup MCW_grapher   grapher
 

Definition at line 4858 of file afni_graph.c.

References MCW_arrowval::allow_wrap, MCW_DC::colormap, MCW_action_item::data, MCW_grapher::dc, MCW_DC::depth, MCW_grapher::dialog, MCW_DC::display, ENTRY, MCW_arrowval::fastdelay, MCW_grapher::fdw_graph, GRA_REALZ, GRA_setshift_action_CB(), LABEL_ARG, MCW_action_area(), MCW_AV_downup, MCW_AV_edittext, MCW_isitmwm, MCW_reghelp_children(), MCW_reghint_children(), MCW_widget_geom(), new_MCW_arrowval(), NORMAL_cursorize, NUM_SETSHIFT_ACT, RWC_visibilize_widget(), MCW_DC::screen, MCW_grapher::setshift_inc, MCW_grapher::setshift_inc_av, MCW_grapher::setshift_left, MCW_grapher::setshift_left_av, MCW_grapher::setshift_right, MCW_grapher::setshift_right_av, MCW_DC::visual, and MCW_arrowval::wrowcol.

Referenced by GRA_fim_CB().

04859 {
04860    int ib , xx,yy ;
04861    Widget wrc ;
04862 
04863 ENTRY("GRA_setshift_startup") ;
04864 
04865    if( ! GRA_REALZ(grapher) || grapher->dialog != NULL ) EXRETURN ;
04866 
04867    MCW_widget_geom( grapher->fdw_graph , NULL,NULL,&xx,&yy ) ;  /* geometry of shell */
04868 
04869    grapher->dialog = XtVaCreatePopupShell(
04870                       "menu" , xmDialogShellWidgetClass , grapher->fdw_graph ,
04871                          XmNx , xx+15 ,
04872                          XmNy , yy+15 ,
04873                          XmNtitle , "Shifts" ,
04874                          XmNdeleteResponse , XmDO_NOTHING ,
04875                          XmNinitialResourcesPersistent , False ,
04876 
04877                          XmNvisual   , grapher->dc->visual ,         /* 14 Sep 1998 */
04878                          XmNcolormap , grapher->dc->colormap ,
04879                          XmNdepth    , grapher->dc->depth ,
04880                          XmNscreen   , grapher->dc->screen ,
04881                          XmNbackground  , 0 ,
04882                          XmNborderColor , 0 ,
04883 
04884                       NULL ) ;
04885 
04886    if( MCW_isitmwm(grapher->fdw_graph) ){
04887       XtVaSetValues( grapher->dialog ,
04888                        XmNmwmDecorations , MWM_DECOR_BORDER ,
04889                        XmNmwmFunctions ,   MWM_FUNC_MOVE
04890                                          | MWM_FUNC_CLOSE ,
04891                      NULL ) ;
04892    }
04893 
04894    XmAddWMProtocolCallback(           /* make "Close" window menu work */
04895            grapher->dialog ,
04896            XmInternAtom( grapher->dc->display , "WM_DELETE_WINDOW" , False ) ,
04897            GRA_setshift_action_CB , grapher ) ;
04898 
04899    wrc = XtVaCreateWidget(                    /* RowColumn to hold all */
04900              "dialog" , xmRowColumnWidgetClass , grapher->dialog ,
04901                 XmNpacking     , XmPACK_TIGHT ,
04902                 XmNorientation , XmVERTICAL ,
04903                 XmNtraversalOn , False ,
04904                 XmNinitialResourcesPersistent , False ,
04905              NULL ) ;
04906 
04907    (void) XtVaCreateManagedWidget(
04908             "dialog" , xmLabelWidgetClass , wrc ,
04909                LABEL_ARG("-- Shift Controls --") ,
04910                XmNalignment  , XmALIGNMENT_CENTER ,
04911                XmNinitialResourcesPersistent , False ,
04912             NULL ) ;
04913 
04914    (void) XtVaCreateManagedWidget(
04915             "dialog" , xmSeparatorWidgetClass , wrc ,
04916                XmNseparatorType , XmSHADOW_ETCHED_IN ,
04917                XmNinitialResourcesPersistent , False ,
04918             NULL ) ;
04919 
04920    grapher->setshift_inc_av = new_MCW_arrowval(
04921                                 wrc ,   "Increment  " , MCW_AV_downup ,
04922                                 1 , 1000 , (int)(100.0*grapher->setshift_inc) ,
04923                                 MCW_AV_edittext , 2 ,
04924                                 NULL , NULL , NULL , NULL ) ;
04925 
04926    grapher->setshift_left_av = new_MCW_arrowval(
04927                                   wrc , "Steps Left " , MCW_AV_downup ,
04928                                   0 , 29 , grapher->setshift_left ,
04929                                   MCW_AV_edittext , 0 ,
04930                                   NULL , NULL , NULL , NULL ) ;
04931 
04932    grapher->setshift_right_av = new_MCW_arrowval(
04933                                   wrc , "Steps Right" , MCW_AV_downup ,
04934                                   0 , 29 , grapher->setshift_right ,
04935                                   MCW_AV_edittext , 0 ,
04936                                   NULL , NULL , NULL , NULL ) ;
04937 
04938    grapher->setshift_inc_av->allow_wrap   = 1 ;   /* allow wrap at limits of values */
04939    grapher->setshift_left_av->allow_wrap  = 1 ;
04940    grapher->setshift_right_av->allow_wrap = 1 ;
04941 
04942    grapher->setshift_inc_av->fastdelay    = 250 ; /* slow down arrow repeat action */
04943    grapher->setshift_left_av->fastdelay   = 250 ;
04944    grapher->setshift_right_av->fastdelay  = 250 ;
04945 
04946    MCW_reghelp_children( grapher->setshift_inc_av->wrowcol ,
04947        "This controls the step size\n"
04948        "used to create the shifted\n"
04949        "time series -- for example,\n"
04950        "0.2 means a shift of 1/5\n"
04951        "of a time series stepsize."
04952    ) ;
04953    MCW_reghint_children( grapher->setshift_inc_av->wrowcol ,
04954                          "Size of shift" ) ;
04955 
04956    MCW_reghelp_children( grapher->setshift_left_av->wrowcol ,
04957       "This controls the number\n"
04958       "of left shifts used to\n"
04959       "create the desired multi-\n"
04960       "vector time series.\n\n"
04961       "N.B.: Steps Left plus\n"
04962       "      Steps Right should\n"
04963       "      be positive!"
04964    ) ;
04965    MCW_reghint_children( grapher->setshift_left_av->wrowcol ,
04966                          "Number of steps left" ) ;
04967 
04968    MCW_reghelp_children( grapher->setshift_right_av->wrowcol ,
04969       "This controls the number\n"
04970       "of right shifts used to\n"
04971       "create the desired multi-\n"
04972       "vector time series.\n\n"
04973       "N.B.: Steps Left plus\n"
04974       "      Steps Right should\n"
04975       "      be positive!"
04976    ) ;
04977    MCW_reghint_children( grapher->setshift_right_av->wrowcol ,
04978                          "Number of steps right" ) ;
04979 
04980    for( ib=0 ; ib < NUM_SETSHIFT_ACT ; ib++ )
04981       SETSHIFT_act[ib].data = (XtPointer) grapher ;
04982 
04983    (void) MCW_action_area( wrc , SETSHIFT_act , NUM_SETSHIFT_ACT ) ;
04984 
04985    XtManageChild( wrc ) ;
04986    XtPopup( grapher->dialog , XtGrabNone ) ;
04987    RWC_visibilize_widget( grapher->dialog ) ; /* 09 Nov 1999 */
04988    NORMAL_cursorize( grapher->dialog ) ;
04989    EXRETURN ;
04990 }

void GRA_slice_choose_CB MCW_arrowval   cbs,
XtPointer    cd
 

Definition at line 3851 of file afni_graph.c.

References ENTRY, GRA_VALID, MCW_grapher_status::nz, redraw_graph(), send_newinfo(), MCW_grapher::status, and MCW_grapher::zpoint.

Referenced by GRA_opt_CB(), and new_MCW_grapher().

03855 {
03856    MCW_grapher *grapher = (MCW_grapher *) cd ;
03857 
03858 ENTRY("GRA_slice_choose_CB") ;
03859 
03860    if( ! GRA_VALID(grapher) ) EXRETURN ;
03861 
03862    grapher->zpoint = cbs->ival ;
03863    if( grapher->zpoint >= grapher->status->nz )
03864       grapher->zpoint = grapher->status->nz - 1 ;
03865    redraw_graph( grapher , 0 ) ;
03866    send_newinfo( grapher ) ;
03867    EXRETURN ;
03868 }

void GRA_small_circle MCW_grapher   grapher,
int    xwin,
int    ywin,
int    filled
 

Definition at line 1135 of file afni_graph.c.

References a, MCW_grapher::dc, MCW_DC::display, MCW_grapher::fd_pxWind, i, MCW_DC::myGC, NBAL, NBAX, NBTOP, NCIR, and xball.

Referenced by plot_graphs().

01136 {
01137    int  i, ncirc ;
01138    XPoint a[NBTOP] ;
01139 
01140    switch( filled ){
01141       default: ncirc = NCIR ; break ;
01142       case 1:  ncirc = NBAL ; break ;
01143       case 2:  ncirc = NBAX ; break ;
01144    }
01145 
01146    for( i=0 ; i < ncirc ; i++ ){
01147       a[i].x = xball[i].x + xwin ;
01148       a[i].y = xball[i].y + ywin ;
01149    }
01150 
01151    XDrawPoints( grapher->dc->display, grapher->fd_pxWind,
01152                 grapher->dc->myGC, a, ncirc, CoordModeOrigin ) ;
01153    return ;
01154 }

void GRA_textgraph_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

set the 1D transform function pointer *

Definition at line 5569 of file afni_graph.c.

References client_data, ENTRY, GRA_VALID, MCW_val_bbox(), MCW_grapher::opt_textgraph_bbox, redraw_graph(), and MCW_grapher::textgraph.

Referenced by new_MCW_grapher().

05570 {
05571    MCW_grapher *grapher = (MCW_grapher *) client_data ;
05572    int bbb ;
05573 
05574 ENTRY("GRA_textgraph_CB") ;
05575 
05576    if( ! GRA_VALID(grapher) ) EXRETURN ;
05577 
05578    bbb = MCW_val_bbox( grapher->opt_textgraph_bbox ) ;
05579    if( bbb != grapher->textgraph ){
05580      grapher->textgraph = bbb ;
05581      redraw_graph( grapher , 0 ) ;
05582    }
05583    EXRETURN ;
05584 }

void GRA_thick_CB Widget    w,
XtPointer    cd,
XtPointer    call_data
 

Definition at line 5791 of file afni_graph.c.

References ENTRY, GRA_VALID, MCW_val_bbox(), NUM_COLOR_ITEMS, MCW_grapher::opt_points_bbox, MCW_grapher::opt_thick_bbox, MCW_grapher::points_index, redraw_graph(), MCW_grapher::thick_index, and MCW_bbox::wbut.

Referenced by new_MCW_grapher().

05792 {
05793    MCW_grapher * grapher = (MCW_grapher *) cd ;
05794    int ii , jj ;
05795 
05796 ENTRY("GRA_thick_CB") ;
05797 
05798    if( ! GRA_VALID(grapher) ) EXRETURN ;
05799 
05800    for( ii=0 ; ii < NUM_COLOR_ITEMS ; ii++ )
05801       if( grapher->opt_thick_bbox[ii] != NULL &&
05802           w == grapher->opt_thick_bbox[ii]->wbut[0] ) break ;
05803 
05804    if( ii < NUM_COLOR_ITEMS ){
05805       jj = grapher->thick_index[ii] ;
05806       grapher->thick_index[ii] = MCW_val_bbox( grapher->opt_thick_bbox[ii] ) ;
05807       if( jj != grapher->thick_index[ii] ) redraw_graph( grapher , 0 ) ;
05808       EXRETURN ;
05809    }
05810 
05811    /* 09 Jan 1998 */
05812 
05813    for( ii=0 ; ii < NUM_COLOR_ITEMS ; ii++ )
05814       if( grapher->opt_points_bbox[ii] != NULL &&
05815           ( w == grapher->opt_points_bbox[ii]->wbut[0] ||
05816             w == grapher->opt_points_bbox[ii]->wbut[1]   ) ) break ;
05817 
05818    if( ii < NUM_COLOR_ITEMS ){
05819       jj = grapher->points_index[ii] ;
05820       grapher->points_index[ii] = MCW_val_bbox( grapher->opt_points_bbox[ii] ) ;
05821       if( jj != grapher->points_index[ii] ) redraw_graph( grapher , 0 ) ;
05822       EXRETURN ;
05823    }
05824 
05825    EXRETURN ;  /* should not be reached */
05826 }

void GRA_timer_CB XtPointer    cd,
XtIntervalId *    id
 

Do something every so often.

Definition at line 5943 of file afni_graph.c.

References CALL_sendback, drive_MCW_grapher(), ENTRY, GRA_cbs::event, MCW_grapher::getaux, GRA_REALZ, GRA_timer_CB(), GRA_TIMERFUNC_BOUNCE, GRA_TIMERFUNC_INDEX, graCR_setindex, graDR_setindex, GRA_cbs::key, MCW_grapher_status::num_series, MCW_grapher::opt_quit_pb, GRA_cbs::reason, MCW_grapher_status::send_CB, MCW_grapher::status, MCW_grapher::time_index, MCW_grapher::timer_delay, MCW_grapher::timer_func, MCW_grapher::timer_id, and MCW_grapher::timer_param.

Referenced by GRA_handle_keypress(), and GRA_timer_CB().

05944 {
05945    MCW_grapher *grapher = (MCW_grapher *)cd ;
05946    int redo = 0 ;
05947 
05948 ENTRY("GRA_timer_CB") ;
05949 
05950    if( !GRA_REALZ(grapher) || grapher->timer_id == 0 ) EXRETURN ;
05951 
05952    switch( grapher->timer_func ){
05953 
05954      case GRA_TIMERFUNC_INDEX:{
05955        int nn = grapher->time_index , nt=grapher->status->num_series ;
05956        if( nt > 1 && grapher->timer_param != 0 ){
05957          nn = (nn+grapher->timer_param+nt) % nt ;
05958          redo = 1 ;
05959          if( grapher->status->send_CB != NULL ){
05960            GRA_cbs cbs ;
05961            cbs.reason = graCR_setindex ;
05962            cbs.key    = nn ;
05963            cbs.event  = NULL ;
05964 #if 0
05965            grapher->status->send_CB( grapher, grapher->getaux, &cbs ) ;
05966 #else
05967            CALL_sendback( grapher , cbs ) ;
05968 #endif
05969          } else {
05970            (void) drive_MCW_grapher( grapher, graDR_setindex, (XtPointer)nn) ;
05971          }
05972        }
05973      }
05974      break ;
05975 
05976      case GRA_TIMERFUNC_BOUNCE:{
05977        int nn = grapher->time_index , nt=grapher->status->num_series ;
05978        if( nt > 1 && grapher->timer_param != 0 ){
05979          nn = nn + grapher->timer_param ;
05980          if( nn <  0  ){
05981            nn = -nn; grapher->timer_param = -grapher->timer_param;
05982          } else if( nn >= nt ){
05983            nn = 2*(nt-1)-nn; grapher->timer_param = -grapher->timer_param;
05984          }
05985          redo = 1 ;
05986          if( grapher->status->send_CB != NULL ){
05987            GRA_cbs cbs ;
05988            cbs.reason = graCR_setindex ;
05989            cbs.key    = nn ;
05990            cbs.event  = NULL ;
05991 #if 0
05992            grapher->status->send_CB( grapher, grapher->getaux, &cbs ) ;
05993 #else
05994            CALL_sendback( grapher , cbs ) ;
05995 #endif
05996          } else {
05997            (void) drive_MCW_grapher( grapher, graDR_setindex, (XtPointer)nn) ;
05998          }
05999        }
06000      }
06001      break ;
06002 
06003    }
06004 
06005    if( redo ) grapher->timer_id = XtAppAddTimeOut(
06006                                    XtWidgetToApplicationContext(grapher->opt_quit_pb) ,
06007                                    grapher->timer_delay , GRA_timer_CB , grapher ) ;
06008    else       grapher->timer_id = 0 ;
06009 
06010    EXRETURN ;
06011 }

void GRA_timer_stop MCW_grapher   grapher
 

Definition at line 6015 of file afni_graph.c.

References MCW_grapher::timer_id.

Referenced by AFNI_drive_open_window(), drive_MCW_grapher(), end_fd_graph_CB(), GRA_drawing_EV(), GRA_fim_CB(), GRA_opt_CB(), GRA_pick_xaxis_CB(), and GRA_pin_choose_CB().

06016 {
06017    if( grapher->timer_id > 0 ){ XtRemoveTimeOut(grapher->timer_id); grapher->timer_id = 0; }
06018 }

void GRA_transform_CB MCW_arrowval   av,
XtPointer    cd
 

Will be called from both the 1D and 0D menus.

Definition at line 5513 of file afni_graph.c.

References ENTRY, MCW_function_list::flags, MCW_function_list::func_init, MCW_function_list::funcs, GRA_VALID, MCW_arrowval::ival, MCW_function_list::num, redraw_graph(), MCW_grapher::status, MCW_grapher::transform0D_av, MCW_grapher::transform0D_flags, MCW_grapher::transform0D_func, MCW_grapher::transform0D_index, MCW_grapher::transform1D_av, MCW_grapher::transform1D_flags, MCW_grapher::transform1D_func, MCW_grapher::transform1D_index, MCW_grapher_status::transforms0D, and MCW_grapher_status::transforms1D.

Referenced by new_MCW_grapher().

05514 {
05515    MCW_grapher * grapher = (MCW_grapher *) cd ;
05516 
05517 ENTRY("GRA_transform_CB") ;
05518 
05519    if( ! GRA_VALID(grapher) ) EXRETURN ;
05520 
05521    /** set the 0D transform function pointer **/
05522 
05523    if( av == grapher->transform0D_av && av != NULL ){
05524       if( grapher->status->transforms0D == NULL || av->ival <= 0 ||
05525           av->ival > grapher->status->transforms0D->num            ){
05526 
05527          grapher->transform0D_func  = NULL ;  /* no transform */
05528          grapher->transform0D_index = 0 ;
05529       } else {
05530          grapher->transform0D_func  = grapher->status->transforms0D->funcs[av->ival-1];
05531          grapher->transform0D_index = av->ival ;
05532          grapher->transform0D_flags = grapher->status->transforms0D->flags[av->ival-1];
05533 
05534          /* 21 Jul 2003: call the init function, if present */
05535 
05536          if( grapher->status->transforms0D->func_init[av->ival-1] != NULL )
05537           grapher->status->transforms0D->func_init[av->ival-1]() ;
05538       }
05539    }
05540 
05541    /** set the 1D transform function pointer **/
05542 
05543    if( av == grapher->transform1D_av && av != NULL ){
05544       if( grapher->status->transforms1D == NULL || av->ival <= 0 ||
05545           av->ival > grapher->status->transforms1D->num            ){
05546 
05547          grapher->transform1D_func  = NULL ;  /* no transform */
05548          grapher->transform1D_index = 0 ;
05549       } else {
05550          grapher->transform1D_func  = grapher->status->transforms1D->funcs[av->ival-1];
05551          grapher->transform1D_index = av->ival ;
05552          grapher->transform1D_flags = grapher->status->transforms1D->flags[av->ival-1];
05553 
05554          /* 21 Jul 2003: call the init function, if present */
05555 
05556          if( grapher->status->transforms1D->func_init[av->ival-1] != NULL )
05557           grapher->status->transforms1D->func_init[av->ival-1]() ;
05558       }
05559    }
05560 
05561    redraw_graph( grapher , 0 ) ;
05562    EXRETURN ;
05563 }

char* GRA_transform_label MCW_arrowval   av,
XtPointer    cd
 

15 Dec 1997: a pullright menu with a single button *

Definition at line 5500 of file afni_graph.c.

References MCW_arrowval::ival, MCW_function_list::labels, and MCW_function_list::num.

Referenced by new_MCW_grapher().

05501 {
05502    MCW_function_list * xforms = (MCW_function_list *) cd ;
05503 
05504    if( av == NULL    || xforms == NULL        ||
05505        av->ival <= 0 || av->ival > xforms->num  ) return "-none-" ;
05506 
05507    return xforms->labels[av->ival - 1] ;  /* label for each function */
05508 }

void GRA_wcsuffix_choose_CB Widget    wcaller,
XtPointer    cd,
MCW_choose_cbs   cbs
 

Definition at line 3708 of file afni_graph.c.

References MCW_choose_cbs::cval, ENTRY, Grapher_Stuff, mcwCR_string, myXtFree, MCW_choose_cbs::reason, and GRA_miscellaneous::wcsuffix.

Referenced by GRA_opt_CB().

03709 {
03710    int ll , ii ;
03711 
03712 ENTRY("GRA_wcsuffix_choose_CB") ;
03713 
03714    if( cbs->reason != mcwCR_string ||
03715        cbs->cval   == NULL         || (ll=strlen(cbs->cval)) == 0 ){
03716 
03717      XBell( XtDisplay(wcaller) , 100 ) ; EXRETURN ;
03718    }
03719 
03720    for( ii=0 ; ii < ll ; ii++ ){
03721      if( iscntrl(cbs->cval[ii]) ||
03722          isspace(cbs->cval[ii]) ||
03723          cbs->cval[ii] == '/'     ){
03724 
03725         XBell( XtDisplay(wcaller) , 100 ) ; EXRETURN ;
03726      }
03727    }
03728 
03729    if( Grapher_Stuff.wcsuffix != NULL ) myXtFree(Grapher_Stuff.wcsuffix) ;
03730 
03731    Grapher_Stuff.wcsuffix = XtNewString(cbs->cval) ;
03732    EXRETURN ;
03733 }

void GRA_winaver_CB Widget    w,
XtPointer    client_data,
XtPointer    call_data
 

Definition at line 5638 of file afni_graph.c.

References CALL_sendback, client_data, FIM_menu::fim_editref_winaver_bbox, MCW_grapher::fmenu, graCR_winaver, MCW_val_bbox(), FIM_menu::parent, GRA_cbs::reason, and redraw_graph().

Referenced by AFNI_new_fim_menu().

05639 {
05640    FIM_menu *fm = (FIM_menu *)client_data ;
05641    MCW_grapher *grapher = (MCW_grapher *)fm->parent ;
05642 
05643    if( MCW_val_bbox(grapher->fmenu->fim_editref_winaver_bbox) ){
05644      GRA_cbs cbs ;
05645      cbs.reason  = graCR_winaver ;
05646      CALL_sendback( grapher , cbs ) ;
05647      redraw_graph( grapher , 0 ) ;
05648    }
05649 }

void GRA_winaver_setref MCW_grapher   grapher
 

Definition at line 5670 of file afni_graph.c.

References MCW_grapher::ave_tsim, ENTRY, GRA_REALZ, GRA_winavertimer_CB(), MCW_grapher::opt_quit_pb, and STATUS.

Referenced by redraw_graph().

05671 {
05672    GRA_cbs cbs ;
05673 
05674 ENTRY("GRA_winaver_setref") ;
05675 
05676    if( !GRA_REALZ(grapher) || grapher->ave_tsim == NULL ){
05677     STATUS("nothing to do") ; EXRETURN ;
05678    }
05679 
05680    (void)XtAppAddTimeOut( XtWidgetToApplicationContext(grapher->opt_quit_pb) ,
05681                           1 , GRA_winavertimer_CB , grapher ) ;
05682    EXRETURN ;
05683 }

void GRA_winavertimer_CB XtPointer    cd,
XtIntervalId *    id
 

Definition at line 5652 of file afni_graph.c.

References MCW_grapher::ave_tsim, CALL_sendback, MCW_grapher::dont_redraw, GRA_REALZ, graCR_refequals, GRA_cbs::reason, and GRA_cbs::userdata.

Referenced by GRA_winaver_setref().

05653 {
05654    MCW_grapher *grapher = (MCW_grapher *)cd ;
05655    GRA_cbs cbs ;
05656 
05657    if( !GRA_REALZ(grapher) || grapher->ave_tsim == NULL ) return ;
05658 
05659    cbs.reason   = graCR_refequals ;
05660    cbs.userdata = (XtPointer)grapher->ave_tsim ;
05661    grapher->dont_redraw = 1 ;
05662    CALL_sendback( grapher , cbs ) ;
05663    grapher->dont_redraw = 0 ;
05664    return ;
05665 }

void grid_down MCW_grapher   grapher
 

Definition at line 2675 of file afni_graph.c.

02677 {
02678    int old;
02679 
02680    if( !GRA_VALID(grapher) ) return ;
02681    old = grapher->grid_index;
02682    grapher->grid_index--;
02683    if (grapher->grid_index < 0) grapher->grid_index = 0;
02684    grapher->grid_spacing = grid_ar[grapher->grid_index] ;
02685    grapher->grid_fixed   = 1 ;  /* 02 Apr 2004 */
02686    redraw_graph(grapher,0) ;
02687    return ;
02688 }

void grid_up MCW_grapher   grapher
 

Definition at line 2691 of file afni_graph.c.

02693 {
02694    int old;
02695 
02696    if( !GRA_VALID(grapher) ) return ;
02697    old = grapher->grid_index;
02698    grapher->grid_index++;
02699    if (grapher->grid_index >= GRID_MAX) grapher->grid_index = GRID_MAX - 1;
02700    grapher->grid_spacing = grid_ar[grapher->grid_index] ;
02701    grapher->grid_fixed   = 1 ;  /* 02 Apr 2004 */
02702    redraw_graph(grapher,0) ;
02703    return ;
02704 }

void init_const MCW_grapher   grapher
 

Definition at line 1542 of file afni_graph.c.

References auto_grid(), ENTRY, MCW_grapher::fscale, GRA_VALID, MCW_grapher::grid_color, MCW_grapher::grid_index, INIT_GR_gmat, init_mat(), MCW_grapher::mat, MCW_grapher::mat_max, MIN, NPTS, MCW_grapher_status::num_series, MCW_grapher_status::nx, MCW_grapher_status::ny, MCW_grapher_status::nz, MCW_grapher::status, MCW_grapher::time_index, MCW_grapher::xpoint, MCW_grapher::ypoint, and MCW_grapher::zpoint.

Referenced by drive_MCW_grapher(), and new_MCW_grapher().

01543 {
01544    int ii ;
01545 
01546 ENTRY("init_const") ;
01547 
01548    if( !GRA_VALID(grapher) ) EXRETURN ;
01549 
01550    if( grapher->fscale == 0 ) grapher->fscale = 1 ;
01551 
01552    grapher->mat_max = MAT_MAX ;
01553    grapher->mat_max = MIN( grapher->mat_max , grapher->status->nx ) ;
01554    grapher->mat_max = MIN( grapher->mat_max , grapher->status->ny ) ;
01555 
01556    if( grapher->mat <= 0 ) grapher->mat = INIT_GR_gmat ;
01557    grapher->mat = MIN( grapher->mat , grapher->mat_max ) ;
01558 
01559    if( grapher->xpoint < 0 || grapher->xpoint >= grapher->status->nx )
01560       grapher->xpoint = grapher->status->nx / 2 ;
01561 
01562    if( grapher->ypoint < 0 || grapher->ypoint >= grapher->status->ny )
01563       grapher->ypoint = grapher->status->ny / 2 ;
01564 
01565    if( grapher->zpoint < 0 || grapher->zpoint >= grapher->status->nz )
01566       grapher->zpoint = grapher->status->nz / 2 ;
01567 
01568    if( grapher->grid_index < 0 ) auto_grid( grapher, NPTS(grapher) ) ;
01569 
01570 #if 0
01571    if( grapher->grid_color < 0 )
01572       grapher->grid_color = 1 ;  /* first overlay color */
01573 #endif
01574 
01575    if( grapher->time_index < 0 )
01576      grapher->time_index = 0 ;
01577    else if( grapher->time_index >= grapher->status->num_series )
01578      grapher->time_index = grapher->status->num_series - 1 ;
01579 
01580    init_mat(grapher) ;
01581    EXRETURN ;
01582 }

void init_mat MCW_grapher   grapher
 

Definition at line 2567 of file afni_graph.c.

02568 {
02569    int i, j ;
02570    int gg ;
02571 
02572 ENTRY("init_mat") ;
02573    if( !GRA_VALID(grapher) ) EXRETURN ;
02574 
02575    grapher->gx = grapher->gx_max / grapher->mat;
02576    grapher->gy = grapher->gy_max / grapher->mat;
02577 
02578    for (i=0;i<grapher->mat;i++) {
02579      for (j=0;j<grapher->mat;j++) {
02580        grapher->xorigin[i][j] = MDX1 + i * grapher->gx;
02581        grapher->yorigin[i][j] = MDY1 + j * grapher->gy;
02582      }
02583    }
02584 
02585    if( grapher->mirror && grapher->mat > 1 ){  /* Jul 2000 */
02586       int mm = grapher->mat , m2 = mm/2 ;      /* swap left and right */
02587 
02588       for( j=0 ; j < mm ; j++ ){
02589          for( i=0 ; i < m2 ; i++ ){
02590            gg                          = grapher->xorigin[i][j] ;
02591            grapher->xorigin[i][j]      = grapher->xorigin[mm-1-i][j] ;
02592            grapher->xorigin[mm-1-i][j] = gg ;
02593          }
02594       }
02595    }
02596 
02597    grapher->xc = grapher->mat/2;
02598    grapher->yc = (grapher->mat-1)/2;
02599 
02600    gg = grapher->ggap ;                /* 12 Jan 1998 */
02601    if( gg > 0 ){
02602      gg = MIN( gg , grapher->gx / 2 ) ;  /* shrink sizes of graphs */
02603      gg = MIN( gg , grapher->gy / 2 ) ;
02604      grapher->gx -= gg ;
02605      grapher->gy -= gg ;
02606    }
02607 
02608    EXRETURN ;
02609 }

void mat_down MCW_grapher   grapher
 

Definition at line 2639 of file afni_graph.c.

02641 {
02642    int old;
02643 
02644    if( !GRA_VALID(grapher) ) return ;
02645    old = grapher->mat;
02646    grapher->mat--;
02647    if (grapher->mat < 1) grapher->mat = 1;
02648    else if (grapher->mat > grapher->mat_max) grapher->mat = grapher->mat_max;
02649    if (grapher->mat!= old) {
02650       init_mat( grapher ) ;
02651       redraw_graph( grapher , 0 ) ;
02652    }
02653    return ;
02654 }

void mat_up MCW_grapher   grapher
 

Definition at line 2657 of file afni_graph.c.

02659 {
02660    int old;
02661 
02662    if( !GRA_VALID(grapher) ) return ;
02663    old = grapher->mat;
02664    grapher->mat++;
02665    if (grapher->mat < 1) grapher->mat = 1;
02666    else if (grapher->mat > grapher->mat_max) grapher->mat = grapher->mat_max;
02667    if (grapher->mat!= old) {
02668       init_mat(grapher) ;
02669       redraw_graph(grapher,0) ;
02670    }
02671    return ;
02672 }

MCW_grapher* new_MCW_grapher MCW_DC   dc,
get_ptr    getser,
XtPointer    aux
 

Create a new MCW_grapher window and structure.

Definition at line 46 of file afni_graph.c.

References AFNI_new_fim_menu(), allow_MCW_optmenu_popup(), AV_fval_to_char(), MCW_grapher::ave_tsim, AVOPT_columnize, BASELINE_COMMON, BASELINE_GLOBAL, BASELINE_INDIVIDUAL, MCW_grapher::but3_label, MCW_grapher::but3_menu, MCW_grapher::button2_enabled, CALL_getser, MCW_grapher::cen_line, MCW_grapher::cen_tsim, MCW_grapher::color_index, MCW_grapher::common_base, MCW_grapher::dc, DC_yokify(), MCW_grapher::dialog, MCW_DC::display, MCW_grapher::dont_redraw, DPLOT_OFF, MCW_grapher::draw_fd, end_fd_graph_CB(), ENTRY, MCW_grapher::fd_pxWind, MCW_grapher::fdw_graph, MCW_grapher::fHIGH, MCW_grapher::fmenu, MCW_grapher::fscale, MCW_grapher::fWIDE, gbuf, MCW_grapher::getaux, getenv(), MCW_grapher::getser, MCW_grapher::ggap, MCW_grapher::global_base, MCW_grapher::glogo_height, MCW_grapher::glogo_pixmap, MCW_grapher::glogo_width, GRA_baseline_CB(), GRA_COLOR, GRA_color_CB(), GRA_dplot_change_CB(), GRA_drawing_EV(), GRA_fim_CB(), GRA_fix_optmenus(), GRA_ggap_CB(), GRA_gthick_CB(), GRA_mat_choose_CB(), GRA_NULL_tuser, GRA_slice_choose_CB(), GRA_textgraph_CB(), GRA_thick_CB(), GRA_transform_CB(), GRA_transform_label(), graCR_getstatus, MCW_grapher::grid_color, GRID_COLOR, MCW_grapher::grid_fixed, MCW_grapher::grid_index, MCW_grapher::gthick, MCW_grapher::gx_max, MCW_grapher::gy_max, MCW_DC::height, init_const(), INIT_GR_backg_color, INIT_GR_boxes_color, INIT_GR_boxes_thick, INIT_GR_data_color, INIT_GR_data_thick, INIT_GR_dplot_color, INIT_GR_dplot_thick, INIT_GR_ggap, INIT_GR_grid_color, INIT_GR_grid_thick, INIT_GR_gthick, INIT_GR_ideal_color, INIT_GR_ideal_thick, INIT_GR_ignore_color, INIT_GR_ort_color, INIT_GR_ort_thick, INIT_GR_text_color, MCW_grapher::key_Nlock, LABEL_ARG, MCW_grapher::mat, MCW_BB_check, MCW_BB_noframe, MCW_BB_radio_one, MCW_BB_radio_zero, MCW_GRAPHER_TYPE, MCW_reghint_children(), MCW_register_help(), MCW_register_hint(), MCW_set_bbox(), MCW_set_widget_bg(), MIN_XSIZE, MIN_YSIZE, MCW_grapher::mirror, myXtFree, myXtNew, MCW_grapher_status::namecode, MCW_grapher::ncen_line, MCW_DCOV::ncol_ov, MCW_grapher::never_drawn, new_MCW_bbox(), new_MCW_colormenu(), new_MCW_optmenu(), MCW_grapher::nncen, NORMAL_cursorize, MCW_function_list::num, NUM_COLOR_ITEMS, MCW_grapher_status::num_series, MCW_grapher_status::nx, MCW_grapher_status::ny, MCW_grapher::opt_baseline_bbox, MCW_grapher::opt_baseline_global_label, MCW_grapher::opt_baseline_menu, MCW_grapher::opt_cbut, MCW_grapher::opt_color_av, MCW_grapher::opt_colors_menu, MCW_grapher::opt_dplot_bbox, MCW_grapher::opt_dplot_menu, MCW_grapher::opt_ggap_av, MCW_grapher::opt_gthick_av, MCW_grapher::opt_menu, MCW_grapher::opt_points_bbox, MCW_grapher::opt_quit_pb, MCW_grapher::opt_textgraph_bbox, MCW_grapher::opt_thick_bbox, MCW_grapher::option_rowcol, MCW_grapher::ort_ts, MCW_grapher::ort_ts_plotall, MCW_DC::ovc, MCW_grapher::parent, FIM_menu::parent, MCW_grapher::pin_bot, MCW_grapher::pin_top, MCW_DCOV::pixov_brightest, MCW_grapher::points_index, MCW_grapher::polort, MCW_grapher::ref_ts, MCW_grapher::ref_ts_plotall, RETURN, RWC_getname(), SAVEUNDERIZE, MCW_grapher::setshift_inc, MCW_grapher::setshift_inc_av, MCW_grapher::setshift_left, MCW_grapher::setshift_left_av, MCW_grapher::setshift_right, MCW_grapher::setshift_right_av, MCW_grapher::status, STATUS, strtod(), MCW_grapher::textgraph, MCW_grapher::thick_index, MCW_grapher::time_index, MCW_grapher::timer_id, MCW_grapher::transform0D_av, MCW_grapher::transform0D_func, MCW_grapher::transform0D_index, MCW_grapher::transform1D_av, MCW_grapher::transform1D_func, MCW_grapher::transform1D_index, MCW_grapher_status::transforms0D, MCW_grapher_status::transforms1D, MCW_grapher::tschosen, MCW_grapher::type, MCW_grapher::valid, VISIBILIZE_WHEN_MAPPED, WAIT_for_window, MCW_DC::width, MCW_arrowval::wrowcol, MCW_bbox::wrowcol, MCW_grapher::xax_tsim, MCW_grapher::xFD, MCW_grapher::xpoint, MCW_grapher::xx_text_1, MCW_grapher::xx_text_2, MCW_grapher::xx_text_2p, MCW_grapher::xx_text_3, MCW_grapher::yFD, MCW_grapher::ypoint, and MCW_grapher::zpoint.

Referenced by AFNI_view_xyz_CB().

00047 {
00048    int ii ;
00049    MCW_grapher *grapher ;
00050    static int new_xsize = -1 , new_ysize = -1 ;
00051    char *buf , *cpt ;
00052    Widget rc_tmp , mb_tmp , form_tmp ;  /* 29 Sep 2000 */
00053 
00054 ENTRY("new_MCW_grapher") ;
00055 
00056    grapher = myXtNew( MCW_grapher ) ;
00057 
00058    grapher->type   = MCW_GRAPHER_TYPE ;
00059    grapher->dc     = dc ;
00060    grapher->getser = getser ;
00061    grapher->getaux = aux ;
00062    grapher->parent = NULL ;
00063    grapher->valid  = 1 ;
00064 
00065    grapher->dont_redraw     = 0 ;  /* 27 Jan 2004 */
00066    grapher->timer_id        = 0 ;  /* 04 Dec 2003 */
00067    grapher->never_drawn     = 1 ;
00068    grapher->button2_enabled = 0 ;  /* Feb 1998 */
00069    grapher->mirror          = 0 ;  /* Jul 2000 */
00070 
00071    grapher->tschosen        = 0 ;  /* 31 Mar 2004 */
00072 
00073    grapher->gx_max = 0 ;
00074    grapher->gy_max = 0 ;
00075    grapher->fWIDE  = 0 ;
00076    grapher->fHIGH  = 0 ;
00077 
00078    grapher->glogo_pixmap = XmUNSPECIFIED_PIXMAP ;
00079    grapher->glogo_width  = grapher->glogo_height = 0 ;
00080 
00081 #if 0
00082    grapher->status = (MCW_grapher_status *) getser(0,graCR_getstatus,aux) ;
00083 #else
00084    CALL_getser( grapher , 0,graCR_getstatus , MCW_grapher_status *,grapher->status ) ;
00085 #endif
00086 
00087    if( grapher->status->num_series < 1 ){
00088      fprintf(stderr,"*** Attempt to create grapher with < 1 time points! ***\a\n") ;
00089      myXtFree(grapher) ;
00090      RETURN(NULL) ;
00091    }
00092 
00093    GRA_NULL_tuser(grapher) ;  /* 22 Apr 1997 */
00094 
00095    /** make shell that holds all **/
00096 
00097    grapher->fdw_graph =
00098       XtVaAppCreateShell(
00099          "AFNI" , "AFNI" , topLevelShellWidgetClass , dc->display ,
00100            XmNminHeight , MIN_XSIZE + GL_DLX + GR_DLX ,
00101            XmNmaxHeight , dc->height ,
00102            XmNminWidth  , MIN_YSIZE + GT_DLY + GB_DLY ,
00103            XmNmaxWidth  , dc->width ,
00104            XmNdeleteResponse   , XmDO_NOTHING ,   /* deletion handled below */
00105            XmNallowShellResize , False ,          /* let code resize shell */
00106            XmNinitialResourcesPersistent , False ,
00107       NULL ) ;
00108 
00109    DC_yokify( grapher->fdw_graph , dc ) ;  /* 14 Sep 1998 */
00110 
00111    /** find initial size of new graphs **/
00112 
00113    if( new_xsize < 0 ){
00114       new_xsize = GX_MAX ;
00115 #if 0
00116       buf = XGetDefault(dc->display,"AFNI","graph_width") ;
00117 #else
00118       buf = RWC_getname(dc->display,"graph_width") ;
00119 #endif
00120       if( buf != NULL ){
00121          ii = strtol( buf , &cpt , 10 ) ;
00122          if( *cpt == '\0' || new_xsize >= MIN_XSIZE ||
00123                              new_xsize <= dc->width - GL_DLX - GR_DLX )
00124             new_xsize = ii ;
00125       }
00126 
00127       new_ysize = GY_MAX ;
00128 #if 0
00129       buf = XGetDefault(dc->display,"AFNI","graph_height") ;
00130 #else
00131       buf = RWC_getname(dc->display,"graph_height") ;
00132 #endif
00133       if( buf != NULL ){
00134          ii = strtol( buf , &cpt , 10 ) ;
00135          if( *cpt == '\0' || new_ysize >= MIN_YSIZE ||
00136                              new_ysize <= dc->width - GT_DLY - GB_DLY )
00137             new_ysize = ii ;
00138       }
00139    }
00140 
00141    /** 29 Sep 2000: put in a Form to hold everything **/
00142 
00143    form_tmp = XtVaCreateWidget(
00144                   "dialog" , xmFormWidgetClass , grapher->fdw_graph ,
00145                     XmNwidth  , new_xsize + GL_DLX + GR_DLX ,
00146                     XmNheight , new_ysize + GT_DLY + GB_DLY ,
00147                     XmNborderWidth , 0 ,
00148                     XmNtraversalOn , False ,
00149                     XmNinitialResourcesPersistent , False ,
00150               NULL ) ;
00151 
00152    /** make a drawing area to get everything **/
00153 
00154    grapher->draw_fd =
00155        XtVaCreateManagedWidget(
00156          "dialog" , xmDrawingAreaWidgetClass , form_tmp ,
00157 
00158 #if 0
00159           XmNwidth  , new_xsize + GL_DLX + GR_DLX ,
00160           XmNheight , new_ysize + GT_DLY + GB_DLY ,
00161 #endif
00162 
00163           XmNtopAttachment    , XmATTACH_FORM ,
00164           XmNleftAttachment   , XmATTACH_FORM ,
00165           XmNrightAttachment  , XmATTACH_FORM ,
00166           XmNbottomAttachment , XmATTACH_FORM ,
00167 
00168           XmNmarginWidth  , 0 ,
00169           XmNmarginHeight , 0 ,
00170 
00171           XmNtraversalOn , False ,
00172           XmNinitialResourcesPersistent , False ,
00173        NULL ) ;
00174 
00175    XtInsertEventHandler( grapher->draw_fd ,     /* handle events in graphs */
00176 
00177                             0
00178                           | KeyPressMask        /* get keystrokes */
00179                           | ButtonPressMask     /* button presses */
00180                           | ExposureMask        /* exposures */
00181                           | StructureNotifyMask /* resizes */
00182                          ,
00183                          FALSE ,                /* nonmaskable events? */
00184                          GRA_drawing_EV ,       /* super-handler! */
00185                          (XtPointer) grapher ,  /* client data */
00186                          XtListTail ) ;         /* last in queue */
00187 
00188    MCW_register_help( grapher->draw_fd ,
00189                        "Button 1 in a sub-graph --> move it to center\n"
00190                        "Button 1 in the central --> move time index\n"
00191                        "              sub-graph     to closest point\n"
00192                        "                            on the graph\n"
00193 #if 0
00194                        "Shift or Ctrl keys with --> single-step time\n"
00195                        "Button 1 in the central     index up or down\n"
00196                        "              sub-graph\n"
00197 #endif
00198                        "\n"
00199                        "The red dot in the central sub-graph shows\n"
00200                        "the location of the current time index.\n"
00201                        "\n"
00202                        "Button 3 in a sub-graph --> show statistics\n"
00203                        "                            of time series\n"
00204                        "\n"
00205                        "To turn off the AFNI logo, click Button 1\n"
00206                        "inside the logo.\n"
00207                        "\n"
00208                        "Miscellaneous Keystrokes:\n"
00209                        "< = move back in time 1 point\n"
00210                        "> = move forward in time 1 point\n"
00211                        "1 = move to 1st time point\n"
00212                        "l = move to last time point\n"
00213                        "L = turn AFNI logo on/off\n"
00214                        "v/V = Video up/down in time\n"
00215                        "r/R = Video ricochet up/down in time\n"
00216                        "\n"
00217                        "See the 'Opt' menu for other keypress actions\n"
00218                        "and for other options to control graph display."
00219                     ) ;
00220 
00221    /*---------------------------*/
00222    /*--- Button 3 popup menu ---*/
00223    /*---------------------------*/
00224 
00225 #ifdef BAD_BUTTON3_POPUPS    /* 21 Jul 2003 */
00226    grapher->but3_menu =
00227       XmCreatePopupMenu(          form_tmp, "menu" , NULL , 0 ) ;
00228 #else
00229    grapher->but3_menu =
00230       XmCreatePopupMenu( grapher->draw_fd , "menu" , NULL , 0 ) ;
00231 #endif
00232 
00233    SAVEUNDERIZE(XtParent(grapher->but3_menu)) ; /* 27 Feb 2001 */
00234 
00235    VISIBILIZE_WHEN_MAPPED(grapher->but3_menu) ;
00236 
00237    grapher->but3_label =
00238       XtVaCreateManagedWidget(
00239          "dialog" , xmLabelWidgetClass , grapher->but3_menu ,
00240             XmNalignment , XmALIGNMENT_BEGINNING ,
00241             XmNtraversalOn , False ,
00242             XmNinitialResourcesPersistent , False ,
00243          NULL ) ;
00244 
00245    /*-------------------------------------*/
00246    /*--- RowColumn to hold all buttons ---*/
00247    /*-------------------------------------*/
00248 
00249    grapher->option_rowcol =
00250       XtVaCreateWidget(
00251          "dialog" , xmRowColumnWidgetClass , form_tmp ,
00252             XmNpacking     , XmPACK_TIGHT ,
00253             XmNorientation , XmHORIZONTAL ,
00254             XmNmarginWidth , 0 ,
00255             XmNmarginHeight, 0 ,
00256             XmNspacing     , 2 ,
00257             XmNbackground  , grapher->dc->ovc->pixov_brightest ,
00258             XmNtraversalOn , False ,
00259             XmNinitialResourcesPersistent , False ,
00260             XmNleftAttachment   , XmATTACH_NONE ,
00261             XmNtopAttachment    , XmATTACH_NONE ,
00262             XmNrightAttachment  , XmATTACH_FORM ,
00263             XmNbottomAttachment , XmATTACH_FORM ,
00264          NULL ) ;
00265 
00266 #if 0
00267    allow_MCW_optmenu_popup( 0 ) ;  /* 12 Dec 2001 */
00268 #endif
00269 
00270    /*------------------------*/
00271    /*--- FIM Menu Buttons ---*/
00272    /*------------------------*/
00273 
00274    /* 29 Sep 2000: move menu buttons each onto private menubars */
00275 
00276    rc_tmp = XtVaCreateWidget(
00277               "dialog" , xmRowColumnWidgetClass , grapher->option_rowcol ,
00278                  XmNorientation , XmHORIZONTAL ,
00279                  XmNpacking , XmPACK_TIGHT ,
00280                  XmNmarginWidth , 0 ,
00281                  XmNmarginHeight, 0 ,
00282                  XmNspacing     , 0 ,
00283                  XmNbackground  , grapher->dc->ovc->pixov_brightest ,
00284                  XmNtraversalOn , False ,
00285                  XmNinitialResourcesPersistent , False ,
00286               NULL ) ;
00287    mb_tmp = XmCreateMenuBar( rc_tmp , "dialog" , NULL,0 ) ;
00288    XtVaSetValues( mb_tmp ,
00289                      XmNmarginWidth  , 0 ,
00290                      XmNmarginHeight , 0 ,
00291                      XmNspacing      , 0 ,
00292                      XmNborderWidth  , 0 ,
00293                      XmNborderColor  , 0 ,
00294                      XmNtraversalOn  , False ,
00295                      XmNbackground   , grapher->dc->ovc->pixov_brightest ,
00296                   NULL ) ;
00297    XtManageChild( mb_tmp ) ;
00298 
00299    grapher->fmenu = AFNI_new_fim_menu( mb_tmp , GRA_fim_CB , 1 ) ;
00300    grapher->fmenu->parent = (XtPointer) grapher ;
00301    XtManageChild( rc_tmp ) ;
00302 
00303    grapher->polort = 1 ;  /* 27 May 1999 */
00304 
00305    /* macros to put double and single separator lines in a menu */
00306 
00307 #define MENU_DLINE(wmenu)                                          \
00308    (void) XtVaCreateManagedWidget(                                 \
00309             "dialog" , xmSeparatorWidgetClass , grapher -> wmenu , \
00310              XmNseparatorType , XmDOUBLE_LINE , NULL )
00311 
00312 #define MENU_SLINE(wmenu)                                          \
00313    (void) XtVaCreateManagedWidget(                                 \
00314             "dialog" , xmSeparatorWidgetClass , grapher -> wmenu , \
00315              XmNseparatorType , XmSINGLE_LINE , NULL )
00316 
00317    /*------------------------*/
00318    /*--- Opt Menu Buttons ---*/
00319    /*------------------------*/
00320 
00321    /* 29 Sep 2000: move menu buttons each onto private menubars */
00322 
00323    rc_tmp = XtVaCreateWidget(
00324               "dialog" , xmRowColumnWidgetClass , grapher->option_rowcol ,
00325                  XmNorientation , XmHORIZONTAL ,
00326                  XmNpacking , XmPACK_TIGHT ,
00327                  XmNmarginWidth , 0 ,
00328                  XmNmarginHeight, 0 ,
00329                  XmNspacing     , 0 ,
00330                  XmNbackground  , grapher->dc->ovc->pixov_brightest ,
00331                  XmNtraversalOn , False ,
00332                  XmNinitialResourcesPersistent , False ,
00333               NULL ) ;
00334    mb_tmp = XmCreateMenuBar( rc_tmp , "dialog" , NULL,0 ) ;
00335    XtVaSetValues( mb_tmp ,
00336                      XmNmarginWidth  , 0 ,
00337                      XmNmarginHeight , 0 ,
00338                      XmNspacing      , 0 ,
00339                      XmNborderWidth  , 0 ,
00340                      XmNborderColor  , 0 ,
00341                      XmNtraversalOn  , False ,
00342                      XmNbackground   , grapher->dc->ovc->pixov_brightest ,
00343                   NULL ) ;
00344    XtManageChild( mb_tmp ) ;
00345 
00346    grapher->opt_menu =
00347          XmCreatePulldownMenu( mb_tmp , "menu" , NULL,0 ) ;
00348 
00349    VISIBILIZE_WHEN_MAPPED(grapher->opt_menu) ;  /* 27 Sep 2000 */
00350 
00351    grapher->opt_cbut =
00352          XtVaCreateManagedWidget(
00353             "dialog" , xmCascadeButtonWidgetClass , mb_tmp ,
00354                LABEL_ARG("Opt") ,
00355                XmNsubMenuId , grapher->opt_menu ,
00356                XmNmarginWidth  , 0 ,
00357                XmNmarginHeight , 0 ,
00358                XmNmarginBottom , 0 ,
00359                XmNmarginTop    , 0 ,
00360                XmNmarginRight  , 0 ,
00361                XmNmarginLeft   , 0 ,
00362                XmNtraversalOn  , False ,
00363                XmNinitialResourcesPersistent , False ,
00364             NULL ) ;
00365 
00366    XtManageChild( rc_tmp ) ;
00367 
00368    MCW_register_hint( grapher->opt_cbut , "Graphing options menu" ) ;
00369 
00370    MCW_register_help( grapher->opt_cbut ,
00371                       "********  Graph Display Options:  ********\n"
00372                       "\n"
00373                       "Scale       --> Change vertical scaling\n"
00374                       "Matrix      --> Change number of sub-graphs\n"
00375                       "Grid        --> Change number of grid lines;\n"
00376                       "                 also can Pin the number of\n"
00377                       "                 time points displayed.\n"
00378                       "Slice       --> Change slice number\n"
00379                       "Colors, Etc --> Change colors of various\n"
00380                       "                 parts of the graph window\n"
00381                       "Baseline    --> Display each sub-graph with\n"
00382                       "                 its minimum at the bottom of\n"
00383                       "                 its window (the default), OR\n"
00384                       "                 with the minimum of all sub-\n"
00385                       "                 graphs as the common baseline\n"
00386                       "Show Text?  --> Instead of graphs, show the\n"
00387                       "                 numerical values of the data\n"
00388                       "                 at the current time index\n"
00389                       "                 in each sub-graph box\n"
00390                       "Save PNM    --> Save the graph window as an\n"
00391                       "                 image to a PNM format file\n"
00392                       "Write Center--> Central voxel timeseries will\n"
00393                       "                 be written to a file with a\n"
00394                       "                 name like 'X_Y_Z.suffix.1D'\n"
00395                       "                 where X,Y,Z are voxel indexes\n"
00396                       "Tran 0D     --> Choose a function to apply to\n"
00397                       "                 each point in each timeseries\n"
00398                       "Tran 1D     --> Choose a function to apply to\n"
00399                       "                 the timeseries as a whole\n"
00400                       "Double Plot --> If 'Tran 1D' is active, then\n"
00401                       "                 plot the data timeseries AND\n"
00402                       "                 the transformed timeseries;\n"
00403                       "                Plus/Minus -> transformed data\n"
00404                       "                 is added/subtracted from real\n"
00405                       "                 data timeseries (use this with\n"
00406                       "                 Dataset#2 to plot error bands)\n"
00407                       "Done        --> Close this graphing window\n"
00408                       "\n"
00409                       "The keystrokes indicated in the menus will\n"
00410                       "carry out the same functions, if pressed\n"
00411                       "when the cursor focus is in the graph window.\n"
00412                       "\n"
00413                       "N.B.: keystrokes without menu items are:\n"
00414                       " <  -->  move time index down by 1\n"
00415                       " >  -->  move time index up by 1\n"
00416                       " 1  -->  move to first image (time index 0)\n"
00417                       " l  -->  move to last image in time series\n"
00418                       " L  -->  turn off the AFNI logo in the corner"
00419                     ) ;
00420 
00421    /** macro to create a new opt menu button **/
00422 
00423 #define OPT_MENU_BUT(wname,label,hhh)                                \
00424    grapher -> wname =                                                \
00425          XtVaCreateManagedWidget(                                    \
00426             "dialog" , xmPushButtonWidgetClass , grapher->opt_menu , \
00427                LABEL_ARG( label ) ,                                  \
00428                XmNmarginHeight , 0 ,                                 \
00429                XmNtraversalOn , False ,                              \
00430                XmNinitialResourcesPersistent , False ,               \
00431             NULL ) ;                                                 \
00432       XtAddCallback( grapher -> wname , XmNactivateCallback ,        \
00433                      GRA_opt_CB , (XtPointer) grapher ) ;            \
00434       MCW_register_hint( grapher -> wname , hhh ) ;
00435 
00436    /** macro to create a new opt pullright menu **/
00437    /** 07 Jan 1999: added the mapCallback to fix position **/
00438 
00439 #define OPT_MENU_PULLRIGHT(wmenu,wcbut,label,hhh)                      \
00440    grapher -> wmenu =                                                  \
00441      XmCreatePulldownMenu( grapher->opt_menu , "menu" , NULL , 0 ) ;   \
00442    grapher -> wcbut =                                                  \
00443      XtVaCreateManagedWidget(                                          \
00444        "dialog" , xmCascadeButtonWidgetClass , grapher->opt_menu ,     \
00445           LABEL_ARG( label ) ,                                         \
00446           XmNsubMenuId , grapher -> wmenu ,                            \
00447           XmNtraversalOn , False ,                                     \
00448           XmNinitialResourcesPersistent , False ,                      \
00449        NULL ) ;                                                        \
00450    MCW_register_hint( grapher -> wcbut , hhh ) ;                       \
00451    XtAddCallback( grapher -> wmenu, XmNmapCallback, GRA_mapmenu_CB, NULL ) ;
00452 
00453    /** macro to create a new button on a pullright menu **/
00454 
00455 #define OPT_MENU_PULL_BUT(wmenu,wname,label,hhh)                    \
00456    grapher -> wname =                                               \
00457          XtVaCreateManagedWidget(                                   \
00458             "dialog" , xmPushButtonWidgetClass , grapher -> wmenu , \
00459                LABEL_ARG( label ) ,                                 \
00460                XmNmarginHeight , 0 ,                                \
00461                XmNtraversalOn , False ,                             \
00462                XmNinitialResourcesPersistent , False ,              \
00463             NULL ) ;                                                \
00464       XtAddCallback( grapher -> wname , XmNactivateCallback ,       \
00465                      GRA_opt_CB , (XtPointer) grapher ) ;           \
00466    MCW_register_hint( grapher -> wname , hhh ) ;
00467 
00468 #ifdef USE_OPTMENUS
00469    /** macro to create an option menu on a pullright menu
00470        (this menu must be fixed up later in GRA_fix_optmenus) **/
00471 
00472 #define OPT_MENU_OPTMENU(wmenu,wname,label,cb,hhh)                  \
00473    grapher -> wname =                                               \
00474       new_MCW_optmenu( grapher -> wmenu , label , 0,1,0,0 ,         \
00475                        cb , (XtPointer) grapher , NULL , NULL ) ;   \
00476    MCW_reghint_children( grapher -> wname -> wrowcol , hhh ) ;
00477 
00478 #endif /* USE_OPTMENUS */
00479 
00480    /*** top of menu = a label to click on that does nothing at all ***/
00481 
00482    (void) XtVaCreateManagedWidget(
00483             "dialog" , xmLabelWidgetClass , grapher->opt_menu ,
00484                LABEL_ARG("--- Cancel ---") ,
00485                XmNrecomputeSize , False ,
00486                XmNinitialResourcesPersistent , False ,
00487             NULL ) ;
00488 
00489    MENU_SLINE(opt_menu) ;
00490 
00491    OPT_MENU_PULLRIGHT(opt_scale_menu,opt_scale_cbut     ,"Scale"   ,"Change vertical scale" );
00492    OPT_MENU_PULL_BUT(opt_scale_menu,opt_scale_down_pb  ,"Down [-]","Shrink graph heights"  );
00493    OPT_MENU_PULL_BUT(opt_scale_menu,opt_scale_up_pb    ,"Up   [+]","Increase graph heights");
00494    OPT_MENU_PULL_BUT(opt_scale_menu,opt_scale_choose_pb,"Choose"  ,"Set vertical scale"    );
00495    OPT_MENU_PULL_BUT(opt_scale_menu,opt_scale_auto_pb  ,"Auto [a]","Scale automatically"   );
00496 
00497    OPT_MENU_PULLRIGHT(opt_mat_menu,opt_mat_cbut      ,"Matrix"  , "Change number of graphs"   ) ;
00498    OPT_MENU_PULL_BUT( opt_mat_menu,opt_mat_down_pb   ,"Down [m]", "Reduce number of graphs"   ) ;
00499    OPT_MENU_PULL_BUT( opt_mat_menu,opt_mat_up_pb     ,"Up   [M]", "Increase number of graphs" ) ;
00500 #ifdef USE_OPTMENUS
00501    OPT_MENU_OPTMENU( opt_mat_menu,opt_mat_choose_av , "# " , GRA_mat_choose_CB , "Set number of graphs" ) ;
00502 #else
00503    OPT_MENU_PULL_BUT( opt_mat_menu,opt_mat_choose_pb ,"Choose" , "Set number of graphs" ) ;
00504 #endif
00505 
00506    OPT_MENU_PULLRIGHT(opt_grid_menu,opt_grid_cbut     ,"Grid"    , "Change vertical grid spacing" ) ;
00507    OPT_MENU_PULL_BUT( opt_grid_menu,opt_grid_down_pb  ,"Down [g]", "Reduce vertical grid spacing" ) ;
00508    OPT_MENU_PULL_BUT( opt_grid_menu,opt_grid_up_pb    ,"Up   [G]", "Increase vertical grid spacing" ) ;
00509    OPT_MENU_PULL_BUT( opt_grid_menu,opt_grid_auto_pb  ,"AutoGrid", "Set grid spacing automatically" ) ;
00510    OPT_MENU_PULL_BUT( opt_grid_menu,opt_grid_choose_pb,"Choose"  , "Set vertical grid spacing" ) ;
00511    OPT_MENU_PULL_BUT( opt_grid_menu,opt_pin_choose_pb ,"Index Pin","Fix index range of graph window" ) ;  /* 17 Mar 2004 */
00512    OPT_MENU_PULL_BUT( opt_grid_menu,opt_grid_HorZ_pb  ,"HorZ [h]", "Horizontal line at Zero" ) ; /* 05 Jan 1999 */
00513 
00514    OPT_MENU_PULLRIGHT(opt_slice_menu,opt_slice_cbut      ,"Slice"   , "Change slice"  ) ;
00515    OPT_MENU_PULL_BUT( opt_slice_menu,opt_slice_down_pb   ,"Down [z]", "Decrement slice" ) ;
00516    OPT_MENU_PULL_BUT( opt_slice_menu,opt_slice_up_pb     ,"Up   [Z]", "Increment slice" ) ;
00517 #ifdef USE_OPTMENUS
00518    OPT_MENU_OPTMENU( opt_slice_menu,opt_slice_choose_av , "# " , GRA_slice_choose_CB , "Set slice" ) ;
00519 #else
00520    OPT_MENU_PULL_BUT( opt_slice_menu,opt_slice_choose_pb ,"Choose" , "Set slice" ) ;
00521 #endif
00522 
00523    /***** 16 June 1997: Colors submenu *****/
00524 
00525    { static char * bbox_label[1] = { "Use Thick Lines" } ;
00526      static char * pts_label[2]  = { "Graph Points" , "Points+Lines" } ;
00527      char     toplabel[64] ;
00528      XmString xstr ;
00529 
00530      OPT_MENU_PULLRIGHT(opt_colors_menu,opt_colors_cbut,"Colors, Etc.","Change graph appearance");
00531 
00532      if( strlen(grapher->status->namecode) > 0 ){
00533 
00534         sprintf( toplabel , "--- %s ---" , grapher->status->namecode ) ;
00535         xstr = XmStringCreateLtoR( toplabel , XmFONTLIST_DEFAULT_TAG ) ;
00536 
00537         (void) XtVaCreateManagedWidget(
00538                  "dialog" , xmLabelWidgetClass , grapher->opt_colors_menu ,
00539                     XmNlabelString , xstr ,
00540                     XmNrecomputeSize , False ,
00541                     XmNinitialResourcesPersistent , False ,
00542                  NULL ) ;
00543 
00544         XmStringFree( xstr ) ;
00545 
00546         MENU_DLINE(opt_colors_menu) ;
00547      }
00548 
00549      if( gr_setup_default ){
00550         gr_color_default[0] = INIT_GR_boxes_color  ;
00551         gr_color_default[1] = INIT_GR_backg_color  ;
00552         gr_color_default[2] = INIT_GR_grid_color   ;
00553         gr_color_default[3] = INIT_GR_text_color   ;
00554         gr_color_default[4] = INIT_GR_data_color   ;
00555         gr_color_default[5] = INIT_GR_ideal_color  ;
00556         gr_color_default[6] = INIT_GR_ort_color    ;
00557         gr_color_default[7] = INIT_GR_ignore_color ;
00558         gr_color_default[8] = INIT_GR_dplot_color  ;
00559 
00560         gr_thick_default[0] = INIT_GR_boxes_thick  ;
00561         gr_thick_default[1] = -1  ;
00562         gr_thick_default[2] = INIT_GR_grid_thick   ;
00563         gr_thick_default[3] = -1   ;
00564         gr_thick_default[4] = INIT_GR_data_thick   ;
00565         gr_thick_default[5] = INIT_GR_ideal_thick  ;
00566         gr_thick_default[6] = INIT_GR_ort_thick    ;
00567         gr_thick_default[7] = -1 ;
00568         gr_thick_default[8] = INIT_GR_dplot_thick  ;
00569 
00570         gr_setup_default = 0 ;
00571      }
00572 
00573      for( ii=0 ; ii < NUM_COLOR_ITEMS ; ii++ ){
00574 
00575         grapher->color_index[ii] = GRA_COLOR(gr_color_default[ii]) ;
00576         grapher->thick_index[ii] = gr_thick_default[ii] ;
00577         grapher->points_index[ii]= gr_points_default[ii] ;  /* 09 Jan 1998 */
00578 
00579         grapher->opt_color_av[ii] =
00580            new_MCW_colormenu( grapher->opt_colors_menu ,
00581                               gr_color_label[ii] ,
00582                               grapher->dc ,
00583                               gr_color_start[ii] , grapher->dc->ovc->ncol_ov-1,
00584                               grapher->color_index[ii] ,
00585                               GRA_color_CB , (XtPointer) grapher ) ;
00586         MCW_reghint_children( grapher->opt_color_av[ii]->wrowcol ,
00587                               gr_color_hint[ii] ) ;           /* 28 Jan 2004 */
00588 
00589         if( grapher->thick_index[ii] >= 0 ){
00590            grapher->opt_thick_bbox[ii] =
00591               new_MCW_bbox( grapher->opt_colors_menu ,
00592                             1 , bbox_label , MCW_BB_check , MCW_BB_noframe ,
00593                             GRA_thick_CB , (XtPointer) grapher ) ;
00594            MCW_reghint_children( grapher->opt_thick_bbox[ii]->wrowcol ,
00595                                  "Draw these lines thicker" ) ;
00596 
00597            if( grapher->thick_index[ii] )
00598               MCW_set_bbox( grapher->opt_thick_bbox[ii] , 1 ) ;
00599         } else {
00600            grapher->opt_thick_bbox[ii] = NULL ;
00601         }
00602 
00603         /* 09 Jan 1998: add option to draw only points in graphs */
00604         /* 01 Aug 1998: allow points+lines to be drawn as well   */
00605 
00606         if( grapher->points_index[ii] >= 0 ){
00607            grapher->opt_points_bbox[ii] =
00608               new_MCW_bbox( grapher->opt_colors_menu ,
00609                             2 , pts_label , MCW_BB_radio_zero , MCW_BB_noframe ,
00610                             GRA_thick_CB , (XtPointer) grapher ) ;
00611            MCW_reghint_children(  grapher->opt_points_bbox[ii]->wrowcol ,
00612                                   "Plot graph as Points only, or as Points and Lines" ) ;
00613 
00614            if( grapher->points_index[ii] )
00615               MCW_set_bbox( grapher->opt_points_bbox[ii] ,
00616                             1 << (grapher->points_index[ii]-1) ) ;
00617         } else {
00618            grapher->opt_points_bbox[ii] = NULL ;
00619         }
00620 
00621         MENU_DLINE( opt_colors_menu ) ;
00622      }
00623 
00624      /* 12 Jan 1998: control gap between graphs */
00625 
00626      grapher->opt_ggap_av =
00627         new_MCW_optmenu( grapher->opt_colors_menu , "Graph Gap" ,
00628                          0 , 19 , INIT_GR_ggap , 0 ,
00629                          GRA_ggap_CB , (XtPointer) grapher , NULL , NULL ) ;
00630      AVOPT_columnize( grapher->opt_ggap_av , 4 ) ;
00631      MCW_reghint_children( grapher->opt_ggap_av->wrowcol ,
00632                            "Space sub-graphs apart" ) ;
00633 
00634      /* 06 Oct 2004: control 'thick' line size */
00635 
00636      grapher->opt_gthick_av =
00637         new_MCW_optmenu( grapher->opt_colors_menu , "'Thick'  " ,
00638                          2 , 10 , INIT_GR_gthick , 0 ,
00639                          GRA_gthick_CB , (XtPointer) grapher , NULL , NULL ) ;
00640      AVOPT_columnize( grapher->opt_gthick_av , 2 ) ;
00641      MCW_reghint_children( grapher->opt_gthick_av->wrowcol ,
00642                            "Width of 'Thick' lines" ) ;
00643 
00644    }
00645    /***** end colors submenu creation *****/
00646 
00647 #if 0
00648    OPT_MENU_BUT(opt_color_up_pb     ,"Grid Color   [r]" , "Rotate grid color" ) ;
00649 #endif
00650 
00651    /*-- 07 Aug 2001: Baseline sub-menu creation --*/
00652 
00653    { char * bbox_label[3] = { "Individual [b]" ,
00654                               "Common     [b]" ,
00655                               "Global     [b]" } ;
00656      XmString xstr ;
00657      char gbuf[32] ;  /* 08 Mar 2002 */
00658 
00659      /* 08 Mar 2002: set baseline parameters from environment variables */
00660 
00661      cpt = getenv( "AFNI_GRAPH_GLOBALBASE" ) ;
00662      if( cpt != NULL )
00663        grapher->global_base = strtod( cpt , NULL ) ;
00664      else
00665        grapher->global_base = 0.0 ;
00666 
00667      cpt = getenv( "AFNI_GRAPH_BASELINE" ) ;
00668      if( cpt != NULL ){
00669        switch( *cpt ){
00670          default:  grapher->common_base = BASELINE_INDIVIDUAL ; break ;
00671 
00672          case 'C':
00673          case 'c': grapher->common_base = BASELINE_COMMON     ; break ;
00674 
00675          case 'G':
00676          case 'g': grapher->common_base = BASELINE_GLOBAL     ; break ;
00677        }
00678      } else {
00679        grapher->common_base = BASELINE_INDIVIDUAL ;
00680      }
00681 
00682      /* now create menu items */
00683 
00684      OPT_MENU_PULLRIGHT(opt_baseline_menu,opt_baseline_cbut,
00685                         "Baseline","Change sub-graphs baseline");
00686 
00687      grapher->opt_baseline_bbox =
00688          new_MCW_bbox( grapher->opt_baseline_menu ,
00689                        3 , bbox_label , MCW_BB_radio_one , MCW_BB_noframe ,
00690                        GRA_baseline_CB , (XtPointer)grapher ) ;
00691      MCW_set_bbox( grapher->opt_baseline_bbox , grapher->common_base ) ;
00692 
00693      MCW_reghint_children( grapher->opt_baseline_bbox->wrowcol ,
00694                           "Graph baseline methods" ) ;
00695 
00696      MENU_SLINE( opt_baseline_menu ) ;
00697 
00698      OPT_MENU_PULL_BUT( opt_baseline_menu,opt_baseline_setglobal_pb ,
00699                         "Set Global" , "Global baseline level" ) ;
00700 
00701      MENU_SLINE( opt_baseline_menu ) ;
00702 
00703      strcpy(gbuf,"Global:") ;
00704      AV_fval_to_char(grapher->global_base,gbuf+7) ;
00705      xstr = XmStringCreateLtoR(gbuf,XmFONTLIST_DEFAULT_TAG) ;
00706      grapher->opt_baseline_global_label =
00707         XtVaCreateManagedWidget(
00708                  "dialog" , xmLabelWidgetClass , grapher->opt_baseline_menu ,
00709                     XmNlabelString , xstr ,
00710                     XmNrecomputeSize , False ,
00711                     XmNtraversalOn , False ,
00712                     XmNinitialResourcesPersistent , False ,
00713                  NULL ) ;
00714      XmStringFree( xstr ) ;
00715    }
00716 
00717    /* 22 Sep 2000: Text toggle */
00718 
00719    { static char * bbox_label[1] = { "Show Text? [t]" } ;
00720 
00721     grapher->opt_textgraph_bbox =
00722          new_MCW_bbox( grapher->opt_menu ,
00723                        1 , bbox_label , MCW_BB_check , MCW_BB_noframe ,
00724                        GRA_textgraph_CB , (XtPointer)grapher ) ;
00725 
00726     MCW_reghint_children( grapher->opt_textgraph_bbox->wrowcol ,
00727                           "Display text, not graphs" ) ;
00728 
00729     grapher->textgraph = 0 ;
00730    }
00731 
00732    MENU_SLINE(opt_menu) ;
00733    OPT_MENU_BUT(opt_save_pb         ,"Save PNM     [S]" , "Save graph as an image" ) ;
00734 
00735    MENU_SLINE(opt_menu) ;
00736    OPT_MENU_BUT(opt_write_center_pb ,"Write Center [w]" , "Write central graph as a *.1D file" ) ;
00737    OPT_MENU_BUT(opt_write_suffix_pb ,"Set 'w' Suffix"   , "Set suffix for graph writing" ) ;
00738 
00739    /*-------------------------------------------*/
00740    /*--- Arrowval to list 0D transformations ---*/
00741    /*-------------------------------------------*/
00742 
00743 #define COLSIZE AV_colsize()
00744 
00745    if( grapher->status->transforms0D != NULL &&
00746        grapher->status->transforms0D->num > 0  ){  /* 22 Oct 1996 */
00747 
00748       MENU_DLINE(opt_menu) ;
00749 
00750       grapher->transform0D_av =
00751          new_MCW_optmenu( grapher->opt_menu ,
00752                           "Tran 0D" ,
00753                           0 , grapher->status->transforms0D->num , 0 , 0 ,
00754                           GRA_transform_CB , (XtPointer) grapher ,
00755                           GRA_transform_label , (XtPointer) grapher->status->transforms0D ) ;
00756 
00757       if( grapher->status->transforms0D->num >= COLSIZE )
00758          AVOPT_columnize( grapher->transform0D_av ,
00759                           (grapher->status->transforms0D->num/COLSIZE)+1 ) ;
00760 
00761       MCW_reghint_children( grapher->transform0D_av->wrowcol ,
00762                             "Pointwise data transformations" ) ;
00763 
00764    } else {
00765       grapher->transform0D_av = NULL ;
00766    }
00767    grapher->transform0D_func  = NULL ;  /* no function to start with */
00768    grapher->transform0D_index = 0 ;
00769 
00770    /*-------------------------------------------*/
00771    /*--- Arrowval to list 1D transformations ---*/
00772    /*-------------------------------------------*/
00773 
00774    if( grapher->status->transforms1D != NULL &&
00775        grapher->status->transforms1D->num > 0  ){  /* 03 Nov 1996 */
00776 
00777       MENU_DLINE(opt_menu) ;
00778 
00779       grapher->transform1D_av =
00780          new_MCW_optmenu( grapher->opt_menu ,
00781                           "Tran 1D" ,
00782                           0 , grapher->status->transforms1D->num , 0 , 0 ,
00783                           GRA_transform_CB , (XtPointer) grapher ,
00784                           GRA_transform_label , (XtPointer) grapher->status->transforms1D ) ;
00785 
00786       if( grapher->status->transforms1D->num >= COLSIZE )
00787          AVOPT_columnize( grapher->transform1D_av ,
00788                           (grapher->status->transforms1D->num/COLSIZE)+1 ) ;
00789 
00790       MCW_reghint_children( grapher->transform1D_av->wrowcol ,
00791                             "Time series transformations" ) ;
00792 
00793       /* 08 Nov 1996: dplot = double plot */
00794       /* 07 Aug 2001: rewrite of dplot to make it have 3 states, not two */
00795 
00796       { char * bbox_label[3] = { "DPlot Off" ,
00797                                  "Overlay"   ,
00798                                  "Plus/Minus" } ;
00799 
00800         OPT_MENU_PULLRIGHT(opt_dplot_menu,opt_dplot_cbut,
00801                            "Double Plot","Graph Dataset and Tran 1D?");
00802 
00803         grapher->opt_dplot_bbox =
00804             new_MCW_bbox( grapher->opt_dplot_menu ,
00805                           3 , bbox_label , MCW_BB_radio_one , MCW_BB_noframe ,
00806                           GRA_dplot_change_CB , (XtPointer)grapher ) ;
00807         MCW_set_bbox( grapher->opt_dplot_bbox , DPLOT_OFF ) ;
00808 
00809         MCW_reghint_children( grapher->opt_dplot_bbox->wrowcol ,
00810                               "How to show 2 curves" ) ;
00811       }
00812 
00813    } else {
00814       grapher->transform1D_av = NULL ;
00815       grapher->opt_dplot_bbox = NULL ;
00816    }
00817    grapher->transform1D_func  = NULL ;  /* no function to start with */
00818    grapher->transform1D_index = 0 ;
00819 
00820    /*------ menu to control the x-axis drawing (09 Jan 1998) ------*/
00821 
00822    MENU_DLINE(opt_menu) ;
00823 
00824    OPT_MENU_PULLRIGHT( opt_xaxis_menu , opt_xaxis_cbut    , "X-axis" , "Alter x-axis" ) ;
00825    OPT_MENU_PULL_BUT(  opt_xaxis_menu , opt_xaxis_pick_pb ,
00826                        "Pick x-axis" , "Set timeseries for x-axis" ) ;
00827    OPT_MENU_PULL_BUT(  opt_xaxis_menu , opt_xaxis_center_pb ,
00828                        "X-axis=center" , "X-axis = center voxel" ) ;
00829    OPT_MENU_PULL_BUT(  opt_xaxis_menu , opt_xaxis_clear_pb ,
00830                        "Clear x-axis" , "Clear x-axis timeseries" ) ;
00831 
00832    /*------ last button on this menu ------*/
00833 
00834    MENU_DLINE(opt_menu) ;
00835    OPT_MENU_BUT(opt_quit_pb         ,"Done         [q]" , "Close window" ) ;
00836    MCW_set_widget_bg( grapher->opt_quit_pb ,
00837                       MCW_hotcolor(grapher->opt_quit_pb) , 0 ) ;
00838 
00839    /** done with option buttons -- manage the manager widget **/
00840 
00841    XtManageChild( grapher->option_rowcol ) ;
00842 
00843 #if 0
00844    allow_MCW_optmenu_popup( 1 ) ;  /* 12 Dec 2001 */
00845 #endif
00846 
00847    /** initialize the internal parameters **/
00848 
00849 if(PRINT_TRACING)
00850 { char str[128] ;
00851   sprintf(str,"STATUS: num_series=%d nx=%d ny=%d",
00852           grapher->status->num_series,grapher->status->nx,grapher->status->ny ) ;
00853   STATUS(str) ; }
00854 
00855    grapher->fscale      =  0 ;
00856    grapher->mat         =  0 ;
00857    grapher->xpoint      = -1 ;
00858    grapher->ypoint      = -1 ;
00859    grapher->zpoint      = -1 ;
00860 #if 0
00861    grapher->grid_color  = GRID_COLOR(grapher) ;
00862 #endif
00863    grapher->grid_index  = -1 ;
00864    grapher->grid_fixed  =  0 ;  /* 02 Apr 2004 */
00865    grapher->key_Nlock   =  0 ;
00866    grapher->xFD         =  0 ;
00867    grapher->yFD         =  0 ;
00868    grapher->time_index  =  0 ;
00869    grapher->pin_top     =  0 ;  /* 27 Apr 1997 */
00870    grapher->pin_bot     =  0 ;  /* 17 Mar 2004 */
00871    grapher->ggap        =  INIT_GR_ggap ;    /* 12 Jan 1998 + 27 May 1999 */
00872    grapher->gthick      =  INIT_GR_gthick ;  /* 06 Oct 2004 */
00873 
00874    grapher->cen_line    =  NULL ;  /* coords of central graph plot */
00875    grapher->ncen_line   =  0 ;
00876    grapher->nncen       =  0 ;
00877    grapher->cen_tsim    =  NULL ;
00878    grapher->xax_tsim    =  NULL ;  /* 09 Jan 1998 */
00879    grapher->ave_tsim    =  NULL ;  /* 27 Jan 2004 */
00880 
00881    grapher->xx_text_1    =
00882     grapher->xx_text_2   =
00883      grapher->xx_text_2p = grapher->xx_text_3 = 1 ;
00884 
00885    grapher->ref_ts = NULL ;
00886    grapher->ort_ts = NULL ;
00887 
00888    grapher->ref_ts_plotall = grapher->ort_ts_plotall = 1 ;
00889 
00890    init_const( grapher ) ;
00891 
00892    grapher->setshift_inc_av   = NULL ;
00893    grapher->setshift_left_av  = NULL ;
00894    grapher->setshift_right_av = NULL ;
00895    grapher->dialog            = NULL ;
00896    grapher->setshift_inc      = 0.5 ;
00897    grapher->setshift_left     = 0 ;
00898    grapher->setshift_right    = 0 ;
00899 
00900    /** for the present, don't realize widgets (make the user do it later) **/
00901 
00902    XtManageChild( form_tmp ) ;  /* 29 Sep 2000 */
00903 
00904 #if 0
00905 STATUS("realizing widgets") ;
00906    XtRealizeWidget( grapher->fdw_graph ) ;
00907 
00908    WAIT_for_window(grapher->form_tmp) ;
00909 
00910    XtVaSetValues( grapher->option_rowcol ,
00911                     XmNleftAttachment   , XmATTACH_NONE ,
00912                     XmNtopAttachment    , XmATTACH_NONE ,
00913                     XmNrightAttachment  , XmATTACH_FORM ,
00914                     XmNbottomAttachment , XmATTACH_FORM ,
00915                   NULL ) ;
00916    XMapRaised( XtDisplay(grapher->option_rowcol) ,
00917                XtWindow(grapher->option_rowcol)   ) ;
00918 
00919    NORMAL_cursorize( grapher->fdw_graph ) ;
00920 
00921    grapher->valid = 2 ;
00922 #ifdef USE_OPTMENUS
00923    GRA_fix_optmenus( grapher ) ;
00924 #endif
00925 #endif
00926 
00927    grapher->fd_pxWind = (Pixmap) 0 ;
00928 
00929    /*** add callback for the WM_DELETE_WINDOW protocol ***/
00930 
00931    XmAddWMProtocolCallback(
00932         grapher->fdw_graph , XmInternAtom(dc->display,"WM_DELETE_WINDOW",False) ,
00933         end_fd_graph_CB , (XtPointer) grapher ) ;
00934 
00935    RETURN(grapher) ;
00936 }

void overlay_txt MCW_grapher   grapher,
int    x,
int    y,
char *    str
 

Definition at line 1505 of file afni_graph.c.

References MCW_grapher::dc, MCW_DC::display, MCW_grapher::draw_fd, MCW_grapher::fHIGH, and MCW_DC::myGC.

Referenced by GRA_redraw_overlay().

01506 {
01507    XDrawString( grapher->dc->display, XtWindow(grapher->draw_fd) ,
01508                 grapher->dc->myGC , x , grapher->fHIGH-y ,
01509                 str , strlen(str) ) ;
01510    return ;
01511 }

void plot_fdX MCW_grapher   grapher,
int    x,
int    y,
int    mod
 

Definition at line 1076 of file afni_graph.c.

References MCW_grapher::dc, MCW_DC::display, MCW_grapher::fd_pxWind, MCW_grapher::fHIGH, mod, MCW_DC::myGC, MCW_grapher::xFD, and MCW_grapher::yFD.

Referenced by draw_grids().

01077 {
01078    int iy = grapher->fHIGH - y;
01079 
01080    if( mod > 0 )
01081      XDrawLine( grapher->dc->display ,
01082                 grapher->fd_pxWind , grapher->dc->myGC ,
01083                 grapher->xFD , grapher->yFD , x , iy ) ;
01084 
01085    grapher->xFD = x ; grapher->yFD = iy ;
01086    return ;
01087 }

void plot_graphs MCW_grapher   grapher,
int    code
 

Definition at line 1669 of file afni_graph.c.

References a_line, ADDTO_IMARR, AFNI_CALL_0D_function, AFNI_CALL_1D_funcmrim, AFNI_CALL_1D_funcmrimstr, AFNI_CALL_1D_funcstr, AFNI_CALL_1D_function, AFNI_store_dset_index(), MCW_grapher::ave_tsim, BASELINE_COMMON, BASELINE_GLOBAL, BASELINE_INDIVIDUAL, CALL_getser, MCW_grapher::cen_line, MCW_grapher::cen_tsim, MCW_grapher::common_base, DATA_COLOR, DATA_IS_THICK, DATA_LINES, DATA_POINTS, DATA_THICK, MCW_grapher::dc, DC_dashed_line, DC_fg_color(), DC_linewidth(), DC_solid_line, DESTROY_IMARR, MCW_DC::display, MCW_grapher::dont_redraw, DPLOT_COLOR, DPLOT_IS_THICK, DPLOT_LINES, DPLOT_OFF, DPLOT_OVERLAY, DPLOT_PLUSMINUS, DPLOT_POINTS, DPLOT_THICK, MRI_IMAGE::dx, ENTRY, MCW_grapher::fd_pxWind, MCW_grapher::fHIGH, FIM_menu::fim_editref_winaver_bbox, MCW_grapher::fmenu, MCW_grapher::fscale, MCW_grapher::getaux, MCW_grapher::getser, MCW_grapher::global_base, GRA_CLEAR_tuser, GRA_fixup_xaxis(), GRA_small_circle(), graCR_getseries, GRID_COLOR, GRID_THICK, MCW_grapher::gx, MCW_grapher::gy, MCW_grapher::HorZ, i, IDEAL_COLOR, IDEAL_THICK, IGNORE_COLOR, THD_ivec3::ijk, IMARR_COUNT, IMARR_SUBIMAGE, MCW_grapher::init_ignore, INIT_IMARR, MRI_IMAGE::kind, MCW_grapher::mat, MAX, MCW_val_bbox(), MIN, MRI_FLOAT_PTR, mri_free(), mri_new(), mri_to_float(), MCW_DC::myGC, myXtFree, MRI_IMAGE::name, NBOT, MCW_grapher::ncen_line, NEEDS_DSET_INDEX, MCW_grapher::never_drawn, MCW_grapher::nncen, NTOP, MRI_IMARR::num, MCW_grapher_status::num_series, MCW_grapher_status::nx, MRI_IMAGE::nx, FD_brick::nxyz, MCW_grapher_status::ny, MRI_IMAGE::ny, MCW_grapher::opt_dplot_bbox, ORT_COLOR, ORT_THICK, MCW_grapher::ort_ts, PLOTCODE_AUTOSCALE, MCW_grapher::pmax, MCW_grapher::pmin, PROCESS_MRI_IMAGE, qmedmad_float(), MCW_grapher::ref_ts, MCW_grapher::ref_ts_plotall, RETURNS_STRING, MCW_grapher::sbot, MCW_grapher::status, STATUS, MCW_grapher::stop, MCW_grapher::tbot, TEMP_IVEC3, text_graphs(), MCW_grapher::textgraph, THD_fdind_to_3dind(), MCW_grapher::tmad, MCW_grapher::tmean, MCW_grapher::tmed, TPTS, MCW_grapher::transform0D_func, MCW_grapher::transform1D_flags, MCW_grapher::transform1D_func, MCW_grapher::tstd, tt, TTOP, MCW_grapher::ttop, MCW_grapher::tuser, MCW_grapher::xax_tsim, MCW_grapher::xc, MRI_IMAGE::xo, MCW_grapher::xorigin, MCW_grapher::xpoint, XtMalloc, MCW_grapher::yc, MCW_grapher::yorigin, MCW_grapher::ypoint, and MCW_grapher::zpoint.

Referenced by redraw_graph().

01670 {
01671    MRI_IMAGE *tsim ;
01672    MRI_IMARR *tsimar ;
01673    float     *tsar ;
01674    float       tsbot=0.0 , ftemp , tstop ;
01675    int i, m, index, ix, iy, xtemp,ytemp,ztemp , xoff,yoff , its,ibot,itop;
01676    int ptop,pbot,pnum,qnum , tbot,ttop,tnum , ntmax ;  /* 17 Mar 2004 */
01677 
01678    static int      *plot = NULL ;  /* arrays to hold plotting coordinates */
01679    static XPoint *a_line = NULL ;
01680    static int      nplot = 0 ;
01681 
01682    MRI_IMARR *dplot_imar = NULL ;  /* 08 Nov 1996 */
01683    int        dplot = 0 ;
01684 
01685    MRI_IMARR *eximar ;
01686    int        iex ;
01687 
01688    float nd_bot , nd_top , nd_dif ;                        /* 03 Feb 1998 */
01689    int   set_scale = ( (code & PLOTCODE_AUTOSCALE) != 0 ||
01690                        grapher->never_drawn ) ;
01691 
01692    MRI_IMAGE *dsim ; /* 07 Aug 2001: for double plot */
01693    float     *dsar ;
01694 
01695 #define OVI_MAX 19
01696    int tt, use_ovi, ovi[OVI_MAX] ;  /* 29 Mar 2002: for multi-plots */
01697 
01698 ENTRY("plot_graphs") ;
01699    if( grapher->dont_redraw ) EXRETURN ;  /* 27 Jan 2004 */
01700 
01701    /* check if we draw text instead of curves */
01702 
01703    if( grapher->status->num_series < 1 ){
01704      EXRETURN ;
01705    } else if( grapher->status->num_series == 1 ||
01706               grapher->textgraph               || TPTS(grapher) < 2 ){
01707      text_graphs( grapher ) ;
01708      EXRETURN ;
01709    }
01710 
01711    GRA_fixup_xaxis( grapher ) ;   /* 09 Jan 1998 */
01712 
01713    /* set colors and line widths */
01714 
01715    DC_fg_color ( grapher->dc , DATA_COLOR(grapher) ) ;
01716    DC_linewidth( grapher->dc , DATA_THICK(grapher) ) ;
01717 
01718    /* 17 Mar 2004: we will plot from pbot..ptop-1, with data from tbot..ttop-1 */
01719 
01720    ptop = NTOP(grapher) ; pbot = NBOT(grapher) ;
01721    if( pbot >= ptop ){
01722      pbot = 0 ; ptop = grapher->status->num_series ;
01723    }
01724    ttop = TTOP(grapher) ; ttop = MIN(ttop,ptop) ; tbot = pbot ;
01725    if( ttop <= tbot || ttop > grapher->status->num_series ){
01726      ttop = MIN(ptop,grapher->status->num_series) ;
01727    }
01728    pnum = ptop-pbot ; tnum = ttop-tbot ;
01729    if( pnum <= 1 || tnum <= 1 ) EXRETURN ;   /* should never happen? */
01730 
01731    /* set aside space for plotting, etc. */
01732 
01733 #define NPLOT_INIT 9999  /* 29 Apr 1997 */
01734    itop = MAX( NPLOT_INIT , grapher->status->num_series ) ;
01735    if( nplot == 0 || nplot < itop ){
01736      myXtFree(a_line) ; myXtFree(plot) ;
01737      nplot  = itop ;
01738      plot   = (int *)    XtMalloc( sizeof(int)    * itop ) ;
01739      a_line = (XPoint *) XtMalloc( sizeof(XPoint) * itop ) ;
01740    }
01741    if( grapher->ncen_line < itop ){
01742      myXtFree(grapher->cen_line) ;
01743      grapher->cen_line  = (XPoint *) XtMalloc( sizeof(XPoint) * itop ) ;
01744      grapher->ncen_line = itop ;
01745    }
01746 
01747    /* set the bottom point at which to compute time series statistics */
01748 
01749    ibot = grapher->init_ignore ;
01750    if( ibot >= ttop-1 ) ibot = 0 ;
01751    ibot = MAX(ibot,tbot) ;                     /* 17 Mar 2004 */
01752 
01753    /** loop over matrix of graphs and get all the time series for later **/
01754 
01755    INIT_IMARR(tsimar) ;
01756 
01757    /** 08 Nov 1996: initialize second array for double plotting **/
01758    /** 07 Aug 2001: modify to allow for multiple dplot cases    **/
01759 
01760    if( grapher->transform1D_func != NULL &&
01761        MCW_val_bbox(grapher->opt_dplot_bbox) != DPLOT_OFF ){
01762 
01763      INIT_IMARR(dplot_imar) ;
01764      dplot = MCW_val_bbox(grapher->opt_dplot_bbox) ; /* 07 Aug 2001 */
01765    }
01766 
01767    GRA_CLEAR_tuser( grapher ) ;  /* 22 Apr 1997 */
01768 
01769    /* 3D index offset to correct slice number */
01770    ztemp = grapher->zpoint * grapher->status->ny * grapher->status->nx ;
01771 
01772    ntmax = 0 ; /* will be length of longest time series found below */
01773 
01774    for( ix=0 ; ix < grapher->mat ; ix++ ){
01775 
01776       /** compute the 3D index of the desired time series **/
01777 
01778       xtemp  = grapher->xpoint + ix - grapher->xc ;
01779            if( xtemp <  0                   ) xtemp += grapher->status->nx ;  /* wrap */
01780       else if( xtemp >= grapher->status->nx ) xtemp -= grapher->status->nx ;
01781 
01782       for( iy=0 ; iy < grapher->mat ; iy++ ){
01783          ytemp = grapher->ypoint - iy + grapher->yc ;
01784               if( ytemp <  0                   ) ytemp += grapher->status->ny;  /* wrap */
01785          else if( ytemp >= grapher->status->ny ) ytemp -= grapher->status->ny;
01786 
01787          index = ztemp + ytemp * grapher->status->nx + xtemp ;  /* 3D index in dataset */
01788 
01789          /** get the desired time series, using the provided routine **/
01790 
01791 #if 0
01792          tsim  = (MRI_IMAGE *) grapher->getser( index , graCR_getseries ,
01793                                                         grapher->getaux ) ;
01794 #else
01795          CALL_getser( grapher , index,graCR_getseries , MRI_IMAGE *,tsim ) ;
01796 #endif
01797 
01798          /* 08 Nov 1996: allow for return of NULL timeseries */
01799 
01800          if( tsim == NULL ){
01801            ADDTO_IMARR(tsimar,NULL) ;
01802            if( dplot ) ADDTO_IMARR(dplot_imar,NULL) ;
01803            continue ;  /* skip to next iy */
01804          }
01805 
01806          ntmax = MAX( ntmax , tsim->nx ) ;
01807 
01808          /** convert time series to floats, if need be **/
01809 
01810          if( tsim->kind != MRI_float ){
01811            MRI_IMAGE *qim = mri_to_float(tsim) ;
01812            mri_free(tsim) ; tsim = qim ;
01813          }
01814 
01815          /* 22 Oct 1996: transform each point, if ordered */
01816 
01817          if( grapher->transform0D_func != NULL ){
01818 STATUS("about to perform 0D transformation") ;
01819 #if 0
01820             grapher->transform0D_func( tsim->nx , MRI_FLOAT_PTR(tsim) ) ;
01821 #else
01822             AFNI_CALL_0D_function( grapher->transform0D_func ,
01823                                    tsim->nx , MRI_FLOAT_PTR(tsim) ) ;
01824 #endif
01825          }
01826 
01827          /* 03 Nov 1996: 1D transformations, too */
01828          /* 08 Nov 1996: double plotting, too */
01829 
01830          if( grapher->transform1D_func != NULL ){
01831             MRI_IMAGE * qim ;                /* image to be transformed */
01832 
01833             if( dplot ){                      /* copy and save original */
01834               qim = mri_to_float(tsim) ;       /* if double plot is on */
01835               ADDTO_IMARR(dplot_imar,qim) ;
01836             }
01837             else
01838               qim = tsim ;                 /* transform original image */
01839 
01840 STATUS("about to perform 1D transformation") ;
01841 
01842             if( grapher->transform1D_flags & NEEDS_DSET_INDEX ){ /* 18 May 2000 */
01843 #ifdef BE_AFNI_AWARE
01844                FD_brick *br = (FD_brick *) grapher->getaux ;
01845                THD_ivec3 id ;
01846                id = THD_fdind_to_3dind( br ,
01847                                         TEMP_IVEC3(xtemp,ytemp,grapher->zpoint) );
01848                AFNI_store_dset_index(
01849                              id.ijk[0]
01850                             +id.ijk[1] * br->nxyz.ijk[0]
01851                             +id.ijk[2] * br->nxyz.ijk[0] * br->nxyz.ijk[1] , 0 ) ;
01852 #else
01853                AFNI_store_dset_index(-1,0) ;
01854 #endif
01855             }
01856 
01857             if( ! (grapher->transform1D_flags & PROCESS_MRI_IMAGE) ){  /* older code:   */
01858                                                                        /* process image */
01859               if( ! (grapher->transform1D_flags & RETURNS_STRING) ){   /* contents only */
01860 #if 0
01861                  grapher->transform1D_func( qim->nx , qim->xo , qim->dx ,
01862                                             MRI_FLOAT_PTR(qim) ) ;
01863 #else
01864                  AFNI_CALL_1D_function( grapher->transform1D_func ,
01865                                         qim->nx , qim->xo , qim->dx ,
01866                                         MRI_FLOAT_PTR(qim) ) ;
01867 #endif
01868               } else {
01869                  char * quser = NULL ;
01870 #if 0
01871                  grapher->transform1D_func( qim->nx , qim->xo , qim->dx ,
01872                                             MRI_FLOAT_PTR(qim) , &quser ) ;
01873 #else
01874                  AFNI_CALL_1D_funcstr( grapher->transform1D_func ,
01875                                        qim->nx , qim->xo , qim->dx ,
01876                                        MRI_FLOAT_PTR(qim) , quser ) ;
01877 #endif
01878                  if( quser != NULL )
01879                    grapher->tuser[ix][iy] = XtNewString(quser) ;
01880               }
01881             } else {                           /* 28 Mar 2002: process MRI_IMAGE struct */
01882                                                                             /* in place */
01883               if( ! (grapher->transform1D_flags & RETURNS_STRING) ){
01884 #if 0
01885                  grapher->transform1D_func( qim ) ;
01886 #else
01887                  AFNI_CALL_1D_funcmrim( grapher->transform1D_func , qim ) ;
01888 #endif
01889               } else {
01890                  char *quser = NULL ;
01891 #if 0
01892                  grapher->transform1D_func( qim , &quser ) ;
01893 #else
01894                  AFNI_CALL_1D_funcmrimstr( grapher->transform1D_func , qim,quser ) ;
01895 #endif
01896                  if( quser != NULL )
01897                    grapher->tuser[ix][iy] = XtNewString(quser) ;
01898               }
01899             }
01900 
01901             /* At this point, qim is transformed;
01902                if dplot is on, then it is saved in dplot_imar;
01903                if dplot is off, then qim == tsim, and it will be saved in tsimar, below */
01904 
01905          } /* end of transform1D */
01906 
01907          /* put this (possibly transformed) image on the list of those to plot */
01908 
01909          ADDTO_IMARR(tsimar,tsim) ;
01910       }
01911    }
01912 
01913    /** find the average time series [27 Jan 2004] **/
01914 
01915    if( ntmax > 1 && IMARR_COUNT(tsimar) > 0 ){
01916      float *avar , fac ; int nax ;
01917 STATUS("about to make average time series") ;
01918      if( grapher->ave_tsim != NULL ) mri_free(grapher->ave_tsim) ;
01919      grapher->ave_tsim = mri_new( ntmax , 1 , MRI_float ) ;
01920      avar = MRI_FLOAT_PTR(grapher->ave_tsim) ;  /* is full of 0's already */
01921      for( ix=0 ; ix < IMARR_COUNT(tsimar) ; ix++ ){
01922        tsim = IMARR_SUBIMAGE(tsimar,ix) ; if( tsim == NULL ) continue ;
01923        tsar = MRI_FLOAT_PTR(tsim)       ; if( tsar == NULL ) continue ;
01924        nax  = MIN( ntmax , tsim->nx ) ;
01925        for( i=0 ; i < nax ; i++ ) avar[i] += tsar[i] ;
01926      }
01927      fac = 1.0 / IMARR_COUNT(tsimar) ;
01928      for( i=0 ; i < grapher->ave_tsim->nx ; i++ ) avar[i] *= fac ;
01929 
01930      if( MCW_val_bbox(grapher->fmenu->fim_editref_winaver_bbox) ){
01931        if( grapher->ref_ts == NULL ) INIT_IMARR( grapher->ref_ts ) ;
01932        if( IMARR_COUNT(grapher->ref_ts) == 0 ){
01933          ADDTO_IMARR( grapher->ref_ts , grapher->ave_tsim ) ;     /* create first one */
01934        } else {
01935          IMARR_SUBIMAGE(grapher->ref_ts,0) = grapher->ave_tsim ;  /* replace first one */
01936        }
01937      }
01938    } else if( grapher->ave_tsim != NULL ){
01939      mri_free(grapher->ave_tsim) ; grapher->ave_tsim = NULL ;
01940    }
01941 
01942    /** find some statistics of each time series **/
01943 
01944 STATUS("finding statistics of time series") ;
01945 
01946    /* stuff for setting vertical scale */
01947 
01948    if( set_scale ){
01949      nd_bot = WAY_BIG ; nd_top = nd_dif = - WAY_BIG ;  /* 03 Feb 1998 */
01950    }
01951 
01952    for( ix=0,its=0 ; ix < grapher->mat ; ix++ ){
01953       for( iy=0 ; iy < grapher->mat ; iy++,its++ ){
01954          float qbot,qtop ;
01955          double qsum , qsumq ;
01956 
01957          tsim = IMARR_SUBIMAGE(tsimar,its) ;
01958          if( tsim == NULL || tsim->nx < 2 ){
01959            grapher->tmean[ix][iy] = grapher->tbot[ix][iy] =
01960              grapher->ttop[ix][iy] = grapher->tstd[ix][iy] = 0.0 ;
01961            grapher->tmed[ix][iy] = grapher->tmad[ix][iy] = 0.0 ;  /* 08 Mar 2001 */
01962            grapher->sbot[ix][iy] = grapher->stop[ix][iy] = 0 ;    /* 19 Mar 2004 */
01963            continue ;
01964          }
01965 
01966          tsar = MRI_FLOAT_PTR(tsim) ;     /* stats from ibot..itop-1 */
01967          itop = MIN( ttop , tsim->nx ) ;  /* ibot was set earlier    */
01968 
01969          if( itop-ibot < 2 ){                       /* too short to deal with */
01970            grapher->tmean[ix][iy] = grapher->tbot[ix][iy] =
01971              grapher->ttop[ix][iy] = grapher->tstd[ix][iy] = 0.0 ;
01972            grapher->tmed[ix][iy] = grapher->tmad[ix][iy] = 0.0 ;  /* 08 Mar 2001 */
01973            continue ;  /* to next iy */
01974          }
01975 
01976          qbot = qtop  = tsar[ibot] ;
01977          qsum = qsumq = 0.0 ;
01978          for( i=ibot ; i < itop ; i++ ){      /* compute stats over visible data */
01979            qbot   = MIN( qbot , tsar[i] ) ;
01980            qtop   = MAX( qtop , tsar[i] ) ;
01981            qsum  += tsar[i] ;
01982            qsumq += tsar[i] * tsar[i] ;
01983          }
01984          grapher->tbot[ix][iy] = qbot ; grapher->ttop[ix][iy] = qtop ;
01985          grapher->sbot[ix][iy] = ibot ; grapher->stop[ix][iy] = itop-1 ; /* 19 Mar 2004 */
01986          qsum  = qsum / (itop-ibot) ; grapher->tmean[ix][iy] = qsum ;
01987          qsumq = (qsumq - (itop-ibot) * qsum * qsum) / (itop-ibot-1.0) ;
01988          grapher->tstd[ix][iy] = (qsumq > 0.0) ? sqrt(qsumq) : 0.0 ;
01989 
01990          qmedmad_float( itop-ibot , tsar+ibot ,        /* 08 Mar 2001 */
01991                         &(grapher->tmed[ix][iy]) ,
01992                         &(grapher->tmad[ix][iy]) ) ;
01993 
01994          if( set_scale ){        /* 03 Feb 1998 */
01995 
01996            if( tsim->ny > 1 ){
01997              for( tt=1 ; tt < tsim->ny ; tt++ ){  /* get min/max over     */
01998                tsar += tsim->nx ;                 /* multiple time series */
01999                for( i=ibot ; i < itop ; i++ ){    /* if they are present  */
02000                  qbot = MIN( qbot , tsar[i] ) ;
02001                  qtop = MAX( qtop , tsar[i] ) ;
02002                }
02003              }
02004            }
02005 
02006            nd_bot = MIN( nd_bot , qbot ) ;        /* vertical scale stuff */
02007            nd_top = MAX( nd_top , qtop ) ;
02008            nd_dif = MAX( nd_dif , (qtop-qbot) ) ;
02009          }
02010       }
02011    }
02012 
02013    /* 03 Feb 1998: set the initial vertical scale factor */
02014 
02015    if( set_scale && nd_bot < nd_top && nd_dif > 0.0 ){
02016 
02017       switch( grapher->common_base ){
02018          default:
02019          case BASELINE_INDIVIDUAL:
02020             grapher->fscale = 0.9 * grapher->gy / nd_dif ;          /* biggest range */
02021          break ;
02022 
02023          case BASELINE_COMMON:
02024             grapher->fscale = 0.9 * grapher->gy / (nd_top-nd_bot) ; /* global range */
02025          break ;
02026 
02027          case BASELINE_GLOBAL:{
02028             float vbot = (nd_top > grapher->global_base)
02029                         ? grapher->global_base : nd_bot ;
02030             grapher->fscale = 0.9 * grapher->gy / (nd_top-vbot) ;
02031          }
02032          break ;
02033       }
02034 
02035       if( grapher->fscale > 0.0 && grapher->fscale < 1.0 )       /* switcheroo */
02036          grapher->fscale = -1.0 / grapher->fscale ;
02037 
02038            if( grapher->fscale > 4.0 )                           /* even value */
02039                   grapher->fscale = (int) grapher->fscale ;
02040 
02041       else if( grapher->fscale > 1.0 )
02042                   grapher->fscale = 0.5 * ((int)(2.0*grapher->fscale)) ;
02043 
02044       else if( grapher->fscale < -4.0 )
02045                   grapher->fscale = -((int)(1.0-grapher->fscale)) ;
02046 
02047       else if( grapher->fscale < -1.0 )
02048                   grapher->fscale = -0.5 * ((int)(1.0-2.0*grapher->fscale)) ;
02049    }
02050 
02051    /** find the smallest element in all the time series, if needed **/
02052 
02053    if( grapher->common_base == BASELINE_COMMON ){
02054      int first = 1 ;
02055 
02056 STATUS("finding common base") ;
02057 
02058      for( ix=0 ; ix < tsimar->num ; ix++ ){
02059        tsim = IMARR_SUBIMAGE(tsimar,ix) ;
02060        if( tsim == NULL || tsim->nx < 2 ) continue ;   /* skip */
02061        tsar = MRI_FLOAT_PTR(tsim) ;
02062        itop = MIN( ttop , tsim->nx ) ;
02063        if( first && ibot < itop ){ tsbot = tsar[ibot] ; first = 0 ; }
02064        for( tt=0 ; tt < tsim->ny ; tt++ ){  /* 29 Mar 2002 */
02065          for( i=ibot ; i < itop ; i++ ) tsbot = MIN( tsbot , tsar[i] ) ;
02066          tsar += tsim->nx ;
02067        }
02068      }
02069    } else if( grapher->common_base == BASELINE_GLOBAL ){ /* 07 Aug 2001 */
02070      tsbot = grapher->global_base ;
02071    }
02072 
02073    /**** loop over matrix of graphs and plot them all to the pixmap ****/
02074 
02075 STATUS("starting time series graph loop") ;
02076    for( ix=0,its=0 ; ix < grapher->mat ; ix++ ){
02077 
02078       for( iy=0 ; iy < grapher->mat ; iy++,its++ ){
02079 
02080          tsim = IMARR_SUBIMAGE(tsimar,its) ;
02081          if( tsim == NULL || tsim->nx < 2 ) continue ; /* skip to next iy */
02082          tsar = MRI_FLOAT_PTR(tsim) ;
02083          itop = MIN( ttop , tsim->nx ) ;
02084          qnum = itop - pbot ;          /* number of points to plot here */
02085          if( qnum < 2 ) continue ;     /* skip to next iy */
02086 
02087          /** find bottom value for this graph, if needed **/
02088 
02089          if( grapher->common_base == BASELINE_INDIVIDUAL ){
02090            tsbot = tsar[ibot] ;
02091            for( tt=0 ; tt < tsim->ny ; tt++ ){
02092              for( i=ibot ; i < itop ; i++ ) tsbot = MIN(tsbot,tsar[i]) ;
02093              tsar += tsim->nx ;
02094            }
02095          }
02096          grapher->pmin[ix][iy] = tsbot ;  /* value at graph bottom */
02097 
02098          /** 29 Mar 2002: decode 'color:' from tsim->name, if present **/
02099 
02100          use_ovi = (tsim->name!=NULL) && (strncmp(tsim->name,"color: ",7)==0) ;
02101          if( use_ovi ){
02102            char *cpt = tsim->name+6 ; int nuse, ngood ;
02103            for( tt=0 ; tt < OVI_MAX ; tt++ )
02104              ovi[tt] = DATA_COLOR(grapher) ;
02105            for( tt=0 ; tt < OVI_MAX ; tt++ ){
02106              ngood = sscanf(cpt,"%d%n",ovi+tt,&nuse) ;
02107              if( ngood < 1 ) break ;
02108              cpt += nuse ; if( *cpt == '\0' ) break ;
02109            }
02110          }
02111 
02112          tsar = MRI_FLOAT_PTR(tsim) ;
02113          for( tt=0 ; tt < tsim->ny ; tt++ ){  /* 29 Mar 2002: multi-plots */
02114 
02115           /** scale graph vertically:
02116                fscale > 0 ==> this many pixels per unit of tsar
02117                fscale < 0 ==> this many units of tsar per pixel **/
02118 
02119           ftemp = grapher->fscale ;
02120                if( ftemp == 0.0 ) ftemp =  1.0 ;
02121           else if( ftemp <  0.0 ) ftemp = -1.0 / ftemp ;
02122 
02123           /* scale to vertical pixels: before the ignore level */
02124 
02125           for( i=pbot ; i < MIN(ibot,itop) ; i++ )
02126             plot[i-pbot] = (tsar[ibot] - tsbot) * ftemp ;
02127 
02128           /* scale after the ignore level */
02129 
02130           for( i=ibot ; i < itop ; i++ )
02131             plot[i-pbot] = (tsar[i] - tsbot) * ftemp ;
02132 
02133           /* now have qnum points in plot[] */
02134 
02135           grapher->pmax[ix][iy] = tsbot + grapher->gy / ftemp ; /* value at graph top */
02136 
02137           /** Compute X11 line coords from pixel heights in plot[].
02138               N.B.: X11 y is DOWN the screen, but plot[] is UP the screen **/
02139 
02140           ftemp = grapher->gx / (pnum-1.0) ;  /* x scale factor */
02141 
02142           /* X11 box for graph:
02143              x = xorigin[ix][iy]          .. xorigin[ix][iy]+gx    (L..R)
02144              y = fHIGH-yorigin[ix][iy]-gy .. fHIGH-yorigin[ix][iy] (T..B) */
02145 
02146           xoff  = grapher->xorigin[ix][iy] ;
02147           yoff  = grapher->fHIGH - grapher->yorigin[ix][iy] ;
02148 
02149           /* 09 Jan 1998: allow x-axis to be chosen by a
02150                          timeseries that ranges between 0 and 1 */
02151 
02152 #define XPIX(ii)                                                        \
02153    ( (grapher->xax_tsim != NULL && (ii) < grapher->xax_tsim->nx)        \
02154      ? (MRI_FLOAT_PTR(grapher->xax_tsim)[MAX((ii),ibot)] * grapher->gx) \
02155      : (((ii)-pbot) * ftemp) )
02156 
02157           for( i=0 ; i < qnum ; i++ ){         /* generate X11 plot lines */
02158             a_line[i].x = xoff + XPIX(i+pbot);
02159             a_line[i].y = yoff - plot[i] ;
02160           }
02161 
02162           if( use_ovi )                       /* 29 Mar 2002: line color */
02163             DC_fg_color( grapher->dc , ovi[tt%OVI_MAX] ) ;
02164 
02165           if( DATA_POINTS(grapher) ){         /* 09 Jan 1998 */
02166             for( i=0 ; i < qnum ; i++ )
02167               GRA_small_circle( grapher,a_line[i].x,a_line[i].y,DATA_IS_THICK(grapher) );
02168           }
02169           if( DATA_LINES(grapher) ){          /* 01 Aug 1998 */
02170             XDrawLines( grapher->dc->display ,
02171                         grapher->fd_pxWind , grapher->dc->myGC ,
02172                         a_line , qnum ,  CoordModeOrigin ) ;
02173           }
02174 
02175          /* 22 July 1996: save central graph data for later use */
02176 
02177           if( ix == grapher->xc && iy == grapher->yc && tt == 0 ){
02178             for( i=0 ; i < qnum ; i++ ) grapher->cen_line[i] = a_line[i] ;
02179             grapher->nncen = qnum ;
02180             mri_free( grapher->cen_tsim ) ;             /* copy time series too */
02181             grapher->cen_tsim = mri_to_float( tsim ) ;
02182           }
02183 
02184           tsar += tsim->nx ;  /* 29 Mar 2002: advance to next curve */
02185          } /* end of loop over multi-plot (tt) */
02186 
02187          if( use_ovi )
02188            DC_fg_color( grapher->dc , DATA_COLOR(grapher) ) ; /* reset color */
02189 
02190          /* 08 Nov 1996: double plot?  Duplicate the above drawing code! */
02191          /* 07 Aug 2001: old method was DPLOT_OVERLAY,
02192                          new method is  DPLOT_PLUSMINUS */
02193          /* 29 Mar 2002: allow multiple time series (dsim->ny > 1) */
02194 
02195          if( dplot ){
02196             int dny , id , qq,qtop ;
02197             dsim = IMARR_SUBIMAGE(dplot_imar,its) ;
02198             if( dsim == NULL || dsim->nx < 2 ) continue ;  /* skip to next iy */
02199             dsar = MRI_FLOAT_PTR(dsim) ;
02200             tsar = MRI_FLOAT_PTR(tsim) ;   /* 25 Feb 2003: reset this */
02201             itop = MIN( ttop , dsim->nx ); /* ibot was set long ago */
02202             qnum = itop - pbot ;           /* number of points to plot here */
02203             if( qnum < 2 ) continue ;      /* skip to next iy = next sub-graph */
02204 
02205             if( dplot == DPLOT_PLUSMINUS ) dny = 1 ;        /* 29 Mar 2002 */
02206             else                           dny = dsim->ny ;
02207 
02208             /** 29 Mar 2002: decode 'color:' from dsim->name, if present **/
02209 
02210             use_ovi = (dsim->name!=NULL) && (strncmp(dsim->name,"color: ",7)==0) ;
02211             if( use_ovi ){
02212               char *cpt = dsim->name+6 ; int nuse, ngood ;
02213               for( tt=0 ; tt < OVI_MAX ; tt++ )
02214                 ovi[tt] = DPLOT_COLOR(grapher) ;
02215               for( tt=0 ; tt < OVI_MAX ; tt++ ){
02216                 ngood = sscanf(cpt,"%d%n",ovi+tt,&nuse) ;
02217                 if( ngood < 1 ) break ;
02218                 cpt += nuse ; if( *cpt == '\0' ) break ;
02219               }
02220             }
02221 
02222             for( id=0 ; id < dny ; id++ ){          /* 29 Mar 2002: multi-plots */
02223 
02224              ftemp = grapher->fscale ;
02225                   if( ftemp == 0.0 ) ftemp =  1.0 ;
02226              else if( ftemp <  0.0 ) ftemp = -1.0 / ftemp ;
02227 
02228              /* 18 Mar 2004: scan backwards from itop to reject superlarge values */
02229 
02230              for( qtop=itop-1 ; qtop >= pbot ; qtop-- )
02231                if( dsar[qtop] < WAY_BIG ) break ;
02232              if( qtop <= ibot ){ dsar += dsim->nx; continue; }  /* skip */
02233              qtop++ ; qnum = qtop-pbot ;
02234 
02235              switch( dplot ){
02236                default:
02237                case DPLOT_OVERLAY:                       /* plot curve */
02238                  for( i=pbot ; i < MIN(ibot,qtop) ; i++ )
02239                    plot[i-pbot] = (dsar[ibot] - tsbot) * ftemp ;
02240                  for( i=ibot ; i < qtop ; i++ )
02241                    plot[i-pbot] = (dsar[i] - tsbot) * ftemp ;
02242                break ;
02243 
02244                case DPLOT_PLUSMINUS:                     /* plus side */
02245                  for( i=pbot ; i < MIN(ibot,qtop) ; i++ )
02246                    plot[i-pbot] = (tsar[ibot]+dsar[ibot] - tsbot) * ftemp ;
02247                  for( i=ibot ; i < qtop ; i++ )
02248                    plot[i-pbot] = (tsar[i]   +dsar[i]    - tsbot) * ftemp ;
02249                break ;
02250              }
02251 
02252              ftemp = grapher->gx / (pnum-1.0) ;  /* cf. XPIX */
02253              xoff  = grapher->xorigin[ix][iy] ;
02254              yoff  = grapher->fHIGH - grapher->yorigin[ix][iy] ;
02255 
02256              for( i=0 ; i < qnum ; i++ ){
02257                a_line[i].x = xoff + XPIX(i+pbot) ;  /* 09 Jan 1998 */
02258                a_line[i].y = yoff - plot[i] ;
02259              }
02260 
02261              if( use_ovi )                      /* 29 Mar 2002 */
02262                DC_fg_color( grapher->dc , ovi[id%OVI_MAX] ) ;
02263              else
02264                DC_fg_color( grapher->dc , DPLOT_COLOR(grapher) ) ;
02265 
02266              if( DPLOT_POINTS(grapher) ){       /* 09 Jan 1998 */
02267                for( i=0 ; i < qnum ; i++ )
02268                 GRA_small_circle(grapher,a_line[i].x,a_line[i].y,DPLOT_IS_THICK(grapher));
02269              }
02270              if( DPLOT_LINES(grapher) ) {        /* 01 Aug 1998 */
02271                DC_linewidth( grapher->dc , DPLOT_THICK(grapher) ) ;
02272                XDrawLines( grapher->dc->display ,
02273                            grapher->fd_pxWind , grapher->dc->myGC ,
02274                            a_line , qnum ,  CoordModeOrigin ) ;
02275              }
02276 
02277              /* plot minus side of plus/minus curve? */
02278 
02279              if( dplot == DPLOT_PLUSMINUS ){  /* lots of duplicate code :-( */
02280               ftemp = grapher->fscale ;
02281                    if( ftemp == 0.0 ) ftemp =  1.0 ;
02282               else if( ftemp <  0.0 ) ftemp = -1.0 / ftemp ;
02283               for( i=pbot ; i < MIN(ibot,qtop) ; i++ )
02284                 plot[i-pbot] = (tsar[ibot]-dsar[ibot] - tsbot) * ftemp ;
02285               for( i=ibot ; i < qtop ; i++ )
02286                 plot[i-pbot] = (tsar[i]   -dsar[i]    - tsbot) * ftemp ;
02287               ftemp = grapher->gx / (pnum-1.0) ;
02288               for( i=0 ; i < qnum ; i++ ){
02289                 a_line[i].x = xoff + XPIX(i+pbot) ;
02290                 a_line[i].y = yoff - plot[i] ;
02291               }
02292               if( DPLOT_POINTS(grapher) ){
02293                for( i=0 ; i < qnum ; i++ )
02294                 GRA_small_circle(grapher,a_line[i].x,a_line[i].y,DPLOT_IS_THICK(grapher));
02295               }
02296               if( DPLOT_LINES(grapher) ) {
02297                 DC_linewidth( grapher->dc , DPLOT_THICK(grapher) ) ;
02298                 XDrawLines( grapher->dc->display ,
02299                             grapher->fd_pxWind , grapher->dc->myGC ,
02300                             a_line , qnum ,  CoordModeOrigin ) ;
02301               }
02302              }
02303 
02304              dsar += dsim->nx ;      /* 29 Mar 2002: next curve */
02305             } /* end of loop over multiple dplots */
02306 
02307             DC_fg_color ( grapher->dc , DATA_COLOR(grapher) ) ;
02308             DC_linewidth( grapher->dc , DATA_THICK(grapher) ) ;
02309 
02310          } /* end of dplot */
02311 
02312          /* 05 Jan 1999: plot horizontal line through zero, if desired and needed */
02313 
02314          if( grapher->HorZ && grapher->pmin[ix][iy] < 0.0 && grapher->pmax[ix][iy] > 0.0 ){
02315            DC_fg_color ( grapher->dc , GRID_COLOR(grapher) ) ;
02316            DC_linewidth( grapher->dc , GRID_THICK(grapher) ) ;
02317            DC_dashed_line( grapher->dc ) ;
02318 
02319            ftemp = grapher->fscale ;
02320                 if( ftemp == 0.0 ) ftemp =  1.0 ;
02321            else if( ftemp <  0.0 ) ftemp = -1.0 / ftemp ;
02322 
02323            XDrawLine( grapher->dc->display , grapher->fd_pxWind , grapher->dc->myGC ,
02324                       (int) xoff                , (int)(yoff + tsbot * ftemp) ,
02325                       (int)(xoff + grapher->gx) , (int)(yoff + tsbot * ftemp)  ) ;
02326 
02327            DC_fg_color ( grapher->dc , DATA_COLOR(grapher) ) ;
02328            DC_linewidth( grapher->dc , DATA_THICK(grapher) ) ;
02329            DC_solid_line( grapher->dc ) ;
02330          }
02331 
02332       } /* end of loop over y */
02333    } /* end of loop over x */
02334 
02335    /** cast away the data timeseries! */
02336 
02337    DESTROY_IMARR(tsimar) ;
02338    if( dplot_imar != NULL ) DESTROY_IMARR(dplot_imar) ;  /* 08 Nov 1996 */
02339 
02340    /*----- Now do extra plots in center frame, if any -----*/
02341 
02342 #define REFTS_FRAC 0.38  /* fraction of one graph that this takes up */
02343 #define REFTS_TOP  0.98  /* top of reference graph in frame */
02344 
02345 #define ORTTS_FRAC 0.38
02346 #define ORTTS_TOP  0.78
02347 
02348    /* 12 Nov 1996: include graphs of orts by looping "iex" */
02349 
02350    for( iex=0 ; iex <= 1 ; iex++ ){
02351 
02352       eximar = (iex==0) ? grapher->ref_ts : grapher->ort_ts ;
02353 
02354       if( eximar != NULL && IMARR_COUNT(eximar) > 0 ){
02355          float yscal , val , xscal , exfrac , extop ;
02356          int   nover , nvec , nx , ivec ;
02357          int   excolor , exthick ;
02358 
02359 STATUS("plotting extra graphs") ;
02360 
02361          exfrac  = (iex==0) ? REFTS_FRAC : ORTTS_FRAC ;
02362          extop   = (iex==0) ? REFTS_TOP  : ORTTS_TOP  ;
02363          excolor = (iex==0) ? IDEAL_COLOR(grapher) : ORT_COLOR(grapher) ;
02364          exthick = (iex==0) ? IDEAL_THICK(grapher) : ORT_THICK(grapher) ;
02365 
02366          for( its=0 ; its < IMARR_COUNT(eximar) ; its++ ){
02367 
02368             tsim = IMARR_SUBIMAGE(eximar,its) ;
02369 
02370             if( tsim == NULL || tsim->kind != MRI_float || tsim->nx < 2 ) continue ;
02371 
02372             nx   = tsim->nx ;
02373             itop = MIN( ttop , nx ) ;
02374             qnum = itop - pbot ; if( qnum < 2 ) continue ;
02375             nvec = (grapher->ref_ts_plotall) ? (tsim->ny) : 1 ;
02376 
02377             for( ivec=0 ; ivec < nvec ; ivec++ ){  /* plot each sub-vector */
02378               tsar  = MRI_FLOAT_PTR(tsim) + (ivec*nx) ;
02379               tsbot = 99999999.0 ; tstop = -99999999.0 ;
02380               nover = grapher->init_ignore ;
02381               for( i=ibot ; i < itop ; i++ ){
02382                 val = tsar[i] ;
02383                 if( val < WAY_BIG ){ tstop = MAX(tstop,val); tsbot = MIN(tsbot,val); }
02384                 else               { nover++ ; }
02385               }
02386               if( tstop >= WAY_BIG || tstop <= tsbot ) continue ; /* skip */
02387 
02388               /*** scale into a_line and draw it***/
02389 
02390               yscal = exfrac * grapher->gy / (tstop-tsbot) ;
02391               xscal = ftemp = grapher->gx / (pnum-1.0) ;
02392 
02393               xoff  = grapher->xorigin[grapher->xc][grapher->yc] ;
02394               yoff  = grapher->fHIGH - grapher->yorigin[grapher->xc][grapher->yc]
02395                                      - (extop - exfrac) * grapher->gy ;
02396 
02397               for( i=pbot ; i < itop; i++ ){
02398                 val = (i >= ibot &&  tsar[i] < WAY_BIG) ? tsar[i] : tsbot ;
02399 
02400                 a_line[i-pbot].x = xoff + XPIX(i) ;           /* 09 Jan 1998 */
02401                 a_line[i-pbot].y = yoff - yscal*(val-tsbot) ;
02402               }
02403 
02404               /* if none are over the limit, draw in one operation;
02405                  otherwise, must plot each line separately in its needed color */
02406 
02407               if( nover == 0 ){
02408                 DC_fg_color ( grapher->dc , excolor ) ;
02409                 DC_linewidth( grapher->dc , exthick ) ;
02410                 XDrawLines( grapher->dc->display ,
02411                             grapher->fd_pxWind , grapher->dc->myGC ,
02412                             a_line , qnum ,  CoordModeOrigin ) ;
02413               } else {
02414                 for( i=pbot ; i < itop-1 ; i++ ){
02415                   if( i >= ibot && tsar[i] < WAY_BIG && tsar[i+1] < WAY_BIG ){
02416                     DC_fg_color ( grapher->dc , excolor ) ;
02417                     DC_linewidth( grapher->dc , exthick ) ;
02418                   } else {
02419                     DC_fg_color( grapher->dc , IGNORE_COLOR(grapher) ) ;
02420                     if( grapher->mat < 4 &&
02421                         ( i < ibot || tsar[i] >= WAY_BIG ) )
02422                       GRA_small_circle( grapher,a_line[i-pbot].x,a_line[i-pbot].y,0 );
02423                   }
02424 
02425                   XDrawLines( grapher->dc->display ,
02426                               grapher->fd_pxWind , grapher->dc->myGC ,
02427                               a_line + (i-pbot) , 2 ,  CoordModeOrigin ) ;
02428                 }
02429                 if( grapher->mat < 4 &&
02430                     ( i < ibot || tsar[i] >= WAY_BIG ) )
02431                   GRA_small_circle( grapher,a_line[i-pbot].x,a_line[i-pbot].y,0 );
02432               }
02433             } /* end of loop over sub-vectors */
02434          } /* end of loop over refs */
02435       } /* end of if refs exist */
02436    } /* end of loop over refs and orts */
02437 
02438    /*---- 09 Jan 1998: plot graph showing x-axis as well ----*/
02439 
02440    if( grapher->xax_tsim != NULL ){
02441      float yscal , ftemp , xscal , yoff ;
02442      int   npt ;
02443 
02444      xscal = GL_DLX / (float) grapher->gx ;
02445      yscal = grapher->gy / (pnum-1.0) ;
02446      yoff  = grapher->fHIGH - grapher->yorigin[grapher->xc][grapher->yc] ;
02447      ftemp = 1.0 ;
02448      npt   = ttop ;
02449      if( npt > grapher->xax_tsim->nx ) npt = grapher->xax_tsim->nx ;
02450      if( npt > pbot+1 ){
02451        for( i=pbot ; i < npt ; i++ ){
02452          a_line[i-pbot].x = XPIX(i) * xscal ;
02453          a_line[i-pbot].y = yoff - yscal*(i-pbot) ;
02454        }
02455        DC_fg_color ( grapher->dc , IDEAL_COLOR(grapher) ) ;
02456        DC_linewidth( grapher->dc , IDEAL_THICK(grapher) ) ;
02457        XDrawLines( grapher->dc->display , grapher->fd_pxWind , grapher->dc->myGC ,
02458                    a_line , npt-pbot ,  CoordModeOrigin ) ;
02459      }
02460    }
02461 
02462    /***** Done!!! *****/
02463 
02464    EXRETURN ;
02465 }

void redraw_graph MCW_grapher   grapher,
int    code
 

Definition at line 1309 of file afni_graph.c.

References AV_fval_to_char(), BASELINE_COMMON, BASELINE_GLOBAL, BASELINE_INDIVIDUAL, MCW_grapher::common_base, MCW_grapher::dc, DC_fg_color(), DC_linewidth(), DC_text_width, MCW_grapher::dont_redraw, draw_grids(), ENTRY, erase_fdw(), fd_line(), fd_px_store(), MCW_grapher::fd_pxWind, fd_txt(), FIM_menu::fim_editref_winaver_bbox, MCW_grapher::fmenu, MCW_grapher::fscale, MCW_grapher::getaux, GRA_fix_optmenus(), GRA_REALZ, GRA_redraw_overlay(), GRA_winaver_setref(), MCW_grapher::grid_spacing, MCW_grapher::gy_max, THD_ivec3::ijk, MCW_grapher::init_ignore, ISONE, MAX, MCW_val_bbox(), MV_format_fval(), MYTXT, MCW_grapher::never_drawn, MCW_grapher_status::nz, plot_graphs(), MCW_grapher::pmax, MCW_grapher::pmin, STATUS, MCW_grapher::status, strp, TBOT, TEMP_IVEC3, TEXT_COLOR, MCW_grapher::textgraph, THD_fdind_to_3dind(), MCW_grapher::tmean, TPTS, MCW_grapher::tstd, tt, TTOP, xc, MCW_grapher::xc, MCW_grapher::xpoint, MCW_grapher::xx_text_1, MCW_grapher::xx_text_2, MCW_grapher::xx_text_2p, MCW_grapher::xx_text_3, yc, MCW_grapher::yc, MCW_grapher::ypoint, and MCW_grapher::zpoint.

Referenced by drive_MCW_grapher(), GRA_baseline_CB(), GRA_color_CB(), GRA_dplot_change_CB(), GRA_drawing_EV(), GRA_fim_CB(), GRA_finalize_global_baseline_CB(), GRA_ggap_CB(), GRA_grid_choose_CB(), GRA_gthick_CB(), GRA_handle_keypress(), GRA_mat_choose_CB(), GRA_new_pixmap(), GRA_opt_CB(), GRA_pick_xaxis_CB(), GRA_scale_choose_CB(), GRA_slice_choose_CB(), GRA_textgraph_CB(), GRA_thick_CB(), GRA_transform_CB(), GRA_winaver_CB(), grid_down(), grid_up(), mat_down(), and mat_up().

01310 {
01311    int x, y , www,xxx , rrr ;
01312    int xc = grapher->xc , yc = grapher->yc ;
01313    char strp[256] , buf[64] ;
01314    int xd,yd,zd ;
01315 
01316 ENTRY("redraw_graph") ;
01317 
01318    if( ! GRA_REALZ(grapher) ){ STATUS("ILLEGAL ENTRY"); EXRETURN; }
01319    if( grapher->fd_pxWind == (Pixmap) 0 ){ STATUS("ILLEGAL ENTRY"); EXRETURN; }
01320    if( grapher->dont_redraw ) EXRETURN ;  /* 27 Jan 2004 */
01321 
01322    /*---- draw the graphs ----*/
01323 
01324    erase_fdw  ( grapher ) ;
01325    draw_grids ( grapher ) ;
01326    plot_graphs( grapher , code ) ;
01327 
01328    DC_fg_color( grapher->dc , TEXT_COLOR(grapher) ) ;
01329 
01330    if( TPTS(grapher) < 2 ){             /* 22 Sep 2000 */
01331       fd_txt( grapher , GL_DLX+5, 35,
01332               "Can't draw graphs for this dataset: Num < 2" ) ;
01333       fd_px_store( grapher ) ;
01334       EXRETURN ;
01335    }
01336 
01337    /*---- draw some strings for informative purposes ----*/
01338 
01339    DC_fg_color( grapher->dc , TEXT_COLOR(grapher) ) ;
01340 
01341    /*** y axis labels ***/
01342 
01343    if( !grapher->textgraph ){
01344       AV_fval_to_char( grapher->pmax[xc][yc] , strp ) ;
01345       www = DC_text_width(grapher->dc,strp) ;
01346       xxx = GL_DLX - www - 2 ;
01347       xxx = MAX(0,xxx) ;
01348       fd_txt( grapher , xxx , GB_DLY + grapher->gy_max - MYTXT, strp) ;
01349 
01350       AV_fval_to_char( grapher->pmax[xc][yc] - grapher->pmin[xc][yc] , buf ) ;
01351       if( buf[0] == ' ' ) buf[0] = '+' ;
01352       sprintf( strp , "[%s]" , buf ) ;
01353       www = DC_text_width(grapher->dc,strp) ;
01354       xxx = GL_DLX - www + 2 ;
01355       xxx = MAX(0,xxx) ;
01356       fd_txt( grapher , xxx , GB_DLY + grapher->gy_max - MYTXT - 14 , strp) ;
01357 
01358       AV_fval_to_char( grapher->pmin[xc][yc] , strp ) ;
01359       www = DC_text_width(grapher->dc,strp) ;
01360       xxx = GL_DLX - www - 2 ;
01361       xxx = MAX(0,xxx) ;
01362       fd_txt( grapher , xxx , GB_DLY + 5, strp) ;
01363    }
01364 
01365    /*** bottom of the page coordinates stuff ***/
01366 
01367    /* first column */
01368 
01369    grapher->xx_text_1 = GL_DLX+5 ;
01370 
01371    xd = grapher->xpoint ; yd = grapher->ypoint ; zd = grapher->zpoint ;
01372 #ifndef DONT_MANGLE_XYZ
01373    { THD_ivec3 id ;
01374      id = THD_fdind_to_3dind( grapher->getaux , TEMP_IVEC3(xd,yd,zd) ) ;
01375      xd = id.ijk[0] ; yd = id.ijk[1] ; zd = id.ijk[2] ; }
01376 #endif
01377 
01378    sprintf(strp,"X: %d", xd) ;
01379    fd_txt( grapher , GL_DLX+5 , 35, strp) ;
01380    xxx = DC_text_width(grapher->dc,strp) ;
01381 
01382    sprintf(strp,"Y: %d", yd) ;
01383    fd_txt( grapher , GL_DLX+5 , 21, strp) ;
01384    www = DC_text_width(grapher->dc,strp) ; xxx = MAX(xxx,www) ;
01385 
01386    if( grapher->status->nz > 1 ){
01387       sprintf(strp,"Z: %d", zd) ;
01388       fd_txt( grapher , GL_DLX+5 ,  7, strp) ;
01389       www = DC_text_width(grapher->dc,strp) ; xxx = MAX(xxx,www) ;
01390    }
01391 
01392    /* second column */
01393 
01394    grapher->xx_text_2 = xxx = xxx + GL_DLX + 15 ;
01395 
01396    DC_linewidth( grapher->dc , 0 ) ;
01397    fd_line( grapher , xxx-7 , 41 , xxx-7 , 5 ) ;
01398 
01399    if( grapher->init_ignore > 0 ){                    /* 23 May 2005 */
01400      sprintf(strp,"Ignore%4d",grapher->init_ignore) ;
01401      fd_txt( grapher , xxx , 35, strp) ;
01402    }
01403 
01404    sprintf(strp,"Grid:%5d", grapher->grid_spacing ) ;
01405    rrr = DC_text_width(grapher->dc,strp) ;
01406 
01407    if( !grapher->textgraph ){
01408       if( grapher->fscale > 0 ){                        /* 04 Feb 1998: */
01409          AV_fval_to_char( grapher->fscale , buf ) ;     /* put scale on graph, too */
01410          www = strlen(strp) ;
01411          sprintf(strp+www," Scale:%s pix/datum",buf) ;
01412       } else if( grapher->fscale < 0 ){
01413          AV_fval_to_char( -grapher->fscale , buf ) ;
01414          www = strlen(strp) ;
01415          sprintf(strp+www," Scale:%s datum/pix",buf) ;
01416       }
01417    }
01418 
01419    fd_txt( grapher , xxx , 21, strp) ;
01420 
01421    xxx = DC_text_width(grapher->dc,strp) ;           /* 19 Dec 2003 [rickr] */
01422 
01423    { int bb=TBOT(grapher) , tt=TTOP(grapher)-1 ;
01424      if( bb > 99 || tt > 99 )
01425        sprintf(strp,"#%4d:%-4d" , bb,tt ) ;
01426      else
01427        sprintf(strp,"Num%3d:%-3d" , bb,tt ) ;
01428    }
01429    fd_line( grapher ,
01430             grapher->xx_text_2+rrr+3 , (grapher->init_ignore > 0) ? 41 : 31 ,
01431             grapher->xx_text_2+rrr+3 , 5 ) ;
01432 
01433    grapher->xx_text_2p = grapher->xx_text_2+rrr+7 ;  /* 23 May 2005 */
01434 
01435    if( !grapher->textgraph ){
01436      switch( grapher->common_base ){
01437        default:
01438        case BASELINE_INDIVIDUAL:
01439          strcat(strp,"  Base: separate") ; break ;
01440 
01441        case BASELINE_COMMON:
01442          strcat(strp,"  Base: common") ; break ;
01443 
01444        case BASELINE_GLOBAL:
01445          strcat(strp,"  Base: global") ; break ;
01446      }
01447    }
01448 
01449    fd_txt( grapher , grapher->xx_text_2 ,  7, strp ) ;
01450 
01451    /* add third column        19 Dec 2003  [rickr] */
01452 
01453    www = DC_text_width(grapher->dc,strp) ; xxx = MAX(xxx,www) ;
01454 
01455    grapher->xx_text_3 = grapher->xx_text_2 + xxx + 15 ;
01456 
01457    if( !grapher->textgraph && !ISONE(grapher) ){
01458       sprintf(strp,"Mean: %10s", MV_format_fval(grapher->tmean[xc][yc]) ) ;
01459 
01460       fd_txt( grapher , grapher->xx_text_3 ,  21, strp ) ;
01461 
01462       sprintf(strp,"Sigma:%10s", MV_format_fval(grapher->tstd[xc][yc]) ) ;
01463 
01464       fd_txt( grapher , grapher->xx_text_3 ,   7, strp ) ;
01465 
01466       fd_line( grapher , grapher->xx_text_3-7 , 31 , grapher->xx_text_3-7 , 5 ) ;
01467    }
01468 
01469    /*** flush the pixmap to the screen ***/
01470 
01471    fd_px_store( grapher ) ;
01472 
01473    /*** draw any overlay stuff ***/
01474 
01475    GRA_redraw_overlay( grapher ) ;
01476 
01477 #ifdef USE_OPTMENUS
01478    GRA_fix_optmenus( grapher ) ;
01479 #endif
01480 
01481    /** 27 Jan 2004 **/
01482 
01483    if( MCW_val_bbox(grapher->fmenu->fim_editref_winaver_bbox) )
01484      GRA_winaver_setref( grapher ) ;
01485 
01486    grapher->never_drawn = 0 ;
01487    EXRETURN ;
01488 }

void scale_down MCW_grapher   grapher
 

Definition at line 2628 of file afni_graph.c.

02630 {
02631    if( !GRA_VALID(grapher) ) return ;
02632    if (grapher->fscale > 1) grapher->fscale /= 2;
02633    else if (grapher->fscale < 0) grapher->fscale *= 2;
02634    else grapher->fscale = -2;
02635    return ;
02636 }

void scale_up MCW_grapher   grapher
 

Definition at line 2612 of file afni_graph.c.

02614 {
02615    if( !GRA_VALID(grapher) ) return ;
02616    if (grapher->fscale > 0) grapher->fscale *= 2;
02617    else if (grapher->fscale < -2) grapher->fscale /= 2;
02618    else grapher->fscale = 1;
02619 
02620    if( grapher->fscale > 1000000.0 ){
02621      static int nn=0 ;
02622      nn++ ; if( nn < 3 ) fprintf(stderr,"Is that you, Bellgowan?  If so, stop it!\a\n") ;
02623    }
02624    return ;
02625 }

void send_newinfo MCW_grapher   grapher
 

Definition at line 2541 of file afni_graph.c.

References CALL_sendback, ENTRY, MCW_grapher::getaux, GRA_VALID, graCR_newxyzm, GRA_cbs::mat, MCW_grapher::mat, GRA_cbs::reason, MCW_grapher_status::send_CB, MCW_grapher::status, GRA_cbs::xcen, MCW_grapher::xpoint, GRA_cbs::ycen, MCW_grapher::ypoint, GRA_cbs::zcen, and MCW_grapher::zpoint.

Referenced by drive_MCW_grapher(), GRA_drawing_EV(), GRA_handle_keypress(), GRA_mat_choose_CB(), and GRA_slice_choose_CB().

02542 {
02543 ENTRY("send_newinfo") ;
02544 
02545    if( GRA_VALID(grapher) && grapher->status->send_CB != NULL ){
02546       GRA_cbs cbs ;
02547 
02548       cbs.reason = graCR_newxyzm   ;
02549       cbs.xcen   = grapher->xpoint ;
02550       cbs.ycen   = grapher->ypoint ;
02551       cbs.zcen   = grapher->zpoint ;
02552       cbs.mat    = grapher->mat ;
02553 #if 0
02554       grapher->status->send_CB( grapher , grapher->getaux , &cbs ) ;
02555 #else
02556       CALL_sendback( grapher , cbs ) ;
02557 #endif
02558    }
02559 
02560    EXRETURN ;
02561 }

void text_graphs MCW_grapher   grapher
 

Definition at line 1588 of file afni_graph.c.

References AFNI_CALL_0D_function, AV_fval_to_char(), CALL_getser, MCW_grapher::cen_tsim, MCW_grapher::dc, DC_fg_color(), DC_text_width, MCW_grapher::dont_redraw, ENTRY, fd_txt(), MCW_grapher::getaux, MCW_grapher::getser, graCR_getseries, MCW_grapher::gx, MRI_IMAGE::kind, MCW_grapher::mat, MRI_FLOAT_PTR, mri_free(), mri_to_float(), MCW_grapher_status::num_series, MCW_grapher_status::nx, MRI_IMAGE::nx, MCW_grapher_status::ny, MCW_grapher::status, strp, TEXT_COLOR, MCW_grapher::time_index, MCW_grapher::transform0D_func, MCW_grapher::xc, MCW_grapher::xorigin, MCW_grapher::xpoint, MCW_grapher::yc, MCW_grapher::yorigin, MCW_grapher::ypoint, and MCW_grapher::zpoint.

Referenced by plot_graphs().

01589 {
01590    MRI_IMAGE *tsim ;
01591    int index, ix, iy, xtemp,ytemp,ztemp , xoff,yoff ;
01592    int iv , jv , www ;
01593    char str[64] , *strp ;
01594 
01595 ENTRY("text_graphs") ;
01596    if( grapher->dont_redraw ) EXRETURN ;  /* 27 Jan 2004 */
01597 
01598    DC_fg_color( grapher->dc , TEXT_COLOR(grapher) ) ;
01599 
01600    iv = grapher->time_index ;
01601    if( iv < 0 )
01602      iv = 0 ;
01603    else if( iv >= grapher->status->num_series )
01604      iv = grapher->status->num_series - 1 ;
01605 
01606    ztemp = grapher->zpoint * grapher->status->ny * grapher->status->nx ;
01607 
01608    for( ix=0 ; ix < grapher->mat ; ix++ ){
01609       xtemp  = grapher->xpoint + ix - grapher->xc ;
01610            if( xtemp <  0                   ) xtemp += grapher->status->nx ;
01611       else if( xtemp >= grapher->status->nx ) xtemp -= grapher->status->nx ;
01612 
01613       for( iy=0 ; iy < grapher->mat ; iy++ ){
01614          ytemp = grapher->ypoint - iy + grapher->yc ;
01615               if( ytemp <  0                   ) ytemp += grapher->status->ny ;
01616          else if( ytemp >= grapher->status->ny ) ytemp -= grapher->status->ny ;
01617 
01618          index = ztemp + ytemp * grapher->status->nx + xtemp ;
01619 
01620 #if 0
01621          tsim  = (MRI_IMAGE *) grapher->getser( index , graCR_getseries ,
01622                                                         grapher->getaux ) ;
01623 #else
01624          CALL_getser( grapher , index,graCR_getseries , MRI_IMAGE *,tsim ) ;
01625 #endif
01626 
01627          if( tsim == NULL ) break ;
01628          if( tsim->nx < 1 ){ mri_free(tsim); break; }  /* shouldn't happen */
01629 
01630          if( tsim->kind != MRI_float ){
01631            MRI_IMAGE *qim = mri_to_float(tsim) ;
01632            mri_free(tsim) ; tsim = qim ;
01633          }
01634 
01635          if( ix == grapher->xc && iy == grapher->yc ){
01636            mri_free( grapher->cen_tsim ) ;             /* copy time series too */
01637            grapher->cen_tsim = mri_to_float( tsim ) ;
01638          }
01639 
01640 #if 0
01641          if( grapher->transform0D_func != NULL )
01642 # if 0
01643             grapher->transform0D_func( tsim->nx , MRI_FLOAT_PTR(tsim) ) ;
01644 # else
01645             AFNI_CALL_0D_function( grapher->transform0D_func ,
01646                                    tsim->nx , MRI_FLOAT_PTR(tsim) ) ;
01647 # endif
01648 #endif
01649 
01650          jv = iv ; if( jv >= tsim->nx ) jv = tsim->nx - 1 ;
01651          AV_fval_to_char( MRI_FLOAT_PTR(tsim)[jv] , str ) ;
01652          mri_free(tsim) ;
01653          strp = (str[0] == ' ') ? str+1 : str ;
01654          www = DC_text_width(grapher->dc,strp) ;
01655 
01656          fd_txt( grapher , grapher->xorigin[ix][iy] + (grapher->gx-www)/2 ,
01657                            grapher->yorigin[ix][iy] + 2 ,
01658                  strp ) ;
01659       }
01660    }
01661 
01662    EXRETURN ;
01663 }

Variable Documentation

int grid_ar[GRID_MAX] [static]
 

Initial value:

   { 2, 5, 10, 20, 50, 100, 200, 500, 1000, 2000, 5000, 10000 }

Definition at line 1525 of file afni_graph.c.

Referenced by auto_grid(), GRA_opt_CB(), grid_down(), and grid_up().

char* long_index_name = "index=" [static]
 

Definition at line 1201 of file afni_graph.c.

Referenced by GRA_redraw_overlay().

char* long_time_name = " at " [static]
 

Definition at line 1205 of file afni_graph.c.

Referenced by GRA_redraw_overlay().

char* long_value_name = " value=" [static]
 

Definition at line 1203 of file afni_graph.c.

Referenced by GRA_redraw_overlay().

MCW_action_item SETSHIFT_act[NUM_SETSHIFT_ACT] [static]
 

Initial value:

 {
 { SETSHIFT_quit_label  , GRA_setshift_action_CB, NULL, SETSHIFT_quit_help ,"Close window"                 , 0 },
 { SETSHIFT_apply_label , GRA_setshift_action_CB, NULL, SETSHIFT_apply_help,"Apply choice and keep window" , 0 },
 { SETSHIFT_done_label  , GRA_setshift_action_CB, NULL, SETSHIFT_done_help ,"Apply choice and close window", 1 }
}

Definition at line 4846 of file afni_graph.c.

char* short_index_name = "#" [static]
 

Definition at line 1202 of file afni_graph.c.

Referenced by GRA_redraw_overlay().

char* short_time_name = "@" [static]
 

Definition at line 1206 of file afni_graph.c.

Referenced by GRA_redraw_overlay().

char* short_value_name = "=" [static]
 

Definition at line 1204 of file afni_graph.c.

Referenced by GRA_redraw_overlay().

int show_grapher_pixmap = 1 [static]
 

Definition at line 20 of file afni_graph.c.

Referenced by erase_fdw(), GRA_drawing_EV(), and GRA_handle_keypress().

XPoint xball[] [static]
 

Initial value:

 {
      {-1,-2},{ 0,-2},{ 1,-2},
      { 2,-1},{ 2, 0},{ 2, 1},
      { 1, 2},{ 0, 2},{-1, 2},
      {-2, 1},{-2, 0},{-2,-1},  
      {-1,-1},{-1, 0},{-1, 1},
      { 0,-1},{ 0, 0},{ 0, 1},
      { 1,-1},{ 1, 0},{ 1, 1},  
      { 0,-3},{ 0, 3},{ 3, 0},
      {-3, 0}                   
 }

Definition at line 1121 of file afni_graph.c.

Referenced by GRA_overlay_circle(), and GRA_small_circle().

 

Powered by Plone

This site conforms to the following standards: