From 7ebbe0f3093deb78bcfe6b5c614e7419630f3568 Mon Sep 17 00:00:00 2001
From: Vilem Duha <vilem.duha@gmail.com>
Date: Fri, 23 Jul 2021 15:09:17 +0200
Subject: [PATCH] BlenderKit: make it clear when a filter is used

this required a new icon for filters and an update function.
---
 blenderkit/__init__.py                  |   5 +++--
 blenderkit/asset_bar_op.py              |   2 +-
 blenderkit/icons.py                     |   2 ++
 blenderkit/search.py                    |  25 +++++++++++++++++++++---
 blenderkit/thumbnails/filter.png        | Bin 0 -> 525 bytes
 blenderkit/thumbnails/filter_active.png | Bin 0 -> 525 bytes
 blenderkit/ui.py                        |   2 +-
 blenderkit/ui_panels.py                 |  13 ++++++++++--
 8 files changed, 40 insertions(+), 9 deletions(-)
 create mode 100644 blenderkit/thumbnails/filter.png
 create mode 100644 blenderkit/thumbnails/filter_active.png

diff --git a/blenderkit/__init__.py b/blenderkit/__init__.py
index 7bd5fe8da..37e91a0ab 100644
--- a/blenderkit/__init__.py
+++ b/blenderkit/__init__.py
@@ -459,8 +459,8 @@ class BlenderKitCommonSearchProps(object):
                               default=False)
     own_only: BoolProperty(name="My Assets Only", description="Search only for your assets",
                            default=False, update=search.search_update)
-    search_advanced: BoolProperty(name="Advanced Search Options", description="use advanced search properties",
-                                  default=False, update=search.search_update)
+    use_filters: BoolProperty(name="Filters are on", description="some filters are used",
+                                  default=False)
 
     search_error: BoolProperty(name="Search Error", description="last search had an error", default=False)
     report: StringProperty(
@@ -574,6 +574,7 @@ class BlenderKitCommonSearchProps(object):
                                default=0, min=0, max=10, update=search.search_update)
 
 
+
 def name_update(self, context):
     ''' checks for name change, because it decides if whole asset has to be re-uploaded. Name is stored in the blend file
     and that's the reason.'''
diff --git a/blenderkit/asset_bar_op.py b/blenderkit/asset_bar_op.py
index 9c12b0f22..19f51682a 100644
--- a/blenderkit/asset_bar_op.py
+++ b/blenderkit/asset_bar_op.py
@@ -605,7 +605,7 @@ class BlenderKitAssetBarOperator(BL_UI_OT_draw_operator):
         self.scroll_offset = min(self.scroll_offset, len(sr) - (self.wcount * self.hcount))
         self.scroll_offset = max(self.scroll_offset, 0)
         self.update_images()
-        if len(sr) - self.scroll_offset < (self.wcount * self.hcount) + 10:
+        if len(sr) - self.scroll_offset < (self.wcount * self.hcount) + 15:
             self.search_more()
 
     def search_by_author(self, asset_index):
diff --git a/blenderkit/icons.py b/blenderkit/icons.py
index b8b86cba0..09a1ba195 100644
--- a/blenderkit/icons.py
+++ b/blenderkit/icons.py
@@ -31,6 +31,8 @@ icons_read = {
     'dumbbell.png': 'dumbbell',
     'cc0.png': 'cc0',
     'royalty_free.png': 'royalty_free',
+    'filter.png': 'filter',
+    'filter_active.png': 'filter_active',
 }
 
 verification_icons = {
diff --git a/blenderkit/search.py b/blenderkit/search.py
index 59f9f8388..940375fa9 100644
--- a/blenderkit/search.py
+++ b/blenderkit/search.py
@@ -1083,7 +1083,7 @@ def build_query_common(query, props):
 
     if props.quality_limit > 0:
         query["quality_gte"] = props.quality_limit
-        
+
     query.update(query_common)
 
 
@@ -1106,7 +1106,6 @@ def build_query_model():
     # if props.free_only:
     #     query["is_free"] = True
 
-    # if props.search_advanced:
     if props.search_condition != 'UNSPECIFIED':
         query["condition"] = props.search_condition
 
@@ -1387,7 +1386,7 @@ def search(category='', get_next=False, author_id=''):
     # utils.p('searching')
     props.is_searching = True
 
-    page_size = min(40, ui_props.wcount * user_preferences.max_assetbar_rows)
+    page_size = min(30, ui_props.wcount * user_preferences.max_assetbar_rows)
 
     params = {
         'scene_uuid': bpy.context.scene.get('uuid', None),
@@ -1406,10 +1405,30 @@ def search(category='', get_next=False, author_id=''):
 
     props.report = 'BlenderKit searching....'
 
+def update_filters():
+    sprops = utils.get_search_props()
+    ui_props = bpy.context.scene.blenderkitUI
+    fcommon = sprops.own_only or \
+        sprops.search_texture_resolution or\
+        sprops.search_file_size or \
+        sprops.search_procedural != 'BOTH' or \
+        sprops.free_only or \
+        sprops.quality_limit>0
+
+    if ui_props.asset_type =='MODEL':
+        sprops.use_filters = fcommon or \
+                             sprops.search_style != 'ANY' or \
+            sprops.search_condition != 'UNSPECIFIED' or \
+            sprops.search_design_year or \
+            sprops.search_polycount 
+    elif ui_props.asset_type == 'MATERIAL':
+        sprops.use_filters = fcommon
+
 
 def search_update(self, context):
     utils.p('search updater')
     # if self.search_keywords != '':
+    update_filters()
     ui_props = bpy.context.scene.blenderkitUI
     if ui_props.down_up != 'SEARCH':
         ui_props.down_up = 'SEARCH'
diff --git a/blenderkit/thumbnails/filter.png b/blenderkit/thumbnails/filter.png
new file mode 100644
index 0000000000000000000000000000000000000000..e128c35eed5f2413fb38122b829b5fe77abc4d3b
GIT binary patch
literal 525
zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F<YIoCO|{#S9Eab3vGKdScRR
z1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<_&XL-6fhGaCpy<zQl
z*g?eYVX^Kl9p+sbX}p5j4NY2^f-4236Xb2W-W=m|;?S6|V$lV`i;1zTJQzQ1ur-#m
z{uJ+8>2pq9yz)eem2LRd>;>+-w=w9cp5EktOML$wrG<MxGVE0;Ykd8U>4Tv4p~TNF
zq52IrWuC21S6TV3*(w}r%e*gHd};(=&zh~mk@qGqd%3dX4kP==U0k~CZpUUwGep)d
zVeN?j_<^0F*X>VtyD3A4N>Z*(4uivD0qMty+ze8UH>CKj83aT(8q0CjOzrq$IdS!?
zf^Zv=9ZaW}W>zUFeQ((>v~v~T+O6AN=fy}cY*p|&>g>tD;yR_Tor{5^X@v;CDB}as
zKub9ph6k(<Mfm#|3Y;vCH?uQ1OiR^2ka%+XUa921nETcGb;8@LWEH+yIlL)txbd1{
z<8{U)eJKZ*do^=}xebD^ZtQPPVtBTyDyOINTVcfAhMlYU)@<$H$G1lKfvwytW|q$O
zDu#oP6m1kTY+6`Z`r8W{q8=T*AKx6Wy*=G?63?%{|0XZry#3s1QGtot4`eG=7|T6i
apS$7W#5GrzsW31wFnGH9xvX<aXaWGiA<W7E

literal 0
HcmV?d00001

diff --git a/blenderkit/thumbnails/filter_active.png b/blenderkit/thumbnails/filter_active.png
new file mode 100644
index 0000000000000000000000000000000000000000..de4fb3be163117bed02ed535def24a05234b4b6d
GIT binary patch
literal 525
zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4mJh`hH$2z?F<YIoCO|{#S9Eab3vGKdScRR
z1_lPn64!{5;QX|b^2DN4hVt@qz0ADq;^f4FRK5J7^x5xhq!<_&XL-6fhGaCpoxa!a
zP=JKP`RhAAN$m1?tS#|KW5>$}OIA<3`GaX+yFIhE4VT1XJ~clU^Um2%tztYm7=IQ2
zkGiz^>$iLBpD%HCWK%9(`hYJZKzG@J-Y@R2X1_Xlex_SUxZDE4Rx^WCZl;#?7lhb+
zlx7z8PG~VZ**l?Qk@VK&mnVCQADC|mPTTS))q2{zGuPRiOP95{C#WxovMT<$?9S`c
ztX}dPRn||RrjdJut8(w2rc17CCSKouEnrp$@26ki*qYpzoOrFP$<lp7fnT!DYfJLW
zg*Nr-EiIDbnV+h%-F`Wjc714hZT?aJe&<ug+uvj?`cG)C?|*V6(uJ|Ib`8TdWv)}N
z7qe~@OH^3jFP$KhsIlH%BFN%U(;m6x#(y4r8FyRu?=7FTDgD<Q-5>rjg|8YeTwz?e
zlG!Pky=566hwq67erabX)}BzO>&F%dFbcOUp3Gdi)$mOD0hWbVZ%$8-X0Bz6n9g3$
z==bEHe}i#lf&7CIxjSqY)7i@z<DMK0YG|6@db)6l#TP~XX-qCVSnXUT+`6t6>gbz2
cOMA#K^Jo2@L^FSD1_lNOPgg&ebxsLQ09$X~FaQ7m

literal 0
HcmV?d00001

diff --git a/blenderkit/ui.py b/blenderkit/ui.py
index 5b4160c5d..f402de51c 100644
--- a/blenderkit/ui.py
+++ b/blenderkit/ui.py
@@ -1298,7 +1298,7 @@ class AssetBarOperator(bpy.types.Operator):
         # If there aren't any results, we need no interaction(yet)
         if sr is None:
             return {'PASS_THROUGH'}
-        if len(sr) - ui_props.scrolloffset < (ui_props.wcount * user_preferences.max_assetbar_rows) + 10:
+        if len(sr) - ui_props.scrolloffset < (ui_props.wcount * user_preferences.max_assetbar_rows) + 15:
             self.search_more()
 
         if event.type == 'WHEELUPMOUSE' or event.type == 'WHEELDOWNMOUSE' or event.type == 'TRACKPADPAN':
diff --git a/blenderkit/ui_panels.py b/blenderkit/ui_panels.py
index f09f0b2ad..d5b0e66bd 100644
--- a/blenderkit/ui_panels.py
+++ b/blenderkit/ui_panels.py
@@ -2205,10 +2205,19 @@ def header_search_draw(self, context):
         layout.prop(props, "search_keywords", text="", icon='VIEWZOOM')
         draw_assetbar_show_hide(layout, props)
         layout.popover(panel="VIEW3D_PT_blenderkit_categories", text="", icon = 'OUTLINER')
+
+        pcoll = icons.icon_collections["main"]
+
+        if props.use_filters:
+            icon_id = pcoll['filter_active'].icon_id
+        else:
+            icon_id = pcoll['filter'].icon_id
+
         if ui_props.asset_type=='MODEL':
-            layout.popover(panel="VIEW3D_PT_blenderkit_advanced_model_search", text="", icon = 'FILTER')
+            layout.popover(panel="VIEW3D_PT_blenderkit_advanced_model_search", text="", icon_value = icon_id)
+
         elif ui_props.asset_type=='MATERIAL':
-            layout.popover(panel="VIEW3D_PT_blenderkit_advanced_material_search", text="", icon = 'FILTER')
+            layout.popover(panel="VIEW3D_PT_blenderkit_advanced_material_search", text="", icon_value = icon_id)
 
 
 def ui_message(title, message):
-- 
GitLab