diff options
Diffstat (limited to 'rigify/__init__.py')
-rw-r--r-- | rigify/__init__.py | 89 |
1 files changed, 22 insertions, 67 deletions
diff --git a/rigify/__init__.py b/rigify/__init__.py index f4d1979b..20e18a42 100644 --- a/rigify/__init__.py +++ b/rigify/__init__.py @@ -149,33 +149,6 @@ class RigifyFeatureSets(bpy.types.PropertyGroup): name: bpy.props.StringProperty() module_name: bpy.props.StringProperty() - def toggle_featureset(self, context): - feature_set_list.call_register_function(self.module_name, self.enabled) - context.preferences.addons[__package__].preferences.update_external_rigs() - - enabled: bpy.props.BoolProperty( - name = "Enabled", - description = "Whether this feature-set is registered or not", - update = toggle_featureset, - default = True - ) - - -class RIGIFY_UL_FeatureSets(bpy.types.UIList): - def draw_item(self, context, layout, data, item, icon, active_data, active_propname): - rigify_prefs = data - feature_sets = rigify_prefs.rigify_feature_sets - active_set = feature_sets[rigify_prefs.active_feature_set_index] - feature_set_entry = item - if self.layout_type in {'DEFAULT', 'COMPACT'}: - row = layout.row() - row.prop(feature_set_entry, 'name', text="", emboss=False) - - icon = 'CHECKBOX_HLT' if feature_set_entry.enabled else 'CHECKBOX_DEHLT' - row.enabled = feature_set_entry.enabled - layout.prop(feature_set_entry, 'enabled', text="", icon=icon, emboss=False) - elif self.layout_type in {'GRID'}: - pass class RigifyPreferences(AddonPreferences): # this must match the addon name, use '__package__' @@ -184,50 +157,32 @@ class RigifyPreferences(AddonPreferences): def register_feature_sets(self, register): """Call register or unregister of external feature sets""" - for set_name in feature_set_list.get_enabled_modules_names(): + for set_name in feature_set_list.get_installed_list(): feature_set_list.call_register_function(set_name, register) - def refresh_installed_feature_sets(self): - """Synchronize preferences entries with what's actually in the file system.""" - feature_set_prefs = self.rigify_feature_sets - - module_names = feature_set_list.get_installed_modules_names() - - # If there is a feature set preferences entry with no corresponding - # installed module, user must've manually removed it from the filesystem, - # so let's remove such entries. - for i, fs in enumerate(reversed(feature_set_prefs)): - if fs.module_name not in module_names: - feature_set_prefs.remove(i) - # Active index could end up out of bounds. - self.active_feature_set_index = 0 - - # If there is an installed feature set in the file system but no corresponding - # entry, user must've installed it manually. Make sure it has an entry. - for module_name in module_names: - feature_set_name = feature_set_list.get_ui_name(module_name) - if feature_set_name not in feature_set_prefs: - fs = feature_set_prefs.add() - fs.name = feature_set_name - fs.module_name = module_name - - def update_external_rigs(self): + def update_external_rigs(self, force=False): """Get external feature sets""" + set_list = feature_set_list.get_installed_list() - self.refresh_installed_feature_sets() + # Update feature set list + self.rigify_feature_sets.clear() - set_list = feature_set_list.get_enabled_modules_names() + for s in set_list: + list_entry = self.rigify_feature_sets.add() + list_entry.name = feature_set_list.get_ui_name(s) + list_entry.module_name = s - # Reload rigs - print('Reloading external rigs...') - rig_lists.get_external_rigs(set_list) + if force or len(set_list) > 0: + # Reload rigs + print('Reloading external rigs...') + rig_lists.get_external_rigs(set_list) - # Reload metarigs - print('Reloading external metarigs...') - metarig_menu.get_external_metarigs(set_list) + # Reload metarigs + print('Reloading external metarigs...') + metarig_menu.get_external_metarigs(set_list) - # Re-register rig parameters - register_rig_parameters() + # Re-register rig parameters + register_rig_parameters() rigify_feature_sets: bpy.props.CollectionProperty(type=RigifyFeatureSets) active_feature_set_index: IntProperty() @@ -241,8 +196,8 @@ class RigifyPreferences(AddonPreferences): row = layout.row() row.template_list( - 'RIGIFY_UL_FeatureSets', - '', + "UI_UL_list", + "rigify_feature_sets", self, "rigify_feature_sets", self, 'active_feature_set_index' ) @@ -304,7 +259,8 @@ def draw_feature_set_prefs(layout, context, featureset: RigifyFeatureSets): op = row.operator('wm.url_open', text="Report a Bug", icon='URL') op.url = info['tracker_url'] - row.operator("wm.rigify_remove_feature_set", text="Remove", icon='CANCEL') + op = row.operator("wm.rigify_remove_feature_set", text="Remove", icon='CANCEL') + op.featureset = featureset.module_name class RigifyName(bpy.types.PropertyGroup): @@ -487,7 +443,6 @@ classes = ( RigifyColorSet, RigifySelectionColors, RigifyArmatureLayer, - RIGIFY_UL_FeatureSets, RigifyFeatureSets, RigifyPreferences, ) |