#include "gettext.h"
#include "utility.h"
#include "tile.h" // getTexturePath
+#include "filesys.h"
struct CreateWorldDestMainMenu : public CreateWorldDest
{
struct ConfirmDestDeleteWorld : public ConfirmDest
{
- ConfirmDestDeleteWorld(WorldSpec spec, GUIMainMenu *menu):
+ ConfirmDestDeleteWorld(WorldSpec spec, GUIMainMenu *menu,
+ const std::vector<std::string> &paths):
m_spec(spec),
- m_menu(menu)
+ m_menu(menu),
+ m_paths(paths)
{}
void answer(bool answer)
{
if(answer == false)
return;
- m_menu->deleteWorld(m_spec);
+ m_menu->deleteWorld(m_paths);
}
WorldSpec m_spec;
GUIMainMenu *m_menu;
+ std::vector<std::string> m_paths;
};
enum
//const wchar_t *text = L"H\nY\nB\nR\nI\nD";
const wchar_t *text = L"T\nA\nP\nE\n\nA\nN\nD\n\nG\nL\nU\nE";
gui::IGUIStaticText *t =
- Environment->addStaticText(text, rect, false, true, this, -1);
+ Environment->addStaticText(text, rect, false, false, this, -1);
t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
}
u32 bs = 5;
rect += m_topleft_client + v2s32(15, 0);
const wchar_t *text = L"C\nL\nI\nE\nN\nT";
gui::IGUIStaticText *t =
- Environment->addStaticText(text, rect, false, true, this, -1);
+ Environment->addStaticText(text, rect, false, false, this, -1);
t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
}
// Nickname + password
rect += m_topleft_client + v2s32(15, 0);
const wchar_t *text = L"C\nL\nI\nE\nN\nT";
gui::IGUIStaticText *t =
- Environment->addStaticText(text, rect, false, true, this, -1);
+ Environment->addStaticText(text, rect, false, false, this, -1);
t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
}
// Nickname + password
rect += m_topleft_server + v2s32(15, 0);
const wchar_t *text = L"S\nE\nR\nV\nE\nR";
gui::IGUIStaticText *t =
- Environment->addStaticText(text, rect, false, true, this, -1);
+ Environment->addStaticText(text, rect, false, false, this, -1);
t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
}
// Server parameters
rect += m_topleft_client + v2s32(15, 0);
const wchar_t *text = L"S\nE\nT\nT\nI\nN\nG\nS";
gui::IGUIStaticText *t =
- Environment->addStaticText(text, rect, false, true, this, -1);
+ Environment->addStaticText(text, rect, false, false, this, -1);
t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
}
s32 option_x = 70;
rect += m_topleft_client + v2s32(15, 0);
const wchar_t *text = L"C\nR\nE\nD\nI\nT\nS";
gui::IGUIStaticText *t =
- Environment->addStaticText(text, rect, false, true, this, -1);
+ Environment->addStaticText(text, rect, false, false, this, -1);
t->setTextAlignment(gui::EGUIA_CENTER, gui::EGUIA_CENTER);
}
{
rect += m_topleft_client + v2s32(130+14, 50+35);
Environment->addStaticText(narrow_to_wide(
"Minetest-c55 " VERSION_STRING "\n"
- "http://c55.me/minetest/\n"
+ "http://minetest.net/\n"
"\n"
"by Perttu Ahola <celeron55@gmail.com>\n"
"and contributors"
)->drop();
} else {
WorldSpec spec = m_data->worlds[cur.selected_world];
+ // Get files and directories involved
+ std::vector<std::string> paths;
+ paths.push_back(spec.path);
+ fs::GetRecursiveSubPaths(spec.path, paths);
+ // Launch confirmation dialog
ConfirmDestDeleteWorld *dest = new
- ConfirmDestDeleteWorld(spec, this);
+ ConfirmDestDeleteWorld(spec, this, paths);
+ std::wstring text = wgettext("Delete world");
+ text += L" \"";
+ text += narrow_to_wide(spec.name);
+ text += L"\"?\n\n";
+ text += wgettext("Files to be deleted");
+ text += L":\n";
+ for(u32 i=0; i<paths.size(); i++){
+ if(i == 3){ text += L"..."; break; }
+ text += narrow_to_wide(paths[i]) + L"\n";
+ }
(new GUIConfirmMenu(env, parent, -1, menumgr, dest,
- (std::wstring(wgettext("Delete world "))
- +L"\""+narrow_to_wide(spec.name)+L"\"?").c_str()
- ))->drop();
+ text.c_str()))->drop();
}
return true;
}
{
switch(event.GUIEvent.Caller->getID())
{
- case GUI_ID_WORLD_LISTBOX:
+ case GUI_ID_WORLD_LISTBOX:
acceptInput();
- m_data->address = L""; // Force local game
+ if(getTab() != TAB_SINGLEPLAYER)
+ m_data->address = L""; // Force local game
quitMenu();
return true;
}
quitMenu();
}
-void GUIMainMenu::deleteWorld(WorldSpec spec)
+void GUIMainMenu::deleteWorld(const std::vector<std::string> &paths)
{
- if(!spec.isValid())
- return;
+ // Delete files
+ bool did = fs::DeletePaths(paths);
+ if(!did){
+ GUIMessageMenu *menu = new GUIMessageMenu(env, parent,
+ -1, menumgr, wgettext("Failed to delete all world files"));
+ menu->drop();
+ }
+ // Quit menu to refresh it
acceptInput();
- m_data->delete_world_spec = spec;
+ m_data->only_refresh = true;
quitMenu();
}