Move icon code into module
This, combined with lazy loading, has the advantage of using icons in property definitions before the actual registration code runs
This commit is contained in:
parent
fa7f58e4dd
commit
ee1b55184c
|
@ -8,6 +8,7 @@ import arm.logicnode.arm_nodes as arm_nodes
|
|||
import arm.logicnode.replacement
|
||||
import arm.logicnode
|
||||
import arm.props_traits
|
||||
import arm.ui_icons as ui_icons
|
||||
import arm.utils
|
||||
|
||||
registered_nodes = []
|
||||
|
@ -174,7 +175,7 @@ class ARM_PT_LogicNodePanel(bpy.types.Panel):
|
|||
layout.operator('arm.open_node_documentation', icon='HELP')
|
||||
column = layout.column(align=True)
|
||||
column.operator('arm.open_node_python_source', icon='FILE_SCRIPT')
|
||||
column.operator('arm.open_node_haxe_source', icon_value=arm.props_traits.icons_dict['haxe'].icon_id)
|
||||
column.operator('arm.open_node_haxe_source', icon_value=ui_icons.get_id("haxe"))
|
||||
|
||||
|
||||
class ArmOpenNodeHaxeSource(bpy.types.Operator):
|
||||
|
|
|
@ -11,6 +11,7 @@ import bpy.utils.previews
|
|||
import arm.make as make
|
||||
from arm.props_traits_props import *
|
||||
import arm.proxy as proxy
|
||||
import arm.ui_icons as ui_icons
|
||||
import arm.utils
|
||||
import arm.write_data as write_data
|
||||
|
||||
|
@ -94,13 +95,13 @@ class ARM_UL_TraitList(bpy.types.UIList):
|
|||
custom_icon = "NONE"
|
||||
custom_icon_value = 0
|
||||
if item.type_prop == "Haxe Script":
|
||||
custom_icon_value = icons_dict["haxe"].icon_id
|
||||
custom_icon_value = ui_icons.get_id("haxe")
|
||||
elif item.type_prop == "WebAssembly":
|
||||
custom_icon_value = icons_dict["wasm"].icon_id
|
||||
custom_icon_value = ui_icons.get_id("wasm")
|
||||
elif item.type_prop == "UI Canvas":
|
||||
custom_icon = "NODE_COMPOSITING"
|
||||
elif item.type_prop == "Bundled Script":
|
||||
custom_icon_value = icons_dict["bundle"].icon_id
|
||||
custom_icon_value = ui_icons.get_id("bundle")
|
||||
elif item.type_prop == "Logic Nodes":
|
||||
custom_icon = 'NODETREE'
|
||||
|
||||
|
@ -862,8 +863,8 @@ def draw_traits_panel(layout: bpy.types.UILayout, obj: Union[bpy.types.Object, b
|
|||
row = layout.row()
|
||||
row.template_list("ARM_UL_PropList", "The_List", item, "arm_traitpropslist", item, "arm_traitpropslist_index", rows=propsrows)
|
||||
|
||||
|
||||
def register():
|
||||
global icons_dict
|
||||
bpy.utils.register_class(ArmTraitListItem)
|
||||
bpy.utils.register_class(ARM_UL_TraitList)
|
||||
bpy.utils.register_class(ArmTraitListNewItem)
|
||||
|
@ -891,14 +892,8 @@ def register():
|
|||
bpy.types.Scene.arm_traitlist = CollectionProperty(type=ArmTraitListItem)
|
||||
bpy.types.Scene.arm_traitlist_index = IntProperty(name="Index for arm_traitlist", default=0)
|
||||
|
||||
icons_dict = bpy.utils.previews.new()
|
||||
icons_dir = os.path.join(os.path.dirname(__file__), "custom_icons")
|
||||
icons_dict.load("haxe", os.path.join(icons_dir, "haxe.png"), 'IMAGE')
|
||||
icons_dict.load("wasm", os.path.join(icons_dir, "wasm.png"), 'IMAGE')
|
||||
icons_dict.load("bundle", os.path.join(icons_dir, "bundle.png"), 'IMAGE')
|
||||
|
||||
def unregister():
|
||||
global icons_dict
|
||||
bpy.utils.unregister_class(ARM_OT_CopyTraitsFromActive)
|
||||
bpy.utils.unregister_class(ArmTraitListItem)
|
||||
bpy.utils.unregister_class(ARM_UL_TraitList)
|
||||
|
@ -920,4 +915,3 @@ def unregister():
|
|||
bpy.utils.unregister_class(ArmRefreshCanvasListButton)
|
||||
bpy.utils.unregister_class(ARM_PT_TraitPanel)
|
||||
bpy.utils.unregister_class(ARM_PT_SceneTraitPanel)
|
||||
bpy.utils.previews.remove(icons_dict)
|
||||
|
|
|
@ -15,6 +15,7 @@ import arm.props_properties
|
|||
import arm.props_traits
|
||||
import arm.nodes_logic
|
||||
import arm.proxy
|
||||
import arm.ui_icons as ui_icons
|
||||
import arm.utils
|
||||
|
||||
from arm.lightmapper.utility import icon
|
||||
|
@ -2574,7 +2575,7 @@ def draw_custom_node_menu(self, context):
|
|||
layout = self.layout
|
||||
layout.separator()
|
||||
layout.operator("arm.open_node_documentation", text="Show documentation for this node", icon='HELP')
|
||||
layout.operator("arm.open_node_haxe_source", text="Open .hx source in the browser", icon_value=arm.props_traits.icons_dict['haxe'].icon_id)
|
||||
layout.operator("arm.open_node_haxe_source", text="Open .hx source in the browser", icon_value=ui_icons.get_id("haxe"))
|
||||
layout.operator("arm.open_node_python_source", text="Open .py source in the browser", icon='FILE_SCRIPT')
|
||||
|
||||
elif context.space_data.tree_type == 'ShaderNodeTree':
|
||||
|
|
34
blender/arm/ui_icons.py
Normal file
34
blender/arm/ui_icons.py
Normal file
|
@ -0,0 +1,34 @@
|
|||
"""
|
||||
Blender user interface icon handling.
|
||||
"""
|
||||
import os.path
|
||||
from typing import Optional
|
||||
|
||||
import bpy.utils.previews
|
||||
|
||||
_icons_dict: Optional[bpy.utils.previews.ImagePreviewCollection] = None
|
||||
"""Dictionary of all loaded icons, or `None` if not loaded"""
|
||||
|
||||
_icons_dir = os.path.join(os.path.dirname(__file__), "custom_icons")
|
||||
"""Directory of the icon files"""
|
||||
|
||||
|
||||
def _load_icons() -> None:
|
||||
"""(Re)loads all icons"""
|
||||
global _icons_dict
|
||||
|
||||
if _icons_dict is not None:
|
||||
bpy.utils.previews.remove(_icons_dict)
|
||||
|
||||
_icons_dict = bpy.utils.previews.new()
|
||||
_icons_dict.load("armory", os.path.join(_icons_dir, "armory.png"), 'IMAGE')
|
||||
_icons_dict.load("bundle", os.path.join(_icons_dir, "bundle.png"), 'IMAGE')
|
||||
_icons_dict.load("haxe", os.path.join(_icons_dir, "haxe.png"), 'IMAGE')
|
||||
_icons_dict.load("wasm", os.path.join(_icons_dir, "wasm.png"), 'IMAGE')
|
||||
|
||||
|
||||
def get_id(identifier: str) -> int:
|
||||
"""Returns the icon ID from the given identifier"""
|
||||
if _icons_dict is None:
|
||||
_load_icons()
|
||||
return _icons_dict[identifier].icon_id
|
Loading…
Reference in a new issue