[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