/************************************************************************** ... **************************************************************************/ void handle_diplomacy_init(struct player *pplayer, struct packet_diplomacy_info *packet) { struct packet_diplomacy_info pa; struct player *plr0, *plr1; plr0=&game.players[packet->plrno0]; plr1=&game.players[packet->plrno1]; if(!find_treaty(plr0, plr1)) { if(player_has_embassy(plr0, plr1) && plr0->is_connected && plr0->is_alive && plr1->is_connected && plr1->is_alive) { struct Treaty *ptreaty; ptreaty=(struct Treaty *)malloc(sizeof(struct Treaty)); init_treaty(ptreaty, plr0, plr1); genlist_insert(&treaties, ptreaty, 0); pa.plrno0=plr0->player_no; pa.plrno1=plr1->player_no; send_packet_diplomacy_info(plr0->conn, PACKET_DIPLOMACY_INIT_MEETING, &pa); pa.plrno0=plr1->player_no; pa.plrno1=plr0->player_no; send_packet_diplomacy_info(plr1->conn, PACKET_DIPLOMACY_INIT_MEETING, &pa); } } }
/**************************************************************** ... *****************************************************************/ struct Diplomacy_dialog *create_diplomacy_dialog(struct player *plr0, struct player *plr1) { char buf[512], *pheadlinem; struct Diplomacy_dialog *pdialog; Dimension width, height, maxwidth; Widget popupmenu; XtTranslations textfieldtranslations; pdialog=(struct Diplomacy_dialog *)malloc(sizeof(struct Diplomacy_dialog)); genlist_insert(&diplomacy_dialogs, pdialog, 0); init_treaty(&pdialog->treaty, plr0, plr1); pdialog->dip_dialog_shell = XtCreatePopupShell("dippopupshell", topLevelShellWidgetClass, toplevel, NULL, 0); pdialog->dip_form = XtVaCreateManagedWidget("dipform", formWidgetClass, pdialog->dip_dialog_shell, NULL); pdialog->dip_main_form = XtVaCreateManagedWidget("dipmainform", formWidgetClass, pdialog->dip_form, NULL); pdialog->dip_form0 = XtVaCreateManagedWidget("dipform0", formWidgetClass, pdialog->dip_main_form, NULL); pdialog->dip_formm = XtVaCreateManagedWidget("dipformm", formWidgetClass, pdialog->dip_main_form, NULL); pdialog->dip_form1 = XtVaCreateManagedWidget("dipform1", formWidgetClass, pdialog->dip_main_form, NULL); sprintf(buf, "The %s offerings", get_race_name(plr0->race)); pdialog->dip_headline0=XtVaCreateManagedWidget("dipheadline0", labelWidgetClass, pdialog->dip_form0, XtNlabel, buf, NULL); sprintf(buf, "The %s offerings", get_race_name(plr1->race)); pdialog->dip_headline1=XtVaCreateManagedWidget("dipheadline1", labelWidgetClass, pdialog->dip_form1, XtNlabel, buf, NULL); pdialog->dip_map_command0=XtVaCreateManagedWidget("dipmapcommand0", commandWidgetClass, pdialog->dip_form0, NULL); pdialog->dip_map_command1=XtVaCreateManagedWidget("dipmapcommand1", commandWidgetClass, pdialog->dip_form1, NULL); pdialog->dip_tech_menubutton0=XtVaCreateManagedWidget("diptechmenubutton0", menuButtonWidgetClass, pdialog->dip_form0, NULL); popupmenu=XtVaCreatePopupShell("menu", simpleMenuWidgetClass, pdialog->dip_tech_menubutton0, NULL); if(!fill_diplomacy_tech_menu(popupmenu, plr0, plr1)) XtSetSensitive(pdialog->dip_tech_menubutton0, FALSE); pdialog->dip_tech_menubutton1=XtVaCreateManagedWidget("diptechmenubutton1", menuButtonWidgetClass, pdialog->dip_form1, NULL); popupmenu=XtVaCreatePopupShell("menu", simpleMenuWidgetClass, pdialog->dip_tech_menubutton1, NULL); if(!fill_diplomacy_tech_menu(popupmenu, plr1, plr0)) XtSetSensitive(pdialog->dip_tech_menubutton1, FALSE); pdialog->dip_gold_input0=XtVaCreateManagedWidget("dipgoldinput0", asciiTextWidgetClass, pdialog->dip_form0, NULL); pdialog->dip_gold_input1=XtVaCreateManagedWidget("dipgoldinput1", asciiTextWidgetClass, pdialog->dip_form1, NULL); sprintf(buf, "Gold(max %d)", plr0->economic.gold); pdialog->dip_gold_label0=XtVaCreateManagedWidget("dipgoldlabel0", labelWidgetClass, pdialog->dip_form0, XtNlabel, buf, NULL); sprintf(buf, "Gold(max %d)", plr1->economic.gold); pdialog->dip_gold_label1=XtVaCreateManagedWidget("dipgoldlabel1", labelWidgetClass, pdialog->dip_form1, XtNlabel, buf, NULL); sprintf(buf, "This Eternal Treaty\nmarks the results of the diplomatic work between\nThe %s %s %s\nand\nThe %s %s %s", get_race_name(plr0->race), get_ruler_title(plr0->goverment), plr0->name, get_race_name(plr1->race), get_ruler_title(plr1->goverment), plr1->name); pheadlinem=create_centered_string(buf); pdialog->dip_headline1=XtVaCreateManagedWidget("dipheadlinem", labelWidgetClass, pdialog->dip_formm, XtNlabel, pheadlinem, NULL); pdialog->dip_clauselabel=XtVaCreateManagedWidget("dipclauselabel", labelWidgetClass, pdialog->dip_formm, NULL); pdialog->dip_view = XtVaCreateManagedWidget("dipview", viewportWidgetClass, pdialog->dip_formm, NULL); pdialog->dip_clauselist = XtVaCreateManagedWidget("dipclauselist", listWidgetClass, pdialog->dip_view, XtNlist, (XtArgVal)dummy_clause_list_strings, NULL); XtVaGetValues(pdialog->dip_headline1, XtNwidth, &width, NULL); XtVaSetValues(pdialog->dip_clauselist, XtNwidth, width, NULL); sprintf(buf, "%s view:", get_race_name(plr0->race)); pdialog->dip_acceptlabel0=XtVaCreateManagedWidget("dipacceptlabel0", labelWidgetClass, pdialog->dip_formm, XtNlabel, buf, NULL); pdialog->dip_acceptthumb0=XtVaCreateManagedWidget("dipacceptthumb0", labelWidgetClass, pdialog->dip_formm, XtNbitmap, get_thumb_pixmap(0), NULL); sprintf(buf, "%s view:", get_race_name(plr1->race)); pdialog->dip_acceptlabel1=XtVaCreateManagedWidget("dipacceptlabel1", labelWidgetClass, pdialog->dip_formm, XtNlabel, buf, NULL); pdialog->dip_acceptthumb1=XtVaCreateManagedWidget("dipacceptthumb1", labelWidgetClass, pdialog->dip_formm, NULL); pdialog->dip_erase_clause_command=XtVaCreateManagedWidget("diperaseclausecommand", commandWidgetClass, pdialog->dip_main_form, NULL); pdialog->dip_accept_command = XtVaCreateManagedWidget("dipacceptcommand", commandWidgetClass, pdialog->dip_form, NULL); pdialog->dip_close_command = XtVaCreateManagedWidget("dipclosecommand", commandWidgetClass, pdialog->dip_form, NULL); XtAddCallback(pdialog->dip_close_command, XtNcallback, diplomacy_dialog_close_callback, (XtPointer)pdialog); XtAddCallback(pdialog->dip_map_command0, XtNcallback, diplomacy_dialog_map_callback, (XtPointer)pdialog); XtAddCallback(pdialog->dip_map_command1, XtNcallback, diplomacy_dialog_map_callback, (XtPointer)pdialog); XtAddCallback(pdialog->dip_erase_clause_command, XtNcallback, diplomacy_dialog_erase_clause_callback, (XtPointer)pdialog); XtAddCallback(pdialog->dip_accept_command, XtNcallback, diplomacy_dialog_accept_callback, (XtPointer)pdialog); textfieldtranslations = XtParseTranslationTable("<Key>Return: diplo-dialog-returnkey()"); XtOverrideTranslations(pdialog->dip_gold_input0, textfieldtranslations); XtOverrideTranslations(pdialog->dip_gold_input1, textfieldtranslations); XtRealizeWidget(pdialog->dip_dialog_shell); XtVaGetValues(pdialog->dip_map_command0, XtNwidth, &maxwidth, NULL); /* printf("%d\n", maxwidth);*/ XtVaGetValues(pdialog->dip_tech_menubutton0, XtNwidth, &width, NULL); /* printf("%d\n", width);*/ maxwidth=MAX(width, maxwidth); XtVaGetValues(pdialog->dip_gold_input0, XtNwidth, &width, NULL); /* printf("%d\n", width);*/ maxwidth=MAX(width, maxwidth); XtVaSetValues(pdialog->dip_map_command0, XtNwidth, maxwidth, NULL); XtVaSetValues(pdialog->dip_tech_menubutton0, XtNwidth, maxwidth, NULL); XtVaSetValues(pdialog->dip_gold_input0, XtNwidth, maxwidth, NULL); XtVaGetValues(pdialog->dip_formm, XtNheight, &height, NULL); XtVaSetValues(pdialog->dip_form0, XtNheight, height, NULL); XtVaSetValues(pdialog->dip_form1, XtNheight, height, NULL); free(pheadlinem); update_diplomacy_dialog(pdialog); return pdialog; }
/************************************************************************ Insert an item at the end of the list. ************************************************************************/ void genlist_append(struct genlist *pgenlist, void *data) { genlist_insert(pgenlist, data, -1); /* end */ }
/************************************************************************ Insert an item at the start of the list. ************************************************************************/ void genlist_prepend(struct genlist *pgenlist, void *data) { genlist_insert(pgenlist, data, 0); /* beginning */ }
/**************************************************************** ... *****************************************************************/ struct city_dialog *create_city_dialog(struct city *pcity, int make_modal) { int i; struct city_dialog *pdialog; Pixmap icon_pixmap; pdialog=(struct city_dialog *)malloc(sizeof(struct city_dialog)); pdialog->pcity=pcity; pdialog->shell=XtVaCreatePopupShell(pcity->name, make_modal ? transientShellWidgetClass : topLevelShellWidgetClass, toplevel, XtNallowShellResize, True, NULL); pdialog->main_form= XtVaCreateManagedWidget("citymainform", formWidgetClass, pdialog->shell, NULL); pdialog->cityname_label= XtVaCreateManagedWidget("citynamelabel", labelWidgetClass, pdialog->main_form, NULL); pdialog->citizen_labels[0]= XtVaCreateManagedWidget("citizenlabels", commandWidgetClass, pdialog->main_form, XtNfromVert, pdialog->cityname_label, XtNbitmap, get_citizen_pixmap(2), NULL); for(i=1; i<NO_CITIZENS_SHOWN; i++) pdialog->citizen_labels[i]= XtVaCreateManagedWidget("citizenlabels", commandWidgetClass, pdialog->main_form, XtNfromVert, pdialog->cityname_label, XtNfromHoriz, (XtArgVal)pdialog->citizen_labels[i-1], XtNbitmap, get_citizen_pixmap(2), NULL); pdialog->sub_form= XtVaCreateManagedWidget("citysubform", formWidgetClass, pdialog->main_form, XtNfromVert, (XtArgVal)pdialog->citizen_labels[0], NULL); pdialog->production_label= XtVaCreateManagedWidget("cityprodlabel", labelWidgetClass, pdialog->sub_form, NULL); pdialog->output_label= XtVaCreateManagedWidget("cityoutputlabel", labelWidgetClass, pdialog->sub_form, XtNfromVert, (XtArgVal)pdialog->production_label, NULL); pdialog->storage_label= XtVaCreateManagedWidget("citystoragelabel", labelWidgetClass, pdialog->sub_form, XtNfromVert, (XtArgVal)pdialog->output_label, NULL); pdialog->polution_label= XtVaCreateManagedWidget("citypolutionlabel", labelWidgetClass, pdialog->sub_form, XtNfromVert, (XtArgVal)pdialog->storage_label, NULL); pdialog->map_canvas= XtVaCreateManagedWidget("citymapcanvas", xfwfcanvasWidgetClass, pdialog->sub_form, "exposeProc", (XtArgVal)city_map_canvas_expose, "exposeProcData", (XtArgVal)pdialog, XtNfromHoriz, (XtArgVal)pdialog->production_label, NULL); pdialog->building_label= XtVaCreateManagedWidget("citybuildinglabel", labelWidgetClass, pdialog->sub_form, XtNfromHoriz, (XtArgVal)pdialog->map_canvas, NULL); pdialog->progress_label= XtVaCreateManagedWidget("cityprogresslabel", labelWidgetClass, pdialog->sub_form, XtNfromHoriz, (XtArgVal)pdialog->map_canvas, XtNfromVert, pdialog->building_label, NULL); pdialog->buy_command= XtVaCreateManagedWidget("citybuycommand", commandWidgetClass, pdialog->sub_form, XtNfromVert, pdialog->building_label, XtNfromHoriz, (XtArgVal)pdialog->progress_label, NULL); pdialog->change_command= XtVaCreateManagedWidget("citychangecommand", commandWidgetClass, pdialog->sub_form, XtNfromVert, pdialog->building_label, XtNfromHoriz, (XtArgVal)pdialog->buy_command, NULL); pdialog->improvement_viewport= XtVaCreateManagedWidget("cityimprovview", viewportWidgetClass, pdialog->sub_form, XtNfromHoriz, (XtArgVal)pdialog->map_canvas, XtNfromVert, pdialog->progress_label, NULL); pdialog->improvement_list= XtVaCreateManagedWidget("cityimprovlist", listWidgetClass, pdialog->improvement_viewport, XtNforceColumns, 1, XtNdefaultColumns,1, XtNlist, (XtArgVal)dummy_improvement_list, XtNverticalList, False, NULL); pdialog->sell_command= XtVaCreateManagedWidget("citysellcommand", commandWidgetClass, pdialog->sub_form, XtNfromVert, pdialog->improvement_viewport, XtNfromHoriz, (XtArgVal)pdialog->map_canvas, NULL); icon_pixmap = XCreateBitmapFromData(display, RootWindowOfScreen(XtScreen(toplevel)), cityicon_bits, cityicon_width, cityicon_height); pdialog->support_unit_label= XtVaCreateManagedWidget("supportunitlabel", labelWidgetClass, pdialog->main_form, XtNfromVert, pdialog->sub_form, NULL); pdialog->support_unit_pixcomms[0]= XtVaCreateManagedWidget("supportunitcanvas", pixcommWidgetClass, pdialog->main_form, XtNfromVert, pdialog->support_unit_label, NULL); pdialog->support_unit_ids[0]=-1; for(i=1; i<NO_UNITS_SHOWN; i++) { pdialog->support_unit_pixcomms[i]= XtVaCreateManagedWidget("supportunitcanvas", pixcommWidgetClass, pdialog->main_form, XtNfromVert, pdialog->support_unit_label, XtNfromHoriz, (XtArgVal)pdialog->support_unit_pixcomms[i-1], XtNinternalHeight, 0, NULL); pdialog->support_unit_ids[i]=-1; } pdialog->present_unit_label= XtVaCreateManagedWidget("presentunitlabel", labelWidgetClass, pdialog->main_form, XtNfromVert, pdialog->support_unit_pixcomms[0], NULL); pdialog->present_unit_pixcomms[0]= XtVaCreateManagedWidget("presentunitcanvas", pixcommWidgetClass, pdialog->main_form, XtNfromVert, pdialog->present_unit_label, NULL); pdialog->present_unit_ids[0]=-1; for(i=1; i<NO_UNITS_SHOWN; i++) { pdialog->present_unit_pixcomms[i]= XtVaCreateManagedWidget("presentunitcanvas", pixcommWidgetClass, pdialog->main_form, XtNfromVert, pdialog->present_unit_label, XtNfromHoriz, (XtArgVal)pdialog->support_unit_pixcomms[i-1], NULL); pdialog->present_unit_ids[i]=-1; } XtVaSetValues(pdialog->shell, XtNiconPixmap, icon_pixmap, NULL); pdialog->close_command= XtVaCreateManagedWidget("cityclosecommand", commandWidgetClass, pdialog->main_form, XtNfromVert, pdialog->present_unit_pixcomms[0], NULL); pdialog->rename_command= XtVaCreateManagedWidget("cityrenamecommand", commandWidgetClass, pdialog->main_form, XtNfromVert, pdialog->present_unit_pixcomms[0], XtNfromHoriz, pdialog->close_command, NULL); pdialog->trade_command= XtVaCreateManagedWidget("citytradecommand", commandWidgetClass, pdialog->main_form, XtNfromVert, pdialog->present_unit_pixcomms[0], XtNfromHoriz, pdialog->rename_command, NULL); XtAddCallback(pdialog->sell_command, XtNcallback, sell_callback, (XtPointer)pdialog); XtAddCallback(pdialog->buy_command, XtNcallback, buy_callback, (XtPointer)pdialog); XtAddCallback(pdialog->change_command, XtNcallback, change_callback, (XtPointer)pdialog); XtAddCallback(pdialog->close_command, XtNcallback, close_callback, (XtPointer)pdialog); XtAddCallback(pdialog->rename_command, XtNcallback, rename_callback, (XtPointer)pdialog); XtAddCallback(pdialog->trade_command, XtNcallback, trade_callback, (XtPointer)pdialog); genlist_insert(&dialog_list, pdialog, 0); for(i=0; i<B_LAST+1; i++) pdialog->improvlist_names_ptrs[i]=0; for(i=0; i<NO_CITIZENS_SHOWN; i++) pdialog->citizen_type[i]=-1; XtRealizeWidget(pdialog->shell); refresh_city_dialog(pdialog->pcity); if(make_modal) XtSetSensitive(toplevel, FALSE); pdialog->is_modal=make_modal; return pdialog; }