UI: support passing a function to WorkSpace.status_text_set()
authorCampbell Barton <ideasman42@gmail.com>
Tue, 8 Oct 2019 03:21:41 +0000 (14:21 +1100)
committerCampbell Barton <ideasman42@gmail.com>
Tue, 8 Oct 2019 03:21:41 +0000 (14:21 +1100)
This allows Python operators to draw icons and other UI elements
into the status bar.

release/scripts/modules/bpy_types.py
source/blender/makesrna/intern/rna_workspace_api.c

index 29470895079f44aca65bc7e21dc29cda6fa2d589..1a2eb12cd9ff66b3d062b24e3cc0580f5782c12d 100644 (file)
@@ -184,6 +184,27 @@ class WindowManager(bpy_types.ID):
                 self.piemenu_end__internal(pie)
 
 
+class WorkSpace(bpy_types.ID):
+    __slots__ = ()
+
+    def status_text_set(self, text):
+        """
+        Set the status text or None to clear,
+        When text is a function, this will be called with the (header, context) arguments.
+        """
+        from bl_ui.space_statusbar import STATUSBAR_HT_header
+        draw_fn = getattr(STATUSBAR_HT_header, "_draw_orig", None)
+        if draw_fn is None:
+            draw_fn = STATUSBAR_HT_header._draw_orig = STATUSBAR_HT_header.draw
+
+        if not (text is None or isinstance(text, str)):
+            draw_fn = text
+            text = None
+
+        self.status_text_set_internal(text)
+        STATUSBAR_HT_header.draw = draw_fn
+
+
 class _GenericBone:
     """
     functions for bones, common between Armature/Pose/Edit bones.
index b8c6a25ace821e6e6694a4e4f3666ee51cba2ccf..f22c86b3ff23d76ee30bd522f5bdf0230ee489a8 100644 (file)
@@ -110,7 +110,7 @@ void RNA_api_workspace(StructRNA *srna)
   FunctionRNA *func;
   PropertyRNA *parm;
 
-  func = RNA_def_function(srna, "status_text_set", "ED_workspace_status_text");
+  func = RNA_def_function(srna, "status_text_set_internal", "ED_workspace_status_text");
   RNA_def_function_flag(func, FUNC_NO_SELF | FUNC_USE_CONTEXT);
   RNA_def_function_ui_description(
       func, "Set the status bar text, typically key shortcuts for modal operators");