Removed GUI2 Addon Description and Filter Options dialog

These have been rolled into the new GUI2 addon manager.
This commit is contained in:
Charles Dang 2017-03-17 08:52:01 +11:00
parent 2454059f76
commit 18a7e80243
10 changed files with 0 additions and 1914 deletions

View file

@ -1,561 +0,0 @@
#textdomain wesnoth-lib
[window]
id = "addon_description"
description = "Add-on description and details for the add-ons manager interface."
[resolution]
definition = "default"
maximum_width = 800
[tooltip]
id = "tooltip"
[/tooltip]
[helptip]
id = "tooltip"
[/helptip]
[grid]
[row]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
[drawing]
id = "image"
definition = "default"
width = 72
height = 72
[draw]
[image]
name = "(text)"
w = "(min(image_original_width, 72))"
h = "(min(image_original_height, 72))"
[/image]
[/draw]
[/drawing]
[/column]
[column]
horizontal_alignment = "left"
vertical_alignment = "top"
[grid]
[row]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
vertical_alignment = "top"
[label]
id = "title"
definition = "title"
[/label]
[/column]
[/row]
[row]
[column]
horizontal_grow = "true"
[grid]
[row]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Type:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
vertical_alignment = "top"
[label]
id = "type"
definition = "default"
wrap = "true"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Status:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
id = "status"
definition = "default"
wrap = "true"
[/label]
[/column]
[/row]
[row]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Version:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
id = "version"
definition = "default"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Size:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
id = "size"
definition = "default"
[/label]
[/column]
[/row]
[row]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Author:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
vertical_alignment = "top"
[scroll_label]
id = "author"
definition = "default"
[/scroll_label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Downloads:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
id = "downloads"
definition = "default"
[/label]
[/column]
[/row]
[row]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "date^Last updated:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
vertical_alignment = "top"
[scroll_label]
id = "updated"
definition = "default"
[/scroll_label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "date^First uploaded:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
id = "created"
definition = "default"
[/label]
[/column]
[/row]
[/grid]
[/column]
[/row]
[row]
[column]
horizontal_grow = "true"
[grid]
[row]
grow_factor = 1
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Description:"
[/label]
[/column]
[/row]
[row]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_grow = "true"
[scroll_label]
id = "description"
definition = "description"
label = _ "No description available."
[/scroll_label]
[/column]
[/row]
[/grid]
[/column]
[/row]
[row]
[column]
horizontal_grow = "true"
[grid]
[row]
grow_factor = 1
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Website:"
[/label]
[/column]
[column]
grow_factor = 1
horizontal_grow = "true"
[stacked_widget]
[layer]
[row]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
id = "url_none"
label = _ "url^None"
[/label]
[/column]
[/row]
[/layer]
[layer]
[row]
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_grow = "true"
[text_box]
id = "url"
definition = "default"
[/text_box]
[/column]
[column]
border = "all"
border_size = 5
horizontal_alignment = "right"
[button]
id = "url_copy"
definition = "action_copy"
label = _ "url^Copy"
tooltip = _ "Copy this URL to clipboard"
[/button]
[/column]
[column]
border = "all"
border_size = 5
horizontal_alignment = "right"
[button]
id = "url_go"
definition = "action_go"
label = _ "url^Go"
tooltip = _ "Visit this URL with a web browser"
[/button]
[/column]
[/row]
[/layer]
[/stacked_widget]
[/column]
[/row]
[row]
grow_factor = 1
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Dependencies:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[scroll_label]
id = "dependencies"
definition = "default"
label = _ "addon_dependencies^None"
[/scroll_label]
[/column]
[/row]
[row]
grow_factor = 1
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Translations:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
vertical_alignment = "top"
horizontal_alignment = "left"
[scroll_label]
id = "translations"
definition = "default"
label = _ "translations^None"
[/scroll_label]
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/column]
[/row]
[row]
{GUI_FILLER}
[column]
border = "all"
border_size = 5
horizontal_alignment = "right"
[button]
id = "ok"
definition = "default"
label = _ "Close"
[/button]
[/column]
[/row]
[/grid]
[/resolution]
[/window]

View file

@ -1,443 +0,0 @@
#textdomain wesnoth-lib
#define _GUI_ADDON_TYPE_OPTION ID LABEL
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "left"
[toggle_button]
id = "show_"+{ID}
definition = "default"
label = {LABEL}
[/toggle_button]
[/column]
#enddef
#define _GUI_ADDON_SORT_OPTION ID LABEL
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "left"
[toggle_button]
id = "sort_"+{ID}
definition = "radio"
label = {LABEL}
[/toggle_button]
[/column]
#enddef
#define _GUI_SPACER
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "left"
[spacer]
[/spacer]
[/column]
#enddef
#define _GUI_ADDON_TYPE_OPTIONS
[grid]
[row]
{_GUI_ADDON_TYPE_OPTION sp_campaigns _"addons_of_type^Campaigns"}
{_GUI_ADDON_TYPE_OPTION mp_eras _"addons_of_type^MP eras"}
[/row]
[row]
{_GUI_ADDON_TYPE_OPTION sp_scenarios _"addons_of_type^Scenarios"}
{_GUI_ADDON_TYPE_OPTION mp_factions _"addons_of_type^MP factions"}
[/row]
[row]
{_GUI_ADDON_TYPE_OPTION sp_mp_campaigns _"addons_of_type^SP/MP campaigns"}
{_GUI_ADDON_TYPE_OPTION mp_campaigns _"addons_of_type^MP campaigns"}
[/row]
[row]
{_GUI_ADDON_TYPE_OPTION media _"addons_of_type^Resources"}
{_GUI_ADDON_TYPE_OPTION mp_scenarios _"addons_of_type^MP scenarios"}
[/row]
[row]
{_GUI_ADDON_TYPE_OPTION cores _"addons_of_type^Cores"}
{_GUI_ADDON_TYPE_OPTION mp_maps _"addons_of_type^MP map-packs"}
[/row]
[row]
# FIXME: (also in C++) should this and Unknown be a single option in the UI?
{_GUI_ADDON_TYPE_OPTION other _"addons_of_type^Other"}
{_GUI_ADDON_TYPE_OPTION mp_mods _"addons_of_type^MP modifications"}
[/row]
[row]
{_GUI_ADDON_TYPE_OPTION unknown _"addons_of_type^Unknown"}
{_GUI_SPACER}
[/row]
[/grid]
#enddef
#define _GUI_ADDON_STATUS_OPTIONS
border = "all"
border_size = 5
horizontal_grow = "true"
vertical_grow = "true"
[listbox]
id = "statuses_list"
definition = "default"
[list_definition]
[row]
[column]
horizontal_grow = "true"
vertical_grow = "true"
[toggle_panel]
definition = "default"
return_value_id = "ok"
[grid]
[row]
[column]
horizontal_grow = "true"
vertical_grow = "true"
border = "all"
border_size = 5
[label]
id = "status"
linked_group = "status"
definition = "default"
[/label]
[/column]
[/row]
[/grid]
[/toggle_panel]
[/column]
[/row]
[/list_definition]
[/listbox]
#enddef
[window]
id = "addon_filter_options"
description = "Advanced filtering options for the legacy (GUI1) Add-ons Manager dialog."
[resolution]
definition = "default"
#click_dismiss = "true"
maximum_width = 800
automatic_placement = "true"
vertical_placement = "center"
horizontal_placement = "center"
[linked_group]
id = "status"
fixed_width = "true"
[/linked_group]
[tooltip]
id = "tooltip"
[/tooltip]
[helptip]
id = "tooltip"
[/helptip]
[grid]
[row]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "title"
label = _ "Options"
[/label]
[/column]
[/row]
[row]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Add-ons matching the following criteria will be displayed."
wrap = "true"
[/label]
[/column]
[/row]
[row]
[column]
horizontal_grow = "true"
vertical_grow = "true"
border = "top"
border_size = 5
[grid]
[row]
[column]
horizontal_grow = "true"
vertical_alignment = "top"
[grid]
[row]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Installation status:"
[/label]
[/column]
[/row]
[row]
[column]
{_GUI_ADDON_STATUS_OPTIONS}
[/column]
[/row]
[/grid]
[/column]
[column]
horizontal_grow = "true"
[grid]
[row]
[column]
horizontal_grow = "true"
[grid]
[row]
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
vertical_alignment = "top"
[label]
definition = "default"
label = _ "Add-on types:"
[/label]
[/column]
[column]
border = "all"
border_size = 5
horizontal_alignment = "right"
[button]
id = "toggle_all_displayed_types"
definition = "default"
label = _ "Toggle All"
[/button]
[/column]
[/row]
[/grid]
[/column]
[/row]
[row]
[column]
horizontal_alignment = "left"
{_GUI_ADDON_TYPE_OPTIONS}
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/column]
[/row]
[row]
grow_factor = 0
[column]
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "default"
label = _ "Add-ons will be sorted as follows when no column is selected:"
wrap = "true"
[/label]
[/column]
[/row]
[row]
grow_factor = 0
[column]
horizontal_grow = "true"
vertical_grow = "true"
border = "top"
border_size = 5
[grid]
[row]
[column]
horizontal_alignment = "left"
vertical_alignment = "top"
[grid]
[row]
grow_factor = 0
{_GUI_ADDON_SORT_OPTION by_name ( _ "sort^By name")}
[/row]
[row]
grow_factor = 0
{_GUI_ADDON_SORT_OPTION by_last_updated ( _ "sort^By last updated")}
[/row]
[row]
grow_factor = 0
{_GUI_ADDON_SORT_OPTION by_first_upload ( _ "sort^By first upload")}
[/row]
[/grid]
[/column]
[column]
horizontal_alignment = "left"
vertical_alignment = "top"
[grid]
[row]
grow_factor = 0
{_GUI_ADDON_SORT_OPTION ascending ( _ "sort^Ascending")}
[/row]
[row]
grow_factor = 0
{_GUI_ADDON_SORT_OPTION descending ( _ "sort^Descending")}
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/column]
[/row]
[row]
grow_factor = 0
[column]
horizontal_alignment = "right"
[grid]
[row]
grow_factor = 0
[column]
border = "all"
border_size = 5
horizontal_alignment = "right"
[button]
id = "ok"
definition = "default"
label = _ "Close"
[/button]
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/resolution]
[/window]
#undef _GUI_ADDON_STATUS_OPTIONS
#undef _GUI_ADDON_TYPE_OPTIONS
#undef _GUI_ADDON_TYPE_OPTION
#undef _GUI_ADDON_SORT_OPTION
#undef _GUI_SPACER

View file

@ -517,10 +517,6 @@
<Unit filename="../../src/gui/core/window_builder/instance.hpp" /> <Unit filename="../../src/gui/core/window_builder/instance.hpp" />
<Unit filename="../../src/gui/dialogs/addon/connect.cpp" /> <Unit filename="../../src/gui/dialogs/addon/connect.cpp" />
<Unit filename="../../src/gui/dialogs/addon/connect.hpp" /> <Unit filename="../../src/gui/dialogs/addon/connect.hpp" />
<Unit filename="../../src/gui/dialogs/addon/description.cpp" />
<Unit filename="../../src/gui/dialogs/addon/description.hpp" />
<Unit filename="../../src/gui/dialogs/addon/filter_options.cpp" />
<Unit filename="../../src/gui/dialogs/addon/filter_options.hpp" />
<Unit filename="../../src/gui/dialogs/addon/install_dependencies.cpp" /> <Unit filename="../../src/gui/dialogs/addon/install_dependencies.cpp" />
<Unit filename="../../src/gui/dialogs/addon/install_dependencies.hpp" /> <Unit filename="../../src/gui/dialogs/addon/install_dependencies.hpp" />
<Unit filename="../../src/gui/dialogs/addon/manager.cpp" /> <Unit filename="../../src/gui/dialogs/addon/manager.cpp" />

View file

@ -163,8 +163,6 @@ gui/core/window_builder.cpp
gui/core/window_builder/helper.cpp gui/core/window_builder/helper.cpp
gui/core/window_builder/instance.cpp gui/core/window_builder/instance.cpp
gui/dialogs/addon/connect.cpp gui/dialogs/addon/connect.cpp
gui/dialogs/addon/description.cpp
gui/dialogs/addon/filter_options.cpp
gui/dialogs/addon/install_dependencies.cpp gui/dialogs/addon/install_dependencies.cpp
gui/dialogs/addon/manager.cpp gui/dialogs/addon/manager.cpp
gui/dialogs/addon/uninstall_list.cpp gui/dialogs/addon/uninstall_list.cpp

View file

@ -21,7 +21,6 @@
#include "gettext.hpp" #include "gettext.hpp"
#include "gui/dialogs/addon/connect.hpp" #include "gui/dialogs/addon/connect.hpp"
#include "gui/dialogs/addon/manager.hpp" #include "gui/dialogs/addon/manager.hpp"
#include "gui/dialogs/addon/description.hpp"
#include "gui/dialogs/addon/uninstall_list.hpp" #include "gui/dialogs/addon/uninstall_list.hpp"
#include "gui/dialogs/message.hpp" #include "gui/dialogs/message.hpp"
#include "gui/dialogs/simple_item_selector.hpp" #include "gui/dialogs/simple_item_selector.hpp"

View file

@ -1,414 +0,0 @@
/*
Copyright (C) 2010 - 2016 by Ignacio R. Morelle <shadowm2006@gmail.com>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#define GETTEXT_DOMAIN "wesnoth-lib"
#include "gui/dialogs/addon/description.hpp"
#include "desktop/clipboard.hpp"
#include "desktop/open.hpp"
#include "formula/string_utils.hpp"
#include "gettext.hpp"
#include "gui/auxiliary/find_widget.hpp"
#include "gui/widgets/button.hpp"
#include "gui/widgets/settings.hpp"
#include "gui/widgets/text_box.hpp"
#include "gui/widgets/window.hpp"
#include "language.hpp"
#include "preferences.hpp"
#include "utils/functional.hpp"
#include <iomanip>
#include <stdexcept>
#include "utils/io.hpp"
namespace
{
static std::string format_addon_time(time_t time)
{
if(time) {
std::ostringstream ss;
const char* format = preferences::use_twelve_hour_clock_format()
? "%Y-%m-%d %I:%M %p"
: "%Y-%m-%d %H:%M";
ss << util::put_time(std::localtime(&time), format);
return ss.str();
}
return font::unicode_em_dash;
}
std::string langcode_to_string(const std::string& lcode)
{
for(const auto & ld : get_languages())
{
if(ld.localename == lcode || ld.localename.substr(0, 2) == lcode) {
return ld.language;
}
}
return "";
}
std::string colorify_addon_state_string(const std::string& str,
const addon_tracking_info& state)
{
std::string colorname = "";
// NOTE: these Pango color names must match the colors used
// in describe_addon_status() for GUI1.
switch(state.state) {
case ADDON_NONE:
return str;
case ADDON_INSTALLED:
case ADDON_NOT_TRACKED:
colorname = "#00ff00"; // GOOD_COLOR
break;
case ADDON_INSTALLED_UPGRADABLE:
colorname = "#ffff00"; // YELLOW_COLOR/color_upgradable
break;
case ADDON_INSTALLED_OUTDATED:
colorname = "#ff7f00"; // <255,127,0>/color_outdated
break;
case ADDON_INSTALLED_BROKEN:
colorname = "#ff0000"; // BAD_COLOR
break;
default:
colorname = "#777777"; // GRAY_COLOR
break;
}
return "<span color='" + colorname + "'>" + str + "</span>";
}
std::string describe_addon_state_info(const addon_tracking_info& state)
{
std::string s;
utils::string_map i18n_symbols;
i18n_symbols["local_version"] = state.installed_version.str();
switch(state.state) {
case ADDON_NONE:
if(!state.can_publish) {
s = _("addon_state^Not installed");
} else {
s = _("addon_state^Published, not installed");
}
break;
case ADDON_INSTALLED:
if(!state.can_publish) {
s = _("addon_state^Installed");
} else {
s = _("addon_state^Published");
}
break;
case ADDON_NOT_TRACKED:
if(!state.can_publish) {
s = _("addon_state^Installed, not tracking local version");
} else {
// Published add-ons often don't have local status information,
// hence untracked. This should be considered normal.
s = _("addon_state^Published, not tracking local version");
}
break;
case ADDON_INSTALLED_UPGRADABLE: {
const std::string vstr
= !state.can_publish
? _("addon_state^Installed ($local_version|), "
"upgradable")
: _("addon_state^Published ($local_version| "
"installed), upgradable");
s = utils::interpolate_variables_into_string(vstr, &i18n_symbols);
} break;
case ADDON_INSTALLED_OUTDATED: {
const std::string vstr
= !state.can_publish
? _("addon_state^Installed ($local_version|), "
"outdated on server")
: _("addon_state^Published ($local_version| "
"installed), outdated on server");
s = utils::interpolate_variables_into_string(vstr, &i18n_symbols);
} break;
case ADDON_INSTALLED_BROKEN:
if(!state.can_publish) {
s = _("addon_state^Installed, broken");
} else {
s = _("addon_state^Published, broken");
}
break;
default:
s = _("addon_state^Unknown");
}
return colorify_addon_state_string(s, state);
}
/**
* Retrieves an element from the given associative container or dies in some
* way.
*
* It fails an @a assert() check or throws an exception if the requested element
* does not exist.
*
* @return An element from the container that is guranteed to have existed
* before running this function.
*/
template <typename MapT>
typename MapT::mapped_type const& const_at(typename MapT::key_type const& key,
MapT const& map)
{
typename MapT::const_iterator it = map.find(key);
if(it == map.end()) {
assert(it != map.end());
throw std::out_of_range(
"const_at()"); // Shouldn't get here without disabling assert()
}
return it->second;
}
std::string make_display_dependencies(const std::string& addon_id,
const addons_list& addons_list,
const addons_tracking_list& addon_states)
{
const addon_info& addon = const_at(addon_id, addons_list);
std::string str;
const std::set<std::string>& deps = addon.resolve_dependencies(addons_list);
for(const auto & dep_id : deps)
{
addon_info dep;
addon_tracking_info depstate;
addons_list::const_iterator ali = addons_list.find(dep_id);
addons_tracking_list::const_iterator tli = addon_states.find(dep_id);
if(ali == addons_list.end()) {
dep.id = dep_id; // Build dummy addon_info.
} else {
dep = ali->second;
}
if(tli == addon_states.end()) {
depstate = get_addon_tracking_info(dep);
} else {
depstate = tli->second;
}
if(!str.empty()) {
str += ", ";
}
str += colorify_addon_state_string(dep.display_title(), depstate);
}
return str;
}
}
namespace gui2
{
namespace dialogs
{
/*WIKI
* @page = GUIWindowDefinitionWML
* @order = 2_addon_description
*
* == Add-on description ==
*
* Add-on description and details for the add-ons manager interface.
*
* @begin{table}{dialog_widgets}
*
* image & & styled_widget & m &
* Label for displaying the add-on icon, in a 72x72 area. $
*
* title & & styled_widget & m &
* Dialog title label, corresponding to the add-on name. $
*
* type & & styled_widget & m &
* Label for displaying the add-on's type. $
*
* version & & styled_widget & m &
* Label for displaying the add-on version number. $
*
* status & & styled_widget & m &
* Label for displaying the current installation/upgradability status. $
*
* author & & styled_widget & m &
* Label for displaying the add-on author/maintainer name. $
*
* size & & styled_widget & m &
* Label for displaying the add-on package size. $
*
* downloads & & styled_widget & m &
* Label for displaying the add-on's download count. $
*
* description & & styled_widget & m &
* Text label for displaying the add-on's description. The styled_widget can
* be given a text, this text is shown when the addon has no
* description. If the addon has a description this field shows the
* description of the addon. $
*
* translations & & styled_widget & m &
* Label for displaying a list of translations provided by the add-on.
* Like the ''description'' it can also show a default text if no
* translations are available. $
*
* dependencies & & styled_widget & m &
* Label for displaying a list of dependencies of the add-on. Like the
* ''description'' it can also show a default text if no dependencies
* are defined. $
*
* updated & & styled_widget & m &
* Label displaying the add-on's last upload date. $
*
* created & & styled_widget & m &
* Label displaying the add-on's first upload date. $
*
* url & & text_box & m &
* Textbox displaying the add-on's feedback page URL if provided by
* the server. $
*
* url_go & & button & m &
* Button for launching a web browser to visit the add-on's feedback
* page URL if provided by the server. $
*
* url_copy & & button & m &
* Button for copying the add-on's feedback page URL to clipboard if
* provided by the server. $
*
* url_none & & styled_widget & m &
* Label displayed instead of the other url_* widgets when no URL is
* provided by the server.
*
* @end{table}
*/
REGISTER_DIALOG(addon_description)
addon_description::addon_description(const std::string& addon_id,
const addons_list& addons_list,
const addons_tracking_list& addon_states)
: feedback_url_()
{
const addon_info& addon = const_at(addon_id, addons_list);
const addon_tracking_info& state = const_at(addon_id, addon_states);
const std::string& created_text = format_addon_time(addon.created);
const std::string& updated_text = format_addon_time(addon.updated);
register_label("image", true, addon.display_icon());
register_label("title", true, addon.title);
register_label("version", true, addon.version);
register_label("status", true, describe_addon_state_info(state), true);
register_label("author", true, addon.author);
register_label("type", true, addon.display_type());
register_label("size", true, size_display_string(addon.size));
register_label("downloads", true, std::to_string(addon.downloads));
register_label("created", true, created_text);
register_label("updated", true, updated_text);
if(!addon.description.empty()) {
register_label("description", true, addon.description);
}
if(!addon.depends.empty()) {
register_label(
"dependencies",
true,
make_display_dependencies(addon_id, addons_list, addon_states),
true);
}
feedback_url_ = addon.feedback_url;
std::string languages;
for(const auto & lc : addon.locales)
{
const std::string& langlabel = langcode_to_string(lc);
if(!langlabel.empty()) {
if(!languages.empty()) {
languages += ", ";
}
languages += langlabel;
}
}
if(!languages.empty()) {
register_label("translations", true, languages);
}
}
void addon_description::browse_url_callback()
{
/* TODO: ask for confirmation */
desktop::open_object(feedback_url_);
}
void addon_description::copy_url_callback()
{
desktop::clipboard::copy_to_clipboard(feedback_url_, false);
}
void addon_description::pre_show(window& window)
{
styled_widget& url_none = find_widget<styled_widget>(&window, "url_none", false);
button& url_go_button = find_widget<button>(&window, "url_go", false);
button& url_copy_button = find_widget<button>(&window, "url_copy", false);
text_box& url_textbox = find_widget<text_box>(&window, "url", false);
url_textbox.set_value(feedback_url_);
url_textbox.set_active(false);
if(!feedback_url_.empty()) {
url_none.set_visible(styled_widget::visibility::invisible);
connect_signal_mouse_left_click(
url_go_button,
std::bind(&addon_description::browse_url_callback, this));
connect_signal_mouse_left_click(
url_copy_button,
std::bind(&addon_description::copy_url_callback, this));
if (!desktop::clipboard::available()) {
url_copy_button.set_active(false);
url_copy_button.set_tooltip(_("Clipboard support not found, contact your packager"));
}
} else {
url_go_button.set_active(false);
url_copy_button.set_active(false);
url_go_button.set_visible(styled_widget::visibility::invisible);
url_copy_button.set_visible(styled_widget::visibility::invisible);
url_textbox.set_visible(styled_widget::visibility::invisible);
}
if(!desktop::open_object_is_supported()) {
// No point in displaying the button on platforms that can't do
// open_object().
url_go_button.set_visible(styled_widget::visibility::invisible);
}
}
} // namespace dialogs
} // namespace gui2

View file

@ -1,72 +0,0 @@
/*
Copyright (C) 2010 - 2016 by Ignacio R. Morelle <shadowm2006@gmail.com>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#ifndef GUI_DIALOGS_ADDON_DESCRIPTION_HPP_INCLUDED
#define GUI_DIALOGS_ADDON_DESCRIPTION_HPP_INCLUDED
#include "gui/dialogs/modal_dialog.hpp"
#include "addon/info.hpp"
#include "addon/state.hpp"
namespace gui2
{
namespace dialogs
{
class addon_description : public modal_dialog
{
public:
/**
* Constructor.
*
* @param addon_id The requested add-on's id.
* @param addons_list Complete list of add-ons including the
* requested add-on and its dependencies.
* @param addon_states Local installation status of the add-ons in
* @a addons_list.
*/
addon_description(const std::string& addon_id,
const addons_list& addons_list,
const addons_tracking_list& addon_states);
/**
* The display function.
*
* See @ref modal_dialog for more information.
*/
static void display(const std::string& addon_id,
const addons_list& addons_list,
const addons_tracking_list& addon_states,
CVideo& video)
{
addon_description(addon_id, addons_list, addon_states).show(video);
}
private:
std::string feedback_url_;
/** Inherited from modal_dialog, implemented by REGISTER_DIALOG. */
virtual const std::string& window_id() const;
/** Inherited from modal_dialog. */
void pre_show(window& window);
void browse_url_callback();
void copy_url_callback();
};
} // namespace dialogs
} // namespace gui2
#endif

View file

@ -1,288 +0,0 @@
/*
Copyright (C) 2012 - 2016 by Ignacio Riquelme Morelle <shadowm2006@gmail.com>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#define GETTEXT_DOMAIN "wesnoth-lib"
#include "gui/dialogs/addon/filter_options.hpp"
#include "gui/auxiliary/field.hpp"
#include "gui/widgets/button.hpp"
#ifdef GUI2_EXPERIMENTAL_LISTBOX
#include "gui/widgets/list.hpp"
#else
#include "gui/widgets/listbox.hpp"
#endif
#include "gui/widgets/settings.hpp"
#include "gui/widgets/toggle_button.hpp"
#include "gui/widgets/window.hpp"
#include "gettext.hpp"
#include "utils/functional.hpp"
#include <boost/dynamic_bitset.hpp>
namespace
{
bool unchecked_bool_field_finder(gui2::window& window,
gui2::field_bool* bool_field)
{
return bool_field->get_widget_value(window) == false;
}
}
namespace gui2
{
namespace dialogs
{
/*WIKI
* @page = GUIWindowDefinitionWML
* @order = 2_addon_filter_options
*
* == Add-on filter options ==
*
* Advanced filtering options for the legacy (GUI1) Add-ons Manager dialog.
*
* @begin{table}{dialog_widgets}
*
* statuses_list & & listbox & m &
* A listbox for displaying and selecting add-on installation status
* filter options. $
*
* toggle_all_displayed_types & & button & m &
* This button toggles the values for all the widgets used to control the
* following add-on display options. $
*
* show_unknown & & toggle_button & m &
* Whether to display add-ons of unknown type. $
*
* show_sp_campaigns & & toggle_button & m &
* Whether to display single-player campaign add-ons. $
*
* show_sp_scenarios & & toggle_button & m &
* Whether to display single-player scenario add-ons. $
*
* show_mp_campaigns & & toggle_button & m &
* Whether to display multiplayer campaign add-ons. $
*
* show_mp_scenarios & & toggle_button & m &
* Whether to display multiplayer scenario add-ons. $
*
* show_mp_maps & & toggle_button & m &
* Whether to display multiplayer map-pack add-ons. $
*
* show_mp_eras & & toggle_button & m &
* Whether to display multiplayer era add-ons. $
*
* show_mp_factions & & toggle_button & m &
* Whether to display multiplayer faction add-ons. $
*
* show_mp_mods & & toggle_button & m &
* Whether to display multiplayer mod add-ons. $
*
* show_media & & toggle_button & m &
* Whether to display author resource add-ons. $
*
* show_other & & toggle_button & m &
* Whether to display add-ons of indeterminate types. $
*
* sort_ascending & & toggle_button & m &
* Display add-ons in ascending order by default. $
*
* sort_descending & & toggle_button & m &
* Display add-ons in descending order by default. $
*
* sort_by_name & & toggle_button & m &
* Sort add-ons by name by default. $
*
* sort_by_last_updated & & toggle_button & m &
* Sort add-ons by last update time by default. $
*
* sort_by_first_upload & & toggle_button & m &
* Sort add-ons by creation time by default. $
*
* @end{table}
*/
REGISTER_DIALOG(addon_filter_options)
addon_filter_options::addon_filter_options()
: displayed_status_()
, displayed_types_()
, displayed_types_fields_()
, sort_()
, dir_()
, sort_tgroup_()
, dir_tgroup_()
{
displayed_types_.fill(true);
// This part has to be hardcoded, sadly.
register_displayed_type_field("show_unknown", ADDON_UNKNOWN);
register_displayed_type_field("show_cores", ADDON_CORE);
register_displayed_type_field("show_sp_campaigns", ADDON_SP_CAMPAIGN);
register_displayed_type_field("show_sp_mp_campaigns", ADDON_SP_MP_CAMPAIGN);
register_displayed_type_field("show_sp_scenarios", ADDON_SP_SCENARIO);
register_displayed_type_field("show_mp_campaigns", ADDON_MP_CAMPAIGN);
register_displayed_type_field("show_mp_scenarios", ADDON_MP_SCENARIO);
register_displayed_type_field("show_mp_maps", ADDON_MP_MAPS);
register_displayed_type_field("show_mp_eras", ADDON_MP_ERA);
register_displayed_type_field("show_mp_factions", ADDON_MP_FACTION);
register_displayed_type_field("show_mp_mods", ADDON_MP_MOD);
register_displayed_type_field("show_media", ADDON_MEDIA);
// FIXME: (also in WML) should this and Unknown be a single option in the
// UI?
register_displayed_type_field("show_other", ADDON_OTHER);
}
void addon_filter_options::register_displayed_type_field(
const std::string& field_id, ADDON_TYPE addon_type)
{
displayed_types_fields_.push_back(
register_bool(field_id, true, displayed_types_[addon_type]));
}
void addon_filter_options::read_types_vector(const boost::dynamic_bitset<>& v)
{
for(size_t k = 0; k < displayed_types_.size(); ++k) {
// All unspecified types default to visible.
displayed_types_[k] = k < v.size() ? v[k] : true;
}
}
void addon_filter_options::toggle_all_displayed_types_button_callback(
window& window)
{
const bool have_any_unchecked
= displayed_types_fields_.end()
== std::find_if(displayed_types_fields_.begin(),
displayed_types_fields_.end(),
std::bind(&unchecked_bool_field_finder,
std::ref(window),
_1));
for(const auto field : displayed_types_fields_)
{
field->set_widget_value(window, !have_any_unchecked);
}
}
void addon_filter_options::toggle_sort_callback()
{
sort_ = sort_tgroup_.get_active_member_value();
}
void addon_filter_options::toggle_dir_callback()
{
dir_ = dir_tgroup_.get_active_member_value();
}
void addon_filter_options::pre_show(window& window)
{
listbox& list = find_widget<listbox>(&window, "statuses_list", false);
window.keyboard_capture(&list);
for(unsigned k = ADDON_STATUS_FILTER(); k < FILTER_COUNT; ++k) {
std::map<std::string, string_map> row;
string_map column;
column["label"] = status_label(ADDON_STATUS_FILTER(k));
row.emplace("status", column);
list.add_row(row);
}
list.select_row(displayed_status_);
connect_signal_mouse_left_click(
find_widget<button>(&window, "toggle_all_displayed_types", false),
std::bind(&addon_filter_options::
toggle_all_displayed_types_button_callback,
this,
std::ref(window)));
sort_tgroup_.clear();
register_sort_toggle(window, "by_name", SORT_NAMES);
register_sort_toggle(window, "by_last_updated", SORT_UPDATED);
register_sort_toggle(window, "by_first_upload", SORT_CREATED);
dir_tgroup_.clear();
register_dir_toggle(window, "ascending", DIRECTION_ASCENDING);
register_dir_toggle(window, "descending", DIRECTION_DESCENDING);
}
void addon_filter_options::register_sort_toggle(window& window,
const std::string& toggle_id,
ADDON_SORT value)
{
toggle_button* b
= &find_widget<toggle_button>(&window, "sort_" + toggle_id, false);
b->set_value(value == sort_);
sort_tgroup_.add_member(b, value);
connect_signal_mouse_left_click(
*b,
std::bind(&addon_filter_options::toggle_sort_callback, this));
}
void addon_filter_options::register_dir_toggle(window& window,
const std::string& toggle_id,
ADDON_SORT_DIRECTION value)
{
toggle_button* b
= &find_widget<toggle_button>(&window, "sort_" + toggle_id, false);
b->set_value(value == dir_);
dir_tgroup_.add_member(b, value);
connect_signal_mouse_left_click(
*b,
std::bind(&addon_filter_options::toggle_dir_callback, this));
}
void addon_filter_options::post_show(window& window)
{
// Sorting and direction options are handled in widget
// callbacks.
sort_tgroup_.clear();
dir_tgroup_.clear();
listbox& list = find_widget<listbox>(&window, "statuses_list", false);
const int selected = list.get_selected_row();
if(selected != -1) {
displayed_status_ = ADDON_STATUS_FILTER(selected);
}
}
std::string addon_filter_options::status_label(ADDON_STATUS_FILTER s)
{
switch(s) {
case FILTER_NOT_INSTALLED:
return _("addons_view^Not Installed");
case FILTER_UPGRADABLE:
return _("addons_view^Upgradable");
case FILTER_INSTALLED:
return _("addons_view^Installed");
default:
return _("addons_view^All Add-ons");
}
}
} // namespace dialogs
} // namespace gui2

View file

@ -1,127 +0,0 @@
/*
Copyright (C) 2012 - 2016 by Ignacio Riquelme Morelle <shadowm2006@gmail.com>
Part of the Battle for Wesnoth Project http://www.wesnoth.org/
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY.
See the COPYING file for more details.
*/
#ifndef GUI_DIALOGS_ADDON_FILTER_OPTIONS_HPP_INCLUDED
#define GUI_DIALOGS_ADDON_FILTER_OPTIONS_HPP_INCLUDED
#include "gui/dialogs/modal_dialog.hpp"
#include "gui/widgets/group.hpp"
#include "addon/validation.hpp"
#include "addon/state.hpp"
#include <array>
#include <boost/dynamic_bitset.hpp>
namespace gui2
{
class toggle_button;
namespace dialogs
{
class addon_filter_options : public modal_dialog
{
public:
addon_filter_options();
boost::dynamic_bitset<> displayed_types() const
{
return boost::dynamic_bitset<>(displayed_types_.begin(), displayed_types_.end());
}
void set_displayed_types(const boost::dynamic_bitset<>& types)
{
read_types_vector(types);
}
ADDON_STATUS_FILTER displayed_status() const
{
return displayed_status_;
}
void set_displayed_status(ADDON_STATUS_FILTER status)
{
displayed_status_ = status;
}
ADDON_SORT sort() const
{
return sort_;
}
void set_sort(ADDON_SORT sort)
{
sort_ = sort;
}
ADDON_SORT_DIRECTION direction() const
{
return dir_;
}
void set_direction(ADDON_SORT_DIRECTION direction)
{
dir_ = direction;
}
private:
ADDON_STATUS_FILTER displayed_status_;
std::array<bool, ADDON_TYPES_COUNT> displayed_types_;
std::vector<field_bool*> displayed_types_fields_;
ADDON_SORT sort_;
ADDON_SORT_DIRECTION dir_;
typedef std::pair<toggle_button*, ADDON_SORT> sort_toggle;
typedef std::pair<toggle_button*, ADDON_SORT_DIRECTION> dir_toggle;
// Dialog display state variables.
group<ADDON_SORT> sort_tgroup_;
group<ADDON_SORT_DIRECTION> dir_tgroup_;
void register_displayed_type_field(const std::string& field_id,
ADDON_TYPE addon_type);
void read_types_vector(const boost::dynamic_bitset<>& v);
void toggle_all_displayed_types_button_callback(window& window);
void register_sort_toggle(window& window,
const std::string& toggle_id,
ADDON_SORT value);
void register_dir_toggle(window& window,
const std::string& toggle_id,
ADDON_SORT_DIRECTION value);
void toggle_sort_callback();
void toggle_dir_callback();
/** Inherited from modal_dialog, implemented by REGISTER_DIALOG. */
virtual const std::string& window_id() const;
/** Inherited from modal_dialog. */
void pre_show(window& window);
/** Inherited from modal_dialog. */
void post_show(window& window);
static std::string status_label(ADDON_STATUS_FILTER s);
};
} // namespace dialogs
} // end namespace gui2
#endif

View file

@ -489,8 +489,6 @@ BOOST_AUTO_TEST_CASE(test_gui2)
* one. * one.
*/ */
"label_settings", "label_settings",
"addon_description",
"addon_filter_options",
"addon_uninstall_list", "addon_uninstall_list",
"addon_manager", "addon_manager",
"loading_screen", "loading_screen",