static int set_float3(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { const float *vec3; float v[3]; switch(t->type) { case TOKEN_VECTOR_FLOAT: switch(t->t_elements) { case 3: vec3 = t->t_float_vector_int; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s': invalid vector size %d", a->name, t->t_elements); } break; case TOKEN_FLOAT: v[0] = v[1] = v[2] = t->t_float; vec3 = v; break; case TOKEN_INT: v[0] = v[1] = v[2] = t->t_int; vec3 = v; break; case TOKEN_VOID: v[0] = v[1] = v[2] = 0; vec3 = v; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a vec3, got %s", a->name, token2name(t)); } glw_t *w = ec->w; const glw_class_t *gc = w->glw_class; int r = gc->gc_set_float3 ? gc->gc_set_float3(w, a->attrib, vec3) : -1; if(r == -1) { TRACE(TRACE_DEBUG, "GLW", "Widget %s at %s:%d does not respond to attribute %s", gc->gc_name, rstr_get(t->file), t->line, a->name); return 0; } if(r) attr_need_refresh(w->glw_root, t, a, r); return 0; }
static int set_int16_4(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int16_t v[4]; switch(t->type) { case TOKEN_VECTOR_FLOAT: switch(t->t_elements) { case 4: v[0] = t->t_float_vector_int[0]; v[1] = t->t_float_vector_int[1]; v[2] = t->t_float_vector_int[2]; v[3] = t->t_float_vector_int[3]; break; case 2: v[0] = t->t_float_vector_int[0]; v[1] = t->t_float_vector_int[1]; v[2] = t->t_float_vector_int[0]; v[3] = t->t_float_vector_int[1]; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s': invalid vector size %d", a->name, t->t_elements); } break; case TOKEN_FLOAT: v[0] = v[1] = v[2] = v[3] = t->t_float; break; case TOKEN_INT: v[0] = v[1] = v[2] = v[3] = t->t_int; break; case TOKEN_VOID: v[0] = v[1] = v[2] = v[3] = 0; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a vec4, got %s", a->name, token2name(t)); } void (*fn)(struct glw *w, const int16_t *v4) = a->fn; fn(ec->w, v); return 0; }
static int mod_hidden(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v = 0; if(t->type == TOKEN_INT) v = t->t_int; else if(t->type == TOKEN_FLOAT) v = t->t_float > 0.5; else if(t->type == TOKEN_VOID) v = 0; else return glw_view_seterr(ec->ei, t, "Invalid assignment for attribute %s", a->name); glw_t *w = ec->w; if(v) { if(w->glw_flags & GLW_HIDDEN) return 0; glw_hide(w); } else { if(!(w->glw_flags & GLW_HIDDEN)) return 0; glw_unhide(w); } glw_need_refresh(w->glw_root, 0); return 0; }
static int set_source(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { glw_t *w = ec->w; switch(t->type) { case TOKEN_VOID: if(w->glw_class->gc_set_source != NULL) w->glw_class->gc_set_source(w, NULL); break; case TOKEN_CSTRING: if(w->glw_class->gc_set_source != NULL) w->glw_class->gc_set_source(w, t->t_cstring); break; case TOKEN_RSTRING: case TOKEN_LINK: if(w->glw_class->gc_set_source != NULL) w->glw_class->gc_set_source(w, rstr_get(t->t_rstring)); break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a string or scalar not %s", a->name, token2name(t)); } return 0; }
static int set_path(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { glw_t *w = ec->w; rstr_t *r; void (*fn)(glw_t *w, rstr_t *r) = a->fn; switch(t->type) { case TOKEN_VOID: fn(w, NULL); return 0; case TOKEN_RSTRING: case TOKEN_LINK: r = t->t_rstring; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a string or scalar not %s", a->name, token2name(t)); } r = fa_absolute_path(r, t->file); fn(w, r); rstr_release(r); return 0; }
static int set_float3(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { const float *vec3; float v[3]; switch(t->type) { case TOKEN_VECTOR_FLOAT: switch(t->t_elements) { case 3: vec3 = t->t_float_vector; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s': invalid vector size %d", a->name, t->t_elements); } break; case TOKEN_FLOAT: v[0] = v[1] = v[2] = t->t_float; vec3 = v; break; case TOKEN_INT: v[0] = v[1] = v[2] = t->t_int; vec3 = v; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a vec3, got %s", a->name, token2name(t)); } void (*fn)(struct glw *w, const float *v3) = a->fn; fn(ec->w, vec3); return 0; }
static int set_align(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v; if(t->type != TOKEN_IDENTIFIER || (v = str2val(rstr_get(t->t_rstring), aligntab)) < 0) return glw_view_seterr(ec->ei, t, "Invalid assignment for attribute %s", a->name); ec->w->glw_alignment = v; return 0; }
static int set_propref(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { if(t->type != TOKEN_PROPERTY_REF) return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a property ref, got %s", a->name, token2name(t)); glw_set(ec->w, a->attrib, t->t_prop, NULL); return 0; }
static int set_transition_effect(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v; if(t->type != TOKEN_IDENTIFIER || (v = str2val(rstr_get(t->t_rstring), transitiontab)) < 0) return glw_view_seterr(ec->ei, t, "Invalid assignment for attribute %s", a->name); glw_set(ec->w, GLW_ATTRIB_TRANSITION_EFFECT, v, NULL); return 0; }
static int set_caption(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { char buf[30]; const char *str; prop_str_type_t type = 0; switch(t->type) { case TOKEN_VOID: str = NULL; break; case TOKEN_CSTRING: str = t->t_cstring; break; case TOKEN_RSTRING: type = t->t_rstrtype; /* FALLTHRU */ case TOKEN_LINK: str = rstr_get(t->t_rstring); break; case TOKEN_INT: snprintf(buf, sizeof(buf), "%d", t->t_int); str = buf; break; case TOKEN_FLOAT: snprintf(buf, sizeof(buf), "%f", t->t_float); str = buf; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a string or scalar, got %s", a->name, token2name(t)); } if(ec->w->glw_class->gc_set_caption != NULL) ec->w->glw_class->gc_set_caption(ec->w, str, type); return 0; }
static int set_rstring(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { rstr_t *rstr; char buf[30]; void (*fn)(struct glw *w, rstr_t *str) = a->fn; switch(t->type) { case TOKEN_VOID: buf[0] = 0; break; case TOKEN_CSTRING: rstr = rstr_alloc(t->t_cstring); fn(ec->w, rstr); rstr_release(rstr); return 0; case TOKEN_RSTRING: case TOKEN_LINK: fn(ec->w, t->t_rstring); return 0; case TOKEN_INT: snprintf(buf, sizeof(buf), "%d", t->t_int); break; case TOKEN_FLOAT: snprintf(buf, sizeof(buf), "%f", t->t_float); break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a string or scalar, got %s", a->name, token2name(t)); } rstr = rstr_alloc(buf); fn(ec->w, rstr); rstr_release(rstr); return 0; }
static int set_string(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { char buf[30]; const char *str; switch(t->type) { case TOKEN_VOID: str = ""; break; case TOKEN_CSTRING: str = t->t_cstring; break; case TOKEN_RSTRING: case TOKEN_LINK: str = rstr_get(t->t_rstring); break; case TOKEN_INT: snprintf(buf, sizeof(buf), "%d", t->t_int); str = buf; break; case TOKEN_FLOAT: snprintf(buf, sizeof(buf), "%f", t->t_float); str = buf; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a string or scalar, got %s", a->name, token2name(t)); } void (*fn)(struct glw *w, const char *str) = a->fn; fn(ec->w, str); return 0; }
static int set_number(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v; switch(t->type) { case TOKEN_CSTRING: v = atoi(t->t_cstring); set_number_int(ec->w, a, t, v); break; case TOKEN_RSTRING: case TOKEN_LINK: v = atoi(rstr_get(t->t_rstring)); set_number_int(ec->w, a, t, v); break; case TOKEN_FLOAT: set_number_float(ec->w, a, t, t->t_float); break; case TOKEN_INT: set_number_int(ec->w, a, t, t->t_int); break; case TOKEN_VOID: set_number_int(ec->w, a, t, 0); break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a scalar, got %s", a->name, token2name(t)); } return 0; }
static int set_int(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v; switch(t->type) { case TOKEN_CSTRING: v = atoi(t->t_cstring); break; case TOKEN_RSTRING: case TOKEN_LINK: v = atoi(rstr_get(t->t_rstring)); break; case TOKEN_FLOAT: v = t->t_float; break; case TOKEN_INT: v = t->t_int; break; case TOKEN_VOID: v = 0; break; default: return glw_view_seterr(ec->ei, t, "Attribute '%s' expects a scalar, got %s", a->name, token2name(t)); } void (*fn)(struct glw *w, int v) = a->fn; if(fn) fn(ec->w, v); else glw_set(ec->w, a->attrib, v, NULL); return 0; }
static int mod_hidden(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v = 0; if(t->type == TOKEN_INT) v = t->t_int; else if(t->type == TOKEN_FLOAT) v = t->t_float > 0.5; else if(t->type == TOKEN_VOID) v = 0; else return glw_view_seterr(ec->ei, t, "Invalid assignment for attribute %s", a->name); if(v) glw_hide(ec->w); else glw_unhide(ec->w); return 0; }
static int mod_flag(glw_view_eval_context_t *ec, const token_attrib_t *a, struct token *t) { int v = 0; if(t->type == TOKEN_INT) v = t->t_int; else if(t->type == TOKEN_FLOAT) v = t->t_float > 0.5; else if(t->type == TOKEN_VOID) v = 0; else return glw_view_seterr(ec->ei, t, "Invalid assignment for attribute %s", a->name); void (*fn)(glw_t *w, int set, int clr) = a->fn; if(v) fn(ec->w, a->attrib, 0); else fn(ec->w, 0, a->attrib); return 0; }