mirror of
https://github.com/IfcOpenShell/IfcOpenShell.git
synced 2026-08-10 09:48:32 +00:00
Enum search popup now automatically closes on item selection
+ move close_operator_panel higher in hierarchy to access it
This commit is contained in:
@@ -132,6 +132,15 @@ def get_enum_items(data, prop_name, context):
|
||||
return items
|
||||
|
||||
|
||||
# hack to close popup
|
||||
# https://blender.stackexchange.com/a/202576/130742
|
||||
def close_operator_panel(event):
|
||||
x, y = event.mouse_x, event.mouse_y
|
||||
bpy.context.window.cursor_warp(10, 10)
|
||||
move_back = lambda: bpy.context.window.cursor_warp(x, y)
|
||||
bpy.app.timers.register(move_back, first_interval=0.01)
|
||||
|
||||
|
||||
class IfcHeaderExtractor:
|
||||
def __init__(self, filepath: str):
|
||||
self.filepath = filepath
|
||||
|
||||
@@ -24,6 +24,7 @@ from ifcopenshell.api.group.data import Data
|
||||
from ifcopenshell.util.selector import Selector
|
||||
import blenderbim.tool as tool
|
||||
from blenderbim.bim.ifc import IfcStore
|
||||
from blenderbim.bim.helper import close_operator_panel
|
||||
from itertools import cycle
|
||||
from bpy.types import PropertyGroup, Operator
|
||||
from bpy.props import (
|
||||
@@ -66,14 +67,7 @@ def does_keyword_exist(pattern, string, context):
|
||||
elif string == pattern:
|
||||
return True
|
||||
|
||||
# hack to close popup
|
||||
# https://blender.stackexchange.com/a/202576/130742
|
||||
def close_operator_panel(event):
|
||||
x, y = event.mouse_x, event.mouse_y
|
||||
bpy.context.window.cursor_warp(10, 10)
|
||||
move_back = lambda: bpy.context.window.cursor_warp(x, y)
|
||||
bpy.app.timers.register(move_back, first_interval=0.01)
|
||||
|
||||
|
||||
class EditBlenderCollection(Operator):
|
||||
bl_idname = "bim.edit_blender_collection"
|
||||
bl_label = "Add or Remove blender collection item"
|
||||
@@ -639,10 +633,6 @@ class LoadQuery(Operator):
|
||||
bl_idname = "bim.load_query"
|
||||
bl_label = "Load Query"
|
||||
index: IntProperty()
|
||||
|
||||
def invoke(self, context, event):
|
||||
close_operator_panel(event)
|
||||
return self.execute(context)
|
||||
|
||||
def execute(self, context):
|
||||
ifc_selector = context.scene.IfcSelectorProperties
|
||||
|
||||
@@ -27,7 +27,7 @@ from . import schema
|
||||
from blenderbim.bim.ifc import IfcStore
|
||||
from blenderbim.bim.prop import StrProperty
|
||||
from blenderbim.bim.ui import IFCFileSelector
|
||||
from blenderbim.bim.helper import get_enum_items
|
||||
from blenderbim.bim.helper import get_enum_items, close_operator_panel
|
||||
from mathutils import Vector, Matrix, Euler
|
||||
from math import radians
|
||||
|
||||
@@ -531,6 +531,7 @@ def update_enum_property_search_prop(self, context):
|
||||
for i, prop in enumerate(self.collection_names):
|
||||
if prop.name == self.dummy_name:
|
||||
setattr(context.data, self.prop_name, self.collection_identifiers[i].name)
|
||||
close_operator_panel(self)
|
||||
break
|
||||
|
||||
|
||||
@@ -542,8 +543,11 @@ class BIM_OT_enum_property_search(bpy.types.Operator):
|
||||
collection_names: bpy.props.CollectionProperty(type=StrProperty)
|
||||
collection_identifiers: bpy.props.CollectionProperty(type=StrProperty)
|
||||
prop_name: bpy.props.StringProperty()
|
||||
mouse_x: bpy.props.IntProperty()
|
||||
mouse_y: bpy.props.IntProperty()
|
||||
|
||||
def invoke(self, context, event):
|
||||
self.mouse_x, self.mouse_y = event.mouse_x, event.mouse_y
|
||||
self.clear_collections()
|
||||
self.data = context.data
|
||||
items = get_enum_items(self.data, self.prop_name, context)
|
||||
@@ -551,7 +555,9 @@ class BIM_OT_enum_property_search(bpy.types.Operator):
|
||||
return {"FINISHED"}
|
||||
self.add_items_regular(items)
|
||||
self.add_items_suggestions()
|
||||
return context.window_manager.invoke_props_dialog(self)
|
||||
# Cursor is moved when we update dummy_name, set it back
|
||||
context.window.cursor_warp(self.mouse_x, self.mouse_y)
|
||||
return context.window_manager.invoke_props_popup(self, event)
|
||||
|
||||
def draw(self, context):
|
||||
# Mandatory to access context.data in update :
|
||||
|
||||
Reference in New Issue
Block a user