Cleanup: use staticmethod where appropriate
[blender.git] / release / scripts / templates_py / ui_previews_custom_icon.py
1 # This sample script demonstrates how to place a custom icon on a button or
2 # menu entry.
3 #
4 # IMPORTANT NOTE: if you run this sample, there will be no icon in the button
5 # You need to replace the image path with a real existing one.
6 # For distributable scripts, it is recommended to place the icons inside the
7 # addon folder and access it relative to the py script file for portability
8 #
9 #
10 # Other use cases for UI-previews:
11 # - provide a fixed list of previews to select from
12 # - provide a dynamic list of preview (eg. calculated from reading a directory)
13 #
14 # For the above use cases, see the template 'ui_previews_dynamic_enum.py"
15
16
17 import os
18 import bpy
19
20
21 class PreviewsExamplePanel(bpy.types.Panel):
22     """Creates a Panel in the Object properties window"""
23     bl_label = "Previews Example Panel"
24     bl_idname = "OBJECT_PT_previews"
25     bl_space_type = 'PROPERTIES'
26     bl_region_type = 'WINDOW'
27     bl_context = "object"
28
29     def draw(self, context):
30         layout = self.layout
31         pcoll = preview_collections["main"]
32
33         row = layout.row()
34         my_icon = pcoll["my_icon"]
35         row.operator("render.render", icon_value=my_icon.icon_id)
36
37         # my_icon.icon_id can be used in any UI function that accepts
38         # icon_value # try also setting text=""
39         # to get an icon only operator button
40
41
42 # We can store multiple preview collections here,
43 # however in this example we only store "main"
44 preview_collections = {}
45
46
47 def register():
48
49     # Note that preview collections returned by bpy.utils.previews
50     # are regular py objects - you can use them to store custom data.
51     import bpy.utils.previews
52     pcoll = bpy.utils.previews.new()
53
54     # path to the folder where the icon is
55     # the path is calculated relative to this py file inside the addon folder
56     my_icons_dir = os.path.join(os.path.dirname(__file__), "icons")
57
58     # load a preview thumbnail of a file and store in the previews collection
59     pcoll.load("my_icon", os.path.join(my_icons_dir, "icon-image.png"), 'IMAGE')
60
61     preview_collections["main"] = pcoll
62
63     bpy.utils.register_class(PreviewsExamplePanel)
64
65
66 def unregister():
67
68     for pcoll in preview_collections.values():
69         bpy.utils.previews.remove(pcoll)
70     preview_collections.clear()
71
72     bpy.utils.unregister_class(PreviewsExamplePanel)
73
74
75 if __name__ == "__main__":
76     register()