struct search_list *sl;
int ignore_button;
int menu_on_map_click;
+ int signal_on_map_click;
char *country_iso2;
int speech;
int keyboard;
static void
gui_internal_cmd2_back(struct gui_priv *this, char *function, struct attr **in, struct attr ***out, int *valid)
{
+ graphics_draw_mode(this->gra, draw_mode_begin);
gui_internal_back(this, NULL, NULL);
+ graphics_draw_mode(this->gra, draw_mode_end);
gui_internal_check_exit(this);
}
128:Show help
256:Use background for menu headline
512:Set osd_configuration and zoom to route when setting position
+ 1024:Don't show back button
+ 2048:No highlighting of keyboard
*/
w=gui_internal_box_new(this, gravity_left_center|orientation_horizontal|(this->flags & 1 ? 0:flags_fill));
w->spx=4*this->spacing;
w->w=menu->w;
gui_internal_widget_append(menu, w);
- if (this->flags & 16) {
+ if (this->flags & 16 && (!this->flags & 1024)) {
struct widget *wlb,*wb,*wm=w;
wm->flags=gravity_center|orientation_vertical|flags_expand|flags_fill;
w=gui_internal_box_new(this, gravity_center|orientation_horizontal|flags_expand|flags_fill);
flags=4|8|16|32|64;
break;
case 3:
- flags=1|8|16|32|64;
+ flags=1|8|16|32|64|128;
flags &= this->flags_town;
break;
case 4:
gui_internal_search_town_in_country(this, wm);
return;
case 5:
- flags=2|8|16|32|64;
+ flags=2|8|16|32|64|128;
flags &= this->flags_street;
break;
case 6:
- flags=8|16|32|64;
+ flags=8|16|32|64|128;
flags &= this->flags_house_number;
break;
default:
struct map_rect *mr=NULL;
struct item *item;
char *label_full,*l,*prefix="",*pos;
- int len,plen,hassub;
+ int len,plen,hassub,found=0;
struct widget *wb,*w,*wbm;
GHashTable *hash;
struct coord c;
w->spy=this->spacing*3;
gui_internal_widget_append(wb, w);
- if (wm && wm->prefix)
- prefix=wm->prefix;
+ if (data)
+ prefix=data;
+ else {
+ if (wm && wm->prefix)
+ prefix=wm->prefix;
+ }
plen=strlen(prefix);
if(navit_get_attr(this->nav, attr_bookmark_map, &mattr, NULL) && mattr.u.map && (mr=map_rect_new(mattr.u.map, NULL))) {
wbm->prefix=g_malloc(len+2);
strncpy(wbm->prefix, label_full, len+1);
wbm->prefix[len+1]='\0';
+ if (!l[0]) {
+ gui_internal_cmd_set_destination(this, wbm, wbm->name);
+ found=1;
+ break;
+ }
} else {
gui_internal_widget_destroy(this, wbm);
}
}
g_hash_table_destroy(hash);
}
- gui_internal_menu_render(this);
+ if (found)
+ gui_internal_check_exit(this);
+ else
+ gui_internal_menu_render(this);
}
static void
gui_internal_cmd2_bookmarks(struct gui_priv *this, char *function, struct attr **in, struct attr ***out, int *valid)
{
- gui_internal_cmd_bookmarks(this, NULL, NULL);
+ char *str=NULL;
+ if (in && in[0] && ATTR_IS_STRING(in[0]->type)) {
+ str=in[0]->u.str;
+ }
+ gui_internal_cmd_bookmarks(this, NULL, str);
}
static void gui_internal_keypress_do(struct gui_priv *this, char *key)
gui_internal_search_idle_end(this);
struct menu_data *md=gui_internal_menu_data(this);
- if (md && md->keyboard) {
+ if (md && md->keyboard && !(this->flags & 2048)) {
GList *lk=md->keyboard->children;
graphics_draw_mode(this->gra, draw_mode_begin);
while (lk) {
text=g_strdup_printf("%s", res->country->name);
}
if (! strcmp(wm_name,"Town")) {
+ char *postal=res->town->common.postal;
+ if (res->town->common.postal_mask)
+ postal=res->town->common.postal_mask;
name=res->town->name;
item=&res->town->common.item;
if (res->town->name && res->town->district)
- text=g_strdup_printf("%s%s%s (%s)", res->town->common.postal_mask ? res->town->common.postal_mask : "", res->town->common.postal_mask ? " ":"", res->town->name, res->town->district);
+ text=g_strdup_printf("%s%s%s (%s)", postal ? postal : "", postal ? " ":"", res->town->name, res->town->district);
else
- text=g_strdup_printf("%s%s%s", res->town->common.postal ? res->town->common.postal_mask : "", res->town->common.postal_mask ? " ":"", res->town->name);
+ text=g_strdup_printf("%s%s%s", postal ? postal : "", postal ? " ":"", res->town->name);
}
if (! strcmp(wm_name,"Street")) {
name=res->street->name;
item=&res->street->common.item;
text=g_strdup_printf("%s %s", res->town->name, res->street->name);
}
+ if (! strcmp(wm_name,"House number")) {
+ name=res->house_number->house_number;
+ text=g_strdup_printf("%s", name);
+ }
dbg(1,"res->country->flag=%s\n", res->country->flag);
gui_internal_widget_append(search_list,
wc=gui_internal_button_new_with_callback(this, text,
{
struct widget *wb,*wk,*w,*wr,*we,*wl,*wnext=NULL;
char *country;
+ int keyboard_mode=2;
gui_internal_search_list_new(this);
wb=gui_internal_menu(this, what);
w=gui_internal_box_new(this, gravity_center|orientation_vertical|flags_expand|flags_fill);
gui_internal_widget_append(we, wb=gui_internal_image_new(this, image_new_xs(this, "gui_select_street")));
wb->state |= STATE_SENSITIVE;
wb->func = gui_internal_back;
+ keyboard_mode=18;
}
gui_internal_widget_append(we, wk=gui_internal_label_new(this, NULL));
if (wnext) {
wk->func = gui_internal_search_changed;
wk->name=g_strdup(type);
if (this->keyboard)
- gui_internal_widget_append(w, gui_internal_keyboard(this,2));
+ gui_internal_widget_append(w, gui_internal_keyboard(this,keyboard_mode));
gui_internal_menu_render(this);
}
case html_tag_a:
html->name=find_attr_dup(names, values, "name");
if (html->name) {
- if (this->html_anchor_found)
- html->skip=1;
- else
- html->skip=this->html_anchor ? strcmp(html->name,this->html_anchor) : 0;
+ html->skip=this->html_anchor ? strcmp(html->name,this->html_anchor) : 0;
if (!html->skip)
this->html_anchor_found=1;
}
}
}
+static void gui_internal_dbus_signal(struct gui_priv *this, struct point *p)
+{
+ struct displaylist_handle *dlh;
+ struct displaylist *display;
+ struct displayitem *di;
+
+ display=navit_get_displaylist(this->nav);
+ dlh=graphics_displaylist_open(display);
+ while ((di=graphics_displaylist_next(dlh))) {
+ struct item *item=graphics_displayitem_get_item(di);
+ if (item_is_point(*item) && graphics_displayitem_get_displayed(di) &&
+ graphics_displayitem_within_dist(display, di, p, 10)) {
+ struct map_rect *mr=map_rect_new(item->map, NULL);
+ struct item *itemo=map_rect_get_item_byid(mr, item->id_hi, item->id_lo);
+ struct attr attr;
+ if (item_attr_get(itemo, attr_data, &attr)) {
+ struct attr cb,*attr_list[2];
+ int valid=0;
+ attr.type=attr_data;
+ attr_list[0]=&attr;
+ attr_list[1]=NULL;
+ if (navit_get_attr(this->nav, attr_callback_list, &cb, NULL))
+ callback_list_call_attr_4(cb.u.callback_list, attr_command, "dbus_send_signal", attr_list, NULL, &valid);
+ }
+ map_rect_destroy(mr);
+ }
+ }
+ graphics_displaylist_close(dlh);
+}
+
//##############################################################################################################
//# Description: Function to handle mouse clicks and scroll wheel movement
// if still on the map (not in the menu, yet):
dbg(1,"children=%p ignore_button=%d\n",this->root.children,this->ignore_button);
if (!this->root.children || this->ignore_button) {
+
this->ignore_button=0;
// check whether the position of the mouse changed during press/release OR if it is the scrollwheel
if (!navit_handle_button(this->nav, pressed, button, p, NULL)) {
return;
}
dbg(1,"menu_on_map_click=%d\n",this->menu_on_map_click);
- if (this->menu_on_map_click && button == 1)
+ if (button != 1)
+ return;
+ if (this->menu_on_map_click) {
gui_internal_cmd_menu(this, p, 0);
+ return;
+ }
+ if (this->signal_on_map_click) {
+ gui_internal_dbus_signal(this, p);
+ return;
+ }
return;
}
this->menu_on_map_click=attr->u.num;
else
this->menu_on_map_click=1;
+ if ((attr=attr_search(attrs, NULL, attr_signal_on_map_click)))
+ this->signal_on_map_click=attr->u.num;
+
if ((attr=attr_search(attrs, NULL, attr_callback_list))) {
command_add_table(attr->u.callback_list, commands, sizeof(commands)/sizeof(struct command_table), this);
}