9838976a10cada855dcb51bf186491fa5ae0867f
[blender.git] / source / blender / editors / space_view3d / view3d_header.c
1 /**
2  * $Id$
3  *
4  * ***** BEGIN GPL LICENSE BLOCK *****
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version. 
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, write to the Free Software Foundation,
18  * Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
19  *
20  * The Original Code is Copyright (C) 2004-2008 Blender Foundation.
21  * All rights reserved.
22  *
23  * 
24  * Contributor(s): Blender Foundation
25  *
26  * ***** END GPL LICENSE BLOCK *****
27  */
28
29 #include <string.h>
30 #include <stdio.h>
31 #include <stdlib.h>
32
33 #include "DNA_armature_types.h"
34 #include "DNA_ID.h"
35 #include "DNA_image_types.h"
36 #include "DNA_meshdata_types.h"
37 #include "DNA_mesh_types.h"
38 #include "DNA_object_types.h"
39 #include "DNA_space_types.h"
40 #include "DNA_scene_types.h"
41 #include "DNA_screen_types.h"
42 #include "DNA_texture_types.h"
43 #include "DNA_userdef_types.h" /* U.smooth_viewtx */
44 #include "DNA_view3d_types.h"
45 #include "DNA_windowmanager_types.h"
46
47 #include "MEM_guardedalloc.h"
48
49 #include "BKE_action.h"
50 #include "BKE_context.h"
51 #include "BKE_curve.h"
52 #include "BKE_depsgraph.h"
53 #include "BKE_displist.h"
54 #include "BKE_effect.h"
55 #include "BKE_global.h"
56 #include "BKE_image.h"
57 #include "BKE_library.h"
58 #include "BKE_main.h"
59 #include "BKE_mesh.h"
60 #include "BKE_modifier.h"
61 #include "BKE_particle.h"
62 #include "BKE_screen.h"
63 #include "BKE_utildefines.h" /* for VECCOPY */
64
65 #include "ED_screen.h"
66 #include "ED_util.h"
67 #include "ED_types.h"
68
69 #include "WM_api.h"
70 #include "WM_types.h"
71
72 #include "BIF_gl.h"
73 #include "BIF_glutil.h"
74
75 #include "BLI_arithb.h"
76 #include "BLI_blenlib.h"
77 #include "BLI_editVert.h"
78
79 #include "UI_interface.h"
80 #include "UI_interface_icons.h"
81 #include "UI_resources.h"
82 #include "UI_view2d.h"
83
84 #include "BMF_Api.h"
85
86 #include "view3d_intern.h"
87
88
89 /* View3d->modeselect 
90  * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
91  * rather than those buttons.
92  * I know the implementation's not good - it's an experiment to see if this
93  * approach would work well
94  *
95  * This can be cleaned when I make some new 'mode' icons.
96  */
97
98 #define V3D_OBJECTMODE_SEL                      ICON_OBJECT
99 #define V3D_EDITMODE_SEL                        ICON_EDITMODE_HLT
100 #define V3D_SCULPTMODE_SEL                      ICON_SCULPTMODE_HLT
101 #define V3D_FACESELECT_SEL                      ICON_FACESEL_HLT        /* this is not a mode anymore - just a switch */
102 #define V3D_VERTEXPAINTMODE_SEL         ICON_VPAINT_HLT
103 #define V3D_TEXTUREPAINTMODE_SEL        ICON_TPAINT_HLT
104 #define V3D_WEIGHTPAINTMODE_SEL         ICON_WPAINT_HLT
105 #define V3D_POSEMODE_SEL                        ICON_POSE_HLT
106 #define V3D_PARTICLEEDITMODE_SEL        ICON_ANIM
107
108 #define TEST_EDITMESH   if(G.obedit==0) return; \
109                                                 if( (v3d->lay & G.obedit->lay)==0 ) return;
110
111 /* XXX port over */
112 void handle_view3d_lock(void) {}
113 void allqueue(int x, int y) {}
114 void persptoetsen(int x) {}
115 void fly(void) {}
116 void editmesh_align_view_to_selected(void *x, int y) {}
117 void play_anim(int x) {}
118 void add_blockhandler(void *x, int y, int z) {}
119 void toggle_blockhandler(void *x, int y, int z) {}
120 void view3d_edit_clipping(void *x);
121 void view3d_border_zoom(void);
122 void selectlinks(void) {}
123 void countall(void) {}
124 void select_object_grouped() {}
125 extern void borderselect();
126 int BIF_snappingSupported() {return 1;}
127 void BIF_undo_push() {}
128 int retopo_mesh_paint_check() {return 0;}
129 int object_data_is_libdata() {return 0;}
130
131 /* view3d handler codes */
132 #define VIEW3D_HANDLER_BACKGROUND       1
133 #define VIEW3D_HANDLER_PROPERTIES       2
134 #define VIEW3D_HANDLER_OBJECT           3
135 #define VIEW3D_HANDLER_PREVIEW          4
136 #define VIEW3D_HANDLER_MULTIRES         5
137 #define VIEW3D_HANDLER_TRANSFORM        6
138 #define VIEW3D_HANDLER_GREASEPENCIL 7
139
140 /* end XXX ************* */
141
142 static void do_view3d_buttons(bContext *C, void *arg, int event);
143
144 #define B_SCENELOCK 101
145 #define B_FULL          102
146 #define B_HOME          103
147 #define B_VIEWBUT       104
148 #define B_PERSP         105
149 #define B_VIEWRENDER    106
150 #define B_STARTGAME     107
151 #define B_MODESELECT 108
152 #define B_AROUND        109
153 #define B_SEL_VERT      110
154 #define B_SEL_EDGE      111
155 #define B_SEL_FACE      112
156 #define B_SEL_PATH      113
157 #define B_SEL_POINT     114
158 #define B_SEL_END       115
159 #define B_MAN_TRANS     116
160 #define B_MAN_ROT       117
161 #define B_MAN_SCALE     118
162 #define B_NDOF          119     
163 #define B_MAN_MODE      120
164 #define B_VIEW_BUTSEDIT 121
165 #define B_REDR          122
166 #define B_NOP           123
167 #define B_ACTCOPY       124
168 #define B_ACTPASTE      125
169 #define B_ACTPASTEFLIP 126
170
171 #define B_LAY           201
172
173
174 /* temp hack to get the region window */
175 static ARegion *ed_regionwin(ScrArea *sa)
176 {
177         ARegion *ar;
178         for(ar= sa->regionbase.first; ar; ar= ar->next)
179                 if(ar->regiontype==RGN_TYPE_WINDOW)
180                         return ar;
181         return NULL;
182 }
183
184 /* XXX; all this context stuff...  should become operator */
185 void do_layer_buttons(bContext *C, short event)
186 {
187         wmWindow *win= CTX_wm_window(C);
188         Scene *scene= CTX_data_scene(C);
189         ScrArea *sa= CTX_wm_area(C);
190         View3D *v3d= sa->spacedata.first;
191         static int oldlay= 1;
192         short shift, alt, ctrl;
193         
194         shift= win->eventstate->shift;
195         alt= win->eventstate->alt;
196         ctrl= win->eventstate->ctrl;
197         
198         if(v3d==0) return;
199         if(v3d->localview) return;
200         
201         if(event==-1 && ctrl) {
202                 v3d->scenelock= !v3d->scenelock;
203                 do_view3d_buttons(C, NULL, B_SCENELOCK);
204         } else if (event<0) {
205                 if(v3d->lay== (1<<20)-1) {
206                         if(event==-2 || shift) v3d->lay= oldlay;
207                 }
208                 else {
209                         oldlay= v3d->lay;
210                         v3d->lay= (1<<20)-1;
211                 }
212                 
213                 if(v3d->scenelock) handle_view3d_lock();
214                 
215                 /* new layers might need unflushed events events */
216                 DAG_scene_update_flags(scene, v3d->lay);        /* tags all that moves and flushes */
217         }
218         else {
219                 if(alt) {
220                         if(event<11) event+= 10;
221                 }
222                 if(shift) {
223                         if(v3d->lay & (1<<event)) v3d->lay -= (1<<event);
224                         else    v3d->lay += (1<<event);
225                 }
226                 do_view3d_buttons(C, NULL, event+B_LAY);
227         }
228         ED_area_tag_redraw(sa);
229         
230         if(sa->spacetype==SPACE_OOPS) allqueue(REDRAWVIEW3D, 1); /* 1==also do headwin */
231         if(v3d->drawtype == OB_SHADED) reshadeall_displist();
232         allqueue(REDRAWNLA, 0); 
233 }
234
235 static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event)
236 {
237         View3D *v3d;
238         Base *base;
239         int i=1;
240         
241         if (event == 1) {
242                 /* Set Active Object as Active Camera */
243                 /* XXX ugly hack alert */
244 //              G.qual |= LR_CTRLKEY;
245                 persptoetsen(PAD0);
246 //              G.qual &= ~LR_CTRLKEY;
247         } else {
248                 /* store settings of current view before allowing overwriting with camera view */
249                 /* this is a copy of the code in toets.c */
250                 if(v3d->persp != V3D_CAMOB) {
251                         QUATCOPY(v3d->lviewquat, v3d->viewquat);
252                         v3d->lview= v3d->view;
253                         v3d->lpersp= v3d->persp;
254                 }
255
256                 for( base = FIRSTBASE; base; base = base->next ) {
257                         if (base->object->type == OB_CAMERA) {
258                                 i++;
259                                 
260                                 if (event==i) {
261                                         
262                                         if (v3d->camera == base->object && v3d->persp==V3D_CAMOB)
263                                                 return;
264                                         
265                                         if (U.smooth_viewtx) {  
266                                                 /* move 3d view to camera view */
267                                                 float orig_ofs[3], orig_lens = v3d->lens;
268                                                 VECCOPY(orig_ofs, v3d->ofs);
269                                                 
270                                                 if (v3d->camera && v3d->persp==V3D_CAMOB)
271                                                         view_settings_from_ob(v3d->camera, v3d->ofs, v3d->viewquat, &v3d->dist, &v3d->lens);
272                                                 
273                                                 v3d->camera = base->object;
274                                                 handle_view3d_lock();
275                                                 v3d->persp= V3D_CAMOB;
276                                                 v3d->view= 0;
277                                                 
278                                                 smooth_view_to_camera(v3d);
279                                                 
280                                                 /* restore values */
281                                                 VECCOPY(v3d->ofs, orig_ofs);
282                                                 v3d->lens = orig_lens;
283                                         } else {
284                                                 v3d->camera= base->object;
285                                                 handle_view3d_lock();
286                                                 v3d->persp= V3D_CAMOB;
287                                                 v3d->view= 0;
288                                         }
289                                         break;
290                                 }
291                         }
292                 }
293         }
294         
295         allqueue(REDRAWVIEW3D, 0);
296 }
297
298 static uiBlock *view3d_view_camerasmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
299 {
300         Scene *scene= CTX_data_scene(C);
301         Base *base;
302         uiBlock *block;
303         short yco= 0, menuwidth=120;
304         int i=1;
305         char camname[48];
306         
307         block= uiBeginBlock(C, handle->region, "view3d_view_camerasmenu", UI_EMBOSSP, UI_HELV);
308         uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
309
310         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Active Object as Active Camera|Ctrl NumPad 0",       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
311
312         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
313         
314         for( base = FIRSTBASE; base; base = base->next ) {
315                 if (base->object->type == OB_CAMERA) {
316                         i++;
317                         
318                         strcpy(camname, base->object->id.name+2);
319                         if (base->object == scene->camera) strcat(camname, " (Active)");
320                         
321                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, camname,  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0,  i, "");
322                 }
323         }
324         
325         uiBlockSetDirection(block, UI_RIGHT);
326         uiTextBoundsBlock(block, 50);
327         return block;
328 }
329
330 static void do_view3d_view_cameracontrolsmenu(bContext *C, void *arg, int event)
331 {
332         switch(event) {
333         case 0: /* Orbit Left */
334                 persptoetsen(PAD4);
335                 break;
336         case 1: /* Orbit Right */
337                 persptoetsen(PAD6);
338                 break;
339         case 2: /* Orbit Up */
340                 persptoetsen(PAD8);
341                 break;
342         case 3: /* Orbit Down */
343                 persptoetsen(PAD2);
344                 break;
345         case 4: /* Pan left */
346                 /* XXX ugly hack alert */
347 //              G.qual |= LR_CTRLKEY;
348                 persptoetsen(PAD4);
349 //              G.qual &= ~LR_CTRLKEY;
350                 break;
351         case 5: /* Pan right */
352                 /* XXX ugly hack alert */
353 //              G.qual |= LR_CTRLKEY;
354                 persptoetsen(PAD6);
355 //              G.qual &= ~LR_CTRLKEY;
356                 break;
357         case 6: /* Pan up */
358                 /* ugly hack alert */
359 //              G.qual |= LR_CTRLKEY;
360                 persptoetsen(PAD8);
361 //              G.qual &= ~LR_CTRLKEY;
362                 break;
363         case 7: /* Pan down */
364                 /* ugly hack alert */
365 //              G.qual |= LR_CTRLKEY;
366                 persptoetsen(PAD2);
367 //              G.qual &= ~LR_CTRLKEY;
368                 break;
369         case 8: /* Zoom In */
370                 persptoetsen(PADPLUSKEY);
371                 break;
372         case 9: /* Zoom Out */
373                 persptoetsen(PADMINUS);
374                 break;
375         case 10: /* Reset Zoom */
376                 persptoetsen(PADENTER);
377                 break;
378         case 11: /* Camera Fly mode */
379                 fly();
380                 break;
381         }
382         allqueue(REDRAWVIEW3D, 0);
383 }
384
385 static uiBlock *view3d_view_cameracontrolsmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
386 {
387 /*              static short tog=0; */
388         uiBlock *block;
389         short yco= 0, menuwidth=120;
390         
391         block= uiBeginBlock(C, handle->region, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV);
392         uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
393
394         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
395         
396         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
397         
398         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
399         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
400         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
401         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
402         
403         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
404         
405         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
406         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
407         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
408         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
409         
410         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
411         
412         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
413         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
414         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
415
416         uiBlockSetDirection(block, UI_RIGHT);
417         uiTextBoundsBlock(block, 50);
418         return block;
419 }
420
421 static void do_view3d_view_alignviewmenu(bContext *C, void *arg, int event)
422 {
423         Scene *scene= CTX_data_scene(C);
424         ScrArea *sa= CTX_wm_area(C);
425         View3D *v3d= sa->spacedata.first;
426         float *curs;
427         
428         switch(event) {
429
430         case 0: /* Align View to Selected (edit/faceselect mode) */
431         case 1:
432         case 2:
433                 if ((G.obedit) && (G.obedit->type == OB_MESH)) {
434                         editmesh_align_view_to_selected(v3d, event + 1);
435                 } 
436                 else if (FACESEL_PAINT_TEST) {
437                         Object *obact= OBACT;
438                         if (obact && obact->type==OB_MESH) {
439                                 Mesh *me= obact->data;
440
441                                 if (me->mtface) {
442 // XXX                                  faceselect_align_view_to_selected(v3d, me, event + 1);
443                                         ED_area_tag_redraw(sa);
444                                 }
445                         }
446                 }
447                 break;
448         case 3: /* Center View to Cursor */
449                 curs= give_cursor(scene, v3d);
450                 v3d->ofs[0]= -curs[0];
451                 v3d->ofs[1]= -curs[1];
452                 v3d->ofs[2]= -curs[2];
453                 ED_area_tag_redraw(sa);
454                 break;
455         case 4: /* Align Active Camera to View */
456                 /* XXX This ugly hack is a symptom of the nasty persptoetsen function, 
457                  * but at least it works for now.
458                  */
459 //              G.qual |= LR_CTRLKEY|LR_ALTKEY;
460                 persptoetsen(PAD0);
461 //              G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
462                 break;
463         case 5: /* Align View to Selected (object mode) */
464 // XXX          mainqenter(PADASTERKEY, 1);
465                 break;
466         case 6: /* Center View and Cursor to Origin */
467                 WM_operator_call(C, "ED_VIEW3D_OT_viewcenter", WM_OP_REGION_WIN, NULL);
468                 curs= give_cursor(scene, v3d);
469                 curs[0]=curs[1]=curs[2]= 0.0;
470                 break;
471         }
472         allqueue(REDRAWVIEW3D, 0);
473 }
474
475 static uiBlock *view3d_view_alignviewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
476 {
477 /*              static short tog=0; */
478         uiBlock *block;
479         short yco= 0, menuwidth=120;
480         
481         block= uiBeginBlock(C, handle->region, "view3d_view_alignviewmenu", UI_EMBOSSP, UI_HELV);
482         uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
483
484         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
485         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, "");
486         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, "");   
487
488         if (((G.obedit) && (G.obedit->type == OB_MESH)) || (FACESEL_PAINT_TEST)) {
489                 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, "");
490                 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, "");
491                 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, "");
492         } else {
493                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
494         }
495         
496         uiBlockSetDirection(block, UI_RIGHT);
497         uiTextBoundsBlock(block, 50);
498         return block;
499 }
500
501 #ifndef DISABLE_PYTHON
502 // XXX static void do_view3d_view_spacehandlers(bContext *C, void *arg, int event)
503 //{
504 //}
505
506 static uiBlock *view3d_view_spacehandlers(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
507 {
508         /* XXX */
509         return NULL;
510 }
511 #endif /* DISABLE_PYTHON */
512
513 static void do_view3d_viewmenu(bContext *C, void *arg, int event)
514 {
515         Scene *scene= CTX_data_scene(C);
516         ScrArea *sa= CTX_wm_area(C);
517         View3D *v3d= sa->spacedata.first;
518         
519         switch(event) {
520         case 0: /* User */
521                 v3d->viewbut = 0;
522                 v3d->persp = V3D_PERSP;
523                 break;
524         case 1: /* Camera */
525                 persptoetsen(PAD0);
526                 break;
527         case 2: /* Top */
528                 persptoetsen(PAD7);
529                 break;
530         case 3: /* Front */
531                 persptoetsen(PAD1);
532                 break;
533         case 4: /* Side */
534                 persptoetsen(PAD3);
535                 break;
536         case 5: /* Perspective */
537                 v3d->persp=V3D_PERSP;
538                 break;
539         case 6: /* Orthographic */
540                 v3d->persp=V3D_ORTHO;
541                 break;
542         case 7: /* Local View */
543                 v3d->localview= 1;
544                 initlocalview(scene, ed_regionwin(sa), v3d);
545                 break;
546         case 8: /* Global View */
547                 v3d->localview= 0;
548                 endlocalview(scene, sa);
549                 break;
550         case 9: /* View All (Home) */
551                 WM_operator_call(C, "ED_VIEW3D_OT_viewhome", WM_OP_REGION_WIN, NULL);
552                 break;
553         case 11: /* View Selected */
554                 WM_operator_call(C, "ED_VIEW3D_OT_viewcenter", WM_OP_REGION_WIN, NULL);
555                 break;
556         case 13: /* Play Back Animation */
557                 play_anim(0);
558                 break;
559         case 15: /* Background Image... */
560                 add_blockhandler(sa, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
561                 break;
562         case 16: /* View  Panel */
563                 add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
564                 break;
565         case 17: /* Set Clipping Border */
566                 view3d_edit_clipping(v3d);
567                 break;
568         case 18: /* render preview */
569                 toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
570                 break;
571         case 19: /* zoom within border */
572                 view3d_border_zoom();
573                 break;
574         case 20: /* Transform  Space Panel */
575                 add_blockhandler(sa, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
576                 break;  
577         case 21: /* Grease Pencil */
578                 add_blockhandler(sa, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
579                 break;          
580         case 22: /* View all layers */
581                 do_layer_buttons(C, -2);
582                 break;
583         }
584         allqueue(REDRAWVIEW3D, 1);
585 }
586
587 static uiBlock *view3d_viewmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
588 {
589         ScrArea *sa= CTX_wm_area(C);
590         View3D *v3d= sa->spacedata.first;
591         uiBlock *block;
592         short yco= 0, menuwidth=120;
593         
594         block= uiBeginBlock(C, handle->region, "view3d_viewmenu", UI_EMBOSSP, UI_HELV);
595         uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
596         
597         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
598         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
599         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
600         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
601         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
602         
603         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
604         
605         if ((v3d->viewbut == 0) && !(v3d->persp == V3D_CAMOB)) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "User",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
606         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User",                                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
607         if (v3d->persp == V3D_CAMOB) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Camera|NumPad 0",     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
608         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
609         if (v3d->viewbut == 1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Top|NumPad 7",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
610         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
611         if (v3d->viewbut == 2) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Front|NumPad 1",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
612         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
613         if (v3d->viewbut == 3) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Side|NumPad 3",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
614         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
615         
616         uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
617         
618         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
619         
620         if(v3d->persp==V3D_PERSP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Perspective|NumPad 5",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
621         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
622         if(v3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
623         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
624         
625         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
626         
627         if(v3d->lay== (1<<20)-1) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Previous Layers|Shift ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
628         else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
629         
630         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
631         
632         if(v3d->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Local View|NumPad /",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
633         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
634         if(!v3d->localview) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Global View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
635         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
636         
637         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
638         
639         uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
640         uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
641         
642         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
643         
644         if(v3d->flag & V3D_CLIPPING)
645                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
646         else
647                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
648         if (v3d->persp==V3D_ORTHO) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Within Border...|Shift B",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 19, "");
649         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
650         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
651         if(!sa->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
652         else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
653
654         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
655         
656         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
657
658 #ifndef DISABLE_PYTHON
659         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
660         uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
661 #endif
662
663         if(handle->region->alignment==RGN_ALIGN_TOP) {
664                 uiBlockSetDirection(block, UI_DOWN);
665         }
666         else {
667                 uiBlockSetDirection(block, UI_TOP);
668                 uiBlockFlipOrder(block);
669         }
670
671         uiTextBoundsBlock(block, 50);
672         
673         return block;
674 }
675
676 void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
677 {
678 #if 0
679
680         extern void selectall_type(short obtype);
681         
682         switch(event) {
683         case 1: /* Mesh */
684                 selectall_type(OB_MESH);
685                 break;
686         case 2: /* Curve */
687                 selectall_type(OB_CURVE);
688                 break;
689         case 3: /* Surface */
690                 selectall_type(OB_SURF);
691                 break;
692         case 4: /* Meta */
693                 selectall_type(OB_MBALL);
694                 break;
695         case 5: /* Armature */
696                 selectall_type(OB_ARMATURE);
697                 break;
698         case 6: /* Lattice */
699                 selectall_type(OB_LATTICE);
700                 break;
701         case 7: /* Text */
702                 selectall_type(OB_FONT);
703                 break;
704         case 8: /* Empty */
705                 selectall_type(OB_EMPTY);
706                 break;
707         case 9: /* Camera */
708                 selectall_type(OB_CAMERA);
709                 break;
710         case 10: /* Lamp */
711                 selectall_type(OB_LAMP);
712                 break;
713         case 20:
714                 do_layer_buttons(C, -2);
715                 break;
716         }
717         allqueue(REDRAWVIEW3D, 0);
718 #endif
719 }
720
721 static uiBlock *view3d_select_object_typemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
722 {
723         uiBlock *block;
724         short yco = 20, menuwidth = 120;
725
726         block= uiBeginBlock(C, handle->region, "view3d_select_object_typemenu", UI_EMBOSSP, UI_HELV);
727         uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
728
729         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
730         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
731         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
732         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
733         
734         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
735         
736         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
737         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
738         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
739         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
740         
741         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
742         
743         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
744         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
745         
746         uiBlockSetDirection(block, UI_RIGHT);
747         uiTextBoundsBlock(block, 60);
748         return block;
749 }
750
751 void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
752 {
753 // XXX  extern void selectall_layer(unsigned int layernum);
754         
755         switch(event) {
756         case 0:
757         case 1:
758         case 2:
759         case 3:
760         case 4:
761         case 5:
762         case 6:
763         case 7:
764         case 8:
765         case 9:
766         case 10:
767         case 11:
768         case 12:
769         case 13:
770         case 14:
771         case 15:
772         case 16:
773         case 17:
774         case 18:
775         case 19:
776         case 20:
777 // XXX          selectall_layer(event);
778                 break;
779         }
780         allqueue(REDRAWVIEW3D, 0);
781 }
782
783 static uiBlock *view3d_select_object_layermenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
784 {
785         uiBlock *block;
786         short xco= 0, yco = 20, menuwidth = 22;
787
788         block= uiBeginBlock(C, handle->region, "view3d_select_object_layermenu", UI_EMBOSSP, UI_HELV);
789         uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
790
791         uiDefBut(block, BUTM, 1, "1",           xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
792         uiDefBut(block, BUTM, 1, "2",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
793         uiDefBut(block, BUTM, 1, "3",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
794         uiDefBut(block, BUTM, 1, "4",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
795         uiDefBut(block, BUTM, 1, "5",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
796         xco += 6;
797         uiDefBut(block, BUTM, 1, "6",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
798         uiDefBut(block, BUTM, 1, "7",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
799         uiDefBut(block, BUTM, 1, "8",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
800         uiDefBut(block, BUTM, 1, "9",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
801         uiDefBut(block, BUTM, 1, "10",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
802         xco = 0;
803         uiDefBut(block, BUTM, 1, "11",          xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
804         uiDefBut(block, BUTM, 1, "12",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
805         uiDefBut(block, BUTM, 1, "13",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
806         uiDefBut(block, BUTM, 1, "14",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
807         uiDefBut(block, BUTM, 1, "15",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
808         xco += 6;
809         uiDefBut(block, BUTM, 1, "16",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
810         uiDefBut(block, BUTM, 1, "17",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
811         uiDefBut(block, BUTM, 1, "18",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
812         uiDefBut(block, BUTM, 1, "19",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
813         uiDefBut(block, BUTM, 1, "20",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
814         
815         uiBlockSetDirection(block, UI_RIGHT);
816         /*uiTextBoundsBlock(block, 100);*/
817         return block;
818 }
819
820 void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
821 {
822 #if 0
823         switch(event) {
824         case 1: /* Object Ipo */
825         case 2: /* ObData */
826         case 3: /* Current Material */
827         case 4: /* Current Texture */
828                 selectlinks(event);
829                 break;
830         }
831         countall();
832         allqueue(REDRAWVIEW3D, 0);
833 #endif
834 }
835
836 static uiBlock *view3d_select_object_linkedmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
837 {
838         uiBlock *block;
839         short yco = 20, menuwidth = 120;
840
841         block= uiBeginBlock(C, handle->region, "view3d_select_object_linkedmenu", UI_EMBOSSP, UI_HELV);
842         uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
843
844         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
845         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
846         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
847         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
848         
849         uiBlockSetDirection(block, UI_RIGHT);
850         uiTextBoundsBlock(block, 60);
851         return block;
852 }
853
854 void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
855 {
856 #if 0
857         switch(event) {
858         case 1: /* Children */
859         case 2: /* Immediate Children */
860         case 3: /* Parent */
861         case 4: /* Siblings */
862         case 5: /* Type */
863         case 6: /* Objects on Shared Layers */
864         case 7: /* Objects in Same Group */
865         case 8: /* Object Hooks*/
866         case 9: /* Object PassIndex*/
867         case 10: /* Object Color*/
868         case 11: /* Game Properties*/
869                 select_object_grouped((short)event);
870                 break;
871         }
872         allqueue(REDRAWVIEW3D, 0);
873 #endif
874 }
875
876 static uiBlock *view3d_select_object_groupedmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
877 {
878         uiBlock *block;
879         short yco = 20, menuwidth = 120;
880
881         block= uiBeginBlock(C, handle->region, "view3d_select_object_groupedmenu", UI_EMBOSSP, UI_HELV);
882         uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
883
884         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
885         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
886         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
887         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
888         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects of Same Type|Shift G, 5",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
889         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects on Shared Layers|Shift G, 6",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
890         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Objects in Same Group|Shift G, 7",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
891         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
892         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
893         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");  
894         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");  
895
896         uiBlockSetDirection(block, UI_RIGHT);
897         uiTextBoundsBlock(block, 60);
898         return block;
899 }
900
901 void do_view3d_select_objectmenu(bContext *C, void *arg, int event)
902 {
903 #if 0
904         switch(event) {
905         
906         case 0: /* border select */
907                 borderselect();
908                 break;
909         case 1: /* Select/Deselect All */
910                 deselectall();
911                 break;
912         case 2: /* inverse */
913                 selectswap();
914                 break;
915         case 3: /* random */
916                 selectrandom();
917                 break;
918         }
919         allqueue(REDRAWVIEW3D, 0);
920 #endif
921 }
922
923 static uiBlock *view3d_select_objectmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
924 {
925         uiBlock *block;
926         short yco= 0, menuwidth=120;
927         
928         block= uiBeginBlock(C, handle->region, "view3d_select_objectmenu", UI_EMBOSSP, UI_HELV);
929         uiBlockSetButmFunc(block, do_view3d_select_objectmenu, NULL);
930         
931         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
932         
933         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
934         
935         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
936         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I",                                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
937         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random",                                                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
938         
939         uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
940         uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
941                 
942         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
943         
944         uiDefIconTextBlockBut(block, view3d_select_object_linkedmenu, NULL, ICON_RIGHTARROW_THIN, "Linked", 0, yco-=20, 120, 19, "");
945         uiDefIconTextBlockBut(block, view3d_select_object_groupedmenu, NULL, ICON_RIGHTARROW_THIN, "Grouped", 0, yco-=20, 120, 19, "");
946
947         if(handle->region->alignment==RGN_ALIGN_TOP) {
948                 uiBlockSetDirection(block, UI_DOWN);
949         }
950         else {
951                 uiBlockSetDirection(block, UI_TOP);
952                 uiBlockFlipOrder(block);
953         }
954         
955         uiTextBoundsBlock(block, 50);
956         return block;
957 }
958
959 void do_view3d_select_meshmenu(bContext *C, void *arg, int event)
960 {
961 #if 0
962 /*      extern void borderselect(void);*/
963
964         switch(event) {
965         
966                 case 0: /* border select */
967                         borderselect();
968                         break;
969                 case 2: /* Select/Deselect all */
970                         deselectall_mesh();
971                         break;
972                 case 3: /* Inverse */
973                         selectswap_mesh();
974                         break;
975                 case 4: /* select linked vertices */
976                         selectconnected_mesh_all();
977                         break;
978                 case 5: /* select random */
979                         selectrandom_mesh();
980                         break;
981                 case 7: /* select more */
982                         select_more();
983                         break;
984                 case 8: /* select less */
985                         select_less();
986                         break;
987                 case 9: /* select non-manifold */
988                         select_non_manifold();
989                         break;
990                 case 11: /* select triangles */
991                         select_faces_by_numverts(3);
992                         break;
993                 case 12: /* select quads */
994                         select_faces_by_numverts(4);
995                         break;
996                 case 13: /* select non-triangles/quads */
997                         select_faces_by_numverts(5);
998                         break;
999                 case 14: /* select sharp edges */
1000                         select_sharp_edges();
1001                         break;
1002                 case 15: /* select linked flat faces */
1003                         select_linked_flat_faces();
1004                         break;
1005
1006                 case 16: /* path select */
1007                         pathselect();
1008                         BIF_undo_push("Path Select");
1009                         break;
1010                 case 17: /* edge loop select */
1011                         loop_multiselect(0);
1012                         break;
1013                 case 18: /* edge ring select */
1014                         loop_multiselect(1);
1015                         break;
1016                 case 19: /* loop to region */
1017                         loop_to_region();
1018                         break;
1019                 case 20: /* region to loop */
1020                         region_to_loop();
1021                         break;
1022                 case 21: /* Select grouped */
1023                         select_mesh_group_menu();
1024                         break;
1025         }
1026         allqueue(REDRAWVIEW3D, 0);
1027 #endif
1028 }
1029
1030
1031 static uiBlock *view3d_select_meshmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1032 {
1033         uiBlock *block;
1034         short yco= 0, menuwidth=120;
1035         
1036         block= uiBeginBlock(C, handle->region, "view3d_select_meshmenu", UI_EMBOSSP, UI_HELV);
1037         uiBlockSetButmFunc(block, do_view3d_select_meshmenu, NULL);
1038         
1039         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1040         
1041         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1042         
1043         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1044         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1045         
1046         uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
1047                          menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1048         
1049         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1050         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
1051                                          "Non-Manifold|Ctrl Alt Shift M", 
1052                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1053         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
1054                                          "Sharp Edges|Ctrl Alt Shift S", 
1055                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1056         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
1057                                          "Linked Flat Faces|Ctrl Alt Shift F", 
1058                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1059         
1060         uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
1061                          menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1062
1063         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
1064                                          "Triangles|Ctrl Alt Shift 3", 
1065                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1066         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
1067                                          "Quads|Ctrl Alt Shift 4", 
1068                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1069         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
1070                                          "Non-Triangles/Quads|Ctrl Alt Shift 5", 
1071                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1072         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
1073                                          "Similar to Selection...|Shift G", 
1074                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1075
1076         uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
1077                          menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1078
1079         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
1080                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1081         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
1082                                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1083
1084         uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
1085                          menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1086
1087         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1088         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Path|W Alt 7",                            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1089         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Loop|Ctrl E 6",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1090         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Edge Ring|Ctrl E 7",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1091         
1092         uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
1093                          menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1094         
1095         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop to Region|Ctrl E 8",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1096         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Region to Loop|Ctrl E 9",                        0, yco-=20, menuwidth, 20, NULL, 0.0, 0.0, 1, 20, "");  
1097         
1098         if(handle->region->alignment==RGN_ALIGN_TOP) {
1099                 uiBlockSetDirection(block, UI_DOWN);
1100         }
1101         else {
1102                 uiBlockSetDirection(block, UI_TOP);
1103                 uiBlockFlipOrder(block);
1104         }
1105
1106         uiTextBoundsBlock(block, 50);
1107         return block;
1108 }
1109
1110 void do_view3d_select_curvemenu(bContext *C, void *arg, int event)
1111 {
1112 #if 0
1113 /*      extern void borderselect(void);*/
1114
1115         switch(event) {
1116                 case 0: /* border select */
1117                         borderselect();
1118                         break;
1119                 case 2: /* Select/Deselect all */
1120                         deselectall_nurb();
1121                         break;
1122                 case 3: /* Inverse */
1123                         selectswapNurb();
1124                         break;
1125                 /* select connected control points */
1126                 /*case 4:
1127                         G.qual |= LR_CTRLKEY;
1128                         select_connected_nurb();
1129                         G.qual &= ~LR_CTRLKEY;
1130                         break;*/
1131                 case 5: /* select row (nurb) */
1132                         selectrow_nurb();
1133                         break;
1134                 case 7: /* select/deselect first */
1135                         selectend_nurb(FIRST, 1, DESELECT);
1136                         break;
1137                 case 8: /* select/deselect last */ 
1138                         selectend_nurb(LAST, 1, DESELECT);
1139                         break;
1140                 case 9: /* select more */
1141                         select_more_nurb();
1142                         break;
1143                 case 10: /* select less */
1144                         select_less_nurb();
1145                         break;
1146                 case 11: /* select next */
1147                         select_next_nurb();
1148                         break;
1149                 case 12: /* select previous */
1150                         select_prev_nurb();
1151                         break;
1152                 case 13: /* select random */
1153                         select_random_nurb();
1154                         break;
1155                 case 14: /* select every nth */
1156                         select_every_nth_nurb();
1157                         break;
1158         }
1159         allqueue(REDRAWVIEW3D, 0);
1160 #endif
1161 }
1162
1163
1164 static uiBlock *view3d_select_curvemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1165 {
1166         Scene *scene= CTX_data_scene(C);
1167         uiBlock *block;
1168         short yco= 0, menuwidth=120;
1169         
1170         block= uiBeginBlock(C, handle->region, "view3d_select_curvemenu", UI_EMBOSSP, UI_HELV);
1171         uiBlockSetButmFunc(block, do_view3d_select_curvemenu, NULL);
1172         
1173         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1174         
1175         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1176         
1177         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1178         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1179         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1180         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Every Nth",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1181         
1182         if (OBACT->type == OB_SURF) {
1183                 uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1184                 
1185                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Control Point Row|Shift R",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1186         }
1187         else {
1188                 uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1189                 
1190                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect First",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1191                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect Last",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1192                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Next",                            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1193                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Previous",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1194         }
1195         
1196         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1197         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1198         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1199         
1200         /* commented out because it seems to only like the LKEY method - based on mouse pointer position :( */
1201         /*uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Connected Control Points|Ctrl L",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");*/
1202                 
1203         if(handle->region->alignment==RGN_ALIGN_TOP) {
1204                 uiBlockSetDirection(block, UI_DOWN);
1205         }
1206         else {
1207                 uiBlockSetDirection(block, UI_TOP);
1208                 uiBlockFlipOrder(block);
1209         }
1210         
1211         uiTextBoundsBlock(block, 50);
1212         return block;
1213 }
1214
1215 void do_view3d_select_metaballmenu(bContext *C, void *arg, int event)
1216 {
1217 #if 0
1218
1219         switch(event) {
1220                 case 0: /* border select */
1221                         borderselect();
1222                         break;
1223                 case 2: /* Select/Deselect all */
1224                         deselectall_mball();
1225                         break;
1226                 case 3: /* Inverse */
1227                         selectinverse_mball();
1228                         break;
1229                 case 4: /* Select Random */
1230                         selectrandom_mball();
1231                         break;
1232         }
1233         allqueue(REDRAWVIEW3D, 0);
1234 #endif
1235 }
1236
1237
1238 static uiBlock *view3d_select_metaballmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1239 {
1240         uiBlock *block;
1241         short yco= 0, menuwidth=120;
1242         
1243         block= uiBeginBlock(C, handle->region, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV);
1244         uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
1245         
1246         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1247         
1248         uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1249         
1250         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1251
1252         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1253                 
1254         uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1255
1256         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Random...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1257
1258         if(handle->region->alignment==RGN_ALIGN_TOP) {
1259                 uiBlockSetDirection(block, UI_DOWN);
1260         }
1261         else {
1262                 uiBlockSetDirection(block, UI_TOP);
1263                 uiBlockFlipOrder(block);
1264         }
1265
1266         uiTextBoundsBlock(block, 50);
1267         return block;
1268 }
1269
1270 static void do_view3d_select_latticemenu(bContext *C, void *arg, int event)
1271 {
1272 #if 0
1273 /*      extern void borderselect(void);*/
1274         
1275         switch(event) {
1276                         case 0: /* border select */
1277                         borderselect();
1278                         break;
1279                 case 2: /* Select/Deselect all */
1280                         deselectall_Latt();
1281                         break;
1282         }
1283         allqueue(REDRAWVIEW3D, 0);
1284 #endif
1285 }
1286
1287 static uiBlock *view3d_select_latticemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1288 {
1289         uiBlock *block;
1290         short yco= 0, menuwidth=120;
1291         
1292         block= uiBeginBlock(C, handle->region, "view3d_select_latticemenu", UI_EMBOSSP, UI_HELV);
1293         uiBlockSetButmFunc(block, do_view3d_select_latticemenu, NULL);
1294         
1295         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1296         
1297         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1298         
1299         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1300
1301         if(handle->region->alignment==RGN_ALIGN_TOP) {
1302                 uiBlockSetDirection(block, UI_DOWN);
1303         }
1304         else {
1305                 uiBlockSetDirection(block, UI_TOP);
1306                 uiBlockFlipOrder(block);
1307         }
1308
1309         uiTextBoundsBlock(block, 50);
1310         return block;
1311 }
1312
1313 static void do_view3d_select_armaturemenu(bContext *C, void *arg, int event)
1314 {
1315 #if 0
1316 /*      extern void borderselect(void);*/
1317
1318         switch(event) {
1319                 case 0: /* border select */
1320                         borderselect();
1321                         break;
1322                 case 2: /* Select/Deselect all */
1323                         deselectall_armature(1, 1);
1324                         break;
1325                 case 3: /* Swap Select All */
1326                         deselectall_armature(3, 1);
1327                         break;
1328                 case 4: /* Select parent */
1329                         armature_select_hierarchy(BONE_SELECT_PARENT, 0);
1330                         break;
1331                 case 5: /* Select child */
1332                         armature_select_hierarchy(BONE_SELECT_CHILD, 0);
1333                         break;
1334                 case 6: /* Extend Select parent */
1335                         armature_select_hierarchy(BONE_SELECT_PARENT, 1);
1336                         break;
1337                 case 7: /* Extend Select child */
1338                         armature_select_hierarchy(BONE_SELECT_CHILD, 1);
1339                         break;
1340         }
1341         allqueue(REDRAWVIEW3D, 0);
1342 #endif
1343 }
1344
1345 static uiBlock *view3d_select_armaturemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1346 {
1347         uiBlock *block;
1348         short yco= 0, menuwidth=120;
1349         
1350         block= uiBeginBlock(C, handle->region, "view3d_select_armaturemenu", UI_EMBOSSP, UI_HELV);
1351         uiBlockSetButmFunc(block, do_view3d_select_armaturemenu, NULL);
1352         
1353         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1354         
1355         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1356         
1357         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1358         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse|Ctrl I",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1359         
1360         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1361         
1362         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[",                                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1363         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]",                                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1364         
1365         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1366         
1367         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [",                                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1368         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]",                                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1369         
1370         if(handle->region->alignment==RGN_ALIGN_TOP) {
1371                 uiBlockSetDirection(block, UI_DOWN);
1372         }
1373         else {
1374                 uiBlockSetDirection(block, UI_TOP);
1375                 uiBlockFlipOrder(block);
1376         }
1377
1378         uiTextBoundsBlock(block, 50);
1379         return block;
1380 }
1381
1382 static void do_view3d_select_pose_armaturemenu(bContext *C, void *arg, int event)
1383 {
1384 #if 0
1385 /*      extern void borderselect(void);*/
1386         
1387         switch(event) {
1388         case 0: /* border select */
1389                 borderselect();
1390                 break;
1391         case 2: /* Select/Deselect all */
1392                 deselectall_posearmature(OBACT, 1, 1);
1393                 break;
1394         case 3: /* Select Target(s) of Constraint(s) */
1395                 pose_select_constraint_target();
1396                 break;
1397         case 5: /* Swap Select All */
1398                 deselectall_posearmature(OBACT, 3, 1);
1399                 break;
1400         case 6: /* Select parent */
1401                 pose_select_hierarchy(BONE_SELECT_PARENT, 0);
1402                 break;
1403         case 7: /* Select child */
1404                 pose_select_hierarchy(BONE_SELECT_CHILD, 0);
1405                 break;
1406         case 8: /* Extend Select parent */
1407                 pose_select_hierarchy(BONE_SELECT_PARENT, 1);
1408                 break;
1409         case 9: /* Extend Select child */
1410                 pose_select_hierarchy(BONE_SELECT_CHILD, 1);
1411                 break;
1412         }
1413         allqueue(REDRAWVIEW3D, 0);
1414 #endif
1415 }
1416
1417 static uiBlock *view3d_select_pose_armaturemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1418 {
1419         uiBlock *block;
1420         short yco= 0, menuwidth=120;
1421         
1422         block= uiBeginBlock(C, handle->region, "view3d_select_pose_armaturemenu", UI_EMBOSSP, UI_HELV);
1423         uiBlockSetButmFunc(block, do_view3d_select_pose_armaturemenu, NULL);
1424         
1425         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1426         
1427         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1428         
1429         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1430         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Swap Select All|Ctrl I",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1431         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint Target|W",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1432         
1433         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1434         
1435         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Parent|[",                                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1436         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Child|]",                                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1437         
1438         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1439         
1440         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Parent|Shift [",                                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1441         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extend Select Child|Shift ]",                                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1442         
1443         if(handle->region->alignment==RGN_ALIGN_TOP) {
1444                 uiBlockSetDirection(block, UI_DOWN);
1445         }
1446         else {
1447                 uiBlockSetDirection(block, UI_TOP);
1448                 uiBlockFlipOrder(block);
1449         }
1450
1451         uiTextBoundsBlock(block, 50);
1452         return block;
1453 }
1454
1455 void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
1456 {
1457 #if 0
1458         /* events >= 6 are registered bpython scripts */
1459 #ifndef DISABLE_PYTHON
1460         if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1461 #endif
1462         
1463         switch(event) {
1464                 case 0: /* border select */
1465                         borderselect();
1466                         break;
1467                 case 2: /* Select/Deselect all */
1468                         deselectall_tface();
1469                         break;
1470                 case 3: /* Select Inverse */
1471                         selectswap_tface();
1472                         break;
1473                 case 4: /* Select Linked */
1474                         select_linked_tfaces(2);
1475                         break;
1476         }
1477         allqueue(REDRAWVIEW3D, 0);
1478 #endif
1479 }
1480
1481 static uiBlock *view3d_select_faceselmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1482 {
1483         uiBlock *block;
1484         short yco= 0, menuwidth=120;
1485 #ifndef DISABLE_PYTHON
1486 // XXX  BPyMenu *pym;
1487 //      int i = 0;
1488 #endif
1489
1490         block= uiBeginBlock(C, handle->region, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV);
1491         uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1492         
1493         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1494         
1495         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1496         
1497         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1498         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1499
1500         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1501         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1502
1503 #ifndef DISABLE_PYTHON
1504 //      uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1505
1506         /* note that we account for the 6 previous entries with i+6: */
1507 //      for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1508 //              uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1509 //                      menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1510 //                      pym->tooltip?pym->tooltip:pym->filename);
1511 //      }
1512 #endif
1513         
1514         if(handle->region->alignment==RGN_ALIGN_TOP) {
1515                 uiBlockSetDirection(block, UI_DOWN);
1516         }
1517         else {
1518                 uiBlockSetDirection(block, UI_TOP);
1519                 uiBlockFlipOrder(block);
1520         }
1521
1522         uiTextBoundsBlock(block, 50);
1523         return block;
1524 }
1525
1526 void do_view3d_edit_snapmenu(bContext *C, void *arg, int event)
1527 {
1528 #if 0
1529         switch (event) {
1530         case 1: /*Selection to grid*/
1531             snap_sel_to_grid();
1532                 BIF_undo_push("Snap selection to grid");
1533             break;
1534         case 2: /*Selection to cursor*/
1535             snap_sel_to_curs();
1536                 BIF_undo_push("Snap selection to cursor");
1537             break;
1538         case 3: /*Selection to center of selection*/
1539             snap_to_center();
1540                 BIF_undo_push("Snap selection to center");
1541             break;
1542         case 4: /*Cursor to selection*/
1543             snap_curs_to_sel();
1544             break;
1545         case 5: /*Cursor to grid*/
1546             snap_curs_to_grid();
1547             break;
1548         case 6: /*Cursor to Active*/
1549             snap_curs_to_active();
1550                 BIF_undo_push("Snap selection to center");
1551             break;
1552         }
1553         allqueue(REDRAWVIEW3D, 0);
1554 #endif
1555 }
1556
1557 static uiBlock *view3d_edit_snapmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1558 {
1559         uiBlock *block;
1560         short yco = 20, menuwidth = 120;
1561
1562         block= uiBeginBlock(C, handle->region, "view3d_edit_snapmenu", UI_EMBOSSP, UI_HELV);
1563         uiBlockSetButmFunc(block, do_view3d_edit_snapmenu, NULL);
1564         
1565         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Grid|Shift S, 1",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1566         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Cursor|Shift S, 2",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1567         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selection -> Center|Shift S, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1568         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1569         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Selection|Shift S, 4",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1570         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Grid|Shift S, 5",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1571         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Cursor -> Active|Shift S, 6",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1572         
1573         
1574         
1575         uiBlockSetDirection(block, UI_RIGHT);
1576         uiTextBoundsBlock(block, 60);
1577         return block;
1578 }
1579
1580 void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
1581 {
1582 #if 0
1583         float mat[3][3];
1584         
1585         Mat3One(mat);
1586         
1587         switch(event)
1588         {
1589             case 0: /* X Global */
1590                         initTransform(TFM_TRANSLATION, CTX_NONE);
1591                         BIF_setSingleAxisConstraint(mat[0], " X");
1592                         Transform();
1593                         break;
1594                 case 1: /* Y Global */
1595                         initTransform(TFM_TRANSLATION, CTX_NONE);
1596                         BIF_setSingleAxisConstraint(mat[1], " Y");
1597                         Transform();
1598                         break;
1599                 case 2: /* Z Global */
1600                         initTransform(TFM_TRANSLATION, CTX_NONE);
1601                         BIF_setSingleAxisConstraint(mat[2], " Z");
1602                         Transform();
1603                         break;
1604                 case 3: /* X Local */
1605                         initTransform(TFM_TRANSLATION, CTX_NONE);
1606                         BIF_setLocalAxisConstraint('X', " X");
1607                         Transform();
1608                         break;
1609                 case 4: /* Y Local */
1610                         initTransform(TFM_TRANSLATION, CTX_NONE);
1611                         BIF_setLocalAxisConstraint('Y', " Y");
1612                         Transform();
1613                         break;
1614                 case 5: /* Z Local */
1615                         initTransform(TFM_TRANSLATION, CTX_NONE);
1616                         BIF_setLocalAxisConstraint('Z', " Z");
1617                         Transform();
1618                         break;
1619         }
1620         allqueue(REDRAWVIEW3D, 0);
1621 #endif
1622 }
1623
1624 static uiBlock *view3d_transform_moveaxismenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1625 {
1626         uiBlock *block;
1627         short yco = 20, menuwidth = 120;
1628
1629         block= uiBeginBlock(C, handle->region, "view3d_transform_moveaxismenu", UI_EMBOSSP, UI_HELV);
1630         uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1631
1632         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1633         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1634         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1635         
1636         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1637         
1638         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1639         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1640         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1641         
1642         
1643         uiBlockSetDirection(block, UI_RIGHT);
1644         uiTextBoundsBlock(block, 60);
1645         return block;
1646 }
1647
1648 void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event)
1649 {
1650 #if 0
1651         float mat[3][3];
1652         
1653         Mat3One(mat);
1654         
1655         switch(event)
1656         {
1657             case 0: /* X Global */
1658                         initTransform(TFM_ROTATION, CTX_NONE);
1659                         BIF_setSingleAxisConstraint(mat[0], " X");
1660                         Transform();
1661                         break;
1662                 case 1: /* Y Global */
1663                         initTransform(TFM_ROTATION, CTX_NONE);
1664                         BIF_setSingleAxisConstraint(mat[1], " Y");
1665                         Transform();
1666                         break;
1667                 case 2: /* Z Global */
1668                         initTransform(TFM_ROTATION, CTX_NONE);
1669                         BIF_setSingleAxisConstraint(mat[2], " Z");
1670                         Transform();
1671                         break;
1672                 case 3: /* X Local */
1673                         initTransform(TFM_ROTATION, CTX_NONE);
1674                         BIF_setLocalAxisConstraint('X', " X");
1675                         Transform();
1676                         break;
1677                 case 4: /* Y Local */
1678                         initTransform(TFM_ROTATION, CTX_NONE);
1679                         BIF_setLocalAxisConstraint('Y', " Y");
1680                         Transform();
1681                         break;
1682                 case 5: /* Z Local */
1683                         initTransform(TFM_ROTATION, CTX_NONE);
1684                         BIF_setLocalAxisConstraint('Z', " Z");
1685                         Transform();
1686                         break;
1687         }
1688         allqueue(REDRAWVIEW3D, 0);
1689 #endif
1690 }
1691
1692 static uiBlock *view3d_transform_rotateaxismenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1693 {
1694         uiBlock *block;
1695         short yco = 20, menuwidth = 120;
1696
1697         block= uiBeginBlock(C, handle->region, "view3d_transform_rotateaxismenu", UI_EMBOSSP, UI_HELV);
1698         uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1699
1700         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1701         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1702         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1703         
1704         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1705         
1706         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1707         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1708         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1709         
1710         
1711         uiBlockSetDirection(block, UI_RIGHT);
1712         uiTextBoundsBlock(block, 60);
1713         return block;
1714 }
1715
1716 void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event)
1717 {
1718 #if 0
1719         float mat[3][3];
1720         
1721         Mat3One(mat);
1722         
1723         switch(event)
1724         {
1725             case 0: /* X Global */
1726                         initTransform(TFM_RESIZE, CTX_NONE);
1727                         BIF_setSingleAxisConstraint(mat[0], " X");
1728                         Transform();
1729                         break;
1730                 case 1: /* Y Global */
1731                         initTransform(TFM_RESIZE, CTX_NONE);
1732                         BIF_setSingleAxisConstraint(mat[1], " Y");
1733                         Transform();
1734                         break;
1735                 case 2: /* Z Global */
1736                         initTransform(TFM_RESIZE, CTX_NONE);
1737                         BIF_setSingleAxisConstraint(mat[2], " Z");
1738                         Transform();
1739                         break;
1740                 case 3: /* X Local */
1741                         initTransform(TFM_RESIZE, CTX_NONE);
1742                         BIF_setLocalAxisConstraint('X', " X");
1743                         Transform();
1744                         break;
1745                 case 4: /* Y Local */
1746                         initTransform(TFM_RESIZE, CTX_NONE);
1747                         BIF_setLocalAxisConstraint('X', " X");
1748                         Transform();
1749                         break;
1750                 case 5: /* Z Local */
1751                         initTransform(TFM_RESIZE, CTX_NONE);
1752                         BIF_setLocalAxisConstraint('X', " X");
1753                         Transform();
1754                         break;
1755         }
1756         allqueue(REDRAWVIEW3D, 0);
1757 #endif
1758 }
1759
1760 static uiBlock *view3d_transform_scaleaxismenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1761 {
1762         uiBlock *block;
1763         short yco = 20, menuwidth = 120;
1764
1765         block= uiBeginBlock(C, handle->region, "view3d_transform_scaleaxismenu", UI_EMBOSSP, UI_HELV);
1766         uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1767
1768         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1769         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1770         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1771         
1772         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1773         
1774         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1775         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1776         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1777         
1778         
1779         uiBlockSetDirection(block, UI_RIGHT);
1780         uiTextBoundsBlock(block, 60);
1781         return block;
1782 }
1783
1784 static void do_view3d_transformmenu(bContext *C, void *arg, int event)
1785 {
1786 #if 0
1787         Scene *scene= CTX_data_scene(C);
1788         
1789         switch(event) {
1790         case 1:
1791                 initTransform(TFM_TRANSLATION, CTX_NONE);
1792                 Transform();
1793                 break;
1794         case 2:
1795                 initTransform(TFM_ROTATION, CTX_NONE);
1796                 Transform();
1797                 break;
1798         case 3:
1799                 initTransform(TFM_RESIZE, CTX_NONE);
1800                 Transform();
1801                 break;
1802         case 4:
1803                 image_aspect();
1804                 break;
1805         case 5:
1806                 initTransform(TFM_TOSPHERE, CTX_NONE);
1807                 Transform();
1808                 break;
1809         case 6:
1810                 initTransform(TFM_SHEAR, CTX_NONE);
1811                 Transform();
1812                 break;
1813         case 7:
1814                 initTransform(TFM_WARP, CTX_NONE);
1815                 Transform();
1816                 break;
1817         case 8:
1818                 initTransform(TFM_PUSHPULL, CTX_NONE);
1819                 Transform();
1820                 break;
1821         case 9:
1822                 if (G.obedit) {
1823                         if (G.obedit->type == OB_MESH)
1824                                 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1825                                 Transform();
1826                 } else error("Only meshes can be shrinked/fattened");
1827                 break;
1828         case 10:
1829                 docenter(0);
1830                 break;
1831         case 11:
1832                 docenter_new();
1833                 break;
1834         case 12:
1835                 docenter_cursor();
1836                 break;
1837         case 13:
1838                 initTransform(TFM_TILT, CTX_NONE);
1839                 Transform();
1840                 break;
1841         case 14:
1842                 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1843                 Transform();
1844                 break;
1845         case 15:
1846                 scene->snap_flag &= ~SCE_SNAP;
1847                 break;
1848         case 16:
1849                 scene->snap_flag |= SCE_SNAP;
1850                 break;
1851         case 17:
1852                 scene->snap_target = SCE_SNAP_TARGET_CLOSEST;
1853                 break;
1854         case 18:
1855                 scene->snap_target = SCE_SNAP_TARGET_CENTER;
1856                 break;
1857         case 19:
1858                 scene->snap_target = SCE_SNAP_TARGET_MEDIAN;
1859                 break;
1860         case 20:
1861                 scene->snap_target = SCE_SNAP_TARGET_ACTIVE;
1862                 break;
1863         case 21:
1864                 alignmenu();
1865                 break;
1866         }
1867         allqueue(REDRAWVIEW3D, 0);
1868 #endif
1869 }
1870
1871 static uiBlock *view3d_transformmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
1872 {
1873         Scene *scene= CTX_data_scene(C);
1874         uiBlock *block;
1875         short yco = 20, menuwidth = 120;
1876
1877         block= uiBeginBlock(C, handle->region, "view3d_transformmenu", UI_EMBOSSP, UI_HELV);
1878         uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1879
1880         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1881         uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1882                 
1883         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1884         uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1885
1886         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1887         uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1888
1889         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1890         
1891         if (G.obedit) {
1892                 if (G.obedit->type == OB_MESH)
1893                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1894                 else if (G.obedit->type == OB_CURVE) {
1895                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1896                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S",     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1897                 }
1898         }
1899         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1900         if (G.obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1901         else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1902         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1903         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1904         
1905         if (!G.obedit) {
1906                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1907                 
1908                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale to Image Aspect Ratio|Alt V",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1909         }
1910         
1911         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1912
1913         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1914         if (!G.obedit) {
1915                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1916                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1917                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align to Transform Orientation|Ctrl Alt A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1918         }
1919         
1920         if (BIF_snappingSupported())
1921         {
1922                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1923         
1924                 if (scene->snap_flag & SCE_SNAP)
1925                 {
1926                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1927                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1928                 }
1929                 else
1930                 {
1931                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1932                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1933                 }
1934                         
1935                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1936
1937                 switch(scene->snap_target)
1938                 {
1939                         case SCE_SNAP_TARGET_CLOSEST:
1940                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1941                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1942                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1943                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1944                                 break;
1945                         case SCE_SNAP_TARGET_CENTER:
1946                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1947                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1948                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1949                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1950                                 break;
1951                         case SCE_SNAP_TARGET_MEDIAN:
1952                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1953                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1954                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1955                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1956                                 break;
1957                         case SCE_SNAP_TARGET_ACTIVE:
1958                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1959                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1960                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1961                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1962                                 break;
1963                 }
1964         }
1965
1966         uiBlockSetDirection(block, UI_RIGHT);
1967         uiTextBoundsBlock(block, 60);
1968         return block;
1969 }
1970
1971 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
1972 {
1973 #if 0
1974         switch(event) {
1975                 case 0:
1976                         initTransform(TFM_MIRROR, CTX_NO_PET);
1977                         Transform();
1978                         break;
1979                 case 1:
1980                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1981                         BIF_setLocalAxisConstraint('X', " on X axis");
1982                         Transform();
1983                         break;
1984                 case 2:
1985                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1986                         BIF_setLocalAxisConstraint('Y', " on Y axis");
1987                         Transform();
1988                         break;
1989                 case 3:
1990                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1991                         BIF_setLocalAxisConstraint('Z', " on Z axis");
1992                         Transform();
1993                         break;
1994         }
1995         allqueue(REDRAWVIEW3D, 0);
1996 #endif
1997 }
1998
1999 static uiBlock *view3d_object_mirrormenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2000 {
2001         uiBlock *block;
2002         short yco = 20, menuwidth = 120;
2003
2004         block= uiBeginBlock(C, handle->region, "view3d_object_mirrormenu", UI_EMBOSSP, UI_HELV);
2005         uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
2006         
2007         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2008         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2009         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2010         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2011         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2012
2013         uiBlockSetDirection(block, UI_RIGHT);
2014         uiTextBoundsBlock(block, 60);
2015         return block;
2016 }
2017
2018 static void do_view3d_edit_object_transformmenu(bContext *C, void *arg, int event)
2019 {
2020 #if 0
2021         switch(event) {
2022         case 0: /*      clear origin */
2023                 clear_object('o');
2024                 break;
2025         case 1: /* clear scale */
2026                 clear_object('s');
2027                 break;
2028         case 2: /* clear rotation */
2029                 clear_object('r');
2030                 break;
2031         case 3: /* clear location */
2032                 clear_object('g');
2033                 break;
2034         case 4:
2035                 if(OBACT) object_apply_deform(OBACT);
2036                 break;
2037         case 5: /* make duplis real */
2038                 make_duplilist_real();
2039                 break;
2040         case 6: /* apply scale/rotation or deformation */
2041                 apply_objects_locrot();
2042                 break;  
2043         case 7: /* apply visual matrix to objects loc/size/rot */
2044                 apply_objects_visual_tx();
2045                 break;  
2046         }
2047         allqueue(REDRAWVIEW3D, 0);
2048 #endif
2049 }
2050
2051 static uiBlock *view3d_edit_object_transformmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2052 {
2053         uiBlock *block;
2054         short yco = 20, menuwidth = 120;
2055
2056         block= uiBeginBlock(C, handle->region, "view3d_edit_object_transformmenu", UI_EMBOSSP, UI_HELV);
2057         uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
2058         
2059         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Scale/Rotation to ObData|Ctrl A, 1",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2060         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2061         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2062         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2063         
2064         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2065         
2066         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2067         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2068         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2069         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2070         
2071         uiBlockSetDirection(block, UI_RIGHT);
2072         uiTextBoundsBlock(block, 60);
2073         return block;
2074 }
2075
2076 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
2077 {
2078 #if 0
2079         switch(event) {
2080                 case 1:
2081                 case 2:
2082                 case 3:
2083                         make_local(event);
2084                         break;
2085         }
2086 #endif
2087 }
2088
2089 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2090 {       
2091         uiBlock *block;
2092         short yco = 20, menuwidth = 120;
2093         
2094         block= uiBeginBlock(C, handle->region, "view3d_edit_object_makelocalmenu", UI_EMBOSSP, UI_HELV);
2095         uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
2096         
2097         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2098         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2099         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2100         
2101         uiBlockSetDirection(block, UI_RIGHT);
2102         uiTextBoundsBlock(block, 60);
2103         return block;
2104 }
2105
2106 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
2107 {
2108 #if 0
2109         switch(event) {
2110         case 1:
2111         case 2:
2112         case 3:
2113         case 4:
2114                 make_links((short)event);
2115                 break;
2116                 }
2117         allqueue(REDRAWVIEW3D, 0);
2118 #endif
2119 }
2120
2121 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2122 {
2123         Scene *scene= CTX_data_scene(C);
2124         Object *ob=NULL;
2125         
2126         uiBlock *block;
2127         short yco = 20, menuwidth = 120;
2128
2129         block= uiBeginBlock(C, handle->region, "view3d_edit_object_makelinksmenu", UI_EMBOSSP, UI_HELV);
2130         uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
2131         
2132         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2133         
2134         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2135         
2136         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2137         
2138         if ((ob=OBACT)) {
2139         
2140                 if(ob->type==OB_MESH) {
2141                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2142                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2143                 } else if(ob->type==OB_CURVE) {
2144                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2145                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2146                 } else if(ob->type==OB_FONT) {
2147                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2148                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2149                 } else if(ob->type==OB_SURF) {
2150                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2151                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2152                 } else if(ob->type==OB_MBALL) {
2153                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2154                 } else if(ob->type==OB_CAMERA) {
2155                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2156                 } else if(ob->type==OB_LAMP) {
2157                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2158                 } else if(ob->type==OB_LATTICE) {
2159                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2160                 } else if(ob->type==OB_ARMATURE) {
2161                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2162                 }
2163         }
2164         
2165         uiBlockSetDirection(block, UI_RIGHT);
2166         uiTextBoundsBlock(block, 60);
2167         return block;
2168 }
2169
2170 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
2171 {
2172 #if 0
2173         switch(event) {
2174         case 1: /* Object */
2175                 single_object_users(1);
2176                 break;
2177         case 2: /* Object & ObData */ 
2178                 single_object_users(1);
2179                 single_obdata_users(1);
2180                 break;
2181         case 3: /* Object & ObData & Materials+Tex */
2182                 single_object_users(1);
2183                 single_obdata_users(1);
2184                 single_mat_users(1); /* also tex */
2185                 break;
2186         case 4: /* Materials+Tex */
2187                 single_mat_users(1);
2188                 break;
2189         case 5: /* Ipo */
2190                 single_ipo_users(1);
2191                 break;
2192         }
2193         
2194         clear_id_newpoins();
2195         countall();
2196         
2197         allqueue(REDRAWALL, 0);
2198 #endif
2199 }
2200
2201 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2202 {
2203
2204         uiBlock *block;
2205         short yco = 20, menuwidth = 120;
2206
2207         block= uiBeginBlock(C, handle->region, "view3d_edit_object_singleusermenu", UI_EMBOSSP, UI_HELV);
2208         uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
2209         
2210         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2211         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2212         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2213         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2214         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2215         
2216         uiBlockSetDirection(block, UI_RIGHT);
2217         uiTextBoundsBlock(block, 60);
2218         return block;
2219 }
2220
2221 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
2222 {
2223         switch(event) {
2224         case 1:
2225         case 2:
2226         case 3:
2227         case 4:
2228         case 5:
2229         case 6:
2230         case 7:
2231         case 8:
2232         case 9:
2233         case 10:
2234         case 11:
2235         case 17:
2236         case 18:
2237         case 19:
2238         case 20:
2239         case 21:
2240         case 22:
2241         case 23:
2242         case 24:
2243         case 25:
2244         case 26:
2245         case 29:
2246         case 30:
2247 // XXX          copy_attr((short)event);
2248                 break;
2249                 }
2250         allqueue(REDRAWVIEW3D, 0);
2251 }
2252
2253 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2254 {
2255         Scene *scene= CTX_data_scene(C);
2256         Object *ob=NULL;
2257         
2258         uiBlock *block;
2259         short yco = 20, menuwidth = 120;
2260
2261         block= uiBeginBlock(C, handle->region, "view3d_edit_object_copyattrmenu", UI_EMBOSSP, UI_HELV);
2262         uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
2263         
2264         ob= OBACT;
2265         
2266         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2267         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2268         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2269         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2270         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2271         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2272         
2273         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2274         
2275         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2276         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2277         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2278         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2279         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2280         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
2281         
2282         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2283         
2284         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2285         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
2286         
2287         if (ob) {
2288         
2289                 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
2290                                 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
2291                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2292                 }       
2293                 
2294                 if(ob->type == OB_FONT) {
2295                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2296                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2297                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2298                 }
2299                 if(ob->type == OB_CURVE) {
2300                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2301                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2302                 }
2303         
2304                 if(ob->type==OB_MESH) {
2305                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2306                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
2307                 }
2308                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
2309         }
2310         
2311         uiBlockSetDirection(block, UI_RIGHT);
2312         uiTextBoundsBlock(block, 60);
2313         return block;
2314 }
2315
2316
2317 static void do_view3d_edit_object_parentmenu(bContext *C, void *arg, int event)
2318 {
2319 #if 0
2320         switch(event) {
2321         case 0: /* clear parent */
2322                 clear_parent();
2323                 break;
2324         case 1: /* make parent */
2325                 make_parent();
2326                 break;
2327                 }
2328         allqueue(REDRAWVIEW3D, 0);
2329 #endif
2330 }
2331
2332 static uiBlock *view3d_edit_object_parentmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2333 {
2334         uiBlock *block;
2335         short yco = 20, menuwidth = 120;
2336
2337         block= uiBeginBlock(C, handle->region, "view3d_edit_object_parentmenu", UI_EMBOSSP, UI_HELV);
2338         uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
2339         
2340         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2341         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2342
2343         uiBlockSetDirection(block, UI_RIGHT);
2344         uiTextBoundsBlock(block, 60);
2345         return block;
2346 }
2347
2348 static void do_view3d_edit_object_groupmenu(bContext *C, void *arg, int event)
2349 {
2350 #if 0
2351         switch(event) {
2352                 case 1:
2353                 case 2:
2354                 case 3:
2355                         group_operation(event);
2356                         break;
2357         }
2358         allqueue(REDRAWVIEW3D, 0);
2359 #endif
2360 }
2361
2362 static uiBlock *view3d_edit_object_groupmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2363 {
2364         uiBlock *block;
2365         short yco = 20, menuwidth = 120;
2366         
2367         block= uiBeginBlock(C, handle->region, "view3d_edit_object_groupmenu", UI_EMBOSSP, UI_HELV);
2368         uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
2369         
2370         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add to Existing Group|Ctrl G, 1",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2371         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add to New Group|Ctrl G, 2",     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2372         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove from All Groups|Ctrl G, 3",       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2373         
2374         uiBlockSetDirection(block, UI_RIGHT);
2375         uiTextBoundsBlock(block, 60);
2376         return block;
2377 }
2378
2379 static void do_view3d_edit_object_trackmenu(bContext *C, void *arg, int event)
2380 {
2381 #if 0
2382         switch(event) {
2383         case 0: /* clear track */
2384                 clear_track();
2385                 break;
2386         case 1: /* make track */
2387                 make_track();
2388                 break;
2389                 }
2390         allqueue(REDRAWVIEW3D, 0);
2391 #endif
2392 }
2393
2394 static uiBlock *view3d_edit_object_trackmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2395 {
2396         uiBlock *block;
2397         short yco = 20, menuwidth = 120;
2398
2399         block= uiBeginBlock(C, handle->region, "view3d_edit_object_trackmenu", UI_EMBOSSP, UI_HELV);
2400         uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
2401         
2402         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2403         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2404         
2405         uiBlockSetDirection(block, UI_RIGHT);
2406         uiTextBoundsBlock(block, 60);
2407         return block;
2408 }
2409
2410 static void do_view3d_edit_object_constraintsmenu(bContext *C, void *arg, int event)
2411 {
2412 #if 0
2413         switch(event) {
2414         case 1: /* add constraint */
2415                 add_constraint(0);
2416                 break;
2417         case 2: /* clear constraint */
2418                 ob_clear_constraints();
2419                 break;
2420                 }
2421         allqueue(REDRAWVIEW3D, 0);
2422 #endif
2423 }
2424
2425 static uiBlock *view3d_edit_object_constraintsmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2426 {
2427         uiBlock *block;
2428         short yco = 20, menuwidth = 120;
2429
2430         block= uiBeginBlock(C, handle->region, "view3d_edit_object_constraintsmenu", UI_EMBOSSP, UI_HELV);
2431         uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
2432         
2433         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2434         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2435         
2436         uiBlockSetDirection(block, UI_RIGHT);
2437         uiTextBoundsBlock(block, 60);
2438         return block;
2439 }
2440
2441 static void do_view3d_edit_object_showhidemenu(bContext *C, void *arg, int event)
2442 {
2443 #if 0
2444         
2445         switch(event) {
2446                  
2447         case 0: /* show objects */
2448                 show_objects();
2449                 break;
2450         case 1: /* hide selected objects */
2451                 hide_objects(1);
2452                 break;
2453         case 2: /* hide deselected objects */
2454                 hide_objects(0);
2455                 break;
2456         }
2457         allqueue(REDRAWVIEW3D, 0);
2458 #endif
2459 }
2460
2461 static uiBlock *view3d_edit_object_showhidemenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2462 {
2463         uiBlock *block;
2464         short yco = 20, menuwidth = 120;
2465
2466         block= uiBeginBlock(C, handle->region, "view3d_edit_object_showhidemenu", UI_EMBOSSP, UI_HELV);
2467         uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
2468         
2469         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2470         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2471         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2472
2473         uiBlockSetDirection(block, UI_RIGHT);
2474         uiTextBoundsBlock(block, 60);
2475         return block;
2476 }
2477
2478 #ifndef DISABLE_PYTHON
2479 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
2480 {
2481 #if 0
2482         BPY_menu_do_python(PYMENU_OBJECT, event);
2483
2484         allqueue(REDRAWVIEW3D, 0);
2485 #endif
2486 }
2487
2488 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2489 {
2490         uiBlock *block;
2491 //      short yco = 20, menuwidth = 120;
2492 // XXX  BPyMenu *pym;
2493 //      int i = 0;
2494
2495         block= uiBeginBlock(C, handle->region, "v3d_eobject_pymenu", UI_EMBOSSP, UI_HELV);
2496         uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2497
2498 //      for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2499 //              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);
2500 //      }
2501
2502         uiBlockSetDirection(block, UI_RIGHT);
2503         uiTextBoundsBlock(block, 60);
2504
2505         return block;
2506 }
2507 #endif /* DISABLE_PYTHON */
2508
2509
2510 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
2511 {
2512 #if 0
2513         Scene *scene= CTX_data_scene(C);
2514         ScrArea *sa= CTX_wm_area(C);
2515         View3D *v3d= sa->spacedata.first;
2516         
2517         switch(event) {
2518          
2519         case 0: /* transform    properties*/
2520 // XXX          mainqenter(NKEY, 1);
2521                 break;
2522         case 1: /* delete */
2523                 delete_context_selected();
2524                 break;
2525         case 2: /* duplicate */
2526                 duplicate_context_selected();
2527                 break;
2528         case 3: /* duplicate linked */
2529                 adduplicate(0, 0);
2530                 break;
2531         case 5: /* make single user */
2532                 single_user();
2533                 break;
2534         case 7: /* boolean operation */
2535                 special_editmenu();
2536                 break;
2537         case 8: /* join objects */
2538                 join_menu();
2539                 break;
2540         case 9: /* convert object type */
2541                 convertmenu();
2542                 break;
2543         case 10: /* move to layer */
2544                 movetolayer();
2545                 break;
2546         case 11: /* insert keyframe */
2547                 common_insertkey();
2548                 break;
2549         case 15: /* Object Panel */
2550                 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2551                 break;
2552         case 16: /* make proxy object*/
2553                 make_proxy();
2554                 break;
2555         case 18: /* delete keyframe */
2556                 common_deletekey();
2557                 break; 
2558         }
2559         allqueue(REDRAWVIEW3D, 0);
2560 #endif
2561 }
2562
2563 static uiBlock *view3d_edit_objectmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2564 {
2565         Scene *scene= CTX_data_scene(C);
2566         uiBlock *block;
2567         short yco= 0, menuwidth=120;
2568         
2569         block= uiBeginBlock(C, handle->region, "view3d_edit_objectmenu", UI_EMBOSSP, UI_HELV);
2570         uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
2571         
2572         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
2573         uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2574         uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2575
2576         uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
2577         uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2578         
2579         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2580         
2581         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");  
2582         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");  
2583         
2584         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2585         
2586         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2587         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2588         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2589         
2590         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2591         
2592         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2593         uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2594         uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2595         uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2596         uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2597         
2598         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2599         
2600         uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2601         uiDefIconTextBlockBut(block, view3d_edit_object_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
2602         uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
2603         uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
2604         
2605         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2606         
2607         if (OBACT && OBACT->type == OB_MESH) {
2608                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2609         }
2610         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J",                            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2611         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2612         
2613         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2614         
2615         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2616         uiDefIconTextBlockBut(block, view3d_edit_object_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Objects", 0, yco-=20, 120, 19, "");
2617         
2618 #ifndef DISABLE_PYTHON
2619         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2620         uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2621 #endif
2622                 
2623         if(handle->region->alignment==RGN_ALIGN_TOP) {
2624                 uiBlockSetDirection(block, UI_DOWN);
2625         }
2626         else {
2627                 uiBlockSetDirection(block, UI_TOP);
2628                 uiBlockFlipOrder(block);
2629         }
2630
2631         uiTextBoundsBlock(block, 50);
2632         return block;
2633 }
2634
2635
2636 static void do_view3d_edit_propfalloffmenu(bContext *C, void *arg, int event)
2637 {
2638         Scene *scene= CTX_data_scene(C);
2639         
2640         scene->prop_mode= event;
2641         
2642         allqueue(REDRAWVIEW3D, 1);
2643 }
2644
2645 static uiBlock *view3d_edit_propfalloffmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2646 {
2647         Scene *scene= CTX_data_scene(C);
2648         uiBlock *block;
2649         short yco = 20, menuwidth = 120;
2650
2651         block= uiBeginBlock(C, handle->region, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV);
2652         uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
2653         
2654         if (scene->prop_mode==PROP_SMOOTH) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2655         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2656         if (scene->prop_mode==PROP_SPHERE) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sphere|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2657         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2658         if (scene->prop_mode==PROP_ROOT) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Root|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2659         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2660         if (scene->prop_mode==PROP_SHARP) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sharp|Shift O",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2661         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2662         if (scene->prop_mode==PROP_LIN) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Linear|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2663         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2664         if (scene->prop_mode==PROP_RANDOM) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Random|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2665         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Random|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2666         if (scene->prop_mode==PROP_CONST) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Constant|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2667         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2668                 
2669         uiBlockSetDirection(block, UI_RIGHT);
2670         uiTextBoundsBlock(block, 60);
2671         return block;
2672 }
2673
2674
2675 void do_view3d_edit_mesh_verticesmenu(bContext *C, void *arg, int event)
2676 {
2677 #if 0
2678         Scene *scene= CTX_data_scene(C);
2679         
2680         switch(event) {
2681         int count; 
2682         
2683         case 0: /* make vertex parent */
2684                 make_parent();
2685                 break;
2686         case 1: /* remove doubles */
2687                 count= removedoublesflag(1, 0, scene->toolsettings->doublimit);
2688                 notice("Removed: %d", count);
2689                 if (count) { /* only undo and redraw if an action is taken */
2690                         DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2691                         BIF_undo_push("Rem Doubles");
2692                 }
2693                 break;
2694         case 2: /* smooth */
2695                 vertexsmooth();
2696                 break;
2697         case 3: /* separate */
2698                 separate_mesh();
2699                 break;
2700         case 4: /*split */
2701                 split_mesh();
2702                 break;
2703         case 5: /*merge */
2704                 mergemenu();
2705                 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2706                 break;
2707         case 6: /* add hook */
2708                 add_hook_menu();
2709                 break;
2710         case 7: /* rip */
2711                 mesh_rip();
2712                 break;
2713         }
2714         allqueue(REDRAWVIEW3D, 0);
2715 #endif
2716 }
2717
2718 static uiBlock *view3d_edit_mesh_verticesmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2719 {
2720         uiBlock *block;
2721         short yco = 20, menuwidth = 120;
2722
2723         block= uiBeginBlock(C, handle->region, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP, UI_HELV);
2724         uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
2725         
2726         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2727         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2728         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2729         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2730         
2731         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2732         
2733         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, Alt 1",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2734         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2735         
2736         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2737
2738         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2739         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2740
2741         uiBlockSetDirection(block, UI_RIGHT);
2742         uiTextBoundsBlock(block, 60);
2743         return block;
2744 }
2745
2746 extern void editmesh_mark_sharp(int set); /* declared in editmesh_mods.c */
2747
2748 void do_view3d_edit_mesh_edgesmenu(bContext *C, void *arg, int event)
2749 {
2750 #if 0
2751         Scene *scene= CTX_data_scene(C);
2752         float fac;
2753         short randfac;
2754
2755         switch(event) {
2756                  
2757         case 0: /* subdivide smooth */
2758                 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag | B_SMOOTH,1,0);
2759                 BIF_undo_push("Subdivide Smooth");
2760                 break;
2761         case 1: /*subdivide fractal */
2762                 randfac= 10;
2763                 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
2764                 fac= -( (float)randfac )/100;
2765                 esubdivideflag(1, fac, scene->toolsettings->editbutflag,1,0);
2766                 BIF_undo_push("Subdivide Fractal");
2767                 break;
2768         case 2: /* subdivide */
2769                 esubdivideflag(1, 0.0, scene->toolsettings->editbutflag,1,0);
2770                 BIF_undo_push("Subdivide");
2771                 break;
2772         case 3: /* knife subdivide */
2773                 KnifeSubdivide(KNIFE_PROMPT);
2774                 break;
2775         case 4: /* Loop subdivide */
2776                 CutEdgeloop(1);
2777                 break;
2778         case 5: /* Make Edge/Face */
2779                 addedgeface_mesh();
2780                 break;
2781         case 6:
2782                 bevel_menu();
2783                 break;
2784         case 7: /* Mark Seam */
2785                 editmesh_mark_seam(0);
2786                 break;
2787         case 8: /* Clear Seam */
2788                 editmesh_mark_seam(1);
2789                 break;
2790         case 9: /* Crease SubSurf */
2791                 if(!multires_level1_test()) {
2792                         initTransform(TFM_CREASE, CTX_EDGE);
2793                         Transform();
2794                 }
2795                 break;
2796         case 10: /* Rotate Edge */
2797                 edge_rotate_selected(2);
2798                 break;
2799         case 11: /* Rotate Edge */
2800                 edge_rotate_selected(1);
2801                 break;
2802         case 12: /* Edgeslide */
2803                 EdgeSlide(0,0.0);
2804                 break;
2805         case 13: /* Edge Loop Delete */
2806                 if(EdgeLoopDelete()) {
2807                         countall();
2808                         BIF_undo_push("Erase Edge Loop");
2809                         DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2810                 }
2811                 break;
2812         case 14: /*Collapse Edges*/
2813                 collapseEdges();
2814                 BIF_undo_push("Collapse");
2815                 break;
2816         case 15:
2817                 editmesh_mark_sharp(1);
2818                 BIF_undo_push("Mark Sharp");
2819                 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2820                 break;
2821         case 16:
2822                 editmesh_mark_sharp(0);
2823                 BIF_undo_push("Clear Sharp");
2824                 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2825                 break;
2826         case 17: /* Adjust Bevel Weight */
2827                 if(!multires_level1_test()) {
2828                         initTransform(TFM_BWEIGHT, CTX_EDGE);
2829                         Transform();
2830                 }
2831                 break;
2832         }
2833         allqueue(REDRAWVIEW3D, 0);
2834 #endif
2835 }
2836
2837 static uiBlock *view3d_edit_mesh_edgesmenu(bContext *C, uiMenuBlockHandle *handle, void *arg_unused)
2838 {
2839         uiBlock *block;
2840         short yco = 20, menuwidth = 120;
2841
2842         block= uiBeginBlock(C, handle->region, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV);
2843         uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
2844         
2845         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2846         
2847         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2848         
2849         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 2",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2850         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop Subdivide...|Ctrl R",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2851         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide...|Shift K",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2852         
2853         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2854         
2855         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2856         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2857         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 4",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2858
2859         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2860
2861         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Seam|Ctrl E",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2862         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2863         
2864         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2865         
2866         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Sharp|Ctrl E",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2867         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Sharp|Ctrl E",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2868         
2869         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2870         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Adjust Bevel Weight|Ctrl Shift E",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2871
2872         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2873         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2874
2875         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2876
2877         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CW|Ctrl E",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2878         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CCW|Ctrl E",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");  
2879
2880         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");  
2881         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");  
2882
2883         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Collapse",                               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");  
2884         uiBlockSetDirection(block, UI_RIGHT);
2885         uiTextBoundsBlock(block, 60);
2886         return block;
2887 }
2888
2889 void do_view3d_edit_mesh_facesmenu(bContext *C, void *arg, int event)
2890 {
2891 #if 0
2892         Scene *scene= CTX_data_scene(C);
2893         
2894         switch(event) {
2895         case 0: /* Fill Faces */
2896                 fill_mesh();
2897                 break;
2898         case 1: /* Beauty Fill Faces */
2899                 beauty_fill();
2900                 break;
2901         case 2: /* Quads to Tris */
2902                 convert_to_triface(0);
2903                 allqueue(REDRAWVIEW3D, 0);
2904                 countall();
2905                 DAG_object_flush_update(scene, G.obedit, OB_RECALC_DATA);
2906                 break;
2907         case 3: /* Tris to Quads */
2908                 join_triangles();
2909                 break;
2910         case 4: /* Flip triangle edges */
2911                 edge_flip();
2912                 break;
2913         case 5: /* Make Edge/Face */
2914                 addedgeface_mesh();
2915                 break;
2916         case 6: /* Set Smooth */
2917            &nb