[Bf-extensions-cvs] [3a1e3972] xr-actions-D9124: VR: Enable saving over existing prefs action set

Peter Kim noreply at git.blender.org
Sun Nov 22 11:38:40 CET 2020


Commit: 3a1e3972f18af9490d4769c8b28b5d0d5c24207e
Author: Peter Kim
Date:   Sat Nov 21 18:02:05 2020 +0900
Branches: xr-actions-D9124
https://developer.blender.org/rBA3a1e3972f18af9490d4769c8b28b5d0d5c24207e

VR: Enable saving over existing prefs action set

Asks for user confirmation before overwriting. Also saves preferences
and sends report on successful write.

===================================================================

M	viewport_vr_preview.py

===================================================================

diff --git a/viewport_vr_preview.py b/viewport_vr_preview.py
index 8d5aad54..41859e20 100644
--- a/viewport_vr_preview.py
+++ b/viewport_vr_preview.py
@@ -1372,7 +1372,11 @@ class VIEW3D_OT_vr_action_set_save_to_prefs(Operator):
     bl_idname = "view3d.vr_action_set_save_to_prefs"
     bl_label = "Save to Preferences"
     bl_description = "Save selected VR action set to user preferences"
-    bl_options = {'UNDO', 'REGISTER'}
+    bl_options = {'INTERNAL', 'REGISTER'}
+
+    idx_existing: IntProperty(
+        default = -1
+    )
 
     def execute(self, context):
         scene = context.scene
@@ -1383,10 +1387,22 @@ class VIEW3D_OT_vr_action_set_save_to_prefs(Operator):
             return {'CANCELLED'}
         prefs_action_sets = prefs.action_sets
 
-        # Check if action set with same name already exists.
-        for action_set in prefs_action_sets:
-            if (action_set.name == scene_action_set.name):
-                return {'CANCELLED'}
+        if (self.idx_existing >= 0):
+            # Remove existing action set.
+            action_set = prefs_action_sets[self.idx_existing]
+
+            # Remove key map items.
+            km = vr_get_keymap(context, True)
+            if km:
+                for action in action_set.actions:
+                    kmi = km.keymap_items.from_xr(action_set.name, action.name)
+                    if kmi:
+                        km.keymap_items.remove(kmi)
+
+            prefs_action_sets.remove(self.idx_existing)
+
+            if self.idx_existing >= prefs.action_sets_selected:
+                prefs.action_sets_selected -= 1
 
         prefs_action_sets.add()
         idx = len(prefs_action_sets) - 1
@@ -1410,8 +1426,38 @@ class VIEW3D_OT_vr_action_set_save_to_prefs(Operator):
 
         prefs.action_sets_selected = idx
 
+        # Save preferences.
+        bpy.ops.wm.save_userpref()
+
+        self.report({'INFO'}, "Saved action set \"" + scene_action_set.name + "\" to user preferences")
+
         return {'FINISHED'}
 
+    @classmethod
+    def poll(cls, context):
+        return True
+
+    def invoke(self, context, event):
+        scene = context.scene
+        prefs = context.preferences.addons[__name__].preferences
+
+        scene_action_set = VRActionSet.get_selected_action_set(context, False)
+        if not scene_action_set:
+            return {'CANCELLED'}
+        prefs_action_sets = prefs.action_sets
+
+        # Check if action set with same name already exists.
+        for idx in range(len(prefs_action_sets)):
+            if (prefs_action_sets[idx].name == scene_action_set.name):
+                self.idx_existing = idx
+                return context.window_manager.invoke_props_dialog(self)
+
+        self.idx_existing = -1
+        return self.execute(context)
+
+    def draw(self, context):
+        self.layout.label(text="Overwrite existing action set?")
+
 
 class VIEW3D_OT_vr_action_sets_clear(Operator):
     bl_idname = "view3d.vr_action_sets_clear"



More information about the Bf-extensions-cvs mailing list