ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/crossedit/CrList.c
Revision: 1.2
Committed: Sun Aug 13 17:16:01 2006 UTC (17 years, 9 months ago) by elmex
Content type: text/plain
Branch: MAIN
CVS Tags: HEAD
Changes since 1.1: +0 -0 lines
State: FILE REMOVED
Log Message:
Made server compile with C++.
Removed cfanim plugin and crossedit.
C++ here we come.

File Contents

# Content
1 #include <Posix.h>
2 #include <App.h>
3 #include <X11.h>
4 #include <X11/IntrinsicP.h>
5 #include <X11/StringDefs.h>
6 #include <debug.h>
7
8 #include <CrListP.h>
9 #include <CrUtil.h>
10
11 /**********************************************************************
12 * resources
13 **********************************************************************/
14
15 #define Offset(field) XtOffsetOf(CrListRec,crList.field)
16 static XtResource resources[] = {
17
18 { XtNselectCallback,XtCSelectCallback,XtRCallback,sizeof(XtPointer),
19 Offset(selectCallbacks),XtRCallback,NULL },
20
21 { XtNinsertCallback,XtCInsertCallback,XtRCallback,sizeof(XtPointer),
22 Offset(insertCallbacks),XtRCallback,NULL },
23
24 { XtNdeleteCallback,XtCDeleteCallback,XtRCallback,sizeof(XtPointer),
25 Offset(deleteCallbacks),XtRCallback,NULL },
26
27 { XtNnext, XtCNext,XtRPointer,sizeof(XtPointer),
28 Offset(next),XtRPointer,NULL },
29
30 { XtNpackage,XtCPackage,XtRPointer,sizeof(XtPointer),
31 Offset(caller),XtRPointer,NULL },
32
33 { XtNfont, XtCFont, XtRFontStruct, sizeof(XFontStruct *),
34 Offset(font),XtRString, XtDefaultFont},
35
36 { XtNforeground, XtCForeground, XtRPixel, sizeof(Pixel),
37 Offset(foreground), XtRString, XtDefaultForeground},
38 };
39 #undef Offset
40
41 /**********************************************************************
42 * declarations
43 **********************************************************************/
44
45 static void ClassInitialize();
46 static void Initialize(Widget req,Widget new,Arg args[],Cardinal *num);
47 static void Destroy(Widget w);
48 static void Resize(Widget w);
49 static void Redisplay(Widget w,XEvent *event,Region region);
50 static Boolean SetValues(Widget cur,Widget req,Widget new,
51 Arg args[],Cardinal *num);
52 static void Insert(Widget,XEvent*,String*,Cardinal*);
53 static void Select(Widget,XEvent*,String*,Cardinal*);
54 static void Delete(Widget,XEvent*,String*,Cardinal*);
55
56 /**********************************************************************
57 * actions & translations
58 **********************************************************************/
59
60 static XtActionsRec actionsList[] = {
61 {"insert", Insert},
62 {"select", Select},
63 {"delete", Delete},
64 };
65
66 static char defaultTranslations[] = "\
67 <Btn1Up>: insert() \n\
68 <Btn2Up>: select() \n\
69 <Btn3Up>: delete() \n\
70 ";
71
72 /**********************************************************************
73 * class
74 **********************************************************************/
75
76 CrListClassRec crListClassRec = {
77 { /*** Core ***/
78 /* superclass */ (WidgetClass) &widgetClassRec,
79 /* class_name */ "CrList",
80 /* widget_size */ sizeof(CrListRec) ,
81 /* class_initialize */ ClassInitialize ,
82 /* class_part_initialize */ NULL ,
83 /* class_inited */ FALSE ,
84 /* initialize */ Initialize,
85 /* initialize_hook */ NULL,
86 /* realize */ XtInheritRealize,
87 /* actions */ actionsList,
88 /* num_actions */ XtNumber(actionsList),
89 /* resources */ resources,
90 /* num_resources */ XtNumber(resources),
91 /* xrm_class */ NULLQUARK,
92 /* compress_motion */ TRUE,
93 /* compress_exposure */ TRUE,
94 /* compress_enterleave */ TRUE,
95 /* visible_interest */ FALSE,
96 /* destroy */ Destroy,
97 /* resize */ Resize,
98 /* expose */ Redisplay,
99 /* set_values */ SetValues,
100 /* set_values_hook */ NULL,
101 /* set_values_almost */ XtInheritSetValuesAlmost,
102 /* get_values_hook */ NULL,
103 /* accept_focus */ NULL,
104 /* version */ XtVersion,
105 /* callback_private */ NULL,
106 /* tm_table */ defaultTranslations,
107 /* query_geometry */ XtInheritQueryGeometry,
108 /* display_accelerator */ XtInheritDisplayAccelerator,
109 /* extension */ NULL
110 },
111 { /*** CrList ***/
112 /* empty */ 0,
113 }
114 };
115
116 WidgetClass crListWidgetClass = (WidgetClass)&crListClassRec;
117
118 /**********************************************************************
119 * privates
120 **********************************************************************/
121
122 static void SetSize(Widget w)
123 {
124 CrListWidget self = (CrListWidget)w;
125 int i = 0;
126 Dimension width,height,rWidth,rHeight;
127 CrListNode node = 0;
128
129 /*** find out size ***/
130 if (!self->crList.next) {
131 debug ("No Next function for CrListWidget!\n");
132 return;
133 }
134
135 do {
136 node = self->crList.next
137 ((XtPointer)self->crList.caller, (XtPointer)node);
138 i++;
139 } while (node);
140
141 height = --i * FontSize;
142 width = self->core.width;
143
144 /*** do request from parent container ***/
145 switch(XtMakeResizeRequest(w,width,height,&rWidth,&rHeight)) {
146 case XtGeometryYes:
147 case XtGeometryNo:
148 break;
149 case XtGeometryAlmost:
150 width = rWidth;
151 height = rHeight;
152 XtMakeResizeRequest(w,width,height,&rWidth,&rHeight);
153 break;
154 default:
155 XtAppWarning(XtWidgetToApplicationContext(w),
156 "CrList: unknown geometry return");
157 break;
158 }
159 debug3("CrList-%s-Setting size to %dx%d\n",
160 XtName(w),
161 self->core.width,
162 self->core.height);
163 }
164
165 /*
166 * function: get y's node in list from top
167 * y : index
168 * return :
169 */
170 CrListNode GetYNode (Widget w, int y)
171 {
172 CrListWidget self = (CrListWidget)w;
173 CrListNode node = NULL;
174 int i = 0;
175
176 if (!self->crList.next) {
177 debug ("No Next function for CrListWidget!\n");
178 return 0;
179 }
180
181 node = self->crList.next ((XtPointer)self->crList.caller, (XtPointer)0);
182 for (i = 0; node && i < y; i++)
183 node = self->crList.next
184 ((XtPointer)self->crList.caller, (XtPointer)node);
185
186 return (node);
187 }
188
189 /* hmm */
190 CrListCall GetYCall (Widget w, int y)
191 {
192 CrListNode node = GetYNode (w, y);
193 static struct _CrListCall ret;
194
195 ret.index = -1; /* empty list */
196 ret.node = NULL;
197 if (!node)
198 return &ret;
199 ret.index = y;
200 ret.node = node->ptr;
201 return &ret;
202 }
203
204 /**********************************************************************
205 * actions procedures
206 **********************************************************************/
207
208 static void Insert(Widget w,XEvent *e,String *argv,Cardinal *argc)
209 {
210 CrListWidget self = (CrListWidget)w;
211 CrListCall ret = GetYCall(w, e->xbutton.y / FontSize);
212
213 if (!self->crList.insertCallbacks)
214 return;
215 debug2("CrList-%s-Insert() %d\n",XtName(w),ret->index);
216
217 XtCallCallbackList (w,self->crList.insertCallbacks, (XtPointer) ret);
218 SetSize(w);
219 Redisplay(w,e,NULL);
220 }
221
222 static void Select(Widget new,XEvent *e,String *argv,Cardinal *argc)
223 {
224 CrListWidget self = (CrListWidget)new;
225 CrListCall ret = GetYCall(new, e->xbutton.y / FontSize);
226
227 if (ret->index < 0) return;
228 debug1("%s-Select()\n",self->core.name);
229 XtCallCallbackList (new,self->crList.selectCallbacks, (XtPointer) ret);
230 }
231
232 static void Delete(Widget new,XEvent *e,String *argv,Cardinal *argc)
233 {
234 CrListWidget self = (CrListWidget)new;
235 CrListCall ret = GetYCall(new, e->xbutton.y / FontSize);
236
237 if (ret->index < 0 || !self->crList.deleteCallbacks)
238 return;
239 debug2("CrList-%s-Delete() %d\n",XtName(new),ret->index);
240 XtCallCallbackList (new,self->crList.deleteCallbacks, (XtPointer) ret);
241 SetSize(new);
242 Redisplay(new,e,NULL);
243 }
244
245 /**********************************************************************
246 * members
247 **********************************************************************/
248
249 static void ClassInitialize()
250 {
251 debug0("CrList-ClassInitialize()\n");
252 }
253
254 static void Initialize(Widget req,Widget new,Arg args[],Cardinal *num)
255 {
256 CrListWidget w = (CrListWidget)new;
257 XGCValues values;
258
259 debug1("CrList-%s-Initialize()\n",XtName(new));
260 if(w->crList.caller == NULL)
261 CnvDie(new,"Object has no container");
262
263 if (!w->core.width)
264 w->core.width++;
265 SetSize(new);
266 w->crList.gc = GCCreate (new);
267 values.font = w->crList.font->fid;
268 values.foreground = w->crList.foreground;
269 w->crList.normal_GC = XtGetGC
270 (new, (unsigned) (GCForeground | GCFont), &values);
271 }
272
273 static void Destroy(Widget w)
274 {
275 /* CrListWidget self = (CrListWidget)w; */
276 debug1("CrList-%s-Destroy()\n",XtName(w));
277 }
278
279 static void Resize(Widget w)
280 {
281 /* CrListWidget self = (CrListWidget)w; */
282 debug0("Resize()\n");
283 }
284
285
286 static void Redisplay(Widget w,XEvent *event,Region region)
287 {
288 CrListWidget self = (CrListWidget)w;
289 CrListNode node;
290 int y;
291 XRectangle rect;
292
293 debug0("CrList-Redisplay()\n");
294
295 if (region) {
296 XClipBox(region,&rect);
297 rect.height = rect.height / FontSize + 2;
298 rect.y /= FontSize;
299 XClearArea(XtDisplay(w),XtWindow(w), 0, rect.y * FontSize,
300 0, rect.height * FontSize - 1, False);
301 } else {
302 rect.y = 0;
303 XClearWindow (XtDisplay(w),XtWindow(w));
304 }
305 node = (CrListNode)GetYNode(w, rect.y);
306
307 for (y = rect.y; node && (!region || rect.height--); y++) {
308 debug2 ("%s Drawing %s\n", self->core.name,node->name);
309 /*DrawObject(w,0,y,node);*/
310 DrawFacePart(w, self->crList.gc, node->face, 0, y * FontSize, 0, 0);
311 XDrawString(XtDisplay(w),XtWindow(w),
312 self->crList.normal_GC
313 /*DefaultGCOfScreen(XtScreen(w))*/,
314 FontSize + 8, y * FontSize + 16,
315 node->name,strlen(node->name));
316 node = self->crList.next
317 ((XtPointer)self->crList.caller, (XtPointer)node);
318 }
319 }
320
321 static Boolean SetValues(Widget cur,Widget req,Widget new,
322 Arg args[],Cardinal *num)
323 {
324 /* CrListWidget self = (CrListWidget)new; */
325 debug0("SetValues()\n");
326 SetSize(new);
327 return True;
328 }
329
330 /**********************************************************************
331 * public
332 **********************************************************************/
333
334 /*** end of CrList.c ***/
335
336
337
338
339
340
341
342