Ticket #619: POI-101025.diff

File POI-101025.diff, 6.7 KB (added by tryagain, 11 years ago)

Reincarnation of POI-101022 over current SVN with some improvements (see discussion).

  • navit/gui/internal/gui_internal.c

     
    178178  int font_size;
    179179  /**
    180180   * The size (in pixels) that xs style icons should be scaled to.
     181   * This icon size can be too small to click it on some devices.
    181182   */
    182183  int icon_xs;
    183184  /**
     
    242243        int font_size;
    243244        int fullscreen;
    244245        struct graphics_font *fonts[3];
    245         int icon_xs, icon_s, icon_l;
     246        /**
     247         * The size (in pixels) that xs style icons should be scaled to.
     248         * This icon size can be too small to click it on some devices.
     249         */
     250        int icon_xs;
     251        /**
     252         * The size (in pixels) that s style icons (small) should be scaled to
     253         */
     254        int icon_s;
     255        /**
     256         * The size (in pixels) that l style icons should be scaled to
     257         */
     258        int icon_l;
    246259        int pressed;
    247260        struct widget *widgets;
    248261        int widgets_count;
     
    512525}
    513526#endif
    514527
     528/*
     529 * * Display image scaled to xs (extra small) size
     530 * * This image size can be too small to click it on some devices.
     531 * * @param this Our gui context
     532 * * @param name image name
     533 * * @returns image_struct Ptr to scaled image struct or NULL if not scaled or found
     534 * */
    515535static struct graphics_image *
    516536image_new_xs(struct gui_priv *this, const char *name)
    517537{
    518538        return image_new_scaled(this, name, this->icon_xs, this->icon_xs);
    519539}
    520540
     541/*
     542 * * Display image scaled to s (small) size
     543 * * @param this Our gui context
     544 * * @param name image name
     545 * * @returns image_struct Ptr to scaled image struct or NULL if not scaled or found
     546 * */
    521547
    522548static struct graphics_image *
    523549image_new_s(struct gui_priv *this, const char *name)
     
    525551        return image_new_scaled(this, name, this->icon_s, this->icon_s);
    526552}
    527553
     554/*
     555 * * Display image scaled to l (large) size
     556 * * @param this Our gui context
     557 * * @param name image name
     558 * * @returns image_struct Ptr to scaled image struct or NULL if not scaled or found
     559 * */
    528560static struct graphics_image *
    529561image_new_l(struct gui_priv *this, const char *name)
    530562{
     
    21812213                type_poi_peak,type_poi_peak,
    21822214                type_none}},
    21832215        {"unknown","Other",(enum item_type []){
    2184                 type_point_unspecified,type_point_unkn-1,
    2185                 type_point_unkn+1,type_poi_land_feature-1,
     2216                type_point_unspecified,type_poi_land_feature-1,
    21862217                type_poi_rock+1,type_poi_fuel-1,
    21872218                type_poi_marina+1,type_poi_car_parking-1,
    21882219                type_poi_car_parking+1,type_poi_bar-1,
     
    21902221                type_poi_dam+1,type_poi_information-1,
    21912222                type_poi_information+1,type_poi_mall-1,
    21922223                type_poi_mall+1,type_poi_personal_service-1,
     2224                type_poi_repair_service+1,type_poi_restaurant-1,
    21932225                type_poi_restaurant+1,type_poi_restroom-1,
    21942226                type_poi_restroom+1,type_poi_shop_grocery-1,
    21952227                type_poi_shop_grocery+1,type_poi_peak-1,
    21962228                type_poi_peak+1, type_poi_motel-1,
    2197                 type_poi_hostel+1,type_selected_point,
     2229                type_poi_hostel+1,type_line-1,
    21982230                type_none}},
    21992231        {"unknown","Unknown",(enum item_type []){
    22002232                type_point_unkn,type_point_unkn,
     
    22152247{
    22162248        struct widget *wl,*wb;
    22172249        int i;
    2218         wl=gui_internal_box_new(this, gravity_left_center|orientation_horizontal|flags_fill);
    2219         for (i = 0 ; i < sizeof(selectors)/sizeof(struct selector) ; i++) {
     2250        //wl=gui_internal_box_new(this, gravity_left_center|orientation_horizontal|flags_fill);
     2251        wl=gui_internal_box_new(this, gravity_left_center|orientation_horizontal_vertical|flags_fill);
     2252        wl->w=this->root.w;
     2253        wl->cols=this->root.w/this->icon_s;
     2254        int nitems=sizeof(selectors)/sizeof(struct selector);
     2255        int nrows=nitems/wl->cols + (nitems%wl->cols>0);
     2256        wl->h=this->icon_l*nrows;
     2257        for (i = 0 ; i < nitems ; i++) {
    22202258                union poi_param p;
    22212259                p.p.sel = 1;
    22222260                p.p.selnb = i;
    22232261                p.p.pagenb = pagenb;
    22242262                p.p.dist = 0;
    22252263                gui_internal_widget_append(wl, wb=gui_internal_button_new_with_callback(this, NULL,
    2226                         image_new_xs(this, selectors[i].icon), gravity_left_center|orientation_vertical,
     2264                        image_new_s(this, selectors[i].icon), gravity_left_center|orientation_vertical,
    22272265                        gui_internal_cmd_pois, GUINT_TO_POINTER(p.i)));
    22282266                wb->c=*c;
    22292267                wb->bt=10;
    22302268        }
     2269        gui_internal_widget_pack(this,wl);
    22312270        return wl;
    22322271}
    22332272
     
    22552294        }
    22562295        text=g_strdup_printf("%s %s %s %s", distbuf, dirbuf, type, name);
    22572296        wt=gui_internal_label_new(this, text);
    2258 
    22592297        wt->datai=dist;
    22602298        gui_internal_widget_append(wl, wt);
    22612299        g_free(text);
     
    23032341
    23042342struct item_data {
    23052343        int dist;
    2306         char label[32];
     2344        char *label;
    23072345        struct item item;
    23082346        struct coord c;
    23092347};
     
    23212359        struct widget *w=g_new0(struct widget,1);
    23222360        w->data=wm->data;
    23232361        w->c=wm->c;
     2362        w->w=wm->w;
    23242363        gui_internal_back(this, NULL, NULL);
    23252364        gui_internal_cmd_pois(this, w, NULL);
    23262365        free(w);
     
    23432382        struct selector *isel = param.p.sel? &selectors[param.p.selnb]: NULL;
    23442383        int pagenb = param.p.pagenb;
    23452384        int prevdist=param.p.dist*10000;
    2346         int rowstoskip=0;
    23472385        const int pagesize = 50; // Starting value and increment of count of items to be extracted
    23482386        int maxitem = pagesize*(pagenb+1), it = 0, i;
    23492387        struct item_data *items= g_new0( struct item_data, maxitem);
    23502388        struct fibheap* fh = fh_makekeyheap();
    23512389        int cnt = 0;
    23522390        struct table_data *td;
     2391        int width=wm->w;
    23532392        dbg(2, "Params: sel = %i, selnb = %i, pagenb = %i, dist = %i\n",
    23542393                param.p.sel, param.p.selnb, param.p.pagenb, param.p.dist);
    23552394
     
    23792418                                        struct attr attr;
    23802419                                        if(it>=maxitem) {
    23812420                                                data = fh_extractmin(fh);
     2421                                                free(data->label);
     2422                                                data->label=NULL;
    23822423                                        } else {
    23832424                                                data = &items[it++];
    23842425                                        }
     
    23862427                                        data->c = c;
    23872428                                        data->dist = idist;
    23882429                                        if (item_attr_get(item, attr_label, &attr)) {
    2389                                                 strncpy(data->label, attr.u.str, sizeof(data->label));
     2430                                                data->label=g_strdup(attr.u.str);
    23902431                                        } else {
    2391                                                 data->label[0] = 0;
     2432                                                data->label=g_strdup("");
    23922433                                        }
    23932434                                        // Key expression is a workaround to fight
    23942435                                        // probable heap collisions when two objects
     
    24112452        td=wtable->data;
    24122453
    24132454        gui_internal_widget_append(w2,wtable);
    2414         wtable->w=w2->w;
    24152455
    24162456        // Move items from heap to the table
    24172457        for(i=0;;i++)
     
    24342474                wi->c.x=data->c.x;
    24352475                wi->c.y=data->c.y;
    24362476                wi->c.pro=pro;
     2477                wi->w=width;
    24372478                row = gui_internal_widget_table_row_new(this,
    24382479                                                          gravity_left
    24392480                                                          | flags_fill
     
    24412482                row->children=g_list_append(row->children,wi);
    24422483                row->datai=data->dist;
    24432484                gui_internal_widget_prepend(wtable,row);
     2485                free(data->label);
    24442486        }
    24452487
    24462488        fh_deleteheap(fh);
     
    24682510                                                  | flags_fill
    24692511                                                  | orientation_horizontal);
    24702512        row->children=g_list_append(row->children,wl);
    2471         row->datai=100000; // Really far away for Earth, but won't work for bigger planets.
     2513        row->datai=100000000; // Really far away for Earth, but won't work for bigger planets.
    24722514        gui_internal_widget_append(wtable,row);
    24732515
    24742516        // Rendering now is needed to have table_data->bottomrow filled in.