Skip to content

Commit

Permalink
Merge branch 'staging/feature/wml-error-report-improvements'
Browse files Browse the repository at this point in the history
  • Loading branch information
irydacea committed Feb 13, 2014
2 parents 36682ce + 204b1ef commit 37af8d2
Show file tree
Hide file tree
Showing 12 changed files with 582 additions and 36 deletions.
1 change: 1 addition & 0 deletions data/gui/default/widget/label_default.cfg
Expand Up @@ -96,6 +96,7 @@
#enddef

{_GUI_DEFINITION "default" "default label" DEFAULT () DEFAULT ({GUI__TEXT_VERTICALLY_CENTRED})}
{_GUI_DEFINITION "default_bold" "default label, bold font" DEFAULT "bold" DEFAULT ({GUI__TEXT_VERTICALLY_CENTRED})}
{_GUI_DEFINITION "scroll_label" "scroll label" DEFAULT () DEFAULT 0}
{_GUI_DEFINITION "title" "label used for titles" TITLE "bold" TITLE ({GUI__TEXT_VERTICALLY_CENTRED})}
{_GUI_DEFINITION "default_large" "default, large font size" LARGE () DEFAULT ({GUI__TEXT_VERTICALLY_CENTRED})}
Expand Down
173 changes: 173 additions & 0 deletions data/gui/default/window/wml_error.cfg
@@ -0,0 +1,173 @@
#textdomain wesnoth-lib
###
### Dialog used to report WML parser or preprocessor errors.
###

[window]
id = "wml_error"
description = "WML preprocessor/parser error report dialog."

[resolution]
definition = "default"

#click_dismiss = "true"
maximum_width = 600
maximum_height = 600

automatic_placement = "true"
vertical_placement = "center"
horizontal_placement = "center"

[tooltip]
id = "tooltip_large"
[/tooltip]

[helptip]
id = "tooltip_large"
[/helptip]

[grid]

[row]

[column]
border = "all"
border_size = 5
horizontal_alignment = "left"

[label]
definition = "title"
label = _ "Error"
[/label]
[/column]

[/row]

[row]

[column]
border = "all"
border_size = 5
horizontal_alignment = "left"

[label]
id = "summary"
definition = "default"
wrap = true
[/label]
[/column]

[/row]

[row]

[column]
border = "all"
border_size = 5
horizontal_alignment = "left"

[label]
id = "files"
definition = "default"
wrap = true
[/label]
[/column]

[/row]

[row]

[column]
border = "all"
border_size = 5
horizontal_alignment = "left"

[label]
id = "post_summary"
definition = "default"
wrap = true
[/label]
[/column]

[/row]

[row]

[column]
horizontal_grow = "true"

[grid]

[row]

[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
vertical_alignment = "bottom"

[label]
id = "details_heading"
definition = "default_bold"
label = _ "Details:"
[/label]
[/column]

[column]
border = "top,left,right"
border_size = 5
horizontal_alignment = "right"

[button]
id = "copy"
definition = "action_copy"
label = _ "clipboard^Copy"
tooltip = _ "Copy this report to clipboard"
[/button]
[/column]

[/row]

[/grid]

[/column]

[/row]

[row]

[column]
border = "all"
border_size = 5
horizontal_grow = "true"

[scroll_label]
id = "details"
definition = "description"
[/scroll_label]
[/column]

[/row]

[row]

[column]
border = "all"
border_size = 5
horizontal_alignment = "right"

[button]
id = "ok"
definition = "default"
label = _ "OK"
[/button]

[/column]

[/row]

[/grid]

[/resolution]

[/window]
1 change: 1 addition & 0 deletions src/CMakeLists.txt
Expand Up @@ -769,6 +769,7 @@ set(wesnoth-main_SRC
gui/dialogs/transient_message.cpp
gui/dialogs/unit_attack.cpp
gui/dialogs/unit_create.cpp
gui/dialogs/wml_error.cpp
gui/dialogs/wml_message.cpp
halo.cpp
help.cpp
Expand Down
1 change: 1 addition & 0 deletions src/SConscript
Expand Up @@ -395,6 +395,7 @@ wesnoth_sources = Split("""
gui/dialogs/transient_message.cpp
gui/dialogs/unit_attack.cpp
gui/dialogs/unit_create.cpp
gui/dialogs/wml_error.cpp
gui/dialogs/wml_message.cpp
gui/lib/types/point.cpp
gui/widgets/button.cpp
Expand Down
8 changes: 4 additions & 4 deletions src/game.cpp
Expand Up @@ -466,6 +466,10 @@ static int do_gameloop(int argc, char** argv)
const cursor::manager cursor_manager;
cursor::set(cursor::WAIT);

#if (defined(_X11) && !defined(__APPLE__)) || defined(_WIN32)
SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
#endif

loadscreen::global_loadscreen_manager loadscreen_manager(game->disp().video());

loadscreen::start_stage("init gui");
Expand All @@ -492,10 +496,6 @@ static int do_gameloop(int argc, char** argv)
loadscreen::start_stage("refresh addons");
refresh_addon_version_info_cache();

#if (defined(_X11) && !defined(__APPLE__)) || defined(_WIN32)
SDL_EventState(SDL_SYSWMEVENT, SDL_ENABLE);
#endif

config tips_of_day;

loadscreen::start_stage("titlescreen");
Expand Down
53 changes: 30 additions & 23 deletions src/game_config_manager.cpp
Expand Up @@ -20,13 +20,14 @@
#include "cursor.hpp"
#include "game_config.hpp"
#include "gettext.hpp"
#include "gui/dialogs/message.hpp"
#include "gui/dialogs/wml_error.hpp"
#include "language.hpp"
#include "loadscreen.hpp"
#include "log.hpp"
#include "resources.hpp"
#include "scripting/lua.hpp"
#include "hotkey/hotkey_item.hpp"
#include "hotkey/hotkey_command.hpp"

#include <boost/foreach.hpp>

Expand Down Expand Up @@ -174,10 +175,10 @@ void game_config_manager::load_game_config(FORCE_RELOAD_CONFIG force_reload,
::init_strings(game_config());
theme::set_known_themes(&game_config());
} catch(game::error& e) {
ERR_CONFIG << "Error loading game configuration files\n";
gui2::show_error_message(disp_.video(),
_("Error loading game configuration files: '") +
e.message + _("' (The game will now exit)"));
ERR_CONFIG << "Error loading game configuration files\n" << e.message << '\n';
gui2::twml_error::display(
_("Error loading game configuration files. The game will now exit."),
e.message, disp_.video());
throw;
}

Expand All @@ -198,7 +199,8 @@ void game_config_manager::load_addons_cfg()

get_files_in_dir(user_campaign_dir, &user_files, &user_dirs,
ENTIRE_FILE_PATH);
std::stringstream user_error_log;

std::vector<std::string> error_log;

// Append the $user_campaign_dir/*.cfg files to addons_to_load.
BOOST_FOREACH(const std::string& uc, user_files) {
Expand Down Expand Up @@ -229,11 +231,11 @@ void game_config_manager::load_addons_cfg()
ERR_CONFIG << "error reading usermade add-on '"
<< file << "'\n";
error_addons.push_back(file);
user_error_log << "The format '~" << file.substr(userdata_loc)
<< "' is only for single-file add-ons, use '~"
<< file.substr(userdata_loc,
error_log.push_back("The format '~" + file.substr(userdata_loc)
+ "' is only for single-file add-ons, use '~"
+ file.substr(userdata_loc,
size_minus_extension - userdata_loc)
<< "/_main.cfg' instead.\n";
+ "/_main.cfg' instead.");
}
else {
addons_to_load.push_back(file);
Expand All @@ -258,29 +260,34 @@ void game_config_manager::load_addons_cfg()
game_config_.append(umc_cfg);
} catch(config::error& err) {
ERR_CONFIG << "error reading usermade add-on '" << uc << "'\n";
ERR_CONFIG << err.message << '\n';
error_addons.push_back(uc);
user_error_log << err.message << "\n";
error_log.push_back(err.message);
} catch(preproc_config::error& err) {
ERR_CONFIG << "error reading usermade add-on '" << uc << "'\n";
ERR_CONFIG << err.message << '\n';
error_addons.push_back(uc);
user_error_log << err.message << "\n";
error_log.push_back(err.message);
} catch(io_exception&) {
ERR_CONFIG << "error reading usermade add-on '" << uc << "'\n";
error_addons.push_back(uc);
}
}
if(error_addons.empty() == false) {
std::stringstream msg;
msg << _n("The following add-on had errors and could not be loaded:",
"The following add-ons had errors and could not be loaded:",
error_addons.size());
BOOST_FOREACH(const std::string& error_addon, error_addons) {
msg << "\n" << error_addon;
}

msg << '\n' << _("ERROR DETAILS:") << '\n' << user_error_log.str();

gui2::show_error_message(disp_.video(),msg.str());
const size_t n = error_addons.size();
const std::string& msg1 =
_n("The following add-on had errors and could not be loaded:",
"The following add-ons had errors and could not be loaded:",
n);
const std::string& msg2 =
_n("Please report this to the author or maintainer of this add-on.",
"Please report this to the respective authors or maintainers of these add-ons.",
n);

const std::string& report = utils::join(error_log, "\n\n");

gui2::twml_error::display(msg1, msg2, error_addons, report,
disp_.video());
}
}

Expand Down

0 comments on commit 37af8d2

Please sign in to comment.