BlenderKit: fix several minor UI issues

lock icons update was delayed
scroll buttons were not updated when number of rows changed
model dimension show also cm and mm when appropriate
design year is drawn without comma
prevent ui_bgl draw text error
correct pluralisation of ratings in tooltips.
This commit is contained in:
Vilem Duha 2021-11-19 13:33:02 +01:00
parent e4b8340d40
commit d3efa1c748
5 changed files with 50 additions and 23 deletions

View File

@ -26,6 +26,7 @@ from bpy.props import (
active_area_pointer = 0
def get_area_height(self):
if type(self.context) != dict:
if self.context is None:
@ -297,15 +298,15 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.tooltip_widgets.append(gravatar_image)
quality_star = BL_UI_Image(self.margin, self.tooltip_height - self.margin - self.asset_name_text_size,
1, 1)
1, 1)
img_path = paths.get_addon_thumbnail_path('star_grey.png')
quality_star.set_image(img_path)
quality_star.set_image_size((self.asset_name_text_size, self.asset_name_text_size))
quality_star.set_image_position((0, 0))
# self.quality_star = quality_star
self.tooltip_widgets.append(quality_star)
label = self.new_text('', 2*self.margin+self.asset_name_text_size,
self.tooltip_height - int(self.asset_name_text_size+ self.margin * .5),
label = self.new_text('', 2 * self.margin + self.asset_name_text_size,
self.tooltip_height - int(self.asset_name_text_size + self.margin * .5),
text_size=self.asset_name_text_size)
self.tooltip_widgets.append(label)
self.quality_label = label
@ -443,19 +444,19 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
ui_props.reports_y = region.height - self.bar_y - 600
self.reports_x = self.bar_x
ui_props.reports_x = self.bar_x
else:#ui.bar_y - ui.bar_height - 100
else: # ui.bar_y - ui.bar_height - 100
self.reports_y = region.height - self.bar_y - self.bar_height - 50
ui_props.reports_y =region.height - self.bar_y - self.bar_height- 50
ui_props.reports_y = region.height - self.bar_y - self.bar_height - 50
self.reports_x = self.bar_x
ui_props.reports_x = self.bar_x
# print(self.bar_y, self.bar_height, region.height)
def update_layout(self, context, event):
# restarting asset_bar completely since the widgets are too hard to get working with updates.
self.scroll_update()
self.position_and_hide_buttons()
self.scroll_update()
self.button_close.set_location(self.bar_width - self.other_button_size, -self.other_button_size)
if hasattr(self, 'button_notifications'):
@ -479,7 +480,6 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
# to hide arrows accordingly
def asset_button_init(self, asset_x, asset_y, button_idx):
ui_scale = bpy.context.preferences.view.ui_scale
@ -582,25 +582,25 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
self.widgets_panel.append(self.button_close)
scroll_width = 30
self.button_scroll_down = BL_UI_Button(-scroll_width, 0, scroll_width, self.bar_height)
self.scroll_width = 30
self.button_scroll_down = BL_UI_Button(-self.scroll_width, 0, self.scroll_width, self.bar_height)
self.button_scroll_down.bg_color = button_bg_color
self.button_scroll_down.hover_bg_color = button_hover_color
self.button_scroll_down.text = ""
self.button_scroll_down.set_image(paths.get_addon_thumbnail_path('arrow_left.png'))
self.button_scroll_down.set_image_size((scroll_width, self.button_size))
self.button_scroll_down.set_image_size((self.scroll_width, self.button_size))
self.button_scroll_down.set_image_position((0, int((self.bar_height - self.button_size) / 2)))
self.button_scroll_down.set_mouse_down(self.scroll_down)
self.widgets_panel.append(self.button_scroll_down)
self.button_scroll_up = BL_UI_Button(self.bar_width, 0, scroll_width, self.bar_height)
self.button_scroll_up = BL_UI_Button(self.bar_width, 0, self.scroll_width, self.bar_height)
self.button_scroll_up.bg_color = button_bg_color
self.button_scroll_up.hover_bg_color = button_hover_color
self.button_scroll_up.text = ""
self.button_scroll_up.set_image(paths.get_addon_thumbnail_path('arrow_right.png'))
self.button_scroll_up.set_image_size((scroll_width, self.button_size))
self.button_scroll_up.set_image_size((self.scroll_width, self.button_size))
self.button_scroll_up.set_image_position((0, int((self.bar_height - self.button_size) / 2)))
self.button_scroll_up.set_mouse_down(self.scroll_up)
@ -661,6 +661,11 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
button.validation_icon.visible = False
button.progress_bar.visible = False
self.button_scroll_down.height = self.bar_height
self.button_scroll_down.set_image_position((0, int((self.bar_height - self.button_size) / 2)))
self.button_scroll_down.height = self.bar_height
self.button_scroll_down.set_image_position((0, int((self.bar_height - self.button_size) / 2)))
def __init__(self):
super().__init__()
@ -808,8 +813,8 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
get_tooltip_data(asset_data)
an = asset_data['name']
max_name_length = 30
if len(an)>max_name_length+3:
an = an[:30]+'...'
if len(an) > max_name_length + 3:
an = an[:30] + '...'
self.asset_name.text = an
self.authors_name.text = asset_data['tooltip_data']['author_text']
self.quality_label.text = asset_data['tooltip_data']['quality']
@ -912,7 +917,8 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
asset_button.visible = True
asset_data = sr[asset_button.asset_index]
if asset_data is None:
continue
iname = blenderkit.utils.previmg_name(asset_button.asset_index)
# show indices for debug purposes
# asset_button.text = str(asset_button.asset_index)

View File

@ -1737,6 +1737,9 @@ class AssetDragOperator(bpy.types.Operator):
self.handlers_remove()
bpy.context.window.cursor_set("DEFAULT")
ui_props.dragging = False
bpy.ops.view3d.blenderkit_asset_bar_widget('INVOKE_REGION_WIN',
do_search=False)
return {'CANCELLED'}
sprops = bpy.context.window_manager.blenderkit_models

View File

@ -137,6 +137,8 @@ def draw_image(x, y, width, height, image, transparency, crop=(0, 0, 1, 1), batc
def draw_text(text, x, y, size, color=(1, 1, 1, 0.5), halign = 'LEFT', valign = 'TOP'):
font_id = 1
# bgl.glColor4f(*color)
if type(text) != str:
text = str(text)
blf.color(font_id, color[0], color[1], color[2], color[3])
blf.size(font_id, size, 72)
if halign != 'LEFT':

View File

@ -1744,12 +1744,15 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
op.url = url
op.tooltip = tooltip
def draw_asset_parameter(self, layout, key='', pretext='', do_search=False):
def draw_asset_parameter(self, layout, key='', pretext='', do_search=False, decimal = True):
parameter = utils.get_param(self.asset_data, key)
if parameter == None:
return
if type(parameter) == int:
parameter = f"{parameter:,d}"
if decimal:
parameter = f"{parameter:,d}"
else:
parameter = f"{parameter}"
elif type(parameter) == float:
parameter = f"{parameter:,.1f}"
if do_search:
@ -1866,7 +1869,7 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
do_search=True)
self.draw_asset_parameter(box, key='designCollection', pretext='Collection', do_search=True)
self.draw_asset_parameter(box, key='designVariant', pretext='Variant')
self.draw_asset_parameter(box, key='designYear', pretext='Design year')
self.draw_asset_parameter(box, key='designYear', pretext='Design year', decimal = False)
self.draw_asset_parameter(box, key='faceCount', pretext='Face count')
# self.draw_asset_parameter(box, key='thumbnailScale', pretext='Preview scale')
@ -1878,9 +1881,7 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
self.draw_asset_parameter(box, key='modelStyle', pretext='Style')
if utils.get_param(self.asset_data, 'dimensionX'):
t = '%s×%s×%s m' % (utils.fmt_length(mparams['dimensionX']),
utils.fmt_length(mparams['dimensionY']),
utils.fmt_length(mparams['dimensionZ']))
t = utils.fmt_dimensions(mparams)
self.draw_property(box, 'Size', t)
if self.asset_data.get('filesSize'):
fs = self.asset_data['filesSize']
@ -2065,12 +2066,12 @@ class AssetPopupCard(bpy.types.Operator, ratings_utils.RatingsProperties):
tooltip_extension = f'.\n\nRatings results are shown for assets with more than {show_rating_threshold} ratings'
op = row.operator('wm.blenderkit_tooltip', text=str(q), icon='SOLO_ON')
op.tooltip = f"Quality, average from {rc['quality']} ratings" \
op.tooltip = f"Quality, average from {rc['quality']} rating{'' if rc['quality'] == 1 else 's'}" \
f"{tooltip_extension if rcount <= show_rating_threshold else ''}"
row.label(text=' ')
op = row.operator('wm.blenderkit_tooltip', text=str(c), icon_value=pcoll['dumbbell'].icon_id)
op.tooltip = f"Complexity, median from {rc['workingHours']} ratings" \
op.tooltip = f"Complexity, median from {rc['workingHours']} rating{'' if rc['workingHours'] == 1 else 's'}" \
f"{tooltip_extension if rcount <= show_rating_threshold else ''}"
if rcount <= show_rating_prompt_threshold:

View File

@ -741,6 +741,21 @@ def name_update(props):
# Here we actually rename assets datablocks, but don't do that with HDR's and possibly with others
asset.name = fname
def fmt_dimensions(p):
'''formats dimensions to correct string'''
dims = [p['dimensionX'],p['dimensionY'],p['dimensionZ']]
maxl = max(dims)
if maxl>1:
unit = 'm'
unitscale = 1
elif maxl>.01:
unit = 'cm'
unitscale = 100
else:
unit = 'mm'
unitscale = 1000
s = f'{fmt_length(dims[0]*unitscale)}×{fmt_length(dims[1]*unitscale)}×{fmt_length(dims[2]*unitscale)} {unit}'
return s
def fmt_length(prop):
prop = str(round(prop, 2))