Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCampbell Barton <ideasman42@gmail.com>2009-10-08 23:06:32 +0400
committerCampbell Barton <ideasman42@gmail.com>2009-10-08 23:06:32 +0400
commit5c867406aa66a1d89260c233a6bbc1a2a7912dbe (patch)
tree0cce14e7a49cb61b6114b69f457ca6a920db8de4 /source/blender
parent3ebd58673fb9a8c5ef13048b2e8e8a4cb7bb3a4e (diff)
menus are now global (like operators), so for eg, the info add menu and the 3D add menu can be shared.
Diffstat (limited to 'source/blender')
-rw-r--r--source/blender/blenkernel/BKE_screen.h6
-rw-r--r--source/blender/blenkernel/intern/screen.c27
-rw-r--r--source/blender/editors/include/UI_interface.h2
-rw-r--r--source/blender/editors/interface/interface_layout.c2
-rw-r--r--source/blender/editors/interface/interface_regions.c4
-rw-r--r--source/blender/editors/mesh/editmesh_mods.c2
-rw-r--r--source/blender/editors/object/object_add.c45
-rw-r--r--source/blender/editors/object/object_intern.h1
-rw-r--r--source/blender/editors/object/object_ops.c5
-rw-r--r--source/blender/editors/space_node/node_header.c2
-rw-r--r--source/blender/makesrna/intern/rna_ui.c17
-rw-r--r--source/blender/python/intern/bpy_operator.c2
-rw-r--r--source/blender/windowmanager/WM_api.h7
-rw-r--r--source/blender/windowmanager/intern/wm.c46
-rw-r--r--source/blender/windowmanager/intern/wm_init_exit.c1
-rw-r--r--source/blender/windowmanager/intern/wm_operators.c2
-rw-r--r--source/blender/windowmanager/intern/wm_window.c1
-rw-r--r--source/blender/windowmanager/wm_window.h1
18 files changed, 70 insertions, 103 deletions
diff --git a/source/blender/blenkernel/BKE_screen.h b/source/blender/blenkernel/BKE_screen.h
index 7c62c8c6dd4..39a90fe3074 100644
--- a/source/blender/blenkernel/BKE_screen.h
+++ b/source/blender/blenkernel/BKE_screen.h
@@ -138,9 +138,6 @@ typedef struct ARegionType {
/* header type definitions */
ListBase headertypes;
-
- /* menu type definitions */
- ListBase menutypes;
/* hardcoded constraints, smaller than these values region is not visible */
int minsizex, minsizey;
@@ -200,7 +197,6 @@ typedef struct MenuType {
char idname[BKE_ST_MAXNAME]; /* unique name */
char label[BKE_ST_MAXNAME]; /* for button text */
- int space_type;
/* verify if the menu should draw or not */
int (*poll)(const struct bContext *, struct MenuType *);
@@ -223,7 +219,7 @@ const struct ListBase *BKE_spacetypes_list(void);
void BKE_spacetype_register(struct SpaceType *st);
void BKE_spacetypes_free(void); /* only for quitting blender */
-MenuType *BKE_spacemenu_find(const char *idname, int spacetype);
+// MenuType *BKE_spacemenu_find(const char *idname, int spacetype);
/* spacedata */
void BKE_spacedata_freelist(ListBase *lb);
diff --git a/source/blender/blenkernel/intern/screen.c b/source/blender/blenkernel/intern/screen.c
index 3567de5df40..918a67311a0 100644
--- a/source/blender/blenkernel/intern/screen.c
+++ b/source/blender/blenkernel/intern/screen.c
@@ -70,13 +70,8 @@ static void spacetype_free(SpaceType *st)
if(ht->ext.free)
ht->ext.free(ht->ext.data);
- for(mt= art->menutypes.first; mt; mt= mt->next)
- if(mt->ext.free)
- mt->ext.free(mt->ext.data);
-
BLI_freelistN(&art->paneltypes);
BLI_freelistN(&art->headertypes);
- BLI_freelistN(&art->menutypes);
}
BLI_freelistN(&st->regiontypes);
@@ -343,25 +338,3 @@ unsigned int BKE_screen_visible_layers(bScreen *screen)
return layer;
}
-MenuType *BKE_spacemenu_find(const char *idname, int spacetype)
-{
- SpaceType *st= BKE_spacetype_from_id(spacetype);
- ARegionType *art;
- MenuType* mt;
-
- if(st==NULL) {
- printf("space type %d is invalid\n", spacetype);
- return NULL;
- }
-
- if(idname==NULL)
- return NULL;
-
- for(art= st->regiontypes.first; art; art= art->next)
- for(mt=art->menutypes.first; mt; mt=mt->next)
- if(strcmp(idname, mt->idname)==0)
- return mt;
-
- return NULL;
-}
-
diff --git a/source/blender/editors/include/UI_interface.h b/source/blender/editors/include/UI_interface.h
index 3c6ed1137ae..5766fcfdb1f 100644
--- a/source/blender/editors/include/UI_interface.h
+++ b/source/blender/editors/include/UI_interface.h
@@ -257,7 +257,7 @@ void uiPupMenuSaveOver(struct bContext *C, struct wmOperator *op, char *filename
void uiPupMenuNotice(struct bContext *C, char *str, ...);
void uiPupMenuError(struct bContext *C, char *str, ...);
void uiPupMenuReports(struct bContext *C, struct ReportList *reports);
-void uiPupMenuInvoke(struct bContext *C, const char *idname, int spacetype); /* popup registered menu */
+void uiPupMenuInvoke(struct bContext *C, const char *idname); /* popup registered menu */
/* Popup Blocks
*
diff --git a/source/blender/editors/interface/interface_layout.c b/source/blender/editors/interface/interface_layout.c
index eb81044852a..b0f93472240 100644
--- a/source/blender/editors/interface/interface_layout.c
+++ b/source/blender/editors/interface/interface_layout.c
@@ -1232,7 +1232,7 @@ void uiItemM(uiLayout *layout, bContext *C, char *name, int icon, char *menuname
{
MenuType *mt;
- mt= BKE_spacemenu_find(menuname, CTX_wm_area(C)->spacetype);
+ mt= WM_menutype_find(menuname, FALSE);
if(mt==NULL) {
printf("uiItemM: not found %s\n", menuname);
diff --git a/source/blender/editors/interface/interface_regions.c b/source/blender/editors/interface/interface_regions.c
index cdb62d0a4b4..c837599baf3 100644
--- a/source/blender/editors/interface/interface_regions.c
+++ b/source/blender/editors/interface/interface_regions.c
@@ -2481,12 +2481,12 @@ void uiPupMenuReports(bContext *C, ReportList *reports)
BLI_dynstr_free(ds);
}
-void uiPupMenuInvoke(bContext *C, const char *idname, int spacetype)
+void uiPupMenuInvoke(bContext *C, const char *idname)
{
uiPopupMenu *pup;
uiLayout *layout;
Menu menu;
- MenuType *mt= BKE_spacemenu_find(idname, spacetype);
+ MenuType *mt= WM_menutype_find(idname, TRUE);
if(mt==NULL) {
printf("uiPupMenuInvoke: named menu \"%s\" not found\n", idname);
diff --git a/source/blender/editors/mesh/editmesh_mods.c b/source/blender/editors/mesh/editmesh_mods.c
index 4669f7a6741..3c3cdf25d7b 100644
--- a/source/blender/editors/mesh/editmesh_mods.c
+++ b/source/blender/editors/mesh/editmesh_mods.c
@@ -119,7 +119,7 @@ void EM_select_mirrored(Object *obedit, EditMesh *em)
void EM_automerge(Scene *scene, Object *obedit, int update)
{
- Mesh *me= (Mesh*)obedit->data; /* can be NULL */
+ Mesh *me= obedit ? obedit->data : NULL; /* can be NULL */
int len;
if ((scene->toolsettings->automerge) &&
diff --git a/source/blender/editors/object/object_add.c b/source/blender/editors/object/object_add.c
index 780126852ed..c552a2954b7 100644
--- a/source/blender/editors/object/object_add.c
+++ b/source/blender/editors/object/object_add.c
@@ -686,51 +686,6 @@ void OBJECT_OT_lamp_add(wmOperatorType *ot)
RNA_def_enum(ot->srna, "type", lamp_type_items, 0, "Type", "");
}
-static int object_primitive_add_invoke(bContext *C, wmOperator *op, wmEvent *event)
-{
- uiPopupMenu *pup= uiPupMenuBegin(C, "Add Object", 0);
- uiLayout *layout= uiPupMenuLayout(pup);
-
- uiItemMenuEnumO(layout, "Mesh", ICON_OUTLINER_OB_MESH, "OBJECT_OT_mesh_add", "type");
- uiItemMenuEnumO(layout, "Curve", ICON_OUTLINER_OB_CURVE, "OBJECT_OT_curve_add", "type");
- uiItemMenuEnumO(layout, "Surface", ICON_OUTLINER_OB_SURFACE, "OBJECT_OT_surface_add", "type");
- uiItemMenuEnumO(layout, "Metaball", ICON_OUTLINER_OB_META, "OBJECT_OT_metaball_add", "type");
- uiItemO(layout, "Text", ICON_OUTLINER_OB_FONT, "OBJECT_OT_text_add");
- uiItemS(layout);
- uiItemO(layout, "Armature", ICON_OUTLINER_OB_ARMATURE, "OBJECT_OT_armature_add");
- uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_LATTICE, "OBJECT_OT_add", "type", OB_LATTICE);
- uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_EMPTY, "OBJECT_OT_add", "type", OB_EMPTY);
- uiItemS(layout);
- uiItemEnumO(layout, NULL, ICON_OUTLINER_OB_CAMERA, "OBJECT_OT_add", "type", OB_CAMERA);
- uiItemMenuEnumO(layout, "Lamp", ICON_OUTLINER_OB_LAMP, "OBJECT_OT_lamp_add", "type");
- uiItemS(layout);
- uiItemMenuEnumO(layout, "Force Field", ICON_OUTLINER_OB_EMPTY, "OBJECT_OT_effector_add", "type");
- uiItemS(layout);
- uiItemMenuEnumO(layout, "Group Instance", ICON_OUTLINER_OB_EMPTY, "OBJECT_OT_group_instance_add", "type");
-
- uiPupMenuEnd(C, pup);
-
- /* this operator is only for a menu, not used further */
- return OPERATOR_CANCELLED;
-}
-
-/* only used as menu */
-void OBJECT_OT_primitive_add(wmOperatorType *ot)
-{
- /* identifiers */
- ot->name= "Add Primitive";
- ot->description = "Add a primitive object.";
- ot->idname= "OBJECT_OT_primitive_add";
-
- /* api callbacks */
- ot->invoke= object_primitive_add_invoke;
-
- ot->poll= ED_operator_scene_editable;
-
- /* flags */
- ot->flag= 0;
-}
-
/* add dupligroup */
static EnumPropertyItem *add_dupligroup_itemf(bContext *C, PointerRNA *ptr, int *free)
{
diff --git a/source/blender/editors/object/object_intern.h b/source/blender/editors/object/object_intern.h
index 1a7d3841aaa..353622526d3 100644
--- a/source/blender/editors/object/object_intern.h
+++ b/source/blender/editors/object/object_intern.h
@@ -90,7 +90,6 @@ void OBJECT_OT_metaball_add(struct wmOperatorType *ot);
void OBJECT_OT_text_add(struct wmOperatorType *ot);
void OBJECT_OT_armature_add(struct wmOperatorType *ot);
void OBJECT_OT_lamp_add(struct wmOperatorType *ot);
-void OBJECT_OT_primitive_add(struct wmOperatorType *ot); /* only used as menu */
void OBJECT_OT_effector_add(struct wmOperatorType *ot);
void OBJECT_OT_group_instance_add(struct wmOperatorType *ot);
diff --git a/source/blender/editors/object/object_ops.c b/source/blender/editors/object/object_ops.c
index f2f24c099bc..d75cf63c1d4 100644
--- a/source/blender/editors/object/object_ops.c
+++ b/source/blender/editors/object/object_ops.c
@@ -119,7 +119,6 @@ void ED_operatortypes_object(void)
WM_operatortype_append(OBJECT_OT_add);
WM_operatortype_append(OBJECT_OT_effector_add);
WM_operatortype_append(OBJECT_OT_group_instance_add);
- WM_operatortype_append(OBJECT_OT_primitive_add);
WM_operatortype_append(OBJECT_OT_mesh_add);
WM_operatortype_append(OBJECT_OT_metaball_add);
WM_operatortype_append(OBJECT_OT_duplicates_make_real);
@@ -247,7 +246,9 @@ void ED_keymap_object(wmKeyConfig *keyconf)
WM_keymap_add_item(keymap, "OBJECT_OT_delete", XKEY, KM_PRESS, 0, 0);
WM_keymap_add_item(keymap, "OBJECT_OT_delete", DELKEY, KM_PRESS, 0, 0);
- WM_keymap_verify_item(keymap, "OBJECT_OT_primitive_add", AKEY, KM_PRESS, KM_SHIFT, 0);
+ kmi= WM_keymap_add_item(keymap, "WM_OT_call_menu", AKEY, KM_PRESS, KM_SHIFT, 0);
+ RNA_string_set(kmi->ptr, "name", "INFO_MT_add");
+
WM_keymap_add_item(keymap, "OBJECT_OT_duplicate_move", DKEY, KM_PRESS, KM_SHIFT, 0);
RNA_boolean_set(WM_keymap_add_item(keymap, "OBJECT_OT_duplicate", DKEY, KM_PRESS, KM_ALT, 0)->ptr, "linked", 1);
WM_keymap_add_item(keymap, "OBJECT_OT_join", JKEY, KM_PRESS, KM_CTRL, 0);
diff --git a/source/blender/editors/space_node/node_header.c b/source/blender/editors/space_node/node_header.c
index 2abcd2f2135..a0eae40f579 100644
--- a/source/blender/editors/space_node/node_header.c
+++ b/source/blender/editors/space_node/node_header.c
@@ -199,7 +199,7 @@ void node_menus_register(ARegionType *art)
strcpy(mt->idname, "NODE_MT_add");
strcpy(mt->label, "Add");
mt->draw= node_menu_add;
- BLI_addtail(&art->menutypes, mt);
+ WM_menutype_add(mt);
}
#if 0
diff --git a/source/blender/makesrna/intern/rna_ui.c b/source/blender/makesrna/intern/rna_ui.c
index 1a1172247fc..a1b412c70f4 100644
--- a/source/blender/makesrna/intern/rna_ui.c
+++ b/source/blender/makesrna/intern/rna_ui.c
@@ -348,12 +348,11 @@ static void rna_Menu_unregister(const bContext *C, StructRNA *type)
if(!mt)
return;
- if(!(art=region_type_find(NULL, mt->space_type, RGN_TYPE_HEADER)))
- return;
RNA_struct_free_extension(type, &mt->ext);
- BLI_freelinkN(&art->menutypes, mt);
+ WM_menutype_freelink(mt);
+
RNA_struct_free(&BLENDER_RNA, type);
/* update while blender is running */
@@ -376,12 +375,9 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void
/* validate the python class */
if(validate(&dummymtr, data, have_function) != 0)
return NULL;
-
- if(!(art=region_type_find(reports, dummymt.space_type, RGN_TYPE_HEADER)))
- return NULL;
/* check if we have registered this menu type before, and remove it */
- mt= BKE_spacemenu_find(dummymt.idname, dummymt.space_type);
+ mt= WM_menutype_find(dummymt.idname, TRUE);
if(mt && mt->ext.srna)
rna_Menu_unregister(C, mt->ext.srna);
@@ -398,7 +394,7 @@ static StructRNA *rna_Menu_register(const bContext *C, ReportList *reports, void
mt->poll= (have_function[0])? menu_poll: NULL;
mt->draw= (have_function[1])? menu_draw: NULL;
- BLI_addtail(&art->menutypes, mt);
+ WM_menutype_add(mt);
/* update while blender is running */
if(C)
@@ -734,11 +730,6 @@ static void rna_def_menu(BlenderRNA *brna)
RNA_def_property_string_sdna(prop, NULL, "type->label");
RNA_def_property_flag(prop, PROP_REGISTER);
- prop= RNA_def_property(srna, "space_type", PROP_ENUM, PROP_NONE);
- RNA_def_property_enum_sdna(prop, NULL, "type->space_type");
- RNA_def_property_enum_items(prop, space_type_items);
- RNA_def_property_flag(prop, PROP_REGISTER);
-
RNA_define_verify_sdna(1);
}
diff --git a/source/blender/python/intern/bpy_operator.c b/source/blender/python/intern/bpy_operator.c
index 301204d3e2b..87752ca9c58 100644
--- a/source/blender/python/intern/bpy_operator.c
+++ b/source/blender/python/intern/bpy_operator.c
@@ -94,7 +94,7 @@ static PyObject *pyop_call( PyObject * self, PyObject * args)
char *report_str= BKE_reports_string(reports, 0); /* all reports */
if(report_str) {
- PySys_WriteStdout(report_str);
+ PySys_WriteStdout("%s\n", report_str);
MEM_freeN(report_str);
}
}
diff --git a/source/blender/windowmanager/WM_api.h b/source/blender/windowmanager/WM_api.h
index b29dbec6364..eaf8b00163c 100644
--- a/source/blender/windowmanager/WM_api.h
+++ b/source/blender/windowmanager/WM_api.h
@@ -41,6 +41,7 @@ struct wmNotifier;
struct rcti;
struct PointerRNA;
struct EnumPropertyItem;
+struct MenuType;
typedef struct wmJob wmJob;
@@ -187,6 +188,12 @@ char *WM_operator_pystring(struct bContext *C, struct wmOperatorType *ot, struc
void WM_operator_bl_idname(char *to, const char *from);
void WM_operator_py_idname(char *to, const char *from);
+/* *************** menu types ******************** */
+struct MenuType *WM_menutype_find(const char *idname, int quiet);
+int WM_menutype_add(struct MenuType* mt);
+void WM_menutype_freelink(struct MenuType* mt);
+void WM_menutype_free(void);
+
/* default operator callbacks for border/circle/lasso */
int WM_border_select_invoke (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
int WM_border_select_modal (struct bContext *C, struct wmOperator *op, struct wmEvent *event);
diff --git a/source/blender/windowmanager/intern/wm.c b/source/blender/windowmanager/intern/wm.c
index a068f84ae29..dbb8fc400c0 100644
--- a/source/blender/windowmanager/intern/wm.c
+++ b/source/blender/windowmanager/intern/wm.c
@@ -26,6 +26,8 @@
* ***** END GPL LICENSE BLOCK *****
*/
+#include "string.h"
+
#include "DNA_windowmanager_types.h"
#include "MEM_guardedalloc.h"
@@ -39,6 +41,7 @@
#include "BKE_idprop.h"
#include "BKE_library.h"
#include "BKE_main.h"
+#include "BKE_screen.h"
#include "BKE_report.h"
#include "WM_api.h"
@@ -128,6 +131,49 @@ void WM_operator_stack_clear(bContext *C)
/* ****************************************** */
+static ListBase menutypes = {NULL, NULL}; /* global menutype list */
+
+MenuType *WM_menutype_find(const char *idname, int quiet)
+{
+ MenuType* mt;
+
+ if (idname[0]) {
+ for(mt=menutypes.first; mt; mt=mt->next)
+ if(strcmp(idname, mt->idname)==0)
+ return mt;
+ }
+
+ if(!quiet)
+ printf("search for unknown menutype %s\n", idname);
+
+ return NULL;
+}
+
+int WM_menutype_add(MenuType* mt)
+{
+ BLI_addtail(&menutypes, mt);
+ return 1;
+}
+
+void WM_menutype_freelink(MenuType* mt)
+{
+ BLI_freelinkN(&menutypes, mt);
+}
+
+void WM_menutype_free(void)
+{
+ MenuType* mt;
+
+ for(mt= menutypes.first; mt; mt= mt->next) {
+ if(mt->ext.free) {
+ mt->ext.free(mt->ext.data);
+ }
+ WM_menutype_freelink(mt);
+ }
+}
+
+/* ****************************************** */
+
void WM_keymap_init(bContext *C)
{
wmWindowManager *wm= CTX_wm_manager(C);
diff --git a/source/blender/windowmanager/intern/wm_init_exit.c b/source/blender/windowmanager/intern/wm_init_exit.c
index 490ef12a523..2e456669cb1 100644
--- a/source/blender/windowmanager/intern/wm_init_exit.c
+++ b/source/blender/windowmanager/intern/wm_init_exit.c
@@ -195,6 +195,7 @@ void WM_exit(bContext *C)
}
}
wm_operatortype_free();
+ WM_menutype_free();
/* all non-screen and non-space stuff editors did, like editmode */
if(C)
diff --git a/source/blender/windowmanager/intern/wm_operators.c b/source/blender/windowmanager/intern/wm_operators.c
index a92fcee48e2..915f4c80663 100644
--- a/source/blender/windowmanager/intern/wm_operators.c
+++ b/source/blender/windowmanager/intern/wm_operators.c
@@ -783,7 +783,7 @@ static int wm_call_menu_invoke(bContext *C, wmOperator *op, wmEvent *event)
char idname[BKE_ST_MAXNAME];
RNA_string_get(op->ptr, "name", idname);
- uiPupMenuInvoke(C, idname, CTX_wm_area(C)->spacetype);
+ uiPupMenuInvoke(C, idname);
return OPERATOR_CANCELLED;
}
diff --git a/source/blender/windowmanager/intern/wm_window.c b/source/blender/windowmanager/intern/wm_window.c
index 44b7b60e451..f7116a2bd1f 100644
--- a/source/blender/windowmanager/intern/wm_window.c
+++ b/source/blender/windowmanager/intern/wm_window.c
@@ -68,7 +68,6 @@ GHOST_SystemHandle g_system= NULL;
/* set by commandline */
static int prefsizx= 0, prefsizy= 0, prefstax= 0, prefstay= 0;
-
/* ******** win open & close ************ */
/* XXX this one should correctly check for apple top header...
diff --git a/source/blender/windowmanager/wm_window.h b/source/blender/windowmanager/wm_window.h
index f159f7f098d..44c31e7cb69 100644
--- a/source/blender/windowmanager/wm_window.h
+++ b/source/blender/windowmanager/wm_window.h
@@ -62,6 +62,5 @@ void wm_window_testbreak (void);
int wm_window_duplicate_op (bContext *C, wmOperator *op);
int wm_window_fullscreen_toggle_op(bContext *C, wmOperator *op);
-
#endif /* WM_WINDOW_H */