rem: "Part: %s", designator); GERB_MESSAGE("The part you have selected is: %s\n", designator);
add: "P: %s, C:%s, FP:%s", designator, comment, footprint); GERB_MESSAGE("The part you have selected is: %s, Comment: %s, Footprint %s\n", designator, comment, footprint);
context: zoom_outline(GtkWidget *widget, GdkEventButton *event){    int x1, y1, x2, y2, dx, dy;	/* Zoom outline (UR and LL corners) */    double us_x1, us_y1, us_x2, us_y2;    int half_w, half_h;		/* cache for half window dimensions */#ifdef USE_GTK2        gchar *designator;    GList *tmp_list = NULL;    GtkTreeIter iter;    double mid_x, mid_y, pad_x, pad_y;#endif            half_w = screen.drawing_area->allocation.width / 2;    half_h = screen.drawing_area->allocation.height / 2;    x1 = MIN(screen.start_x, event->x);    y1 = MIN(screen.start_y, event->y);    x2 = MAX(screen.start_x, event->x);    y2 = MAX(screen.start_y, event->y);    dx = x2-x1;    dy = y2-y1;    if (dx < 4 && dy < 4) {#ifndef     USE_GTK2	GERB_MESSAGE("Warning: Zoom area too small, bailing out!\n");#else        if (parsed_PNP_data == NULL)      return;    tmp_list = gtk_tree_selection_get_selected_rows                                            (GTK_TREE_SELECTION(interface.selection),                                             (GtkTreeModel **)&interface.model);//item must be in the active selection list     if (tmp_list == NULL)         return;                                                             tmp_list  = g_list_first(tmp_list);    do {           gtk_tree_model_get_iter         (GTK_TREE_MODEL(interface.model),                                         &iter,                                         tmp_list->data);                gtk_tree_model_get              (GTK_TREE_MODEL(interface.model),                                         &iter,                                         COLUMN_DESIGNATOR, &designator, COLUMN_mid_x, &mid_x, COLUMN_mid_y, &mid_y, COLUMN_pad_x, &pad_x, COLUMN_pad_y, &pad_y, -1);                                  //        printf("Iter: %s", gtk_tree_model_get_string_from_iter(GTK_TREE_MODEL(interface.model), &iter));                                                 if (screen.unit == GERBV_MILS) {            us_x1 = COORD2MILS(screen.gerber_bbox.x1 + (x1+screen.trans_x)/(double)screen.transf->scale);            us_y1 = COORD2MILS(screen.gerber_bbox.y2 - (y1+screen.trans_y)/(double)screen.transf->scale);        } else {            us_x1 = COORD2MMS(screen.gerber_bbox.x1 + (x1+screen.trans_x)/(double)screen.transf->scale);            us_y1 = COORD2MMS(screen.gerber_bbox.y2 - (y1+screen.trans_y)/(double)screen.transf->scale);        }    //        us_x1 = (screen.trans_x + x1);///(double) screen.transf->scale; //       us_y1 = (screen.trans_y + y1);///(double) screen.transf->scale;        printf("x1/y1:%d/%d,  translated: us_x1/us_y1:%f/%f, desig %s, mid_x/y %f/%f, range1/2:%f/%f\n", x1, y1, us_x1, us_y1, designator, mid_x, mid_y, (mid_x - abs(mid_x - pad_x)) ,(mid_x + abs(mid_x - pad_x)));        if (((us_x1 >= (mid_x - abs(mid_x - pad_x))) && (us_x1 <= (mid_x + abs(mid_x - pad_x))))             && (us_y1 >= (mid_y - abs(mid_y - pad_y))) && (us_y1 <= (mid_y + abs(mid_y - pad_y)))) {            //pointer must be in range  FIX ME range is rectangular, but in reality it changes                        if ( !g_utf8_validate(designator, -1, NULL)) {                //memset  (designator, 0, sizeof(designator));                gchar * str = g_convert(designator, strlen(designator), "UTF-8", "ISO-8859-1",                            NULL, NULL, NULL);                // I have not decided yet whether it is better to use always                // "ISO-8859-1" or current locale.                // str = g_locale_to_utf8(row[10], -1, NULL, NULL, NULL);                sprintf (designator, "%.*s", sizeof(designator)-1, str);                g_free(str);            }                 snprintf(screen.statusbar.diststr, MAX_DISTLEN,		         "Part: %s", designator);            GERB_MESSAGE("The part you have selected is: %s\n", designator);            break;        } else {            snprintf(screen.statusbar.diststr, MAX_DISTLEN,		         "%s", "        ");        }                                                             } while ((tmp_list = g_list_next(tmp_list)));	   	update_statusbar(&screen);#endif    	goto zoom_outline_end;    }    if (screen.centered_outline_zoom) {	/* Centered outline mode */	x1 = screen.start_x - dx;	y1 = screen.start_y - dy;	dx *= 2;	dy *= 2;    }    us_x1 = (screen.trans_x + x1)/(double) screen.transf->scale;    us_y1 = (screen.trans_y + y1)/(double) screen.transf->scale;    us_x2 = (screen.trans_x + x2)/(double) screen.transf->scale;    us_y2 = (screen.trans_y + y2)/(double) screen.transf->scale;    screen.transf->scale = MIN(screen.drawing_area->allocation.width/(double)(us_x2 - us_x1),		       screen.drawing_area->allocation.height/(double)(us_y2 - us_y1));    screen.trans_x = screen.transf->scale * (us_x1 + (us_x2 - us_x1)/2) - half_w;    screen.trans_y = screen.transf->scale * (us_y1 + (us_y2 - us_y1)/2) - half_h;;    screen.clip_bbox.x1 = -screen.trans_x/(double)screen.transf->scale;    screen.clip_bbox.y1 = -screen.trans_y/(double)screen.transf->scale;zoom_outline_end:    /* Redraw screen */    redraw_pixmap(screen.drawing_area, TRUE);} /* zoom_outline */