Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016 #define GETTEXT_DOMAIN "wesnoth-lib"
00017
00018 #include "gui/dialogs/addon/description.hpp"
00019
00020 #include "foreach.hpp"
00021 #include "formula_string_utils.hpp"
00022 #include "gettext.hpp"
00023 #include "gui/widgets/settings.hpp"
00024 #include "language.hpp"
00025
00026 namespace {
00027 std::string langcode_to_string(const std::string& lcode)
00028 {
00029 foreach(const language_def& ld, get_languages()) {
00030 if(ld.localename == lcode || ld.localename.substr(0, 2) == lcode) {
00031 return ld.language;
00032 }
00033 }
00034
00035 return "";
00036 }
00037
00038 std::string describe_addon_state_info(const addon_tracking_info& state)
00039 {
00040 std::string s;
00041
00042 utils::string_map i18n_symbols;
00043 i18n_symbols["local_version"] = state.installed_version.str();
00044
00045 switch(state.state) {
00046 case ADDON_NONE:
00047 if(!state.can_publish) {
00048 s += _("addon_state^Not installed");
00049 } else {
00050 s += _("addon_state^Published, not installed");
00051 }
00052 break;
00053 case ADDON_INSTALLED:
00054 s += "<span color='green'>";
00055 if(!state.can_publish) {
00056 s += _("addon_state^Installed");
00057 } else {
00058 s += _("addon_state^Published");
00059 }
00060 s += "</span>";
00061 break;
00062 case ADDON_NOT_TRACKED:
00063 s += "<span color='green'>";
00064 if(!state.can_publish) {
00065 s += _("addon_state^Installed, not tracking local version");
00066 } else {
00067
00068
00069 s += _("addon_state^Published, not tracking local version");
00070 }
00071 s += "</span>";
00072 break;
00073 case ADDON_INSTALLED_UPGRADABLE:
00074 s += "<span color='yellow'>";
00075 {
00076 const char* const vstr = !state.can_publish
00077 ? _("addon_state^Installed ($local_version|), upgradable")
00078 : _("addon_state^Published ($local_version| installed), upgradable");
00079 s += utils::interpolate_variables_into_string(vstr, &i18n_symbols);
00080 }
00081 s += "</span>";
00082 break;
00083 case ADDON_INSTALLED_OUTDATED:
00084 s += "<span color='orange'>";
00085 {
00086 const char* const vstr = !state.can_publish
00087 ? _("addon_state^Installed ($local_version|), outdated on server")
00088 : _("addon_state^Published ($local_version| installed), outdated on server");
00089 s += utils::interpolate_variables_into_string(vstr, &i18n_symbols);
00090 }
00091 s += "</span>";
00092 break;
00093 case ADDON_INSTALLED_BROKEN:
00094 s += "<span color='red'>";
00095 if(!state.can_publish) {
00096 s += _("addon_state^Installed, broken");
00097 } else {
00098 s += _("addon_state^Published, broken");
00099 }
00100 s += "</span>";
00101 break;
00102 default:
00103 s += "<span color='gray'>";
00104 s += _("addon_state^Unknown");
00105 s += "</span>";
00106 }
00107
00108 return s;
00109 }
00110 }
00111
00112 namespace gui2 {
00113
00114
00115
00116
00117
00118
00119
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132
00133
00134
00135
00136
00137
00138
00139
00140
00141
00142
00143
00144
00145
00146
00147
00148
00149
00150
00151
00152
00153
00154
00155
00156
00157
00158
00159
00160
00161
00162 REGISTER_DIALOG(addon_description)
00163
00164 taddon_description::taddon_description(const addon_info& addon, const addon_tracking_info& state)
00165 {
00166 register_label("image", true, addon.display_icon());
00167 register_label("title", true, addon.title);
00168 register_label("version", true, addon.version);
00169 register_label("status", true, describe_addon_state_info(state), true);
00170 register_label("author", true, addon.author);
00171 register_label("type", true, addon.display_type());
00172 register_label("size", true, size_display_string(addon.size));
00173 register_label("downloads", true, str_cast(addon.downloads));
00174 if(!addon.description.empty()) {
00175 register_label("description", true, addon.description);
00176 }
00177
00178 std::string languages;
00179
00180 foreach(const std::string& lc, addon.locales) {
00181 const std::string& langlabel = langcode_to_string(lc);
00182 if(!langlabel.empty()) {
00183 if(!languages.empty()) {
00184 languages += ", ";
00185 }
00186 languages += langlabel;
00187 }
00188 }
00189
00190 if(!languages.empty()) {
00191 register_label("translations", true, languages);
00192 }
00193 }
00194
00195 }
00196