Addons Manager: New layout for resolutions < ~1280x800

This commit is contained in:
Celtic Minstrel 2017-04-15 18:24:01 -04:00
parent 88430d3b88
commit 4fbc943612
3 changed files with 224 additions and 23 deletions

View file

@ -786,6 +786,182 @@
id = "addon_manager"
description = "Addon selection dialog."
[resolution]
window_width=1280
window_height=800
definition = "addon_manager"
{GUI_WINDOW_FULLSCREEN}
[tooltip]
id = "tooltip_large"
[/tooltip]
[helptip]
id = "tooltip_large"
[/helptip]
[grid]
[row]
grow_factor = 0
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "left"
[label]
definition = "title"
label = _ "Get Add-ons"
[/label]
[/column]
[/row]
[row]
grow_factor = 1
[column]
border = "all"
border_size = 5
horizontal_grow = "true"
vertical_grow = "true"
[stacked_widget]
# TODO: Make a definition for this?
#definition = "box_display_no_blur_no_border"
id = "main_stack"
[layer]
[row]
grow_factor = 0
[column]
grow_factor = 0
horizontal_grow = "true"
vertical_grow = "true"
{_GUI_ADDON_FILTER_OPTIONS}
[/column]
[/row]
[row]
grow_factor = 1
[column]
grow_factor = 0
border = "all"
border_size = 10
horizontal_grow = "true"
vertical_grow = "true"
[addon_list]
id = "addons"
definition = "default"
install_status_visibility = "visible"
install_buttons_visibility = "visible"
[/addon_list]
[/column]
[/row]
[/layer]
[layer]
[row]
grow_factor = 1
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_grow = "true"
vertical_grow = "true"
{_GUI_ADDON_DETAILS_SECTION}
[/column]
[/row]
[/layer]
[/stacked_widget]
[/column]
[/row]
[row]
grow_factor = 0
[column]
horizontal_grow = "true"
[grid]
[row]
grow_factor = 1
[column]
grow_factor = 0
border = "all"
border_size = 5
horizontal_alignment = "left"
[button]
id = "details_toggle"
definition = "default"
label = _"Addon Details"
[/button]
[/column]
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "right"
[button]
id = "update_all"
definition = "really_large"
label = _ "Update All"
[/button]
[/column]
[column]
grow_factor = 0
border = "all"
border_size = 5
horizontal_alignment = "right"
[button]
id = "cancel"
definition = "default"
label = _ "Exit"
[/button]
[/column]
[/row]
[/grid]
[/column]
[/row]
[/grid]
[/resolution]
[resolution]
definition = "addon_manager"

View file

@ -423,6 +423,12 @@ void addon_manager::pre_show(window& window)
find_widget<button>(&window, "show_help", false),
std::bind(&addon_manager::show_help, this, std::ref(window)));
if(stacked_widget* stk = find_widget<stacked_widget>(&window, "main_stack", false, false)) {
button& btn = find_widget<button>(&window, "details_toggle", false);
connect_signal_mouse_left_click(btn, std::bind(&addon_manager::toggle_details, this, std::ref(btn), std::ref(*stk)));
stk->select_layer(0);
}
on_addon_select(window);
window.set_enter_disabled(true);
@ -434,6 +440,17 @@ void addon_manager::pre_show(window& window)
window.set_exit_hook(std::bind(&addon_manager::exit_hook, this, std::ref(window)));
}
void addon_manager::toggle_details(button& btn, stacked_widget& stk)
{
if(stk.current_layer() == 0) {
btn.set_label(_("addons^Back to List"));
stk.select_layer(1);
} else {
btn.set_label(_("Addon Details"));
stk.select_layer(0);
}
}
void addon_manager::load_addon_list(window& window)
{
if(need_wml_cache_refresh_) {
@ -718,24 +735,29 @@ void addon_manager::on_addon_select(window& window)
return;
}
find_widget<drawing>(&window, "image", false).set_label(info->display_icon());
widget* parent = &window;
if(stacked_widget* stk = find_widget<stacked_widget>(&window, "main_stack", false, false)) {
parent = stk->get_layer_grid(1);
}
find_widget<styled_widget>(&window, "title", false).set_label(info->display_title());
find_widget<styled_widget>(&window, "description", false).set_label(info->description);
find_widget<styled_widget>(&window, "version", false).set_label(info->version.str());
find_widget<styled_widget>(&window, "author", false).set_label(info->author);
find_widget<styled_widget>(&window, "type", false).set_label(info->display_type());
find_widget<drawing>(parent, "image", false).set_label(info->display_icon());
styled_widget& status = find_widget<styled_widget>(&window, "status", false);
find_widget<styled_widget>(parent, "title", false).set_label(info->display_title());
find_widget<styled_widget>(parent, "description", false).set_label(info->description);
find_widget<styled_widget>(parent, "version", false).set_label(info->version.str());
find_widget<styled_widget>(parent, "author", false).set_label(info->author);
find_widget<styled_widget>(parent, "type", false).set_label(info->display_type());
styled_widget& status = find_widget<styled_widget>(parent, "status", false);
status.set_label(describe_status_verbose(tracking_info_[info->id]));
status.set_use_markup(true);
find_widget<styled_widget>(&window, "size", false).set_label(size_display_string(info->size));
find_widget<styled_widget>(&window, "downloads", false).set_label(std::to_string(info->downloads));
find_widget<styled_widget>(&window, "created", false).set_label(format_addon_time(info->created));
find_widget<styled_widget>(&window, "updated", false).set_label(format_addon_time(info->updated));
find_widget<styled_widget>(parent, "size", false).set_label(size_display_string(info->size));
find_widget<styled_widget>(parent, "downloads", false).set_label(std::to_string(info->downloads));
find_widget<styled_widget>(parent, "created", false).set_label(format_addon_time(info->created));
find_widget<styled_widget>(parent, "updated", false).set_label(format_addon_time(info->updated));
find_widget<styled_widget>(&window, "dependencies", false).set_label(!info->depends.empty()
find_widget<styled_widget>(parent, "dependencies", false).set_label(!info->depends.empty()
? make_display_dependencies(info->id, addons_, tracking_info_)
: _("None"));
@ -751,41 +773,41 @@ void addon_manager::on_addon_select(window& window)
}
}
find_widget<styled_widget>(&window, "translations", false).set_label(!languages.empty() ? languages : _("None"));
find_widget<styled_widget>(parent, "translations", false).set_label(!languages.empty() ? languages : _("None"));
const std::string& feedback_url = info->feedback_url;
if(!feedback_url.empty()) {
find_widget<stacked_widget>(&window, "feedback_stack", false).select_layer(1);
find_widget<text_box>(&window, "url", false).set_value(feedback_url);
find_widget<stacked_widget>(parent, "feedback_stack", false).select_layer(1);
find_widget<text_box>(parent, "url", false).set_value(feedback_url);
} else {
find_widget<stacked_widget>(&window, "feedback_stack", false).select_layer(0);
find_widget<stacked_widget>(parent, "feedback_stack", false).select_layer(0);
}
bool installed = is_installed_addon_status(tracking_info_[info->id].state);
bool updatable = tracking_info_[info->id].state == ADDON_INSTALLED_UPGRADABLE;
stacked_widget& action_stack = find_widget<stacked_widget>(&window, "action_stack", false);
stacked_widget& action_stack = find_widget<stacked_widget>(parent, "action_stack", false);
if(!tracking_info_[info->id].can_publish) {
action_stack.select_layer(0);
stacked_widget& install_update_stack = find_widget<stacked_widget>(&window, "install_update_stack", false);
stacked_widget& install_update_stack = find_widget<stacked_widget>(parent, "install_update_stack", false);
install_update_stack.select_layer(updatable ? 1 : 0);
if(!updatable) {
find_widget<button>(&window, "install", false).set_active(!installed);
find_widget<button>(parent, "install", false).set_active(!installed);
} else {
find_widget<button>(&window, "update", false).set_active(true);
find_widget<button>(parent, "update", false).set_active(true);
}
find_widget<button>(&window, "uninstall", false).set_active(installed);
find_widget<button>(parent, "uninstall", false).set_active(installed);
} else {
action_stack.select_layer(1);
// TODO: are these the right flags to check?
find_widget<button>(&window, "publish", false).set_active(installed);
find_widget<button>(&window, "delete", false).set_active(!installed);
find_widget<button>(parent, "publish", false).set_active(installed);
find_widget<button>(parent, "delete", false).set_active(!installed);
}
}

View file

@ -31,6 +31,8 @@ class text_box_base;
class text_box;
class pane;
class selectable_item;
class button;
class stacked_widget;
namespace dialogs
{
@ -51,6 +53,7 @@ private:
std::vector<selectable_item*> orders_;
void on_addon_select(window& window);
void toggle_details(button& btn, stacked_widget& stk);
/** Inherited from modal_dialog, implemented by REGISTER_DIALOG. */
virtual const std::string& window_id() const override;