2 * header_view3d.c oct-2003
4 * Functions to draw the "3D Viewport" window header
5 * and handle user events sent to it.
9 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU General Public License
13 * as published by the Free Software Foundation; either version 2
14 * of the License, or (at your option) any later version. The Blender
15 * Foundation also sells licenses for use in proprietary software under
16 * the Blender License. See http://www.blender.org/BL/ for information
19 * This program is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
24 * You should have received a copy of the GNU General Public License
25 * along with this program; if not, write to the Free Software Foundation,
26 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
28 * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
29 * All rights reserved.
31 * The Original Code is: all of this file.
33 * Contributor(s): none yet.
35 * ***** END GPL/BL DUAL LICENSE BLOCK *****
46 #include "BIF_language.h"
48 #include "MEM_guardedalloc.h"
51 #include "DNA_mesh_types.h"
52 #include "DNA_object_types.h"
53 #include "DNA_scene_types.h"
54 #include "DNA_screen_types.h"
55 #include "DNA_space_types.h"
56 #include "DNA_view3d_types.h"
57 #include "DNA_image_types.h"
58 #include "DNA_texture_types.h"
60 #include "BKE_library.h"
61 #include "BKE_curve.h"
62 #include "BKE_displist.h"
63 #include "BKE_effect.h"
64 #include "BKE_global.h"
67 #include "BKE_image.h"
69 #include "BLI_blenlib.h"
72 #include "BSE_editaction.h"
73 #include "BSE_editipo.h"
74 #include "BSE_headerbuttons.h"
78 #include "BDR_editcurve.h"
79 #include "BDR_editface.h"
80 #include "BDR_editmball.h"
81 #include "BDR_editobject.h"
82 #include "BDR_vpaint.h"
84 #include "BIF_editlattice.h"
85 #include "BIF_editarmature.h"
86 #include "BIF_editdeform.h"
87 #include "BIF_editfont.h"
88 #include "BIF_editmesh.h"
89 #include "BIF_editmode_undo.h"
90 #include "BIF_editview.h"
91 #include "BIF_interface.h"
92 #include "BIF_mainqueue.h"
93 #include "BIF_meshtools.h"
94 #include "BIF_poseobject.h"
95 #include "BIF_renderwin.h"
96 #include "BIF_resources.h"
97 #include "BIF_screen.h"
98 #include "BIF_space.h"
99 #include "BIF_toets.h"
100 #include "BIF_toolbox.h"
102 #include "BIF_transform.h"
104 #include "BPY_extern.h"
105 #include "BPY_menus.h"
108 #include "mydevice.h"
109 #include "butspace.h"
111 #include "BIF_poseobject.h"
113 #include "TPT_DependKludge.h"
115 /* View3d->modeselect
116 * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
117 * rather than those buttons.
118 * I know the implementation's not good - it's an experiment to see if this
119 * approach would work well
121 * This can be cleaned when I make some new 'mode' icons.
124 #define V3D_OBJECTMODE_SEL ICON_OBJECT
125 #define V3D_EDITMODE_SEL ICON_EDITMODE_HLT
126 #define V3D_FACESELECTMODE_SEL ICON_FACESEL_HLT
127 #define V3D_VERTEXPAINTMODE_SEL ICON_VPAINT_HLT
128 #define V3D_TEXTUREPAINTMODE_SEL ICON_TPAINT_HLT
129 #define V3D_WEIGHTPAINTMODE_SEL ICON_WPAINT_HLT
130 #define V3D_POSEMODE_SEL ICON_POSE_HLT
132 #define TEST_EDITMESH if(G.obedit==0) return; \
133 if( (G.vd->lay & G.obedit->lay)==0 ) return;
135 static int viewmovetemp = 0;
137 void do_layer_buttons(short event)
139 static int oldlay= 1;
142 if(G.vd->localview) return;
144 if(event==-1 && (G.qual & LR_CTRLKEY)) {
145 G.vd->scenelock= !G.vd->scenelock;
146 do_view3d_buttons(B_SCENELOCK);
147 } else if (event==-1) {
148 if(G.vd->lay== (2<<20)-1) {
149 if(G.qual & LR_SHIFTKEY) G.vd->lay= oldlay;
153 G.vd->lay= (2<<20)-1;
156 if(G.vd->scenelock) handle_view3d_lock();
157 scrarea_queue_winredraw(curarea);
160 if(G.qual & LR_ALTKEY) {
161 if(event<11) event+= 10;
163 if(G.qual & LR_SHIFTKEY) {
164 if(G.vd->lay & (1<<event)) G.vd->lay -= (1<<event);
165 else G.vd->lay += (1<<event);
167 do_view3d_buttons(event+B_LAY);
169 /* redraw seems double: but the queue nicely handles that */
170 scrarea_queue_headredraw(curarea);
172 if(curarea->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */
173 if(G.vd->drawtype == OB_SHADED) reshadeall_displist();
176 static void do_view3d_view_cameracontrolsmenu(void *arg, int event)
179 case 0: /* Orbit Left */
182 case 1: /* Orbit Right */
185 case 2: /* Orbit Up */
188 case 3: /* Orbit Down */
191 case 4: /* Pan left */
192 /* ugly hack alert */
193 G.qual |= LR_CTRLKEY;
195 G.qual &= ~LR_CTRLKEY;
197 case 5: /* Pan right */
198 /* ugly hack alert */
199 G.qual |= LR_CTRLKEY;
201 G.qual &= ~LR_CTRLKEY;
204 /* ugly hack alert */
205 G.qual |= LR_CTRLKEY;
207 G.qual &= ~LR_CTRLKEY;
209 case 7: /* Pan down */
210 /* ugly hack alert */
211 G.qual |= LR_CTRLKEY;
213 G.qual &= ~LR_CTRLKEY;
215 case 8: /* Zoom In */
216 persptoetsen(PADPLUSKEY);
218 case 9: /* Zoom Out */
219 persptoetsen(PADMINUS);
221 case 10: /* Reset Zoom */
222 persptoetsen(PADENTER);
225 allqueue(REDRAWVIEW3D, 0);
228 static uiBlock *view3d_view_cameracontrolsmenu(void *arg_unused)
230 /* static short tog=0; */
232 short yco= 0, menuwidth=120;
234 block= uiNewBlock(&curarea->uiblocks, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
235 uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
237 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
238 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
239 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
240 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
242 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
244 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
245 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
246 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
247 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
249 uiDefBut(block, SEPR, 0, "", 0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
251 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
252 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
253 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
255 uiBlockSetDirection(block, UI_RIGHT);
256 uiTextBoundsBlock(block, 50);
260 static void do_view3d_view_alignviewmenu(void *arg, int event)
262 View3D *v3d= curarea->spacedata.first;
267 case 0: /* Align View to Selected (edit/faceselect mode) */
270 if ((G.obedit) && (G.obedit->type == OB_MESH)) {
271 editmesh_align_view_to_selected(v3d, event);
272 } else if (G.f & G_FACESELECT) {
273 Object *obact= OBACT;
274 if (obact && obact->type==OB_MESH) {
275 Mesh *me= obact->data;
278 faceselect_align_view_to_selected(v3d, me, event);
279 addqueue(v3d->area->win, REDRAW, 1);
284 case 3: /* Center View to Cursor */
286 G.vd->ofs[0]= -curs[0];
287 G.vd->ofs[1]= -curs[1];
288 G.vd->ofs[2]= -curs[2];
289 scrarea_queue_winredraw(curarea);
291 case 4: /* Align Active Camera to View */
292 /* This ugly hack is a symptom of the nasty persptoetsen function,
293 * but at least it works for now.
295 G.qual |= LR_CTRLKEY|LR_ALTKEY;
297 G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
299 case 5: /* Align View to Selected (object mode) */
300 mainqenter(PADASTERKEY, 1);
302 case 6: /* Center View and Cursor to Origin */
305 curs[0]=curs[1]=curs[2]= 0.0;
308 allqueue(REDRAWVIEW3D, 0);
311 static uiBlock *view3d_view_alignviewmenu(void *arg_unused)
313 /* static short tog=0; */
315 short yco= 0, menuwidth=120;
317 block= uiNewBlock(&curarea->uiblocks, "view3d_view_alignviewmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
318 uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
320 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
321 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, "");
322 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, "");
324 if (((G.obedit) && (G.obedit->type == OB_MESH)) || (G.f & G_FACESELECT)) {
325 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, "");
326 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, "");
327 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, "");
329 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
332 uiBlockSetDirection(block, UI_RIGHT);
333 uiTextBoundsBlock(block, 50);
337 static void do_view3d_viewmenu(void *arg, int event)
339 extern int play_anim(int mode);
358 case 5: /* Perspective */
361 case 6: /* Orthographic */
364 case 7: /* Local View */
368 case 8: /* Global View */
370 endlocalview(curarea);
372 case 9: /* View All (Home) */
375 case 11: /* View Selected */
378 case 13: /* Play Back Animation */
381 case 15: /* Background Image... */
382 add_blockhandler(curarea, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
384 case 16: /* View Panel */
385 add_blockhandler(curarea, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
388 allqueue(REDRAWVIEW3D, 1);
391 static uiBlock *view3d_viewmenu(void *arg_unused)
393 /* static short tog=0; */
395 short yco= 0, menuwidth=120;
397 block= uiNewBlock(&curarea->uiblocks, "view3d_viewmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
398 uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
400 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
401 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
403 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
405 if ((G.vd->viewbut == 0) && !(G.vd->persp == 2)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
406 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
407 if (G.vd->persp == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
408 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
409 if (G.vd->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
410 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
411 if (G.vd->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
412 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
413 if (G.vd->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
414 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
416 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
418 if(G.vd->persp==1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
419 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
420 if(G.vd->persp==0) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
421 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
423 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
425 if(G.vd->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
426 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
427 if(!G.vd->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
428 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
430 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
432 uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
433 uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
435 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
437 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
438 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
439 if(!curarea->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
440 else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
442 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
444 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
446 if(curarea->headertype==HEADERTOP) {
447 uiBlockSetDirection(block, UI_DOWN);
450 uiBlockSetDirection(block, UI_TOP);
451 uiBlockFlipOrder(block);
454 uiTextBoundsBlock(block, 50);
459 void do_view3d_select_object_typemenu(void *arg, int event)
462 extern void selectall_type(short obtype);
466 selectall_type(OB_MESH);
469 selectall_type(OB_CURVE);
471 case 3: /* Surface */
472 selectall_type(OB_SURF);
475 selectall_type(OB_MBALL);
477 case 5: /* Armature */
478 selectall_type(OB_ARMATURE);
480 case 6: /* Lattice */
481 selectall_type(OB_LATTICE);
484 selectall_type(OB_FONT);
487 selectall_type(OB_EMPTY);
490 selectall_type(OB_CAMERA);
493 selectall_type(OB_LAMP);
496 allqueue(REDRAWVIEW3D, 0);
499 static uiBlock *view3d_select_object_typemenu(void *arg_unused)
502 short yco = 20, menuwidth = 120;
504 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
505 uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
507 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
508 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
509 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
510 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
512 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
514 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
515 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
516 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
517 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
519 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
521 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
522 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
524 uiBlockSetDirection(block, UI_RIGHT);
525 uiTextBoundsBlock(block, 60);
529 void do_view3d_select_object_layermenu(void *arg, int event)
531 extern void selectall_layer(unsigned int layernum);
555 selectall_layer(event);
558 allqueue(REDRAWVIEW3D, 0);
561 static uiBlock *view3d_select_object_layermenu(void *arg_unused)
564 short xco= 0, yco = 20, menuwidth = 22;
566 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
567 uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
569 uiDefBut(block, BUTM, 1, "1", xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
570 uiDefBut(block, BUTM, 1, "2", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
571 uiDefBut(block, BUTM, 1, "3", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
572 uiDefBut(block, BUTM, 1, "4", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
573 uiDefBut(block, BUTM, 1, "5", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
575 uiDefBut(block, BUTM, 1, "6", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
576 uiDefBut(block, BUTM, 1, "7", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
577 uiDefBut(block, BUTM, 1, "8", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
578 uiDefBut(block, BUTM, 1, "9", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
579 uiDefBut(block, BUTM, 1, "10", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
581 uiDefBut(block, BUTM, 1, "11", xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
582 uiDefBut(block, BUTM, 1, "12", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
583 uiDefBut(block, BUTM, 1, "13", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
584 uiDefBut(block, BUTM, 1, "14", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
585 uiDefBut(block, BUTM, 1, "15", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
587 uiDefBut(block, BUTM, 1, "16", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
588 uiDefBut(block, BUTM, 1, "17", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
589 uiDefBut(block, BUTM, 1, "18", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
590 uiDefBut(block, BUTM, 1, "19", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
591 uiDefBut(block, BUTM, 1, "20", xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
593 uiBlockSetDirection(block, UI_RIGHT);
594 //uiTextBoundsBlock(block, 100);
598 void do_view3d_select_object_linkedmenu(void *arg, int event)
601 case 1: /* Object Ipo */
603 case 3: /* Current Material */
604 case 4: /* Current Texture */
608 allqueue(REDRAWVIEW3D, 0);
611 static uiBlock *view3d_select_object_linkedmenu(void *arg_unused)
614 short yco = 20, menuwidth = 120;
616 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_linkedmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
617 uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
619 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
620 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
621 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
622 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
624 uiBlockSetDirection(block, UI_RIGHT);
625 uiTextBoundsBlock(block, 60);
629 void do_view3d_select_object_groupedmenu(void *arg, int event)
632 case 1: /* Children */
633 case 2: /* Immediate Children */
635 case 4: /* Objects on Shared Layers */
636 select_group((short)event);
639 allqueue(REDRAWVIEW3D, 0);
642 static uiBlock *view3d_select_object_groupedmenu(void *arg_unused)
645 short yco = 20, menuwidth = 120;
647 block= uiNewBlock(&curarea->uiblocks, "view3d_select_object_groupedmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
648 uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
650 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
651 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
652 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
653 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects on Shared Layers|Shift G, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
655 uiBlockSetDirection(block, UI_RIGHT);
656 uiTextBoundsBlock(block, 60);
660 static void do_view3d_select_objectmenu(void *arg, int event)
664 case 0: /* border select */
667 case 1: /* Select/Deselect All */
671 allqueue(REDRAWVIEW3D, 0);
674 static uiBlock *view3d_select_objectmenu(void *arg_unused)
677 short yco= 0, menuwidth=120;
679 block= uiNewBlock(&curarea->uiblocks, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
680 uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
682 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
684 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
686 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
687 uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
688 uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
690 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
692 uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
693 uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
695 if(curarea->headertype==HEADERTOP) {
696 uiBlockSetDirection(block, UI_DOWN);
699 uiBlockSetDirection(block, UI_TOP);
700 uiBlockFlipOrder(block);
703 uiTextBoundsBlock(block, 50);
707 void do_view3d_select_meshmenu(void *arg, int event)
709 // extern void borderselect(void);
713 case 0: /* border select */
716 case 2: /* Select/Deselect all */
719 case 3: /* Inverse */
722 case 4: /* select linked vertices */
723 selectconnected_mesh(LR_CTRLKEY);
725 case 5: /* select random */
728 case 6: /* select Faceloop */
729 loopoperations(LOOP_SELECT);
731 case 7: /* select more */
734 case 8: /* select less */
737 case 9: /* select less */
738 select_non_manifold();
740 case 10: /* select vertexloop */
741 vertex_loop_select();
744 allqueue(REDRAWVIEW3D, 0);
748 static uiBlock *view3d_select_meshmenu(void *arg_unused)
751 short yco= 0, menuwidth=120;
753 block= uiNewBlock(&curarea->uiblocks, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
754 uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
756 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
758 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
760 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
761 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
763 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
764 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
766 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
767 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1,
768 "Non-Manifold|Ctrl Alt Shift M",
769 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
771 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
772 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
774 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
775 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
776 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
777 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
779 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
780 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
782 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Face Loop...|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
783 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Loop|Alt B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
784 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
786 if(curarea->headertype==HEADERTOP) {
787 uiBlockSetDirection(block, UI_DOWN);
790 uiBlockSetDirection(block, UI_TOP);
791 uiBlockFlipOrder(block);
794 uiTextBoundsBlock(block, 50);
798 void do_view3d_select_curvemenu(void *arg, int event)
800 // extern void borderselect(void);
803 case 0: /* border select */
806 case 2: /* Select/Deselect all */
809 case 3: /* Inverse */
812 //case 4: /* select connected control points */
813 //G.qual |= LR_CTRLKEY;
814 //selectconnected_nurb();
815 //G.qual &= ~LR_CTRLKEY;
817 case 5: /* select row (nurb) */
821 allqueue(REDRAWVIEW3D, 0);
825 static uiBlock *view3d_select_curvemenu(void *arg_unused)
828 short yco= 0, menuwidth=120;
830 block= uiNewBlock(&curarea->uiblocks, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
831 uiBlockSetButmFunc(block, do_view3d_select_curvemenu, NULL);
833 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
835 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
837 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
838 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
840 if (OBACT->type == OB_SURF) {
841 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
843 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
845 /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
846 //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
848 if(curarea->headertype==HEADERTOP) {
849 uiBlockSetDirection(block, UI_DOWN);
852 uiBlockSetDirection(block, UI_TOP);
853 uiBlockFlipOrder(block);
856 uiTextBoundsBlock(block, 50);
860 static void do_view3d_select_metaballmenu(void *arg, int event)
864 case 0: /* border select */
867 case 2: /* Select/Deselect all */
871 allqueue(REDRAWVIEW3D, 0);
875 static uiBlock *view3d_select_metaballmenu(void *arg_unused)
878 short yco= 0, menuwidth=120;
880 block= uiNewBlock(&curarea->uiblocks, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
881 uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
883 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
885 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
887 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
889 if(curarea->headertype==HEADERTOP) {
890 uiBlockSetDirection(block, UI_DOWN);
893 uiBlockSetDirection(block, UI_TOP);
894 uiBlockFlipOrder(block);
897 uiTextBoundsBlock(block, 50);
901 static void do_view3d_select_latticemenu(void *arg, int event)
903 // extern void borderselect(void);
906 case 0: /* border select */
909 case 2: /* Select/Deselect all */
913 allqueue(REDRAWVIEW3D, 0);
916 static uiBlock *view3d_select_latticemenu(void *arg_unused)
919 short yco= 0, menuwidth=120;
921 block= uiNewBlock(&curarea->uiblocks, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
922 uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
924 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
926 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
928 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
930 if(curarea->headertype==HEADERTOP) {
931 uiBlockSetDirection(block, UI_DOWN);
934 uiBlockSetDirection(block, UI_TOP);
935 uiBlockFlipOrder(block);
938 uiTextBoundsBlock(block, 50);
942 static void do_view3d_select_armaturemenu(void *arg, int event)
944 // extern void borderselect(void);
947 case 0: /* border select */
950 case 2: /* Select/Deselect all */
951 deselectall_armature();
954 allqueue(REDRAWVIEW3D, 0);
957 static uiBlock *view3d_select_armaturemenu(void *arg_unused)
960 short yco= 0, menuwidth=120;
962 block= uiNewBlock(&curarea->uiblocks, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
963 uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
965 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
967 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
969 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
971 if(curarea->headertype==HEADERTOP) {
972 uiBlockSetDirection(block, UI_DOWN);
975 uiBlockSetDirection(block, UI_TOP);
976 uiBlockFlipOrder(block);
979 uiTextBoundsBlock(block, 50);
983 static void do_view3d_select_pose_armaturemenu(void *arg, int event)
985 // extern void borderselect(void);
988 case 0: /* border select */
991 case 2: /* Select/Deselect all */
992 deselectall_posearmature(1);
995 allqueue(REDRAWVIEW3D, 0);
998 static uiBlock *view3d_select_pose_armaturemenu(void *arg_unused)
1001 short yco= 0, menuwidth=120;
1003 block= uiNewBlock(&curarea->uiblocks, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1004 uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
1006 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1008 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1010 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1012 if(curarea->headertype==HEADERTOP) {
1013 uiBlockSetDirection(block, UI_DOWN);
1016 uiBlockSetDirection(block, UI_TOP);
1017 uiBlockFlipOrder(block);
1020 uiTextBoundsBlock(block, 50);
1024 static void do_view3d_select_faceselmenu(void *arg, int event)
1026 // extern void borderselect(void);
1028 /* events >= 5 are registered bpython scripts */
1029 if (event >= 5) BPY_menu_do_python(PYMENU_FACESELECT, event - 5);
1032 case 0: /* border select */
1035 case 2: /* Select/Deselect all */
1036 deselectall_tface();
1038 case 3: /* Select Inverse */
1041 case 4: /* Select Same UV */
1045 allqueue(REDRAWVIEW3D, 0);
1048 static uiBlock *view3d_select_faceselmenu(void *arg_unused)
1051 short yco= 0, menuwidth=120;
1055 block= uiNewBlock(&curarea->uiblocks, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1056 uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1058 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1060 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1062 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1063 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1064 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Same UV", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1066 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1068 /* note that we account for the 5 previous entries with i+5: */
1069 for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1070 uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1071 menuwidth, 19, NULL, 0.0, 0.0, 1, i+5,
1072 pym->tooltip?pym->tooltip:pym->filename);
1075 if(curarea->headertype==HEADERTOP) {
1076 uiBlockSetDirection(block, UI_DOWN);
1079 uiBlockSetDirection(block, UI_TOP);
1080 uiBlockFlipOrder(block);
1083 uiTextBoundsBlock(block, 50);
1087 void do_view3d_edit_snapmenu(void *arg, int event)
1090 case 1: /* Selection to grid */
1093 case 2: /* Selection to cursor */
1096 case 3: /* Cursor to grid */
1097 snap_curs_to_grid();
1099 case 4: /* Cursor to selection */
1102 case 5: /* Selection to center of selection*/
1106 allqueue(REDRAWVIEW3D, 0);
1109 static uiBlock *view3d_edit_snapmenu(void *arg_unused)
1112 short yco = 20, menuwidth = 120;
1114 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_snapmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1115 uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
1117 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1118 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Cursor|Shift S, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1119 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Grid|Shift S, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1120 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Selection|Shift S, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1121 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Center|Shift S, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1124 uiBlockSetDirection(block, UI_RIGHT);
1125 uiTextBoundsBlock(block, 60);
1129 void do_view3d_transform_moveaxismenu(void *arg, int event)
1133 case 0: /* X Global */
1136 case 1: /* Y Global */
1139 case 2: /* Z Global */
1142 case 3: /* X Local */
1145 case 4: /* Y Local */
1148 case 5: /* Z Local */
1152 allqueue(REDRAWVIEW3D, 0);
1155 static uiBlock *view3d_transform_moveaxismenu(void *arg_unused)
1158 short yco = 20, menuwidth = 120;
1160 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_moveaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1161 uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1163 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1164 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1165 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1167 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1169 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1170 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1171 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1174 uiBlockSetDirection(block, UI_RIGHT);
1175 uiTextBoundsBlock(block, 60);
1179 void do_view3d_transform_rotateaxismenu(void *arg, int event)
1183 case 0: /* X Global */
1186 case 1: /* Y Global */
1189 case 2: /* Z Global */
1192 case 3: /* X Local */
1195 case 4: /* Y Local */
1198 case 5: /* Z Local */
1202 allqueue(REDRAWVIEW3D, 0);
1205 static uiBlock *view3d_transform_rotateaxismenu(void *arg_unused)
1208 short yco = 20, menuwidth = 120;
1210 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_rotateaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1211 uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1213 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1214 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1215 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1217 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1219 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1220 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1221 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1224 uiBlockSetDirection(block, UI_RIGHT);
1225 uiTextBoundsBlock(block, 60);
1229 void do_view3d_transform_scaleaxismenu(void *arg, int event)
1233 case 0: /* X Global */
1236 case 1: /* Y Global */
1239 case 2: /* Z Global */
1242 case 3: /* X Local */
1245 case 4: /* Y Local */
1248 case 5: /* Z Local */
1252 allqueue(REDRAWVIEW3D, 0);
1255 static uiBlock *view3d_transform_scaleaxismenu(void *arg_unused)
1258 short yco = 20, menuwidth = 120;
1260 block= uiNewBlock(&curarea->uiblocks, "view3d_transform_scaleaxismenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1261 uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1263 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1264 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1265 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1267 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1269 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1270 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1271 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1274 uiBlockSetDirection(block, UI_RIGHT);
1275 uiTextBoundsBlock(block, 60);
1279 static void do_view3d_transformmenu(void *arg, int event)
1283 Transform(TFM_TRANSLATION, CTX_NONE);
1286 Transform(TFM_ROTATION, CTX_NONE);
1289 Transform(TFM_RESIZE, CTX_NONE);
1292 allqueue(REDRAWVIEW3D, 0);
1295 static uiBlock *view3d_transformmenu(void *arg_unused)
1298 short yco = 20, menuwidth = 120;
1300 block= uiNewBlock(&curarea->uiblocks, "view3d_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1301 uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1303 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1304 uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1306 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1307 uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1309 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1310 uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1312 uiBlockSetDirection(block, UI_RIGHT);
1313 uiTextBoundsBlock(block, 60);
1317 void do_view3d_object_mirrormenu(void *arg, int event)
1323 mirror_object(event);
1326 allqueue(REDRAWVIEW3D, 0);
1329 static uiBlock *view3d_object_mirrormenu(void *arg_unused)
1332 short yco = 20, menuwidth = 120;
1334 block= uiNewBlock(&curarea->uiblocks, "view3d_object_mirrormenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1335 uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
1337 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1338 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1339 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1341 uiBlockSetDirection(block, UI_RIGHT);
1342 uiTextBoundsBlock(block, 60);
1346 static void do_view3d_edit_object_transformmenu(void *arg, int event)
1349 case 0: /* clear origin */
1352 case 1: /* clear size */
1355 case 2: /* clear rotation */
1358 case 3: /* clear location */
1362 object_apply_deform(OBACT);
1364 case 5: /* make duplis real */
1365 make_duplilist_real();
1367 case 6: /* apply size/rotation or deformation */
1371 allqueue(REDRAWVIEW3D, 0);
1374 static uiBlock *view3d_edit_object_transformmenu(void *arg_unused)
1377 short yco = 20, menuwidth = 120;
1379 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1380 uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
1382 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Size/Rotation|Ctrl A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1383 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1384 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1386 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1388 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1389 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1390 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Size|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1391 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1393 uiBlockSetDirection(block, UI_RIGHT);
1394 uiTextBoundsBlock(block, 60);
1398 static void do_view3d_edit_object_makelinksmenu(void *arg, int event)
1405 make_links((short)event);
1408 allqueue(REDRAWVIEW3D, 0);
1411 static uiBlock *view3d_edit_object_makelinksmenu(void *arg_unused)
1416 short yco = 20, menuwidth = 120;
1418 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_makelinksmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1419 uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
1421 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1423 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1425 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1429 if(ob->type==OB_MESH) {
1430 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1431 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1432 } else if(ob->type==OB_CURVE) {
1433 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1434 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1435 } else if(ob->type==OB_FONT) {
1436 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1437 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1438 } else if(ob->type==OB_SURF) {
1439 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1440 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1441 } else if(ob->type==OB_MBALL) {
1442 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1443 } else if(ob->type==OB_CAMERA) {
1444 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1445 } else if(ob->type==OB_LAMP) {
1446 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1447 } else if(ob->type==OB_LATTICE) {
1448 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1449 } else if(ob->type==OB_ARMATURE) {
1450 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1454 uiBlockSetDirection(block, UI_RIGHT);
1455 uiTextBoundsBlock(block, 60);
1459 static void do_view3d_edit_object_singleusermenu(void *arg, int event)
1462 case 1: /* Object */
1463 single_object_users(1);
1465 case 2: /* Object & ObData */
1466 single_object_users(1);
1467 single_obdata_users(1);
1469 case 3: /* Object & ObData & Materials+Tex */
1470 single_object_users(1);
1471 single_obdata_users(1);
1472 single_mat_users(1); /* also tex */
1474 case 4: /* Materials+Tex */
1475 single_mat_users(1);
1479 clear_id_newpoins();
1482 allqueue(REDRAWALL, 0);
1485 static uiBlock *view3d_edit_object_singleusermenu(void *arg_unused)
1489 short yco = 20, menuwidth = 120;
1491 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_singleusermenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1492 uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
1494 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1495 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1496 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1497 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1499 uiBlockSetDirection(block, UI_RIGHT);
1500 uiTextBoundsBlock(block, 60);
1504 static void do_view3d_edit_object_copyattrmenu(void *arg, int event)
1524 copy_attr((short)event);
1527 allqueue(REDRAWVIEW3D, 0);
1530 static uiBlock *view3d_edit_object_copyattrmenu(void *arg_unused)
1535 short yco = 20, menuwidth = 120;
1537 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_copyattrmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1538 uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
1542 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1543 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1544 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1545 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1546 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1547 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1549 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1551 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1552 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1553 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1554 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1556 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1558 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C, 11", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
1562 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
1563 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
1564 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C, 12", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1567 if(ob->type == OB_FONT) {
1568 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C, 13", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1569 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C, 14", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1571 if(ob->type == OB_CURVE) {
1572 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C, 13", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1575 if(ob->type==OB_MESH) {
1576 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdiv|Ctrl C, 13", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1579 if( give_parteff(ob) ) {
1580 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Particle Settings|Ctrl C, 14", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1584 uiBlockSetDirection(block, UI_RIGHT);
1585 uiTextBoundsBlock(block, 60);
1590 static void do_view3d_edit_object_parentmenu(void *arg, int event)
1593 case 0: /* clear parent */
1596 case 1: /* make parent */
1600 allqueue(REDRAWVIEW3D, 0);
1603 static uiBlock *view3d_edit_object_parentmenu(void *arg_unused)
1606 short yco = 20, menuwidth = 120;
1608 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1609 uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
1611 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1612 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1614 uiBlockSetDirection(block, UI_RIGHT);
1615 uiTextBoundsBlock(block, 60);
1619 static void do_view3d_edit_object_trackmenu(void *arg, int event)
1622 case 0: /* clear track */
1625 case 1: /* make track */
1629 allqueue(REDRAWVIEW3D, 0);
1632 static uiBlock *view3d_edit_object_trackmenu(void *arg_unused)
1635 short yco = 20, menuwidth = 120;
1637 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1638 uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
1640 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1641 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1643 uiBlockSetDirection(block, UI_RIGHT);
1644 uiTextBoundsBlock(block, 60);
1648 static void do_view3d_edit_object_scriptsmenu(void *arg, int event)
1650 BPY_menu_do_python(PYMENU_OBJECT, event);
1652 allqueue(REDRAWVIEW3D, 0);
1655 static uiBlock *view3d_edit_object_scriptsmenu(void *arg_unused)
1658 short yco = 20, menuwidth = 120;
1662 block= uiNewBlock(&curarea->uiblocks, "v3d_eobject_pymenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1663 uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
1665 for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
1666 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);
1669 uiBlockSetDirection(block, UI_RIGHT);
1670 uiTextBoundsBlock(block, 60);
1675 static void do_view3d_edit_objectmenu(void *arg, int event)
1677 /* needed to check for valid selected objects */
1682 if (base) ob= base->object;
1686 case 0: /* transform properties*/
1687 mainqenter(NKEY, 1);
1689 case 1: /* delete */
1690 delete_context_selected();
1692 case 2: /* duplicate */
1693 duplicate_context_selected();
1695 case 3: /* duplicate linked */
1696 G.qual |= LR_ALTKEY;
1698 G.qual &= ~LR_ALTKEY;
1700 case 5: /* make single user */
1703 case 7: /* boolean operation */
1706 case 8: /* join objects */
1708 if(ob->type == OB_MESH) join_mesh();
1709 else if(ob->type == OB_CURVE) join_curve(OB_CURVE);
1710 else if(ob->type == OB_SURF) join_curve(OB_SURF);
1711 else if(ob->type == OB_ARMATURE) join_armature();
1714 case 9: /* convert object type */
1717 case 10: /* move to layer */
1720 case 11: /* insert keyframe */
1723 case 15: /* Object Panel */
1724 add_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
1727 allqueue(REDRAWVIEW3D, 0);
1730 static uiBlock *view3d_edit_objectmenu(void *arg_unused)
1733 short yco= 0, menuwidth=120;
1735 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1736 uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
1738 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
1739 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
1740 uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
1742 uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
1743 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
1745 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1747 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1749 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1751 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1752 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1753 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1755 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1757 uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
1758 uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
1759 uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
1761 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1763 uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
1764 uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
1766 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1768 if (OBACT && OBACT->type == OB_MESH) {
1769 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1771 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1772 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1774 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1776 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1778 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1779 uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
1782 if(curarea->headertype==HEADERTOP) {
1783 uiBlockSetDirection(block, UI_DOWN);
1786 uiBlockSetDirection(block, UI_TOP);
1787 uiBlockFlipOrder(block);
1790 uiTextBoundsBlock(block, 50);
1795 static void do_view3d_edit_propfalloffmenu(void *arg, int event)
1797 extern int prop_mode;
1801 allqueue(REDRAWVIEW3D, 1);
1804 static uiBlock *view3d_edit_propfalloffmenu(void *arg_unused)
1807 short yco = 20, menuwidth = 120;
1808 extern int prop_mode;
1810 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1811 uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
1813 if (prop_mode==0) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1814 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1815 if (prop_mode==1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1816 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1817 if (prop_mode==2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 2, 1, "");
1818 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 2, 1, "");
1819 if (prop_mode==3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 3, 1, "");
1820 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 3, 1, "");
1821 if (prop_mode==4) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 4, 1, "");
1822 else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 4, 1, "");
1824 uiBlockSetDirection(block, UI_RIGHT);
1825 uiTextBoundsBlock(block, 60);
1830 void do_view3d_edit_mesh_verticesmenu(void *arg, int event)
1832 extern float doublimit;
1836 case 0: /* make vertex parent */
1839 case 1: /* remove doubles */
1840 notice("Removed: %d", removedoublesflag(1, doublimit));
1842 case 2: /* smooth */
1845 case 3: /* separate */
1854 case 6: /* add hook */
1858 allqueue(REDRAWVIEW3D, 0);
1861 static uiBlock *view3d_edit_mesh_verticesmenu(void *arg_unused)
1864 short yco = 20, menuwidth = 120;
1866 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1867 uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
1869 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1870 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1871 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1873 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1875 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, 0", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1876 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1878 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1880 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1881 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1883 uiBlockSetDirection(block, UI_RIGHT);
1884 uiTextBoundsBlock(block, 60);
1888 void do_view3d_edit_mesh_edgesmenu(void *arg, int event)
1890 extern short editbutflag;
1896 case 0: /* subdivide smooth */
1897 subdivideflag(1, 0.0, editbutflag | B_SMOOTH);
1898 BIF_undo_push("Subdivide Smooth");
1900 case 1: /*subdivide fractal */
1902 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
1903 fac= -( (float)randfac )/100;
1904 subdivideflag(1, fac, editbutflag);
1905 BIF_undo_push("Subdivide Fractal");
1907 case 2: /* subdivide */
1908 subdivideflag(1, 0.0, editbutflag);
1909 BIF_undo_push("Subdivide");
1911 case 3: /* knife subdivide */
1912 KnifeSubdivide(KNIFE_PROMPT);
1914 case 4: /* Loop subdivide */
1915 loopoperations(LOOP_CUT);
1917 case 5: /* Make Edge/Face */
1923 case 7: /* Mark Seam */
1924 editmesh_mark_seam(0);
1926 case 8: /* Clear Seam */
1927 editmesh_mark_seam(1);
1929 case 9: /* Cease SubSurf */
1932 case 10: /* Rotate Edge */
1933 edge_rotate_selected(2);
1935 case 11: /* Rotate Edge */
1936 edge_rotate_selected(1);
1939 allqueue(REDRAWVIEW3D, 0);
1942 static uiBlock *view3d_edit_mesh_edgesmenu(void *arg_unused)
1945 short yco = 20, menuwidth = 120;
1947 Mesh *me= get_mesh(OBACT);
1949 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1950 uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
1952 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1954 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1956 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1957 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop Subdivide...|Ctrl R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1958 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide...|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1960 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1962 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1963 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1964 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1966 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1968 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1969 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1971 if (me->flag & ME_SUBSURF) {
1972 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1973 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1975 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1977 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1978 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CCW|Ctrl E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1980 uiBlockSetDirection(block, UI_RIGHT);
1981 uiTextBoundsBlock(block, 60);
1985 static void do_view3d_edit_mesh_facesmenu(void *arg, int event)
1988 case 0: /* Fill Faces */
1991 case 1: /* Beauty Fill Faces */
1994 case 2: /* Quads to Tris */
1995 convert_to_triface(0);
1996 allqueue(REDRAWVIEW3D, 0);
1998 makeDispList(G.obedit);
2000 case 3: /* Tris to Quads */
2003 case 4: /* Flip triangle edges */
2006 case 5: /* Make Edge/Face */
2010 allqueue(REDRAWVIEW3D, 0);
2013 static uiBlock *view3d_edit_mesh_facesmenu(void *arg_unused)
2016 short yco = 20, menuwidth = 120;
2018 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_facesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2019 uiBlockSetButmFunc(block, do_view3d_edit_mesh_facesmenu, NULL);
2021 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2022 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Fill|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2023 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Beautify Fill|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2025 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2027 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Quads to Triangles|Ctrl T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2028 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Triangles to Quads|Alt J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2029 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip Triangle Edges|Ctrl F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2031 uiBlockSetDirection(block, UI_RIGHT);
2032 uiTextBoundsBlock(block, 60);
2036 void do_view3d_edit_mesh_normalsmenu(void *arg, int event)
2042 case 1: /* recalculate inside */
2045 case 2: /* recalculate outside */
2049 allqueue(REDRAWVIEW3D, 0);
2052 static uiBlock *view3d_edit_mesh_normalsmenu(void *arg_unused)
2055 short yco = 20, menuwidth = 120;
2057 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_normalsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2058 uiBlockSetButmFunc(block, do_view3d_edit_mesh_normalsmenu, NULL);
2060 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Outside|Ctrl N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2061 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Recalculate Inside|Ctrl Shift N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2063 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2065 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip|W, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2067 uiBlockSetDirection(block, UI_RIGHT);
2068 uiTextBoundsBlock(block, 60);
2072 void do_view3d_edit_mirrormenu(void *arg, int event)
2087 allqueue(REDRAWVIEW3D, 0);
2090 static uiBlock *view3d_edit_mirrormenu(void *arg_unused)
2093 short yco = 20, menuwidth = 120;
2095 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mirrormenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2096 uiBlockSetButmFunc(block, do_view3d_edit_mirrormenu, NULL);
2098 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|Ctrl M, 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2099 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|Ctrl M, 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2100 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|Ctrl M, 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2102 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2104 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2105 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2106 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2108 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2110 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X View|Ctrl M, 7", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2111 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y View|Ctrl M, 8", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2112 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z View|Ctrl M, 9", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2114 uiBlockSetDirection(block, UI_RIGHT);
2115 uiTextBoundsBlock(block, 60);
2119 static void do_view3d_edit_mesh_showhidemenu(void *arg, int event)
2124 case 0: /* show hidden vertices */
2127 case 1: /* hide selected vertices */
2130 case 2: /* hide deselected vertices */
2134 allqueue(REDRAWVIEW3D, 0);
2137 static uiBlock *view3d_edit_mesh_showhidemenu(void *arg_unused)
2140 short yco = 20, menuwidth = 120;
2142 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_showhidemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2143 uiBlockSetButmFunc(block, do_view3d_edit_mesh_showhidemenu, NULL);
2145 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2146 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2147 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2149 uiBlockSetDirection(block, UI_RIGHT);
2150 uiTextBoundsBlock(block, 60);
2154 static void do_view3d_edit_mesh_scriptsmenu(void *arg, int event)
2156 BPY_menu_do_python(PYMENU_MESH, event);
2158 allqueue(REDRAWVIEW3D, 0);
2161 static uiBlock *view3d_edit_mesh_scriptsmenu(void *arg_unused)
2164 short yco = 20, menuwidth = 120;
2168 block= uiNewBlock(&curarea->uiblocks, "v3d_emesh_pymenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2169 uiBlockSetButmFunc(block, do_view3d_edit_mesh_scriptsmenu, NULL);
2171 for (pym = BPyMenuTable[PYMENU_MESH]; pym; pym = pym->next, i++) {
2172 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);
2175 uiBlockSetDirection(block, UI_RIGHT);
2176 uiTextBoundsBlock(block, 60);
2181 static void do_view3d_edit_meshmenu(void *arg, int event)
2185 case 0: /* Undo Editing */
2188 case 1: /* Redo Editing */
2191 case 2: /* transform properties */
2192 add_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, 0);
2194 case 4: /* insert keyframe */
2197 case 5: /* Extrude */
2200 case 6: /* duplicate */
2201 duplicate_context_selected();
2203 case 7: /* make edge face */
2206 case 8: /* delete */
2207 delete_context_selected();
2209 case 9: /* Shrink/Fatten Along Normals */
2212 case 10: /* Shear */
2218 case 12: /* proportional edit (toggle) */
2219 if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL;
2220 else G.f |= G_PROPORTIONAL;
2223 allqueue(REDRAWVIEW3D, 0);
2226 static uiBlock *view3d_edit_meshmenu(void *arg_unused)
2230 short yco= 0, menuwidth=120;
2232 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_meshmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2233 uiBlockSetButmFunc(block, do_view3d_edit_meshmenu, NULL);
2236 uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Move", 0, yco-=20, 120, 19, "");
2237 uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Rotate", 0, yco-=20, 120, 19, "");
2238 uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Scale", 0, yco-=20, 120, 19, "");
2240 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2241 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Redo Editing|Shift U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2242 uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
2244 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2246 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2247 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2248 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2250 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2252 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2254 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2256 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2257 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2258 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2259 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2261 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2263 uiDefIconTextBlockBut(block, view3d_edit_mesh_verticesmenu, NULL, ICON_RIGHTARROW_THIN, "Vertices", 0, yco-=20, 120, 19, "");
2264 uiDefIconTextBlockBut(block, view3d_edit_mesh_edgesmenu, NULL, ICON_RIGHTARROW_THIN, "Edges", 0, yco-=20, 120, 19, "");
2265 uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Faces", 0, yco-=20, 120, 19, "");
2266 uiDefIconTextBlockBut(block, view3d_edit_mesh_normalsmenu, NULL, ICON_RIGHTARROW_THIN, "Normals", 0, yco-=20, 120, 19, "");
2268 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2270 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, 120, 19, "");
2271 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2272 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2273 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2275 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2277 if(G.f & G_PROPORTIONAL) {
2278 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2280 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2282 uiDefIconTextBlockBut(block, view3d_edit_propfalloffmenu, NULL, ICON_RIGHTARROW_THIN, "Proportional Falloff", 0, yco-=20, 120, 19, "");
2284 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2286 uiDefIconTextBlockBut(block, view3d_edit_mesh_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Vertices", 0, yco-=20, 120, 19, "");
2288 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2289 uiDefIconTextBlockBut(block, view3d_edit_mesh_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2291 if(curarea->headertype==HEADERTOP) {
2292 uiBlockSetDirection(block, UI_DOWN);
2295 uiBlockSetDirection(block, UI_TOP);
2296 uiBlockFlipOrder(block);
2299 uiTextBoundsBlock(block, 50);
2303 static void do_view3d_edit_curve_controlpointsmenu(void *arg, int event)
2309 case 1: /* clear tilt */
2314 makeDispList(G.obedit);
2316 case 3: /* vector */
2318 makeDispList(G.obedit);
2320 case 4: /* smooth */
2322 makeDispList(G.obedit);
2324 case 5: /* make vertex parent */
2327 case 6: /* add hook */
2334 allqueue(REDRAWVIEW3D, 0);
2337 static uiBlock *view3d_edit_curve_controlpointsmenu(void *arg_unused)
2340 short yco = 20, menuwidth = 120;
2342 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_curve_controlpointsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2343 uiBlockSetButmFunc(block, do_view3d_edit_curve_controlpointsmenu, NULL);
2345 if (OBACT->type == OB_CURVE) {
2346 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2347 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Tilt|Alt T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2348 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2350 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2352 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Automatic|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2353 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle Free/Aligned|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2354 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector|V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2356 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2358 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2359 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2361 uiBlockSetDirection(block, UI_RIGHT);
2362 uiTextBoundsBlock(block, 60);
2366 void do_view3d_edit_curve_segmentsmenu(void *arg, int event)
2369 case 0: /* subdivide */
2372 case 1: /* switch direction */
2373 switchdirectionNurb2();
2376 allqueue(REDRAWVIEW3D, 0);
2379 static uiBlock *view3d_edit_curve_segmentsmenu(void *arg_unused)
2382 short yco = 20, menuwidth = 120;
2384 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_curve_segmentsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2385 uiBlockSetButmFunc(block, do_view3d_edit_curve_segmentsmenu, NULL);
2387 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2388 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Switch Direction", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2390 uiBlockSetDirection(block, UI_RIGHT);
2391 uiTextBoundsBlock(block, 60);
2395 void do_view3d_edit_curve_showhidemenu(void *arg, int event)
2398 case 10: /* show hidden control points */
2401 case 11: /* hide selected control points */
2404 case 12: /* hide deselected control points */
2408 allqueue(REDRAWVIEW3D, 0);
2411 static uiBlock *view3d_edit_curve_showhidemenu(void *arg_unused)
2414 short yco = 20, menuwidth = 120;
2416 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_curve_showhidemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2417 uiBlockSetButmFunc(block, do_view3d_edit_curve_showhidemenu, NULL);
2419 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2420 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2421 if (OBACT->type == OB_SURF) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected Control Points|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2424 uiBlockSetDirection(block, UI_RIGHT);
2425 uiTextBoundsBlock(block, 60);
2428 static void do_view3d_edit_curvemenu(void *arg, int event)
2432 case 0: /* Undo Editing */
2435 case 1: /* transformation properties */
2436 mainqenter(NKEY, 1);
2438 case 2: /* insert keyframe */
2441 case 4: /* extrude */
2442 if (OBACT->type == OB_CURVE) {
2444 } else if (OBACT->type == OB_SURF) {
2448 case 5: /* duplicate */
2449 duplicate_context_selected();
2451 case 6: /* make segment */
2454 case 7: /* toggle cyclic */
2456 makeDispList(G.obedit);
2458 case 8: /* delete */
2459 delete_context_selected();
2461 case 9: /* proportional edit (toggle) */
2462 if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL;
2463 else G.f |= G_PROPORTIONAL;
2465 case 13: /* Shear */
2472 allqueue(REDRAWVIEW3D, 0);
2475 static uiBlock *view3d_edit_curvemenu(void *arg_unused)
2478 short yco= 0, menuwidth=120;
2480 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_curvemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2481 uiBlockSetButmFunc(block, do_view3d_edit_curvemenu, NULL);
2483 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reload Original|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2485 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2487 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties...|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2488 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2489 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2491 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2493 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2495 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2497 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2498 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2499 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Segment|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2500 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle Cyclic|C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2501 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2503 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2505 uiDefIconTextBlockBut(block, view3d_edit_curve_controlpointsmenu, NULL, ICON_RIGHTARROW_THIN, "Control Points", 0, yco-=20, menuwidth, 19, "");
2506 uiDefIconTextBlockBut(block, view3d_edit_curve_segmentsmenu, NULL, ICON_RIGHTARROW_THIN, "Segments", 0, yco-=20, menuwidth, 19, "");
2508 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2510 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2511 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2512 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
2514 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2516 if(G.f & G_PROPORTIONAL) {
2517 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2519 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2521 uiDefIconTextBlockBut(block, view3d_edit_propfalloffmenu, NULL, ICON_RIGHTARROW_THIN, "Proportional Falloff", 0, yco-=20, menuwidth, 19, "");
2523 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2525 uiDefIconTextBlockBut(block, view3d_edit_curve_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Control Points", 0, yco-=20, menuwidth, 19, "");
2527 if(curarea->headertype==HEADERTOP) {
2528 uiBlockSetDirection(block, UI_DOWN);
2531 uiBlockSetDirection(block, UI_TOP);
2532 uiBlockFlipOrder(block);
2535 uiTextBoundsBlock(block, 50);
2539 static void do_view3d_edit_mball_showhidemenu(void *arg, int event)
2542 case 10: /* show hidden control points */
2545 case 11: /* hide selected control points */
2548 case 12: /* hide deselected control points */
2552 allqueue(REDRAWVIEW3D, 0);
2555 static uiBlock *view3d_edit_mball_showhidemenu(void *arg_unused)
2558 short yco = 20, menuwidth = 120;
2560 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mball_showhidemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2561 uiBlockSetButmFunc(block, do_view3d_edit_mball_showhidemenu, NULL);
2563 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2564 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2565 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2567 uiBlockSetDirection(block, UI_RIGHT);
2568 uiTextBoundsBlock(block, 60);
2571 static void do_view3d_edit_metaballmenu(void *arg, int event)
2580 case 3: /* duplicate */
2581 duplicate_context_selected();
2583 case 4: /* delete */
2584 delete_context_selected();
2592 case 7: /* Transform Properties */
2593 add_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, 0);
2596 allqueue(REDRAWVIEW3D, 0);
2599 static uiBlock *view3d_edit_metaballmenu(void *arg_unused)
2602 short yco= 0, menuwidth=120;
2604 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_metaballmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2605 uiBlockSetButmFunc(block, do_view3d_edit_metaballmenu, NULL);
2607 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2608 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Redo Editing|Shift Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2609 uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
2611 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2612 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N",0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
2613 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2614 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2615 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2617 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2618 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2620 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2622 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2623 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2624 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2625 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2626 uiDefIconTextBlockBut(block, view3d_edit_mball_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Hide MetaElems", 0, yco-=20, 120, 19, "");
2628 if(curarea->headertype==HEADERTOP) {
2629 uiBlockSetDirection(block, UI_DOWN);
2632 uiBlockSetDirection(block, UI_TOP);
2633 uiBlockFlipOrder(block);
2636 uiTextBoundsBlock(block, 50);
2640 static void do_view3d_edit_text_charsmenu(void *arg, int event)
2643 case 0: /* copyright */
2644 do_textedit(0,0,169);
2646 case 1: /* registered trademark */
2647 do_textedit(0,0,174);
2649 case 2: /* degree sign */
2650 do_textedit(0,0,176);
2652 case 3: /* Multiplication Sign */
2653 do_textedit(0,0,215);
2655 case 4: /* Circle */
2656 do_textedit(0,0,138);
2658 case 5: /* superscript 1 */
2659 do_textedit(0,0,185);
2661 case 6: /* superscript 2 */
2662 do_textedit(0,0,178);
2664 case 7: /* superscript 3 */
2665 do_textedit(0,0,179);
2667 case 8: /* double >> */
2668 do_textedit(0,0,187);
2670 case 9: /* double << */
2671 do_textedit(0,0,171);
2673 case 10: /* Promillage */
2674 do_textedit(0,0,139);
2676 case 11: /* dutch florin */
2677 do_textedit(0,0,164);
2679 case 12: /* british pound */
2680 do_textedit(0,0,163);
2682 case 13: /* japanese yen*/
2683 do_textedit(0,0,165);
2685 case 14: /* german S */
2686 do_textedit(0,0,223);
2688 case 15: /* spanish question mark */
2689 do_textedit(0,0,191);
2691 case 16: /* spanish exclamation mark */
2692 do_textedit(0,0,161);
2695 allqueue(REDRAWVIEW3D, 0);
2698 static uiBlock *view3d_edit_text_charsmenu(void *arg_unused)
2701 short yco = 20, menuwidth = 120;
2703 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_text_charsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2704 uiBlockSetButmFunc(block, do_view3d_edit_text_charsmenu, NULL);
2706 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copyright|Alt C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2707 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Registered Trademark|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2709 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2711 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Degree Sign|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2712 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Multiplication Sign|Alt x", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2713 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Circle|Alt .", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2714 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Superscript 1|Alt 1", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2715 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Superscript 2|Alt 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2716 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Superscript 3|Alt 3", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2717 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Double >>|Alt >", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2718 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Double <<|Alt <", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2719 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Promillage|Alt %", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2721 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2723 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dutch Florin|Alt F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2724 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "British Pound|Alt L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2725 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Japanese Yen|Alt Y", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2727 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2729 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "German S|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
2730 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Spanish Question Mark|Alt ?", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2731 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Spanish Exclamation Mark|Alt !", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2733 uiBlockSetDirection(block, UI_RIGHT);
2734 uiTextBoundsBlock(block, 60);
2739 static void do_view3d_edit_textmenu(void *arg, int event)
2743 case 0: /* Undo Editing */
2746 case 1: /* paste from file buffer */
2750 allqueue(REDRAWVIEW3D, 0);
2753 static uiBlock *view3d_edit_textmenu(void *arg_unused)
2756 short yco= 0, menuwidth=120;
2758 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_textmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2759 uiBlockSetButmFunc(block, do_view3d_edit_textmenu, NULL);
2761 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2763 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2765 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste From Buffer File|Alt V", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2767 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2769 uiDefIconTextBlockBut(block, view3d_edit_text_charsmenu, NULL, ICON_RIGHTARROW_THIN, "Special Characters", 0, yco-=20, 120, 19, "");
2771 if(curarea->headertype==HEADERTOP) {
2772 uiBlockSetDirection(block, UI_DOWN);
2775 uiBlockSetDirection(block, UI_TOP);
2776 uiBlockFlipOrder(block);
2779 uiTextBoundsBlock(block, 50);
2783 static void do_view3d_edit_latticemenu(void *arg, int event)
2787 case 0: /* Undo Editing */
2790 case 2: /* insert keyframe */
2799 case 5: /* proportional edit (toggle) */
2800 if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL;
2801 else G.f |= G_PROPORTIONAL;
2804 allqueue(REDRAWVIEW3D, 0);
2807 static uiBlock *view3d_edit_latticemenu(void *arg_unused)
2810 short yco= 0, menuwidth=120;
2812 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_latticemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2813 uiBlockSetButmFunc(block, do_view3d_edit_latticemenu, NULL);
2815 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2817 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2819 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2821 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2823 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2825 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2827 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2828 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2829 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2831 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2833 if(G.f & G_PROPORTIONAL) {
2834 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2836 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2838 uiDefIconTextBlockBut(block, view3d_edit_propfalloffmenu, NULL, ICON_RIGHTARROW_THIN, "Proportional Falloff", 0, yco-=20, 120, 19, "");
2840 if(curarea->headertype==HEADERTOP) {
2841 uiBlockSetDirection(block, UI_DOWN);
2844 uiBlockSetDirection(block, UI_TOP);
2845 uiBlockFlipOrder(block);
2848 uiTextBoundsBlock(block, 50);
2852 static void do_view3d_edit_armaturemenu(void *arg, int event)
2856 case 0: /* Undo Editing */
2857 remake_editArmature();
2859 case 1: /* transformation properties */
2860 mainqenter(NKEY, 1);
2862 case 3: /* extrude */
2865 case 4: /* duplicate */
2866 duplicate_context_selected();
2868 case 5: /* delete */
2869 delete_context_selected();
2878 allqueue(REDRAWVIEW3D, 0);
2881 static uiBlock *view3d_edit_armaturemenu(void *arg_unused)
2884 short yco= 0, menuwidth=120;
2886 block= uiNewBlock(&curarea->uiblocks, "view3d_edit_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2887 uiBlockSetButmFunc(block, do_view3d_edit_armaturemenu, NULL);
2889 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2891 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2893 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2894 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2895 uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2897 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2899 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2900 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2901 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2903 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2905 uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2906 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2907 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2909 if(curarea->headertype==HEADERTOP) {
2910 uiBlockSetDirection(block, UI_DOWN);
2913 uiBlockSetDirection(block, UI_TOP);
2914 uiBlockFlipOrder(block);
2917 uiTextBoundsBlock(block, 50);
2922 static void do_view3d_pose_armature_transformmenu(void *arg, int event)
2925 case 0: /* clear origin */
2928 case 1: /* clear size */
2931 case 2: /* clear rotation */
2934 case 3: /* clear location */
2938 allqueue(REDRAWVIEW3D, 0);
2941 static uiBlock *view3d_pose_armature_transformmenu(void *arg_unused)
2944 short yco = 20, menuwidth = 120;
2946 block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armature_transformmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
2947 uiBlockSetButmFunc(block, do_view3d_pose_armature_transformmenu, NULL);
2949 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2950 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2951 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Size|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2952 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2954 uiBlockSetDirection(block, UI_RIGHT);
2955 uiTextBoundsBlock(block, 60);
2959 static void do_view3d_pose_armaturemenu(void *arg, int event)
2963 case 0: /* transform properties */
2964 mainqenter(NKEY, 1);
2966 case 1: /* copy current pose */
2969 case 2: /* paste pose */
2972 case 3: /* paste flipped pose */
2975 case 4: /* insert keyframe */
2979 allqueue(REDRAWVIEW3D, 0);
2982 static void do_view3d_pose_armature_showhidemenu(void *arg, int event)
2987 case 0: /* show hidden bones */
2988 show_all_pose_bones();
2990 case 1: /* hide selected bones */
2991 hide_selected_pose_bones();
2993 case 2: /* hide deselected bones */
2994 hide_unselected_pose_bones();
2997 allqueue(REDRAWVIEW3D, 0);
3000 static uiBlock *view3d_pose_armature_showhidemenu(void *arg_unused)
3003 short yco = 20, menuwidth = 120;
3005 block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armature_showhidemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
3006 uiBlockSetButmFunc(block, do_view3d_pose_armature_showhidemenu, NULL);
3008 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
3009 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
3010 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
3012 uiBlockSetDirection(block, UI_RIGHT);
3013 uiTextBoundsBlock(block, 60);
3017 static uiBlock *view3d_pose_armaturemenu(void *arg_unused)
3020 short yco= 0, menuwidth=120;
3022 block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armaturemenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
3023 uiBlockSetButmFunc(block, do_view3d_pose_armaturemenu, NULL);
3025 uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
3026 uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
3027 uiDefIconTextBlockBut(block, view3d_pose_armature_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear Transform", 0, yco-=20, 120, 19, "");
3029 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3031 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
3033 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3035 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Current Pose", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
3036 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste Pose", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
3037 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste Flipped Pose", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
3039 uiDefBut(block, SEPR, 0, "", 0, yco-=6,
3040 menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3042 uiDefIconTextBlockBut(block, view3d_pose_armature_showhidemenu,
3043 NULL, ICON_RIGHTARROW_THIN,
3044 "Show/Hide Bones", 0, yco-=20, 120, 19, "");
3046 if(curarea->headertype==HEADERTOP) {
3047 uiBlockSetDirection(block, UI_DOWN);
3050 uiBlockSetDirection(block, UI_TOP);
3051 uiBlockFlipOrder(block);
3054 uiTextBoundsBlock(block, 50);
3060 static void do_view3d_paintmenu(void *arg, int event)
3063 case 0: /* undo vertex painting */
3066 case 1: /* undo weight painting */
3069 case 2: /* clear vertex colors */
3073 allqueue(REDRAWVIEW3D, 0);
3076 static uiBlock *view3d_paintmenu(void *arg_unused)
3079 short yco= 0, menuwidth=120;
3081 block= uiNewBlock(&curarea->uiblocks, "view3d_paintmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
3082 uiBlockSetButmFunc(block, do_view3d_paintmenu, NULL);
3084 if (G.f & G_VERTEXPAINT) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Vertex Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
3085 if (G.f & G_WEIGHTPAINT) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Weight Painting|U", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
3086 if (G.f & G_TEXTUREPAINT) uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3088 if (G.f & G_VERTEXPAINT) {
3089 uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3091 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Vertex Colors|Shift K", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
3094 if(curarea->headertype==HEADERTOP) {
3095 uiBlockSetDirection(block, UI_DOWN);
3098 uiBlockSetDirection(block, UI_TOP);
3099 uiBlockFlipOrder(block);
3102 uiTextBoundsBlock(block, 50);
3106 static void do_view3d_facesel_propertiesmenu(void *arg, int event)
3108 extern TFace *lasttface;
3112 case 0: /* textured */
3113 lasttface->mode ^= TF_TEX;
3116 lasttface->mode ^= TF_TILES;
3119 lasttface->mode ^= TF_LIGHT;
3121 case 3: /* invisible */
3122 lasttface->mode ^= TF_INVISIBLE;
3124 case 4: /* collision */
3125 lasttface->mode ^= TF_DYNAMIC;
3127 case 5: /* shared vertex colors */
3128 lasttface->mode ^= TF_SHAREDCOL;
3130 case 6: /* two sided */
3131 lasttface->mode ^= TF_TWOSIDE;
3133 case 7: /* use object color */
3134 lasttface->mode ^= TF_OBCOL;
3137 lasttface->mode ^= TF_BILLBOARD;
3139 case 9: /* billboard */
3140 lasttface->mode ^= TF_BILLBOARD2;
3142 case 10: /* shadow */
3143 lasttface->mode ^= TF_SHADOW;
3146 lasttface->mode ^= TF_BMFONT;