widelands-dev team mailing list archive
-
widelands-dev team
-
Mailing list archive
-
Message #07612
[Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
GunChleoc has proposed merging lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands.
Commit message:
UI improvements for saving maps:
- Maps are now saved in a "My Maps" subdirectory to prevent overwriting of official maps
- Show full save path to user
- After creating a new directory, enter it
- Automatically focus map name editbox when creating new map
- Got rid of blank space in load map screen
- Made show map names/filenames button wide
Requested reviews:
Widelands Developers (widelands-dev)
Related bugs:
Bug #1560454 in widelands: "Editor: saving maps deletes shipped map file"
https://bugs.launchpad.net/widelands/+bug/1560454
For more details, see:
https://code.launchpad.net/~widelands-dev/widelands/bug-1560454-mapdir/+merge/294725
--
Your team Widelands Developers is requested to review the proposed merge of lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands.
=== modified file 'src/editor/ui_menus/main_menu_load_map.cc'
--- src/editor/ui_menus/main_menu_load_map.cc 2016-04-06 09:23:04 +0000
+++ src/editor/ui_menus/main_menu_load_map.cc 2016-05-15 10:32:12 +0000
@@ -30,7 +30,7 @@
* Create all the buttons etc...
*/
MainMenuLoadMap::MainMenuLoadMap(EditorInteractive& parent)
- : MainMenuLoadOrSaveMap(parent, "load_map_menu", _("Load Map")) {
+ : MainMenuLoadOrSaveMap(parent, 1, "load_map_menu", _("Load Map")) {
table_.selected.connect(boost::bind(&MainMenuLoadMap::entry_selected, this));
table_.double_clicked.connect(boost::bind(&MainMenuLoadMap::clicked_ok, boost::ref(*this)));
=== modified file 'src/editor/ui_menus/main_menu_load_or_save_map.cc'
--- src/editor/ui_menus/main_menu_load_or_save_map.cc 2016-04-20 07:58:14 +0000
+++ src/editor/ui_menus/main_menu_load_or_save_map.cc 2016-05-15 10:32:12 +0000
@@ -32,8 +32,10 @@
#include "map_io/widelands_map_loader.h"
MainMenuLoadOrSaveMap::MainMenuLoadOrSaveMap(EditorInteractive& parent,
+ int no_of_bottom_rows,
const std::string& name,
- const std::string& title)
+ const std::string& title,
+ const std::string& basedir)
: UI::Window(&parent, name, 0, 0, parent.get_inner_w() - 40, parent.get_inner_h() - 40, title),
// Values for alignment and size
@@ -42,7 +44,7 @@
tablex_(padding_),
tabley_(buth_ + 2 * padding_),
tablew_(get_inner_w() * 7 / 12),
- tableh_(get_inner_h() - tabley_ - 3 * buth_ - 2 * padding_),
+ tableh_(get_inner_h() - tabley_ - (no_of_bottom_rows + 1) * buth_ - no_of_bottom_rows * padding_),
right_column_x_(tablew_ + 2 * padding_),
butw_((get_inner_w() - right_column_x_ - 2 * padding_) / 2),
@@ -68,9 +70,10 @@
buth_,
g_gr->images().get("images/ui_basic/but1.png"),
_("Cancel")),
- basedir_("maps"),
+ basedir_(basedir),
has_translated_mapname_(false),
showing_mapames_(false) {
+ g_fs->ensure_directory_exists(basedir_);
curdir_ = basedir_;
UI::Box* vbox = new UI::Box(this, tablex_, padding_, UI::Box::Horizontal, padding_, get_w());
@@ -78,7 +81,7 @@
"show_mapnames",
0,
0,
- butw_,
+ 2 * butw_,
buth_,
g_gr->images().get("images/ui_basic/but1.png"),
_("Show Map Names"));
@@ -151,10 +154,13 @@
// Fill it with all files we find.
FilenameSet files = g_fs->list_directory(curdir_);
+
// If we are not at the top of the map directory hierarchy (we're not talking
// about the absolute filesystem top!) we manually add ".."
if (curdir_ != basedir_) {
maps_data_.push_back(MapData::create_parent_dir(curdir_));
+ } else if (files.empty()) {
+ maps_data_.push_back(MapData::create_empty_dir(curdir_));
}
MapData::DisplayType display_type;
=== modified file 'src/editor/ui_menus/main_menu_load_or_save_map.h'
--- src/editor/ui_menus/main_menu_load_or_save_map.h 2016-04-06 09:23:04 +0000
+++ src/editor/ui_menus/main_menu_load_or_save_map.h 2016-05-15 10:32:12 +0000
@@ -34,8 +34,10 @@
*/
struct MainMenuLoadOrSaveMap : public UI::Window {
MainMenuLoadOrSaveMap(EditorInteractive& parent,
+ int no_of_bottom_rows,
const std::string& name,
- const std::string& title);
+ const std::string& title,
+ const std::string& basedir = "maps");
protected:
virtual void clicked_ok() = 0;
=== modified file 'src/editor/ui_menus/main_menu_save_map.cc'
--- src/editor/ui_menus/main_menu_save_map.cc 2016-05-06 08:27:24 +0000
+++ src/editor/ui_menus/main_menu_save_map.cc 2016-05-15 10:32:12 +0000
@@ -49,7 +49,7 @@
// TODO(GunChleoc): Arabic: Make directory dialog: buttons need more height for Arabic.
MainMenuSaveMap::MainMenuSaveMap(EditorInteractive& parent)
- : MainMenuLoadOrSaveMap(parent, "save_map_menu", _("Save Map")),
+ : MainMenuLoadOrSaveMap(parent, 3, "save_map_menu", _("Save Map"), "maps/My_Maps"),
make_directory_(this,
"make_directory",
@@ -73,6 +73,11 @@
butw_,
buth_,
_("Filename:"),
+ UI::Align::kLeft),
+ directory_info_(this,
+ padding_,
+ tabley_ + tableh_ + buth_ + 4 * padding_,
+ (boost::format(_("Saving to: %s")) % g_fs->canonicalize_name(curdir_)).str(),
UI::Align::kLeft) {
// Make room for edit_options_ button
@@ -131,7 +136,7 @@
if (g_fs->is_directory(complete_filename.c_str()) &&
!Widelands::WidelandsMapLoader::is_widelands_map(complete_filename)) {
- curdir_ = complete_filename;
+ set_current_directory(complete_filename);
fill_table();
} else { // Ok, save this map
Widelands::Map& map = eia().egbase().map();
@@ -157,6 +162,7 @@
// create directory
std::string fullname = curdir_ + g_fs->file_separator() + md.get_dirname();
g_fs->make_directory(fullname);
+ set_current_directory(fullname);
fill_table();
}
}
@@ -201,7 +207,7 @@
assert(table_.has_selection());
const MapData& mapdata = maps_data_[table_.get_selected()];
if (mapdata.maptype == MapData::MapType::kDirectory) {
- curdir_ = mapdata.filename;
+ set_current_directory(mapdata.filename);
fill_table();
} else {
clicked_ok();
@@ -216,6 +222,12 @@
ok_.set_enabled(!editbox_->text().empty());
}
+void MainMenuSaveMap::set_current_directory(const std::string& filename) {
+ curdir_ = filename;
+ /** TRANSLATORS: The directory that a file will be saved to. */
+ directory_info_.set_text((boost::format(_("Saving to: %s")) % g_fs->canonicalize_name(curdir_)).str());
+}
+
/**
* Save the map in the current directory with
* the current filename
=== modified file 'src/editor/ui_menus/main_menu_save_map.h'
--- src/editor/ui_menus/main_menu_save_map.h 2016-04-06 09:23:04 +0000
+++ src/editor/ui_menus/main_menu_save_map.h 2016-05-15 10:32:12 +0000
@@ -43,11 +43,14 @@
void double_clicked_item();
void edit_box_changed();
+ // Sets the current dir and updates labels.
+ void set_current_directory(const std::string& filename);
+
bool save_map(std::string, bool);
UI::Button make_directory_, edit_options_;
- UI::Textarea editbox_label_;
+ UI::Textarea editbox_label_, directory_info_;
UI::EditBox* editbox_;
};
=== modified file 'src/editor/ui_menus/main_menu_save_map_make_directory.cc'
--- src/editor/ui_menus/main_menu_save_map_make_directory.cc 2016-04-23 08:05:31 +0000
+++ src/editor/ui_menus/main_menu_save_map_make_directory.cc 2016-05-15 10:32:12 +0000
@@ -66,6 +66,7 @@
boost::ref(*this),
UI::Panel::Returncodes::kBack));
center_to_parent();
+ edit_.focus();
}
=== modified file 'src/wui/mapdata.cc'
--- src/wui/mapdata.cc 2016-04-16 07:10:03 +0000
+++ src/wui/mapdata.cc 2016-05-15 10:32:12 +0000
@@ -131,11 +131,20 @@
}
// static
+MapData MapData::create_empty_dir(const std::string& current_dir) {
+ /** TRANSLATORS: Empty current folder */
+ return MapData(current_dir, (boost::format("<%s>") % _("empty")).str());
+}
+
+// static
MapData MapData::create_directory(const std::string& directory) {
std::string localized_name;
if (boost::equals(directory, "maps/MP_Scenarios")) {
/** TRANSLATORS: Directory name for MP Scenarios in map selection */
localized_name = _("Multiplayer Scenarios");
+ } else if (boost::equals(directory, "maps/My_Maps")) {
+ /** TRANSLATORS: Directory name for user maps in map selection */
+ localized_name = _("My Maps");
} else {
localized_name = FileSystem::fs_filename(directory.c_str());
}
=== modified file 'src/wui/mapdata.h'
--- src/wui/mapdata.h 2016-02-06 18:58:57 +0000
+++ src/wui/mapdata.h 2016-05-15 10:32:12 +0000
@@ -89,6 +89,9 @@
/// Get the ".." directory
static MapData create_parent_dir(const std::string& current_dir);
+ /// To display if the directory is empty and has no parent
+ static MapData create_empty_dir(const std::string& current_dir);
+
/// Create a subdirectory
static MapData create_directory(const std::string& directory);
=== modified file 'src/wui/maptable.cc'
--- src/wui/maptable.cc 2016-01-29 08:37:22 +0000
+++ src/wui/maptable.cc 2016-05-15 10:32:12 +0000
@@ -34,7 +34,7 @@
/** TRANSLATORS: Column title for number of players in map list */
add_column(35, _("Pl."), _("Number of players"), UI::Align::kHCenter);
- add_column(get_w() - 35 - 115, "", _("The name of the map or scenario"), UI::Align::kLeft);
+ add_column(get_w() - 35 - 115, _("Filename"), _("The name of the map or scenario"), UI::Align::kLeft);
add_column(115, _("Size"), _("The size of the map (Width x Height)"), UI::Align::kLeft);
set_sort_column(0);
}
Follow ups
-
[Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: noreply, 2016-06-07
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: GunChleoc, 2016-06-07
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: GunChleoc, 2016-06-06
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: SirVer, 2016-06-06
-
[Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: bunnybot, 2016-06-04
-
[Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: bunnybot, 2016-06-04
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: kaputtnik, 2016-05-17
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: GunChleoc, 2016-05-17
-
[Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: GunChleoc, 2016-05-17
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: kaputtnik, 2016-05-17
-
[Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: bunnybot, 2016-05-17
-
[Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: bunnybot, 2016-05-16
-
[Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: GunChleoc, 2016-05-15
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: kaputtnik, 2016-05-15
-
Re: [Merge] lp:~widelands-dev/widelands/bug-1560454-mapdir into lp:widelands
From: Miroslav Remák, 2016-05-15