ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/deliantra/server/crossedit/CrList.c
Revision: 1.1.1.1 (vendor branch)
Committed: Fri Feb 3 07:11:43 2006 UTC (18 years, 3 months ago) by root
Content type: text/plain
Branch: UPSTREAM
CVS Tags: UPSTREAM_2006_03_15, LAST_C_VERSION, UPSTREAM_2006_02_22, difficulty_fix_merge_060810_2300, UPSTREAM_2006_02_03
Branch point for: difficulty_fix
Changes since 1.1: +0 -0 lines
Log Message:
initial import

File Contents

# User Rev Content
1 root 1.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