PyObject* get_buildable_units_in_city(struct city* pCity) { PyObject* list = PyList_New(0); bool can_build; unit_type_iterate(un) { can_build = can_player_build_unit_now(client.conn.playing, un); can_build = can_build && can_city_build_unit_now(pCity, un); if (can_build) { const char* name = utype_name_translation(un); int attack = un->attack_strength; int defense = un->defense_strength; int moves = un->move_rate; int stock = pCity->shield_stock; int cost = utype_build_shield_cost(un); int turns = -1; //city_turns_to_build(pCity, cid_production(cid_encode_unit(un)), TRUE) PyList_Append(list, Py_BuildValue( "lisiii(iii)O", (long)un, VUT_UTYPE, name, turns, stock, cost, attack, defense, moves, (PyObject*)get_unittype_sprite(tileset, un) )); } } unit_type_iterate_end; return list; }
/**************************************************************** Help button clicked *****************************************************************/ static void help_callback(GtkWidget *w, gpointer data) { struct worklist_data *ptr; GtkTreeSelection *selection; GtkTreeModel *model; GtkTreeIter it; ptr = data; selection = ptr->src_selection; if (gtk_tree_selection_get_selected(selection, &model, &it)) { gint cid; struct universal target; gtk_tree_model_get(model, &it, 0, &cid, -1); target = cid_decode(cid); if (VUT_UTYPE == target.kind) { popup_help_dialog_typed(utype_name_translation(target.value.utype), HELP_UNIT); } else if (is_great_wonder(target.value.building)) { popup_help_dialog_typed(improvement_name_translation(target.value.building), HELP_WONDER); } else { popup_help_dialog_typed(improvement_name_translation(target.value.building), HELP_IMPROVEMENT); } } else { popup_help_dialog_string(HELP_WORKLIST_EDITOR_ITEM); } }
char* city_get_production_name(struct city* pCity) { int kind = pCity->production.kind; if(kind == VUT_UTYPE) { struct unit_type *pUnitType = pCity->production.value.utype; return (char*)utype_name_translation(pUnitType); } else { struct impr_type *pImprove = pCity->production.value.building; return (char*)improvement_name_translation(pImprove); } }
/**************************************************************** popup the dialog 10% inside the main-window *****************************************************************/ void unit_select_dialog_popup(struct tile *ptile) { int i,n,r; char buffer[512]; Arg args[4]; int nargs; Widget unit_select_all_command, unit_select_close_command; Widget firstcolumn=0,column=0; Pixel bg; struct unit *unit_list[unit_list_size(ptile->units)]; XtSetSensitive(main_form, FALSE); unit_select_dialog_shell = I_T(XtCreatePopupShell("unitselectdialogshell", transientShellWidgetClass, toplevel, NULL, 0)); unit_select_form = XtVaCreateManagedWidget("unitselectform", formWidgetClass, unit_select_dialog_shell, NULL); XtVaGetValues(unit_select_form, XtNbackground, &bg, NULL); XSetForeground(display, fill_bg_gc, bg); n = MIN(MAX_SELECT_UNITS, unit_list_size(ptile->units)); r = number_of_rows(n); fill_tile_unit_list(ptile, unit_list); for(i=0; i<n; i++) { struct unit *punit = unit_list[i]; struct unit_type *punittemp=unit_type(punit); struct city *pcity; struct canvas store; if(!(i%r)) { nargs=0; if(i) { XtSetArg(args[nargs], XtNfromHoriz, column); nargs++;} column = XtCreateManagedWidget("column", formWidgetClass, unit_select_form, args, nargs); if(!i) firstcolumn=column; } unit_select_ids[i]=punit->id; pcity = player_city_by_number(client_player(), punit->homecity); fc_snprintf(buffer, sizeof(buffer), "%s(%s)\n%s", utype_name_translation(punittemp), pcity ? city_name(pcity) : "", unit_activity_text(punit)); unit_select_pixmaps[i]=XCreatePixmap(display, XtWindow(map_canvas), tileset_full_tile_width(tileset), tileset_full_tile_height(tileset), display_depth); XFillRectangle(display, unit_select_pixmaps[i], fill_bg_gc, 0, 0, tileset_full_tile_width(tileset), tileset_full_tile_height(tileset)); store.pixmap = unit_select_pixmaps[i]; put_unit(punit, &store, 0, 0); nargs=0; XtSetArg(args[nargs], XtNbitmap, (XtArgVal)unit_select_pixmaps[i]);nargs++; XtSetArg(args[nargs], XtNsensitive, can_unit_do_activity(punit, ACTIVITY_IDLE));nargs++; if(i%r) { XtSetArg(args[nargs], XtNfromVert, unit_select_commands[i-1]); nargs++; } unit_select_commands[i]=XtCreateManagedWidget("unitselectcommands", commandWidgetClass, column, args, nargs); nargs=0; XtSetArg(args[nargs], XtNlabel, (XtArgVal)buffer); nargs++; XtSetArg(args[nargs], XtNfromHoriz, unit_select_commands[i]); nargs++; if(i%r) { XtSetArg(args[nargs], XtNfromVert, unit_select_commands[i-1]); nargs++; } unit_select_labels[i]=XtCreateManagedWidget("unitselectlabels", labelWidgetClass, column, args, nargs); XtAddCallback(unit_select_commands[i], XtNdestroyCallback,free_bitmap_destroy_callback, NULL); XtAddCallback(unit_select_commands[i], XtNcallback, unit_select_callback, NULL); } unit_select_no=i; unit_select_close_command = I_L(XtVaCreateManagedWidget("unitselectclosecommand", commandWidgetClass, unit_select_form, XtNfromVert, firstcolumn, NULL)); unit_select_all_command = I_L(XtVaCreateManagedWidget("unitselectallcommand", commandWidgetClass, unit_select_form, XtNfromVert, firstcolumn, NULL)); XtAddCallback(unit_select_close_command, XtNcallback, unit_select_callback, NULL); XtAddCallback(unit_select_all_command, XtNcallback, unit_select_all_callback, NULL); xaw_set_relative_position(toplevel, unit_select_dialog_shell, 15, 10); XtPopup(unit_select_dialog_shell, XtGrabNone); }
const char* get_unit_name(const struct unit* u) { return utype_name_translation(unit_type(u)); }