Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender-addons.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVilem Duha <vilem.duha@gmail.com>2021-10-18 14:30:35 +0300
committerVilem Duha <vilem.duha@gmail.com>2021-10-18 14:30:35 +0300
commit6892d3a92e94867c80bdc25373ee9d6ef5e8c6ce (patch)
tree0dd602f858f00f761af0dcc58d6f4819f20e5e71
parent3a2d00cba384426378628fd9920e838d56d70c01 (diff)
BlenderKit: progress on asset bar
Forgot to add files to last commit
-rw-r--r--blenderkit/__init__.py2
-rw-r--r--blenderkit/asset_bar_op.py121
-rw-r--r--blenderkit/bkit_oauth.py8
-rw-r--r--blenderkit/bl_ui_widgets/bl_ui_draw_op.py1
-rw-r--r--blenderkit/bl_ui_widgets/bl_ui_image.py103
-rw-r--r--blenderkit/reports.py57
-rw-r--r--blenderkit/ui.py2
-rw-r--r--blenderkit/ui_panels.py4
8 files changed, 130 insertions, 168 deletions
diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index 45ae8daa..75787065 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -64,6 +64,7 @@ if "bpy" in locals():
bl_ui_widget = reload(bl_ui_widget)
bl_ui_label = reload(bl_ui_label)
bl_ui_button = reload(bl_ui_button)
+ bl_ui_image = reload(bl_ui_image)
# bl_ui_checkbox = reload(bl_ui_checkbox)
# bl_ui_slider = reload(bl_ui_slider)
# bl_ui_up_down = reload(bl_ui_up_down)
@@ -102,6 +103,7 @@ else:
from blenderkit.bl_ui_widgets import bl_ui_widget
from blenderkit.bl_ui_widgets import bl_ui_label
from blenderkit.bl_ui_widgets import bl_ui_button
+ from blenderkit.bl_ui_widgets import bl_ui_image
# from blenderkit.bl_ui_widgets import bl_ui_checkbox
# from blenderkit.bl_ui_widgets import bl_ui_slider
# from blenderkit.bl_ui_widgets import bl_ui_up_down
diff --git a/blenderkit/asset_bar_op.py b/blenderkit/asset_bar_op.py
index a7ad1b7a..fb87452a 100644
--- a/blenderkit/asset_bar_op.py
+++ b/blenderkit/asset_bar_op.py
@@ -4,6 +4,7 @@ from bpy.types import Operator
from blenderkit.bl_ui_widgets.bl_ui_label import *
from blenderkit.bl_ui_widgets.bl_ui_button import *
+from blenderkit.bl_ui_widgets.bl_ui_image import *
# from blenderkit.bl_ui_widgets.bl_ui_checkbox import *
# from blenderkit.bl_ui_widgets.bl_ui_slider import *
# from blenderkit.bl_ui_widgets.bl_ui_up_down import *
@@ -70,23 +71,40 @@ def asset_bar_modal(self, context, event):
self.finish()
return {'FINISHED'}
+ # progress bar
+ # Todo: put this into a timer?
+ sr = bpy.context.window_manager.get('search results')
+ ui_scale = bpy.context.preferences.view.ui_scale
+ for asset_button in self.asset_buttons:
+
+ if sr is not None and len(sr)> asset_button.asset_index:
+ asset_data = sr[asset_button.asset_index]
+
+ if asset_data['downloaded'] > 0:
+ asset_button.progress_bar.width = int(self.button_size * ui_scale * asset_data['downloaded'] / 100)
+ asset_button.progress_bar.visible = True
+ else:
+ asset_button.progress_bar.visible = False
if self.handle_widget_events(event):
return {'RUNNING_MODAL'}
if event.type in {"ESC"}:
self.finish()
- if event.type == 'WHEELUPMOUSE':
+ x = event.mouse_region_x
+ y = event.mouse_region_y
+ if event.type == 'WHEELUPMOUSE' and self.panel.is_in_rect(x, y):
self.scroll_offset -= 5
self.scroll_update()
return {'RUNNING_MODAL'}
- elif event.type == 'WHEELDOWNMOUSE':
+
+ elif event.type == 'WHEELDOWNMOUSE' and self.panel.is_in_rect(x, y):
self.scroll_offset += 5
self.scroll_update()
return {'RUNNING_MODAL'}
if self.check_ui_resized(context) or self.check_new_search_results(context):
- self.update_ui_size(context)
+ # self.update_ui_size(context)
self.update_layout(context, event)
return {"PASS_THROUGH"}
@@ -125,48 +143,6 @@ def mouse_down_right(self, x, y):
return False
-# def handle_event(self, event):
-# x = event.mouse_region_x
-# y = event.mouse_region_y
-#
-# if (event.type == 'LEFTMOUSE'):
-# if (event.value == 'PRESS'):
-# self._mouse_down = True
-# return self.mouse_down(x, y)
-# else:
-# self._mouse_down = False
-# self.mouse_up(x, y)
-#
-# elif (event.type == 'RIGHTMOUSE'):
-# if (event.value == 'PRESS'):
-# self._mouse_down_right = True
-# return self.mouse_down_right(x, y)
-# else:
-# self._mouse_down_right = False
-# self.mouse_up(x, y)
-#
-# elif (event.type == 'MOUSEMOVE'):
-# self.mouse_move(x, y)
-#
-# inrect = self.is_in_rect(x, y)
-#
-# # we enter the rect
-# if not self.__inrect and inrect:
-# self.__inrect = True
-# self.mouse_enter(event, x, y)
-#
-# # we are leaving the rect
-# elif self.__inrect and not inrect:
-# self.__inrect = False
-# self.mouse_exit(event, x, y)
-#
-# return False
-#
-# elif event.value == 'PRESS' and (event.ascii != '' or event.type in self.get_input_keys()):
-# return self.text_input(event)
-#
-# return False
-
BL_UI_Button.mouse_down_right = mouse_down_right
BL_UI_Button.set_mouse_down_right = set_mouse_down_right
@@ -258,8 +234,7 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.tooltip_panel.bg_color = (0.0, 0.0, 0.0, 0.5)
self.tooltip_panel.visible = False
- tooltip_image = BL_UI_Button(0, 0, 1, 1)
- tooltip_image.text = ""
+ tooltip_image = BL_UI_Image(0, 0, 1, 1)
img_path = paths.get_addon_thumbnail_path('thumbnail_notready.jpg')
tooltip_image.set_image(img_path)
tooltip_image.set_image_size((tooltip_width, tooltip_height))
@@ -287,8 +262,7 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.authors_name = authors_name
self.tooltip_widgets.append(authors_name)
- gravatar_image = BL_UI_Button(tooltip_width - gravatar_size, tooltip_height - gravatar_size, 1, 1)
- gravatar_image.text = ""
+ gravatar_image = BL_UI_Image(tooltip_width - gravatar_size, tooltip_height - gravatar_size, 1, 1)
img_path = paths.get_addon_thumbnail_path('thumbnail_notready.jpg')
gravatar_image.set_image(img_path)
gravatar_image.set_image_size((gravatar_size - 1 * self.margin, gravatar_size - 1 * self.margin))
@@ -372,12 +346,12 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
ui_scale = bpy.context.preferences.view.ui_scale
self.margin = ui_props.bl_rna.properties['margin'].default * ui_scale
- self.margin = int(7 * ui_scale)
+ self.margin = int(9 * ui_scale)
self.button_margin = int(0 * ui_scale)
- self.author_text_size = int(15 * ui_scale)
self.asset_name_text_size = int(20 * ui_scale)
+ self.author_text_size = int(self.asset_name_text_size * .7 * ui_scale)
self.assetbar_margin = int(2 * ui_scale)
- self.tooltip_size = int(500 * ui_scale)
+ self.tooltip_size = int(512 * ui_scale)
self.thumb_size = user_preferences.thumb_size * ui_scale
self.button_size = 2 * self.button_margin + self.thumb_size
@@ -417,12 +391,23 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.reports_x = self.bar_x
def update_layout(self, context, event):
- self.init_ui()
- self.setup_widgets(context, event)
- self.tooltip_panel.add_widgets(self.tooltip_widgets)
- self.scroll_update()
+ #restarting asset_bar completely since the widgets are too hard to get working with updates.
+ ui_props = bpy.context.window_manager.blenderkitUI
+ ui_props.turn_off = False
+ self.finish()
+ C_dict = utils.get_fake_context(context)
+ if C_dict.get('window'): # no 3d view, no asset bar.
+ bpy.ops.view3d.blenderkit_asset_bar_widget(C_dict, 'INVOKE_REGION_WIN', keep_running=self.keep_running,
+ do_search=False)
+ # self.init_ui()
+ # self.init_tooltip()
+ # self.hide_tooltip()
+ # self.setup_widgets(context, event)
+ # self.scroll_update()
def asset_button_init(self, asset_x, asset_y, button_idx):
+ ui_scale = bpy.context.preferences.view.ui_scale
+
button_bg_color = (0.2, 0.2, 0.2, .1)
button_hover_color = (0.8, 0.8, 0.8, .2)
@@ -448,9 +433,9 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
new_button.set_mouse_exit(self.exit_button)
new_button.text_input = self.handle_key_input
# add validation icon to button
- icon_size = 24
- validation_icon_margin = 3
- validation_icon = BL_UI_Button(
+ icon_size = int(24 * ui_scale)
+ validation_icon_margin = int(3 * ui_scale)
+ validation_icon = BL_UI_Image(
asset_x + self.button_size - icon_size - self.button_margin - validation_icon_margin,
asset_y + self.button_size - icon_size - self.button_margin - validation_icon_margin, 0, 0)
@@ -458,20 +443,30 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
# if v_icon is not None:
# img_fp = paths.get_addon_thumbnail_path(v_icon)
# validation_icon.set_image(img_fp)
- validation_icon.text = ''
validation_icon.set_image_size((icon_size, icon_size))
validation_icon.set_image_position((0, 0))
self.validation_icons.append(validation_icon)
new_button.validation_icon = validation_icon
+
+ progress_bar = BL_UI_Widget(asset_x, asset_y + self.button_size - 3, self.button_size, 3)
+ progress_bar.bg_color = (0.0, 1.0, 0.0, 1.0)
+ new_button.progress_bar = progress_bar
+ self.progress_bars.append(progress_bar)
+ # if result['downloaded'] > 0:
+ # ui_bgl.draw_rect(x, y, int(ui_props.thumb_size * result['downloaded'] / 100.0), 2, green)
+
return new_button
def init_ui(self):
+ ui_scale = bpy.context.preferences.view.ui_scale
+
button_bg_color = (0.2, 0.2, 0.2, .1)
button_hover_color = (0.8, 0.8, 0.8, .2)
self.buttons = []
self.asset_buttons = []
self.validation_icons = []
+ self.progress_bars = []
self.widgets_panel = []
self.panel = BL_UI_Drag_Panel(0, 0, self.bar_width, self.bar_height)
@@ -490,7 +485,7 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
new_button = self.asset_button_init(asset_x, asset_y, button_idx)
self.asset_buttons.append(new_button)
- other_button_size = 30
+ other_button_size = int(30 * ui_scale)
self.button_close = BL_UI_Button(self.bar_width - other_button_size, -0, other_button_size, other_button_size)
self.button_close.bg_color = button_bg_color
@@ -550,6 +545,7 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
widgets_panel.extend(self.buttons)
widgets_panel.extend(self.asset_buttons)
widgets_panel.extend(self.validation_icons)
+ widgets_panel.extend(self.progress_bars)
widgets = [self.panel]
@@ -560,6 +556,8 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.init_widgets(context, widgets)
self.panel.add_widgets(widgets_panel)
+ self.tooltip_panel.add_widgets(self.tooltip_widgets)
+ self.hide_tooltip()
self.panel.set_location(self.bar_x,
self.bar_y)
@@ -606,7 +604,6 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.active_index = -1
self.setup_widgets(context, event)
- self.tooltip_panel.add_widgets(self.tooltip_widgets)
# to hide arrows accordingly
self.scroll_update()
diff --git a/blenderkit/bkit_oauth.py b/blenderkit/bkit_oauth.py
index f044cd0c..e080845a 100644
--- a/blenderkit/bkit_oauth.py
+++ b/blenderkit/bkit_oauth.py
@@ -17,7 +17,7 @@
# ##### END GPL LICENSE BLOCK #####
-from blenderkit import tasks_queue, utils, paths, search, categories, oauth, ui, ui_panels
+from blenderkit import tasks_queue, utils, paths, search, categories, oauth, ui, ui_panels, colors
import bpy
@@ -49,7 +49,11 @@ def login_thread(signup=False):
def login(signup, url, r_url, authenticator):
- auth_token, refresh_token, oauth_response = authenticator.get_new_token(register=signup, redirect_url=r_url)
+ try:
+ auth_token, refresh_token, oauth_response = authenticator.get_new_token(register=signup, redirect_url=r_url)
+ except Exception as e:
+ tasks_queue.add_task((ui.add_report, (e, 20, colors.RED)))
+
bk_logger.debug('tokens retrieved')
tasks_queue.add_task((write_tokens, (auth_token, refresh_token, oauth_response)))
diff --git a/blenderkit/bl_ui_widgets/bl_ui_draw_op.py b/blenderkit/bl_ui_widgets/bl_ui_draw_op.py
index d54b3ab9..ab407f47 100644
--- a/blenderkit/bl_ui_widgets/bl_ui_draw_op.py
+++ b/blenderkit/bl_ui_widgets/bl_ui_draw_op.py
@@ -54,7 +54,6 @@ class BL_UI_OT_draw_operator(Operator):
result = False
for widget in self.widgets:
if widget.handle_event(event):
- print(type(widget))
result = True
return result
diff --git a/blenderkit/bl_ui_widgets/bl_ui_image.py b/blenderkit/bl_ui_widgets/bl_ui_image.py
index 9667b54e..2656bcea 100644
--- a/blenderkit/bl_ui_widgets/bl_ui_image.py
+++ b/blenderkit/bl_ui_widgets/bl_ui_image.py
@@ -3,63 +3,16 @@ from . bl_ui_widget import *
import blf
import bpy
-class BL_UI_Button(BL_UI_Widget):
+class BL_UI_Image(BL_UI_Widget):
def __init__(self, x, y, width, height):
super().__init__(x, y, width, height)
- self._text_color = (1.0, 1.0, 1.0, 1.0)
- self._hover_bg_color = (0.5, 0.5, 0.5, 1.0)
- self._select_bg_color = (0.7, 0.7, 0.7, 1.0)
-
- self._text = "Button"
- self._text_size = 16
- self._textpos = (x, y)
self.__state = 0
self.__image = None
self.__image_size = (24, 24)
self.__image_position = (4, 2)
- @property
- def text_color(self):
- return self._text_color
-
- @text_color.setter
- def text_color(self, value):
- self._text_color = value
-
- @property
- def text(self):
- return self._text
-
- @text.setter
- def text(self, value):
- self._text = value
-
- @property
- def text_size(self):
- return self._text_size
-
- @text_size.setter
- def text_size(self, value):
- self._text_size = value
-
- @property
- def hover_bg_color(self):
- return self._hover_bg_color
-
- @hover_bg_color.setter
- def hover_bg_color(self, value):
- self._hover_bg_color = value
-
- @property
- def select_bg_color(self):
- return self._select_bg_color
-
- @select_bg_color.setter
- def select_bg_color(self, value):
- self._select_bg_color = value
-
def set_image_size(self, imgage_size):
self.__image_size = imgage_size
@@ -75,7 +28,6 @@ class BL_UI_Button(BL_UI_Widget):
def update(self, x, y):
super().update(x, y)
- self._textpos = [x, y]
def draw(self):
if not self.visible:
@@ -85,8 +37,6 @@ class BL_UI_Button(BL_UI_Widget):
self.shader.bind()
- self.set_colors()
-
bgl.glEnable(bgl.GL_BLEND)
self.batch_panel.draw(self.shader)
@@ -95,35 +45,6 @@ class BL_UI_Button(BL_UI_Widget):
bgl.glDisable(bgl.GL_BLEND)
- # Draw text
- self.draw_text(area_height)
-
- def set_colors(self):
- color = self._bg_color
- text_color = self._text_color
-
- # pressed
- if self.__state == 1:
- color = self._select_bg_color
-
- # hover
- elif self.__state == 2:
- color = self._hover_bg_color
-
- self.shader.uniform_float("color", color)
-
- def draw_text(self, area_height):
- font_id = 1
- blf.size(font_id, self._text_size, 72)
- size = blf.dimensions(0, self._text)
-
- textpos_y = area_height - self._textpos[1] - (self.height + size[1]) / 2.0
- blf.position(font_id, self._textpos[0] + (self.width - size[0]) / 2.0, textpos_y + 1, 0)
-
- r, g, b, a = self._text_color
- blf.color(font_id, r, g, b, a)
-
- blf.draw(font_id, self._text)
def draw_image(self):
if self.__image is not None:
@@ -166,28 +87,10 @@ class BL_UI_Button(BL_UI_Widget):
self.mouse_down_func = mouse_down_func
def mouse_down(self, x, y):
- if self.is_in_rect(x,y):
- self.__state = 1
- try:
- self.mouse_down_func(self)
- except Exception as e:
- print(e)
-
- return True
-
return False
def mouse_move(self, x, y):
- if self.is_in_rect(x,y):
- if(self.__state != 1):
-
- # hover state
- self.__state = 2
- else:
- self.__state = 0
+ return
def mouse_up(self, x, y):
- if self.is_in_rect(x,y):
- self.__state = 2
- else:
- self.__state = 0
+ return
diff --git a/blenderkit/reports.py b/blenderkit/reports.py
index e69de29b..816ac791 100644
--- a/blenderkit/reports.py
+++ b/blenderkit/reports.py
@@ -0,0 +1,57 @@
+# ##### BEGIN GPL LICENSE BLOCK #####
+#
+# This program is free software; you can redistribute it and/or
+# modify it under the terms of the GNU General Public License
+# as published by the Free Software Foundation; either version 2
+# of the License, or (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software Foundation,
+# Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+#
+# ##### END GPL LICENSE BLOCK #####
+
+import time
+from blenderkit import colors
+
+def add_report(text='', timeout=5, color=colors.GREEN):
+ global reports
+ # check for same reports and just make them longer by the timeout.
+ for old_report in reports:
+ if old_report.text == text:
+ old_report.timeout = old_report.age + timeout
+ return
+ report = Report(text=text, timeout=timeout, color=color)
+ reports.append(report)
+
+
+class Report():
+ def __init__(self, text='', timeout=5, color=(.5, 1, .5, 1)):
+ self.text = text
+ self.timeout = timeout
+ self.start_time = time.time()
+ self.color = color
+ self.draw_color = color
+ self.age = 0
+
+ def fade(self):
+ fade_time = 1
+ self.age = time.time() - self.start_time
+ if self.age + fade_time > self.timeout:
+ alpha_multiplier = (self.timeout - self.age) / fade_time
+ self.draw_color = (self.color[0], self.color[1], self.color[2], self.color[3] * alpha_multiplier)
+ if self.age > self.timeout:
+ global reports
+ try:
+ reports.remove(self)
+ except Exception as e:
+ pass;
+
+ def draw(self, x, y):
+ if bpy.context.area.as_pointer() == active_area_pointer:
+ ui_bgl.draw_text(self.text, x, y + 8, 16, self.draw_color) \ No newline at end of file
diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index 547235ac..b8689f5b 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1903,7 +1903,7 @@ class RunAssetBarWithContext(bpy.types.Operator):
C_dict = utils.get_fake_context(context)
if C_dict.get('window'): # no 3d view, no asset bar.
preferences = bpy.context.preferences.addons['blenderkit'].preferences
- if preferences.experimental_features or 1:
+ if preferences.experimental_features:
bpy.ops.view3d.blenderkit_asset_bar_widget(C_dict, 'INVOKE_REGION_WIN', keep_running=self.keep_running,
do_search=self.do_search)
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index e4342017..af8f1993 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -334,7 +334,7 @@ def draw_assetbar_show_hide(layout, props):
ttip = 'Click to Show Asset Bar'
preferences = bpy.context.preferences.addons['blenderkit'].preferences
- if preferences.experimental_features or 1:
+ if preferences.experimental_features:
op = layout.operator('view3d.blenderkit_asset_bar_widget', text='', icon=icon)
else:
op = layout.operator('view3d.blenderkit_asset_bar', text='', icon=icon)
@@ -2232,7 +2232,7 @@ def draw_panel_categories(self, context):
ctext = '%s (%i)' % (c['name'], c['assetCount'])
preferences = bpy.context.preferences.addons['blenderkit'].preferences
- if preferences.experimental_features or 1:
+ if preferences.experimental_features:
op = row.operator('view3d.blenderkit_asset_bar_widget', text=ctext)
else:
op = row.operator('view3d.blenderkit_asset_bar', text=ctext)