Add-on manager: add an update button to the main panel

This commit is contained in:
Jyrki Vesterinen 2017-03-11 19:12:37 +02:00
parent 672ac59dae
commit 0d6f7de167
2 changed files with 64 additions and 7 deletions

View file

@ -183,14 +183,54 @@
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "center"
[button]
id = "install"
definition = "addon_install"
[/button]
[stacked_widget]
id = "install_update_stack"
[layer]
[row]
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "center"
[button]
id = "install"
definition = "addon_install"
[/button]
[/column]
[/row]
[/layer]
[layer]
[row]
[column]
grow_factor = 1
border = "all"
border_size = 5
horizontal_alignment = "center"
[button]
id = "update"
definition = "addon_upgrade"
[/button]
[/column]
[/row]
[/layer]
[/stacked_widget]
[/column]

View file

@ -396,6 +396,14 @@ void addon_manager::pre_show(window& window)
find_widget<button>(&window, "uninstall", false),
std::bind(&addon_manager::uninstall_selected_addon, this, std::ref(window)));
// Make the update button temporarily accessible.
find_widget<stacked_widget>(&window, "install_update_stack", false).select_layer(1);
connect_signal_mouse_left_click(
find_widget<button>(&window, "update", false),
std::bind(&addon_manager::update_selected_addon, this, std::ref(window)));
// Revert the above change for good measure.
find_widget<stacked_widget>(&window, "install_update_stack", false).select_layer(0);
connect_signal_mouse_left_click(
find_widget<button>(&window, "publish", false),
std::bind(&addon_manager::publish_selected_addon, this, std::ref(window)));
@ -768,13 +776,22 @@ void addon_manager::on_addon_select(window& window)
}
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);
if(!tracking_info_[info->id].can_publish) {
action_stack.select_layer(0);
find_widget<button>(&window, "install", false).set_active(!installed);
stacked_widget& install_update_stack = find_widget<stacked_widget>(&window, "install_update_stack", false);
install_update_stack.select_layer(updatable ? 1 : 0);
if(!updatable) {
find_widget<button>(&window, "install", false).set_active(!installed);
} else {
find_widget<button>(&window, "update", false).set_active(true);
}
find_widget<button>(&window, "uninstall", false).set_active(installed);
} else {
action_stack.select_layer(1);