[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