New add-on manager: implement add-on uninstalling

Untested because the add-on server is down at the moment.
This commit is contained in:
Jyrki Vesterinen 2017-02-07 21:30:51 +02:00
parent f70a5f6b3f
commit 05ed820ce7
2 changed files with 44 additions and 0 deletions

View file

@ -265,6 +265,8 @@ void addon_manager::pre_show(window& window)
#else
list.set_install_function(std::bind(&addon_manager::install_addon,
this, std::placeholders::_1, std::ref(window)));
list.set_uninstall_function(std::bind(&addon_manager::uninstall_addon,
this, std::placeholders::_1, std::ref(window)));
list.set_callback_value_change(
dialog_callback<addon_manager, &addon_manager::on_addon_select>);
#endif
@ -292,6 +294,10 @@ void addon_manager::pre_show(window& window)
find_widget<button>(&window, "install", false),
std::bind(&addon_manager::install_selected_addon, this, std::ref(window)));
connect_signal_mouse_left_click(
find_widget<button>(&window, "uninstall", false),
std::bind(&addon_manager::uninstall_selected_addon, this, std::ref(window)));
connect_signal_mouse_left_click(
url_go_button,
std::bind(&addon_manager::browse_url_callback, this, std::ref(url_textbox)));
@ -377,6 +383,42 @@ void addon_manager::install_addon(addon_info addon, window& window)
}
}
void addon_manager::uninstall_selected_addon(window& window)
{
addon_list& addons = find_widget<addon_list>(&window, "addons", false);
const addon_info* addon = addons.get_selected_addon();
if(addon == nullptr) {
return;
}
uninstall_addon(*addon, window);
}
void addon_manager::uninstall_addon(addon_info addon, window& window)
{
addon_list& addons = find_widget<addon_list>(&window, "addons", false);
if(have_addon_pbl_info(addon.id) || have_addon_in_vcs_tree(addon.id)) {
show_error_message(window.video(),
_("The following add-on appears to have publishing or version control information stored locally, and will not be removed:") + " " +
addon.display_title());
return;
}
bool success = remove_local_addon(addon.id);
if(!success) {
show_error_message(window.video(), _("The following add-on could not be deleted properly:") + " " + addon.display_title());
} else {
load_addon_list(window);
// Reselect the add-on.
addons.select_addon(addon.id);
on_addon_select(window);
}
}
void addon_manager::show_help(window& window)
{
help::show_help(window.video(), "installing_addons");

View file

@ -70,6 +70,8 @@ private:
void install_selected_addon(window& window);
void install_addon(addon_info addon, window& window);
void uninstall_selected_addon(window& window);
void uninstall_addon(addon_info addon, window& window);
void browse_url_callback(text_box& url_box);
void copy_url_callback(text_box& url_box);
void options_button_callback(window& window);