From 8747cffbde2d152d495488e875f9140a2782b20c Mon Sep 17 00:00:00 2001 From: lecoanet Date: Thu, 16 May 2002 07:52:52 +0000 Subject: Mise en coh�rence des types d'attributs avec la doc. Retablissement du controle de la validit� des attributs dans itemconfigure m�me lorsqu'un tag est utilis�. Adaptation suite au changement du code des gestion des images et des fontes. Correction dans les lineshapes des types lineleftcorner et linedoubleleftcorner qui �taient confondus avec leur analogues droits. Adaptation suite aux modifications sur les fonctions de recherche de tags (chemin de tag). Sortie d'un message d'erreur lorsqu'un item n'est pas trouv� comme valeur d'attribut. Correction du code de specification des angles (voir �galement Geo.c). --- generic/Item.c | 208 ++++++++++++++++++++------------------------------------- 1 file changed, 71 insertions(+), 137 deletions(-) (limited to 'generic/Item.c') diff --git a/generic/Item.c b/generic/Item.c index 23abdff..b13db38 100644 --- a/generic/Item.c +++ b/generic/Item.c @@ -66,18 +66,17 @@ static ZnList item_stack = NULL; */ static char *attribute_type_strings[] = { "", - "color", "boolean", - "pattern", - "patterns", - "text", + "bitmap", + "bitmaplist", + "string", "font", - "border", + "edgelist", "relief", "dimension", "priority", - "justify", - "autojustify", + "alignment", + "autoalignment", "lineend", "labelformat", "linestyle", @@ -87,16 +86,15 @@ static char *attribute_type_strings[] = { "integer", "unsignedint", "point", - "rectangle", "anchor", - "tags", + "taglist", "mapinfo", "image", "leaderanchors", "joinstyle", "capstyle", "gradient", - "gradients", + "gradientlist", "window", "alpha", }; @@ -222,11 +220,9 @@ ZnConfigureAttributes(WidgetInfo *wi, desc = attr_desc; while (True) { if (desc->type == ZN_CONFIG_END) { - /* - * No attribute found, do _not_ report an error - * this is very counter productive when using tags. - */ - break; + Tcl_AppendResult(wi->interp, "unknown attribute \"", + Tcl_GetString(args[i]), "\"", NULL); + return ZN_ERROR; } else if (attr_uid == desc->uid) { if (desc->read_only) { @@ -237,29 +233,6 @@ ZnConfigureAttributes(WidgetInfo *wi, valp = ((char *) record) + desc->offset; /*printf("record <0x%X>, valp <0x%X>, offset %d\n", record, valp, desc->offset);*/ switch (desc->type) { - case ZN_CONFIG_COLOR: - { - XColor *color; - Tk_Uid new_name = Tk_GetUid(Tcl_GetString(args[i+1])); - char *name = NULL; - if (*((XColor **) valp)) { - name = ZnNameOfColor(*((XColor **) valp)); - } - if (name != new_name) { - color = ZnGetColor(wi->interp, wi->win, new_name); - if (!color) { - Tcl_AppendResult(wi->interp, " color expected for attribute \"", - Tcl_GetString(args[i]), "\"", NULL); - return ZN_ERROR; - } - if (*((XColor **) valp)) { - ZnFreeColor(*((XColor **) valp)); - } - *((XColor **) valp) = color; - *flags |= desc->flags; - } - break; - } case ZN_CONFIG_GRADIENT: { ZnGradient *g; @@ -284,7 +257,7 @@ ZnConfigureAttributes(WidgetInfo *wi, } break; } - case ZN_CONFIG_GRADIENTS: + case ZN_CONFIG_GRADIENT_LIST: { ZnList new_grad_list = NULL; ZnGradient **grads; @@ -359,35 +332,42 @@ ZnConfigureAttributes(WidgetInfo *wi, } break; } - case ZN_CONFIG_PATTERN: + case ZN_CONFIG_IMAGE: + case ZN_CONFIG_BITMAP: { - Pixmap pattern = ZnUnspecifiedPattern; - char *name = ""; - if (*((Pixmap *) valp) != ZnUnspecifiedPattern) { - name = Tk_NameOfBitmap(wi->dpy, *((Pixmap *) valp)); + ZnImage image = ZnUnspecifiedImage; + char *msg, *name = ""; + if (*((ZnImage *) valp) != ZnUnspecifiedImage) { + name = ZnNameOfImage(*((ZnImage *) valp)); } str = Tcl_GetString(args[i+1]); if (strcmp(name, str) != 0) { if (strlen(str) != 0) { - pattern = Tk_GetBitmap(wi->interp, wi->win, Tk_GetUid(str)); - if (pattern == None) { - Tcl_AppendResult(wi->interp, " pattern expected for attribute \"", - Tcl_GetString(args[i]), "\"", NULL); + if (desc->type == ZN_CONFIG_IMAGE) { + image = ZnGetImage(wi, str); + msg = " image expected for attribute \""; + } + else{ + image = ZnGetBitmap(wi, str); + msg = " pattern expected for attribute \""; + } + if (image == ZnUnspecifiedImage) { + Tcl_AppendResult(wi->interp, msg, Tcl_GetString(args[i]), "\"", NULL); return ZN_ERROR; } } - if (*((Pixmap *) valp) != ZnUnspecifiedPattern) { - Tk_FreeBitmap(wi->dpy, *((Pixmap *) valp)); + if (*((ZnImage *) valp) != ZnUnspecifiedImage) { + ZnFreeImage(*((ZnImage *) valp)); } - *((Pixmap *) valp) = pattern; + *((ZnImage *) valp) = image; *flags |= desc->flags; } break; } - case ZN_CONFIG_PATTERNS: + case ZN_CONFIG_BITMAP_LIST: { ZnList new_pat_list = NULL; - Pixmap *pats; + ZnImage *pats; int num_pats, j, k; Tcl_Obj **elems; @@ -405,19 +385,19 @@ ZnConfigureAttributes(WidgetInfo *wi, for (j = 0; j < num_pats; j++) { str = Tcl_GetString(elems[j]); if (strlen(str) != 0) { - pats[j] = Tk_GetBitmap(wi->interp, wi->win, Tk_GetUid(str)); + pats[j] = ZnGetBitmap(wi, str); if (pats[j] == None) { Tcl_AppendResult(wi->interp, " unknown pattern \"", str, "\" in pattern list", NULL); for (k = 0; k < j; k++) { - Tk_FreeBitmap(wi->dpy, pats[k]); + ZnFreeImage(pats[k]); } ZnListFree(new_pat_list); return ZN_ERROR; } } else { - pats[j] = ZnUnspecifiedPattern; + pats[j] = ZnUnspecifiedImage; } } } @@ -425,8 +405,8 @@ ZnConfigureAttributes(WidgetInfo *wi, num_pats = ZnListSize(*((ZnList *) valp)); pats = ZnListArray(*((ZnList *) valp)); for (j = 0; j < num_pats; j++) { - if (pats[j] != ZnUnspecifiedPattern) { - Tk_FreeBitmap(wi->dpy, pats[j]); + if (pats[j] != ZnUnspecifiedImage) { + ZnFreeImage(pats[j]); } } ZnListFree(*((ZnList *) valp)); @@ -441,7 +421,7 @@ ZnConfigureAttributes(WidgetInfo *wi, } break; } - case ZN_CONFIG_TAGS: + case ZN_CONFIG_TAG_LIST: { int num_tags, j; Tcl_Obj **elems; @@ -465,9 +445,8 @@ ZnConfigureAttributes(WidgetInfo *wi, } break; } - case ZN_CONFIG_TEXT: + case ZN_CONFIG_STRING: case ZN_CONFIG_MAP_INFO: - case ZN_CONFIG_IMAGE: { char *text = ""; str = Tcl_GetString(args[i+1]); @@ -507,7 +486,7 @@ ZnConfigureAttributes(WidgetInfo *wi, } break; } - case ZN_CONFIG_BORDER: + case ZN_CONFIG_EDGE_LIST: { Border border = NO_BORDER; int j, len, largc; @@ -573,13 +552,13 @@ ZnConfigureAttributes(WidgetInfo *wi, line_shape = LINE_LEFT_LIGHTNING; } else if (strncasecmp(str, RIGHT_CORNER_SPEC, len) == 0) { - line_shape = LINE_LEFT_CORNER; + line_shape = LINE_RIGHT_CORNER; } else if (strncasecmp(str, LEFT_CORNER_SPEC, len) == 0) { line_shape = LINE_LEFT_CORNER; } else if (strncasecmp(str, DOUBLE_RIGHT_CORNER_SPEC, len) == 0) { - line_shape = LINE_DOUBLE_LEFT_CORNER; + line_shape = LINE_DOUBLE_RIGHT_CORNER; } else if (strncasecmp(str, DOUBLE_LEFT_CORNER_SPEC, len) == 0) { line_shape = LINE_DOUBLE_LEFT_CORNER; @@ -711,35 +690,6 @@ ZnConfigureAttributes(WidgetInfo *wi, } break; } - case ZN_CONFIG_RECT: - { - ZnRect rect; - int largc; - Tcl_Obj **largv; - - if ((Tcl_ListObjGetElements(wi->interp, args[i+1], - &largc, &largv) == ZN_ERROR) || - largc != 4) { - rect_error: - Tcl_AppendResult(wi->interp, " rectangle expected for attribute \"", - Tcl_GetString(args[i]), "\"", NULL); - return ZN_ERROR; - } - if ((Tcl_GetDoubleFromObj(wi->interp, largv[0], &rect.x) == ZN_ERROR) || - (Tcl_GetDoubleFromObj(wi->interp, largv[1], &rect.y) == ZN_ERROR) || - (Tcl_GetDoubleFromObj(wi->interp, largv[2], &rect.w) == ZN_ERROR) || - (Tcl_GetDoubleFromObj(wi->interp, largv[3], &rect.h) == ZN_ERROR)) { - goto rect_error; - } - if ((rect.x != ((ZnRect *) valp)->x) && - (rect.y != ((ZnRect *) valp)->y) && - (rect.w != ((ZnRect *) valp)->w) && - (rect.h != ((ZnRect *) valp)->h)) { - *((ZnRect *) valp) = rect; - *flags |= desc->flags; - } - break; - } case ZN_CONFIG_DIM: { ZnDim dim; @@ -782,14 +732,16 @@ ZnConfigureAttributes(WidgetInfo *wi, Item item2; int result; TagSearch *search_var = NULL; + if (strlen(Tcl_GetString(args[i+1])) == 0) { item2 = ZN_NO_ITEM; } else { - result = ZnItemWithTagOrId(wi, args[i+1], wi->top_group, True, - &item2, &search_var); + result = ZnItemWithTagOrId(wi, args[i+1], &item2, &search_var); ZnTagSearchDestroy(search_var); if ((result == ZN_ERROR) || (item2 == ZN_NO_ITEM)) { + Tcl_AppendResult(wi->interp, " unknown item \"", + Tcl_GetString(args[i+1]), "\"", NULL); return ZN_ERROR; } } @@ -859,12 +811,6 @@ ZnConfigureAttributes(WidgetInfo *wi, switch (desc->type) { case ZN_CONFIG_ANGLE: integer = integer % 360; - if (integer == 0) { - integer = 360; - } - else if (integer < 0) { - integer = 360 + integer; - } break; case ZN_CONFIG_UINT: if (integer < 0) { @@ -886,7 +832,7 @@ ZnConfigureAttributes(WidgetInfo *wi, } break; } - case ZN_CONFIG_JUSTIFY: + case ZN_CONFIG_ALIGNMENT: { Tk_Justify justify; if (Tk_GetJustify(wi->interp, Tcl_GetString(args[i+1]), &justify) == ZN_ERROR) { @@ -945,7 +891,7 @@ ZnConfigureAttributes(WidgetInfo *wi, break; } - case ZN_CONFIG_AUTO_JUSTIFY: + case ZN_CONFIG_AUTO_ALIGNMENT: { AutoAlign aa; int j; @@ -1119,19 +1065,13 @@ AttributeToObj(WidgetInfo *wi, int i; switch (desc->type) { - case ZN_CONFIG_COLOR: - if (*((XColor **) valp)) { - str = ZnNameOfColor(*((XColor **) valp)); - Tcl_SetStringObj(result, str, strlen(str)); - } - break; case ZN_CONFIG_GRADIENT: if (*((ZnGradient **) valp)) { str = ZnNameOfGradient(*((ZnGradient **) valp)); Tcl_SetStringObj(result, str, strlen(str)); } break; - case ZN_CONFIG_GRADIENTS: + case ZN_CONFIG_GRADIENT_LIST: { int num_grads; ZnGradient **grads; @@ -1150,24 +1090,26 @@ AttributeToObj(WidgetInfo *wi, case ZN_CONFIG_BOOL: Tcl_SetBooleanObj(result, ISSET(*((unsigned short *) valp), desc->bool_bit)?1:0); break; - case ZN_CONFIG_PATTERN: - if (*((Pixmap *) valp)) { - str = Tk_NameOfBitmap(wi->dpy, *((Pixmap *) valp)); - Tcl_SetStringObj(result, str, strlen(str)); + case ZN_CONFIG_IMAGE: + case ZN_CONFIG_BITMAP: + str = ""; + if (*((ZnImage *) valp)) { + str = ZnNameOfImage(*((ZnImage *) valp)); } + Tcl_SetStringObj(result, str, strlen(str)); break; - case ZN_CONFIG_PATTERNS: + case ZN_CONFIG_BITMAP_LIST: { int num_pats=0; - Pixmap *pats; + ZnImage *pats; if (*((ZnList *) valp)) { - pats = (Pixmap *) ZnListArray(*((ZnList *) valp)); + pats = (ZnImage *) ZnListArray(*((ZnList *) valp)); num_pats = ZnListSize(*((ZnList *) valp)); for (i = 0; i < num_pats; i++) { - if (pats[i] != ZnUnspecifiedPattern) { - o = NewStringObj(Tk_NameOfBitmap(wi->dpy, pats[i])); + if (pats[i] != ZnUnspecifiedImage) { + o = NewStringObj(ZnNameOfImage(pats[i])); } else { o = NewStringObj(""); @@ -1177,7 +1119,7 @@ AttributeToObj(WidgetInfo *wi, } break; } - case ZN_CONFIG_TAGS: + case ZN_CONFIG_TAG_LIST: { int num_tags=0; Tk_Uid *tags; @@ -1192,19 +1134,19 @@ AttributeToObj(WidgetInfo *wi, } break; } - case ZN_CONFIG_TEXT: + case ZN_CONFIG_STRING: case ZN_CONFIG_MAP_INFO: - case ZN_CONFIG_IMAGE: str = *((char **) valp); Tcl_SetStringObj(result, str, strlen(str)); break; case ZN_CONFIG_FONT: + str = ""; if (*((Tk_Font *) valp)) { str = Tk_NameOfFont(*((Tk_Font *) valp)); - Tcl_SetStringObj(result, str, strlen(str)); } + Tcl_SetStringObj(result, str, strlen(str)); break; - case ZN_CONFIG_BORDER: + case ZN_CONFIG_EDGE_LIST: { Border border = *((Border *) valp); if (border == NO_BORDER) { @@ -1330,14 +1272,6 @@ AttributeToObj(WidgetInfo *wi, Tcl_ListObjAppendElement(wi->interp, result, NewDoubleObj(((ZnPoint *) valp)->y)); break; } - case ZN_CONFIG_RECT: - { - 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) { Tcl_SetLongObj(result, (*((Item *) valp))->id); @@ -1359,7 +1293,7 @@ AttributeToObj(WidgetInfo *wi, case ZN_CONFIG_DIM: Tcl_SetDoubleObj(result, *((ZnDim *) valp)); break; - case ZN_CONFIG_JUSTIFY: + case ZN_CONFIG_ALIGNMENT: str = Tk_NameOfJustify(*((ZnJustify *) valp)); Tcl_SetStringObj(result, str, strlen(str)); break; @@ -1377,7 +1311,7 @@ AttributeToObj(WidgetInfo *wi, } break; } - case ZN_CONFIG_AUTO_JUSTIFY: + case ZN_CONFIG_AUTO_ALIGNMENT: { AutoAlign *aa = (AutoAlign *) valp; int i; @@ -1951,11 +1885,11 @@ ConfigureItem(Item item, if (item->class->Configure(item, argc, argv, &flags) == ZN_ERROR) { return ZN_ERROR; } - if (item->class->has_fields && ISSET(flags, ZN_CLFC_FLAG)) { + if (item->class->GetFieldSet && ISSET(flags, ZN_CLFC_FLAG)) { FIELD.ClearFieldCache(item->class->GetFieldSet(item), -1); } } - else if (item->class->has_fields) { + else if (item->class->GetFieldSet) { if (FIELD.ConfigureField(item->class->GetFieldSet(item), field, argc, argv, &flags) == ZN_ERROR) { return ZN_ERROR; @@ -1996,7 +1930,7 @@ QueryItem(Item item, if (field < 0) { return item->class->Query(item, argc, argv); } - else if (item->class->has_fields) { + else if (item->class->GetFieldSet) { return FIELD.QueryField(item->class->GetFieldSet(item), field, argc, argv); } -- cgit v1.1