fix bug with filter + delete savegame (Gna! bug #11779)

This commit is contained in:
Patrick Parker 2008-06-08 05:34:52 +00:00
parent ab2e661367
commit 95b660508d
4 changed files with 38 additions and 19 deletions

View file

@ -114,6 +114,7 @@ Version 1.5.0+svn:
primary_unit on its own 'die' event (Gna! bug #11207 / Debian bug #448193
* Optimize titlescreen and credits rendering.
* Give its name to the "Fog clearer" (fixing blank in "Create Unit" dialog)
* fix bug with filter + delete savegame (Gna! bug #11779)
Version 1.5.0:
* campaigns:

View file

@ -87,10 +87,10 @@ dialog_textbox::~dialog_textbox()
}
dialog::dimension_measurements::dimension_measurements() :
x(-1),
y(-1),
x(-1),
y(-1),
interior(empty_rect),
message(empty_rect),
message(empty_rect),
textbox(empty_rect),
menu_width(0),
panes(),
@ -111,8 +111,8 @@ dialog::dimension_measurements::dimension_measurements() :
}
dialog::dialog(display &disp, const std::string& title, const std::string& message,
const DIALOG_TYPE type, const style& dialog_style) :
disp_(disp),
const DIALOG_TYPE type, const style& dialog_style) :
disp_(disp),
image_(NULL),
title_(title),
style_(dialog_style),
@ -850,21 +850,32 @@ void dialog_image::draw_contents()
video().blit_surface(location().x, location().y, surf_);
}
int filter_textbox::get_index(int index) const {
int filter_textbox::get_index(int selection) const {
// don't translate special values
if(index < 0) {
return index;
if(selection < 0) {
return selection;
}
//we must add one to the index to ignore the header row, and
//then subtract one from the result to return the index not including
//the header row.
index++;
if (size_t(index) >= index_map_.size()) {
size_t header = 1; // for now, just assume there's a header row
if (size_t(selection+header) >= index_map_.size()) {
return -1; // bad index, cancel
}
return index_map_[index]-1;
return index_map_[selection+header]-header;
}
void filter_textbox::delete_item(int selection) {
size_t header = 1; // for now, just assume there's a header row
filtered_items_.erase(filtered_items_.begin() + selection+header);
items_.erase(items_.begin() + index_map_[selection+header]);
index_map_.erase(index_map_.begin() + selection+header);
//for now, assume the dialog menu item is deleted using DELETE_ITEM
/* dialog_.set_menu_items(filtered_items_); */
}
void filter_textbox::handle_text_changed(const wide_string& text) {
@ -880,7 +891,7 @@ void filter_textbox::handle_text_changed(const wide_string& text) {
index_map_.push_back(n);
}
}
dialog_.set_menu_items(filtered_items_);
}

View file

@ -30,17 +30,17 @@ namespace gui {
struct dialog_process_info
{
public:
dialog_process_info() :
dialog_process_info() :
key(),
left_button(true),
right_button(true),
left_button(true),
right_button(true),
key_down(true),
first_time(true),
first_time(true),
double_clicked(false),
new_left_button(false),
new_right_button(false),
new_key_down(false),
selection(-1),
selection(-1),
clear_buttons_(false)
{}
@ -132,7 +132,11 @@ public:
set_text("");
}
int get_index(int index) const;
// current menu selection is based on a possibly filtered view,
// and thus may differ from the original, unfiltered index
int get_index(int selection) const;
void delete_item(int selection);
private:
std::vector<std::string> items_, filtered_items_;
std::vector<int> index_map_;

View file

@ -340,6 +340,9 @@ gui::dialog_button_action::RESULT delete_save::button_pressed(int menu_selection
}
}
// Remove the item from filter_textbox memory
filter_.delete_item(menu_selection);
// Delete the file
delete_game(saves_[index].name);