[Bf-extensions-cvs] SVN commit: /data/svn/bf-extensions [1465] trunk/py/scripts/addons/ development_icon_get.py: Version 1.5.0 of Icon script.

Bart Crouch bartius.crouch at gmail.com
Fri Jan 21 13:37:03 CET 2011


Revision: 1465
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-extensions&revision=1465
Author:   crouch
Date:     2011-01-21 12:37:03 +0000 (Fri, 21 Jan 2011)
Log Message:
-----------
Version 1.5.0 of Icon script.
New: search box.

Modified Paths:
--------------
    trunk/py/scripts/addons/development_icon_get.py

Modified: trunk/py/scripts/addons/development_icon_get.py
===================================================================
--- trunk/py/scripts/addons/development_icon_get.py	2011-01-21 12:34:48 UTC (rev 1464)
+++ trunk/py/scripts/addons/development_icon_get.py	2011-01-21 12:37:03 UTC (rev 1465)
@@ -22,9 +22,9 @@
 bl_info = {
     'name': 'Icons',
     'author': 'Crouch, N.tox, PKHG, Campbell Barton, Dany Lebel',
-    'version': (1, 4, 2),
-    'blender': (2, 5, 6),
-    'api': 33928,
+    'version': (1, 5, 0),
+    'blender': (2, 5, 7),
+    'api': 34404,
     'location': 'Text window > Properties panel (ctrl+F) or '\
         'Console > Console menu',
     'warning': '',
@@ -34,16 +34,22 @@
         'Py/Scripts/System/Display_All_Icons',
     'tracker_url': 'http://projects.blender.org/tracker/index.php?'\
         'func=detail&aid=22011',
-    'category': 'System'}
+    'category': 'Development'}
 
 
 import bpy
 
 
 def create_icon_list():
-    list = bpy.types.UILayout.bl_rna.functions['prop'].\
-        parameters['icon'].items.keys()
-    list.remove("BLENDER")
+    props = bpy.context.scene.icon_props
+    keys = bpy.types.UILayout.bl_rna.functions['prop'].parameters['icon'].\
+        items.keys()
+    if props.search == '':
+        list = keys
+    else:
+        list = [key for key in keys if props.search.lower() in key.lower()]
+    if "BLENDER" in list:
+        list.remove("BLENDER")
     return list
 
 
@@ -67,6 +73,18 @@
         return {'FINISHED'}
 
 
+class WM_OT_icon_prop_update(bpy.types.Operator):
+    bl_label = "Icon Search"
+    bl_description = "Update icon_prop values"
+    
+    def execute(self, context):
+        props = context.scene.icon_props
+        # set old values to new values
+        props.search_old = props.search
+        
+        return {'FINISHED'}
+
+
 class OBJECT_PT_icons(bpy.types.Panel):
     bl_space_type = "TEXT_EDITOR"
     bl_region_type = "UI"
@@ -77,37 +95,72 @@
         self.icon_list = create_icon_list()
     
     def draw(self, context):
+        props = context.scene.icon_props
+        # polling for updates
+        if props.search != props.search_old:
+            bpy.ops.wm.icon_prop_update()
+            self.icon_list = create_icon_list()
+            # adjusting max value of scroller
+            IconProps.scroll = bpy.props.IntProperty(default=1, min=1,
+                max=max(1, len(self.icon_list) - self.amount + 1),
+                description="Drag to scroll icons")
+        
         box = self.layout.box()
-        
         # scroll view
-        if not context.scene.icon_props.expand:
-            row = box.row()
-            row.prop(context.scene.icon_props, "expand",
-                icon="TRIA_RIGHT", icon_only=True, emboss=False)
-            row.prop(context.scene.icon_props, "scroll")
-
+        if not props.expand:
+            # expand button
+            toprow = box.row()
+            toprow.prop(props, "expand", icon="TRIA_RIGHT", icon_only=True,
+                emboss=False)
+            # search buttons
+            row = toprow.row(align=True)
+            row.prop(props, "search", icon="VIEWZOOM")
+            # scroll button
+            row = toprow.row()
+            row.active = props.bl_rna.scroll[1]['max'] > 1
+            row.prop(props, "scroll")
+            
+            # icons
             row = box.row(align=True)
-            for icon in self.icon_list[context.scene.icon_props.scroll-1:
-            context.scene.icon_props.scroll-1+self.amount]:
-                row.operator("wm.icon_info", text=" ", icon=icon,
-                    emboss=False).icon = icon
+            if len(self.icon_list) == 0:
+                row.label("No icons found")
+            else:
+                for icon in self.icon_list[props.scroll-1:
+                props.scroll-1+self.amount]:
+                    row.operator("wm.icon_info", text=" ", icon=icon,
+                        emboss=False).icon = icon
+                if len(self.icon_list) < self.amount:
+                    for i in range(self.amount - len(self.icon_list) \
+                    % self.amount):
+                        row.label("")
         
         # expanded view
         else:
-            row = box.row()
-            row.prop(context.scene.icon_props, "expand",
-                icon="TRIA_DOWN", icon_only=True, emboss=False)
-            row = row.row()
+            # expand button
+            toprow = box.row()
+            toprow.prop(props, "expand", icon="TRIA_DOWN", icon_only=True,
+                emboss=False)
+            # search buttons
+            row = toprow.row(align=True)
+            row.prop(props, "search", icon="VIEWZOOM")
+            # scroll button
+            row = toprow.row()
             row.active = False
-            row.prop(context.scene.icon_props, "scroll")
-
+            row.prop(props, "scroll")
+            
+            # icons
             col = box.column(align=True)
-            row = col.row(align=True)
-            for i, icon in enumerate(self.icon_list):
-                if i % self.amount == 0:
-                    row = col.row(align=True)
-                row.operator("wm.icon_info", text=" ", icon=icon,
-                    emboss=False).icon = icon
+            if len(self.icon_list) == 0:
+                row.label("No icons found")
+            else:
+                for i, icon in enumerate(self.icon_list):
+                    if i % self.amount == 0:
+                        row = col.row(align=True)
+                    row.operator("wm.icon_info", text=" ", icon=icon,
+                        emboss=False).icon = icon
+                for i in range(self.amount - len(self.icon_list) \
+                % self.amount):
+                    row.label("")
 
 
 class CONSOLE_HT_icons(bpy.types.Header):
@@ -118,18 +171,37 @@
         self.icon_list = create_icon_list()
     
     def draw(self, context):
+        props = context.scene.icon_props
+        # polling for updates
+        if props.search != props.search_old:
+            bpy.ops.wm.icon_prop_update()
+            self.icon_list = create_icon_list()
+            # adjusting max value of scroller
+            IconProps.scroll = bpy.props.IntProperty(default=1, min=1,
+                max=max(1, len(self.icon_list) - self.amount + 1),
+                description="Drag to scroll icons")
+        
         # scroll view
-        if context.scene.icon_props.console:
+        if props.console:
             layout = self.layout
             layout.separator()
+            # search buttons
             row = layout.row()
-            row.prop(context.scene.icon_props, "scroll")
+            row.prop(props, "search", icon="VIEWZOOM")
+            # scroll button
+            row = layout.row()
+            row.active = props.bl_rna.scroll[1]['max'] > 1
+            row.prop(props, "scroll")
+            
+            # icons
             row = layout.row(align=True)
-            
-            for icon in self.icon_list[context.scene.icon_props.scroll-1:
-            context.scene.icon_props.scroll-1+self.amount]:
-                row.operator("wm.icon_info", text="", icon=icon,
-                    emboss=False).icon = icon
+            if len(self.icon_list) == 0:
+                row.label("No icons found")
+            else:
+                for icon in self.icon_list[props.scroll-1:
+                props.scroll-1+self.amount]:
+                    row.operator("wm.icon_info", text="", icon=icon,
+                        emboss=False).icon = icon
 
 
 def menu_func(self, context):
@@ -137,17 +209,20 @@
 
 
 def register():
-    icons_total = len(create_icon_list())
-    icons_per_row = 10
-    
     bpy.types.Scene.icon_props = bpy.props.PointerProperty(type = IconProps)
-    IconProps.console = bpy.props.BoolProperty(
-        name='Show System Icons',
+    IconProps.console = bpy.props.BoolProperty(name='Show System Icons',
         description='Display the Icons in the console header', default=False)
     IconProps.expand = bpy.props.BoolProperty(default=False,
         description="Expand, to display all icons at once")
+    IconProps.search = bpy.props.StringProperty(default="",
+        description = "Search for icons by name")
+    IconProps.search_old = bpy.props.StringProperty(default="",
+        description = "Used to keep track of changes in IconProps.search")
+    
+    icons_total = len(create_icon_list())
+    icons_per_row = 10
     IconProps.scroll = bpy.props.IntProperty(default=1, min=1,
-        max=icons_total - icons_per_row + 1,
+        max=max(1, icons_total - icons_per_row + 1),
         description="Drag to scroll icons")
     
     bpy.types.CONSOLE_MT_console.append(menu_func)



More information about the Bf-extensions-cvs mailing list