File: xmen_mdial.c

package info (click to toggle)
scilab 4.0-12
  • links: PTS
  • area: non-free
  • in suites: etch, etch-m68k
  • size: 100,640 kB
  • ctags: 57,333
  • sloc: ansic: 377,889; fortran: 242,862; xml: 179,819; tcl: 42,062; sh: 10,593; ml: 9,441; makefile: 4,377; cpp: 1,354; java: 621; csh: 260; yacc: 247; perl: 130; lex: 126; asm: 72; lisp: 30
file content (170 lines) | stat: -rw-r--r-- 4,621 bytes parent folder | download | duplicates (2)
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
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
/* Copyright ENPC */
#include "../sci_mem_alloc.h"
#ifdef WIN32 
#include "wmen_scilab.h"
#else
#include "men_scilab.h"
#endif

extern MDialog SciMDialog;        /** used to stored the mdialog data **/

extern void ShellFormCreate(char *shellname, Widget *shell, Widget *form, Display **dpyh);
int mDialogWindow(void);

/*************************************************     
 * Ok Callback 
 **********************************************************/

extern void ShellFormCreate(char *shellname, Widget *shell, Widget *form, Display **dpyh);
static Widget  *dialoglist;
static int ok_Flag_sci;

static XtCallbackProc
mDialogOk(Widget w, int nv, caddr_t callData)
{ int ind,i,ns;
  Arg args[2];
  Cardinal iargs;
  String str1;
  for (i=0; i < nv ; i++) {
    iargs=0;
    XtSetArg(args[iargs], XtNstring, &str1); iargs++ ;
    XtGetValues(dialoglist[i],args,iargs);
    ns=strlen(str1);
    if ( ns != strlen( SciMDialog.pszName[i]))
    {
      char *p;
      p = (char *) realloc((char*) SciMDialog.pszName[i], (ns+1)*sizeof(char));
      if ( p == (char *) 0)
	{
	  SciMDialog.ierr=1;
	  return(0);
	}
      else 
	{
	  SciMDialog.pszName[i] = p ;
	}
    }
    strcpy(SciMDialog.pszName[i] ,str1);
    ind = ns - 1 ;
    if ( SciMDialog.pszName[i][ind] == '\n' ) SciMDialog.pszName[i][ind] = '\0' ;
  }
  FREE(dialoglist);
  ok_Flag_sci = 1;
  return(0);
}

/*************************************************     
 * cancel Callback 
 **********************************************************/

static XtCallbackProc 
mDialogCancel(Widget w, int nv, caddr_t callData)
{ 
  mDialogOk(w,nv,callData);
  ok_Flag_sci = -1;
  return(0);
}

/*************************************************     
 * Widgets creation 
 **********************************************************/

int mDialogWindow(void)
{
  Arg args[10];
  Cardinal iargs = 0;
  Dimension maxh1,maxw1,maxw2,maxh2,w1,w2,h1,h2;
  int i,mxdesc,mxini,siz;
  Widget shell,label,kform; 
  Widget lviewport, dviewport,dform1,dform,ok,cancel,cform;
  static Display *dpy = (Display *) NULL;

  /* Top shell with a form inside */

  ShellFormCreate("mdialogShell",&shell,&dform,&dpy);

  /* Create a Viewport+Label and resize it */

  ViewpLabelCreate(dform,&label,&lviewport,SciMDialog.labels);

  iargs=0;
  dviewport = XtCreateManagedWidget("dViewport",viewportWidgetClass,
				      dform, args, iargs);
  iargs=0;
  dform1 = XtCreateManagedWidget("form",formWidgetClass,
				      dviewport, args, iargs);

  /* Allocate an array of Widgets */
  dialoglist=(Widget *)MALLOC( (SciMDialog.nv)*sizeof(Widget));
  if ( dialoglist == (Widget *) NULL) 
    {
      Scistring("Malloc : No more place");
      /** Warning : ierr is not realy used up to now 	ierr=1; **/
      return(FALSE);
    }
  
  /* Compute common sizes for ascii and labels  */

  mxdesc=5;
  mxini=5;
  for (i=0 ; i<SciMDialog.nv ; i++) 
    {
      siz=strlen(SciMDialog.pszTitle[i]);mxdesc=Max(siz,mxdesc);
      siz=strlen(SciMDialog.pszName[i]);  mxini=Max(siz,mxini);
    }
  mxini=Min(mxini+10,60);

  /* Widgets creation */
  kform = (Widget)0;
  for (i=0 ; i<SciMDialog.nv ; i++) 
      {
	iargs=0;
	XtSetArg(args[iargs], XtNfromVert,kform);iargs++;
	kform=XtCreateManagedWidget("kForm",formWidgetClass,dform1,
				      args,iargs);
	iargs=0;
	label=XtCreateManagedWidget("kLabel",labelWidgetClass,kform,
				    args,iargs);
	iargs=0;
	XtSetArg(args[iargs], XtNfromHoriz ,label) ; iargs++;
	dialoglist[i]=XtCreateManagedWidget("kAscii",asciiTextWidgetClass,
					    kform,args,iargs);
	if (i==0) 
	  {
	    /* chaque label sera mis a (w1,h1) 
	       et chaque ascii sera mis a (w2,h2) 
	       on regarde aussi la taille global prise par 
	       un label+un ascii de 60 caracteres pour limiter ensuite 
	       la fenetre globale
	       */
	    LabelSize(label,mxdesc+1,1,&w1,&h1);
	    AsciiSize(dialoglist[0],mxini,1,&w2,&h2);
	    h1=Max(h1,h2);
	    LabelSize(label,60,1,&maxw1,&maxh1);
	    AsciiSize(dialoglist[0],60,1,&maxw2,&maxh2);
	    maxw1=Max(maxw1,maxw2);
	    maxh1=Max(maxh1,maxh2);
	  }
	SetLabel(label,SciMDialog.pszTitle[i],w1,h1);
	SetAscii(dialoglist[i],SciMDialog.pszName[i],w2,h1);
      }

  /* Buttons */
  iargs=0;
  cform = XtCreateManagedWidget("cform",formWidgetClass,dform,args,iargs);
  
  ButtonCreate(cform,&ok,(XtCallbackProc)mDialogOk,(XtPointer) SciMDialog.nv,"Ok","ok");
  ButtonCreate(cform,&cancel,(XtCallbackProc)mDialogCancel,(XtPointer) SciMDialog.nv,"Cancel","cancel");

  XtMyLoop(shell,dpy,0,&ok_Flag_sci);
  if (ok_Flag_sci == -1) 
    {
      SciMDialog.nv=0;
      return(FALSE);
    }
  else 
    {
      return(TRUE);
    }
}