diff options
Diffstat (limited to 'blenderkit/ui.py')
-rw-r--r-- | blenderkit/ui.py | 105 |
1 files changed, 81 insertions, 24 deletions
diff --git a/blenderkit/ui.py b/blenderkit/ui.py index fc9563a9..3f4d0381 100644 --- a/blenderkit/ui.py +++ b/blenderkit/ui.py @@ -50,6 +50,11 @@ import os handler_2d = None handler_3d = None +active_area = None +active_area = None +active_window = None +active_region = None + reports = [] mappingdict = { @@ -67,7 +72,7 @@ verification_icons = { 'uploading': 'vs_uploading.png', 'on_hold': 'vs_on_hold.png', 'validated': None, - 'rejected': None + 'rejected': 'vs_rejected.png' } @@ -133,7 +138,8 @@ class Report(): pass; def draw(self, x, y): - ui_bgl.draw_text(self.text, x, y + 8, 16, self.draw_color) + if bpy.context.area == active_area: + ui_bgl.draw_text(self.text, x, y + 8, 16, self.draw_color) def get_asset_under_mouse(mousex, mousey): @@ -698,6 +704,7 @@ def draw_callback_2d_upload_preview(self, context): props = utils.get_upload_props() if props != None and ui_props.draw_tooltip: + if ui_props.asset_type != 'BRUSH': ui_props.thumbnail_image = props.thumbnail else: @@ -889,8 +896,12 @@ def draw_callback_2d_search(self, context): ui_props.mouse_y - linelength, 2, white) + def draw_callback_3d(self, context): ''' Draw snapped bbox while dragging and in the future other blenderkit related stuff. ''' + if not utils.guard_from_crash(): + return; + ui = context.scene.blenderkitUI if ui.dragging and ui.asset_type == 'MODEL': @@ -1173,6 +1184,10 @@ def get_largest_3dview(): for r in a.regions: if r.type == 'WINDOW': region = r + global active_area, active_window, active_region + active_window = maxw + active_area = maxa + active_region = region return maxw, maxa, region @@ -1417,6 +1432,8 @@ class AssetBarOperator(bpy.types.Operator): ui_props.draw_tooltip = True ui_props.tooltip = asset_data['tooltip'] + # bpy.ops.wm.call_menu(name='OBJECT_MT_blenderkit_asset_menu') + else: ui_props.draw_tooltip = False @@ -1476,7 +1493,7 @@ class AssetBarOperator(bpy.types.Operator): if not asset_data['can_download']: message = 'Asset locked. Find out how to unlock Everything and ...' link_text = 'support all BlenderKit artists.' - url = paths.get_bkit_url() + '/get-blenderkit/' + asset_data['id'] + url = paths.get_bkit_url() + '/get-blenderkit/' + asset_data['id'] + '/?from_addon' bpy.ops.wm.blenderkit_url_dialog('INVOKE_REGION_WIN', url=url, message=message, link_text=link_text) return {'RUNNING_MODAL'} @@ -1696,30 +1713,38 @@ class AssetBarOperator(bpy.types.Operator): if sr is None: bpy.context.scene['search results'] = [] - if context.area.type == 'VIEW_3D': - # the arguments we pass the the callback - args = (self, context) - self.window = context.window - self.area = context.area - self.scene = bpy.context.scene - self.has_quad_views = len(bpy.context.area.spaces[0].region_quadviews) > 0 + if context.area.type != 'VIEW_3D': + self.report({'WARNING'}, "View3D not found, cannot run operator") + return {'CANCELLED'} - for r in self.area.regions: - if r.type == 'WINDOW': - self.region = r + # the arguments we pass the the callback + args = (self, context) - update_ui_size(self.area, self.region) + self.window = context.window + self.area = context.area + self.scene = bpy.context.scene - self._handle_2d = bpy.types.SpaceView3D.draw_handler_add(draw_callback_2d, args, 'WINDOW', 'POST_PIXEL') - self._handle_3d = bpy.types.SpaceView3D.draw_handler_add(draw_callback_3d, args, 'WINDOW', 'POST_VIEW') - context.window_manager.modal_handler_add(self) - ui_props.assetbar_on = True - return {'RUNNING_MODAL'} - else: - self.report({'WARNING'}, "View3D not found, cannot run operator") - return {'CANCELLED'} + self.has_quad_views = len(bpy.context.area.spaces[0].region_quadviews) > 0 + + for r in self.area.regions: + if r.type == 'WINDOW': + self.region = r + + global active_window, active_area, active_region + active_window = self.window + active_area = self.area + active_region = self.region + + update_ui_size(self.area, self.region) + + self._handle_2d = bpy.types.SpaceView3D.draw_handler_add(draw_callback_2d, args, 'WINDOW', 'POST_PIXEL') + self._handle_3d = bpy.types.SpaceView3D.draw_handler_add(draw_callback_3d, args, 'WINDOW', 'POST_VIEW') + + context.window_manager.modal_handler_add(self) + ui_props.assetbar_on = True + return {'RUNNING_MODAL'} def execute(self, context): return {'RUNNING_MODAL'} @@ -1743,6 +1768,27 @@ class TransferBlenderkitData(bpy.types.Operator): return {'FINISHED'} +class UndoWithContext(bpy.types.Operator): + """Regenerate cobweb""" + bl_idname = "wm.undo_push_context" + bl_label = "BlnenderKit undo push" + bl_description = "BlenderKit undo push with fixed context" + bl_options = {'REGISTER', 'UNDO', 'INTERNAL'} + + # def modal(self, context, event): + # return {'RUNNING_MODAL'} + + def execute(self, context): + C_dict = bpy.context.copy() + C_dict.update(region='WINDOW') + if context.area is None or context.area.type != 'VIEW_3D': + w, a, r = get_largest_3dview() + override = {'window': w, 'screen': w.screen, 'area': a, 'region': r} + C_dict.update(override) + bpy.ops.ed.undo_push(C_dict, 'INVOKE_REGION_WIN') + return {'FINISHED'} + + class RunAssetBarWithContext(bpy.types.Operator): """Regenerate cobweb""" bl_idname = "object.run_assetbar_fix_context" @@ -1761,18 +1807,28 @@ class RunAssetBarWithContext(bpy.types.Operator): override = {'window': w, 'screen': w.screen, 'area': a, 'region': r} C_dict.update(override) bpy.ops.view3d.blenderkit_asset_bar(C_dict, 'INVOKE_REGION_WIN', keep_running=True, do_search=False) - return {'RUNNING_MODAL'} + return {'FINISHED'} classess = ( AssetBarOperator, RunAssetBarWithContext, - TransferBlenderkitData + TransferBlenderkitData, + UndoWithContext ) # store keymap items here to access after registration addon_keymapitems = [] +#@persistent +def pre_load(context): + ui_props = bpy.context.scene.blenderkitUI + ui_props.assetbar_on = False + ui_props.turn_off = True + preferences = bpy.context.preferences.addons['blenderkit'].preferences + preferences.login_attempt = False + + def register_ui(): global handler_2d, handler_3d @@ -1803,6 +1859,7 @@ def register_ui(): def unregister_ui(): global handler_2d, handler_3d + pre_load(bpy.context) bpy.types.SpaceView3D.draw_handler_remove(handler_2d, 'WINDOW') bpy.types.SpaceView3D.draw_handler_remove(handler_3d, 'WINDOW') |