Updates the plugin manager window rows to use a local copy of
ModuleInfo.
Passing around a pointer to the actual entry within the modules_ vector
felt like a sensible optimization for updating the enabled state of
entries. However when deleting entries from the Missing category it
means pointers to anything after the deleted entry become incorrect or
invalidated.
The Status enum is renamed to Category as it's more appropriate.
Adds handling for plugins in safe mode by always putting them in the
Installed category since we can't know if they're Errored or Missing.
Also displays the Disabled indicator for all plugins in safe mode.
Updates the plugin manager window to use the new failed module info.
Plugins installed in legacy folder locations are marked as Legacy with
a notice that will stop working in the future.
Plugins that failed to load are listed under an Errors section.
Plugins in the modules.json file that are not found are listed under
a Missing section. These entries can be removed from the modules.json
via a delete button.
This also cleans up some other small issues and updates the dialog
buttons to be Save/Discard instead of Ok/Close.