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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140
|
#include "scilab_d.h"
extern void ShellFormCreate();
extern void C2F(cvstr)();
extern int ok_Flag_sci;
void DialogWindow();
static char *str = (char *) 0;
static XtCallbackProc DialogOk();
static XtCallbackProc DialogCancel();
/* interface with scilab */
void C2F(xdialg)(value,ptrv,nv,desc,ptrdesc,nd,btn,ptrbtn,nb,res,ptrres,nr,ierr)
int *value,*ptrv,*nv,*desc,*ptrdesc,*nd,*btn,*nb,*ptrbtn,*res,*ptrres,*nr,*ierr;
{
int maxlines,maxchars,i;
char *description,*valueinit,**buttonname;
maxlines= *nr;
maxchars= *ierr;
*ierr=0;
ScilabMStr2C(desc,nd,ptrdesc,&description,ierr);
if ( *ierr == 1) return;
ScilabMStr2C(value,nv,ptrv,&valueinit,ierr);
if ( *ierr == 1) return;
ScilabMStr2CM(btn,nb,ptrbtn,&buttonname,ierr);
if ( *ierr == 1) return;
DialogWindow(description,valueinit,nd,nv,buttonname);
FREE(description);
FREE(valueinit);
for (i=0 ; i < *nb ; i++ )FREE(buttonname[i]);
FREE( buttonname);
if (*nv==0)
*nr=0;
else {
ScilabC2MStr2(res,nr,ptrres,str,ierr,maxchars,maxlines);
FREE(str);/** allocated in DialogOK **/
}
}
/* to open a dialog in a procedure */
void xdialg1(description,valueinit,buttonname,value,ok)
char *description,*valueinit,**buttonname,*value;
int *ok;
{
int nd=0,nv;
nv=1;
DialogWindow(description,valueinit,&nd,&nv,buttonname);
if (nv==0)
*ok=0;
else {
*ok=1;
strcpy(value,str);
FREE(str);/** allocated in DialogOK **/
}
}
/* test function */
TestDialog()
{
int i=0;
static String description = "Dialog test";
static String init ="Initial\nvalue";
static String buttonname[] = {
"LabelOK",
"LabelCancel",
NULL
};
DialogWindow(description,init,&i,&i,buttonname);
}
/* The dialog command callback */
static XtCallbackProc
DialogOk(w, client_data, call_data)
Widget w;
XtPointer client_data, call_data;
{
Arg args[1];
Cardinal iargs=0;
Widget dialog = (Widget) client_data;
char *lstr;
iargs=0;
XtSetArg(args[iargs], XtNstring, &lstr);iargs++;
XtGetValues( dialog, args, iargs);
str=(char *) MALLOC( (strlen(lstr)+1)*(sizeof(char)));
if (str != 0)
{ int ind ;
strcpy(str,lstr);
ind = strlen(str) - 1 ;
if (str[ind] == '\n') str[ind] = '\0' ;
}
else
Scistring("Malloc : No more place");
ok_Flag_sci= 1;
}
/* The cancel command callback */
static XtCallbackProc
DialogCancel(w,client_data,callData)
Widget w;
XtPointer client_data, callData;
{
ok_Flag_sci = -1;
}
void
DialogWindow(description,valueinit,nd,nv,buttonname)
char *description, *valueinit, **buttonname;
int *nv, *nd;
{
Arg args[10];
Cardinal iargs = 0;
Widget shell,dialog,dialogpanned,label,okbutton,wid,labelviewport,cform;
static Display *dpy = (Display *) NULL;
ShellFormCreate("dialogShell",&shell,&dialogpanned,&dpy);
/* Create a Viewport+Label and resize it */
ViewpLabelCreate(dialogpanned,&label,&labelviewport,description);
iargs=0;
XtSetArg(args[iargs], XtNstring ,valueinit) ; iargs++;
dialog = XtCreateManagedWidget("ascii",asciiTextWidgetClass,dialogpanned, args, iargs);
iargs=0;
cform = XtCreateManagedWidget("cform",formWidgetClass,dialogpanned,args,iargs);
ButtonCreate(cform,&okbutton,(XtCallbackProc)DialogOk,
(XtPointer) dialog,buttonname[0],"ok");
ButtonCreate(cform,&wid,(XtCallbackProc)DialogCancel,
(XtPointer) NULL,buttonname[1],"cancel");
XtMyLoop(shell,dpy);
if (ok_Flag_sci == -1) *nv=0;
}
|