summaryrefslogtreecommitdiff
path: root/navit/osd.c
diff options
context:
space:
mode:
authormartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-04-01 10:38:20 +0000
committermartin-s <martin-s@ffa7fe5e-494d-0410-b361-a75ebd5db220>2009-04-01 10:38:20 +0000
commita9f28a5a6a72e85862af93aeb5251b2ebf738d18 (patch)
treeb3e58fc98e238d124abeefc648f4898251f26c56 /navit/osd.c
parent7f27de946ea7599f27938cdcdc05f0e6fde05c1d (diff)
downloadnavit-svn-a9f28a5a6a72e85862af93aeb5251b2ebf738d18.tar.gz
Add:Core:Improved command handling
git-svn-id: http://svn.code.sf.net/p/navit/code/trunk/navit@2177 ffa7fe5e-494d-0410-b361-a75ebd5db220
Diffstat (limited to 'navit/osd.c')
-rw-r--r--navit/osd.c24
1 files changed, 20 insertions, 4 deletions
diff --git a/navit/osd.c b/navit/osd.c
index f18abe65..4df2126d 100644
--- a/navit/osd.c
+++ b/navit/osd.c
@@ -147,6 +147,10 @@ osd_set_std_attr(struct attr **attrs, struct osd_item *item, int flags)
if (attr)
item->osd_configuration = attr->u.num;
+ attr=attr_search(attrs, NULL, attr_enable_expression);
+ if (attr)
+ item->enable_expression = g_strdup(attr->u.str);
+
attr = attr_search(attrs, NULL, attr_w);
if (attr) {
if (attr->u.num > ATTR_REL_MAXABS) {
@@ -208,11 +212,23 @@ osd_set_std_attr(struct attr **attrs, struct osd_item *item, int flags)
void
osd_std_config(struct osd_item *item, struct navit *navit)
{
- struct attr osd_configuration;
+ struct attr attr;
dbg(1,"enter\n");
- if (!navit_get_attr(navit, attr_osd_configuration, &osd_configuration, NULL))
- osd_configuration.u.num=-1;
- item->configured = !!(osd_configuration.u.num & item->osd_configuration);
+ if (item->enable_expression) {
+ int error,configured;
+ attr.type=attr_navit;
+ attr.u.navit=navit;
+ configured=command_evaluate_to_int(&navit, item->enable_expression, &error);
+ if (error) {
+ dbg(0,"evaluating %s resulted in error %d\n", item->enable_expression, error);
+ configured=0;
+ }
+ item->configured = !!configured;
+ } else {
+ if (!navit_get_attr(navit, attr_osd_configuration, &attr, NULL))
+ attr.u.num=-1;
+ item->configured = !!(attr.u.num & item->osd_configuration);
+ }
graphics_overlay_disable(item->gr, !item->configured);
}