svn merge -r 21041:21301 https://svn.blender.org/svnroot/bf-blender/branches/blender2...
[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         ToolSettings *ts= CTX_data_tool_settings(C);
1816         
1817         switch(event) {
1818         case 1:
1819                 initTransform(TFM_TRANSLATION, CTX_NONE);
1820                 Transform();
1821                 break;
1822         case 2:
1823                 initTransform(TFM_ROTATION, CTX_NONE);
1824                 Transform();
1825                 break;
1826         case 3:
1827                 initTransform(TFM_RESIZE, CTX_NONE);
1828                 Transform();
1829                 break;
1830         case 4:
1831                 image_aspect();
1832                 break;
1833         case 5:
1834                 initTransform(TFM_TOSPHERE, CTX_NONE);
1835                 Transform();
1836                 break;
1837         case 6:
1838                 initTransform(TFM_SHEAR, CTX_NONE);
1839                 Transform();
1840                 break;
1841         case 7:
1842                 initTransform(TFM_WARP, CTX_NONE);
1843                 Transform();
1844                 break;
1845         case 8:
1846                 initTransform(TFM_PUSHPULL, CTX_NONE);
1847                 Transform();
1848                 break;
1849         case 9:
1850                 if (obedit) {
1851                         if (obedit->type == OB_MESH)
1852                                 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1853                                 Transform();
1854                 } else error("Only meshes can be shrinked/fattened");
1855                 break;
1856         case 10:
1857                 docenter(0);
1858                 break;
1859         case 11:
1860                 docenter_new();
1861                 break;
1862         case 12:
1863                 docenter_cursor();
1864                 break;
1865         case 13:
1866                 initTransform(TFM_TILT, CTX_NONE);
1867                 Transform();
1868                 break;
1869         case 14:
1870                 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1871                 Transform();
1872                 break;
1873         case 15:
1874                 ts->snap_flag &= ~SCE_SNAP;
1875                 break;
1876         case 16:
1877                 ts->snap_flag |= SCE_SNAP;
1878                 break;
1879         case 17:
1880                 ts->snap_target = SCE_SNAP_TARGET_CLOSEST;
1881                 break;
1882         case 18:
1883                 ts->snap_target = SCE_SNAP_TARGET_CENTER;
1884                 break;
1885         case 19:
1886                 ts->snap_target = SCE_SNAP_TARGET_MEDIAN;
1887                 break;
1888         case 20:
1889                 ts->snap_target = SCE_SNAP_TARGET_ACTIVE;
1890                 break;
1891         case 21:
1892                 alignmenu();
1893                 break;
1894         }
1895 #endif
1896 }
1897
1898 static uiBlock *view3d_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
1899 {
1900         ToolSettings *ts= CTX_data_tool_settings(C);
1901         Object *obedit = CTX_data_edit_object(C);
1902         uiBlock *block;
1903         short yco = 20, menuwidth = 120;
1904
1905         block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP);
1906         uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1907
1908         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1909         uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1910                 
1911         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1912         uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1913
1914         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1915         uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1916
1917         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1918         
1919         if (obedit) {
1920                 if (obedit->type == OB_MESH)
1921                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1922                 else if (obedit->type == OB_CURVE) {
1923                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1924                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S",     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1925                 }
1926         }
1927         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1928         if (obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1929         else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1930         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1931         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1932         
1933         if (!obedit) {
1934                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1935                 
1936                 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, "");
1937         }
1938         
1939         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1940
1941         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1942         if (!obedit) {
1943                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1944                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1945                 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, "");
1946         }
1947         
1948         if (BIF_snappingSupported(obedit))
1949         {
1950                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1951         
1952                 if (ts->snap_flag & SCE_SNAP)
1953                 {
1954                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1955                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1956                 }
1957                 else
1958                 {
1959                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1960                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1961                 }
1962                         
1963                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1964
1965                 switch(ts->snap_target)
1966                 {
1967                         case SCE_SNAP_TARGET_CLOSEST:
1968                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1969                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1970                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1971                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1972                                 break;
1973                         case SCE_SNAP_TARGET_CENTER:
1974                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1975                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1976                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1977                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1978                                 break;
1979                         case SCE_SNAP_TARGET_MEDIAN:
1980                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1981                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1982                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1983                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1984                                 break;
1985                         case SCE_SNAP_TARGET_ACTIVE:
1986                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1987                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1988                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1989                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1990                                 break;
1991                 }
1992         }
1993
1994         uiBlockSetDirection(block, UI_RIGHT);
1995         uiTextBoundsBlock(block, 60);
1996         return block;
1997 }
1998
1999 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
2000 {
2001 #if 0
2002         switch(event) {
2003                 case 0:
2004                         initTransform(TFM_MIRROR, CTX_NO_PET);
2005                         Transform();
2006                         break;
2007                 case 1:
2008                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2009                         BIF_setLocalAxisConstraint('X', " on X axis");
2010                         Transform();
2011                         break;
2012                 case 2:
2013                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2014                         BIF_setLocalAxisConstraint('Y', " on Y axis");
2015                         Transform();
2016                         break;
2017                 case 3:
2018                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2019                         BIF_setLocalAxisConstraint('Z', " on Z axis");
2020                         Transform();
2021                         break;
2022         }
2023 #endif
2024 }
2025
2026 static uiBlock *view3d_object_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
2027 {
2028         uiBlock *block;
2029         short yco = 20, menuwidth = 120;
2030
2031         block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP);
2032         uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
2033         
2034         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2035         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2036         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2037         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2038         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2039
2040         uiBlockSetDirection(block, UI_RIGHT);
2041         uiTextBoundsBlock(block, 60);
2042         return block;
2043 }
2044
2045 static void do_view3d_edit_object_transformmenu(bContext *C, void *arg, int event)
2046 {
2047 #if 0
2048         switch(event) {
2049         case 0: /*      clear origin */
2050                 clear_object('o');
2051                 break;
2052         case 1: /* clear scale */
2053                 clear_object('s');
2054                 break;
2055         case 2: /* clear rotation */
2056                 clear_object('r');
2057                 break;
2058         case 3: /* clear location */
2059                 clear_object('g');
2060                 break;
2061         case 4:
2062                 if(OBACT) object_apply_deform(OBACT);
2063                 break;
2064         case 5: /* make duplis real */
2065                 make_duplilist_real();
2066                 break;
2067         case 6: /* apply scale/rotation or deformation */
2068                 apply_objects_locrot();
2069                 break;  
2070         case 7: /* apply visual matrix to objects loc/size/rot */
2071                 apply_objects_visual_tx();
2072                 break;  
2073         }
2074 #endif
2075 }
2076
2077 static uiBlock *view3d_edit_object_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
2078 {
2079         uiBlock *block;
2080         short yco = 20, menuwidth = 120;
2081
2082         block= uiBeginBlock(C, ar, "view3d_edit_object_transformmenu", UI_EMBOSSP);
2083         uiBlockSetButmFunc(block, do_view3d_edit_object_transformmenu, NULL);
2084         
2085         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, "");
2086         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2087         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2088         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Duplicates Real|Ctrl Shift A",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2089         
2090         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2091         
2092         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Location|Alt G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2093         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Rotation|Alt R", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2094         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Scale|Alt S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2095         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2096         
2097         uiBlockSetDirection(block, UI_RIGHT);
2098         uiTextBoundsBlock(block, 60);
2099         return block;
2100 }
2101
2102 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
2103 {
2104 #if 0
2105         switch(event) {
2106                 case 1:
2107                 case 2:
2108                 case 3:
2109                         make_local(event);
2110                         break;
2111         }
2112 #endif
2113 }
2114
2115 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, ARegion *ar, void *arg_unused)
2116 {       
2117         uiBlock *block;
2118         short yco = 20, menuwidth = 120;
2119         
2120         block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP);
2121         uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
2122         
2123         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2124         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2125         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2126         
2127         uiBlockSetDirection(block, UI_RIGHT);
2128         uiTextBoundsBlock(block, 60);
2129         return block;
2130 }
2131
2132 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
2133 {
2134 #if 0
2135         switch(event) {
2136         case 1:
2137         case 2:
2138         case 3:
2139         case 4:
2140                 make_links((short)event);
2141                 break;
2142                 }
2143 #endif
2144 }
2145
2146 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, ARegion *ar, void *arg_unused)
2147 {
2148         Scene *scene= CTX_data_scene(C);
2149         Object *ob=NULL;
2150         
2151         uiBlock *block;
2152         short yco = 20, menuwidth = 120;
2153
2154         block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP);
2155         uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
2156         
2157         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2158         
2159         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2160         
2161         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2162         
2163         if ((ob=OBACT)) {
2164         
2165                 if(ob->type==OB_MESH) {
2166                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2167                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2168                 } else if(ob->type==OB_CURVE) {
2169                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2170                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2171                 } else if(ob->type==OB_FONT) {
2172                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2173                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2174                 } else if(ob->type==OB_SURF) {
2175                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2176                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2177                 } else if(ob->type==OB_MBALL) {
2178                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2179                 } else if(ob->type==OB_CAMERA) {
2180                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2181                 } else if(ob->type==OB_LAMP) {
2182                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2183                 } else if(ob->type==OB_LATTICE) {
2184                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2185                 } else if(ob->type==OB_ARMATURE) {
2186                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2187                 }
2188         }
2189         
2190         uiBlockSetDirection(block, UI_RIGHT);
2191         uiTextBoundsBlock(block, 60);
2192         return block;
2193 }
2194
2195 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
2196 {
2197 #if 0
2198         switch(event) {
2199         case 1: /* Object */
2200                 single_object_users(1);
2201                 break;
2202         case 2: /* Object & ObData */ 
2203                 single_object_users(1);
2204                 single_obdata_users(1);
2205                 break;
2206         case 3: /* Object & ObData & Materials+Tex */
2207                 single_object_users(1);
2208                 single_obdata_users(1);
2209                 single_mat_users(1); /* also tex */
2210                 break;
2211         case 4: /* Materials+Tex */
2212                 single_mat_users(1);
2213                 break;
2214         case 5: /* Ipo */
2215                 single_ipo_users(1);
2216                 break;
2217         }
2218         
2219         clear_id_newpoins();
2220         countall();
2221         
2222 #endif
2223 }
2224
2225 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, ARegion *ar, void *arg_unused)
2226 {
2227
2228         uiBlock *block;
2229         short yco = 20, menuwidth = 120;
2230
2231         block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP);
2232         uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
2233         
2234         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2235         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2236         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2237         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2238         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2239         
2240         uiBlockSetDirection(block, UI_RIGHT);
2241         uiTextBoundsBlock(block, 60);
2242         return block;
2243 }
2244
2245 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
2246 {
2247         switch(event) {
2248         case 1:
2249         case 2:
2250         case 3:
2251         case 4:
2252         case 5:
2253         case 6:
2254         case 7:
2255         case 8:
2256         case 9:
2257         case 10:
2258         case 11:
2259         case 17:
2260         case 18:
2261         case 19:
2262         case 20:
2263         case 21:
2264         case 22:
2265         case 23:
2266         case 24:
2267         case 25:
2268         case 26:
2269         case 29:
2270         case 30:
2271 // XXX          copy_attr((short)event);
2272                 break;
2273                 }
2274 }
2275
2276 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, ARegion *ar, void *arg_unused)
2277 {
2278         Scene *scene= CTX_data_scene(C);
2279         Object *ob=NULL;
2280         
2281         uiBlock *block;
2282         short yco = 20, menuwidth = 120;
2283
2284         block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP);
2285         uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
2286         
2287         ob= OBACT;
2288         
2289         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2290         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2291         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2292         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2293         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2294         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2295         
2296         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2297         
2298         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2299         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2300         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2301         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2302         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2303         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
2304         
2305         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2306         
2307         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
2308         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
2309         
2310         if (ob) {
2311         
2312                 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
2313                                 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
2314                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2315                 }       
2316                 
2317                 if(ob->type == OB_FONT) {
2318                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
2319                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2320                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2321                 }
2322                 if(ob->type == OB_CURVE) {
2323                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
2324                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
2325                 }
2326         
2327                 if(ob->type==OB_MESH) {
2328                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
2329                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
2330                 }
2331                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
2332         }
2333         
2334         uiBlockSetDirection(block, UI_RIGHT);
2335         uiTextBoundsBlock(block, 60);
2336         return block;
2337 }
2338
2339
2340 static void do_view3d_edit_object_parentmenu(bContext *C, void *arg, int event)
2341 {
2342 #if 0
2343         switch(event) {
2344         case 0: /* clear parent */
2345                 clear_parent();
2346                 break;
2347         case 1: /* make parent */
2348                 make_parent();
2349                 break;
2350                 }
2351 #endif
2352 }
2353
2354 static uiBlock *view3d_edit_object_parentmenu(bContext *C, ARegion *ar, void *arg_unused)
2355 {
2356         uiBlock *block;
2357         short yco = 20, menuwidth = 120;
2358
2359         block= uiBeginBlock(C, ar, "view3d_edit_object_parentmenu", UI_EMBOSSP);
2360         uiBlockSetButmFunc(block, do_view3d_edit_object_parentmenu, NULL);
2361         
2362         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2363         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2364
2365         uiBlockSetDirection(block, UI_RIGHT);
2366         uiTextBoundsBlock(block, 60);
2367         return block;
2368 }
2369
2370 static void do_view3d_edit_object_groupmenu(bContext *C, void *arg, int event)
2371 {
2372 #if 0
2373         switch(event) {
2374                 case 1:
2375                 case 2:
2376                 case 3:
2377                         group_operation(event);
2378                         break;
2379         }
2380 #endif
2381 }
2382
2383 static uiBlock *view3d_edit_object_groupmenu(bContext *C, ARegion *ar, void *arg_unused)
2384 {
2385         uiBlock *block;
2386         short yco = 20, menuwidth = 120;
2387         
2388         block= uiBeginBlock(C, ar, "view3d_edit_object_groupmenu", UI_EMBOSSP);
2389         uiBlockSetButmFunc(block, do_view3d_edit_object_groupmenu, NULL);
2390         
2391         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, "");
2392         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, "");
2393         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, "");
2394         
2395         uiBlockSetDirection(block, UI_RIGHT);
2396         uiTextBoundsBlock(block, 60);
2397         return block;
2398 }
2399
2400 static void do_view3d_edit_object_trackmenu(bContext *C, void *arg, int event)
2401 {
2402 #if 0
2403         switch(event) {
2404         case 0: /* clear track */
2405                 clear_track();
2406                 break;
2407         case 1: /* make track */
2408                 make_track();
2409                 break;
2410                 }
2411 #endif
2412 }
2413
2414 static uiBlock *view3d_edit_object_trackmenu(bContext *C, ARegion *ar, void *arg_unused)
2415 {
2416         uiBlock *block;
2417         short yco = 20, menuwidth = 120;
2418
2419         block= uiBeginBlock(C, ar, "view3d_edit_object_trackmenu", UI_EMBOSSP);
2420         uiBlockSetButmFunc(block, do_view3d_edit_object_trackmenu, NULL);
2421         
2422         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Track...|Ctrl T",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2423         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Track...|Alt T",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2424         
2425         uiBlockSetDirection(block, UI_RIGHT);
2426         uiTextBoundsBlock(block, 60);
2427         return block;
2428 }
2429
2430 static void do_view3d_edit_object_constraintsmenu(bContext *C, void *arg, int event)
2431 {
2432 #if 0
2433         switch(event) {
2434         case 1: /* add constraint */
2435                 add_constraint(0);
2436                 break;
2437         case 2: /* clear constraint */
2438                 ob_clear_constraints();
2439                 break;
2440                 }
2441 #endif
2442 }
2443
2444 static uiBlock *view3d_edit_object_constraintsmenu(bContext *C, ARegion *ar, void *arg_unused)
2445 {
2446         uiBlock *block;
2447         short yco = 20, menuwidth = 120;
2448
2449         block= uiBeginBlock(C, ar, "view3d_edit_object_constraintsmenu", UI_EMBOSSP);
2450         uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
2451         
2452         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2453         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2454         
2455         uiBlockSetDirection(block, UI_RIGHT);
2456         uiTextBoundsBlock(block, 60);
2457         return block;
2458 }
2459
2460 static void do_view3d_edit_object_showhidemenu(bContext *C, void *arg, int event)
2461 {
2462 #if 0
2463         
2464         switch(event) {
2465                  
2466         case 0: /* show objects */
2467                 show_objects();
2468                 break;
2469         case 1: /* hide selected objects */
2470                 hide_objects(1);
2471                 break;
2472         case 2: /* hide deselected objects */
2473                 hide_objects(0);
2474                 break;
2475         }
2476 #endif
2477 }
2478
2479 static uiBlock *view3d_edit_object_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
2480 {
2481         uiBlock *block;
2482         short yco = 20, menuwidth = 120;
2483
2484         block= uiBeginBlock(C, ar, "view3d_edit_object_showhidemenu", UI_EMBOSSP);
2485         uiBlockSetButmFunc(block, do_view3d_edit_object_showhidemenu, NULL);
2486         
2487         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2488         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2489         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected|Shift H",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2490
2491         uiBlockSetDirection(block, UI_RIGHT);
2492         uiTextBoundsBlock(block, 60);
2493         return block;
2494 }
2495
2496 #ifndef DISABLE_PYTHON
2497 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
2498 {
2499 #if 0
2500         BPY_menu_do_python(PYMENU_OBJECT, event);
2501
2502 #endif
2503 }
2504
2505 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
2506 {
2507         uiBlock *block;
2508 //      short yco = 20, menuwidth = 120;
2509 // XXX  BPyMenu *pym;
2510 //      int i = 0;
2511
2512         block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP);
2513         uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
2514
2515 //      for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
2516 //              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);
2517 //      }
2518
2519         uiBlockSetDirection(block, UI_RIGHT);
2520         uiTextBoundsBlock(block, 60);
2521
2522         return block;
2523 }
2524 #endif /* DISABLE_PYTHON */
2525
2526
2527 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
2528 {
2529 #if 0
2530         Scene *scene= CTX_data_scene(C);
2531         ScrArea *sa= CTX_wm_area(C);
2532         View3D *v3d= sa->spacedata.first;
2533         
2534         switch(event) {
2535          
2536         case 0: /* transform    properties*/
2537 // XXX          mainqenter(NKEY, 1);
2538                 break;
2539         case 1: /* delete */
2540                 delete_context_selected();
2541                 break;
2542         case 2: /* duplicate */
2543                 duplicate_context_selected();
2544                 break;
2545         case 3: /* duplicate linked */
2546                 adduplicate(0, 0);
2547                 break;
2548         case 5: /* make single user */
2549                 single_user();
2550                 break;
2551         case 7: /* boolean operation */
2552                 special_editmenu();
2553                 break;
2554         case 8: /* join objects */
2555                 join_menu();
2556                 break;
2557         case 9: /* convert object type */
2558                 convertmenu();
2559                 break;
2560         case 10: /* move to layer */
2561                 movetolayer();
2562                 break;
2563         case 11: /* insert keyframe */
2564                 common_insertkey();
2565                 break;
2566         case 15: /* Object Panel */
2567                 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2568                 break;
2569         case 16: /* make proxy object*/
2570                 make_proxy();
2571                 break;
2572         case 18: /* delete keyframe */
2573                 common_deletekey();
2574                 break; 
2575         }
2576 #endif
2577 }
2578
2579 static uiBlock *view3d_edit_objectmenu(bContext *C, ARegion *ar, void *arg_unused)
2580 {
2581         Scene *scene= CTX_data_scene(C);
2582         uiBlock *block;
2583         short yco= 0, menuwidth=120;
2584         
2585         block= uiBeginBlock(C, ar, "view3d_edit_objectmenu", UI_EMBOSSP);
2586         uiBlockSetButmFunc(block, do_view3d_edit_objectmenu, NULL);
2587         
2588         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
2589         uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2590         uiDefIconTextBlockBut(block, view3d_object_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2591
2592         uiDefIconTextBlockBut(block, view3d_edit_object_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear/Apply", 0, yco-=20, 120, 19, "");
2593         uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2594         
2595         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2596         
2597         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");  
2598         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");  
2599         
2600         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2601         
2602         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2603         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate Linked|Alt D",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2604         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2605         
2606         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2607         
2608         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Proxy|Ctrl Alt P",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2609         uiDefIconTextBlockBut(block, view3d_edit_object_makelinksmenu, NULL, ICON_RIGHTARROW_THIN, "Make Links", 0, yco-=20, 120, 19, "");
2610         uiDefIconTextBlockBut(block, view3d_edit_object_singleusermenu, NULL, ICON_RIGHTARROW_THIN, "Make Single User", 0, yco-=20, 120, 19, "");
2611         uiDefIconTextBlockBut(block, view3d_edit_object_makelocalmenu, NULL, ICON_RIGHTARROW_THIN, "Make Local", 0, yco-=20, 120, 19, "");
2612         uiDefIconTextBlockBut(block, view3d_edit_object_copyattrmenu, NULL, ICON_RIGHTARROW_THIN, "Copy Attributes", 0, yco-=20, 120, 19, "");
2613         
2614         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2615         
2616         uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2617         uiDefIconTextBlockBut(block, view3d_edit_object_groupmenu, NULL, ICON_RIGHTARROW_THIN, "Group", 0, yco-=20, 120, 19, "");
2618         uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
2619         uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
2620         
2621         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2622         
2623         if (OBACT && OBACT->type == OB_MESH) {
2624                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Boolean Operation...|W",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2625         }
2626         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Join Objects|Ctrl J",                            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2627         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Object Type...|Alt C",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2628         
2629         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2630         
2631         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Move to Layer...|M",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2632         uiDefIconTextBlockBut(block, view3d_edit_object_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Show/Hide Objects", 0, yco-=20, 120, 19, "");
2633         
2634 #ifndef DISABLE_PYTHON
2635         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2636         uiDefIconTextBlockBut(block, view3d_edit_object_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2637 #endif
2638                 
2639         if(ar->alignment==RGN_ALIGN_TOP) {
2640                 uiBlockSetDirection(block, UI_DOWN);
2641         }
2642         else {
2643                 uiBlockSetDirection(block, UI_TOP);
2644                 uiBlockFlipOrder(block);
2645         }
2646
2647         uiTextBoundsBlock(block, 50);
2648         return block;
2649 }
2650
2651
2652 static void do_view3d_edit_propfalloffmenu(bContext *C, void *arg, int event)
2653 {
2654         ToolSettings *ts= CTX_data_tool_settings(C);
2655         
2656         ts->prop_mode= event;
2657         
2658 }
2659
2660 static uiBlock *view3d_edit_propfalloffmenu(bContext *C, ARegion *ar, void *arg_unused)
2661 {
2662         ToolSettings *ts= CTX_data_tool_settings(C);
2663         uiBlock *block;
2664         short yco = 20, menuwidth = 120;
2665
2666         block= uiBeginBlock(C, ar, "view3d_edit_propfalloffmenu", UI_EMBOSSP);
2667         uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
2668         
2669         if (ts->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, "");
2670         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
2671         if (ts->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, "");
2672         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
2673         if (ts->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, "");
2674         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
2675         if (ts->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, "");
2676         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
2677         if (ts->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, "");
2678         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
2679         if (ts->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, "");
2680         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Random|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_RANDOM, "");
2681         if (ts->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, "");
2682         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
2683                 
2684         uiBlockSetDirection(block, UI_RIGHT);
2685         uiTextBoundsBlock(block, 60);
2686         return block;
2687 }
2688
2689
2690 void do_view3d_edit_mesh_verticesmenu(bContext *C, void *arg, int event)
2691 {
2692 #if 0
2693         Scene *scene= CTX_data_scene(C);
2694         
2695         switch(event) {
2696         int count; 
2697         
2698         case 0: /* make vertex parent */
2699                 make_parent();
2700                 break;
2701         case 1: /* remove doubles */
2702                 count= removedoublesflag(1, 0, ts->doublimit);
2703                 notice("Removed: %d", count);
2704                 if (count) { /* only undo and redraw if an action is taken */
2705                         DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2706                         ED_undo_push(C, "Rem Doubles");
2707                 }
2708                 break;
2709         case 2: /* smooth */
2710                 vertexsmooth();
2711                 break;
2712         case 3: /* separate */
2713                 separate_mesh();
2714                 break;
2715         case 4: /*split */
2716                 split_mesh();
2717                 break;
2718         case 5: /*merge */
2719                 mergemenu();
2720                 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2721                 break;
2722         case 6: /* add hook */
2723                 add_hook_menu();
2724                 break;
2725         case 7: /* rip */
2726                 mesh_rip();
2727                 break;
2728         }
2729 #endif
2730 }
2731
2732 static uiBlock *view3d_edit_mesh_verticesmenu(bContext *C, ARegion *ar, void *arg_unused)
2733 {
2734         uiBlock *block;
2735         short yco = 20, menuwidth = 120;
2736
2737         block= uiBeginBlock(C, ar, "view3d_edit_mesh_verticesmenu", UI_EMBOSSP);
2738         uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
2739         
2740         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2741         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2742         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2743         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2744         
2745         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2746         
2747         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, Alt 1",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2748         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2749         
2750         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2751
2752         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2753         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2754
2755         uiBlockSetDirection(block, UI_RIGHT);
2756         uiTextBoundsBlock(block, 60);
2757         return block;
2758 }
2759
2760 extern void editmesh_mark_sharp(int set); /* declared in editmesh_mods.c */
2761
2762 void do_view3d_edit_mesh_edgesmenu(bContext *C, void *arg, int event)
2763 {
2764 #if 0
2765         Scene *scene= CTX_data_scene(C);
2766         float fac;
2767         short randfac;
2768
2769         switch(event) {
2770                  
2771         case 0: /* subdivide smooth */
2772                 esubdivideflag(1, 0.0, ts->editbutflag | B_SMOOTH,1,0);
2773                 ED_undo_push(C, "Subdivide Smooth");
2774                 break;
2775         case 1: /*subdivide fractal */
2776                 randfac= 10;
2777                 if(button(&randfac, 1, 100, "Rand fac:")==0) return;
2778                 fac= -( (float)randfac )/100;
2779                 esubdivideflag(1, fac, ts->editbutflag,1,0);
2780                 ED_undo_push(C, "Subdivide Fractal");
2781                 break;
2782         case 2: /* subdivide */
2783                 esubdivideflag(1, 0.0, ts->editbutflag,1,0);
2784                 ED_undo_push(C, "Subdivide");
2785                 break;
2786         case 3: /* knife subdivide */
2787                 KnifeSubdivide(KNIFE_PROMPT);
2788                 break;
2789         case 4: /* Loop subdivide */
2790                 CutEdgeloop(1);
2791                 break;
2792         case 5: /* Make Edge/Face */
2793                 addedgeface_mesh();
2794                 break;
2795         case 6:
2796                 bevel_menu();
2797                 break;
2798         case 7: /* Mark Seam */
2799                 editmesh_mark_seam(0);
2800                 break;
2801         case 8: /* Clear Seam */
2802                 editmesh_mark_seam(1);
2803                 break;
2804         case 9: /* Crease SubSurf */
2805                 if(!multires_level1_test()) {
2806                         initTransform(TFM_CREASE, CTX_EDGE);
2807                         Transform();
2808                 }
2809                 break;
2810         case 10: /* Rotate Edge */
2811                 edge_rotate_selected(2);
2812                 break;
2813         case 11: /* Rotate Edge */
2814                 edge_rotate_selected(1);
2815                 break;
2816         case 12: /* Edgeslide */
2817                 EdgeSlide(0,0.0);
2818                 break;
2819         case 13: /* Edge Loop Delete */
2820                 if(EdgeLoopDelete()) {
2821                         countall();
2822                         ED_undo_push(C, "Erase Edge Loop");
2823                         DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2824                 }
2825                 break;
2826         case 14: /*Collapse Edges*/
2827                 collapseEdges();
2828                 ED_undo_push(C, "Collapse");
2829                 break;
2830         case 15:
2831                 editmesh_mark_sharp(1);
2832                 ED_undo_push(C, "Mark Sharp");
2833                 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2834                 break;
2835         case 16:
2836                 editmesh_mark_sharp(0);
2837                 ED_undo_push(C, "Clear Sharp");
2838                 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2839                 break;
2840         case 17: /* Adjust Bevel Weight */
2841                 if(!multires_level1_test()) {
2842                         initTransform(TFM_BWEIGHT, CTX_EDGE);
2843                         Transform();
2844                 }
2845                 break;
2846         }
2847 #endif
2848 }
2849
2850 static uiBlock *view3d_edit_mesh_edgesmenu(bContext *C, ARegion *ar, void *arg_unused)
2851 {
2852         uiBlock *block;
2853         short yco = 20, menuwidth = 120;
2854
2855         block= uiBeginBlock(C, ar, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP);
2856         uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
2857         
2858         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2859         
2860         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2861         
2862         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 2",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2863         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop Subdivide...|Ctrl R",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2864         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide...|Shift K",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2865         
2866         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2867         
2868         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2869         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2870         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 4",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2871
2872         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2873
2874         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Seam|Ctrl E",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2875         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
2876         
2877         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2878         
2879         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Sharp|Ctrl E",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2880         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Sharp|Ctrl E",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2881         
2882         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2883         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Adjust Bevel Weight|Ctrl Shift E",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
2884
2885         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2886         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2887
2888         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2889
2890         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CW|Ctrl E",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2891         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CCW|Ctrl E",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");  
2892
2893         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");  
2894         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");  
2895
2896         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Collapse",                               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");  
2897         uiBlockSetDirection(block, UI_RIGHT);
2898         uiTextBoundsBlock(block, 60);
2899         return block;
2900 }
2901
2902 void do_view3d_edit_mesh_facesmenu(bContext *C, void *arg, int event)
2903 {
2904 #if 0
2905         Scene *scene= CTX_data_scene(C);
2906         
2907         switch(event) {
2908         case 0: /* Fill Faces */
2909                 fill_mesh();
2910                 break;
2911         case 1: /* Beauty Fill Faces */
2912                 beauty_fill();
2913                 break;
2914         case 2: /* Quads to Tris */
2915                 convert_to_triface(0);
2916                 countall();
2917                 DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
2918                 break;
2919         case 3: /* Tris to Quads */
2920                 join_triangles();
2921                 break;
2922         case 4: /* Flip triangle edges */
2923                 edge_flip();
2924                 break;
2925         case 5: /* Make Edge/Face */
2926                 addedgeface_mesh();
2927                 break;
2928         case 6: /* Set Smooth */
2929                 mesh_set_smooth_faces(1);
2930                 break;
2931         case 7: /* Set Solid */
2932                 mesh_set_smooth_faces(0);
2933                 break;
2934         }
2935 #endif
2936 }
2937
2938 static uiBlock *view3d_edit_mesh_facesmenu(bContext *C, ARegion *ar, void *arg_unused)
2939 {
2940         uiBlock *block;
2941         short yco = 20, menuwidth = 120;
2942
2943         block= uiBeginBlock(C, ar, "view3d_edit_mesh_facesmenu", UI_EMBOSSP);
2944         uiBlockSetButmFunc(block, do_view3d_edit_mesh_facesmenu, NULL);
2945         
2946         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Edge/Face|F",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2947         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Fill|Shift F",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2948         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Beautify Fill|Alt F",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2949         
2950         
2951         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2952         
2953         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Quads to Triangles|Ctrl T",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2954         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Triangles to Quads|Alt J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2955         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip Triangle Edges|Ctrl Shift F",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2956         
2957         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2958         
2959         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Smooth|W, Alt 3",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2960         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Solid|W, Alt 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2961         
2962         uiBlockSetDirection(block, UI_RIGHT);
2963         uiTextBoundsBlock(block, 60);
2964         return block;
2965 }
2966
2967 void do_view3d_edit_mesh_normalsmenu(bContext *C, void *arg, int event)
2968 {
2969 #if 0
2970         switch(event) {
2971         case 0: /* flip */
2972                 flip_editnormals();
2973                 break;