101
101
is_replay_ ? _("Choose a replay") : _("Choose a saved game"),
102
UI::Align::kHCenter),
104
104
// Savegame description
105
label_mapname_(this, right_column_x_, tabley_, "", UI::Align::kLeft),
105
label_mapname_(this, right_column_x_, tabley_),
106
106
ta_mapname_(this,
107
107
right_column_x_ + indent_,
108
108
get_y_from_preceding(label_mapname_) + padding_,
109
109
get_right_column_w(right_column_x_ + indent_),
110
110
2 * label_height_ - padding_),
112
label_gametime_(this,
114
get_y_from_preceding(ta_mapname_) + 2 * padding_,
112
label_gametime_(this, right_column_x_, get_y_from_preceding(ta_mapname_) + 2 * padding_),
117
113
ta_gametime_(this,
118
114
right_column_tab_,
119
115
label_gametime_.get_y(),
120
116
get_right_column_w(right_column_tab_),
124
this, right_column_x_, get_y_from_preceding(ta_gametime_), "", UI::Align::kLeft),
119
label_players_(this, right_column_x_, get_y_from_preceding(ta_gametime_)),
125
120
ta_players_(this,
126
121
right_column_tab_,
127
122
label_players_.get_y(),
128
123
get_right_column_w(right_column_tab_),
131
label_version_(this, right_column_x_, get_y_from_preceding(ta_players_), "", UI::Align::kLeft),
132
ta_version_(this, right_column_tab_, label_version_.get_y(), "", UI::Align::kLeft),
126
label_version_(this, right_column_x_, get_y_from_preceding(ta_players_)),
127
ta_version_(this, right_column_tab_, label_version_.get_y()),
134
label_win_condition_(this,
136
get_y_from_preceding(ta_version_) + 3 * padding_,
129
label_win_condition_(this, right_column_x_, get_y_from_preceding(ta_version_) + 3 * padding_),
139
130
ta_win_condition_(this,
140
131
right_column_x_ + indent_,
141
132
get_y_from_preceding(label_win_condition_) + padding_,
151
142
g_gr->images().get("images/ui_basic/but0.png"),
154
ta_errormessage_(this,
156
get_y_from_preceding(ta_mapname_) + 2 * padding_,
157
get_right_column_w(right_column_x_),
158
delete_.get_y() - get_y_from_preceding(ta_mapname_) - 6 * padding_),
145
ta_long_generic_message_(this,
147
get_y_from_preceding(ta_mapname_) + 2 * padding_,
148
get_right_column_w(right_column_x_),
149
delete_.get_y() - get_y_from_preceding(ta_mapname_) - 6 * padding_),
160
151
minimap_y_(get_y_from_preceding(ta_win_condition_) + 3 * padding_),
161
152
minimap_w_(get_right_column_w(right_column_x_)),
188
179
ta_mapname_.set_tooltip(_("The map that this game is based on"));
189
180
delete_.set_tooltip(_("Delete this game"));
191
183
minimap_icon_.set_visible(false);
193
185
back_.sigclicked.connect(boost::bind(&FullscreenMenuLoadGame::clicked_back, boost::ref(*this)));
194
186
ok_.sigclicked.connect(boost::bind(&FullscreenMenuLoadGame::clicked_ok, boost::ref(*this)));
195
187
delete_.sigclicked.connect(
196
188
boost::bind(&FullscreenMenuLoadGame::clicked_delete, boost::ref(*this)));
197
table_.add_column(130, _("Save Date"), _("The date this game was saved"), UI::Align::kLeft);
189
table_.add_column(130, _("Save Date"), _("The date this game was saved"));
198
190
if (is_replay_ || settings_->settings().multiplayer) {
199
191
std::vector<std::string> modes;
200
192
if (is_replay_) {
271
263
if (!table_.has_selection()) {
274
const SavegameData& gamedata = games_data_[table_.get_selected()];
276
std::string message =
277
(boost::format("%s %s\n") % label_mapname_.get_text() % gamedata.mapname).str();
279
message = (boost::format("%s %s %s\n") % message % label_win_condition_.get_text() %
280
gamedata.wincondition)
284
(boost::format("%s %s %s\n") % message % _("Save Date:") % gamedata.savedatestring).str();
286
message = (boost::format("%s %s %s\n") % message % label_gametime_.get_text() %
287
gametimestring(gamedata.gametime))
291
(boost::format("%s %s %s\n\n") % message % label_players_.get_text() % gamedata.nrplayers)
294
message = (boost::format("%s %s %s\n") % message % _("Filename:") % gamedata.filename).str();
298
(boost::format("%s\n\n%s") % _("Do you really want to delete this replay?") % message)
266
std::set<uint32_t> selections = table_.selections();
267
size_t no_selections = selections.size();
269
if (no_selections > 1) {
271
message = (boost::format(ngettext("Do you really want to delete this %d replay?",
272
"Do you really want to delete these %d replays?",
277
message = (boost::format(ngettext("Do you really want to delete this %d game?",
278
"Do you really want to delete these %d games?",
283
message = (boost::format("%s\n%s") % message % filename_list_string()).str();
286
const SavegameData& gamedata = games_data_[table_.get_selected()];
288
message = (boost::format("%s %s\n") % label_mapname_.get_text() % gamedata.mapname).str();
290
message = (boost::format("%s %s %s\n") % message % label_win_condition_.get_text() %
291
gamedata.wincondition)
295
(boost::format("%s %s %s\n") % message % _("Save Date:") % gamedata.savedatestring).str();
297
message = (boost::format("%s %s %s\n") % message % label_gametime_.get_text() %
298
gametimestring(gamedata.gametime))
302
(boost::format("%s %s %s\n\n") % message % label_players_.get_text() % gamedata.nrplayers)
302
(boost::format("%s\n\n%s") % _("Do you really want to delete this game?") % message).str();
305
message = (boost::format("%s %s %s\n") % message % _("Filename:") % gamedata.filename).str();
309
(boost::format("%s\n\n%s") % _("Do you really want to delete this replay?") % message)
313
(boost::format("%s\n\n%s") % _("Do you really want to delete this game?") % message)
305
318
UI::WLMessageBox confirmationBox(
306
this, _("Confirm deleting file"), message, UI::WLMessageBox::MBoxType::kOkCancel);
319
this, ngettext("Confirm deleting file", "Confirm deleting files", no_selections), message,
320
UI::WLMessageBox::MBoxType::kOkCancel);
307
322
if (confirmationBox.run<UI::Panel::Returncodes>() == UI::Panel::Returncodes::kOk) {
308
g_fs->fs_unlink(gamedata.filename);
310
g_fs->fs_unlink(gamedata.filename + WLGF_SUFFIX);
323
for (const uint32_t index : selections) {
324
const std::string& deleteme = games_data_[table_.get(table_.get_record(index))].filename;
325
g_fs->fs_unlink(deleteme);
327
g_fs->fs_unlink(deleteme + WLGF_SUFFIX);
334
std::string FullscreenMenuLoadGame::filename_list_string() {
335
std::set<uint32_t> selections = table_.selections();
336
boost::format message;
338
for (const uint32_t index : selections) {
340
// TODO(GunChleoc): We can exceed the texture size for the font renderer,
341
// so we have to restrict this for now.
343
message = boost::format("%s\n%s") % message % "...";
346
const SavegameData& gamedata = games_data_[table_.get(table_.get_record(index))];
348
if (gamedata.errormessage.empty()) {
350
boost::format("%s\n%s") % message %
351
/** TRANSLATORS %1% = map name, %2% = save date. */
352
(boost::format(_("%1%, saved on %2%")) % gamedata.mapname % gamedata.savedatestring);
354
message = boost::format("%s\n%s") % message % gamedata.filename;
357
return message.str();
316
360
bool FullscreenMenuLoadGame::set_has_selection() {
317
bool has_selection = table_.has_selection();
361
bool has_selection = table_.selections().size() < 2;
318
362
ok_.set_enabled(has_selection);
319
delete_.set_enabled(has_selection);
363
delete_.set_enabled(table_.has_selection());
321
365
if (!has_selection) {
322
366
label_mapname_.set_text(std::string());
346
390
void FullscreenMenuLoadGame::entry_selected() {
391
size_t selections = table_.selections().size();
347
392
if (set_has_selection()) {
349
394
const SavegameData& gamedata = games_data_[table_.get_selected()];
350
ta_errormessage_.set_text(gamedata.errormessage);
395
ta_long_generic_message_.set_text(gamedata.errormessage);
352
397
if (gamedata.errormessage.empty()) {
353
ta_errormessage_.set_visible(false);
398
ta_long_generic_message_.set_visible(false);
354
399
ta_mapname_.set_text(gamedata.mapname);
355
400
ta_gametime_.set_text(gametimestring(gamedata.gametime));