[Bf-blender-cvs] [223f4fa583c] topbar: Bring back toolshelf redo region, ifdef'ed out though

Julian Eisel noreply at git.blender.org
Wed Apr 18 23:43:00 CEST 2018


Commit: 223f4fa583cb386871d1e4fd4fb0e615caffa531
Author: Julian Eisel
Date:   Wed Apr 18 23:40:35 2018 +0200
Branches: topbar
https://developer.blender.org/rB223f4fa583cb386871d1e4fd4fb0e615caffa531

Bring back toolshelf redo region, ifdef'ed out though

Just for until the design is better defined. Also moved SpaceTopBar
struct to a better place in its DNA file.

===================================================================

M	source/blender/blenloader/intern/versioning_280.c
M	source/blender/editors/space_clip/clip_intern.h
M	source/blender/editors/space_clip/clip_toolbar.c
M	source/blender/editors/space_clip/space_clip.c
M	source/blender/editors/space_view3d/space_view3d.c
M	source/blender/editors/space_view3d/view3d_intern.h
M	source/blender/editors/space_view3d/view3d_toolbar.c
M	source/blender/makesdna/DNA_space_types.h

===================================================================

diff --git a/source/blender/blenloader/intern/versioning_280.c b/source/blender/blenloader/intern/versioning_280.c
index 5078905bbaa..791d53f25ee 100644
--- a/source/blender/blenloader/intern/versioning_280.c
+++ b/source/blender/blenloader/intern/versioning_280.c
@@ -951,6 +951,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
 	}
 
 	if (!DNA_struct_find(fd->filesdna, "SpaceTopBar")) {
+#ifdef WITH_REDO_REGION_REMOVAL
 		for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
 			for (ScrArea *sa = screen->areabase.first; sa; sa = sa->next) {
 				for (SpaceLink *sl = sa->spacedata.first; sl; sl = sl->next) {
@@ -969,6 +970,7 @@ void blo_do_versions_280(FileData *fd, Library *UNUSED(lib), Main *main)
 				}
 			}
 		}
+#endif
 
 		for (bScreen *screen = main->screen.first; screen; screen = screen->id.next) {
 			int win_width = 0, win_height = 0;
diff --git a/source/blender/editors/space_clip/clip_intern.h b/source/blender/editors/space_clip/clip_intern.h
index 7e37ae1238c..b0d00744558 100644
--- a/source/blender/editors/space_clip/clip_intern.h
+++ b/source/blender/editors/space_clip/clip_intern.h
@@ -120,6 +120,7 @@ void CLIP_OT_cursor_set(struct wmOperatorType *ot);
 struct ARegion *ED_clip_has_properties_region(struct ScrArea *sa);
 void CLIP_OT_tools(struct wmOperatorType *ot);
 void CLIP_OT_properties(struct wmOperatorType *ot);
+void ED_clip_tool_props_register(struct ARegionType *art);
 
 /* clip_utils.c */
 void clip_graph_tracking_values_iterate_track(struct SpaceClip *sc, struct MovieTrackingTrack *track, void *userdata,
diff --git a/source/blender/editors/space_clip/clip_toolbar.c b/source/blender/editors/space_clip/clip_toolbar.c
index 497f75f83b4..3b1f423b5ef 100644
--- a/source/blender/editors/space_clip/clip_toolbar.c
+++ b/source/blender/editors/space_clip/clip_toolbar.c
@@ -32,6 +32,7 @@
 #include <string.h>
 
 #include "DNA_windowmanager_types.h"
+#include "DNA_workspace_types.h"
 
 #include "MEM_guardedalloc.h"
 
@@ -119,15 +120,29 @@ void CLIP_OT_properties(wmOperatorType *ot)
 static ARegion *clip_has_tools_region(ScrArea *sa)
 {
 	ARegion *ar, *artool = NULL, *arhead;
+#ifndef WITH_REDO_REGION_REMOVAL
+	ARegion *arprops = NULL;
+#endif
 
 	for (ar = sa->regionbase.first; ar; ar = ar->next) {
 		if (ar->regiontype == RGN_TYPE_TOOLS)
 			artool = ar;
+
+#ifndef WITH_REDO_REGION_REMOVAL
+		if (ar->regiontype == RGN_TYPE_TOOL_PROPS)
+			arprops = ar;
+#endif
 	}
 
 	/* tool region hide/unhide also hides props */
-	if (artool)
+	if (artool
+#ifndef WITH_REDO_REGION_REMOVAL
+	    && arprops
+#endif
+	    )
+	{
 		return artool;
+	}
 
 	if (artool == NULL) {
 		/* add subdiv level; after header */
@@ -146,6 +161,17 @@ static ARegion *clip_has_tools_region(ScrArea *sa)
 		artool->flag = RGN_FLAG_HIDDEN;
 	}
 
+#ifndef WITH_REDO_REGION_REMOVAL
+	if (arprops == NULL) {
+		/* add extra subdivided region for tool properties */
+		arprops = MEM_callocN(sizeof(ARegion), "tool props for clip");
+
+		BLI_insertlinkafter(&sa->regionbase, artool, arprops);
+		arprops->regiontype = RGN_TYPE_TOOL_PROPS;
+		arprops->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
+	}
+#endif
+
 	return artool;
 }
 
@@ -176,3 +202,81 @@ void CLIP_OT_tools(wmOperatorType *ot)
 	ot->exec = tools_exec;
 	ot->poll = tools_poll;
 }
+
+#ifndef WITH_REDO_REGION_REMOVAL
+
+/************************** redo panel ******************************/
+
+static void clip_panel_operator_redo_buts(const bContext *C, Panel *pa, wmOperator *op)
+{
+	uiTemplateOperatorPropertyButs(C, pa->layout, op, NULL, UI_BUT_LABEL_ALIGN_COLUMN, 0);
+}
+
+static void clip_panel_operator_redo_header(const bContext *C, Panel *pa)
+{
+	wmOperator *op = WM_operator_last_redo(C);
+
+	if (op)
+		BLI_strncpy(pa->drawname, RNA_struct_ui_name(op->type->srna), sizeof(pa->drawname));
+	else
+		BLI_strncpy(pa->drawname, IFACE_("Operator"), sizeof(pa->drawname));
+}
+
+static void clip_panel_operator_redo_operator(const bContext *C, Panel *pa, wmOperator *op)
+{
+	if (op->type->flag & OPTYPE_MACRO) {
+		for (op = op->macro.first; op; op = op->next) {
+			uiItemL(pa->layout, RNA_struct_ui_name(op->type->srna), ICON_NONE);
+			clip_panel_operator_redo_operator(C, pa, op);
+		}
+	}
+	else {
+		clip_panel_operator_redo_buts(C, pa, op);
+	}
+}
+
+/* TODO de-duplicate redo panel functions - campbell */
+static void clip_panel_operator_redo(const bContext *C, Panel *pa)
+{
+	wmOperator *op = WM_operator_last_redo(C);
+	ARegion *ar;
+	ARegion *ar1;
+
+	if (op == NULL)
+		return;
+
+	/* keep in sync with logic in ED_undo_operator_repeat() */
+	ar = CTX_wm_region(C);
+	ar1 = BKE_area_find_region_type(CTX_wm_area(C), RGN_TYPE_WINDOW);
+	if (ar1)
+		CTX_wm_region_set((bContext *)C, ar1);
+
+	if (WM_operator_poll((bContext *)C, op->type)) {
+		uiBlock *block = uiLayoutGetBlock(pa->layout);
+
+		if (!WM_operator_check_ui_enabled(C, op->type->name))
+			uiLayoutSetEnabled(pa->layout, false);
+
+		/* note, blockfunc is a default but->func, use Handle func to allow button callbacks too */
+		UI_block_func_handle_set(block, ED_undo_operator_repeat_cb_evt, op);
+
+		clip_panel_operator_redo_operator(C, pa, op);
+	}
+
+	/* set region back */
+	CTX_wm_region_set((bContext *)C, ar);
+}
+
+void ED_clip_tool_props_register(ARegionType *art)
+{
+	PanelType *pt;
+
+	pt = MEM_callocN(sizeof(PanelType), "spacetype clip panel last operator");
+	strcpy(pt->idname, "CLIP_PT_last_operator");
+	strcpy(pt->label, N_("Operator"));
+	strcpy(pt->translation_context, BLT_I18NCONTEXT_DEFAULT_BPYRNA);
+	pt->draw_header = clip_panel_operator_redo_header;
+	pt->draw = clip_panel_operator_redo;
+	BLI_addtail(&art->paneltypes, pt);
+}
+#endif
diff --git a/source/blender/editors/space_clip/space_clip.c b/source/blender/editors/space_clip/space_clip.c
index 78e98369774..ba9684411b3 100644
--- a/source/blender/editors/space_clip/space_clip.c
+++ b/source/blender/editors/space_clip/space_clip.c
@@ -256,6 +256,15 @@ static SpaceLink *clip_new(const bContext *C)
 	ar->regiontype = RGN_TYPE_TOOLS;
 	ar->alignment = RGN_ALIGN_LEFT;
 
+#ifndef WITH_REDO_REGION_REMOVAL
+	/* tools view */
+	ar = MEM_callocN(sizeof(ARegion), "tool properties for clip");
+
+	BLI_addtail(&sc->regionbase, ar);
+	ar->regiontype = RGN_TYPE_TOOL_PROPS;
+	ar->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
+#endif
+
 	/* properties view */
 	ar = MEM_callocN(sizeof(ARegion), "properties for clip");
 
@@ -888,12 +897,19 @@ static void clip_refresh(const bContext *C, ScrArea *sa)
 	bool main_visible = false, preview_visible = false, tools_visible = false;
 	bool properties_visible = false, channels_visible = false;
 	bool view_changed = false;
+#ifndef WITH_REDO_REGION_REMOVAL
+	ARegion *ar_tool_props = BKE_area_find_region_type(sa, RGN_TYPE_TOOL_PROPS);
+	bool tool_props_visible = false;
+#endif
 
 	switch (sc->view) {
 		case SC_VIEW_CLIP:
 			main_visible = true;
 			preview_visible = false;
 			tools_visible = true;
+#ifndef WITH_REDO_REGION_REMOVAL
+			tool_props_visible = true;
+#endif
 			properties_visible = true;
 			channels_visible = false;
 			break;
@@ -901,6 +917,9 @@ static void clip_refresh(const bContext *C, ScrArea *sa)
 			main_visible = false;
 			preview_visible = true;
 			tools_visible = false;
+#ifndef WITH_REDO_REGION_REMOVAL
+			tool_props_visible = false;
+#endif
 			properties_visible = false;
 			channels_visible = false;
 
@@ -910,6 +929,9 @@ static void clip_refresh(const bContext *C, ScrArea *sa)
 			main_visible = false;
 			preview_visible = true;
 			tools_visible = false;
+#ifndef WITH_REDO_REGION_REMOVAL
+			tool_props_visible = false;
+#endif
 			properties_visible = false;
 			channels_visible = true;
 
@@ -990,6 +1012,32 @@ static void clip_refresh(const bContext *C, ScrArea *sa)
 		}
 	}
 
+#ifndef WITH_REDO_REGION_REMOVAL
+	if (tool_props_visible) {
+		if (ar_tool_props && (ar_tool_props->flag & RGN_FLAG_HIDDEN)) {
+			ar_tool_props->flag &= ~RGN_FLAG_HIDDEN;
+			ar_tool_props->v2d.flag &= ~V2D_IS_INITIALISED;
+			view_changed = true;
+		}
+		if (ar_tool_props && (ar_tool_props->alignment != (RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV))) {
+			ar_tool_props->alignment = RGN_ALIGN_BOTTOM | RGN_SPLIT_PREV;
+			view_changed = true;
+		}
+	}
+	else {
+		if (ar_tool_props && !(ar_tool_props->flag & RGN_FLAG_HIDDEN)) {
+			ar_tool_props->flag |= RGN_FLAG_HIDDEN;
+			ar_tool_props->v2d.flag &= ~V2D_IS_INITIALISED;
+			WM_event_remove_handlers((bContext *)C, &ar_tool_props->handlers);
+			view_changed = true;
+		}
+		if (ar_tool_props && ar_tool_props->alignment != RGN_ALIGN_NONE) {
+			ar_tool_props->alignment = RGN_ALIGN_NONE;
+			view_changed = true;
+		}
+	}
+#endif
+
 	if (preview_visible) {
 		if (ar_preview && (ar_preview->flag & RGN_FLAG_HIDDEN)) {
 			ar_preview->flag &= ~RGN_FLAG_HIDDEN;
@@ -1572,6 +1620,21 @@ void ED_spacetype_clip(void)
 
 	BLI_addhead(&st->regiontypes, art);
 
+#ifndef WITH_REDO_REGION_REMOVAL
+	/* tool properties */
+	art = MEM_callocN(sizeof(ARegionType), "spacetype clip tool properties region");
+	art->regionid = RGN_TYPE_TOOL_PROPS;
+	art->prefsizex = 0;
+	art->prefsizey = 120;
+	art->keymapflag = ED_KEYMAP_FRAMES | ED_KEYMAP_UI;
+	art->listener = clip_props_region_listener;
+	art->init = clip_tools_region_init;
+	art->draw = clip_tools_region_draw;
+	ED_clip_tool_props_register(art);
+
+	BLI_addhead(&st->regiontypes, art);
+#endif
+
 	/* regions: header */
 	art = MEM_callocN(sizeof(ARegionType), "spacetype clip region");
 	art->regionid = RGN_TYPE_HEADER;
diff --git a/source/blender/editors/space_view3d/space_view3d.c b/source/blender/editors/space_view3d/space_view3d.c
index 64be23178f3..eba4cef97cf 100644
--- a/source/blender/editors/space_view3d/space_view3d.c
+++ b/source/blender/editors/space_view3d/space_view3d.c
@@ -114,13 +114,26 @@ ARegion *view3d_has_buttons_region(ScrArea *sa)
 ARegion *view3d_has_tools_region(ScrArea *sa)
 {
 	ARegion *ar, *artool = NULL, *arhead;
-	
+#ifndef WITH_REDO_REGION_REMOVAL
+	ARegion *arprops = NULL;
+#endif
+
 	for (ar = sa->regionbase.first; ar; ar = ar->next) {
 		if (ar->regiontype == RGN_TYPE_TOOLS)
 			artool = ar;
+#ifndef WITH_REDO_REGION_REMOVAL
+		if (ar->regiontype == RGN_TYPE_TOOL_PROPS)
+			arprops = ar;
+#endif
 	}
 
-	if (art

@@ Diff output truncated at 10240 characters. @@



More information about the Bf-blender-cvs mailing list