Enum search popup now automatically closes on item selection

+ move close_operator_panel higher in hierarchy to access it
This commit is contained in:
Gorgious56
2022-07-21 17:50:43 +02:00
parent 901a582c6c
commit 2a019e8090
3 changed files with 19 additions and 14 deletions
+9
View File
@@ -132,6 +132,15 @@ def get_enum_items(data, prop_name, context):
return items 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: class IfcHeaderExtractor:
def __init__(self, filepath: str): def __init__(self, filepath: str):
self.filepath = filepath self.filepath = filepath
@@ -24,6 +24,7 @@ from ifcopenshell.api.group.data import Data
from ifcopenshell.util.selector import Selector from ifcopenshell.util.selector import Selector
import blenderbim.tool as tool import blenderbim.tool as tool
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.helper import close_operator_panel
from itertools import cycle from itertools import cycle
from bpy.types import PropertyGroup, Operator from bpy.types import PropertyGroup, Operator
from bpy.props import ( from bpy.props import (
@@ -66,14 +67,7 @@ def does_keyword_exist(pattern, string, context):
elif string == pattern: elif string == pattern:
return True 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): class EditBlenderCollection(Operator):
bl_idname = "bim.edit_blender_collection" bl_idname = "bim.edit_blender_collection"
bl_label = "Add or Remove blender collection item" bl_label = "Add or Remove blender collection item"
@@ -639,10 +633,6 @@ class LoadQuery(Operator):
bl_idname = "bim.load_query" bl_idname = "bim.load_query"
bl_label = "Load Query" bl_label = "Load Query"
index: IntProperty() index: IntProperty()
def invoke(self, context, event):
close_operator_panel(event)
return self.execute(context)
def execute(self, context): def execute(self, context):
ifc_selector = context.scene.IfcSelectorProperties ifc_selector = context.scene.IfcSelectorProperties
+8 -2
View File
@@ -27,7 +27,7 @@ from . import schema
from blenderbim.bim.ifc import IfcStore from blenderbim.bim.ifc import IfcStore
from blenderbim.bim.prop import StrProperty from blenderbim.bim.prop import StrProperty
from blenderbim.bim.ui import IFCFileSelector 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 mathutils import Vector, Matrix, Euler
from math import radians from math import radians
@@ -531,6 +531,7 @@ def update_enum_property_search_prop(self, context):
for i, prop in enumerate(self.collection_names): for i, prop in enumerate(self.collection_names):
if prop.name == self.dummy_name: if prop.name == self.dummy_name:
setattr(context.data, self.prop_name, self.collection_identifiers[i].name) setattr(context.data, self.prop_name, self.collection_identifiers[i].name)
close_operator_panel(self)
break break
@@ -542,8 +543,11 @@ class BIM_OT_enum_property_search(bpy.types.Operator):
collection_names: bpy.props.CollectionProperty(type=StrProperty) collection_names: bpy.props.CollectionProperty(type=StrProperty)
collection_identifiers: bpy.props.CollectionProperty(type=StrProperty) collection_identifiers: bpy.props.CollectionProperty(type=StrProperty)
prop_name: bpy.props.StringProperty() prop_name: bpy.props.StringProperty()
mouse_x: bpy.props.IntProperty()
mouse_y: bpy.props.IntProperty()
def invoke(self, context, event): def invoke(self, context, event):
self.mouse_x, self.mouse_y = event.mouse_x, event.mouse_y
self.clear_collections() self.clear_collections()
self.data = context.data self.data = context.data
items = get_enum_items(self.data, self.prop_name, context) 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"} return {"FINISHED"}
self.add_items_regular(items) self.add_items_regular(items)
self.add_items_suggestions() 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): def draw(self, context):
# Mandatory to access context.data in update : # Mandatory to access context.data in update :