03806d0b67
This commit implements described in the #104573. The goal is to fix the confusion of the submodule hashes change, which are not ideal for any of the supported git-module configuration (they are either always visible causing confusion, or silently staged and committed, also causing confusion). This commit replaces submodules with a checkout of addons and addons_contrib, covered by the .gitignore, and locale and developer tools are moved to the main repository. This also changes the paths: - /release/scripts are moved to the /scripts - /source/tools are moved to the /tools - /release/datafiles/locale is moved to /locale This is done to avoid conflicts when using bisect, and also allow buildbot to automatically "recover" wgen building older or newer branches/patches. Running `make update` will initialize the local checkout to the changed repository configuration. Another aspect of the change is that the make update will support Github style of remote organization (origin remote pointing to thy fork, upstream remote pointing to the upstream blender/blender.git). Pull Request #104755
75 lines
3.5 KiB
Python
75 lines
3.5 KiB
Python
import bpy
|
|
|
|
|
|
class MATERIAL_UL_matslots_example(bpy.types.UIList):
|
|
# The draw_item function is called for each item of the collection that is visible in the list.
|
|
# data is the RNA object containing the collection,
|
|
# item is the current drawn item of the collection,
|
|
# icon is the "computed" icon for the item (as an integer, because some objects like materials or textures
|
|
# have custom icons ID, which are not available as enum items).
|
|
# active_data is the RNA object containing the active property for the collection (i.e. integer pointing to the
|
|
# active item of the collection).
|
|
# active_propname is the name of the active property (use 'getattr(active_data, active_propname)').
|
|
# index is index of the current item in the collection.
|
|
# flt_flag is the result of the filtering process for this item.
|
|
# Note: as index and flt_flag are optional arguments, you do not have to use/declare them here if you don't
|
|
# need them.
|
|
def draw_item(self, context, layout, data, item, icon, active_data, active_propname):
|
|
ob = data
|
|
slot = item
|
|
ma = slot.material
|
|
# draw_item must handle the three layout types... Usually 'DEFAULT' and 'COMPACT' can share the same code.
|
|
if self.layout_type in {'DEFAULT', 'COMPACT'}:
|
|
# You should always start your row layout by a label (icon + text), or a non-embossed text field,
|
|
# this will also make the row easily selectable in the list! The later also enables ctrl-click rename.
|
|
# We use icon_value of label, as our given icon is an integer value, not an enum ID.
|
|
# Note "data" names should never be translated!
|
|
if ma:
|
|
layout.prop(ma, "name", text="", emboss=False, icon_value=icon)
|
|
else:
|
|
layout.label(text="", translate=False, icon_value=icon)
|
|
# 'GRID' layout type should be as compact as possible (typically a single icon!).
|
|
elif self.layout_type == 'GRID':
|
|
layout.alignment = 'CENTER'
|
|
layout.label(text="", icon_value=icon)
|
|
|
|
|
|
# And now we can use this list everywhere in Blender. Here is a small example panel.
|
|
class UIListPanelExample(bpy.types.Panel):
|
|
"""Creates a Panel in the Object properties window"""
|
|
bl_label = "UIList Panel"
|
|
bl_idname = "OBJECT_PT_ui_list_example"
|
|
bl_space_type = 'PROPERTIES'
|
|
bl_region_type = 'WINDOW'
|
|
bl_context = "object"
|
|
|
|
def draw(self, context):
|
|
layout = self.layout
|
|
|
|
obj = context.object
|
|
|
|
# template_list now takes two new args.
|
|
# The first one is the identifier of the registered UIList to use (if you want only the default list,
|
|
# with no custom draw code, use "UI_UL_list").
|
|
layout.template_list("MATERIAL_UL_matslots_example", "", obj, "material_slots", obj, "active_material_index")
|
|
|
|
# The second one can usually be left as an empty string.
|
|
# It's an additional ID used to distinguish lists in case you
|
|
# use the same list several times in a given area.
|
|
layout.template_list("MATERIAL_UL_matslots_example", "compact", obj, "material_slots",
|
|
obj, "active_material_index", type='COMPACT')
|
|
|
|
|
|
def register():
|
|
bpy.utils.register_class(MATERIAL_UL_matslots_example)
|
|
bpy.utils.register_class(UIListPanelExample)
|
|
|
|
|
|
def unregister():
|
|
bpy.utils.unregister_class(MATERIAL_UL_matslots_example)
|
|
bpy.utils.unregister_class(UIListPanelExample)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
register()
|