BlenderKit: on-registration popup
This popup informs the user that BlenderKit connects to the internet directly after registration, and asks for consent with it and also performs first search.
This commit is contained in:
parent
c52cfd99ff
commit
00fefe2d14
|
@ -1725,6 +1725,11 @@ def register():
|
|||
bpy.app.timers.register(check_timers_timer, persistent=True)
|
||||
|
||||
bpy.app.handlers.load_post.append(scene_load)
|
||||
# detect if the user just enabled the addon in preferences, thus enable to run
|
||||
for w in bpy.context.window_manager.windows:
|
||||
for a in w.screen.areas:
|
||||
if a.type == 'PREFERENCES':
|
||||
tasks_queue.add_task((bpy.ops.wm.blenderkit_welcome,( 'INVOKE_DEFAULT',)),fake_context = True, fake_context_area = 'PREFERENCES')
|
||||
|
||||
|
||||
def unregister():
|
||||
|
|
|
@ -282,14 +282,14 @@ def timer_update():
|
|||
search()
|
||||
preferences.first_run = False
|
||||
if preferences.tips_on_start:
|
||||
utils.get_largest_3dview()
|
||||
utils.get_largest_area()
|
||||
ui.update_ui_size(ui.active_area, ui.active_region)
|
||||
ui.add_report(text='BlenderKit Tip: ' + random.choice(rtips), timeout=12, color=colors.GREEN)
|
||||
return 3.0
|
||||
|
||||
if preferences.first_run:
|
||||
search()
|
||||
preferences.first_run = False
|
||||
# if preferences.first_run:
|
||||
# search()
|
||||
# preferences.first_run = False
|
||||
|
||||
# check_clipboard()
|
||||
|
||||
|
|
|
@ -45,16 +45,17 @@ def get_queue():
|
|||
return t.task_queue
|
||||
|
||||
class task_object:
|
||||
def __init__(self, command = '', arguments = (), wait = 0, only_last = False, fake_context = False):
|
||||
def __init__(self, command = '', arguments = (), wait = 0, only_last = False, fake_context = False, fake_context_area = 'VIEW_3D'):
|
||||
self.command = command
|
||||
self.arguments = arguments
|
||||
self.wait = wait
|
||||
self.only_last = only_last
|
||||
self.fake_context = fake_context
|
||||
self.fake_context_area = fake_context_area
|
||||
|
||||
def add_task(task, wait = 0, only_last = False, fake_context = False):
|
||||
def add_task(task, wait = 0, only_last = False, fake_context = False, fake_context_area = 'VIEW_3D'):
|
||||
q = get_queue()
|
||||
taskob = task_object(task[0],task[1], wait = wait, only_last = only_last, fake_context = fake_context)
|
||||
taskob = task_object(task[0],task[1], wait = wait, only_last = only_last, fake_context = fake_context, fake_context_area = fake_context_area)
|
||||
q.put(taskob)
|
||||
|
||||
|
||||
|
@ -92,7 +93,7 @@ def queue_worker():
|
|||
utils.p(task.command, task.arguments)
|
||||
try:
|
||||
if task.fake_context:
|
||||
fc = utils.get_fake_context(bpy.context)
|
||||
fc = utils.get_fake_context(bpy.context, area_type = task.fake_context_area)
|
||||
task.command(fc,*task.arguments)
|
||||
else:
|
||||
task.command(*task.arguments)
|
||||
|
|
|
@ -1784,7 +1784,7 @@ class UndoWithContext(bpy.types.Operator):
|
|||
C_dict = bpy.context.copy()
|
||||
C_dict.update(region='WINDOW')
|
||||
if context.area is None or context.area.type != 'VIEW_3D':
|
||||
w, a, r = utils.get_largest_3dview()
|
||||
w, a, r = utils.get_largest_area()
|
||||
override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
|
||||
C_dict.update(override)
|
||||
bpy.ops.ed.undo_push(C_dict, 'INVOKE_REGION_WIN', message=self.message)
|
||||
|
|
|
@ -25,12 +25,22 @@ if "bpy" in locals():
|
|||
download = importlib.reload(download)
|
||||
categories = importlib.reload(categories)
|
||||
icons = importlib.reload(icons)
|
||||
icons = importlib.reload(search)
|
||||
else:
|
||||
from blenderkit import paths, ratings, utils, download, categories, icons
|
||||
from blenderkit import paths, ratings, utils, download, categories, icons, search
|
||||
|
||||
from bpy.types import (
|
||||
Panel
|
||||
)
|
||||
from bpy.props import (
|
||||
IntProperty,
|
||||
FloatProperty,
|
||||
FloatVectorProperty,
|
||||
StringProperty,
|
||||
EnumProperty,
|
||||
BoolProperty,
|
||||
PointerProperty,
|
||||
)
|
||||
|
||||
import bpy
|
||||
import os
|
||||
|
@ -962,6 +972,47 @@ class VIEW3D_PT_blenderkit_unified(Panel):
|
|||
if ui_props.asset_type == 'TEXTURE':
|
||||
layout.label(text='not yet implemented')
|
||||
|
||||
class BlenderKitWelcomeOperator(bpy.types.Operator):
|
||||
"""Login online on BlenderKit webpage"""
|
||||
|
||||
bl_idname = "wm.blenderkit_welcome"
|
||||
bl_label = "Welcome to BlenderKit!"
|
||||
bl_options = {'REGISTER', 'UNDO', 'INTERNAL'}
|
||||
|
||||
step: IntProperty(
|
||||
name="step",
|
||||
description="Tutorial Step",
|
||||
default=0,
|
||||
options={'SKIP_SAVE'}
|
||||
)
|
||||
|
||||
@classmethod
|
||||
def poll(cls, context):
|
||||
return True
|
||||
|
||||
def draw(self, context):
|
||||
layout = self.layout
|
||||
if self.step == 0:
|
||||
message = "BlenderKit is an addon that connects to the internet to search and upload for models, materials, and brushes. \n\n Let's start by searching for some cool materials?"
|
||||
else:
|
||||
message = "This shouldn't be here at all"
|
||||
utils.label_multiline(layout, text= message, width = 300)
|
||||
|
||||
def execute(self, context):
|
||||
if self.step == 0:
|
||||
#move mouse:
|
||||
#bpy.context.window_manager.windows[0].cursor_warp(1000, 1000)
|
||||
#show n-key sidebar (spaces[index] has to be found for view3d too:
|
||||
# bpy.context.window_manager.windows[0].screen.areas[5].spaces[0].show_region_ui = False
|
||||
print('running search no')
|
||||
ui_props = bpy.context.scene.blenderkitUI
|
||||
ui_props.asset_type = 'MATERIAL'
|
||||
search.search()
|
||||
return {'FINISHED'}
|
||||
|
||||
def invoke(self, context, event):
|
||||
wm = bpy.context.window_manager
|
||||
return wm.invoke_props_dialog(self)
|
||||
|
||||
def draw_asset_context_menu(self, context, asset_data):
|
||||
layout = self.layout
|
||||
|
@ -1298,7 +1349,8 @@ classess = (
|
|||
VIEW3D_PT_blenderkit_downloads,
|
||||
OBJECT_MT_blenderkit_asset_menu,
|
||||
OBJECT_MT_blenderkit_login_menu,
|
||||
UrlPopupDialog
|
||||
UrlPopupDialog,
|
||||
BlenderKitWelcomeOperator,
|
||||
)
|
||||
|
||||
|
||||
|
|
|
@ -614,15 +614,14 @@ def guard_from_crash():
|
|||
return True
|
||||
|
||||
|
||||
def get_largest_3dview():
|
||||
def get_largest_area( area_type = 'VIEW_3D'):
|
||||
maxsurf = 0
|
||||
maxa = None
|
||||
maxw = None
|
||||
region = None
|
||||
for w in bpy.context.window_manager.windows:
|
||||
screen = w.screen
|
||||
for a in screen.areas:
|
||||
if a.type == 'VIEW_3D':
|
||||
for a in w.screen.areas:
|
||||
if a.type == area_type:
|
||||
asurf = a.width * a.height
|
||||
if asurf > maxsurf:
|
||||
maxa = a
|
||||
|
@ -638,15 +637,18 @@ def get_largest_3dview():
|
|||
active_region = region
|
||||
return maxw, maxa, region
|
||||
|
||||
def get_fake_context(context):
|
||||
def get_fake_context(context, area_type = 'VIEW_3D'):
|
||||
C_dict = context.copy()
|
||||
C_dict.update(region='WINDOW')
|
||||
if context.area is None or context.area.type != 'VIEW_3D':
|
||||
w, a, r = get_largest_3dview()
|
||||
if context.area is None or context.area.type != area_type:
|
||||
w, a, r = get_largest_area(area_type = area_type)
|
||||
|
||||
override = {'window': w, 'screen': w.screen, 'area': a, 'region': r}
|
||||
C_dict.update(override)
|
||||
# print(w,a,r)
|
||||
return C_dict
|
||||
|
||||
|
||||
def label_multiline(layout, text='', icon='NONE', width=-1):
|
||||
''' draw a ui label, but try to split it in multiple lines.'''
|
||||
if text.strip() == '':
|
||||
|
|
Loading…
Reference in New Issue