Footage information panel
authorSergey Sharybin <sergey.vfx@gmail.com>
Mon, 22 Apr 2013 11:19:12 +0000 (11:19 +0000)
committerSergey Sharybin <sergey.vfx@gmail.com>
Mon, 22 Apr 2013 11:19:12 +0000 (11:19 +0000)
Displays such information as current frame dimension,
frame number within image sequence/movie and in case
of image sequence input displays current file name of
a frame.

Not entirely happy with such approach, but was requested
a lot by artists.

release/scripts/startup/bl_ui/space_clip.py
source/blender/editors/include/UI_interface.h
source/blender/editors/space_clip/clip_buttons.c
source/blender/makesrna/intern/rna_ui_api.c

index d81356b3113acb934765d928085a38df3dc4cab8..cadf01ccbba8d4b21a182d340b6a5793555b46f7 100644 (file)
@@ -875,6 +875,22 @@ class CLIP_PT_footage(CLIP_PT_clip_view_panel, Panel):
         col.prop(clip, "frame_offset")
 
 
+class CLIP_PT_footage_info(CLIP_PT_clip_view_panel, Panel):
+    bl_space_type = 'CLIP_EDITOR'
+    bl_region_type = 'UI'
+    bl_label = "Footage Information"
+    bl_options = {'DEFAULT_CLOSED'}
+
+    def draw(self, context):
+        layout = self.layout
+
+        sc = context.space_data
+        clip = sc.clip
+
+        col = layout.column()
+        col.template_movieclip_information(sc, "clip", sc.clip_user)
+
+
 class CLIP_PT_tools_clip(CLIP_PT_clip_view_panel, Panel):
     bl_space_type = 'CLIP_EDITOR'
     bl_region_type = 'TOOLS'
index c7ed60bcdc04ac536a69c67d9d6fbc21de303856..f007b5ad5a7e52efb891c8648c85b0f71f1e7513 100644 (file)
@@ -855,6 +855,7 @@ void uiTemplateTextureShow(uiLayout *layout, struct bContext *C, struct PointerR
 void uiTemplateMovieClip(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname, int compact);
 void uiTemplateTrack(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname);
 void uiTemplateMarker(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname, PointerRNA *userptr, PointerRNA *trackptr, int cmpact);
+void uiTemplateMovieclipInformation(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname,struct PointerRNA *userptr);
 
 void uiTemplateColorspaceSettings(struct uiLayout *layout, struct PointerRNA *ptr, const char *propname);
 void uiTemplateColormanagedViewSettings(struct uiLayout *layout, struct bContext *C, struct PointerRNA *ptr, const char *propname);
index 8d863193b760259147eb45134a0d0fbf1301e401..c8eb4157d6560509b31c9c4f1522b858bf721093 100644 (file)
@@ -41,7 +41,9 @@
 #include "BLI_math.h"
 #include "BLI_utildefines.h"
 #include "BLI_listbase.h"
+#include "BLI_path_util.h"
 #include "BLI_rect.h"
+#include "BLI_string.h"
 
 #include "BLF_translation.h"
 
@@ -482,3 +484,60 @@ void uiTemplateMarker(uiLayout *layout, PointerRNA *ptr, const char *propname, P
                uiBlockEndAlign(block);
        }
 }
+
+/********************* Footage Information Template ************************/
+
+void uiTemplateMovieclipInformation(uiLayout *layout, PointerRNA *ptr, const char *propname, PointerRNA *userptr)
+{
+       PropertyRNA *prop;
+       PointerRNA clipptr;
+       MovieClip *clip;
+       MovieClipUser *user;
+       uiLayout *col;
+       char str[1024];
+       int width, height, framenr;
+
+       if (!ptr->data)
+               return;
+
+       prop = RNA_struct_find_property(ptr, propname);
+       if (!prop) {
+               printf("%s: property not found: %s.%s\n",
+                      __func__, RNA_struct_identifier(ptr->type), propname);
+               return;
+       }
+
+       if (RNA_property_type(prop) != PROP_POINTER) {
+               printf("%s: expected pointer property for %s.%s\n",
+                      __func__, RNA_struct_identifier(ptr->type), propname);
+               return;
+       }
+
+       clipptr = RNA_property_pointer_get(ptr, prop);
+       clip = (MovieClip *)clipptr.data;
+       user = userptr->data;
+
+       col = uiLayoutColumn(layout, FALSE);
+
+       /* Display frame dimensions. */
+       BKE_movieclip_get_size(clip, user, &width, &height);
+       BLI_snprintf(str, sizeof(str), IFACE_("Size: %dx%d"), width, height);
+       uiItemL(col, str, ICON_NONE);
+
+       /* Display current frame number. */
+       framenr = BKE_movieclip_remap_scene_to_clip_frame(clip, user->framenr) + clip->frame_offset;
+       BLI_snprintf(str, sizeof(str), IFACE_("Frame: %d"), framenr);
+       uiItemL(col, str, ICON_NONE);
+
+       /* Display current file name if it's a sequence clip. */
+       if (clip->source == MCLIP_SRC_SEQUENCE) {
+               char filepath[FILE_MAX];
+               const char *file;
+
+               BKE_movieclip_filename_for_frame(clip, user, filepath);
+               file = BLI_last_slash(filepath);
+
+               BLI_snprintf(str, sizeof(str), IFACE_("File: %s"), file);
+               uiItemL(col, str, ICON_NONE);
+       }
+}
index 9c354e7f70ec049754ced438bd6f998fad2be1df..c5c8789001a0f0e6534e87892546eb992d582b34 100644 (file)
@@ -767,6 +767,12 @@ void RNA_api_ui_layout(StructRNA *srna)
        RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
        RNA_def_boolean(func, "compact", 0, "", "Use more compact layout");
 
+       func = RNA_def_function(srna, "template_movieclip_information", "uiTemplateMovieclipInformation");
+       RNA_def_function_ui_description(func, "Item. Movie clip information data.");
+       api_ui_item_rna_common(func);
+       parm = RNA_def_pointer(func, "clip_user", "MovieClipUser", "", "");
+       RNA_def_property_flag(parm, PROP_REQUIRED | PROP_RNAPTR | PROP_NEVER_NULL);
+
        func = RNA_def_function(srna, "template_list", "uiTemplateList");
        RNA_def_function_ui_description(func, "Item. A list widget to display data, e.g. vertexgroups.");
        RNA_def_function_flag(func, FUNC_USE_CONTEXT);