[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [59298] branches/soc-2013-ui_replay/source /blender: Added drop handler to the menubar.

Vincent Akkermans vincent at ack-err.net
Mon Aug 19 15:41:05 CEST 2013


Revision: 59298
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=59298
Author:   ack-err
Date:     2013-08-19 13:41:05 +0000 (Mon, 19 Aug 2013)
Log Message:
-----------
Added drop handler to the menubar. This makes it possible to drag any operator button to the custom menubar.

Modified Paths:
--------------
    branches/soc-2013-ui_replay/source/blender/editors/space_view3d/space_view3d.c
    branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_operators.c

Modified: branches/soc-2013-ui_replay/source/blender/editors/space_view3d/space_view3d.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/editors/space_view3d/space_view3d.c	2013-08-19 13:35:52 UTC (rev 59297)
+++ branches/soc-2013-ui_replay/source/blender/editors/space_view3d/space_view3d.c	2013-08-19 13:41:05 UTC (rev 59298)
@@ -302,7 +302,6 @@
 	BLI_addtail(&v3d->regionbase, ar);
 	ar->regiontype = RGN_TYPE_TOOLS;
 	ar->alignment = RGN_ALIGN_LEFT;
-	//ar->flag = RGN_FLAG_HIDDEN;
 	
 	/* operators menubar  */
 	ar = MEM_callocN(sizeof(ARegion), "tool operators menu bar for view3d");
@@ -598,6 +597,23 @@
 }
 
 
+static void view3d_menubar_drop_copy(wmDrag *drag, wmDropBox *drop)
+{
+	wmOperatorType *ot = (wmOperatorType*)drag->poin;
+	RNA_string_set(drop->ptr, "idname", ot->idname);
+}
+
+static int view3d_menubar_drop_poll(bContext *UNUSED(C), wmDrag *drag, const wmEvent *UNUSED(event))
+{
+	wmOperatorType *ot = (wmOperatorType*)drag->poin;
+
+	if (drag->type == WM_DRAG_OP && ot) {
+		return 1;
+	}
+	return 0;
+}
+
+
 /* region dropbox definition */
 static void view3d_dropboxes(void)
 {
@@ -609,6 +625,10 @@
 	WM_dropbox_add(lb, "OBJECT_OT_drop_named_image", view3d_ima_empty_drop_poll, view3d_id_path_drop_copy);
 	WM_dropbox_add(lb, "VIEW3D_OT_background_image_add", view3d_ima_bg_drop_poll, view3d_id_path_drop_copy);
 	WM_dropbox_add(lb, "OBJECT_OT_group_instance_add", view3d_group_drop_poll, view3d_group_drop_copy);
+	
+	lb = WM_dropboxmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_MENU_BAR);
+
+	WM_dropbox_add(lb, "WM_OT_menubar_add_dragged_operator", view3d_menubar_drop_poll, view3d_menubar_drop_copy);
 }
 
 
@@ -1043,12 +1063,16 @@
 /* add handlers, stuff you only do once or on area/region changes */
 static void view3d_tools_area_init(wmWindowManager *wm, ARegion *ar)
 {
+	ListBase *lb;
 	wmKeyMap *keymap;
 	
 	ED_region_panels_init(wm, ar);
 
 	keymap = WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0);
 	WM_event_add_keymap_handler(&ar->handlers, keymap);
+	
+	lb = WM_dropboxmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_TOOLS);
+	WM_event_add_dropbox_handler(&ar->handlers, lb);
 }
 
 static void view3d_tools_area_draw(const bContext *C, ARegion *ar)
@@ -1058,12 +1082,16 @@
 
 static void view3d_menubar_area_init(wmWindowManager *wm, ARegion *ar)
 {
+	ListBase *lb;
 	wmKeyMap *keymap;
 
 	ED_region_menubar_init(ar);
 	
 	keymap = WM_keymap_find(wm->defaultconf, "3D View Generic", SPACE_VIEW3D, 0);
 	WM_event_add_keymap_handler(&ar->handlers, keymap);
+	
+	lb = WM_dropboxmap_find("View3D", SPACE_VIEW3D, RGN_TYPE_MENU_BAR);
+	WM_event_add_dropbox_handler(&ar->handlers, lb);
 }
 
 static void view3d_menubar_area_draw(const bContext *C, ARegion *ar)

Modified: branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_operators.c
===================================================================
--- branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_operators.c	2013-08-19 13:35:52 UTC (rev 59297)
+++ branches/soc-2013-ui_replay/source/blender/windowmanager/intern/wm_operators.c	2013-08-19 13:41:05 UTC (rev 59298)
@@ -4371,8 +4371,52 @@
 	
 }
 
+static int wm_menubar_add_dragged_operator_exec(bContext *C, wmOperator *op)
+{
+	// get operator properties: paneltype idname, property name
+	PropertyRNA *prop;
+	char *idname = NULL;
+	ScrArea *sa = CTX_wm_area(C);
+	ARegion *ar = BKE_area_find_region_type(sa, RGN_TYPE_MENU_BAR);
+	wmOperatorType *ot;
 
+	if (ar == NULL) return OPERATOR_CANCELLED;
+	
+	prop = RNA_struct_find_property(op->ptr, "idname");
+	if(prop == NULL) return OPERATOR_CANCELLED;
+	idname = RNA_property_string_get_alloc(op->ptr, prop, NULL, 0, NULL);
+	
+	ot = WM_operatortype_find(idname, 1);
+	
+	add_to_icon_shelf(C, ot, NULL);
+	
+	MEM_freeN(idname);
+	
+	ED_region_tag_redraw(ar);
+	
+	return OPERATOR_FINISHED;
+}
 
+static int wm_menubar_add_dragged_operator_poll(bContext *UNUSED(C))
+{
+	return 1;
+}
+
+static void WM_OT_menubar_add_dragged_operator(wmOperatorType *ot)
+{
+	ot->name = "Add Operator to Menubar";
+	ot->idname = "WM_OT_menubar_add_dragged_operator";
+	ot->description = "Add the dragged operator to the current menubar";
+	
+	ot->exec = wm_menubar_add_dragged_operator_exec;
+	ot->poll = wm_menubar_add_dragged_operator_poll;
+	
+	ot->flag = OPTYPE_INTERNAL;
+	
+	RNA_def_string(ot->srna, "idname", "", MAX_NAME, "Operator Name", "The name of the operator to add");
+}
+
+
 /* ******************************************************* */
 /* called on initialize WM_exit() */
 void wm_operatortype_free(void)
@@ -4414,6 +4458,7 @@
 	WM_operatortype_append(WM_OT_ndof_sensitivity_change);
 	WM_operatortype_append(WM_OT_create_custom_panel);
 	WM_operatortype_append(WM_OT_add_to_custom_panel);
+	WM_operatortype_append(WM_OT_menubar_add_dragged_operator);
 #if defined(WIN32)
 	WM_operatortype_append(WM_OT_console_toggle);
 #endif




More information about the Bf-blender-cvs mailing list