aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorlecoanet2001-03-30 12:18:07 +0000
committerlecoanet2001-03-30 12:18:07 +0000
commit96295926362f1aa093d138ef25cef3505551e4fe (patch)
tree18fc9c4d614af2a4e6cf28b59a443f665522bcae
parentc894fbcb56b5d7f5e1cf0bd3c17dcf27aec80b91 (diff)
downloadtkzinc-96295926362f1aa093d138ef25cef3505551e4fe.zip
tkzinc-96295926362f1aa093d138ef25cef3505551e4fe.tar.gz
tkzinc-96295926362f1aa093d138ef25cef3505551e4fe.tar.bz2
tkzinc-96295926362f1aa093d138ef25cef3505551e4fe.tar.xz
Modification afin que itemconfigure et itemcget retournent
des tableaux � la place des r�f�rences sur des tableaux. M�nage de la fonction AttributeToObj par la m�me occasion.
-rw-r--r--generic/Item.c158
1 files changed, 58 insertions, 100 deletions
diff --git a/generic/Item.c b/generic/Item.c
index 1a15218..2e8050a 100644
--- a/generic/Item.c
+++ b/generic/Item.c
@@ -197,8 +197,9 @@ static int ConfigureField(FieldSet field_set, unsigned int field,
int argc, Tcl_Obj *CONST argv[], int *flags);
static int QueryField(FieldSet field_set, unsigned int field,
int argc, Tcl_Obj *CONST argv[]);
-static Tcl_Obj *AttributeToObj(WidgetInfo *wi, char *record,
- ZnAttrConfig *desc, char *buffer);
+static void AttributeToObj(WidgetInfo *wi, char *record,
+ ZnAttrConfig *desc, char *buffer,
+ Tcl_Obj *result);
static void FieldImageChange(ClientData client_data, int x, int y, int width,
int height, int image_width, int image_height);
static void FieldTileChange(ClientData client_data, int x, int y, int width,
@@ -287,32 +288,20 @@ AttributesInfo(Item item,
entries[1] = NewStringObj(attribute_type_strings[desc->type]);
entries[2] = NewBooleanObj(desc->read_only ? 1 : 0);
entries[3] = NewStringObj("");
- entries[4] = AttributeToObj(wi, record, desc, buffer);
-#ifdef PTK0
- l = Tcl_Merge(5, entries);
- Tcl_SetObjResult(wi->interp, l);
-#else
+ entries[4] = NewStringObj("");
+ AttributeToObj(wi, record, desc, buffer, entries[4]);
Tcl_SetObjResult(wi->interp, Tcl_NewListObj(5, entries));
-#endif
}
else {
-#ifdef PTK0
- Tcl_Obj *o;
-#endif
l = Tcl_GetObjResult(wi->interp);
while (desc->type != ZN_CONFIG_END) {
entries[0] = NewStringObj(desc->name);
entries[1] = NewStringObj(attribute_type_strings[desc->type]);
entries[2] = NewBooleanObj(desc->read_only ? 1 : 0);
entries[3] = NewStringObj("");
- entries[4] = AttributeToObj(wi, record, desc, buffer);
-#ifdef PTK0
- o = NULL;
- LangSetArg(&o, Tcl_Merge(5, entries));
- Tcl_ListObjAppendElement(wi->interp, l, o);
-#else
+ entries[4] = NewStringObj("");
+ AttributeToObj(wi, record, desc, buffer, entries[4]);
Tcl_ListObjAppendElement(wi->interp, l, Tcl_NewListObj(5, entries));
-#endif
desc++;
}
}
@@ -1202,33 +1191,32 @@ ConfigureAttributes(char *record,
*
**********************************************************************************
*/
-static Tcl_Obj *
+static void
AttributeToObj(WidgetInfo *wi,
char *record,
ZnAttrConfig *desc,
- char *buffer)
+ char *buffer,
+ Tcl_Obj *result)
{
- Tcl_Obj *result = NULL;
char *valp = record + desc->offset;
char *str = "";
- Tcl_Obj *o, *objs[4];
+ Tcl_Obj *o;
int i;
-#ifdef PTK0
- Tcl_Obj **tmp=NULL;
-#endif
switch (desc->type) {
case ZN_CONFIG_COLOR:
if (*((XColor **) valp)) {
- result = NewStringObj(ZnNameOfColor(*((XColor **) valp)));
+ str = ZnNameOfColor(*((XColor **) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
}
break;
case ZN_CONFIG_BOOL:
- result = NewBooleanObj(ISSET(*((char *) valp), desc->bool_bit)?1:0);
+ Tcl_SetBooleanObj(result, ISSET(*((char *) valp), desc->bool_bit)?1:0);
break;
case ZN_CONFIG_PATTERN:
if (*((Pixmap *) valp)) {
- result = NewStringObj(Tk_NameOfBitmap(wi->dpy, *((Pixmap *) valp)));
+ str = Tk_NameOfBitmap(wi->dpy, *((Pixmap *) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
}
break;
case ZN_CONFIG_PATTERNS:
@@ -1236,15 +1224,10 @@ AttributeToObj(WidgetInfo *wi,
int num_pats=0;
Pixmap *pats;
-#ifndef PTK0
- result = Tcl_NewListObj(0, NULL);
-#endif
if (*((ZnList *) valp)) {
pats = (Pixmap *) ZnListArray(*((ZnList *) valp));
num_pats = ZnListSize(*((ZnList *) valp));
-#ifdef PTK0
- tmp = (Tcl_Obj **) ZnMalloc(num_pats * sizeof(Tcl_Obj *));
-#endif
+
for (i = 0; i < num_pats; i++) {
if (pats[i] != ZnUnspecifiedPattern) {
o = NewStringObj(Tk_NameOfBitmap(wi->dpy, pats[i]));
@@ -1252,17 +1235,9 @@ AttributeToObj(WidgetInfo *wi,
else {
o = NewStringObj("");
}
-#ifdef PTK0
- tmp[i] = o;
-#else
Tcl_ListObjAppendElement(wi->interp, result, o);
-#endif
}
}
-#ifdef PTK0
- result = Tcl_Merge(num_pats, tmp);
- ZnFree(tmp);
-#endif
break;
}
case ZN_CONFIG_TAGS:
@@ -1270,45 +1245,33 @@ AttributeToObj(WidgetInfo *wi,
int num_tags=0;
Tk_Uid *tags;
-#ifndef PTK0
- result = Tcl_NewListObj(0, NULL);
-#endif
if (*((ZnList *) valp)) {
tags = (Tk_Uid *) ZnListArray(*((ZnList *) valp));
num_tags = ZnListSize(*((ZnList *) valp));
-#ifdef PTK0
- tmp = (Tcl_Obj **) ZnMalloc(num_tags * sizeof(Tcl_Obj *));
-#endif
for (i = 0; i < num_tags; i++) {
-#ifdef PTK0
- tmp[i] = NewStringObj(tags[i]);
-#else
Tcl_ListObjAppendElement(wi->interp, result,
NewStringObj(tags[i]));
-#endif
}
}
-#ifdef PTK0
- result = Tcl_Merge(num_tags, tmp);
- ZnFree(tmp);
-#endif
break;
}
case ZN_CONFIG_TEXT:
case ZN_CONFIG_MAP_INFO:
case ZN_CONFIG_IMAGE:
- result = NewStringObj(*((char **) valp));
+ str = *((char **) valp);
+ Tcl_SetStringObj(result, str, strlen(str));
break;
case ZN_CONFIG_FONT:
if (*((Tk_Font *) valp)) {
- result = NewStringObj(Tk_NameOfFont(*((Tk_Font *) valp)));
+ str = Tk_NameOfFont(*((Tk_Font *) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
}
break;
case ZN_CONFIG_BORDER:
{
Border border = *((Border *) valp);
if (border == NO_BORDER) {
- result = NewStringObj(NO_BORDER_SPEC);
+ Tcl_SetStringObj(result, NO_BORDER_SPEC, strlen(NO_BORDER_SPEC));
break;
}
buffer[0] = 0;
@@ -1350,7 +1313,7 @@ AttributeToObj(WidgetInfo *wi,
}
strcat(buffer, COUNTER_OBLIQUE_SPEC);
}
- result = NewStringObj(buffer);
+ Tcl_SetStringObj(result, buffer, strlen(buffer));
}
break;
case ZN_CONFIG_LINE_SHAPE:
@@ -1379,7 +1342,7 @@ AttributeToObj(WidgetInfo *wi,
str = DOUBLE_LEFT_CORNER_SPEC;
break;
}
- result = NewStringObj(str);
+ Tcl_SetStringObj(result, str, strlen(str));
break;
}
case ZN_CONFIG_LINE_STYLE:
@@ -1399,7 +1362,7 @@ AttributeToObj(WidgetInfo *wi,
str = DOTTED_SPEC;
break;
}
- result = NewStringObj(str);
+ Tcl_SetStringObj(result, str, strlen(str));
break;
}
case ZN_CONFIG_LINE_END:
@@ -1407,7 +1370,8 @@ AttributeToObj(WidgetInfo *wi,
ZnLineEnd line_end = *((ZnLineEnd *) valp);
if (line_end) {
- result = NewStringObj(LineEndGetString(line_end));
+ str = LineEndGetString(line_end);
+ Tcl_SetStringObj(result, str, strlen(str));
}
break;
}
@@ -1416,51 +1380,46 @@ AttributeToObj(WidgetInfo *wi,
ZnGradientGeom gg = *((ZnGradientGeom *) valp);
if (gg) {
- result = NewStringObj(GradientGeomGetString(gg));
+ str = GradientGeomGetString(gg);
+ Tcl_SetStringObj(result, str, strlen(str));
}
break;
}
case ZN_CONFIG_RELIEF:
- result = NewStringObj(Tk_NameOfRelief(*((ReliefStyle *) valp)));
+ str = Tk_NameOfRelief(*((ReliefStyle *) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
break;
case ZN_CONFIG_JOIN_STYLE:
- result = NewStringObj(Tk_NameOfJoinStyle(*((int *) valp)));
+ str = Tk_NameOfJoinStyle(*((int *) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
break;
case ZN_CONFIG_CAP_STYLE:
- result = NewStringObj(Tk_NameOfCapStyle(*((int *) valp)));
+ str = Tk_NameOfCapStyle(*((int *) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
break;
case ZN_CONFIG_POINT:
{
- objs[0] = NewDoubleObj(((ZnPoint *) valp)->x);
- objs[1] = NewDoubleObj(((ZnPoint *) valp)->y);
-#ifdef PTK0
- result = Tcl_Merge(2, objs);
-#else
- result = Tcl_NewListObj(2, objs);
-#endif
+ Tcl_ListObjAppendElement(wi->interp, result, NewDoubleObj(((ZnPoint *) valp)->x));
+ Tcl_ListObjAppendElement(wi->interp, result, NewDoubleObj(((ZnPoint *) valp)->y));
break;
}
case ZN_CONFIG_RECT:
{
- objs[0] = NewDoubleObj(((ZnRect *) valp)->x);
- objs[1] = NewDoubleObj(((ZnRect *) valp)->y);
- objs[2] = NewDoubleObj(((ZnRect *) valp)->w);
- objs[3] = NewDoubleObj(((ZnRect *) valp)->h);
-#ifdef PTK0
- result = Tcl_Merge(4, objs);
-#else
- result = Tcl_NewListObj(4, objs);
-#endif
+ Tcl_ListObjAppendElement(wi->interp, result, NewDoubleObj(((ZnRect *) valp)->x));
+ Tcl_ListObjAppendElement(wi->interp, result, NewDoubleObj(((ZnRect *) valp)->y));
+ Tcl_ListObjAppendElement(wi->interp, result, NewDoubleObj(((ZnRect *) valp)->w));
+ Tcl_ListObjAppendElement(wi->interp, result, NewDoubleObj(((ZnRect *) valp)->h));
break;
}
case ZN_CONFIG_ITEM:
if (*((Item *) valp) != ZN_NO_ITEM) {
- result = NewLongObj((*((Item *) valp))->id);
+ Tcl_SetLongObj(result, (*((Item *) valp))->id);
}
break;
case ZN_CONFIG_WINDOW:
if (*((ZnWindow *) valp) != NULL) {
- result = NewStringObj(Tk_PathName(*((ZnWindow *) valp)));
+ str = Tk_PathName(*((ZnWindow *) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
}
break;
case ZN_CONFIG_INT:
@@ -1468,20 +1427,23 @@ AttributeToObj(WidgetInfo *wi,
case ZN_CONFIG_DIM:
case ZN_CONFIG_PRI:
case ZN_CONFIG_ANGLE:
- result = Tcl_NewIntObj(*((int *) valp));
+ Tcl_SetIntObj(result, *((int *) valp));
break;
case ZN_CONFIG_JUSTIFY:
- result = NewStringObj(Tk_NameOfJustify(*((ZnJustify *) valp)));
+ str = Tk_NameOfJustify(*((ZnJustify *) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
break;
case ZN_CONFIG_ANCHOR:
- result = NewStringObj(Tk_NameOfAnchor(*((Tk_Anchor *) valp)));
+ str = Tk_NameOfAnchor(*((Tk_Anchor *) valp));
+ Tcl_SetStringObj(result, str, strlen(str));
break;
case ZN_CONFIG_LABEL_FORMAT:
{
ZnLabelFormat frmt = *((ZnLabelFormat *) valp);
if (frmt) {
- result = NewStringObj(LabelFormatGetString(frmt));
+ str = LabelFormatGetString(frmt);
+ Tcl_SetStringObj(result, str, strlen(str));
}
break;
}
@@ -1490,7 +1452,8 @@ AttributeToObj(WidgetInfo *wi,
AutoAlign *aa = (AutoAlign *) valp;
int i;
if (aa->automatic == False) {
- result = NewStringObj("-");
+ str = "-";
+ Tcl_SetStringObj(result, str, strlen(str));
}
else {
buffer[0] = 0;
@@ -1508,7 +1471,7 @@ AttributeToObj(WidgetInfo *wi,
break;
}
}
- result = NewStringObj(buffer);
+ Tcl_SetStringObj(result, buffer, strlen(buffer));
}
}
break;
@@ -1538,14 +1501,9 @@ AttributeToObj(WidgetInfo *wi,
}
ptr = buffer;
}
- result = NewStringObj(ptr);
+ Tcl_SetStringObj(result, ptr, strlen(ptr));
}
}
-
- if (result == NULL) {
- result = NewStringObj("");
- }
- return result;
}
@@ -1590,9 +1548,9 @@ QueryAttribute(char *record,
return ZN_ERROR;
}
else if (attr_uid == desc->uid) {
- result = AttributeToObj(wi, record, desc, buffer);
- Tcl_SetObjResult(wi->interp, result);
-#ifdef PTK
+ result = Tcl_GetObjResult(wi->interp);
+ AttributeToObj(wi, record, desc, buffer, result);
+#ifdef PTK0
Tcl_DecrRefCount(result);
#endif
break;