4 * ***** BEGIN GPL LICENSE BLOCK *****
6 * This program is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU General Public License
8 * as published by the Free Software Foundation; either version 2
9 * of the License, or (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software Foundation,
18 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
20 * The Original Code is Copyright (C) 2004-2008 Blender Foundation.
21 * All rights reserved.
24 * Contributor(s): Blender Foundation
26 * ***** END GPL LICENSE BLOCK *****
33 #include "DNA_armature_types.h"
35 #include "DNA_image_types.h"
36 #include "DNA_meshdata_types.h"
37 #include "DNA_mesh_types.h"
38 #include "DNA_object_types.h"
39 #include "DNA_space_types.h"
40 #include "DNA_scene_types.h"
41 #include "DNA_screen_types.h"
42 #include "DNA_texture_types.h"
43 #include "DNA_userdef_types.h" /* U.smooth_viewtx */
44 #include "DNA_view3d_types.h"
45 #include "DNA_windowmanager_types.h"
47 #include "RNA_access.h"
49 #include "MEM_guardedalloc.h"
51 #include "BKE_action.h"
52 #include "BKE_brush.h"
53 #include "BKE_context.h"
54 #include "BKE_curve.h"
55 #include "BKE_depsgraph.h"
56 #include "BKE_displist.h"
57 #include "BKE_effect.h"
58 #include "BKE_global.h"
59 #include "BKE_image.h"
60 #include "BKE_library.h"
63 #include "BKE_modifier.h"
64 #include "BKE_particle.h"
65 #include "BKE_screen.h"
66 #include "BKE_utildefines.h" /* for VECCOPY */
68 #include "ED_armature.h"
69 #include "ED_particle.h"
70 #include "ED_object.h"
73 #include "ED_screen.h"
74 #include "ED_transform.h"
80 #include "RNA_access.h"
81 #include "RNA_define.h"
84 #include "BIF_glutil.h"
86 #include "BLI_arithb.h"
87 #include "BLI_blenlib.h"
88 #include "BLI_editVert.h"
90 #include "UI_interface.h"
91 #include "UI_interface_icons.h"
92 #include "UI_resources.h"
93 #include "UI_view2d.h"
95 #include "view3d_intern.h"
99 * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
100 * rather than those buttons.
101 * I know the implementation's not good - it's an experiment to see if this
102 * approach would work well
104 * This can be cleaned when I make some new 'mode' icons.
107 #define V3D_OBJECTMODE_SEL ICON_OBJECT_DATA
108 #define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
109 #define V3D_SCULPTMODE_SEL ICON_SCULPTMODE_HLT
110 #define V3D_FACESELECT_SEL ICON_FACESEL_HLT /* this is not a mode anymore - just a switch */
111 #define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
112 #define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
113 #define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT
114 #define V3D_POSEMODE_SEL ICON_POSE_HLT
115 #define V3D_PARTICLEEDITMODE_SEL ICON_ANIM
117 #define TEST_EDITMESH if(obedit==0) return; \
118 if( (v3d->lay & obedit->lay)==0 ) return;
121 static void countall(void) {}
122 extern void borderselect();
123 static int retopo_mesh_paint_check() {return 0;}
125 /* view3d handler codes */
126 #define VIEW3D_HANDLER_BACKGROUND 1
127 #define VIEW3D_HANDLER_PROPERTIES 2
128 #define VIEW3D_HANDLER_OBJECT 3
129 #define VIEW3D_HANDLER_PREVIEW 4
130 #define VIEW3D_HANDLER_MULTIRES 5
131 #define VIEW3D_HANDLER_TRANSFORM 6
132 #define VIEW3D_HANDLER_GREASEPENCIL 7
133 #define VIEW3D_HANDLER_BONESKETCH 8
135 /* end XXX ************* */
138 /* well... in this file a lot of view mode manipulation happens, so let's have it defined here */
139 void ED_view3d_exit_paint_modes(bContext *C)
141 if(G.f & G_TEXTUREPAINT)
142 WM_operator_name_call(C, "PAINT_OT_texture_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
143 if(G.f & G_VERTEXPAINT)
144 WM_operator_name_call(C, "PAINT_OT_vertex_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
145 else if(G.f & G_WEIGHTPAINT)
146 WM_operator_name_call(C, "PAINT_OT_weight_paint_toggle", WM_OP_EXEC_REGION_WIN, NULL);
148 if(G.f & G_SCULPTMODE)
149 WM_operator_name_call(C, "SCULPT_OT_sculptmode_toggle", WM_OP_EXEC_REGION_WIN, NULL);
150 if(G.f & G_PARTICLEEDIT)
151 WM_operator_name_call(C, "PARTICLE_OT_particle_edit_toggle", WM_OP_EXEC_REGION_WIN, NULL);
153 G.f &= ~(G_VERTEXPAINT+G_TEXTUREPAINT+G_WEIGHTPAINT+G_SCULPTMODE+G_PARTICLEEDIT);
160 static void do_view3d_header_buttons(bContext *C, void *arg, int event);
162 #define B_SCENELOCK 101
165 #define B_VIEWBUT 104
167 #define B_VIEWRENDER 106
168 #define B_STARTGAME 107
169 #define B_MODESELECT 108
171 #define B_SEL_VERT 110
172 #define B_SEL_EDGE 111
173 #define B_SEL_FACE 112
174 #define B_SEL_PATH 113
175 #define B_SEL_POINT 114
176 #define B_SEL_END 115
177 #define B_MAN_TRANS 116
178 #define B_MAN_ROT 117
179 #define B_MAN_SCALE 118
181 #define B_MAN_MODE 120
182 #define B_VIEW_BUTSEDIT 121
185 #define B_ACTCOPY 124
186 #define B_ACTPASTE 125
187 #define B_ACTPASTEFLIP 126
192 static RegionView3D *wm_region_view3d(const bContext *C)
194 ScrArea *sa= CTX_wm_area(C);
196 /* XXX handle foursplit? */
197 for(ar= sa->regionbase.first; ar; ar= ar->next)
198 if(ar->regiontype==RGN_TYPE_WINDOW)
199 return ar->regiondata;
203 // XXX quickly ported across
204 static void handle_view3d_lock(bContext *C)
206 Scene *scene= CTX_data_scene(C);
207 ScrArea *sa= CTX_wm_area(C);
208 View3D *v3d= (View3D *)CTX_wm_space_data(C);
210 if (v3d != NULL && sa != NULL) {
211 if(v3d->localview==0 && v3d->scenelock && sa->spacetype==SPACE_VIEW3D) {
214 scene->lay= v3d->lay;
215 scene->camera= v3d->camera;
217 //copy_view3d_lock(REDRAW);
222 /* XXX; all this context stuff... should become operator */
223 void do_layer_buttons(bContext *C, short event)
225 wmWindow *win= CTX_wm_window(C);
226 Scene *scene= CTX_data_scene(C);
227 ScrArea *sa= CTX_wm_area(C);
228 View3D *v3d= sa->spacedata.first;
229 static int oldlay= 1;
230 short shift, alt, ctrl;
232 shift= win->eventstate->shift;
233 alt= win->eventstate->alt;
234 ctrl= win->eventstate->ctrl;
237 if(v3d->localview) return;
239 if(event==-1 && ctrl) {
240 v3d->scenelock= !v3d->scenelock;
241 do_view3d_header_buttons(C, NULL, B_SCENELOCK);
242 } else if (event<0) {
243 if(v3d->lay== (1<<20)-1) {
244 if(event==-2 || shift) v3d->lay= oldlay;
251 if(v3d->scenelock) handle_view3d_lock(C);
253 /* new layers might need unflushed events events */
254 DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
258 if(event<11) event+= 10;
261 if(v3d->lay & (1<<event)) v3d->lay -= (1<<event);
262 else v3d->lay += (1<<event);
264 do_view3d_header_buttons(C, NULL, event+B_LAY);
266 ED_area_tag_redraw(sa);
268 if(v3d->drawtype == OB_SHADED) reshadeall_displist(scene);
271 static int layers_exec(bContext *C, wmOperator *op)
273 Scene *scene= CTX_data_scene(C);
274 ScrArea *sa= CTX_wm_area(C);
275 View3D *v3d= sa->spacedata.first;
276 int nr= RNA_int_get(op->ptr, "nr");
279 return OPERATOR_CANCELLED;
282 if(RNA_boolean_get(op->ptr, "extend"))
287 /* set active layer, ensure to always have one */
288 if(v3d->lay & (1<<nr))
290 else if((v3d->lay & v3d->layact)==0) {
294 if(v3d->lay & (1<<bit)) {
302 if(v3d->scenelock) handle_view3d_lock(C);
304 /* new layers might need unflushed events events */
305 DAG_scene_update_flags(scene, v3d->lay); /* tags all that moves and flushes */
307 ED_area_tag_redraw(sa);
309 return OPERATOR_FINISHED;
312 /* applies shift and alt, lazy coding or ok? :) */
313 /* the local per-keymap-entry keymap will solve it */
314 static int layers_invoke(bContext *C, wmOperator *op, wmEvent *event)
316 if(event->ctrl || event->oskey)
317 return OPERATOR_PASS_THROUGH;
320 RNA_boolean_set(op->ptr, "extend", 1);
323 int nr= RNA_int_get(op->ptr, "nr") + 10;
324 RNA_int_set(op->ptr, "nr", nr);
328 return OPERATOR_FINISHED;
331 void VIEW3D_OT_layers(wmOperatorType *ot)
335 ot->idname= "VIEW3D_OT_layers";
338 ot->invoke= layers_invoke;
339 ot->exec= layers_exec;
340 ot->poll= ED_operator_view3d_active;
343 ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
345 RNA_def_int(ot->srna, "nr", 1, 0, 20, "Number", "", 0, 20);
346 RNA_def_boolean(ot->srna, "extend", 0, "Extend", "");
351 static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event)
353 Scene *scene= CTX_data_scene(C);
358 /* Set Active Object as Active Camera */
359 /* XXX ugly hack alert */
360 // G.qual |= LR_CTRLKEY;
361 // persptoetsen(PAD0);
362 // G.qual &= ~LR_CTRLKEY;
365 for( base = FIRSTBASE; base; base = base->next ) {
366 if (base->object->type == OB_CAMERA) {
370 /* XXX use api call! */
381 static uiBlock *view3d_view_camerasmenu(bContext *C, ARegion *ar, void *arg_unused)
383 Scene *scene= CTX_data_scene(C);
386 short yco= 0, menuwidth=120;
390 block= uiBeginBlock(C, ar, "view3d_view_camerasmenu", UI_EMBOSSP);
391 uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
393 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Active Object as Active Camera|Ctrl NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
395 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
397 for( base = FIRSTBASE; base; base = base->next ) {
398 if (base->object->type == OB_CAMERA) {
401 strcpy(camname, base->object->id.name+2);
402 if (base->object == scene->camera) strcat(camname, " (Active)");
404 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, camname, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, i, "");
408 uiBlockSetDirection(block, UI_RIGHT);
409 uiTextBoundsBlock(block, 50);
415 static void do_view3d_view_cameracontrolsmenu(bContext *C, void *arg, int event)
418 case 0: /* Orbit Left */
421 case 1: /* Orbit Right */
424 case 2: /* Orbit Up */
427 case 3: /* Orbit Down */
430 case 4: /* Pan left */
431 /* XXX ugly hack alert */
432 // G.qual |= LR_CTRLKEY;
434 // G.qual &= ~LR_CTRLKEY;
436 case 5: /* Pan right */
437 /* XXX ugly hack alert */
438 // G.qual |= LR_CTRLKEY;
440 // G.qual &= ~LR_CTRLKEY;
443 /* ugly hack alert */
444 // G.qual |= LR_CTRLKEY;
446 // G.qual &= ~LR_CTRLKEY;
448 case 7: /* Pan down */
449 /* ugly hack alert */
450 // G.qual |= LR_CTRLKEY;
452 // G.qual &= ~LR_CTRLKEY;
454 case 8: /* Zoom In */
455 persptoetsen(PADPLUSKEY);
457 case 9: /* Zoom Out */
458 persptoetsen(PADMINUS);
460 case 10: /* Reset Zoom */
461 persptoetsen(PADENTER);
463 case 11: /* Camera Fly mode */
470 static uiBlock *view3d_view_cameracontrolsmenu(bContext *C, ARegion *ar, void *arg_unused)
472 /* static short tog=0; */
474 short yco= 0, menuwidth=120;
476 block= uiBeginBlock(C, ar, "view3d_view_cameracontrolsmenu", UI_EMBOSSP);
477 uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
479 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
481 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
483 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
484 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
485 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
486 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
488 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
490 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
491 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
492 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
493 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
495 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
497 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
498 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
499 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
501 uiBlockSetDirection(block, UI_RIGHT);
502 uiTextBoundsBlock(block, 50);
506 static void do_view3d_view_alignviewmenu(bContext *C, void *arg, int event)
508 Scene *scene= CTX_data_scene(C);
509 ScrArea *sa= CTX_wm_area(C);
510 View3D *v3d= sa->spacedata.first;
511 Object *obedit = CTX_data_edit_object(C);
516 case 0: /* Align View to Selected (edit/faceselect mode) */
519 if ((obedit) && (obedit->type == OB_MESH)) {
520 editmesh_align_view_to_selected(v3d, event + 1);
522 else if (FACESEL_PAINT_TEST) {
523 Object *obact= OBACT;
524 if (obact && obact->type==OB_MESH) {
525 Mesh *me= obact->data;
528 // XXX faceselect_align_view_to_selected(v3d, me, event + 1);
529 ED_area_tag_redraw(sa);
534 case 3: /* Center View to Cursor */
535 curs= give_cursor(scene, v3d);
536 v3d->ofs[0]= -curs[0];
537 v3d->ofs[1]= -curs[1];
538 v3d->ofs[2]= -curs[2];
539 ED_area_tag_redraw(sa);
541 case 4: /* Align Active Camera to View */
542 /* XXX This ugly hack is a symptom of the nasty persptoetsen function,
543 * but at least it works for now.
545 // G.qual |= LR_CTRLKEY|LR_ALTKEY;
547 // G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
549 case 5: /* Align View to Selected (object mode) */
550 // XXX mainqenter(PADASTERKEY, 1);
552 case 6: /* Center View and Cursor to Origin */
553 WM_operator_name_call(C, "VIEW3D_OT_view_center", WM_OP_EXEC_REGION_WIN, NULL);
554 curs= give_cursor(scene, v3d);
555 curs[0]=curs[1]=curs[2]= 0.0;
560 static uiBlock *view3d_view_alignviewmenu(bContext *C, ARegion *ar, void *arg_unused)
562 /* static short tog=0; */
564 Object *obedit = CTX_data_edit_object(C);
565 short yco= 0, menuwidth=120;
567 block= uiBeginBlock(C, ar, "view3d_view_alignviewmenu", UI_EMBOSSP);
568 uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
570 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
571 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor and View All|Shift C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
572 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align Active Camera to View|Ctrl Alt NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
574 if (((obedit) && (obedit->type == OB_MESH)) || (FACESEL_PAINT_TEST)) {
575 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Top)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
576 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Front)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
577 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected (Side)|Shift V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
579 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
582 uiBlockSetDirection(block, UI_RIGHT);
583 uiTextBoundsBlock(block, 50);
589 static uiBlock *view3d_view_spacehandlers(bContext *C, ARegion *ar, void *arg_unused)
596 static void do_view3d_viewmenu(bContext *C, void *arg, int event)
610 case 5: /* Perspective */
612 case 6: /* Orthographic */
614 case 7: /* Local View */
616 case 8: /* Global View */
618 case 9: /* View All (Home) */
619 WM_operator_name_call(C, "VIEW3D_OT_view_all", WM_OP_EXEC_REGION_WIN, NULL);
621 case 11: /* View Selected */
622 WM_operator_name_call(C, "VIEW3D_OT_view_center", WM_OP_EXEC_REGION_WIN, NULL);
624 case 13: /* Play Back Animation */
626 case 15: /* Background Image... */
627 // add_blockhandler(sa, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
629 case 16: /* View Panel */
630 // add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
632 case 17: /* Set Clipping Border */
633 WM_operator_name_call(C, "VIEW3D_OT_clip_border", WM_OP_INVOKE_REGION_WIN, NULL);
635 case 18: /* render preview */
636 // toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
638 case 19: /* zoom within border */
639 // view3d_border_zoom();
641 case 20: /* Transform Space Panel */
642 // add_blockhandler(sa, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
644 case 21: /* Grease Pencil */
645 // add_blockhandler(sa, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
647 case 22: /* View all layers */
648 do_layer_buttons(C, -2);
655 static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
657 ScrArea *sa= CTX_wm_area(C);
658 View3D *v3d= sa->spacedata.first;
659 RegionView3D *rv3d= wm_region_view3d(C);
661 short yco= 0, menuwidth=120;
663 block= uiBeginBlock(C, ar, "view3d_viewmenu", UI_EMBOSSP);
664 uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
666 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
667 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
668 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
669 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
670 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
672 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
674 if ((rv3d->viewbut == 0) && !(rv3d->persp == V3D_CAMOB)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
675 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
676 if (rv3d->persp == V3D_CAMOB) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
677 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
678 if (rv3d->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
679 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
680 if (rv3d->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
681 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
682 if (rv3d->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
683 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
685 uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
687 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
689 if(rv3d->persp==V3D_PERSP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
690 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
691 if(rv3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
692 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
694 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
696 if(v3d->lay== (1<<20)-1) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Previous Layers|Shift ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
697 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
699 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
701 if(v3d->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
702 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
703 if(!v3d->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
704 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
706 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
708 uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
709 uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
711 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
713 if(rv3d->rflag & RV3D_CLIPPING)
714 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
716 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
717 if (rv3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Within Border...|Shift B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 19, "");
718 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
719 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
720 if(!sa->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
721 else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
723 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
725 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
727 #ifndef DISABLE_PYTHON
728 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
729 uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
732 if(ar->alignment==RGN_ALIGN_TOP) {
733 uiBlockSetDirection(block, UI_DOWN);
736 uiBlockSetDirection(block, UI_TOP);
737 uiBlockFlipOrder(block);
740 uiTextBoundsBlock(block, 50);
747 void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
750 extern void selectall_type(short obtype);
754 selectall_type(OB_MESH);
757 selectall_type(OB_CURVE);
759 case 3: /* Surface */
760 selectall_type(OB_SURF);
763 selectall_type(OB_MBALL);
765 case 5: /* Armature */
766 selectall_type(OB_ARMATURE);
768 case 6: /* Lattice */
769 selectall_type(OB_LATTICE);
772 selectall_type(OB_FONT);
775 selectall_type(OB_EMPTY);
778 selectall_type(OB_CAMERA);
781 selectall_type(OB_LAMP);
784 do_layer_buttons(C, -2);
789 static uiBlock *view3d_select_object_typemenu(bContext *C, ARegion *ar, void *arg_unused)
792 short yco = 20, menuwidth = 120;
794 block= uiBeginBlock(C, ar, "view3d_select_object_typemenu", UI_EMBOSSP);
795 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
797 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
798 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
799 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
800 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
802 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
804 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
805 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
806 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
807 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
809 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
811 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
812 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
814 uiBlockSetDirection(block, UI_RIGHT);
815 uiTextBoundsBlock(block, 60);
820 void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
822 // XXX extern void selectall_layer(unsigned int layernum);
846 // XXX selectall_layer(event);
851 static uiBlock *view3d_select_object_layermenu(bContext *C, ARegion *ar, void *arg_unused)
854 short xco= 0, yco = 20, menuwidth = 22;
856 block= uiBeginBlock(C, ar, "view3d_select_object_layermenu", UI_EMBOSSP);
857 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
859 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
860 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
861 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
862 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
863 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
865 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
866 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
867 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
868 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
869 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
871 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
872 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
873 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
874 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
875 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
877 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
878 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
879 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
880 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
881 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
883 uiBlockSetDirection(block, UI_RIGHT);
884 /*uiTextBoundsBlock(block, 100);*/
888 void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
891 case 1: /* Object Ipo */
893 case 3: /* Current Material */
894 case 4: /* Current Texture */
901 static uiBlock *view3d_select_object_linkedmenu(bContext *C, ARegion *ar, void *arg_unused)
904 short yco = 20, menuwidth = 120;
906 block= uiBeginBlock(C, ar, "view3d_select_object_linkedmenu", UI_EMBOSSP);
907 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
909 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
910 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
911 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
912 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
914 uiBlockSetDirection(block, UI_RIGHT);
915 uiTextBoundsBlock(block, 60);
919 void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
923 case 1: /* Children */
924 case 2: /* Immediate Children */
926 case 4: /* Siblings */
928 case 6: /* Objects on Shared Layers */
929 case 7: /* Objects in Same Group */
930 case 8: /* Object Hooks*/
931 case 9: /* Object PassIndex*/
932 case 10: /* Object Color*/
933 case 11: /* Game Properties*/
934 select_object_grouped((short)event);
939 static uiBlock *view3d_select_object_groupedmenu(bContext *C, ARegion *ar, void *arg_unused)
942 short yco = 20, menuwidth = 120;
944 block= uiBeginBlock(C, ar, "view3d_select_object_groupedmenu", UI_EMBOSSP);
945 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
947 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
948 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
949 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
950 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
951 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects of Same Type|Shift G, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
952 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects on Shared Layers|Shift G, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
953 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects in Same Group|Shift G, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
954 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
955 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
956 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
957 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
959 uiBlockSetDirection(block, UI_RIGHT);
960 uiTextBoundsBlock(block, 60);
966 static void view3d_select_objectmenu(bContext *C, uiLayout *layout, void *arg_unused)
968 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
972 uiItemO(layout, "Select/Deselect All", 0, "OBJECT_OT_select_all_toggle");
973 uiItemO(layout, "Inverse", 0, "OBJECT_OT_select_inverse");
974 uiItemO(layout, "Random", 0, "OBJECT_OT_select_random");
975 uiItemO(layout, "Select All by Layer", 0, "OBJECT_OT_select_by_layer");
976 uiItemMenuEnumO(layout, "Select All by Type", 0, "OBJECT_OT_select_by_type", "type");
977 uiItemMenuEnumO(layout, "Select Grouped", 0, "OBJECT_OT_select_grouped", "type");
980 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
981 uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
985 uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
986 uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
990 static void view3d_select_meshmenu(bContext *C, uiLayout *layout, void *arg_unused)
992 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
996 uiItemO(layout, "Select/Deselect All", 0, "MESH_OT_select_all_toggle");
997 uiItemO(layout, "Inverse", 0, "MESH_OT_select_inverse");
1001 uiItemO(layout, "Random...", 0, "MESH_OT_select_random"); // Random...
1002 uiItemO(layout, "Sharp Edges", 0, "MESH_OT_edges_select_sharp");
1003 uiItemO(layout, "Linked Flat Faces", 0, "MESH_OT_faces_select_linked_flat");
1007 uiItemEnumO(layout, "Triangles", 0, "MESH_OT_select_by_number_vertices", "type", 3); // Ctrl Alt Shift 3
1008 uiItemEnumO(layout, "Quads", 0, "MESH_OT_select_by_number_vertices", "type", 4); // Ctrl Alt Shift 4
1009 uiItemEnumO(layout, "Loose Verts/Edges", 0, "MESH_OT_select_by_number_vertices", "type", 5); // Ctrl Alt Shift 5
1010 uiItemO(layout, "Similar...", 0, "MESH_OT_select_similar");
1014 uiItemO(layout, "Less", 0, "MESH_OT_select_more");
1015 uiItemO(layout, "More", 0, "MESH_OT_select_less");
1019 uiItemO(layout, "Linked", 0, "MESH_OT_select_linked");
1020 uiItemO(layout, "Vertex Path", 0, "MESH_OT_select_vertex_path"); // W, Alt 7
1021 uiItemO(layout, "Edge Loop", 0, "MESH_OT_loop_multi_select");
1022 uiItemBooleanO(layout, "Edge Ring", 0, "MESH_OT_loop_multi_select", "ring", 1);
1026 uiItemO(layout, NULL, 0, "MESH_OT_loop_to_region"); // Ctrl E 8
1027 uiItemO(layout, NULL, 0, "MESH_OT_region_to_loop"); // Ctrl E 9
1030 static void view3d_select_curvemenu(bContext *C, uiLayout *layout, void *arg_unused)
1032 Object *obedit= CTX_data_edit_object(C);
1034 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
1035 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_circle");
1039 uiItemO(layout, NULL, 0, "CURVE_OT_select_all_toggle");
1040 uiItemO(layout, NULL, 0, "CURVE_OT_select_inverse");
1041 uiItemO(layout, NULL, 0, "CURVE_OT_select_random"); // Random...
1042 uiItemO(layout, NULL, 0, "CURVE_OT_select_every_nth"); // Every Nth..
1046 if(obedit->type == OB_SURF) {
1047 uiItemO(layout, NULL, 0, "CURVE_OT_select_row");
1050 uiItemO(layout, NULL, 0, "CURVE_OT_de_select_first");
1051 uiItemO(layout, NULL, 0, "CURVE_OT_de_select_last");
1052 uiItemO(layout, NULL, 0, "CURVE_OT_select_next");
1053 uiItemO(layout, NULL, 0, "CURVE_OT_select_previous");
1058 uiItemO(layout, NULL, 0, "CURVE_OT_select_more");
1059 uiItemO(layout, NULL, 0, "CURVE_OT_select_less");
1061 /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
1062 /* uiItemO(layout, NULL, 0, "CURVE_OT_select_linked"); */
1065 G.qual |= LR_CTRLKEY;
1066 select_connected_nurb();
1067 G.qual &= ~LR_CTRLKEY;
1072 void do_view3d_select_metaballmenu(bContext *C, void *arg, int event)
1077 case 0: /* border select */
1080 case 2: /* Select/Deselect all */
1081 deselectall_mball();
1083 case 3: /* Inverse */
1084 selectinverse_mball();
1086 case 4: /* Select Random */
1087 selectrandom_mball();
1094 static uiBlock *view3d_select_metaballmenu(bContext *C, ARegion *ar, void *arg_unused)
1097 short yco= 0, menuwidth=120;
1099 block= uiBeginBlock(C, ar, "view3d_select_metaballmenu", UI_EMBOSSP);
1100 uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
1102 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1104 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1106 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1108 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1110 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1112 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1114 if(ar->alignment==RGN_ALIGN_TOP) {
1115 uiBlockSetDirection(block, UI_DOWN);
1118 uiBlockSetDirection(block, UI_TOP);
1119 uiBlockFlipOrder(block);
1122 uiTextBoundsBlock(block, 50);
1126 static void view3d_select_latticemenu(bContext *C, uiLayout *layout, void *arg_unused)
1128 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
1130 uiItemO(layout, NULL, 0, "LATTICE_OT_select_all_toggle");
1133 static void view3d_select_armaturemenu(bContext *C, uiLayout *layout, void *arg_unused)
1137 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
1141 uiItemO(layout, "Select/Deselect All", 0, "ARMATURE_OT_select_all_toggle");
1142 uiItemO(layout, "Inverse", 0, "ARMATURE_OT_select_inverse");
1146 uiItemEnumO(layout, "Parent", 0, "ARMATURE_OT_select_hierarchy", "direction", BONE_SELECT_PARENT);
1147 uiItemEnumO(layout, "Child", 0, "ARMATURE_OT_select_hierarchy", "direction", BONE_SELECT_CHILD);
1151 WM_operator_properties_create(&ptr, "ARMATURE_OT_select_hierarchy");
1152 RNA_boolean_set(&ptr, "extend", 1);
1153 RNA_enum_set(&ptr, "direction", BONE_SELECT_PARENT);
1154 uiItemFullO(layout, "Extend Parent", 0, "ARMATURE_OT_select_hierarchy", ptr.data, WM_OP_EXEC_REGION_WIN);
1156 WM_operator_properties_create(&ptr, "ARMATURE_OT_select_hierarchy");
1157 RNA_boolean_set(&ptr, "extend", 1);
1158 RNA_enum_set(&ptr, "direction", BONE_SELECT_CHILD);
1159 uiItemFullO(layout, "Extend Child", 0, "ARMATURE_OT_select_hierarchy", ptr.data, WM_OP_EXEC_REGION_WIN);
1162 static void view3d_select_posemenu(bContext *C, uiLayout *layout, void *arg_unused)
1166 uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
1170 uiItemO(layout, "Select/Deselect All", 0, "POSE_OT_select_all_toggle");
1171 uiItemO(layout, "Inverse", 0, "POSE_OT_select_inverse");
1172 uiItemO(layout, "Constraint Target", 0, "POSE_OT_select_constraint_target");
1176 uiItemEnumO(layout, "Parent", 0, "POSE_OT_select_hierarchy", "direction", BONE_SELECT_PARENT);
1177 uiItemEnumO(layout, "Child", 0, "POSE_OT_select_hierarchy", "direction", BONE_SELECT_CHILD);
1181 WM_operator_properties_create(&ptr, "POSE_OT_select_hierarchy");
1182 RNA_boolean_set(&ptr, "extend", 1);
1183 RNA_enum_set(&ptr, "direction", BONE_SELECT_PARENT);
1184 uiItemFullO(layout, "Extend Parent", 0, "POSE_OT_select_hierarchy", ptr.data, WM_OP_EXEC_REGION_WIN);
1186 WM_operator_properties_create(&ptr, "POSE_OT_select_hierarchy");
1187 RNA_boolean_set(&ptr, "extend", 1);
1188 RNA_enum_set(&ptr, "direction", BONE_SELECT_CHILD);
1189 uiItemFullO(layout, "Extend Child", 0, "POSE_OT_select_hierarchy", ptr.data, WM_OP_EXEC_REGION_WIN);
1192 void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
1195 /* events >= 6 are registered bpython scripts */
1196 #ifndef DISABLE_PYTHON
1197 if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1201 case 0: /* border select */
1204 case 2: /* Select/Deselect all */
1205 deselectall_tface();
1207 case 3: /* Select Inverse */
1210 case 4: /* Select Linked */
1211 select_linked_tfaces(2);
1217 static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
1220 short yco= 0, menuwidth=120;
1221 #ifndef DISABLE_PYTHON
1222 // XXX BPyMenu *pym;
1226 block= uiBeginBlock(C, ar, "view3d_select_faceselmenu", UI_EMBOSSP);
1227 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1229 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1231 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1233 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1234 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1236 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1237 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1239 #ifndef DISABLE_PYTHON
1240 // uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1242 /* note that we account for the 6 previous entries with i+6: */
1243 // for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1244 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1245 // menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1246 // pym->tooltip?pym->tooltip:pym->filename);
1250 if(ar->alignment==RGN_ALIGN_TOP) {
1251 uiBlockSetDirection(block, UI_DOWN);
1254 uiBlockSetDirection(block, UI_TOP);
1255 uiBlockFlipOrder(block);
1258 uiTextBoundsBlock(block, 50);
1262 static void view3d_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused)
1264 uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_grid");
1265 uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_cursor");
1266 uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_center");
1270 uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_selected");
1271 uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_grid");
1272 uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_active");
1275 void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
1284 case 0: /* X Global */
1285 initTransform(TFM_TRANSLATION, CTX_NONE);
1286 BIF_setSingleAxisConstraint(mat[0], " X");
1289 case 1: /* Y Global */
1290 initTransform(TFM_TRANSLATION, CTX_NONE);
1291 BIF_setSingleAxisConstraint(mat[1], " Y");
1294 case 2: /* Z Global */
1295 initTransform(TFM_TRANSLATION, CTX_NONE);
1296 BIF_setSingleAxisConstraint(mat[2], " Z");
1299 case 3: /* X Local */
1300 initTransform(TFM_TRANSLATION, CTX_NONE);
1301 BIF_setLocalAxisConstraint('X', " X");
1304 case 4: /* Y Local */
1305 initTransform(TFM_TRANSLATION, CTX_NONE);
1306 BIF_setLocalAxisConstraint('Y', " Y");
1309 case 5: /* Z Local */
1310 initTransform(TFM_TRANSLATION, CTX_NONE);
1311 BIF_setLocalAxisConstraint('Z', " Z");
1318 static uiBlock *view3d_transform_moveaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1321 short yco = 20, menuwidth = 120;
1323 block= uiBeginBlock(C, ar, "view3d_transform_moveaxismenu", UI_EMBOSSP);
1324 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1326 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1327 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1328 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1330 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1332 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1333 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1334 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1337 uiBlockSetDirection(block, UI_RIGHT);
1338 uiTextBoundsBlock(block, 60);
1342 void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event)
1351 case 0: /* X Global */
1352 initTransform(TFM_ROTATION, CTX_NONE);
1353 BIF_setSingleAxisConstraint(mat[0], " X");
1356 case 1: /* Y Global */
1357 initTransform(TFM_ROTATION, CTX_NONE);
1358 BIF_setSingleAxisConstraint(mat[1], " Y");
1361 case 2: /* Z Global */
1362 initTransform(TFM_ROTATION, CTX_NONE);
1363 BIF_setSingleAxisConstraint(mat[2], " Z");
1366 case 3: /* X Local */
1367 initTransform(TFM_ROTATION, CTX_NONE);
1368 BIF_setLocalAxisConstraint('X', " X");
1371 case 4: /* Y Local */
1372 initTransform(TFM_ROTATION, CTX_NONE);
1373 BIF_setLocalAxisConstraint('Y', " Y");
1376 case 5: /* Z Local */
1377 initTransform(TFM_ROTATION, CTX_NONE);
1378 BIF_setLocalAxisConstraint('Z', " Z");
1385 static uiBlock *view3d_transform_rotateaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1388 short yco = 20, menuwidth = 120;
1390 block= uiBeginBlock(C, ar, "view3d_transform_rotateaxismenu", UI_EMBOSSP);
1391 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1393 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1394 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1395 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1397 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1399 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1400 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1401 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1404 uiBlockSetDirection(block, UI_RIGHT);
1405 uiTextBoundsBlock(block, 60);
1409 void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event)
1418 case 0: /* X Global */
1419 initTransform(TFM_RESIZE, CTX_NONE);
1420 BIF_setSingleAxisConstraint(mat[0], " X");
1423 case 1: /* Y Global */
1424 initTransform(TFM_RESIZE, CTX_NONE);
1425 BIF_setSingleAxisConstraint(mat[1], " Y");
1428 case 2: /* Z Global */
1429 initTransform(TFM_RESIZE, CTX_NONE);
1430 BIF_setSingleAxisConstraint(mat[2], " Z");
1433 case 3: /* X Local */
1434 initTransform(TFM_RESIZE, CTX_NONE);
1435 BIF_setLocalAxisConstraint('X', " X");
1438 case 4: /* Y Local */
1439 initTransform(TFM_RESIZE, CTX_NONE);
1440 BIF_setLocalAxisConstraint('X', " X");
1443 case 5: /* Z Local */
1444 initTransform(TFM_RESIZE, CTX_NONE);
1445 BIF_setLocalAxisConstraint('X', " X");
1452 static uiBlock *view3d_transform_scaleaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1455 short yco = 20, menuwidth = 120;
1457 block= uiBeginBlock(C, ar, "view3d_transform_scaleaxismenu", UI_EMBOSSP);
1458 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1460 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1461 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1462 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1464 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1466 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1467 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1468 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1471 uiBlockSetDirection(block, UI_RIGHT);
1472 uiTextBoundsBlock(block, 60);
1476 static void do_view3d_transformmenu(bContext *C, void *arg, int event)
1479 Scene *scene= CTX_data_scene(C);
1480 ToolSettings *ts= CTX_data_tool_settings(C);
1484 initTransform(TFM_TRANSLATION, CTX_NONE);
1488 initTransform(TFM_ROTATION, CTX_NONE);
1492 initTransform(TFM_RESIZE, CTX_NONE);
1499 initTransform(TFM_TOSPHERE, CTX_NONE);
1503 initTransform(TFM_SHEAR, CTX_NONE);
1507 initTransform(TFM_WARP, CTX_NONE);
1511 initTransform(TFM_PUSHPULL, CTX_NONE);
1516 if (obedit->type == OB_MESH)
1517 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1519 } else error("Only meshes can be shrinked/fattened");
1531 initTransform(TFM_TILT, CTX_NONE);
1535 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1539 ts->snap_flag &= ~SCE_SNAP;
1542 ts->snap_flag |= SCE_SNAP;
1545 ts->snap_target = SCE_SNAP_TARGET_CLOSEST;
1548 ts->snap_target = SCE_SNAP_TARGET_CENTER;
1551 ts->snap_target = SCE_SNAP_TARGET_MEDIAN;
1554 ts->snap_target = SCE_SNAP_TARGET_ACTIVE;
1563 static uiBlock *view3d_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
1565 ToolSettings *ts= CTX_data_tool_settings(C);
1566 Object *obedit = CTX_data_edit_object(C);
1568 short yco = 20, menuwidth = 120;
1570 block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP);
1571 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1573 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1574 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1576 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1577 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1579 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1580 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1582 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1585 if (obedit->type == OB_MESH)
1586 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1587 else if (obedit->type == OB_CURVE) {
1588 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1589 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1592 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1593 if (obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1594 else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1595 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1596 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1599 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1601 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale to Image Aspect Ratio|Alt V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1604 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1606 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1608 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1609 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1610 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align to Transform Orientation|Ctrl Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1613 if (BIF_snappingSupported(obedit))
1615 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1617 if (ts->snap_flag & SCE_SNAP)
1619 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1620 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1624 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1625 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1628 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1630 switch(ts->snap_target)
1632 case SCE_SNAP_TARGET_CLOSEST:
1633 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1634 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1635 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1636 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1638 case SCE_SNAP_TARGET_CENTER:
1639 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1640 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1641 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1642 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1644 case SCE_SNAP_TARGET_MEDIAN:
1645 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1646 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1647 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1648 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1650 case SCE_SNAP_TARGET_ACTIVE:
1651 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1652 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1653 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1654 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1659 uiBlockSetDirection(block, UI_RIGHT);
1660 uiTextBoundsBlock(block, 60);
1665 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
1670 initTransform(TFM_MIRROR, CTX_NO_PET);
1674 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1675 BIF_setLocalAxisConstraint('X', " on X axis");
1679 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1680 BIF_setLocalAxisConstraint('Y', " on Y axis");
1684 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1685 BIF_setLocalAxisConstraint('Z', " on Z axis");
1692 static uiBlock *view3d_object_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
1695 short yco = 20, menuwidth = 120;
1697 block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP);
1698 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
1700 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1701 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1702 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1703 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1704 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1706 uiBlockSetDirection(block, UI_RIGHT);
1707 uiTextBoundsBlock(block, 60);
1712 static void view3d_edit_object_transformmenu(bContext *C, uiLayout *layout, void *arg_unused)
1715 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Scale/Rotation to ObData|Ctrl A, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1716 apply_objects_locrot();
1717 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1718 apply_objects_visual_tx();
1719 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1720 if(OBACT) object_apply_deform(OBACT);
1722 uiItemO(layout, NULL, 0, "OBJECT_OT_duplicates_make_real");
1726 uiItemO(layout, NULL, 0, "OBJECT_OT_location_clear");
1727 uiItemO(layout, NULL, 0, "OBJECT_OT_rotation_clear");
1728 uiItemO(layout, NULL, 0, "OBJECT_OT_scale_clear");
1729 uiItemO(layout, NULL, 0, "OBJECT_OT_origin_clear");
1733 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
1746 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, ARegion *ar, void *arg_unused)
1749 short yco = 20, menuwidth = 120;
1751 block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP);
1752 uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
1754 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1755 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1756 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1758 uiBlockSetDirection(block, UI_RIGHT);
1759 uiTextBoundsBlock(block, 60);
1763 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
1771 make_links((short)event);
1777 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, ARegion *ar, void *arg_unused)
1779 Scene *scene= CTX_data_scene(C);
1783 short yco = 20, menuwidth = 120;
1785 block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP);
1786 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
1788 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1790 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1792 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1796 if(ob->type==OB_MESH) {
1797 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1798 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1799 } else if(ob->type==OB_CURVE) {
1800 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1801 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1802 } else if(ob->type==OB_FONT) {
1803 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1804 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1805 } else if(ob->type==OB_SURF) {
1806 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1807 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1808 } else if(ob->type==OB_MBALL) {
1809 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1810 } else if(ob->type==OB_CAMERA) {
1811 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1812 } else if(ob->type==OB_LAMP) {
1813 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1814 } else if(ob->type==OB_LATTICE) {
1815 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1816 } else if(ob->type==OB_ARMATURE) {
1817 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1821 uiBlockSetDirection(block, UI_RIGHT);
1822 uiTextBoundsBlock(block, 60);
1826 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
1830 case 1: /* Object */
1831 single_object_users(1);
1833 case 2: /* Object & ObData */
1834 single_object_users(1);
1835 single_obdata_users(1);
1837 case 3: /* Object & ObData & Materials+Tex */
1838 single_object_users(1);
1839 single_obdata_users(1);
1840 single_mat_users(1); /* also tex */
1842 case 4: /* Materials+Tex */
1843 single_mat_users(1);
1846 single_ipo_users(1);
1850 clear_id_newpoins();
1856 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, ARegion *ar, void *arg_unused)
1860 short yco = 20, menuwidth = 120;
1862 block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP);
1863 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
1865 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1866 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1867 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1868 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1869 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1871 uiBlockSetDirection(block, UI_RIGHT);
1872 uiTextBoundsBlock(block, 60);
1876 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
1902 // XXX copy_attr((short)event);
1907 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, ARegion *ar, void *arg_unused)
1909 Scene *scene= CTX_data_scene(C);
1913 short yco = 20, menuwidth = 120;
1915 block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP);
1916 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
1920 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1921 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1922 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1923 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1924 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1925 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1927 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1929 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1930 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1931 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1932 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1933 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1934 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
1936 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1938 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
1939 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
1943 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
1944 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
1945 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1948 if(ob->type == OB_FONT) {
1949 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1950 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1951 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
1953 if(ob->type == OB_CURVE) {
1954 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1955 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
1958 if(ob->type==OB_MESH) {
1959 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1960 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
1962 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
1965 uiBlockSetDirection(block, UI_RIGHT);
1966 uiTextBoundsBlock(block, 60);
1971 static void view3d_edit_object_parentmenu(bContext *C, uiLayout *layout, void *arg_unused)
1973 uiItemO(layout, "Make Parent...", 0, "OBJECT_OT_parent_set");
1974 uiItemO(layout, "Clear Parent...", 0, "OBJECT_OT_parent_clear");
1977 static void view3d_edit_object_groupmenu(bContext *C, uiLayout *layout, void *arg_unused)
1979 uiItemO(layout, NULL, 0, "GROUP_OT_group_create");
1980 uiItemO(layout, NULL, 0, "GROUP_OT_objects_remove");
1984 uiItemO(layout, NULL, 0, "GROUP_OT_objects_add_active");
1985 uiItemO(layout, NULL, 0, "GROUP_OT_objects_remove_active");
1988 static void view3d_edit_object_trackmenu(bContext *C, uiLayout *layout, void *arg_unused)
1990 uiItemO(layout, "Make Track...", 0, "OBJECT_OT_track_set");
1991 uiItemO(layout, "Clear Track...", 0, "OBJECT_OT_track_clear");
1994 static void view3d_edit_object_constraintsmenu(bContext *C, uiLayout *layout, void *arg_unused)
1996 uiItemO(layout, NULL, 0, "OBJECT_OT_constraint_add_with_targets");
1997 uiItemO(layout, NULL, 0, "OBJECT_OT_constraints_clear");
2000 static void view3d_edit_object_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
2002 uiItemO(layout, "Show Hidden", 0, "OBJECT_OT_restrictview_clear");
2003 uiItemO(layout, "Hide Selected", 0, "OBJECT_OT_restrictview_set");
2004 uiItemBooleanO(layout, "Hide Unselected", 0, "OBJECT_OT_restrictview_set", "unselected", 1);
2008 #ifndef DISABLE_PYTHON
2009 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
2012 BPY_menu_do_python(PYMENU_OBJECT, event);
2017 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
2020 // short yco = 20, menuwidth = 120;
2021 // XXX BPyMenu *pym;
2024 block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP);
2025 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2027 // for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2028 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, i, pym->tooltip?pym->tooltip:pym->filename);
2031 uiBlockSetDirection(block, UI_RIGHT);
2032 uiTextBoundsBlock(block, 60);
2036 #endif /* DISABLE_PYTHON */
2041 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
2043 Scene *scene= CTX_data_scene(C);
2044 ScrArea *sa= CTX_wm_area(C);
2045 View3D *v3d= sa->spacedata.first;
2049 case 0: /* transform properties*/
2050 // XXX mainqenter(NKEY, 1);
2052 case 5: /* make single user */
2055 case 7: /* boolean operation */
2058 case 8: /* join objects */
2061 case 9: /* convert object type */
2064 case 10: /* move to layer */
2067 case 11: /* insert keyframe */
2070 case 16: /* make proxy object*/
2073 case 18: /* delete keyframe */
2080 static void view3d_edit_objectmenu(bContext *C, uiLayout *layout, void *arg_unused)
2083 Object *ob= CTX_data_active_object(C);
2085 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2086 uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2089 uiItemMenuF(layout, "Clear/Apply", 0, view3d_edit_object_transformmenu);
2090 uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2094 // TODO: these operators may get renamed
2095 uiItemO(layout, NULL, 0, "ANIM_OT_insert_keyframe_menu");
2096 uiItemO(layout, NULL, 0, "ANIM_OT_delete_keyframe_old");
2100 uiItemO(layout, NULL, 0, "OBJECT_OT_duplicate");
2101 uiItemBooleanO(layout, "Duplicate Linked", 0, "OBJECT_OT_duplicate", "linked", 1);
2102 uiItemO(layout, NULL, 0, "OBJECT_OT_delete");
2105 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2106 uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2107 uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2108 uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2109 uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2114 uiItemMenuF(layout, "Parent", 0, view3d_edit_object_parentmenu);
2115 uiItemMenuF(layout, "Track", 0, view3d_edit_object_trackmenu);
2116 uiItemMenuF(layout, "Group", 0, view3d_edit_object_groupmenu);
2117 uiItemMenuF(layout, "Constraints", 0, view3d_edit_object_constraintsmenu);
2120 if(ob && ob->type == OB_MESH) {
2121 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2124 // join... (added already)
2126 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2130 uiItemO(layout, NULL, 0, "OBJECT_OT_join");
2135 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2138 uiItemMenuF(layout, "Show/Hide", 0, view3d_edit_object_showhidemenu);
2141 #ifndef DISABLE_PYTHON
2142 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2143 uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2148 static void view3d_edit_mesh_verticesmenu(bContext *C, uiLayout *layout, void *arg_unused)
2150 uiItemO(layout, "Merge...", 0, "MESH_OT_merge");
2151 uiItemO(layout, "Rip", 0, "MESH_OT_rip");
2152 uiItemO(layout, "Split", 0, "MESH_OT_split");
2153 uiItemO(layout, "Separate", 0, "MESH_OT_separate");
2157 uiItemO(layout, "Smooth", 0, "MESH_OT_vertices_smooth");
2158 uiItemO(layout, "Remove Doubles", 0, "MESH_OT_remove_doubles");
2163 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); // add_hook_menu();
2164 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); // make_parent();
2168 void do_view3d_edit_mesh_edgesmenu(bContext *C, void *arg, int event)
2171 Scene *scene= CTX_data_scene(C);
2176 case 9: /* Crease SubSurf */
2177 if(!multires_level1_test()) {
2178 initTransform(TFM_CREASE, CTX_EDGE);
2182 case 12: /* Edgeslide */
2185 case 13: /* Edge Loop Delete */
2186 if(EdgeLoopDelete()) {
2188 ED_undo_push(C, "Erase Edge Loop");
2189 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2192 case 14: /*Collapse Edges*/
2194 ED_undo_push(C, "Collapse");
2196 case 17: /* Adjust Bevel Weight */
2197 if(!multires_level1_test()) {
2198 initTransform(TFM_BWEIGHT, CTX_EDGE);
2206 static void view3d_edit_mesh_edgesmenu(bContext *C, uiLayout *layout, void *arg_unused)
2208 uiItemO(layout, NULL, 0, "MESH_OT_edge_face_add");
2211 uiItemO(layout, "Bevel", 0, "MESH_OT_bevel"); // bevelmenu(em)
2212 uiItemO(layout, "Loop Subdivide...", 0, "MESH_OT_loop_subdivide"); // Ctr R, CutEdgeloop(1);
2213 uiItemO(layout, "Knife Subdivide...", 0, "MESH_OT_loop_subdivide"); // Shift K, KnifeSubdivide(KNIFE_PROMPT);
2218 uiItemO(layout, "Subdivide", 0, "MESH_OT_subdivide");
2219 uiItemFloatO(layout, "Subdivide Smooth", 0, "MESH_OT_subdivide", "smoothness", 1.0f);
2223 uiItemO(layout, "Mark Seam", 0, "MESH_OT_mark_seam");
2224 uiItemBooleanO(layout, "Clear Seam", 0, "MESH_OT_mark_seam", "clear", 1);
2228 uiItemO(layout, "Mark Sharp", 0, "MESH_OT_mark_sharp");
2229 uiItemBooleanO(layout, "Clear Sharp", 0, "MESH_OT_mark_sharp", "clear", 1);
2233 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2234 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Adjust Bevel Weight|Ctrl Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2236 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2237 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2242 uiItemEnumO(layout, "Rotate Edge CW", 0, "MESH_OT_edge_rotate", "direction", 1);
2243 uiItemEnumO(layout, "Rotate Edge CCW", 0, "MESH_OT_edge_rotate", "direction", 2);
2246 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2247 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2249 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Collapse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
2253 static void view3d_edit_mesh_facesmenu(bContext *C, uiLayout *layout, void *arg_unused)
2255 uiItemO(layout, NULL, 0, "MESH_OT_edge_face_add");
2256 uiItemO(layout, NULL, 0, "MESH_OT_fill");
2257 uiItemO(layout, NULL, 0, "MESH_OT_beauty_fill");
2261 uiItemO(layout, NULL, 0, "MESH_OT_quads_convert_to_tris");
2262 uiItemO(layout, NULL, 0, "MESH_OT_tris_convert_to_quads");
2263 uiItemO(layout, NULL, 0, "MESH_OT_edge_flip");
2267 uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_smooth");
2268 uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_flat");
2271 static void view3d_edit_mesh_normalsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2273 uiItemO(layout, "Recalculate Outside", 0, "MESH_OT_normals_make_consistent");
2274 uiItemBooleanO(layout, "Recalculate Inside", 0, "MESH_OT_normals_make_consistent", "inside", 1);
2278 uiItemO(layout, NULL, 0, "MESH_OT_flip_normals");
2281 void do_view3d_edit_mirrormenu(bContext *C, void *arg, int event)
2290 initTransform(TFM_MIRROR, CTX_NO_PET);
2294 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2295 BIF_setSingleAxisConstraint(mat[0], " on global X axis");
2299 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2300 BIF_setSingleAxisConstraint(mat[1], " on global Y axis");
2304 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2305 BIF_setSingleAxisConstraint(mat[2], "on global Z axis");
2309 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2310 BIF_setLocalAxisConstraint('X', " on local X axis");
2314 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2315 BIF_setLocalAxisConstraint('Y', " on local Y axis");
2319 initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2320 BIF_setLocalAxisConstraint('Z', " on local Z axis");
2327 static uiBlock *view3d_edit_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
2330 short yco = 20, menuwidth = 120;
2332 block= uiBeginBlock(C, ar, "view3d_edit_mirrormenu", UI_EMBOSSP);
2333 uiBlockSetButmFunc(block, do_view3d_edit_mirrormenu, NULL);
2335 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2337 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2339 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|Ctrl M, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2340 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|Ctrl M, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2341 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|Ctrl M, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2343 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2345 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2346 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2347 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2349 uiBlockSetDirection(block, UI_RIGHT);
2350 uiTextBoundsBlock(block, 60);
2354 static void view3d_edit_mesh_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
2356 uiItemO(layout, NULL, 0, "MESH_OT_reveal");
2357 uiItemO(layout, NULL, 0, "MESH_OT_hide");
2358 uiItemBooleanO(layout, "Hide Unselected", 0, "MESH_OT_hide", "unselected", 1);
2361 #ifndef DISABLE_PYTHON
2363 static void do_view3d_edit_mesh_scriptsmenu(bContext *C, void *arg, int event)
2365 BPY_menu_do_python(PYMENU_MESH, event);
2368 static uiBlock *view3d_edit_mesh_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
2371 // short yco = 20, menuwidth = 120;
2372 // XXX BPyMenu *pym;
2375 block= uiBeginBlock(C, ar, "v3d_emesh_pymenu", UI_EMBOSSP);
2376 uiBlockSetButmFunc(block, do_view3d_edit_mesh_scriptsmenu, NULL);
2378 // for (pym = BPyMenuTable[PYMENU_MESH]; pym; pym = pym->next, i++) {
2379 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, i, pym->tooltip?pym->tooltip:pym->filename);
2382 uiBlockSetDirection(block, UI_RIGHT);
2383 uiTextBoundsBlock(block, 60);
2388 #endif /* DISABLE_PYTHON */
2391 static void do_view3d_edit_meshmenu(bContext *C, void *arg, int event)
2393 ScrArea *sa= CTX_wm_area(C);
2397 case 2: /* transform properties */
2398 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, 0);
2400 case 4: /* insert keyframe */
2403 case 16: /* delete keyframe */
2410 static void view3d_edit_meshmenu(bContext *C, uiLayout *layout, void *arg_unused)
2412 Scene *scene= CTX_data_scene(C);
2413 ToolSettings *ts= CTX_data_tool_settings(C);
2416 RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &tsptr);
2418 uiItemO(layout, "Undo Editing", 0, "ED_OT_undo");
2419 uiItemO(layout, "Redo Editing", 0, "ED_OT_redo");
2422 uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
2428 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2429 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, 120, 19, "");
2430 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2433 uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2438 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2439 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2444 uiItemO(layout, NULL, 0, "UV_OT_mapping_menu");
2448 uiItemO(layout, NULL, 0, "MESH_OT_extrude");
2449 uiItemO(layout, NULL, 0, "MESH_OT_duplicate");
2450 uiItemO(layout, "Delete...", 0, "MESH_OT_delete");
2454 uiItemMenuF(layout, "Vertices", 0, view3d_edit_mesh_verticesmenu);
2455 uiItemMenuF(layout, "Edges", 0, view3d_edit_mesh_edgesmenu);
2456 uiItemMenuF(layout, "Faces", 0, view3d_edit_mesh_facesmenu);
2457 uiItemMenuF(layout, "Normals", 0, view3d_edit_mesh_normalsmenu);
2461 uiItemR(layout, NULL, 0, &tsptr, "automerge_editing", 0, 0, 0);
2462 uiItemR(layout, NULL, 0, &tsptr, "proportional_editing", 0, 0, 0); // |O
2463 uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O
2467 uiItemMenuF(layout, "Show/Hide", 0, view3d_edit_mesh_showhidemenu);
2470 #ifndef DISABLE_PYTHON
2472 uiDefIconTextBlockBut(block, view3d_edit_mesh_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2477 static void view3d_edit_curve_controlpointsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2479 Object *obedit= CTX_data_edit_object(C);
2481 if(obedit->type == OB_CURVE) {
2482 uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TILT);
2483 uiItemO(layout, NULL, 0, "CURVE_OT_tilt_clear");
2484 uiItemO(layout, NULL, 0, "CURVE_OT_separate");
2488 uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 1);
2489 uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 3);
2490 uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 2);
2495 // XXX uiItemO(layout, NULL, 0, "OBJECT_OT_make_vertex_parent"); Make VertexParent|Ctrl P
2497 // XXX uiItemO(layout, NULL, 0, "OBJECT_OT_add_hook"); Add Hook| Ctrl H
2501 static void view3d_edit_curve_segmentsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2503 uiItemO(layout, NULL, 0, "CURVE_OT_subdivide");
2504 uiItemO(layout, NULL, 0, "CURVE_OT_switch_direction");
2507 static void view3d_edit_curve_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
2509 uiItemO(layout, NULL, 0, "CURVE_OT_reveal");
2510 uiItemO(layout, NULL, 0, "CURVE_OT_hide");
2511 uiItemBooleanO(layout, "Hide Unselected", 0, "CURVE_OT_hide", "unselected", 1);
2514 static void view3d_edit_curvemenu(bContext *C, uiLayout *layout, void *arg_unused)
2516 Scene *scene= CTX_data_scene(C);
2517 ToolSettings *ts= CTX_data_tool_settings(C);
2520 RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &tsptr);
2523 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2524 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2525 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2528 uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2532 // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2533 // common_insertkey();
2534 // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2535 // common_deletekey();
2538 uiItemO(layout, NULL, 0, "CURVE_OT_extrude");
2539 uiItemO(layout, NULL, 0, "CURVE_OT_duplicate");
2540 uiItemO(layout, NULL, 0, "CURVE_OT_separate");
2541 uiItemO(layout, NULL, 0, "CURVE_OT_make_segment");
2542 uiItemO(layout, NULL, 0, "CURVE_OT_cyclic_toggle");
2543 uiItemO(layout, NULL, 0, "CURVE_OT_delete"); // Delete...
2547 uiItemMenuF(layout, "Control Points", 0, view3d_edit_curve_controlpointsmenu);
2548 uiItemMenuF(layout, "Segments", 0, view3d_edit_curve_segmentsmenu);
2552 uiItemR(layout, NULL, 0, &tsptr, "proportional_editing", 0, 0, 0); // |O
2553 uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O
2557 uiItemMenuF(layout, "Show/Hide Control Points", 0, view3d_edit_curve_showhidemenu);
2560 static void do_view3d_edit_mball_showhidemenu(bContext *C, void *arg, int event)
2564 case 10: /* show hidden control points */
2567 case 11: /* hide selected control points */
2570 case 12: /* hide selected control points */
2577 static uiBlock *view3d_edit_mball_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
2580 short yco = 20, menuwidth = 120;
2582 block= uiBeginBlock(C, ar, "view3d_edit_mball_showhidemenu", UI_EMBOSSP);
2583 uiBlockSetButmFunc(block, do_view3d_edit_mball_showhidemenu, NULL);
2585 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2586 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2587 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2589 uiBlockSetDirection(block, UI_RIGHT);
2590 uiTextBoundsBlock(block, 60);
2593 static void do_view3d_edit_metaballmenu(bContext *C, void *arg, int event)
2596 Scene *scene= CTX_data_scene(C);
2597 ScrArea *sa= CTX_wm_area(C);
2598 View3D *v3d= sa->spacedata.first;
2607 case 3: /* duplicate */
2608 duplicate_context_selected();
2610 case 4: /* delete */
2611 delete_context_selected();
2614 initTransform(TFM_SHEAR, CTX_NONE);
2618 initTransform(TFM_WARP, CTX_NONE);
2621 case 7: /* Transform Properties */
2622 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, 0);
2628 static uiBlock *view3d_edit_metaballmenu(bContext *C, ARegion *ar, void *arg_unused)
2631 short yco= 0, menuwidth=120;
2633 block= uiBeginBlock(C, ar, "view3d_edit_metaballmenu", UI_EMBOSSP);
2634 uiBlockSetButmFunc(block, do_view3d_edit_metaballmenu, NULL);
2636 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2637 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Redo Editing|Shift Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2638 // XXX uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
2640 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2642 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N",0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
2643 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2644 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2645 // XXX uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2647 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2649 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2650 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2652 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2654 uiDefIconTextBlockBut(block, view3d_edit_mball_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Hide MetaElems", 0, yco-=20, 120, 19, "");
2656 if(ar->alignment==RGN_ALIGN_TOP) {
2657 uiBlockSetDirection(block, UI_DOWN);
2660 uiBlockSetDirection(block, UI_TOP);
2661 uiBlockFlipOrder(block);
2664 uiTextBoundsBlock(block, 50);
2668 static void view3d_edit_text_charsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2670 /* the character codes are specified in UTF-8 */
2672 uiItemStringO(layout, "Copyright|Alt C", 0, "FONT_OT_text_insert", "text", "\xC2\xA9");
2673 uiItemStringO(layout, "Registered Trademark|Alt R", 0, "FONT_OT_text_insert", "text", "\xC2\xAE");
2677 uiItemStringO(layout, "Degree Sign|Alt G", 0, "FONT_OT_text_insert", "text", "\xC2\xB0");
2678 uiItemStringO(layout, "Multiplication Sign|Alt x", 0, "FONT_OT_text_insert", "text", "\xC3\x97");
2679 uiItemStringO(layout, "Circle|Alt .", 0, "FONT_OT_text_insert", "text", "\xC2\x8A");
2680 uiItemStringO(layout, "Superscript 1|Alt 1", 0, "FONT_OT_text_insert", "text", "\xC2\xB9");
2681 uiItemStringO(layout, "Superscript 2|Alt 2", 0, "FONT_OT_text_insert", "text", "\xC2\xB2");
2682 uiItemStringO(layout, "Superscript 3|Alt 3", 0, "FONT_OT_text_insert", "text", "\xC2\xB3");
2683 uiItemStringO(layout, "Double >>|Alt >", 0, "FONT_OT_text_insert", "text", "\xC2\xBB");
2684 uiItemStringO(layout, "Double <<|Alt <", 0, "FONT_OT_text_insert", "text", "\xC2\xAB");
2685 uiItemStringO(layout, "Promillage|Alt %", 0, "FONT_OT_text_insert", "text", "\xE2\x80\xB0");
2689 uiItemStringO(layout, "Dutch Florin|Alt F", 0, "FONT_OT_text_insert", "text", "\xC2\xA4");
2690 uiItemStringO(layout, "British Pound|Alt L", 0, "FONT_OT_text_insert", "text", "\xC2\xA3");
2691 uiItemStringO(layout, "Japanese Yen|Alt Y", 0, "FONT_OT_text_insert", "text", "\xC2\xA5");
2695 uiItemStringO(layout, "German S|Alt S", 0, "FONT_OT_text_insert", "text", "\xC3\x9F");
2696 uiItemStringO(layout, "Spanish Question Mark|Alt ?", 0, "FONT_OT_text_insert", "text", "\xC2\xBF");
2697 uiItemStringO(layout, "Spanish Exclamation Mark|Alt !", 0, "FONT_OT_text_insert", "text", "\xC2\xA1");
2700 static void view3d_edit_textmenu(bContext *C, uiLayout *layout, void *arg_unused)
2702 uiItemO(layout, NULL, 0, "FONT_OT_file_paste");
2704 uiItemMenuF(layout, "Special Characters", 0, view3d_edit_text_charsmenu);
2707 static void view3d_edit_latticemenu(bContext *C, uiLayout *layout, void *arg_unused)
2709 Scene *scene= CTX_data_scene(C);
2710 ToolSettings *ts= CTX_data_tool_settings(C);
2713 RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &tsptr);
2716 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2718 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2720 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2721 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2724 uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2728 // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2729 // common_insertkey();
2730 // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2731 // common_deletekey();
2733 uiItemO(layout, NULL, 0, "LATTICE_OT_make_regular");
2737 uiItemR(layout, NULL, 0, &tsptr, "proportional_editing", 0, 0, 0); // |O
2738 uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O
2741 void do_view3d_edit_armature_parentmenu(bContext *C, void *arg, int event)
2749 clear_bone_parent();
2755 static uiBlock *view3d_edit_armature_parentmenu(bContext *C, ARegion *ar, void *arg_unused)
2758 short yco = 20, menuwidth = 120;
2760 block= uiBeginBlock(C, ar, "view3d_edit_armature_parentmenu", UI_EMBOSSP);
2761 uiBlockSetButmFunc(block, do_view3d_edit_armature_parentmenu, NULL);
2763 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2764 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2766 uiBlockSetDirection(block, UI_RIGHT);
2767 uiTextBoundsBlock(block, 60);
2771 void do_view3d_edit_armature_rollmenu(bContext *C, void *arg, int event)
2774 if (event == 1 || event == 2)
2775 /* set roll based on aligning z-axis */
2776 auto_align_armature(event);
2777 else if (event == 3) {
2778 /* interactively set bone roll */
2779 initTransform(TFM_BONE_ROLL, CTX_NONE);
2785 static uiBlock *view3d_edit_armature_rollmenu(bContext *C, ARegion *ar, void *arg_unused)
2788 short yco = 20, menuwidth = 120;
2790 block= uiBeginBlock(C, ar, "view3d_edit_armature_rollmenu", UI_EMBOSSP);
2791 uiBlockSetButmFunc(block, do_view3d_edit_armature_rollmenu, NULL);
2793 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Roll (Z-Axis Up)|Ctrl N, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2794 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Roll to Cursor|Ctrl N, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2796 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2798 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Roll|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2800 uiBlockSetDirection(block, UI_RIGHT);
2801 uiTextBoundsBlock(block, 60);
2805 static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event)
2808 static short numcuts= 2;
2811 case 0: /* Undo Editing */
2812 remake_editArmature();
2814 case 1: /* transformation properties */
2815 // XXX mainqenter(NKEY, 1);
2817 case 3: /* extrude */
2818 extrude_armature(0);
2820 case 4: /* duplicate */
2821 duplicate_context_selected();
2823 case 5: /* delete */
2824 delete_context_selected();
2827 initTransform(TFM_SHEAR, CTX_NONE);
2831 initTransform(TFM_WARP, CTX_NONE);
2833 case 10: /* forked! */
2834 extrude_armature(1);
2836 case 12: /* subdivide */
2837 subdivide_armature(1);
2839 case 13: /* flip left and right names */
2840 armature_flip_names();
2842 case 15: /* subdivide multi */
2843 if(button(&numcuts, 1, 128, "Number of Cuts:")==0) return;
2845 subdivide_armature(numcuts);
2847 case 16: /* Alt-S transform (BoneSize) */
2848 initTransform(TFM_BONESIZE, CTX_NONE);
2851 case 17: /* move to layer */
2854 case 18: /* merge bones */
2857 case 19: /* auto-extensions */
2860 armature_autoside_names(event-19);
2862 case 22: /* separate */
2863 separate_armature();
2865 case 23: /* bone sketching panel */
2866 add_blockhandler(curarea, VIEW3D_HANDLER_BONESKETCH, UI_PNL_UNSTOW);
2874 #ifndef DISABLE_PYTHON
2875 static void do_view3d_scripts_armaturemenu(bContext *C, void *arg, int event)
2878 BPY_menu_do_python(PYMENU_ARMATURE, event);
2883 static uiBlock *view3d_scripts_armaturemenu(bContext *C, ARegion *ar, void *arg_unused)
2886 // XXX BPyMenu *pym;
2888 // short yco = 20, menuwidth = 120;
2890 block= uiBeginBlock(C, ar, "view3d_scripts_armaturemenu", UI_EMBOSSP);
2891 uiBlockSetButmFunc(block, do_view3d_scripts_armaturemenu, NULL);
2893 /* note that we acount for the N previous entries with i+20: */
2894 // for (pym = BPyMenuTable[PYMENU_ARMATURE]; pym; pym = pym->next, i++) {
2896 // uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20, menuwidth, 19,
2897 // NULL, 0.0, 0.0, 1, i,
2898 // pym->tooltip?pym->tooltip:pym->filename);
2901 uiBlockSetDirection(block, UI_RIGHT);
2902 uiTextBoundsBlock(block, 60);
2906 #endif /* DISABLE_PYTHON */
2908 static void do_view3d_armature_settingsmenu(bContext *C, void *arg, int event)
2910 // XXX setflag_armature(event);
2913 static uiBlock *view3d_armature_settingsmenu(bContext *C, ARegion *ar, void *arg_unused)
2916 short yco= 0, menuwidth=120;
2918 block= uiBeginBlock(C, ar, "view3d_armature_settingsmenu", UI_EMBOSSP);
2919 uiBlockSetButmFunc(block, do_view3d_armature_settingsmenu, NULL);
2921 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle a Setting|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
2922 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Enable a Setting|Ctrl Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
2923 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Disable a Setting|Alt W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
2925 uiBlockSetDirection(block, UI_RIGHT);
2926 uiTextBoundsBlock(block, 60);
2931 static uiBlock *view3d_edit_armaturemenu(bContext *C, ARegion *ar, void *arg_unused)
2933 Object *obedit = CTX_data_edit_object(C);
2934 bArmature *arm= obedit->data;
2936 short yco= 0, menuwidth=120;
2938 block= uiBeginBlock(C, ar, "view3d_edit_armaturemenu", UI_EMBOSSP);
2939 uiBlockSetButmFunc(block, do_view3d_edit_armaturemenu, NULL);
2941 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2943 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2945 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2946 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Bone Sketching|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 23, "");
2947 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2948 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2949 // XXX uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2950 uiDefIconTextBlockBut(block, view3d_edit_armature_rollmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Roll", 0, yco-=20, 120, 19, "");
2952 if (arm->drawtype==ARM_ENVELOPE)
2953 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale Envelope Distance|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2954 else if (arm->drawtype==ARM_B_BONE)
2955 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale B-Bone Width|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2957 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2959 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2960 if (arm->flag & ARM_MIRROR_EDIT)
2961 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude Forked|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2963 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2964 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2965 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Fill Between Joints|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2966 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2968 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|Ctrl Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2970 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2972 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2973 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Multi|W, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2974 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip Left & Right Names|W, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2975 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Left-Right|W, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2976 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Front-Back|W, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
2977 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "AutoName Top-Bottom|W, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2979 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2981 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Switch Armature Layers|Shift M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2982 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move Bone To Layer|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2984 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2986 uiDefIconTextBlockBut(block, view3d_edit_armature_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2987 uiDefIconTextBlockBut(block, view3d_armature_settingsmenu, NULL, ICON_RIGHTARROW_THIN, "Bone Settings", 0, yco-=20, 120, 19, "");
2989 #ifndef DISABLE_PYTHON
2990 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");