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:
Diffstat (limited to 'source/blender/src/toolbox.c')
-rw-r--r--source/blender/src/toolbox.c103
1 files changed, 70 insertions, 33 deletions
diff --git a/source/blender/src/toolbox.c b/source/blender/src/toolbox.c
index 6238d253d35..82839fcdeb9 100644
--- a/source/blender/src/toolbox.c
+++ b/source/blender/src/toolbox.c
@@ -55,10 +55,11 @@
#include "BIF_language.h"
#include "BIF_resources.h"
+#include "DNA_group_types.h"
#include "DNA_image_types.h"
-#include "DNA_object_types.h"
-#include "DNA_mesh_types.h"
#include "DNA_lamp_types.h"
+#include "DNA_mesh_types.h"
+#include "DNA_object_types.h"
#include "DNA_screen_types.h"
#include "DNA_scene_types.h"
#include "DNA_userdef_types.h"
@@ -67,13 +68,14 @@
#include "BLI_blenlib.h"
#include "BLI_arithb.h"
-#include "BKE_depsgraph.h"
-#include "BKE_plugin_types.h"
-#include "BKE_utildefines.h"
-#include "BKE_mesh.h"
#include "BKE_displist.h"
+#include "BKE_depsgraph.h"
#include "BKE_global.h"
+#include "BKE_library.h"
+#include "BKE_mesh.h"
#include "BKE_main.h"
+#include "BKE_plugin_types.h"
+#include "BKE_utildefines.h"
#include "BIF_editnla.h"
#include "BIF_editarmature.h"
@@ -2241,6 +2243,10 @@ static TBitem addmenu_armature[]= {
{ 0, "Bone", 8, NULL},
{ -1, "", 0, do_info_addmenu}};
+/* dynamic items */
+#define TB_ADD_GROUP 6
+#define TB_ADD_LAMP 9
+
static TBitem tb_add[]= {
{ 0, "Mesh", 0, addmenu_mesh},
{ 0, "Curve", 1, addmenu_curve},
@@ -2248,6 +2254,7 @@ static TBitem tb_add[]= {
{ 0, "Meta", 3, addmenu_meta},
{ 0, "Text", 4, NULL},
{ 0, "Empty", 5, NULL},
+{ 0, "Group", 10, NULL},
{ 0, "SEPR", 0, NULL},
{ 0, "Camera", 6, NULL},
{ 0, "Lamp", 7, addmenu_lamp},
@@ -2256,21 +2263,6 @@ static TBitem tb_add[]= {
{ 0, "Lattice", 9, NULL},
{ -1, "", 0, do_info_addmenu}};
-static TBitem tb_add_YF[]= {
-{ 0, "Mesh", 0, addmenu_mesh},
-{ 0, "Curve", 1, addmenu_curve},
-{ 0, "Surface", 2, addmenu_surf},
-{ 0, "Meta", 3, addmenu_meta},
-{ 0, "Text", 4, NULL},
-{ 0, "Empty", 5, NULL},
-{ 0, "SEPR", 0, NULL},
-{ 0, "Camera", 6, NULL},
-{ 0, "Lamp", 7, addmenu_YF_lamp},
-{ 0, "SEPR", 0, NULL},
-{ 0, "Armature", 8, NULL},
-{ 0, "Lattice", 9, NULL},
-{ -1, "", 0, do_info_addmenu}};
-
static TBitem tb_empty[]= {
{ 0, "Nothing...", 0, NULL},
{ -1, "", 0, NULL}};
@@ -2361,13 +2353,57 @@ static void store_main(void *arg1, void *arg2)
tb_mainy= (int)arg2;
}
+static void do_group_addmenu(void *arg, int event)
+{
+ Object *ob;
+
+ add_object_draw(OB_EMPTY);
+ ob= OBACT;
+
+ ob->dup_group= BLI_findlink(&G.main->group, event);
+ if(ob->dup_group) {
+ id_us_plus((ID *)ob->dup_group);
+ ob->transflag |= OB_DUPLIGROUP;
+ }
+}
+
+/* example of dynamic toolbox sublevel */
+static TBitem *create_group_sublevel(void)
+{
+ static TBitem addmenu[]= { { 0, "No Groups", 0, NULL}, { -1, "", 0, NULL}};
+ TBitem *groupmenu;
+ Group *group;
+ int a;
+
+ int tot= BLI_countlist(&G.main->group);
+
+ if(tot==0) {
+ tb_add[TB_ADD_GROUP].poin= addmenu;
+ return NULL;
+ }
+
+ groupmenu= MEM_callocN(sizeof(TBitem)*(tot+1), "group menu");
+ for(a=0, group= G.main->group.first; group; group= group->id.next, a++) {
+ groupmenu[a].name= group->id.name+2;
+ groupmenu[a].retval= a;
+ }
+ groupmenu[a].icon= -1; /* end signal */
+ groupmenu[a].name= "";
+ groupmenu[a].retval= a;
+ groupmenu[a].poin= do_group_addmenu;
+
+ tb_add[TB_ADD_GROUP].poin= groupmenu;
+
+ return groupmenu;
+}
+
void toolbox_n(void)
{
uiBlock *block;
uiBut *but;
TBitem *menu1=NULL, *menu2=NULL, *menu3=NULL;
TBitem *menu4=NULL, *menu5=NULL, *menu6=NULL;
- TBitem *menu7=NULL;
+ TBitem *menu7=NULL, *groupmenu;
int dx=0;
short event, mval[2], tot=0;
char *str1=NULL, *str2=NULL, *str3=NULL, *str4=NULL, *str5=NULL, *str6=NULL, *str7=NULL;
@@ -2389,16 +2425,19 @@ void toolbox_n(void)
uiBlockSetFlag(block, UI_BLOCK_LOOP|UI_BLOCK_REDRAW|UI_BLOCK_RET_1);
uiBlockSetCol(block, TH_MENU_ITEM);
+ /* dynamic menu entries */
+ groupmenu= create_group_sublevel();
+
+ if (G.scene->r.renderer==R_YAFRAY)
+ tb_add[TB_ADD_LAMP].poin= addmenu_YF_lamp;
+ else
+ tb_add[TB_ADD_LAMP].poin= addmenu_lamp;
+
/* select context for main items */
if(curarea->spacetype==SPACE_VIEW3D) {
if(U.uiflag & USER_PLAINMENUS) {
- /* column layout menu */
- if (G.scene->r.renderer==R_YAFRAY) {
- menu1= tb_add_YF; str1= "Add";
- } else {
- menu1= tb_add; str1= "Add";
- }
+ menu1= tb_add; str1= "Add";
menu2= tb_object_edit; str2= "Edit";
menu3= tb_object_select; str3= "Select";
menu4= tb_transform; str4= "Transform";
@@ -2411,11 +2450,7 @@ void toolbox_n(void)
} else {
/* 3x2 layout menu */
menu1= tb_object; str1= "Object";
- if (G.scene->r.renderer==R_YAFRAY) {
- menu2= tb_add_YF; str2= "Add";
- } else {
- menu2= tb_add; str2= "Add";
- }
+ menu2= tb_add; str2= "Add";
menu3= tb_object_select; str3= "Select";
menu4= tb_object_edit; str4= "Edit";
menu5= tb_transform; str5= "Transform";
@@ -2599,6 +2634,8 @@ void toolbox_n(void)
uiBoundsBlock(block, 2);
event= uiDoBlocks(&tb_listb, 0);
+ if(groupmenu) MEM_freeN(groupmenu);
+
mywinset(curarea->win);
}