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