|
|
1.1 root 1: /*
2: hierarchical menu test
3: dfn() [f1] gets called when moving to a pop-aside menu
4: also gets called when moving off right edge of any
5: non-heirarchical menu!--f3 gets called immediately after!
6: bfn() [f2] gets called when moving back to a lower menu
7: also gets called after f3 -- once per pop-aside menu
8: hfn() [f3] gets called when item is selected
9: */
10:
11: #include "menu.h"
12: #include "jerq.h"
13:
14: #define DEFHEIGHT 14
15: #define CLEARLN { rectf(&display,Rpt(Drect.org, \
16: Pt(Drect.cor.x,Drect.org.y+DEFHEIGHT)),F_CLR);}
17: #define PRINT(S) {printf("%s\n",S);}
18: #define oPRINT(S) { CLEARLN; \
19: string(&defont,(S),&display,Drect.org,F_STORE);}
20: void quit(), f1(), f2(), f3();
21:
22: static NMenu m1, m2, m3, m4;
23: NMitem item1[] = {
24: "gods", "help me please!", 0,f1,f2,f3,0,
25: "men", "help me please!", 0,f1,f2,f3,1,
26: "art", "help me please!", 0,f1,f2,f3,2,
27: "snarf","help me please!", 0,f1,f2,f3,3,
28: 0
29: };
30: NMitem item2[] = {
31: "add all","help me please!", 0,f1,f2,f3,4,
32: "free all","help me please!", &m2,f1,f2,f3,5,
33: "move","help me please!", 0,f1,f2,f3,6,
34: "top","help me please!", 0,f1,f2,f3,7,
35: "bottom","help me please!", 0,f1,f2,f3,8,
36: "mark/unmark","help me please!", &m1,f1,f2,f3,9,
37: "free","help me please!", 0,f1,f2,f3,10,
38: "add all","help me please!", 0,f1,f2,f3,4,
39: "free all","help me please!", &m2,f1,f2,f3,5,
40: "move","help me please!", 0,f1,f2,f3,6,
41: "top","help me please!", 0,f1,f2,f3,7,
42: "bottom","help me please!", 0,f1,f2,f3,8,
43: "mark/unmark","help me please!", &m1,f1,f2,f3,9,
44: "free","help me please!", 0,f1,f2,f3,10,
45: "add all","help me please!", 0,f1,f2,f3,4,
46: "free all","help me please!", &m2,f1,f2,f3,5,
47: "move","help me please!", 0,f1,f2,f3,6,
48: "top","help me please!", 0,f1,f2,f3,7,
49: "bottom","help me please!", 0,f1,f2,f3,8,
50: "mark/unmark","help me please!", &m1,f1,f2,f3,9,
51: "free","help me please!", 0,f1,f2,f3,10,
52: 0
53: };
54: NMitem item3[] ={
55: "save","help me please!", 0,f1,f2,f3,11,
56: "read","help me please!", &m4,f1,f2,f3,12,
57: "quit","help me please!", 0,f1,f2,f3,13,
58: 0
59: };
60: #ifdef old
61: NMitem item1[] = {
62: "gods", "help me please!", 0,0,0,0,0,
63: "men", "help me please!", 0,0,0,0,1,
64: "art", "help me please!", 0,0,0,0,2,
65: "philosophy","help me please!", 0,0,0,0,3,
66: 0
67: };
68: NMitem item2[] = {
69: "add all","help me please!", 0,0,0,0,4,
70: "free all","help me please!", &m2,0,0,0,5,
71: "move","help me please!", 0,0,0,0,6,
72: "top","help me please!", 0,0,0,0,7,
73: "bottom","help me please!", 0,0,0,0,8,
74: "mark/unmark","help me please!", &m1,0,0,0,9,
75: "free","help me please!", 0,0,0,0,10,
76: 0
77: };
78: NMitem item3[] ={
79: "save","help me please!", 0,0,0,0,11,
80: "read","help me please!", &m4,0,0,0,12,
81: "quit","help me please!", 0,0,0,0,13,
82: 0
83: };
84: #endif
85: int a = 0;
86: int b = 0;
87: int c = 0;
88: char str[50];
89: char *s = str;
90:
91: NMitem*
92: gen_func(n)
93: int n;
94: {
95: static NMitem men_item[4];
96:
97: men_item[0].text = "zero";
98: men_item[1].text = "one";
99: men_item[2].text = "two";
100: men_item[3].text = 0;
101: men_item[0].data = 0;
102: men_item[1].data = 1;
103: men_item[2].data = 2;
104: men_item[3].data = 0;
105:
106: if(n > 2)
107: return &men_item[3];
108: return &men_item[n];
109: }
110:
111: main (argc, argv)
112: int argc;
113: char **argv;
114: {
115: NMitem *gen_func();
116: NMitem *temp;
117:
118: request(MOUSE);
119: initdisplay(argc, argv);
120: m1.item = item1;
121: m2.item = item2;
122: m3.item = item3;
123: m4.item = 0;
124: m4.generator = gen_func;
125: for(;;){
126: nap(1);
127: if(button1() && (temp = hmenuhit(&m1,1))){
128: switch(temp->data){
129: case 0:
130: PRINT("m1, case 0");
131: break;
132: case 1:
133: PRINT("m1, case 1");
134: break;
135: case 2:
136: PRINT("m1, case 2");
137: break;
138: case 3:
139: PRINT("m1, case 3");
140: break;
141: }
142: /* while(button1())
143: nap(1);*/
144: }
145: else if(button2() && (temp = hmenuhit(&m2,2))){
146: switch(temp->data){
147: case 0:
148: PRINT("m1, case 0");
149: break;
150: case 1:
151: PRINT("m1, case 1");
152: break;
153: case 2:
154: PRINT("m1, case 2");
155: break;
156: case 3:
157: PRINT("m1, case 3");
158: break;
159: case 4:
160: PRINT("m2, case 0");
161: break;
162: case 5:
163: PRINT("m2, case 1");
164: break;
165: case 6:
166: PRINT("m2, case 2");
167: break;
168: case 7:
169: PRINT("m2, case 3");
170: break;
171: case 8:
172: PRINT("m2, case 4");
173: break;
174: case 9:
175: PRINT("m2, case 5");
176: break;
177: case 10:
178: PRINT("m2, case 6");
179: break;
180: }
181: /* while(button2())
182: nap(2);*/
183: }
184: else if(button3() && (temp = hmenuhit(&m3,3))){
185: switch(temp->data){
186: case 0:
187: PRINT("m4, case 0");
188: break;
189: case 1:
190: PRINT("m4, case 1");
191: break;
192: case 2:
193: PRINT("m4, case 2");
194: break;
195: case 11:
196: PRINT("m3, case 0");
197: break;
198: case 12:
199: PRINT("m3, case 1");
200: break;
201: case 13:
202: quit();
203: break;
204: }
205: /* while(button3())
206: nap(1);*/
207: }
208: }
209: }
210:
211: void
212: quit()
213: {
214: PRINT("quitting soon");
215: exit();
216: }
217:
218: void
219: f1()
220: {
221: sprintf(s,"f1(): a = %d",a);
222: PRINT(s);
223: /* nap(2);*/
224: a++;
225: }
226:
227: void
228: f2()
229: {
230: sprintf(s,"f2(): b = %d",b);
231: PRINT(s);
232: /* nap(2);*/
233: b++;
234: }
235:
236: void
237: f3()
238: {
239: sprintf(s,"f3(): c = %d",c);
240: PRINT(s);
241: /* nap(2);*/
242: c++;
243: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.