/* See README for details. */ void abitmap_init (char const *path, DATAFILE *datafile) { int i; int prev[10]; int cv; char str[1024]; DATAFILE *dat; cv = get_color_conversion (); set_color_conversion (COLORCONV_TOTAL | COLORCONV_KEEP_TRANS); used_bitmaps_cleanup (); push_config_state (); dat = set_theme_config (path, datafile); if (dat != datafile) used_dat = dat; theme->fg_color = get_color_string ("fg", "0x000000"); theme->bg_color = get_color_string ("bg", "0xffffff"); theme->mg_color = get_color_string ("mg", "0x808080"); theme->textpushx = get_config_int ("agup.cfg", "px", 0); theme->textpushy = get_config_int ("agup.cfg", "py", 0); for (i = 0; bload[i].name; i++) { int j; int s; char const *suffix[] = { "", "_hl", "_dis" }; for (s = 0; bload[i].name[s] == ' '; s++); for (j = 0; j < 3; j++) { char **argv = NULL; int argc = 0; BITMAP *bmp = NULL; int got_color = 0; theme->bitmaps[bload[i].elem][j].bmp = NULL; theme->bitmaps[bload[i].elem][j].flags = 0; theme->bitmaps[bload[i].elem][j].bl = 0; theme->bitmaps[bload[i].elem][j].br = 0; theme->bitmaps[bload[i].elem][j].bt = 0; theme->bitmaps[bload[i].elem][j].bb = 0; sprintf (str, "%s%s", bload[i].name + s, suffix[j]); argv = get_config_argv ("agup.cfg", str, &argc); TRACE ("%s: ", str); if (argc) { bmp = find_theme_bitmap (dat, argv[0]); } if (bmp) { int a; theme->bitmaps[bload[i].elem][j].bmp = bmp; for (a = 1; a < argc; a++) { if (!strcmp (argv[a], "stretch")) theme->bitmaps[bload[i].elem][j].flags |= ABMAP_STRETCH_H | ABMAP_STRETCH_V; else if (!strcmp (argv[a], "center")) theme->bitmaps[bload[i].elem][j].flags |= ABMAP_CENTER_H | ABMAP_CENTER_V; else if (!strcmp (argv[a], "stretchh")) theme->bitmaps[bload[i].elem][j].flags |= ABMAP_STRETCH_H; else if (!strcmp (argv[a], "centerh")) theme->bitmaps[bload[i].elem][j].flags |= ABMAP_CENTER_H; else if (!strcmp (argv[a], "alignh")) theme->bitmaps[bload[i].elem][j].flags |= ABMAP_ALIGN_H; else if (!strcmp (argv[a], "stretchv")) theme->bitmaps[bload[i].elem][j].flags |= ABMAP_STRETCH_V; else if (!strcmp (argv[a], "centerv")) theme->bitmaps[bload[i].elem][j].flags |= ABMAP_CENTER_V; else if (!strcmp (argv[a], "alignv")) theme->bitmaps[bload[i].elem][j].flags |= ABMAP_ALIGN_V; else if (!strcmp (argv[a], "cut")) { int cx, cy, cw, ch; a++; if (a < argc) { cx = strtol (argv[a], NULL, 10); a++; if (a < argc) { cy = strtol (argv[a], NULL, 10); a++; if (a < argc) { cw = strtol (argv[a], NULL, 10); a++; if (a < argc) { BITMAP *sub; ch = strtol (argv[a], NULL, 10); if (cw <= 0) cw += bmp->w; if (ch <= 0) ch += bmp->h; sub = create_sub_bitmap (bmp, cx, cy, cw, ch); used_bitmap (sub, NULL); theme->bitmaps[bload[i].elem][j].bmp = sub; } } } } } else if (!strcmp (argv[a], "border")) { a++; if (a < argc) { theme->bitmaps[bload[i].elem][j].bl = strtol (argv[a], NULL, 10); a++; if (a < argc) { theme->bitmaps[bload[i].elem][j].br = strtol (argv[a], NULL, 10); a++; if (a < argc) { theme->bitmaps[bload[i].elem][j].bt = strtol (argv[a], NULL, 10); a++; if (a < argc) { theme->bitmaps[bload[i].elem][j].bb = strtol (argv[a], NULL, 10); } } } } } else if (!strcmp (argv[a], "color")) { a++; if (a < argc) { int rgb32 = strtol (argv[a], NULL, 0); theme->bitmaps[bload[i].elem][j].color = makecol (rgb32 >> 16, (rgb32 >> 8) & 255, rgb32 & 255); got_color = 1; TRACE ("color %06x ", rgb32); } } } TRACE ("loaded successfully.\n"); } else { /* If everything fails, try to inherit from another bitmap. */ if (j) {
void tmp_side_wait::generate_menu(twindow& window) { if (stop_updates_) { foreach (const config &sd, level_.child_range("side")) { hero& leader = heros_[sd["leader"].to_int()]; int selected_feature = sd["selected_feature"].to_int(); if (selected_feature >= COMBO_FEATURES_MIN_VALID) { leader.side_feature_ = hero::valid_features()[selected_feature - COMBO_FEATURES_MIN_VALID]; } else if (selected_feature == COMBO_FEATURES_NONE) { leader.side_feature_ = HEROS_NO_FEATURE; } } return; } /* if (sides_table_->get_item_count()) { return; } */ std::vector<std::string> details; users_.clear(); sides_table_->clear(); int side = 0; foreach (const config &sd, level_.child_range("side")) { if (!sd["allow_player"].to_bool(true)) { side ++; continue; } if (!sd["current_player"].empty()) { const std::string player_id = sd["current_player"].str(); connected_user_list::const_iterator it = users_.begin(); for (; it != users_.end(); ++ it) { if (it->name == player_id) { break; } } if (it == users_.end()) { users_.push_back(connected_user(player_id, (player_id == preferences::login())? CNTR_LOCAL: CNTR_NETWORK, 0)); } } // std::stringstream str; std::map<std::string, string_map> data; data["number"]["label"] = sd["side"].str(); data["player"]["label"] = sd["user_description"]; if (!sd["leader"].empty()) { hero& leader = heros_[sd["leader"].to_int()]; data["faction"]["label"] = leader.name(); data["portrait"]["label"] = leader.image(); } else { data["faction"]["label"] = _("Random"); data["portrait"]["label"] = "hero-64/random.png"; } std::string feature_str; int selected_feature = sd["selected_feature"].to_int(); if (selected_feature == COMBO_FEATURES_RANDOM) { data["feature"]["label"] = _("Random"); } else if (selected_feature >= COMBO_FEATURES_MIN_VALID) { data["feature"]["label"] = hero::feature_str(hero::valid_features()[selected_feature - COMBO_FEATURES_MIN_VALID]); } data["income"]["label"] = sd["income"].str(); data["color"]["label"] = get_color_string(side); // data["label"]["use_markup"] = "true"; sides_table_->add_row(data); tgrid* grid_ptr = sides_table_->get_row_grid(side); tlabel* label = find_widget<tlabel>(grid_ptr, "color", false, true); label->set_use_markup(true); side ++; } update_playerlist(); window.invalidate_layout(); }