From 9c8b15fa1a6a8337f991f4839e865fd91393add4 Mon Sep 17 00:00:00 2001 From: Dion Moult Date: Wed, 1 Mar 2023 14:30:56 +1100 Subject: [PATCH] Fix #2645. No longer override built-in operators for critical features. --- .../blenderbim/bim/module/geometry/__init__.py | 16 +++++++++++----- .../blenderbim/bim/module/geometry/operator.py | 18 +++++++++--------- .../blenderbim/bim/module/geometry/ui.py | 6 ++++++ 3 files changed, 26 insertions(+), 14 deletions(-) diff --git a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py index 92abfc43ab..0f75b4450c 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/__init__.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/__init__.py @@ -50,19 +50,25 @@ addon_keymaps = [] def register(): bpy.types.Scene.BIMGeometryProperties = bpy.props.PointerProperty(type=prop.BIMGeometryProperties) bpy.types.OBJECT_PT_transform.append(ui.BIM_PT_transform) + bpy.types.VIEW3D_MT_object.append(ui.object_menu) wm = bpy.context.window_manager if wm.keyconfigs.addon: - km = wm.keyconfigs.addon.keymaps.new(name="3D View", space_type="VIEW_3D") + km = wm.keyconfigs.addon.keymaps.new(name="Object Mode", space_type="EMPTY") + kmi = km.keymap_items.new("bim.override_object_duplicate_move", "D", "PRESS", shift=True) + kmi = km.keymap_items.new("bim.override_object_duplicate_move_linked", "D", "PRESS", alt=True) kmi = km.keymap_items.new("bim.override_paste_buffer", "V", "PRESS", ctrl=True) - kmi.properties["name"] = "bim.override_paste_buffer" - addon_keymaps.append((km, kmi)) + kmi = km.keymap_items.new("bim.override_object_delete", "X", "PRESS") + kmi = km.keymap_items.new("bim.override_object_delete", "DEL", "PRESS") + kmi.properties.confirm = False + km = wm.keyconfigs.addon.keymaps.new(name="Outliner", space_type="OUTLINER") kmi = km.keymap_items.new("bim.override_paste_buffer", "V", "PRESS", ctrl=True) - kmi.properties["name"] = "bim.override_paste_buffer" - addon_keymaps.append((km, kmi)) + kmi = km.keymap_items.new("bim.override_outliner_delete", "X", "PRESS") + kmi = km.keymap_items.new("bim.override_outliner_delete", "DEL", "PRESS") def unregister(): + bpy.types.VIEW3D_MT_object.remove(ui.object_menu) bpy.types.OBJECT_PT_transform.remove(ui.BIM_PT_transform) del bpy.types.Scene.BIMGeometryProperties wm = bpy.context.window_manager diff --git a/src/blenderbim/blenderbim/bim/module/geometry/operator.py b/src/blenderbim/blenderbim/bim/module/geometry/operator.py index 1795bf1f01..c7ed57d303 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/operator.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/operator.py @@ -396,8 +396,8 @@ class OverrideDeleteTrait: class OverrideDelete(bpy.types.Operator, OverrideDeleteTrait): - bl_idname = "object.delete" - bl_label = "Delete" + bl_idname = "bim.override_object_delete" + bl_label = "IFC Delete" bl_options = {"REGISTER", "UNDO"} use_global: bpy.props.BoolProperty(default=False) confirm: bpy.props.BoolProperty(default=True) @@ -432,8 +432,8 @@ class OverrideDelete(bpy.types.Operator, OverrideDeleteTrait): class OverrideOutlinerDelete(bpy.types.Operator, OverrideDeleteTrait): - bl_idname = "outliner.delete" - bl_label = "Delete" + bl_idname = "bim.override_outliner_delete" + bl_label = "IFC Delete" bl_options = {"REGISTER", "UNDO"} hierarchy: bpy.props.BoolProperty(default=False) @@ -500,8 +500,8 @@ class OverrideOutlinerDelete(bpy.types.Operator, OverrideDeleteTrait): class OverrideDuplicateMove(bpy.types.Operator): - bl_idname = "object.duplicate_move" - bl_label = "Duplicate Objects" + bl_idname = "bim.override_object_duplicate_move" + bl_label = "IFC Duplicate Objects" bl_options = {"REGISTER", "UNDO"} @classmethod @@ -558,8 +558,8 @@ class OverrideDuplicateMove(bpy.types.Operator): class OverrideDuplicateMoveLinked(bpy.types.Operator): - bl_idname = "object.duplicate_move_linked" - bl_label = "Duplicate Linked" + bl_idname = "bim.override_object_duplicate_move_linked" + bl_label = "IFC Duplicate Linked" @classmethod def poll(cls, context): @@ -613,7 +613,7 @@ class OverrideDuplicateMoveLinked(bpy.types.Operator): class OverridePasteBuffer(bpy.types.Operator): bl_idname = "bim.override_paste_buffer" - bl_label = "Paste BIM Objects" + bl_label = "IFC Paste BIM Objects" def execute(self, context): bpy.ops.view3d.pastebuffer() diff --git a/src/blenderbim/blenderbim/bim/module/geometry/ui.py b/src/blenderbim/blenderbim/bim/module/geometry/ui.py index fce82d0112..390f2b6f30 100644 --- a/src/blenderbim/blenderbim/bim/module/geometry/ui.py +++ b/src/blenderbim/blenderbim/bim/module/geometry/ui.py @@ -23,6 +23,12 @@ from blenderbim.bim.helper import prop_with_search from blenderbim.bim.module.geometry.data import RepresentationsData, ConnectionsData, DerivedPlacementsData +def object_menu(self, context): + self.layout.operator("bim.override_object_duplicate_move", icon="PLUGIN") + self.layout.operator("bim.override_object_delete", icon="PLUGIN") + self.layout.operator("bim.override_paste_buffer", icon="PLUGIN") + + class BIM_PT_representations(Panel): bl_label = "IFC Representations" bl_idname = "BIM_PT_representations"