Use the new DB::Category functions in FaceManagementPage.
Polish
Fixed saving and reading of empty sub-categories (groups without members).
Rewrote the sub-categories settings page. Implemented a hierarchical tree view for nested sub-categories. Also added a drag-and-drop interface for organizing sub-categories. Once this is finished, it will fix Bug #237846 :-)
Fixed crash when dragging a group to another category.
Use better names for sub- and super-categories.
Added a better error message if a group already exists.
Transparently convert old standard category names to new ones.
Use a validator for tag group names.
Also correct the name of standard categories stored with their localized name by older KPA versions. Removed the "Keywords" part, as this is not mapped to "Events", cf. DB::Category::standardCategories().
Renamed the "Subcategories" infrastructure to the more convenient name "Tag Groups".
Remove special treatment of deprecated standard categories.

"Peoples", "Locations" and localized category names in the DB (as far as
we can catch them) are now automatically converted to their modern
counterpart. I.e. we don't need any special treatment for them in the
rest of the code.

"Keywords" is still treated a standard category, since "Events" is not a
1-to-1 equivalent.

The database version is also pushed by this change, because the
conversion should be a onetime operation only.
Highlight a valid drop target for a tag group drag and drop action.
Be sure to reset the last highlighted drop target.
With the latest fixes, we don't need to handle "Locations" and "Persons" in a special way anymore.
Fixed a crash when the blank tree widget is clicked, not an item.
Set the dirty marker if any data has been changed. Reset the tag group map if "Cancel" is clicked.
Simplified the slotDeleteMember() function.
Revert all changes to the "real" category objects made by the tag groups page.
Don't set the dirty marker before "OK" or "Apply" is clicked.