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