[Bf-blender-cvs] [fba08b9] pie-menus: Pie Menus:

Antony Riakiotakis noreply at git.blender.org
Mon Jun 30 19:57:44 CEST 2014


Commit: fba08b9092c95427b051478b19308d6731b0d4b4
Author: Antony Riakiotakis
Date:   Mon Jun 30 19:10:05 2014 +0300
https://developer.blender.org/rBfba08b9092c95427b051478b19308d6731b0d4b4

Pie Menus:

Add code to force a certain pie menu to be in hold style interaction
mode always. This is useful for tap/hold operator/pie menus

Move operator enum operator in C, this allows us to fire it up
internally without resorting to operators.

Deleted python code for this since it's not used and it's really easy to
code. May do if scripters want though.

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

M	release/scripts/modules/bpy_types.py
M	release/scripts/startup/bl_operators/wm.py
M	release/scripts/startup/bl_ui/space_view3d.py
M	source/blender/editors/include/UI_interface.h
M	source/blender/editors/interface/interface_intern.h
M	source/blender/editors/interface/interface_regions.c
M	source/blender/editors/object/object_ops.c
M	source/blender/makesrna/intern/rna_wm_api.c
M	source/blender/windowmanager/WM_api.h
M	source/blender/windowmanager/intern/wm_event_system.c
M	source/blender/windowmanager/intern/wm_operators.c
M	source/blenderplayer/bad_level_call_stubs/stubs.c

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

diff --git a/release/scripts/modules/bpy_types.py b/release/scripts/modules/bpy_types.py
index cf1e000..f43df91 100644
--- a/release/scripts/modules/bpy_types.py
+++ b/release/scripts/modules/bpy_types.py
@@ -140,9 +140,9 @@ class WindowManager(bpy_types.ID):
         finally:
             self.pupmenu_end__internal(popup)
 
-    def menu_pie(self, event, draw_func, title="", icon='NONE'):
+    def menu_pie(self, event, draw_func, title="", icon='NONE', force_hold=False):
         import bpy
-        pie = self.piemenu_begin__internal(title, icon, event)
+        pie = self.piemenu_begin__internal(title, icon, event, force_hold)
 
         try:
             draw_func(pie, bpy.context)
diff --git a/release/scripts/startup/bl_operators/wm.py b/release/scripts/startup/bl_operators/wm.py
index 0b39739..4e0843a 100644
--- a/release/scripts/startup/bl_operators/wm.py
+++ b/release/scripts/startup/bl_operators/wm.py
@@ -529,34 +529,6 @@ class WM_OT_context_menu_enum(Operator):
         
         return {'FINISHED'}
 
-class WM_OT_context_operator_pie_enum(Operator):
-    bl_idname = "wm.context_operator_pie_enum"
-    bl_label = "Operator Enum Pie"
-    bl_options = {'UNDO', 'INTERNAL'}
-    name = StringProperty(
-            "Operator Name",
-            )
-    property = StringProperty(
-            "Property Name",
-            )
-    title = StringProperty(
-            name="Title",
-            description="Pie Menu Title",
-            maxlen=1024,
-            )
-
-    def invoke(self, context, event):
-        op_idname = self.name
-        property = self.property
-
-        def draw_cb(self, context):
-            layout = self.layout
-            layout.operator_enum(op_idname, property)
-
-        context.window_manager.menu_pie(draw_func=draw_cb, title=self.title, event=event)
-
-        return {'FINISHED'}
-
 
 class WM_OT_context_pie_enum(Operator):
     bl_idname = "wm.context_pie_enum"
diff --git a/release/scripts/startup/bl_ui/space_view3d.py b/release/scripts/startup/bl_ui/space_view3d.py
index eea6604..386d3f2 100644
--- a/release/scripts/startup/bl_ui/space_view3d.py
+++ b/release/scripts/startup/bl_ui/space_view3d.py
@@ -1421,15 +1421,6 @@ class VIEW3D_PIE_view(Menu):
         pie.operator_enum("VIEW3D_OT_viewnumpad", "type")
         pie.operator("VIEW3D_OT_view_persportho", text="Persp/Ortho", icon='RESTRICT_VIEW_OFF')
 
-class VIEW3D_PIE_object(Menu):
-    bl_label = "Mode"
-
-    def draw(self, context):
-        layout = self.layout
-
-        pie = layout.menu_pie()
-        pie.operator_enum("OBJECT_OT_mode_set", "mode")
-
 
 class VIEW3D_PIE_shade(Menu):
     bl_label = "Shade"
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 92b8147..5e3e734 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -358,8 +358,10 @@ bool uiPupMenuInvoke(struct bContext *C, const char *idname, struct ReportList *
 /* Pie menus */
 typedef struct uiPieMenu uiPieMenu;
 
-void uiPieMenuInvoke(struct bContext *C, const char *idname, const struct wmEvent *event);
-uiPieMenu *uiPieMenuBegin(struct bContext *C, const char *title, int icon, const struct wmEvent *event) ATTR_NONNULL();
+void uiPieMenuInvoke(struct bContext *C, const char *idname, const struct wmEvent *event, bool force_hold);
+void uiPieOperatorEnumInvoke(struct bContext *C, const char *title, const char *opname,
+                             const char *propname, const struct wmEvent *event, bool force_hold);
+uiPieMenu *uiPieMenuBegin(struct bContext *C, const char *title, int icon, const struct wmEvent *event, bool force_hold) ATTR_NONNULL();
 void uiPieMenuEnd(struct bContext *C, uiPieMenu *pie);
 struct uiLayout *uiPieMenuLayout(struct uiPieMenu *pie);
 /* Popup Blocks
diff --git a/source/blender/editors/interface/interface_intern.h b/source/blender/editors/interface/interface_intern.h
index 52ba3e6..3114026 100644
--- a/source/blender/editors/interface/interface_intern.h
+++ b/source/blender/editors/interface/interface_intern.h
@@ -165,7 +165,8 @@ typedef enum RadialDirection {
 #define UI_PIE_INVALID_DIR         (1 << 3) /* mouse not far enough from center position  */
 #define UI_PIE_CANCELLED           (1 << 4) /* pie menu cancelled but we still wait for a release event  */
 #define UI_PIE_CLICK_STYLE         (1 << 5) /* pie menu changed to click style, click to confirm  */
-#define UI_PIE_ANIMATION_FINISHED  (1 << 6) /* pie animation finished, do not calculate any more motio  */
+#define UI_PIE_FORCE_HOLD_STYLE    (1 << 6) /* pie menu forced to hold style. Usually for operators  */
+#define UI_PIE_ANIMATION_FINISHED  (1 << 7) /* pie animation finished, do not calculate any more motio  */
 
 typedef struct uiLinkLine {  /* only for draw/edit */
 	struct uiLinkLine *next, *prev;
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index d1ca362..81f9c3b 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -2661,7 +2661,7 @@ static float uiPieTitleWidth(const char *name, int icon)
 		        (UI_UNIT_X * (1.50f + (icon ? 0.25f : 0.0f)));
 }
 
-struct uiPieMenu *uiPieMenuBegin(struct bContext *C, const char *title, int icon, const wmEvent *event)
+struct uiPieMenu *uiPieMenuBegin(struct bContext *C, const char *title, int icon, const wmEvent *event, bool force_hold)
 {
 	uiStyle *style = UI_GetStyleDraw();
 	uiPieMenu *pie = MEM_callocN(sizeof(uiPopupMenu), "pie menu");
@@ -2673,6 +2673,8 @@ struct uiPieMenu *uiPieMenuBegin(struct bContext *C, const char *title, int icon
 	pie->block_radial->puphash = ui_popup_menu_hash(title);
 	pie->block_radial->flag |= UI_BLOCK_RADIAL;
 	pie->block_radial->pie_data.event = event->type;
+	if (force_hold)
+		pie->block_radial->pie_data.flags |= UI_PIE_FORCE_HOLD_STYLE;
 
 	pie->layout = uiBlockLayout(pie->block_radial, UI_LAYOUT_VERTICAL, UI_LAYOUT_PIEMENU, 0, 0, 200, 0, 0, style);
 	pie->mx = event->x;
@@ -2717,7 +2719,7 @@ uiLayout *uiPieMenuLayout(uiPieMenu *pie)
 	return pie->layout;
 }
 
-void uiPieMenuInvoke(struct bContext *C, const char *idname, const wmEvent *event)
+void uiPieMenuInvoke(struct bContext *C, const char *idname, const wmEvent *event, bool force_hold)
 {
 	uiPieMenu *pie;
 	uiLayout *layout;
@@ -2732,7 +2734,7 @@ void uiPieMenuInvoke(struct bContext *C, const char *idname, const wmEvent *even
 	if (mt->poll && mt->poll(C, mt) == 0)
 		return;
 
-	pie = uiPieMenuBegin(C, IFACE_(mt->label), ICON_NONE, event);
+	pie = uiPieMenuBegin(C, IFACE_(mt->label), ICON_NONE, event, force_hold);
 	layout = uiPieMenuLayout(pie);
 
 	menu.layout = layout;
@@ -2748,6 +2750,21 @@ void uiPieMenuInvoke(struct bContext *C, const char *idname, const wmEvent *even
 }
 
 
+void uiPieOperatorEnumInvoke(struct bContext *C, const char *title, const char *opname,
+                             const char *propname, const wmEvent *event, bool force_hold)
+{
+	uiPieMenu *pie;
+	uiLayout *layout;
+
+	pie = uiPieMenuBegin(C, IFACE_(title), ICON_NONE, event, force_hold);
+	layout = uiPieMenuLayout(pie);
+
+	layout = uiLayoutRadial(layout);
+	uiItemsEnumO(layout, opname, propname);
+
+	uiPieMenuEnd(C, pie);
+}
+
 /*************************** Standard Popup Menus ****************************/
 
 void uiPupMenuReports(bContext *C, ReportList *reports)
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index f1b9bd6..b9ea191 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -273,9 +273,10 @@ void ED_operatormacros_object(void)
 		RNA_enum_set(otmacro->ptr, "proportional", PROP_EDIT_OFF);
 	}
 
-	ptr = WM_operator_pie_macro("OBJECT_OT_pie_mode_set", "Set Mode",
-	                            "Set the mode of interaction for the selected object",
-	                            OPTYPE_UNDO | OPTYPE_REGISTER, "OBJECT_OT_mode_set", "VIEW3D_PIE_object");
+	ptr = WM_operator_enum_pie_macro("OBJECT_OT_pie_mode_set", "Set Mode",
+	                                 "Set the mode of interaction for the selected object",
+	                                  OPTYPE_UNDO | OPTYPE_REGISTER, "Interaction Mode",
+	                                 "OBJECT_OT_mode_set", "mode");
 
 	if (ptr) {
 		RNA_enum_set(ptr, "mode", OB_MODE_EDIT);
diff --git a/source/blender/makesrna/intern/rna_wm_api.c b/source/blender/makesrna/intern/rna_wm_api.c
index 7d49952..fbd4e9f 100644
--- a/source/blender/makesrna/intern/rna_wm_api.c
+++ b/source/blender/makesrna/intern/rna_wm_api.c
@@ -311,12 +311,12 @@ static void rna_PupMenuEnd(bContext *C, PointerRNA *handle)
 }
 
 /* pie menu wrapper */
-static PointerRNA rna_PieMenuBegin(bContext *C, const char *title, int icon, PointerRNA *event)
+static PointerRNA rna_PieMenuBegin(bContext *C, const char *title, int icon, PointerRNA *event, int force_hold)
 {
 	PointerRNA r_ptr;
 	void *data;
 
-	data = (void *)uiPieMenuBegin(C, title, icon, event->data);
+	data = (void *)uiPieMenuBegin(C, title, icon, event->data, force_hold);
 
 	RNA_pointer_create(NULL, &RNA_UIPieMenu, data, &r_ptr);
 
@@ -489,6 +489,8 @@ void RNA_api_wm(StructRNA *srna)
 	RNA_def_property_enum_items(parm, icon_items);
 	parm = RNA_def_pointer(func, "event", "Event", "", "");
 	RNA_def_property_flag(parm, PROP_RNAPTR | PROP_NEVER_NULL);
+	parm = RNA_def_property(func, "force_hold", PROP_BOOLEAN, PROP_NONE);
+	RNA_def_property_boolean_default(parm, 0);
 	/* return */
 	parm = RNA_def_pointer(func, "menu_pie", "UIPieMenu", "", "");
 	RNA_def_property_flag(parm, PROP_RNAPTR | PROP_NEVER_NULL);
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index 5dbf8b0..eb92918 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -271,6 +271,8 @@ bool        WM_operator_last_properties_store(struct wmOperator *op);
 
 struct PointerRNA *WM_operator_pie_macro(const char *idname, const char *name, const char *description,
                                          int flag, const char *opname, const char *piename);
+struct PointerRNA *WM_operator_enum_

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list