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
commit4d8d1a1bcdf14b5ab8c95deaa9e56652740ad845 (patch)
treeb3e58fc98e238d124abeefc648f4898251f26c56 /navit/osd.c
parent568aaa0ec7c868c0c0b1e7a76a431a9e1631c792 (diff)
downloadnavit-4d8d1a1bcdf14b5ab8c95deaa9e56652740ad845.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 f18abe652..4df2126df 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);
}