diff --git a/blenderkit/asset_bar_op.py b/blenderkit/asset_bar_op.py index 4ad15285ecc70c8be7c0bc3521ab904df5f5fec8..c48f4dcf32ec74d277f419b9ebc10111bf836415 100644 --- a/blenderkit/asset_bar_op.py +++ b/blenderkit/asset_bar_op.py @@ -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) diff --git a/blenderkit/ui.py b/blenderkit/ui.py index 41c4feeeb412bcd3d31bc043a07e6bcccedee3e7..0844121bfda1e590596f7b3d9b75beaa88dafaad 100644 --- a/blenderkit/ui.py +++ b/blenderkit/ui.py @@ -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 diff --git a/blenderkit/ui_bgl.py b/blenderkit/ui_bgl.py index 339f5983857d91286c5377ac187f1c792f61657b..07362b550ce8c2627835ca4d4a4098afaeafc7be 100644 --- a/blenderkit/ui_bgl.py +++ b/blenderkit/ui_bgl.py @@ -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': diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py index d976fbdd30a28ed7e12331aa58657775eb77ea00..c3734554e62ddbd321e2598904251fa72bb95f78 100644 --- a/blenderkit/ui_panels.py +++ b/blenderkit/ui_panels.py @@ -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: diff --git a/blenderkit/utils.py b/blenderkit/utils.py index 5bdace75f8f2c1df35babb6886f9cd62827d8253..952219ad7b1a60ac2a82baf6623f67b4658391e7 100644 --- a/blenderkit/utils.py +++ b/blenderkit/utils.py @@ -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))