[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