Annotation of rpl/modules/motif/XtCreateWidget.rplc, revision 1.5
1.1 bertrand 1: #include "src/rplexternals.h"
2: #include "motif.h"
3:
4: declareExternalFunction(XtCreateWidget)
5: declareObject(nameObject);
6: declareObject(classObject);
7: declareObject(parentObject);
8: declareObject(parametersObject);
9: declareObject(list);
10: declareObject(directive);
1.3 bertrand 11: declareObject(widget);
12:
13: declareInteger(value);
1.1 bertrand 14:
15: declareDaisyChain(current);
16: declareDaisyChain(current2);
17:
18: char target(name);
19: char target(class);
1.3 bertrand 20: char target(cvalue);
1.5 ! bertrand 21: char target(command);
1.1 bertrand 22:
1.2 bertrand 23: ArgList args;
1.1 bertrand 24: Cardinal argNum;
1.2 bertrand 25: String argument;
1.1 bertrand 26: WidgetClass wc;
1.3 bertrand 27: XmString x_string;
1.1 bertrand 28:
29: HEADER
30: declareHelpString("Create a Motif widget\n"
31: " 4: name\n"
32: " 3: class\n"
33: " 2: parent\n"
34: " 1: { parameters }\n"
35: " -> 1: widget\n");
36: numberOfArguments(4);
37: FUNCTION
38: if (initializationDone eq true) then
39: pullFromStack(parametersObject, list);
40: returnOnError(freeObject(parametersObject));
41:
42: pullFromStack(parentObject, external);
43: returnOnError(freeObject(parametersObject);
44: freeObject(parentObject));
45:
1.5 ! bertrand 46: ifIsExternal(parentObject, WIDGET) then
1.4 bertrand 47: orElse
48: executionError("Type mismatch error");
49: returnOnError(freeObject(parametersObject);
50: freeObject(parentObject));
51: endIf
52:
1.1 bertrand 53: pullFromStack(classObject, string);
54: returnOnError(freeObject(parametersObject);
55: freeObject(parentObject);
56: freeObject(classObject));
57:
58: pullFromStack(nameObject, string);
59: returnOnError(freeObject(parametersObject);
60: freeObject(parentObject);
61: freeObject(classObject);
62: freeObject(nameObject));
63:
64: getString(classObject, class);
65: getString(nameObject, name);
66:
67: Xm_widgets_classes(class, wc);
68:
69: returnOnError(freeObject(parametersObject);
70: freeObject(parentObject);
71: freeObject(classObject);
72: freeObject(nameObject));
73:
74: getDaisyChainFromList(parametersObject, current);
75: argNum = 0;
76:
77: repeatWhile(not nullified(current))
78: list = fetchElementFromDaisyChain(current);
79:
80: ifIsList(list) then
81: getDaisyChainFromList(list, current2);
82:
83: if (nullified(current2)) then
84: executionError("Too few arguments");
85: returnOnError(freeObject(parametersObject);
86: freeObject(parentObject);
87: freeObject(classObject);
88: freeObject(nameObject));
89: endIf
90:
91: ifIsString(fetchElementFromDaisyChain(current2)) then
92: orElse
93: executionError("Type mismatch error");
94: returnOnError(freeObject(parametersObject);
95: freeObject(parentObject);
96: freeObject(classObject);
97: freeObject(nameObject));
98: endIf
99:
100: current2 = nextElementOfDaisyChain(current2);
101:
102: if (nullified(current2)) then
103: executionError("Too few arguments");
104: returnOnError(freeObject(parametersObject);
105: freeObject(parentObject);
106: freeObject(classObject);
107: freeObject(nameObject));
108: endIf
109:
110: directive = fetchElementFromDaisyChain(current2);
111:
112: ifIsInteger(directive) then
113: orElse
114: ifIsString(directive) then
115: orElse
116: ifIsName(directive) then
117: orElse
118: executionError("Type mismatch error");
119: returnOnError(freeObject(parametersObject);
120: freeObject(parentObject);
121: freeObject(classObject);
122: freeObject(nameObject));
123: endIf
124: endIf
125: endIf
126:
127: current2 = nextElementOfDaisyChain(current2);
128:
129: if (not nullified(current2)) then
130: executionError("Type mismatch error");
131: returnOnError(freeObject(parametersObject);
132: freeObject(parentObject);
133: freeObject(classObject);
134: freeObject(nameObject));
135: endIf
136: orElse
137: executionError("Type mismatch error");
138: returnOnError(freeObject(parametersObject);
139: freeObject(parentObject);
140: freeObject(classObject);
141: freeObject(nameObject));
142: endIf
143:
144: current = nextElementOfDaisyChain(current);
145: postIncr(argNum);
146: endWhile
1.2 bertrand 147:
1.5 ! bertrand 148: uprintf("%d\n", argNum);
1.2 bertrand 149: args = allocate(size(Arg) * argNum);
150: argNum = 0;
151: getDaisyChainFromList(parametersObject, current);
152:
153: repeatWhile(not nullified(current))
154: list = fetchElementFromDaisyChain(current);
155: getDaisyChainFromList(list, current2);
1.5 ! bertrand 156: getString(fetchElementFromDaisyChain(current2), command);
1.2 bertrand 157: current2 = nextElementOfDaisyChain(current2);
158:
1.5 ! bertrand 159: XmN_constants(command, argument);
1.2 bertrand 160:
161: returnOnError(freeObject(parametersObject);
162: freeObject(parentObject);
163: freeObject(classObject);
164: freeObject(nameObject));
165:
1.3 bertrand 166: ifIsExternal(fetchElementFromDaisyChain(current2), WIDGET) then
1.5 ! bertrand 167: if ((strcmp(command, "XmNtopWidget") eq 0) or
! 168: (strcmp(command, "XmNbottomWidget") eq 0) or
! 169: (strcmp(command, "XmNleftWidget") eq 0) or
! 170: (strcmp(command, "XmNrightWidget") eq 0)) then
! 171: /*
1.3 bertrand 172: XtSetArg(args[argNum], argument,
173: (XtArgVal) (*((sXtAppContext *)
174: objectContainer(fetchElementFromDaisyChain(
175: current2)))).widget);
1.5 ! bertrand 176: */
! 177: XtSetArg(args[argNum], argument,
! 178: (XtArgVal) target((Widget *) objectContainer(
! 179: fetchElementFromDaisyChain(current2))));
1.3 bertrand 180: orElse
181: executionError("Wait for XmN*Widget");
182: deallocate(args);
183: returnOnError(freeObject(parametersObject);
184: freeObject(parentObject);
185: freeObject(classObject);
186: freeObject(nameObject));
187: endIf
188: elseIfIsName(fetchElementFromDaisyChain(current2)) then
189: directive = fetchElementFromDaisyChain(current2);
190: dupObject(directive);
191: intrinsic(pshcntxt);
192: pushOnStack(directive);
193: intrinsic(eval);
194: pullFromStack(directive, unknown);
195: intrinsic(pulcntxt);
1.2 bertrand 196:
1.3 bertrand 197: ifIsInteger(directive) then
198: getInteger(directive, value);
199: XtSetArg(args[argNum], argument, (XtArgVal) value);
200: elseIfIsExternal(directive, WIDGET) then
1.5 ! bertrand 201: if ((strcmp(command, "XmNtopWidget") eq 0) or
! 202: (strcmp(command, "XmNbottomWidget") eq 0) or
! 203: (strcmp(command, "XmNleftWidget") eq 0) or
! 204: (strcmp(command, "XmNrightWidget") eq 0)) then
! 205: XtSetArg(args[argNum], argument,
! 206: (XtArgVal) target((Widget *) objectContainer(
! 207: directive)));
1.3 bertrand 208: orElse
209: executionError("Wait for XmN*Widget");
210: deallocate(args);
211: returnOnError(freeObject(parametersObject);
212: freeObject(parentObject);
213: freeObject(classObject);
214: freeObject(nameObject));
215: endIf
216: endIf
217: elseIfIsInteger(fetchElementFromDaisyChain(current2)) then
218: getInteger(fetchElementFromDaisyChain(current2), value);
219: XtSetArg(args[argNum], argument, (XtArgVal) value);
220: orElse // Allowed types are integer, name, widget or string
221: getString(fetchElementFromDaisyChain(current2), cvalue);
222: x_string = XmStringCreate(cvalue, XmFONTLIST_DEFAULT_TAG);
223: XtSetArg(args[argNum], argument, (XtArgVal) x_string);
224: endIf
1.5 ! bertrand 225:
! 226: current = nextElementOfDaisyChain(current);
! 227: postIncr(argNum);
1.2 bertrand 228: endWhile
229:
1.3 bertrand 230: createExternalObject(widget, WIDGET);
1.5 ! bertrand 231: objectContainer(widget) = allocate(size(Widget));
1.3 bertrand 232:
233: target((Widget *) objectContainer(widget)) =
1.5 ! bertrand 234: XtCreateWidget(name, wc, target((Widget *)
! 235: objectContainer(parentObject)), args, argNum);
1.3 bertrand 236: XtManageChild(target((Widget *) objectContainer(widget)));
237:
238: pushOnStack(widget);
239: deallocate(args);
1.1 bertrand 240: orElse
241: executionError("Application not initialized");
242: returnOnError();
243: endIf
244:
1.3 bertrand 245: freeObject(parametersObject);
246: freeObject(parentObject);
247: freeObject(classObject);
248: freeObject(nameObject);
1.1 bertrand 249: END
250: endExternalFunction
1.3 bertrand 251:
252: // vim: ts=4
CVSweb interface <joel.bertrand@systella.fr>