1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
#include "scilab_d.h"
#define NOCHOOSE 0
#define CHOOSE 1
#define CANCEL 2
extern void ShellFormCreate();
extern int ok_Flag_sci;
extern void C2F(cvstr)();
void ExposeChooseWindow();
static int numChoix ;
static void CancelChoose();
static void DoChoose();
/* Interface with a Scilab ``structure'' */
void C2F(xchoose)(desc,ptrdesc,nd,basstrings,nstring,ptrstrings,btn,ptrbtn,nb,nrep,ierr)
int *desc,*ptrdesc,*nd,*basstrings,*nstring,*ptrstrings,*btn,*nb,*ptrbtn,*nrep,*ierr;
{
int i;
char **strings, *description,**buttonname;
*ierr=0;
ScilabMStr2C(desc,nd,ptrdesc,&description,ierr);
if ( *ierr == 1) return;
ScilabMStr2CM(btn,nb,ptrbtn,&buttonname,ierr);
if ( *ierr == 1) return;
ScilabMStr2CM(basstrings,nstring,ptrstrings,&strings,ierr);
ExposeChooseWindow(strings,nstring,description,buttonname);
for (i=0 ; i < *nstring ; i++ ) FREE(strings[i]);
FREE(strings);
FREE(description);
for (i=0 ; i < *nb ; i++ )FREE(buttonname[i]);
FREE(buttonname);
if ( ok_Flag_sci == CHOOSE)
*nrep=(1+numChoix);
else *nrep=0;
}
/* test function */
TestChoose()
{
static String description1 = "Choose \ntest";
static String strings[] = {
"first list entry",
"second list entry",
"third list entry",
"fourth list entry",
NULL
};
static String buttonname[] = {
"Label1",
"Label2",
NULL
};
static nstrings=4;
ExposeChooseWindow(strings,&nstrings,description1,buttonname);
}
/* The cancel command callback */
static void CancelChoose(w,shell,callData)
Widget w;
caddr_t shell,callData;
{
ok_Flag_sci = CANCEL;
}
/* The choose command callback */
static void DoChoose(widget,shell,callData)
Widget widget;
caddr_t shell,callData;
{
XawListReturnStruct* item;
item = (XawListReturnStruct*)callData;
numChoix = item->list_index ;
ok_Flag_sci = CHOOSE;
}
void ExposeChooseWindow(strings,ns,description,buttonname)
char **strings;
char *description;
char **buttonname;
int *ns;
{
Widget choosepanned,wid,list,shell,chooseviewport,chooselabel,labelviewport,cform;
Arg args[10];
Cardinal iargs = 0;
static Display *dpy = (Display *) NULL;
ShellFormCreate("chooseShell",&shell,&choosepanned,&dpy);
/* Create a Viewport+Label and resize it */
ViewpLabelCreate(choosepanned,&chooselabel,&labelviewport,description);
/* Create a Viewport+List and resize it */
ViewpListCreate(choosepanned,&list,&chooseviewport,strings,*ns);
XtAddCallback(list, XtNcallback,(XtCallbackProc)DoChoose ,(XtPointer) NULL);
/* Create a button */
iargs=0;
cform = XtCreateManagedWidget("cform",formWidgetClass,choosepanned,args,iargs);
ButtonCreate(cform,&wid,(XtCallbackProc) CancelChoose,(XtPointer) NULL,
buttonname[0],"cancel");
/* X11 Loop */
XtMyLoop(shell,dpy);
}
|