/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
#include "afni.h"
#ifndef ALLOW_PLUGINS
# error "Plugins not properly set up -- see machdep.h"
#endif
/***********************************************************************
Plugin to switch the coordinate display order
************************************************************************/
/*--------------------- string to 'help' the user --------------------*/
static char helpstring[] =
"Purpose: control the AFNI display of coordinates.\n"
"\n"
"The input 'Order' specifies which anatomical directions are to\n"
"be displayed in the AFNI control window as the -x, -y, and -z\n"
"axes, respectively.\n"
"\n"
"For example, the 'Dicom' order is equivalent to 'RAI', which\n"
"means that\n"
" -x = Right [and so +x = Left ]\n"
" -y = Anterior [ so +y = Posterior]\n"
" -z = Inferior [ so +z = Superior ]\n"
"\n"
"The 'flipped' order is 'LPI', which is used in many journals.\n"
"See the output of 'afni -help' for more information.\n"
"\n"
"After you make your choice, you must press one of the\n"
"'Set' buttons for the plugin to send its data to AFNI.\n"
"Author -- RW Cox"
;
/*--------------------- strings for output format --------------------*/
static char * cord_strings[] = {
"Dicom" , "Flipped" ,
"RAI" , "RAS" , "RPI" , "RPS" , "RIA" , "RIP" , "RSA" , "RSP" ,
"LAI" , "LAS" , "LPI" , "LPS" , "LIA" , "LIP" , "LSA" , "LSP" ,
"AIR" , "ASR" , "PIR" , "PSR" , "IAR" , "IPR" , "SAR" , "SPR" ,
"AIL" , "ASL" , "PIL" , "PSL" , "IAL" , "IPL" , "SAL" , "SPL" ,
"IRA" , "SRA" , "IRP" , "SRP" , "ARI" , "PRI" , "ARS" , "PRS" ,
"ILA" , "SLA" , "ILP" , "SLP" , "ALI" , "PLI" , "ALS" , "PLS"
} ;
#define NUM_CORD_STRINGS (sizeof(cord_strings)/sizeof(char *))
/*----------------- prototypes for internal routines -----------------*/
static char * CORD_main( PLUGIN_interface * ) ; /* the entry point */
/***********************************************************************
Set up the interface to the user:
1) Create a new interface using "PLUTO_new_interface";
2) For each line of inputs, create the line with "PLUTO_add_option"
(this line of inputs can be optional or mandatory);
3) For each item on the line, create the item with
"PLUTO_add_dataset" for a dataset chooser,
"PLUTO_add_string" for a string chooser,
"PLUTO_add_number" for a number chooser.
************************************************************************/
DEFINE_PLUGIN_PROTOTYPE
PLUGIN_interface * PLUGIN_init( int ncall )
{
PLUGIN_interface * plint ; /* will be the output of this routine */
int meth ;
if( ncall > 0 ) return NULL ; /* only one interface */
/*---------------- set titles and call point ----------------*/
plint = PLUTO_new_interface( "Coord Order" ,
"Coordinate Order Display" ,
helpstring ,
PLUGIN_CALL_VIA_MENU , CORD_main ) ;
PLUTO_add_hint( plint , "Coordinate Order Display" ) ;
PLUTO_set_sequence( plint , "A:afnicontrol:display" ) ;
PLUTO_set_runlabels( plint , "Set+Keep" , "Set+Close" ) ; /* 04 Nov 2003 */
/*---------- 2nd line: other inputs ----------*/
PLUTO_add_option( plint ,
"Input" , /* label at left of input line */
"Input" , /* tag to return to plugin */
TRUE /* is this mandatory? */
) ;
meth = PLUTO_string_index( GLOBAL_library.cord.orcode ,
NUM_CORD_STRINGS ,
cord_strings ) ;
if( meth < 0 || meth >= NUM_CORD_STRINGS ) meth = 0 ;
PLUTO_add_string( plint ,
"Order" , /* label next to chooser button */
NUM_CORD_STRINGS , /* number of strings to choose among */
cord_strings , /* list of strings to choose among */
meth /* index of default string */
) ;
/*--------- done with interface setup ---------*/
return plint ;
}
/***************************************************************************
Main routine for this plugin (will be called from AFNI).
If the return string is not NULL, some error transpired, and
AFNI will popup the return string in a message box.
****************************************************************************/
static char * CORD_main( PLUGIN_interface * plint )
{
char * str ; /* strings from user */
/*--------- go to next input line ---------*/
PLUTO_next_option(plint) ;
str = PLUTO_get_string(plint) ; /* get string item (the method) */
MCW_strncpy(GLOBAL_argopt.orient_code,str,4) ;
THD_coorder_fill( GLOBAL_argopt.orient_code , &GLOBAL_library.cord ) ;
PLUTO_force_redisplay() ;
return NULL ;
}
syntax highlighted by Code2HTML, v. 0.9.1