/**************************************************************** ... *****************************************************************/ void city_dialog_update_present_units(struct city_dialog *pdialog, int unitid) { int i; struct genlist_iterator myiter; struct unit *punit; if(unitid) { for(i=0; i<NO_UNITS_SHOWN; i++) if(pdialog->present_unit_ids[i]==unitid) break; if(i==NO_UNITS_SHOWN) unitid=0; } genlist_iterator_init(&myiter, &map_get_tile(pdialog->pcity->x, pdialog->pcity->y)->units.list, 0); for(i=0; ITERATOR_PTR(myiter); ITERATOR_NEXT(myiter), i++) { punit=(struct unit*)ITERATOR_PTR(myiter); if(unitid && punit->id!=unitid) continue; put_unit_pixmap(punit, XawPixcommPixmap(pdialog->present_unit_pixcomms[i]), 0, 0); put_unit_pixmap_city_overlays(punit, XawPixcommPixmap(pdialog->present_unit_pixcomms[i]), 0,0); xaw_expose_now(pdialog->present_unit_pixcomms[i]); pdialog->present_unit_ids[i]=punit->id; XtRemoveAllCallbacks(pdialog->present_unit_pixcomms[i], XtNcallback); XtAddCallback(pdialog->present_unit_pixcomms[i], XtNcallback, present_units_callback, (XtPointer)punit->id); XtSetSensitive(pdialog->present_unit_pixcomms[i], TRUE); } for(; i<NO_UNITS_SHOWN; i++) { XawPixcommClear(pdialog->present_unit_pixcomms[i]); pdialog->present_unit_ids[i]=0; XtSetSensitive(pdialog->present_unit_pixcomms[i], FALSE); } }
/************************************************************************** Set one of the unit icons in information area based on punit. Use punit==NULL to clear icon. Index 'idx' is -1 for "active unit", or 0 to (num_units_below-1) for units below. Also updates unit_ids[idx] for idx>=0. **************************************************************************/ void set_unit_icon(int idx, struct unit *punit) { Widget w; assert(idx>=-1 && idx<num_units_below); if (idx == -1) { w = unit_pix_canvas; } else { w = unit_below_canvas[idx]; unit_ids[idx] = punit ? punit->id : 0; } XawPixcommClear(w); if (punit) { struct canvas store = {XawPixcommPixmap(w)}; put_unit(punit, &store, 0, 0); xaw_expose_now(w); } }