aboutsummaryrefslogtreecommitdiff
path: root/generic/Item.c
diff options
context:
space:
mode:
authorlecoanet2002-05-16 07:52:52 +0000
committerlecoanet2002-05-16 07:52:52 +0000
commit8747cffbde2d152d495488e875f9140a2782b20c (patch)
treeb6522ed64c394385773fafe2e2ad8ce1803438c1 /generic/Item.c
parent451cf260d0093cedbc66fe37e7c941b961334053 (diff)
downloadtkzinc-8747cffbde2d152d495488e875f9140a2782b20c.zip
tkzinc-8747cffbde2d152d495488e875f9140a2782b20c.tar.gz
tkzinc-8747cffbde2d152d495488e875f9140a2782b20c.tar.bz2
tkzinc-8747cffbde2d152d495488e875f9140a2782b20c.tar.xz
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).
Diffstat (limited to 'generic/Item.c')
-rw-r--r--generic/Item.c208
1 files changed, 71 insertions, 137 deletions
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);
}