void hand_pai_advice_info_clear () { widget_t canvas; pmcontainer_clear (hand_pai_advice_info); widget_display (hand_pai_advice_info); widget_flush (hand_pai_advice_info); }
/************************************************************************** Standart Window Group Widget Callback (window) When Pressed check mouse move; if move then move window and redraw else if not on fron then move window up to list and redraw; **************************************************************************/ void move_window_group(struct widget *pBeginWidgetList, struct widget *pWindow) { if (sellect_window_group_dialog(pBeginWidgetList, pWindow)) { widget_flush(pWindow); } move_window_group_dialog(pBeginWidgetList, pWindow); }
void autoplay_config () { int color; extern int auto_play; color = auto_play ? red : white; if (autoplay_button) { widget_configure (autoplay_button, resource_textcolor, color); widget_display (autoplay_button); widget_flush (autoplay_button); } }
static int players_window_dlg_callback(struct widget *pWindow) { if (Main.event.button.button == SDL_BUTTON_LEFT) { if (move_window_group_dialog(pPlayers_Dlg->pBeginWidgetList, pWindow)) { sellect_window_group_dialog(pPlayers_Dlg->pBeginWidgetList, pWindow); players_dialog_update(); } else { if(sellect_window_group_dialog(pPlayers_Dlg->pBeginWidgetList, pWindow)) { widget_flush(pWindow); } } } return -1; }
void auto_after_reach_config () { extern int auto_after_reach; int color; color = auto_after_reach ? white : yellow; if (auto_after_reach_button) { widget_configure (auto_after_reach_button, resource_textcolor, color); widget_display (auto_after_reach_button); widget_flush (auto_after_reach_button); } }
/************************************************************************** Popup a dialog giving a player choices when their caravan arrives at a city (other than its home city). Example: - Establish trade route. - Help build wonder. - Keep moving. **************************************************************************/ void popup_caravan_dialog(struct unit *pUnit, struct city *pHomecity, struct city *pDestcity) { struct widget *pWindow = NULL, *pBuf = NULL; SDL_String16 *pStr; struct CONTAINER *pCont; char cBuf[128]; SDL_Rect area; if (pCaravan_Dlg) { return; } caravan_unit_id=pUnit->id; caravan_city_id=pDestcity->id; pCont = fc_calloc(1, sizeof(struct CONTAINER)); pCont->id0 = pUnit->id; pCont->id1 = pDestcity->id; pCaravan_Dlg = fc_calloc(1, sizeof(struct SMALL_DLG)); is_unit_move_blocked = TRUE; fc_snprintf(cBuf, sizeof(cBuf), _("Your %s has arrived at %s"), unit_name_translation(pUnit), city_name(pDestcity)); /* window */ pStr = create_str16_from_char(cBuf, adj_font(12)); pStr->style |= TTF_STYLE_BOLD; pWindow = create_window_skeleton(NULL, pStr, 0); pWindow->action = caravan_dlg_window_callback; set_wstate(pWindow, FC_WS_NORMAL); add_to_gui_list(ID_CARAVAN_DLG_WINDOW, pWindow); pCaravan_Dlg->pEndWidgetList = pWindow; area = pWindow->area; area.h = MAX(area.h, adj_size(2)); /* ---------- */ if (can_cities_trade(pHomecity, pDestcity)) { int revenue = get_caravan_enter_city_trade_bonus(pHomecity, pDestcity); if (can_establish_trade_route(pHomecity, pDestcity)) { fc_snprintf(cBuf, sizeof(cBuf), _("Establish Trade route with %s ( %d R&G + %d trade )"), city_name(pHomecity), revenue, trade_between_cities(pHomecity, pDestcity)); } else { revenue = (revenue + 2) / 3; fc_snprintf(cBuf, sizeof(cBuf), _("Enter Marketplace ( %d R&G bonus )"), revenue); } create_active_iconlabel(pBuf, pWindow->dst, pStr, cBuf, caravan_establish_trade_callback); pBuf->data.cont = pCont; set_wstate(pBuf, FC_WS_NORMAL); add_to_gui_list(ID_LABEL, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ if (unit_can_help_build_wonder(pUnit, pDestcity)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Help build Wonder"), caravan_help_build_wonder_callback); pBuf->data.cont = pCont; set_wstate(pBuf, FC_WS_NORMAL); add_to_gui_list(ID_LABEL, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Keep moving"), exit_caravan_dlg_callback); pBuf->data.cont = pCont; set_wstate(pBuf, FC_WS_NORMAL); set_wflag(pBuf, WF_FREE_DATA); pBuf->key = SDLK_ESCAPE; add_to_gui_list(ID_LABEL, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; /* ---------- */ pCaravan_Dlg->pBeginWidgetList = pBuf; /* setup window size and start position */ resize_window(pWindow, NULL, NULL, (pWindow->size.w - pWindow->area.w) + area.w, (pWindow->size.h - pWindow->area.h) + area.h); area = pWindow->area; auto_center_on_focus_unit(); put_window_near_map_tile(pWindow, pWindow->size.w, pWindow->size.h, unit_tile(pUnit)); /* setup widget size and start position */ pBuf = pWindow->prev; setup_vertical_widgets_position(1, area.x, area.y + 1, area.w, 0, pCaravan_Dlg->pBeginWidgetList, pBuf); /* --------------------- */ /* redraw */ redraw_group(pCaravan_Dlg->pBeginWidgetList, pWindow, 0); widget_flush(pWindow); }
/************************************************************************** ... **************************************************************************/ static void widget_core_unselect(struct widget *pwidget) { widget_redraw(pwidget); widget_flush(pwidget); }
/************************************************************************** ... **************************************************************************/ static int redraw_edit_chain(struct EDIT *pEdt) { struct UniChar *pInputChain_TMP; SDL_Rect Dest, Dest_Copy = {0, 0, 0, 0}; int iStart_Mod_X; int ret; Dest_Copy.x = pEdt->pWidget->size.x; Dest_Copy.y = pEdt->pWidget->size.y; ret = (*baseclass_redraw)(pEdt->pWidget); if (ret != 0) { return ret; } /* blit theme */ Dest = Dest_Copy; alphablit(pEdt->pBg, NULL, pEdt->pWidget->dst->surface, &Dest); /* set start parametrs */ pInputChain_TMP = pEdt->pBeginTextChain; iStart_Mod_X = 0; Dest_Copy.y += (pEdt->pBg->h - pInputChain_TMP->pTsurf->h) / 2; Dest_Copy.x += pEdt->Start_X; /* draw loop */ while (pInputChain_TMP) { Dest_Copy.x += iStart_Mod_X; /* chech if we draw inside of edit rect */ if (Dest_Copy.x > pEdt->pWidget->size.x + pEdt->pBg->w - 4) { break; } if (Dest_Copy.x > pEdt->pWidget->size.x) { Dest = Dest_Copy; alphablit(pInputChain_TMP->pTsurf, NULL, pEdt->pWidget->dst->surface, &Dest); } iStart_Mod_X = pInputChain_TMP->pTsurf->w; /* draw cursor */ if (pInputChain_TMP == pEdt->pInputChain) { Dest = Dest_Copy; putline(pEdt->pWidget->dst->surface, Dest.x - 1, Dest.y + (pEdt->pBg->h / 8), Dest.x - 1, Dest.y + pEdt->pBg->h - (pEdt->pBg->h / 4), get_game_colorRGB(COLOR_THEME_EDITFIELD_CARET)); /* save active element position */ pEdt->InputChain_X = Dest_Copy.x; } pInputChain_TMP = pInputChain_TMP->next; } /* while - draw loop */ widget_flush(pEdt->pWidget); return 0; }
/************************************************************************** Popup (or raise) the spaceship dialog for the given player. **************************************************************************/ void popup_spaceship_dialog(struct player *pPlayer) { struct SMALL_DLG *pSpaceShp; if(!(pSpaceShp = get_spaceship_dialog(pPlayer))) { struct widget *pBuf, *pWindow; SDL_String16 *pStr; char cBuf[128]; SDL_Rect area; pSpaceShp = fc_calloc(1, sizeof(struct SMALL_DLG)); fc_snprintf(cBuf, sizeof(cBuf), _("The %s Spaceship"), nation_adjective_for_player(pPlayer)); pStr = create_str16_from_char(cBuf, adj_font(12)); pStr->style |= TTF_STYLE_BOLD; pWindow = create_window_skeleton(NULL, pStr, 0); pWindow->action = space_dialog_window_callback; set_wstate(pWindow, FC_WS_NORMAL); pWindow->data.player = pPlayer; pWindow->private_data.small_dlg = pSpaceShp; add_to_gui_list(ID_WINDOW, pWindow); pSpaceShp->pEndWidgetList = pWindow; area = pWindow->area; /* ---------- */ /* create exit button */ pBuf = create_themeicon(pTheme->Small_CANCEL_Icon, pWindow->dst, WF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND); pBuf->info_label = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12)); pBuf->data.player = pPlayer; pBuf->action = exit_space_dialog_callback; set_wstate(pBuf, FC_WS_NORMAL); pBuf->key = SDLK_ESCAPE; area.w = MAX(area.w, (pBuf->size.w + adj_size(10))); add_to_gui_list(ID_BUTTON, pBuf); pBuf = create_themeicon_button_from_chars(pTheme->OK_Icon, pWindow->dst, _("Launch"), adj_font(12), 0); pBuf->action = launch_spaceship_callback; area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h + adj_size(20); add_to_gui_list(ID_BUTTON, pBuf); pStr = create_str16_from_char(get_spaceship_descr(NULL), adj_font(12)); pStr->bgcol = (SDL_Color) { 0, 0, 0, 0 }; pBuf = create_iconlabel(NULL, pWindow->dst, pStr, WF_RESTORE_BACKGROUND); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h + adj_size(20); add_to_gui_list(ID_LABEL, pBuf); pSpaceShp->pBeginWidgetList = pBuf; /* -------------------------------------------------------- */ area.w = MAX(area.w, adj_size(300) - (pWindow->size.w - pWindow->area.w)); resize_window(pWindow, NULL, NULL, (pWindow->size.w - pWindow->area.w) + area.w, (pWindow->size.h - pWindow->area.h) + area.h); area = pWindow->area; widget_set_position(pWindow, (main_window_width() - pWindow->size.w) / 2, (main_window_height() - pWindow->size.h) / 2); /* exit button */ pBuf = pWindow->prev; pBuf->size.x = area.x + area.w - pBuf->size.w - 1; pBuf->size.y = pWindow->size.y + adj_size(2); /* launch button */ pBuf = pBuf->prev; pBuf->size.x = area.x + (area.w - pBuf->size.w) / 2; pBuf->size.y = area.y + area.h - pBuf->size.h - adj_size(7); /* info label */ pBuf = pBuf->prev; pBuf->size.x = area.x + (area.w - pBuf->size.w) / 2; pBuf->size.y = area.y + adj_size(7); dialog_list_prepend(dialog_list, pSpaceShp); refresh_spaceship_dialog(pPlayer); } else { if (sellect_window_group_dialog(pSpaceShp->pBeginWidgetList, pSpaceShp->pEndWidgetList)) { widget_flush(pSpaceShp->pEndWidgetList); } } }
/**************************************************************** Pops-up the Spy sabotage dialog, upon return of list of available improvements requested by the above function. *****************************************************************/ void popup_sabotage_dialog(struct city *pCity) { struct widget *pWindow = NULL, *pBuf = NULL , *pLast = NULL; struct CONTAINER *pCont; struct unit *pUnit = head_of_units_in_focus(); SDL_String16 *pStr; SDL_Rect area, area2; int n, w = 0, h, imp_h = 0; if (pDiplomat_Dlg || !pUnit || !unit_has_type_flag(pUnit, F_SPY)) { return; } is_unit_move_blocked = TRUE; pDiplomat_Dlg = fc_calloc(1, sizeof(struct diplomat_dialog)); pDiplomat_Dlg->diplomat_id = pUnit->id; pDiplomat_Dlg->diplomat_target_id = pCity->id; pDiplomat_Dlg->pdialog = fc_calloc(1, sizeof(struct ADVANCED_DLG)); pCont = fc_calloc(1, sizeof(struct CONTAINER)); pCont->id0 = pCity->id; pCont->id1 = pUnit->id;/* spy id */ pStr = create_str16_from_char(_("Select Improvement to Sabotage") , adj_font(12)); pStr->style |= TTF_STYLE_BOLD; pWindow = create_window_skeleton(NULL, pStr, 0); pWindow->action = diplomat_dlg_window_callback; set_wstate(pWindow, FC_WS_NORMAL); add_to_gui_list(ID_TERRAIN_ADV_DLG_WINDOW, pWindow); pDiplomat_Dlg->pdialog->pEndWidgetList = pWindow; area = pWindow->area; area.h = MAX(area.h, adj_size(2)); /* ---------- */ /* exit button */ pBuf = create_themeicon(pTheme->Small_CANCEL_Icon, pWindow->dst, WF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND); pBuf->info_label = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12)); area.w += pBuf->size.w + adj_size(10); pBuf->action = diplomat_close_callback; set_wstate(pBuf, FC_WS_NORMAL); pBuf->key = SDLK_ESCAPE; add_to_gui_list(ID_TERRAIN_ADV_DLG_EXIT_BUTTON, pBuf); /* ---------- */ create_active_iconlabel(pBuf, pWindow->dst, pStr, _("City Production"), sabotage_impr_callback); pBuf->data.cont = pCont; set_wstate(pBuf, FC_WS_NORMAL); set_wflag(pBuf, WF_FREE_DATA); add_to_gui_list(MAX_ID - 1000, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; /* separator */ pBuf = create_iconlabel(NULL, pWindow->dst, NULL, WF_FREE_THEME); add_to_gui_list(ID_SEPARATOR, pBuf); area.h += pBuf->next->size.h; /* ------------------ */ n = 0; city_built_iterate(pCity, pImprove) { if (pImprove->sabotage > 0) { create_active_iconlabel(pBuf, pWindow->dst, pStr, (char *) city_improvement_name_translation(pCity, pImprove), sabotage_impr_callback); pBuf->data.cont = pCont; set_wstate(pBuf , FC_WS_NORMAL); add_to_gui_list(MAX_ID - improvement_number(pImprove), pBuf); area.w = MAX(area.w , pBuf->size.w); imp_h += pBuf->size.h; if (!pDiplomat_Dlg->pdialog->pEndActiveWidgetList) { pDiplomat_Dlg->pdialog->pEndActiveWidgetList = pBuf; } if (improvement_number(pImprove) > 9) { set_wflag(pBuf, WF_HIDDEN); } n++; /* ----------- */ } } city_built_iterate_end; pDiplomat_Dlg->pdialog->pBeginActiveWidgetList = pBuf; if (n > 0) { /* separator */ pBuf = create_iconlabel(NULL, pWindow->dst, NULL, WF_FREE_THEME); add_to_gui_list(ID_SEPARATOR, pBuf); area.h += pBuf->next->size.h; /* ------------------ */ } create_active_iconlabel(pBuf, pWindow->dst, pStr, _("At Spy's Discretion"), sabotage_impr_callback); pBuf->data.cont = pCont; set_wstate(pBuf, FC_WS_NORMAL); add_to_gui_list(MAX_ID - B_LAST, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; /* ----------- */ pLast = pBuf; pDiplomat_Dlg->pdialog->pBeginWidgetList = pLast; pDiplomat_Dlg->pdialog->pActiveWidgetList = pDiplomat_Dlg->pdialog->pEndActiveWidgetList; /* ---------- */ if (n > 10) { imp_h = 10 * pBuf->size.h; n = create_vertical_scrollbar(pDiplomat_Dlg->pdialog, 1, 10, TRUE, TRUE); area.w += n; } /* ---------- */ area.h += imp_h; resize_window(pWindow, NULL, NULL, (pWindow->size.w - pWindow->area.w) + area.w, (pWindow->size.h - pWindow->area.h) + area.h); area = pWindow->area; auto_center_on_focus_unit(); put_window_near_map_tile(pWindow, pWindow->size.w, pWindow->size.h, pUnit->tile); w = area.w; if (pDiplomat_Dlg->pdialog->pScroll) { w -= n; imp_h = pBuf->size.w; } else { imp_h = 0; } /* exit button */ pBuf = pWindow->prev; pBuf->size.x = area.x + area.w - pBuf->size.w - 1; pBuf->size.y = pWindow->size.y + adj_size(2); /* Production sabotage */ pBuf = pBuf->prev; pBuf->size.x = area.x; pBuf->size.y = area.y + 1; pBuf->size.w = w; h = pBuf->size.h; area2.x = adj_size(10); area2.h = adj_size(2); pBuf = pBuf->prev; while(pBuf) { if (pBuf == pDiplomat_Dlg->pdialog->pEndActiveWidgetList) { w -= imp_h; } pBuf->size.w = w; pBuf->size.x = pBuf->next->size.x; pBuf->size.y = pBuf->next->size.y + pBuf->next->size.h; if (pBuf->ID == ID_SEPARATOR) { FREESURFACE(pBuf->theme); pBuf->size.h = h; pBuf->theme = create_surf(w, h, SDL_SWSURFACE); area2.y = pBuf->size.h / 2 - 1; area2.w = pBuf->size.w - adj_size(20); SDL_FillRect(pBuf->theme , &area2, map_rgba(pBuf->theme->format, *get_game_colorRGB(COLOR_THEME_SABOTAGEDLG_SEPARATOR))); } if (pBuf == pLast) { break; } pBuf = pBuf->prev; } if (pDiplomat_Dlg->pdialog->pScroll) { setup_vertical_scrollbar_area(pDiplomat_Dlg->pdialog->pScroll, area.x + area.w, pDiplomat_Dlg->pdialog->pEndActiveWidgetList->size.y, area.y - pDiplomat_Dlg->pdialog->pEndActiveWidgetList->size.y + area.h, TRUE); } /* -------------------- */ /* redraw */ redraw_group(pDiplomat_Dlg->pdialog->pBeginWidgetList, pWindow, 0); widget_flush(pWindow); }
/************************************************************************** Popup a dialog giving a diplomatic unit some options when moving into the target tile. **************************************************************************/ void popup_diplomat_dialog(struct unit *pUnit, struct tile *ptile) { struct widget *pWindow = NULL, *pBuf = NULL; SDL_String16 *pStr; struct city *pCity; struct unit *pTunit; bool spy; SDL_Rect area; if (pDiplomat_Dlg) { return; } is_unit_move_blocked = TRUE; pCity = tile_city(ptile); spy = unit_has_type_flag(pUnit, F_SPY); pDiplomat_Dlg = fc_calloc(1, sizeof(struct diplomat_dialog)); pDiplomat_Dlg->diplomat_id = pUnit->id; pDiplomat_Dlg->pdialog = fc_calloc(1, sizeof(struct ADVANCED_DLG)); /* window */ if (pCity) { if(spy) { pStr = create_str16_from_char(_("Choose Your Spy's Strategy") , adj_font(12)); } else { pStr = create_str16_from_char(_("Choose Your Diplomat's Strategy"), adj_font(12)); } } else { pStr = create_str16_from_char(_("Subvert Enemy Unit"), adj_font(12)); } pStr->style |= TTF_STYLE_BOLD; pWindow = create_window_skeleton(NULL, pStr, 0); pWindow->action = diplomat_dlg_window_callback; set_wstate(pWindow, FC_WS_NORMAL); add_to_gui_list(ID_CARAVAN_DLG_WINDOW, pWindow); pDiplomat_Dlg->pdialog->pEndWidgetList = pWindow; area = pWindow->area; area.w = MAX(area.w, adj_size(8)); area.h = MAX(area.h, adj_size(2)); /* ---------- */ if((pCity)) { /* Spy/Diplomat acting against a city */ pDiplomat_Dlg->diplomat_target_id = pCity->id; /* -------------- */ if (diplomat_can_do_action(pUnit, DIPLOMAT_EMBASSY, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Establish Embassy"), diplomat_embassy_callback); pBuf->data.city = pCity; set_wstate(pBuf, FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ if (diplomat_can_do_action(pUnit, DIPLOMAT_INVESTIGATE, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Investigate City"), diplomat_investigate_callback); pBuf->data.city = pCity; set_wstate(pBuf, FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ if (spy && diplomat_can_do_action(pUnit, SPY_POISON, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Poison City"), spy_poison_callback); pBuf->data.city = pCity; set_wstate(pBuf, FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ if (diplomat_can_do_action(pUnit, DIPLOMAT_SABOTAGE, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Sabotage City"), spy ? spy_sabotage_request : diplomat_sabotage_callback); pBuf->data.city = pCity; set_wstate(pBuf, FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ if (diplomat_can_do_action(pUnit, DIPLOMAT_STEAL, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Steal Technology"), spy ? spy_steal_popup : diplomat_steal_callback); pBuf->data.city = pCity; set_wstate(pBuf , FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id , pBuf); area.w = MAX(area.w , pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ if (diplomat_can_do_action(pUnit, DIPLOMAT_INCITE, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Incite a Revolt"), diplomat_incite_callback); pBuf->data.city = pCity; set_wstate(pBuf , FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id , pBuf); area.w = MAX(area.w , pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ if (diplomat_can_do_action(pUnit, DIPLOMAT_MOVE, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Keep moving"), diplomat_keep_moving_callback); pBuf->data.city = pCity; set_wstate(pBuf , FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id , pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } } else { if((pTunit=unit_list_get(ptile->units, 0))){ /* Spy/Diplomat acting against a unit */ pDiplomat_Dlg->diplomat_target_id = pTunit->id; /* ---------- */ if (diplomat_can_do_action(pUnit, DIPLOMAT_BRIBE, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Bribe Enemy Unit"), diplomat_bribe_callback); pBuf->data.unit = pTunit; set_wstate(pBuf , FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id , pBuf); area.w = MAX(area.w , pBuf->size.w); area.h += pBuf->size.h; } /* ---------- */ if (diplomat_can_do_action(pUnit, SPY_SABOTAGE_UNIT, ptile)) { create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Sabotage Enemy Unit"), spy_sabotage_unit_callback); pBuf->data.unit = pTunit; set_wstate(pBuf , FC_WS_NORMAL); add_to_gui_list(MAX_ID - pUnit->id , pBuf); area.w = MAX(area.w , pBuf->size.w); area.h += pBuf->size.h; } } } /* ---------- */ create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Cancel"), diplomat_close_callback); set_wstate(pBuf , FC_WS_NORMAL); pBuf->key = SDLK_ESCAPE; add_to_gui_list(ID_LABEL , pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; /* ---------- */ pDiplomat_Dlg->pdialog->pBeginWidgetList = pBuf; /* setup window size and start position */ resize_window(pWindow, NULL, NULL, (pWindow->size.w - pWindow->area.w) + area.w, (pWindow->size.h - pWindow->area.h) + area.h); area = pWindow->area; auto_center_on_focus_unit(); put_window_near_map_tile(pWindow, pWindow->size.w, pWindow->size.h, pUnit->tile); /* setup widget size and start position */ pBuf = pWindow->prev; setup_vertical_widgets_position(1, area.x, area.y + 1, area.w, 0, pDiplomat_Dlg->pdialog->pBeginWidgetList, pBuf); /* --------------------- */ /* redraw */ redraw_group(pDiplomat_Dlg->pdialog->pBeginWidgetList, pWindow, 0); widget_flush(pWindow); }
/************************************************************************** Popup a dialog asking a diplomatic unit if it wishes to bribe the given enemy unit. **************************************************************************/ void popup_bribe_dialog(struct unit *pUnit, int cost) { struct widget *pWindow = NULL, *pBuf = NULL; SDL_String16 *pStr; struct unit *pDiplomatUnit; char tBuf[255], cBuf[255]; bool exit = FALSE; SDL_Rect area; if (pBribe_Dlg) { return; } /* ugly hack */ pDiplomatUnit = head_of_units_in_focus(); if (!pDiplomatUnit || !is_diplomat_unit(pDiplomatUnit)) { return; } is_unit_move_blocked = TRUE; pBribe_Dlg = fc_calloc(1, sizeof(struct small_diplomat_dialog)); pBribe_Dlg->diplomat_id = pDiplomatUnit->id; pBribe_Dlg->diplomat_target_id = pUnit->id; pBribe_Dlg->pdialog = fc_calloc(1, sizeof(struct SMALL_DLG)); fc_snprintf(tBuf, ARRAY_SIZE(tBuf), PL_("Treasury contains %d gold.", "Treasury contains %d gold.", client_player()->economic.gold), client_player()->economic.gold); /* window */ pStr = create_str16_from_char(_("Bribe Enemy Unit"), adj_font(12)); pStr->style |= TTF_STYLE_BOLD; pWindow = create_window_skeleton(NULL, pStr, 0); pWindow->action = bribe_dlg_window_callback; set_wstate(pWindow, FC_WS_NORMAL); add_to_gui_list(ID_BRIBE_DLG_WINDOW, pWindow); pBribe_Dlg->pdialog->pEndWidgetList = pWindow; area = pWindow->area; area.w = MAX(area.w, adj_size(8)); area.h = MAX(area.h, adj_size(2)); if (cost <= client_player()->economic.gold) { fc_snprintf(cBuf, sizeof(cBuf), /* TRANS: %s is pre-pluralised "Treasury contains %d gold." */ PL_("Bribe unit for %d gold?\n%s", "Bribe unit for %d gold?\n%s", cost), cost, tBuf); create_active_iconlabel(pBuf, pWindow->dst, pStr, cBuf, NULL); add_to_gui_list(ID_LABEL, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; /*------------*/ create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Yes"), diplomat_bribe_yes_callback); pBuf->data.unit = pUnit; set_wstate(pBuf, FC_WS_NORMAL); add_to_gui_list(MAX_ID - pDiplomatUnit->id, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; /* ------- */ create_active_iconlabel(pBuf, pWindow->dst, pStr, _("No") , exit_bribe_dlg_callback); set_wstate(pBuf , FC_WS_NORMAL); pBuf->key = SDLK_ESCAPE; add_to_gui_list(ID_LABEL, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } else { /* exit button */ pBuf = create_themeicon(pTheme->Small_CANCEL_Icon, pWindow->dst, WF_WIDGET_HAS_INFO_LABEL | WF_RESTORE_BACKGROUND); pBuf->info_label = create_str16_from_char(_("Close Dialog (Esc)"), adj_font(12)); area.w += pBuf->size.w + adj_size(10); pBuf->action = exit_bribe_dlg_callback; set_wstate(pBuf, FC_WS_NORMAL); pBuf->key = SDLK_ESCAPE; add_to_gui_list(ID_BRIBE_DLG_EXIT_BUTTON, pBuf); exit = TRUE; /* --------------- */ fc_snprintf(cBuf, sizeof(cBuf), /* TRANS: %s is pre-pluralised "Treasury contains %d gold." */ PL_("Bribing the unit costs %d gold.\n%s", "Bribing the unit costs %d gold.\n%s", cost), cost, tBuf); create_active_iconlabel(pBuf, pWindow->dst, pStr, cBuf, NULL); add_to_gui_list(ID_LABEL, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; /*------------*/ create_active_iconlabel(pBuf, pWindow->dst, pStr, _("Traitors Demand Too Much!"), NULL); add_to_gui_list(ID_LABEL, pBuf); area.w = MAX(area.w, pBuf->size.w); area.h += pBuf->size.h; } pBribe_Dlg->pdialog->pBeginWidgetList = pBuf; /* setup window size and start position */ resize_window(pWindow, NULL, NULL, (pWindow->size.w - pWindow->area.w) + area.w, (pWindow->size.h - pWindow->area.h) + area.h); area = pWindow->area; auto_center_on_focus_unit(); put_window_near_map_tile(pWindow, pWindow->size.w, pWindow->size.h, pDiplomatUnit->tile); /* setup widget size and start position */ pBuf = pWindow; if (exit) {/* exit button */ pBuf = pBuf->prev; pBuf->size.x = area.x + area.w - pBuf->size.w - 1; pBuf->size.y = pWindow->size.y + adj_size(2); } pBuf = pBuf->prev; setup_vertical_widgets_position(1, area.x, area.y + 1, area.w, 0, pBribe_Dlg->pdialog->pBeginWidgetList, pBuf); /* --------------------- */ /* redraw */ redraw_group(pBribe_Dlg->pdialog->pBeginWidgetList, pWindow, 0); widget_flush(pWindow); }
void ui_result (global_t * gp) { int p, i; int iy[4]; char buf[1024]; int n = 0; if (flag_pause && !auto_play && !BUILD4) { wait4key (); } if (!point) make_point (); if (BUILD4) wrap_widgets (); snd (audioplay_yaku ()); flag_not_needredraw = 0; point_clear (); memcpy (hora_global, gp, sizeof (global_t)); hora_reset (); for (p = 0; p < 4; p++) { if (result[p].flag == 0) { continue; } n++; } for (p = 0; p < 4; p++) { if (result[p].flag == 0) { continue; } if (result[p].flag != RESULT_RYUKYOKU && (result[p].who != -1)) { hora_set (hora_global, result[p].who); } else { hora_set (hora_global, -1); } result_cvt_to_int (result + p, iy); pmcontainer_print (point_results, pm_result_name[result[p].flag]); for (i = 0; i < 4; i++) { integer_t color; pmcontainer_print (point_home[i], pm_home_names[i]); print_yakupoint (point_home_point[i], result[p].points[i]); widget_configure (point_home_user[i], resource_text, player[pplayer[i]].name); color = point_color (result[p].points[i]); widget_configure (point_home_user[i], resource_textfont, MEDIUMJP); widget_configure (point_home_user[i], resource_textcolor, color); { extern integer_t *tblpos; color = point_bgcolor (result[p].points[i]); widget_model_change (name_frame[tblpos[i]], color, white, white, white); } } if (result[p].fu) { widget_configure (point_fubase, resource_invisible, 0); print_yakupoint (point_fu, result[p].fu); print_yakupoint (point_fan, result[p].fan); } else { widget_configure (point_fubase, resource_invisible, 1); } #define yaku_idx(idx) \ if (!point_yaku[idx]) { goto YAKUEND; } { integer_t idx = 0; for (i = 0; i < Y_MAX; i++) { if (Y_GET (iy, i)) { char buf[128]; int len, n; yaku_idx (idx); strcpy (buf, result_str[i]); len = strlen (buf); if (buf[len - 1] == ')' && buf[len - 3] == '(') { buf[len - 3] = buf[len - 1] = 0; n = buf[len - 2] - '0'; print_yakupoint (point_yaku_point[idx], n); } else { widget_configure (point_yaku_point[idx], resource_text, ""); } widget_configure (point_yaku[idx], resource_text, buf); idx++; } } if (result[p].dora) { yaku_idx (idx); widget_configure (point_yaku[idx], resource_text, dora_str); print_yakupoint (point_yaku_point[idx], result[p].dora); idx++; } if (result[p].uradora) { yaku_idx (idx); widget_configure (point_yaku[idx], resource_text, uradora_str); print_yakupoint (point_yaku_point[idx], result[p].uradora); idx++; } if (result[p].akadora) { yaku_idx (idx); widget_configure (point_yaku[idx], resource_text, akadora_str); print_yakupoint (point_yaku_point[idx], result[p].akadora); idx++; } for (; idx < 30; idx++) { if (!point_yaku[idx]) { continue; } widget_configure (point_yaku[idx], resource_text, ""); widget_configure (point_yaku_point[idx], resource_text, ""); } } YAKUEND: draw_hora (); { extern widget_t board; if (!BUILD4) { widget_unmap (board); } widget_map (point); widget_display (point); widget_flush (point); { for (i = 0; i < 4; i++) { widget_display (name_frame[i]); widget_flush (name_frame[i]); } } if (!auto_play) wait_key (); hora_reset (); } } linepos_clear (); for (i = 0; i < 4; i++) { widget_model_change (name_frame[i], get_basiccolorpixel (), white, white, white); } if (!BUILD4) { widget_unmap (point); } else { unwrap_widgets (); } board_reset (); board_redraw (1); if (logfile) log_play (gp, logfile); }