[Bf-blender-cvs] [1c683de] depsgraph_refactor: Added a toolbar to the info space.

Lukas Tönne noreply at git.blender.org
Fri May 30 16:24:20 CEST 2014


Commit: 1c683de82be3cdf6b899b3f41a1051c3dbc337f1
Author: Lukas Tönne
Date:   Fri May 30 10:28:36 2014 +0200
https://developer.blender.org/rB1c683de82be3cdf6b899b3f41a1051c3dbc337f1

Added a toolbar to the info space.

This allows showing a mode switch button without having to put this into
the main menu bar.

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

M	release/scripts/startup/bl_ui/space_info.py
M	source/blender/editors/space_info/CMakeLists.txt
M	source/blender/editors/space_info/info_intern.h
A	source/blender/editors/space_info/info_toolbar.c
M	source/blender/editors/space_info/space_info.c

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

diff --git a/release/scripts/startup/bl_ui/space_info.py b/release/scripts/startup/bl_ui/space_info.py
index 3188167..de00631 100644
--- a/release/scripts/startup/bl_ui/space_info.py
+++ b/release/scripts/startup/bl_ui/space_info.py
@@ -18,7 +18,7 @@
 
 # <pep8 compliant>
 import bpy
-from bpy.types import Header, Menu
+from bpy.types import Header, Menu, Panel
 
 
 class INFO_HT_header(Header):
@@ -299,5 +299,18 @@ class INFO_MT_help(Menu):
 
         layout.operator("wm.splash", icon='BLENDER')
 
+class INFO_PT_tools(Panel):
+    bl_space_type = 'INFO'
+    bl_region_type = 'TOOLS'
+    bl_label = "Tools"
+    bl_options = {'HIDE_HEADER'}
+
+    def draw(self, context):
+        layout = self.layout
+        info = context.space_data
+
+        col = layout.column()
+        col.prop(info, "mode")
+
 if __name__ == "__main__":  # only for live edit.
     bpy.utils.register_module(__name__)
diff --git a/source/blender/editors/space_info/CMakeLists.txt b/source/blender/editors/space_info/CMakeLists.txt
index 47092ca..f129c2a 100644
--- a/source/blender/editors/space_info/CMakeLists.txt
+++ b/source/blender/editors/space_info/CMakeLists.txt
@@ -42,6 +42,7 @@ set(SRC
 	info_stats.c
 	info_draw.c
 	info_report.c
+	info_toolbar.c
 	textview.c
 	depsgraphview.c
 	space_info.c
diff --git a/source/blender/editors/space_info/info_intern.h b/source/blender/editors/space_info/info_intern.h
index 52285d1..ed1a2e2 100644
--- a/source/blender/editors/space_info/info_intern.h
+++ b/source/blender/editors/space_info/info_intern.h
@@ -34,6 +34,9 @@
 /* internal exports only */
 
 struct bContext;
+struct ARegion;
+struct ARegionType;
+struct ScrArea;
 struct SpaceInfo;
 struct wmOperatorType;
 struct ReportList;
@@ -69,4 +72,11 @@ void INFO_OT_report_replay(struct wmOperatorType *ot);
 void INFO_OT_report_delete(struct wmOperatorType *ot);
 void INFO_OT_report_copy(struct wmOperatorType *ot);
 
+/* info_toolbar.c */
+void info_toolbar_register(struct ARegionType *art);
+void INFO_OT_toolbar(struct wmOperatorType *ot);
+
+/* space_info.c */
+struct ARegion *info_has_tools_region(struct ScrArea *sa);
+
 #endif /* __INFO_INTERN_H__ */
diff --git a/source/blender/editors/space_info/info_toolbar.c b/source/blender/editors/space_info/info_toolbar.c
new file mode 100644
index 0000000..edb86f6
--- /dev/null
+++ b/source/blender/editors/space_info/info_toolbar.c
@@ -0,0 +1,85 @@
+/*
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version. 
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Lukas Toenne
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+/** \file blender/editors/space_node/info_toolbar.c
+ *  \ingroup spinfo
+ */
+
+
+#include "MEM_guardedalloc.h"
+
+#include "BLI_utildefines.h"
+
+#include "DNA_listBase.h"
+
+#include "BKE_context.h"
+#include "BKE_screen.h"
+
+#include "WM_api.h"
+#include "WM_types.h"
+
+#include "ED_screen.h"
+
+#include "UI_interface.h"
+#include "UI_resources.h"
+
+#include "info_intern.h"  /* own include */
+
+
+/* ******************* toolbar registration ************** */
+
+void info_toolbar_register(ARegionType *UNUSED(art))
+{
+}
+
+/* ********** operator to open/close toolshelf region */
+
+static int info_toolbar_toggle_exec(bContext *C, wmOperator *UNUSED(op))
+{
+	ScrArea *sa = CTX_wm_area(C);
+	ARegion *ar = info_has_tools_region(sa);
+	
+	if (ar)
+		ED_region_toggle_hidden(C, ar);
+
+	return OPERATOR_FINISHED;
+}
+
+/* non-standard poll operator which doesn't care if there are any nodes */
+static int info_toolbar_poll(bContext *C)
+{
+	ScrArea *sa = CTX_wm_area(C);
+	return (sa && (sa->spacetype == SPACE_INFO));
+}
+
+void INFO_OT_toolbar(wmOperatorType *ot)
+{
+	ot->name = "Tool Shelf";
+	ot->description = "Toggles tool shelf display";
+	ot->idname = "INFO_OT_toolbar";
+	
+	ot->exec = info_toolbar_toggle_exec;
+	ot->poll = info_toolbar_poll;
+	
+	/* flags */
+	ot->flag = 0;
+}
diff --git a/source/blender/editors/space_info/space_info.c b/source/blender/editors/space_info/space_info.c
index 6600507..45f36d5 100644
--- a/source/blender/editors/space_info/space_info.c
+++ b/source/blender/editors/space_info/space_info.c
@@ -58,6 +58,32 @@
 #include "info_intern.h"  /* own include */
 #include "BLO_readfile.h"
 
+/* ******************** manage regions ********************* */
+
+ARegion *info_has_tools_region(ScrArea *sa)
+{
+	ARegion *ar, *arnew;
+	
+	ar = BKE_area_find_region_type(sa, RGN_TYPE_TOOLS);
+	if (ar) return ar;
+	
+	/* add subdiv level; after header */
+	ar = BKE_area_find_region_type(sa, RGN_TYPE_HEADER);
+	
+	/* is error! */
+	if (ar == NULL) return NULL;
+	
+	arnew = MEM_callocN(sizeof(ARegion), "info tools");
+	
+	BLI_insertlinkafter(&sa->regionbase, ar, arnew);
+	arnew->regiontype = RGN_TYPE_TOOLS;
+	arnew->alignment = RGN_ALIGN_LEFT;
+	
+	arnew->flag = RGN_FLAG_HIDDEN;
+	
+	return arnew;
+}
+
 /* ******************** default callbacks for info space ***************** */
 
 static SpaceLink *info_new(const bContext *UNUSED(C))
@@ -82,7 +108,16 @@ static SpaceLink *info_new(const bContext *UNUSED(C))
 	
 	BLI_addtail(&sinfo->regionbase, ar);
 	ar->regiontype = RGN_TYPE_WINDOW;
+
+	/* toolbar */
+	ar = MEM_callocN(sizeof(ARegion), "tools for info");
 	
+	BLI_addtail(&sinfo->regionbase, ar);
+	ar->regiontype = RGN_TYPE_TOOLS;
+	ar->alignment = RGN_ALIGN_LEFT;
+	
+	ar->flag = RGN_FLAG_HIDDEN;
+
 	/* keep in sync with console */
 	ar->v2d.scroll |= (V2D_SCROLL_RIGHT);
 	ar->v2d.align |= V2D_ALIGN_NO_NEG_X | V2D_ALIGN_NO_NEG_Y; /* align bottom left */
@@ -133,6 +168,9 @@ static void info_main_area_init(wmWindowManager *wm, ARegion *ar)
 	UI_view2d_region_reinit(&ar->v2d, V2D_COMMONVIEW_CUSTOM, ar->winx, ar->winy);
 
 	/* own keymap */
+	keymap = WM_keymap_find(wm->defaultconf, "Info Generic", SPACE_INFO, 0);
+	WM_event_add_keymap_handler(&ar->handlers, keymap);
+
 	keymap = WM_keymap_find(wm->defaultconf, "Info", SPACE_INFO, 0);
 	WM_event_add_keymap_handler(&ar->handlers, keymap);
 }
@@ -206,6 +244,9 @@ static void info_operatortypes(void)
 	WM_operatortype_append(INFO_OT_report_replay);
 	WM_operatortype_append(INFO_OT_report_delete);
 	WM_operatortype_append(INFO_OT_report_copy);
+
+	/* info_toolbar.c */
+	WM_operatortype_append(INFO_OT_toolbar);
 }
 
 static void info_keymap(struct wmKeyConfig *keyconf)
@@ -214,10 +255,15 @@ static void info_keymap(struct wmKeyConfig *keyconf)
 	
 	WM_keymap_verify_item(keymap, "INFO_OT_reports_display_update", TIMERREPORT, KM_ANY, KM_ANY, 0);
 
+	/* Entire Editor only ----------------- */
+	keymap = WM_keymap_find(keyconf, "Info Generic", SPACE_INFO, 0);
+
+	WM_keymap_add_item(keymap, "INFO_OT_toolbar", TKEY, KM_PRESS, 0, 0);
+
+
 	/* info space */
 	keymap = WM_keymap_find(keyconf, "Info", SPACE_INFO, 0);
-	
-	
+
 	/* report selection */
 	WM_keymap_add_item(keymap, "INFO_OT_select_pick", SELECTMOUSE, KM_PRESS, 0, 0);
 	WM_keymap_add_item(keymap, "INFO_OT_select_all_toggle", AKEY, KM_PRESS, 0, 0);
@@ -286,6 +332,34 @@ static void info_header_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegi
 	
 }
 
+static void info_toolbar_listener(bScreen *UNUSED(sc), ScrArea *UNUSED(sa), ARegion *ar, wmNotifier *wmn)
+{
+	/* context changes */
+	switch (wmn->category) {
+		case NC_SPACE:
+			if (wmn->data == ND_SPACE_INFO)
+				ED_region_tag_redraw(ar);
+			break;
+	}
+}
+
+
+/* add handlers, stuff you only do once or on area/region changes */
+static void info_toolbar_area_init(wmWindowManager *wm, ARegion *ar)
+{
+	wmKeyMap *keymap;
+
+	ED_region_panels_init(wm, ar);
+
+	keymap = WM_keymap_find(wm->defaultconf, "Info Generic", SPACE_NODE, 0);
+	WM_event_add_keymap_handler(&ar->handlers, keymap);
+}
+
+static void info_toolbar_area_draw(const bContext *C, ARegion *ar)
+{
+	ED_region_panels(C, ar, 1, NULL, -1);
+}
+
 static void recent_files_menu_draw(const bContext *UNUSED(C), Menu *menu)
 {
 	struct RecentFile *recent;
@@ -337,7 +411,7 @@ void ED_spacetype_info(void)
 	/* regions: main window */
 	art = MEM_callocN(sizeof(ARegionType), "spacetype info region");
 	art->regionid = RGN_TYPE_WINDOW;
-	art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES;
+	art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_VIEW2D | ED_KEYMAP_VIEW2D | ED_KEYMAP_FRAMES;
 
 	art->init = info_main_area_init;
 	art->draw = info_main_area_draw;
@@ -358,6 +432,20 @@ void ED_spacetype_info(void)
 	BLI_addhead(&st->regiontypes, art);
 	
 	recent_files_menu_register();
+	
+	/* regions: toolbar */
+	art = MEM_callocN(sizeof(ARegionType), "spacetype info tools region");
+	art->regionid = RGN_TYPE_TOOLS;
+	art->prefsizex = 160;
+	art->prefsizey = 50;
+	art->keymapflag = ED_KEYMAP_UI | ED_KEYMAP_FRAMES;
+	art->listener = info_toolbar_listener;
+	art->init = info_toolbar_area_init;
+	art->draw = info_toolbar_area_draw;
+	
+	BLI_addhead(&st->regiontypes, art);
+	
+	info_toolbar_register(art);
 
 	BKE_spacetype_register(st);
 }




More information about the Bf-blender-cvs mailing list