8896446f7e72084018bf7a45306a83d92e22f34a
This adds a Python API for layout panels that have been introduced in #113584. Two new methods on `UILayout` are added: * `.panel(idname, text="...", default_closed=False) -> Optional[UILayout]` * `.panel_prop(owner, prop_name, text="...") -> Optional[UILayout]` Both create a panel and return `None` if the panel is collapsed. The difference lies in how the open-close-state is stored. The first method internally manages the open-close-state based on the provided identifier. The second one allows for providing a boolean property that stores whether the panel is open. This is useful when creating a dynamic of panels and when it is difficult to create a unique idname. For the `.panel(...)` method, a new internal map on `Panel` is created which keeps track of all the panel states based on the idname. Currently, there is no mechanism for freeing any elements once they have been added to the map. This is unlikely to cause a problem anytime soon, but we might need some kind of garbage collection in the future. ```python import bpy from bpy.props import BoolProperty class LayoutDemoPanel(bpy.types.Panel): bl_label = "Layout Panel Demo" bl_idname = "SCENE_PT_layout_panel" bl_space_type = 'PROPERTIES' bl_region_type = 'WINDOW' bl_context = "scene" def draw(self, context): layout = self.layout scene = context.scene layout.label(text="Before") if panel := layout.panel("my_panel_id", text="Hello World", default_closed=False): panel.label(text="Success") if panel := layout.panel_prop(scene, "show_demo_panel", text="My Panel"): panel.prop(scene, "frame_start") panel.prop(scene, "frame_end") layout.label(text="After") bpy.utils.register_class(LayoutDemoPanel) bpy.types.Scene.show_demo_panel = BoolProperty(default=False) ``` Pull Request: https://projects.blender.org/blender/blender/pulls/116949
…
Blender
Blender is the free and open source 3D creation suite. It supports the entirety of the 3D pipeline-modeling, rigging, animation, simulation, rendering, compositing, motion tracking and video editing.
Project Pages
Development
License
Blender as a whole is licensed under the GNU General Public License, Version 3. Individual files may have a different, but compatible license.
See blender.org/about/license for details.
Description
Languages
C++
78%
Python
14.9%
C
2.9%
GLSL
1.9%
CMake
1.2%
Other
0.9%
