2.5/Texture paint
[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_paint.h"
65 #include "BKE_particle.h"
66 #include "BKE_screen.h"
67 #include "BKE_utildefines.h" /* for VECCOPY */
68
69 #include "ED_armature.h"
70 #include "ED_particle.h"
71 #include "ED_object.h"
72 #include "ED_mesh.h"
73 #include "ED_util.h"
74 #include "ED_screen.h"
75 #include "ED_transform.h"
76 #include "ED_types.h"
77
78 #include "WM_api.h"
79 #include "WM_types.h"
80
81 #include "RNA_access.h"
82 #include "RNA_define.h"
83
84 #include "BIF_gl.h"
85 #include "BIF_glutil.h"
86
87 #include "BLI_arithb.h"
88 #include "BLI_blenlib.h"
89 #include "BLI_editVert.h"
90
91 #include "UI_interface.h"
92 #include "UI_interface_icons.h"
93 #include "UI_resources.h"
94 #include "UI_view2d.h"
95
96 #include "view3d_intern.h"
97
98
99 /* View3d->modeselect 
100  * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
101  * rather than those buttons.
102  * I know the implementation's not good - it's an experiment to see if this
103  * approach would work well
104  *
105  * This can be cleaned when I make some new 'mode' icons.
106  */
107
108 #define V3D_OBJECTMODE_SEL                      ICON_OBJECT_DATA
109 #define V3D_EDITMODE_SEL                        ICON_EDITMODE_HLT
110 #define V3D_SCULPTMODE_SEL                      ICON_SCULPTMODE_HLT
111 #define V3D_FACESELECT_SEL                      ICON_FACESEL_HLT        /* this is not a mode anymore - just a switch */
112 #define V3D_VERTEXPAINTMODE_SEL         ICON_VPAINT_HLT
113 #define V3D_TEXTUREPAINTMODE_SEL        ICON_TPAINT_HLT
114 #define V3D_WEIGHTPAINTMODE_SEL         ICON_WPAINT_HLT
115 #define V3D_POSEMODE_SEL                        ICON_POSE_HLT
116 #define V3D_PARTICLEEDITMODE_SEL        ICON_ANIM
117
118 #define TEST_EDITMESH   if(obedit==0) return; \
119                                                 if( (v3d->lay & obedit->lay)==0 ) return;
120
121 /* XXX port over */     
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 static void ED_toggle_paint_modes(bContext *C, int mode)
139 {
140         if(mode & G_PARTICLEEDIT)
141                 WM_operator_name_call(C, "PARTICLE_OT_particle_edit_toggle", WM_OP_EXEC_REGION_WIN, NULL);
142 }
143
144 /* well... in this file a lot of view mode manipulation happens, so let's have it defined here */
145 int ED_view3d_exit_paint_modes(bContext *C)
146 {
147         int restore = G.f;
148
149         ED_toggle_paint_modes(C, G.f);
150         
151         G.f &= ~G_PARTICLEEDIT;
152
153         return restore;
154 }
155
156 void ED_view3d_restore_paint_modes(struct bContext *C, int mode)
157 {
158         ED_toggle_paint_modes(C, mode);
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 quickly ported across
205 static void handle_view3d_lock(bContext *C) 
206 {
207         Scene *scene= CTX_data_scene(C);
208         ScrArea *sa= CTX_wm_area(C);
209         View3D *v3d= CTX_wm_view3d(C);
210         
211         if (v3d != NULL && sa != NULL) {
212                 if(v3d->localview==0 && v3d->scenelock && sa->spacetype==SPACE_VIEW3D) {
213                         
214                         /* copy to scene */
215                         scene->lay= v3d->lay;
216                         scene->camera= v3d->camera;
217                         
218                         //copy_view3d_lock(REDRAW);
219                 }
220         }
221 }
222
223 /* XXX; all this context stuff...  should become operator */
224 void do_layer_buttons(bContext *C, short event)
225 {
226         wmWindow *win= CTX_wm_window(C);
227         Scene *scene= CTX_data_scene(C);
228         ScrArea *sa= CTX_wm_area(C);
229         View3D *v3d= sa->spacedata.first;
230         static int oldlay= 1;
231         short shift, alt, ctrl;
232         
233         shift= win->eventstate->shift;
234         alt= win->eventstate->alt;
235         ctrl= win->eventstate->ctrl;
236         
237         if(v3d==0) return;
238         if(v3d->localview) return;
239         
240         if(event==-1 && ctrl) {
241                 v3d->scenelock= !v3d->scenelock;
242                 do_view3d_header_buttons(C, NULL, B_SCENELOCK);
243         } else if (event<0) {
244                 if(v3d->lay== (1<<20)-1) {
245                         if(event==-2 || shift) v3d->lay= oldlay;
246                 }
247                 else {
248                         oldlay= v3d->lay;
249                         v3d->lay= (1<<20)-1;
250                 }
251                 
252                 if(v3d->scenelock) handle_view3d_lock(C);
253                 
254                 /* new layers might need unflushed events events */
255                 DAG_scene_update_flags(scene, v3d->lay);        /* tags all that moves and flushes */
256         }
257         else {
258                 if(alt) {
259                         if(event<11) event+= 10;
260                 }
261                 if(shift) {
262                         if(v3d->lay & (1<<event)) v3d->lay -= (1<<event);
263                         else    v3d->lay += (1<<event);
264                 }
265                 do_view3d_header_buttons(C, NULL, event+B_LAY);
266         }
267         ED_area_tag_redraw(sa);
268         
269         if(v3d->drawtype == OB_SHADED) reshadeall_displist(scene);
270 }
271
272 static int layers_exec(bContext *C, wmOperator *op)
273 {
274         Scene *scene= CTX_data_scene(C);
275         ScrArea *sa= CTX_wm_area(C);
276         View3D *v3d= sa->spacedata.first;
277         int nr= RNA_int_get(op->ptr, "nr");
278         
279         if(nr<=0)
280                 return OPERATOR_CANCELLED;
281         nr--;
282         
283         if(RNA_boolean_get(op->ptr, "extend"))
284                 v3d->lay |= (1<<nr);
285         else 
286                 v3d->lay = (1<<nr);
287         
288         /* set active layer, ensure to always have one */
289         if(v3d->lay & (1<<nr))
290            v3d->layact= 1<<nr;
291         else if((v3d->lay & v3d->layact)==0) {
292                 int bit= 0;
293                 
294                 while(bit<32) {
295                         if(v3d->lay & (1<<bit)) {
296                                 v3d->layact= 1<<bit;
297                                 break;
298                         }
299                         bit++;
300                 }
301         }
302         
303         if(v3d->scenelock) handle_view3d_lock(C);
304         
305         /* new layers might need unflushed events events */
306         DAG_scene_update_flags(scene, v3d->lay);        /* tags all that moves and flushes */
307
308         ED_area_tag_redraw(sa);
309         
310         return OPERATOR_FINISHED;
311 }
312
313 /* applies shift and alt, lazy coding or ok? :) */
314 /* the local per-keymap-entry keymap will solve it */
315 static int layers_invoke(bContext *C, wmOperator *op, wmEvent *event)
316 {
317         if(event->ctrl || event->oskey)
318                 return OPERATOR_PASS_THROUGH;
319         
320         if(event->shift)
321                 RNA_boolean_set(op->ptr, "extend", 1);
322         
323         if(event->alt) {
324                 int nr= RNA_int_get(op->ptr, "nr") + 10;
325                 RNA_int_set(op->ptr, "nr", nr);
326         }
327         layers_exec(C, op);
328         
329         return OPERATOR_FINISHED;
330 }
331
332 void VIEW3D_OT_layers(wmOperatorType *ot)
333 {
334         /* identifiers */
335         ot->name= "Layers";
336         ot->idname= "VIEW3D_OT_layers";
337         
338         /* api callbacks */
339         ot->invoke= layers_invoke;
340         ot->exec= layers_exec;
341         ot->poll= ED_operator_view3d_active;
342         
343         /* flags */
344         ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
345         
346         RNA_def_int(ot->srna, "nr", 1, 0, 20, "Number", "", 0, 20);
347         RNA_def_boolean(ot->srna, "extend", 0, "Extend", "");
348 }
349
350
351 #if 0
352 static void do_view3d_view_camerasmenu(bContext *C, void *arg, int event)
353 {
354         Scene *scene= CTX_data_scene(C);
355         Base *base;
356         int i=1;
357         
358         if (event == 1) {
359                 /* Set Active Object as Active Camera */
360                 /* XXX ugly hack alert */
361 //              G.qual |= LR_CTRLKEY;
362 //              persptoetsen(PAD0);
363 //              G.qual &= ~LR_CTRLKEY;
364         } else {
365
366                 for( base = FIRSTBASE; base; base = base->next ) {
367                         if (base->object->type == OB_CAMERA) {
368                                 i++;
369                                 
370                                 if (event==i) {
371                                         /* XXX use api call! */
372                                         
373                                         break;
374                                 }
375                         }
376                 }
377         }
378         
379 }
380
381
382 static uiBlock *view3d_view_camerasmenu(bContext *C, ARegion *ar, void *arg_unused)
383 {
384         Scene *scene= CTX_data_scene(C);
385         Base *base;
386         uiBlock *block;
387         short yco= 0, menuwidth=120;
388         int i=1;
389         char camname[48];
390         
391         block= uiBeginBlock(C, ar, "view3d_view_camerasmenu", UI_EMBOSSP);
392         uiBlockSetButmFunc(block, do_view3d_view_camerasmenu, NULL);
393
394         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, "");
395
396         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
397         
398         for( base = FIRSTBASE; base; base = base->next ) {
399                 if (base->object->type == OB_CAMERA) {
400                         i++;
401                         
402                         strcpy(camname, base->object->id.name+2);
403                         if (base->object == scene->camera) strcat(camname, " (Active)");
404                         
405                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, camname,  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0,  i, "");
406                 }
407         }
408         
409         uiBlockSetDirection(block, UI_RIGHT);
410         uiTextBoundsBlock(block, 50);
411         return block;
412 }
413 #endif
414
415 #if 0
416 static void do_view3d_view_cameracontrolsmenu(bContext *C, void *arg, int event)
417 {
418         switch(event) {
419         case 0: /* Orbit Left */
420                 persptoetsen(PAD4);
421                 break;
422         case 1: /* Orbit Right */
423                 persptoetsen(PAD6);
424                 break;
425         case 2: /* Orbit Up */
426                 persptoetsen(PAD8);
427                 break;
428         case 3: /* Orbit Down */
429                 persptoetsen(PAD2);
430                 break;
431         case 4: /* Pan left */
432                 /* XXX ugly hack alert */
433 //              G.qual |= LR_CTRLKEY;
434                 persptoetsen(PAD4);
435 //              G.qual &= ~LR_CTRLKEY;
436                 break;
437         case 5: /* Pan right */
438                 /* XXX ugly hack alert */
439 //              G.qual |= LR_CTRLKEY;
440                 persptoetsen(PAD6);
441 //              G.qual &= ~LR_CTRLKEY;
442                 break;
443         case 6: /* Pan up */
444                 /* ugly hack alert */
445 //              G.qual |= LR_CTRLKEY;
446                 persptoetsen(PAD8);
447 //              G.qual &= ~LR_CTRLKEY;
448                 break;
449         case 7: /* Pan down */
450                 /* ugly hack alert */
451 //              G.qual |= LR_CTRLKEY;
452                 persptoetsen(PAD2);
453 //              G.qual &= ~LR_CTRLKEY;
454                 break;
455         case 8: /* Zoom In */
456                 persptoetsen(PADPLUSKEY);
457                 break;
458         case 9: /* Zoom Out */
459                 persptoetsen(PADMINUS);
460                 break;
461         case 10: /* Reset Zoom */
462                 persptoetsen(PADENTER);
463                 break;
464         case 11: /* Camera Fly mode */
465                 fly();
466                 break;
467         }
468 }
469
470
471 static uiBlock *view3d_view_cameracontrolsmenu(bContext *C, ARegion *ar, void *arg_unused)
472 {
473 /*              static short tog=0; */
474         uiBlock *block;
475         short yco= 0, menuwidth=120;
476         
477         block= uiBeginBlock(C, ar, "view3d_view_cameracontrolsmenu", UI_EMBOSSP);
478         uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
479
480         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
481         
482         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
483         
484         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
485         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
486         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Up|NumPad 8",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
487         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Down|NumPad 2",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
488         
489         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
490         
491         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Left|Ctrl NumPad 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
492         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Right|Ctrl NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
493         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Up|Ctrl NumPad 8",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
494         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Pan Down|Ctrl NumPad 2", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
495         
496         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
497         
498         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom In|NumPad +", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
499         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Zoom Out|NumPad -",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
500         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Reset Zoom|NumPad Enter",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 10, "");
501
502         uiBlockSetDirection(block, UI_RIGHT);
503         uiTextBoundsBlock(block, 50);
504         return block;
505 }
506
507 static void do_view3d_view_alignviewmenu(bContext *C, void *arg, int event)
508 {
509         Scene *scene= CTX_data_scene(C);
510         ScrArea *sa= CTX_wm_area(C);
511         View3D *v3d= sa->spacedata.first;
512         Object *obedit = CTX_data_edit_object(C);
513         float *curs;
514         
515         switch(event) {
516
517         case 0: /* Align View to Selected (edit/faceselect mode) */
518         case 1:
519         case 2:
520                 if ((obedit) && (obedit->type == OB_MESH)) {
521                         editmesh_align_view_to_selected(v3d, event + 1);
522                 } 
523                 else if (paint_facesel_test(CTX_data_active_object(C))) {
524                         Object *obact= OBACT;
525                         if (obact && obact->type==OB_MESH) {
526                                 Mesh *me= obact->data;
527
528                                 if (me->mtface) {
529 // XXX                                  faceselect_align_view_to_selected(v3d, me, event + 1);
530                                         ED_area_tag_redraw(sa);
531                                 }
532                         }
533                 }
534                 break;
535         case 3: /* Center View to Cursor */
536                 curs= give_cursor(scene, v3d);
537                 v3d->ofs[0]= -curs[0];
538                 v3d->ofs[1]= -curs[1];
539                 v3d->ofs[2]= -curs[2];
540                 ED_area_tag_redraw(sa);
541                 break;
542         case 4: /* Align Active Camera to View */
543                 /* XXX This ugly hack is a symptom of the nasty persptoetsen function, 
544                  * but at least it works for now.
545                  */
546 //              G.qual |= LR_CTRLKEY|LR_ALTKEY;
547                 persptoetsen(PAD0);
548 //              G.qual &= ~(LR_CTRLKEY|LR_ALTKEY);
549                 break;
550         case 5: /* Align View to Selected (object mode) */
551 // XXX          mainqenter(PADASTERKEY, 1);
552                 break;
553         case 6: /* Center View and Cursor to Origin */
554                 WM_operator_name_call(C, "VIEW3D_OT_view_center", WM_OP_EXEC_REGION_WIN, NULL);
555                 curs= give_cursor(scene, v3d);
556                 curs[0]=curs[1]=curs[2]= 0.0;
557                 break;
558         }
559 }
560
561 static uiBlock *view3d_view_alignviewmenu(bContext *C, ARegion *ar, void *arg_unused)
562 {
563 /*              static short tog=0; */
564         uiBlock *block;
565         Object *obedit = CTX_data_edit_object(C);
566         short yco= 0, menuwidth=120;
567         
568         block= uiBeginBlock(C, ar, "view3d_view_alignviewmenu", UI_EMBOSSP);
569         uiBlockSetButmFunc(block, do_view3d_view_alignviewmenu, NULL);
570
571         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center View to Cursor|C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
572         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, "");
573         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, "");   
574
575         if (((obedit) && (obedit->type == OB_MESH)) || (paint_facesel_test(CTX_data_active_object(C)))) {
576                 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, "");
577                 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, "");
578                 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, "");
579         } else {
580                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Align View to Selected|NumPad *",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
581         }
582         
583         uiBlockSetDirection(block, UI_RIGHT);
584         uiTextBoundsBlock(block, 50);
585         return block;
586 }
587 #endif
588
589 #if 0
590 static uiBlock *view3d_view_spacehandlers(bContext *C, ARegion *ar, void *arg_unused)
591 {
592         /* XXX */
593         return NULL;
594 }
595
596
597 static void do_view3d_viewmenu(bContext *C, void *arg, int event)
598 {
599         
600         switch(event) {
601         case 0: /* User */
602                 break;
603         case 1: /* Camera */
604                 break;
605         case 2: /* Top */
606                 break;
607         case 3: /* Front */
608                 break;
609         case 4: /* Side */
610                 break;
611         case 5: /* Perspective */
612                 break;
613         case 6: /* Orthographic */
614                 break;
615         case 7: /* Local View */
616                 break;
617         case 8: /* Global View */
618                 break;
619         case 9: /* View All (Home) */
620                 WM_operator_name_call(C, "VIEW3D_OT_view_all", WM_OP_EXEC_REGION_WIN, NULL);
621                 break;
622         case 11: /* View Selected */
623                 WM_operator_name_call(C, "VIEW3D_OT_view_center", WM_OP_EXEC_REGION_WIN, NULL);
624                 break;
625         case 13: /* Play Back Animation */
626                 break;
627         case 15: /* Background Image... */
628 //              add_blockhandler(sa, VIEW3D_HANDLER_BACKGROUND, UI_PNL_UNSTOW);
629                 break;
630         case 16: /* View  Panel */
631 //              add_blockhandler(sa, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
632                 break;
633         case 17: /* Set Clipping Border */
634                 WM_operator_name_call(C, "VIEW3D_OT_clip_border", WM_OP_INVOKE_REGION_WIN, NULL);
635                 break;
636         case 18: /* render preview */
637 //              toggle_blockhandler(sa, VIEW3D_HANDLER_PREVIEW, 0);
638                 break;
639         case 19: /* zoom within border */
640 //              view3d_border_zoom();
641                 break;
642         case 20: /* Transform  Space Panel */
643 //              add_blockhandler(sa, VIEW3D_HANDLER_TRANSFORM, UI_PNL_UNSTOW);
644                 break;  
645         case 21: /* Grease Pencil */
646 //              add_blockhandler(sa, VIEW3D_HANDLER_GREASEPENCIL, UI_PNL_UNSTOW);
647                 break;          
648         case 22: /* View all layers */
649                 do_layer_buttons(C, -2);
650                 break;
651         }
652 }
653 #endif
654
655 #if 0
656 static uiBlock *view3d_viewmenu(bContext *C, ARegion *ar, void *arg_unused)
657 {
658         ScrArea *sa= CTX_wm_area(C);
659         View3D *v3d= sa->spacedata.first;
660         RegionView3D *rv3d= wm_region_view3d(C);
661         uiBlock *block;
662         short yco= 0, menuwidth=120;
663         
664         block= uiBeginBlock(C, ar, "view3d_viewmenu", UI_EMBOSSP);
665         uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
666         
667         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Orientations...",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 20, "");
668         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Render Preview...|Shift P",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 18, "");
669         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "View Properties...", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 16, "");
670         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Background Image...",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 15, "");
671         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Grease Pencil...",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 21, "");
672         
673         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
674         
675         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, "");
676         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "User",                                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
677         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, "");
678         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Camera|NumPad 0",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
679         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, "");
680         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Top|NumPad 7",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 2, "");
681         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, "");
682         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Front|NumPad 1",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 3, "");
683         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, "");
684         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Side|NumPad 3",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 4, "");
685         
686         uiDefIconTextBlockBut(block, view3d_view_camerasmenu, NULL, ICON_RIGHTARROW_THIN, "Cameras", 0, yco-=20, 120, 19, "");
687         
688         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
689         
690         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, "");
691         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Perspective|NumPad 5",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 5, "");
692         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, "");
693         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Orthographic|NumPad 5", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 6, "");
694         
695         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
696         
697         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, "");
698         else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show All Layers| ~", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 22, "");
699         
700         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
701         
702         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, "");
703         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Local View|NumPad /", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
704         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, "");
705         else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Global View|NumPad /",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 8, "");
706         
707         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
708         
709         uiDefIconTextBlockBut(block, view3d_view_cameracontrolsmenu, NULL, ICON_RIGHTARROW_THIN, "View Navigation", 0, yco-=20, 120, 19, "");
710         uiDefIconTextBlockBut(block, view3d_view_alignviewmenu, NULL, ICON_RIGHTARROW_THIN, "Align View", 0, yco-=20, 120, 19, "");
711         
712         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
713         
714         if(rv3d->rflag & RV3D_CLIPPING)
715                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
716         else
717                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
718         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, "");
719         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
720         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
721         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, "");
722         else uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Tile Window|Ctrl DownArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
723
724         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
725         
726         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
727
728 #ifndef DISABLE_PYTHON
729         uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
730         uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
731 #endif
732
733         if(ar->alignment==RGN_ALIGN_TOP) {
734                 uiBlockSetDirection(block, UI_DOWN);
735         }
736         else {
737                 uiBlockSetDirection(block, UI_TOP);
738                 uiBlockFlipOrder(block);
739         }
740
741         uiTextBoundsBlock(block, 50);
742         
743         return block;
744 }
745 #endif
746
747 #if 0
748 void do_view3d_select_object_typemenu(bContext *C, void *arg, int event)
749 {
750
751         extern void selectall_type(short obtype);
752         
753         switch(event) {
754         case 1: /* Mesh */
755                 selectall_type(OB_MESH);
756                 break;
757         case 2: /* Curve */
758                 selectall_type(OB_CURVE);
759                 break;
760         case 3: /* Surface */
761                 selectall_type(OB_SURF);
762                 break;
763         case 4: /* Meta */
764                 selectall_type(OB_MBALL);
765                 break;
766         case 5: /* Armature */
767                 selectall_type(OB_ARMATURE);
768                 break;
769         case 6: /* Lattice */
770                 selectall_type(OB_LATTICE);
771                 break;
772         case 7: /* Text */
773                 selectall_type(OB_FONT);
774                 break;
775         case 8: /* Empty */
776                 selectall_type(OB_EMPTY);
777                 break;
778         case 9: /* Camera */
779                 selectall_type(OB_CAMERA);
780                 break;
781         case 10: /* Lamp */
782                 selectall_type(OB_LAMP);
783                 break;
784         case 20:
785                 do_layer_buttons(C, -2);
786                 break;
787         }
788 }
789
790 static uiBlock *view3d_select_object_typemenu(bContext *C, ARegion *ar, void *arg_unused)
791 {
792         uiBlock *block;
793         short yco = 20, menuwidth = 120;
794
795         block= uiBeginBlock(C, ar, "view3d_select_object_typemenu", UI_EMBOSSP);
796         uiBlockSetButmFunc(block, do_view3d_select_object_typemenu, NULL);
797
798         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
799         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
800         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
801         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Meta",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
802         
803         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
804         
805         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
806         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
807         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
808         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Empty",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
809         
810         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
811         
812         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
813         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
814         
815         uiBlockSetDirection(block, UI_RIGHT);
816         uiTextBoundsBlock(block, 60);
817         return block;
818 }
819
820
821 void do_view3d_select_object_layermenu(bContext *C, void *arg, int event)
822 {
823 // XXX  extern void selectall_layer(unsigned int layernum);
824         
825         switch(event) {
826         case 0:
827         case 1:
828         case 2:
829         case 3:
830         case 4:
831         case 5:
832         case 6:
833         case 7:
834         case 8:
835         case 9:
836         case 10:
837         case 11:
838         case 12:
839         case 13:
840         case 14:
841         case 15:
842         case 16:
843         case 17:
844         case 18:
845         case 19:
846         case 20:
847 // XXX          selectall_layer(event);
848                 break;
849         }
850 }
851
852 static uiBlock *view3d_select_object_layermenu(bContext *C, ARegion *ar, void *arg_unused)
853 {
854         uiBlock *block;
855         short xco= 0, yco = 20, menuwidth = 22;
856
857         block= uiBeginBlock(C, ar, "view3d_select_object_layermenu", UI_EMBOSSP);
858         uiBlockSetButmFunc(block, do_view3d_select_object_layermenu, NULL);
859
860         uiDefBut(block, BUTM, 1, "1",           xco, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
861         uiDefBut(block, BUTM, 1, "2",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
862         uiDefBut(block, BUTM, 1, "3",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
863         uiDefBut(block, BUTM, 1, "4",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
864         uiDefBut(block, BUTM, 1, "5",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
865         xco += 6;
866         uiDefBut(block, BUTM, 1, "6",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
867         uiDefBut(block, BUTM, 1, "7",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
868         uiDefBut(block, BUTM, 1, "8",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
869         uiDefBut(block, BUTM, 1, "9",           xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
870         uiDefBut(block, BUTM, 1, "10",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
871         xco = 0;
872         uiDefBut(block, BUTM, 1, "11",          xco, yco-=24, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
873         uiDefBut(block, BUTM, 1, "12",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
874         uiDefBut(block, BUTM, 1, "13",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
875         uiDefBut(block, BUTM, 1, "14",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
876         uiDefBut(block, BUTM, 1, "15",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
877         xco += 6;
878         uiDefBut(block, BUTM, 1, "16",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
879         uiDefBut(block, BUTM, 1, "17",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
880         uiDefBut(block, BUTM, 1, "18",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
881         uiDefBut(block, BUTM, 1, "19",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
882         uiDefBut(block, BUTM, 1, "20",          xco+=(menuwidth+1), yco, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
883         
884         uiBlockSetDirection(block, UI_RIGHT);
885         /*uiTextBoundsBlock(block, 100);*/
886         return block;
887 }
888
889 void do_view3d_select_object_linkedmenu(bContext *C, void *arg, int event)
890 {
891         switch(event) {
892         case 1: /* Object Ipo */
893         case 2: /* ObData */
894         case 3: /* Current Material */
895         case 4: /* Current Texture */
896                 selectlinks(event);
897                 break;
898         }
899         countall();
900 }
901
902 static uiBlock *view3d_select_object_linkedmenu(bContext *C, ARegion *ar, void *arg_unused)
903 {
904         uiBlock *block;
905         short yco = 20, menuwidth = 120;
906
907         block= uiBeginBlock(C, ar, "view3d_select_object_linkedmenu", UI_EMBOSSP);
908         uiBlockSetButmFunc(block, do_view3d_select_object_linkedmenu, NULL);
909
910         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Shift L, 1",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
911         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData|Shift L, 2",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
912         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Material|Shift L, 3",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
913         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture|Shift L, 4",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
914         
915         uiBlockSetDirection(block, UI_RIGHT);
916         uiTextBoundsBlock(block, 60);
917         return block;
918 }
919
920 void do_view3d_select_object_groupedmenu(bContext *C, void *arg, int event)
921 {
922
923         switch(event) {
924         case 1: /* Children */
925         case 2: /* Immediate Children */
926         case 3: /* Parent */
927         case 4: /* Siblings */
928         case 5: /* Type */
929         case 6: /* Objects on Shared Layers */
930         case 7: /* Objects in Same Group */
931         case 8: /* Object Hooks*/
932         case 9: /* Object PassIndex*/
933         case 10: /* Object Color*/
934         case 11: /* Game Properties*/
935                 select_object_grouped((short)event);
936                 break;
937         }
938 }
939
940 static uiBlock *view3d_select_object_groupedmenu(bContext *C, ARegion *ar, void *arg_unused)
941 {
942         uiBlock *block;
943         short yco = 20, menuwidth = 120;
944
945         block= uiBeginBlock(C, ar, "view3d_select_object_groupedmenu", UI_EMBOSSP);
946         uiBlockSetButmFunc(block, do_view3d_select_object_groupedmenu, NULL);
947
948         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Children|Shift G, 1",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
949         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Immediate Children|Shift G, 2",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
950         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Parent|Shift G, 3",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
951         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Siblings (Shared Parent)|Shift G, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
952         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, "");
953         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, "");
954         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, "");
955         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Hooks|Shift G, 8",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
956         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object PassIndex|Shift G, 9",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
957         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Color|Shift G, 0",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");  
958         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Game Properties|Shift G, Alt+1",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");  
959
960         uiBlockSetDirection(block, UI_RIGHT);
961         uiTextBoundsBlock(block, 60);
962         return block;
963 }
964
965 #endif
966
967 static void view3d_select_metaballmenu(bContext *C, uiLayout *layout, void *arg_unused)
968 {
969         uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
970         uiItemS(layout);
971         uiItemO(layout, NULL, 0, "MBALL_OT_select_deselect_all_metaelems");
972         uiItemO(layout, NULL, 0, "MBALL_OT_select_inverse_metaelems");
973         uiItemS(layout);
974         uiItemO(layout, NULL, 0, "MBALL_OT_select_random_metaelems");
975 }
976
977 /* wrapper for python layouts */
978 void uiTemplate_view3d_select_metaballmenu(uiLayout *layout, bContext *C)
979 {
980         void *arg_unused = NULL;
981         view3d_select_metaballmenu(C, layout, arg_unused);
982 }
983
984 static void view3d_select_armaturemenu(bContext *C, uiLayout *layout, void *arg_unused)
985 {
986         PointerRNA ptr;
987
988         /* this part of the menu has been moved to python */
989         /*uiItemO(layout, NULL, 0, "VIEW3D_OT_select_border");
990
991         uiItemS(layout);
992
993         uiItemO(layout, "Select/Deselect All", 0, "ARMATURE_OT_select_all_toggle");
994         uiItemO(layout, "Inverse", 0, "ARMATURE_OT_select_inverse");
995
996         uiItemS(layout);
997
998         uiItemEnumO(layout, "Parent", 0, "ARMATURE_OT_select_hierarchy", "direction", BONE_SELECT_PARENT);
999         uiItemEnumO(layout, "Child", 0, "ARMATURE_OT_select_hierarchy", "direction", BONE_SELECT_CHILD);
1000
1001         uiItemS(layout);*/
1002
1003         WM_operator_properties_create(&ptr, "ARMATURE_OT_select_hierarchy");
1004         RNA_boolean_set(&ptr, "extend", 1);
1005         RNA_enum_set(&ptr, "direction", BONE_SELECT_PARENT);
1006         uiItemFullO(layout, "Extend Parent", 0, "ARMATURE_OT_select_hierarchy", ptr.data, WM_OP_EXEC_REGION_WIN);
1007
1008         WM_operator_properties_create(&ptr, "ARMATURE_OT_select_hierarchy");
1009         RNA_boolean_set(&ptr, "extend", 1);
1010         RNA_enum_set(&ptr, "direction", BONE_SELECT_CHILD);
1011         uiItemFullO(layout, "Extend Child", 0, "ARMATURE_OT_select_hierarchy", ptr.data, WM_OP_EXEC_REGION_WIN);
1012 }
1013
1014 /* wrapper for python layouts */
1015 void uiTemplate_view3d_select_armaturemenu(uiLayout *layout, bContext *C)
1016 {
1017         void *arg_unused = NULL;
1018         view3d_select_armaturemenu(C, layout, arg_unused);
1019 }
1020
1021 static void view3d_select_posemenu(bContext *C, uiLayout *layout, void *arg_unused)
1022 {
1023         PointerRNA ptr;
1024
1025         WM_operator_properties_create(&ptr, "POSE_OT_select_hierarchy");
1026         RNA_boolean_set(&ptr, "extend", 1);
1027         RNA_enum_set(&ptr, "direction", BONE_SELECT_PARENT);
1028         uiItemFullO(layout, "Extend Parent", 0, "POSE_OT_select_hierarchy", ptr.data, WM_OP_EXEC_REGION_WIN);
1029
1030         WM_operator_properties_create(&ptr, "POSE_OT_select_hierarchy");
1031         RNA_boolean_set(&ptr, "extend", 1);
1032         RNA_enum_set(&ptr, "direction", BONE_SELECT_CHILD);
1033         uiItemFullO(layout, "Extend Child", 0, "POSE_OT_select_hierarchy", ptr.data, WM_OP_EXEC_REGION_WIN);
1034 }
1035
1036 /* wrapper for python layouts */
1037 void uiTemplate_view3d_select_posemenu(uiLayout *layout, bContext *C)
1038 {
1039         void *arg_unused = NULL;
1040         view3d_select_posemenu(C, layout, arg_unused);
1041 }
1042
1043 void do_view3d_select_faceselmenu(bContext *C, void *arg, int event)
1044 {
1045 #if 0
1046         /* events >= 6 are registered bpython scripts */
1047 #ifndef DISABLE_PYTHON
1048         if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
1049 #endif
1050         
1051         switch(event) {
1052                 case 0: /* border select */
1053                         borderselect();
1054                         break;
1055                 case 2: /* Select/Deselect all */
1056                         deselectall_tface();
1057                         break;
1058                 case 3: /* Select Inverse */
1059                         selectswap_tface();
1060                         break;
1061                 case 4: /* Select Linked */
1062                         select_linked_tfaces(2);
1063                         break;
1064         }
1065 #endif
1066 }
1067
1068 static uiBlock *view3d_select_faceselmenu(bContext *C, ARegion *ar, void *arg_unused)
1069 {
1070         uiBlock *block;
1071         short yco= 0, menuwidth=120;
1072 #ifndef DISABLE_PYTHON
1073 // XXX  BPyMenu *pym;
1074 //      int i = 0;
1075 #endif
1076
1077         block= uiBeginBlock(C, ar, "view3d_select_faceselmenu", UI_EMBOSSP);
1078         uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1079         
1080         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1081         
1082         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1083         
1084         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1085         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1086
1087         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1088         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1089
1090 #ifndef DISABLE_PYTHON
1091 //      uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1092
1093         /* note that we account for the 6 previous entries with i+6: */
1094 //      for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
1095 //              uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
1096 //                      menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
1097 //                      pym->tooltip?pym->tooltip:pym->filename);
1098 //      }
1099 #endif
1100         
1101         if(ar->alignment==RGN_ALIGN_TOP) {
1102                 uiBlockSetDirection(block, UI_DOWN);
1103         }
1104         else {
1105                 uiBlockSetDirection(block, UI_TOP);
1106                 uiBlockFlipOrder(block);
1107         }
1108
1109         uiTextBoundsBlock(block, 50);
1110         return block;
1111 }
1112
1113 /* wrapper for python layouts */
1114 void uiTemplate_view3d_select_faceselmenu(uiLayout *layout, bContext *C)
1115 {
1116         void *arg_unused = NULL;
1117         ARegion *ar= CTX_wm_region(C);
1118         view3d_select_faceselmenu(C, ar, arg_unused);
1119 }
1120
1121 static void view3d_edit_snapmenu(bContext *C, uiLayout *layout, void *arg_unused)
1122 {
1123         uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_grid");
1124         uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_cursor");
1125         uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_selected_to_center");
1126
1127         uiItemS(layout);
1128
1129         uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_selected");
1130         uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_grid");
1131         uiItemO(layout, NULL, 0, "VIEW3D_OT_snap_cursor_to_active");
1132 }
1133
1134 #if 0
1135 void do_view3d_transform_moveaxismenu(bContext *C, void *arg, int event)
1136 {
1137 #if 0
1138         float mat[3][3];
1139         
1140         Mat3One(mat);
1141         
1142         switch(event)
1143         {
1144             case 0: /* X Global */
1145                         initTransform(TFM_TRANSLATION, CTX_NONE);
1146                         BIF_setSingleAxisConstraint(mat[0], " X");
1147                         Transform();
1148                         break;
1149                 case 1: /* Y Global */
1150                         initTransform(TFM_TRANSLATION, CTX_NONE);
1151                         BIF_setSingleAxisConstraint(mat[1], " Y");
1152                         Transform();
1153                         break;
1154                 case 2: /* Z Global */
1155                         initTransform(TFM_TRANSLATION, CTX_NONE);
1156                         BIF_setSingleAxisConstraint(mat[2], " Z");
1157                         Transform();
1158                         break;
1159                 case 3: /* X Local */
1160                         initTransform(TFM_TRANSLATION, CTX_NONE);
1161                         BIF_setLocalAxisConstraint('X', " X");
1162                         Transform();
1163                         break;
1164                 case 4: /* Y Local */
1165                         initTransform(TFM_TRANSLATION, CTX_NONE);
1166                         BIF_setLocalAxisConstraint('Y', " Y");
1167                         Transform();
1168                         break;
1169                 case 5: /* Z Local */
1170                         initTransform(TFM_TRANSLATION, CTX_NONE);
1171                         BIF_setLocalAxisConstraint('Z', " Z");
1172                         Transform();
1173                         break;
1174         }
1175 #endif
1176 }
1177
1178 static uiBlock *view3d_transform_moveaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1179 {
1180         uiBlock *block;
1181         short yco = 20, menuwidth = 120;
1182
1183         block= uiBeginBlock(C, ar, "view3d_transform_moveaxismenu", UI_EMBOSSP);
1184         uiBlockSetButmFunc(block, do_view3d_transform_moveaxismenu, NULL);
1185
1186         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|G, X",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1187         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|G, Y",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1188         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|G, Z",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1189         
1190         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1191         
1192         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|G, X, X",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1193         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|G, Y, Y",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1194         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|G, Z, Z",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1195         
1196         
1197         uiBlockSetDirection(block, UI_RIGHT);
1198         uiTextBoundsBlock(block, 60);
1199         return block;
1200 }
1201
1202 void do_view3d_transform_rotateaxismenu(bContext *C, void *arg, int event)
1203 {
1204 #if 0
1205         float mat[3][3];
1206         
1207         Mat3One(mat);
1208         
1209         switch(event)
1210         {
1211             case 0: /* X Global */
1212                         initTransform(TFM_ROTATION, CTX_NONE);
1213                         BIF_setSingleAxisConstraint(mat[0], " X");
1214                         Transform();
1215                         break;
1216                 case 1: /* Y Global */
1217                         initTransform(TFM_ROTATION, CTX_NONE);
1218                         BIF_setSingleAxisConstraint(mat[1], " Y");
1219                         Transform();
1220                         break;
1221                 case 2: /* Z Global */
1222                         initTransform(TFM_ROTATION, CTX_NONE);
1223                         BIF_setSingleAxisConstraint(mat[2], " Z");
1224                         Transform();
1225                         break;
1226                 case 3: /* X Local */
1227                         initTransform(TFM_ROTATION, CTX_NONE);
1228                         BIF_setLocalAxisConstraint('X', " X");
1229                         Transform();
1230                         break;
1231                 case 4: /* Y Local */
1232                         initTransform(TFM_ROTATION, CTX_NONE);
1233                         BIF_setLocalAxisConstraint('Y', " Y");
1234                         Transform();
1235                         break;
1236                 case 5: /* Z Local */
1237                         initTransform(TFM_ROTATION, CTX_NONE);
1238                         BIF_setLocalAxisConstraint('Z', " Z");
1239                         Transform();
1240                         break;
1241         }
1242 #endif
1243 }
1244
1245 static uiBlock *view3d_transform_rotateaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1246 {
1247         uiBlock *block;
1248         short yco = 20, menuwidth = 120;
1249
1250         block= uiBeginBlock(C, ar, "view3d_transform_rotateaxismenu", UI_EMBOSSP);
1251         uiBlockSetButmFunc(block, do_view3d_transform_rotateaxismenu, NULL);
1252
1253         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|R, X",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1254         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|R, Y",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1255         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|R, Z",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1256         
1257         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1258         
1259         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|R, X, X",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1260         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|R, Y, Y",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1261         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|R, Z, Z",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1262         
1263         
1264         uiBlockSetDirection(block, UI_RIGHT);
1265         uiTextBoundsBlock(block, 60);
1266         return block;
1267 }
1268
1269 void do_view3d_transform_scaleaxismenu(bContext *C, void *arg, int event)
1270 {
1271 #if 0
1272         float mat[3][3];
1273         
1274         Mat3One(mat);
1275         
1276         switch(event)
1277         {
1278             case 0: /* X Global */
1279                         initTransform(TFM_RESIZE, CTX_NONE);
1280                         BIF_setSingleAxisConstraint(mat[0], " X");
1281                         Transform();
1282                         break;
1283                 case 1: /* Y Global */
1284                         initTransform(TFM_RESIZE, CTX_NONE);
1285                         BIF_setSingleAxisConstraint(mat[1], " Y");
1286                         Transform();
1287                         break;
1288                 case 2: /* Z Global */
1289                         initTransform(TFM_RESIZE, CTX_NONE);
1290                         BIF_setSingleAxisConstraint(mat[2], " Z");
1291                         Transform();
1292                         break;
1293                 case 3: /* X Local */
1294                         initTransform(TFM_RESIZE, CTX_NONE);
1295                         BIF_setLocalAxisConstraint('X', " X");
1296                         Transform();
1297                         break;
1298                 case 4: /* Y Local */
1299                         initTransform(TFM_RESIZE, CTX_NONE);
1300                         BIF_setLocalAxisConstraint('X', " X");
1301                         Transform();
1302                         break;
1303                 case 5: /* Z Local */
1304                         initTransform(TFM_RESIZE, CTX_NONE);
1305                         BIF_setLocalAxisConstraint('X', " X");
1306                         Transform();
1307                         break;
1308         }
1309 #endif
1310 }
1311
1312 static uiBlock *view3d_transform_scaleaxismenu(bContext *C, ARegion *ar, void *arg_unused)
1313 {
1314         uiBlock *block;
1315         short yco = 20, menuwidth = 120;
1316
1317         block= uiBeginBlock(C, ar, "view3d_transform_scaleaxismenu", UI_EMBOSSP);
1318         uiBlockSetButmFunc(block, do_view3d_transform_scaleaxismenu, NULL);
1319
1320         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|S, X",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1321         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|S, Y",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1322         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|S, Z",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1323         
1324         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1325         
1326         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|S, X, X",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1327         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|S, Y, Y",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1328         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|S, Z, Z",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1329         
1330         
1331         uiBlockSetDirection(block, UI_RIGHT);
1332         uiTextBoundsBlock(block, 60);
1333         return block;
1334 }
1335 #endif
1336
1337 #if 0
1338 static void do_view3d_transformmenu(bContext *C, void *arg, int event)
1339 {
1340 #if 0
1341         Scene *scene= CTX_data_scene(C);
1342         ToolSettings *ts= CTX_data_tool_settings(C);
1343         
1344         switch(event) {
1345         case 1:
1346                 initTransform(TFM_TRANSLATION, CTX_NONE);
1347                 Transform();
1348                 break;
1349         case 2:
1350                 initTransform(TFM_ROTATION, CTX_NONE);
1351                 Transform();
1352                 break;
1353         case 3:
1354                 initTransform(TFM_RESIZE, CTX_NONE);
1355                 Transform();
1356                 break;
1357         case 4:
1358                 image_aspect();
1359                 break;
1360         case 5:
1361                 initTransform(TFM_TOSPHERE, CTX_NONE);
1362                 Transform();
1363                 break;
1364         case 6:
1365                 initTransform(TFM_SHEAR, CTX_NONE);
1366                 Transform();
1367                 break;
1368         case 7:
1369                 initTransform(TFM_WARP, CTX_NONE);
1370                 Transform();
1371                 break;
1372         case 8:
1373                 initTransform(TFM_PUSHPULL, CTX_NONE);
1374                 Transform();
1375                 break;
1376         case 9:
1377                 if (obedit) {
1378                         if (obedit->type == OB_MESH)
1379                                 initTransform(TFM_SHRINKFATTEN, CTX_NONE);
1380                                 Transform();
1381                 } else error("Only meshes can be shrinked/fattened");
1382                 break;
1383         case 10:
1384                 docenter(0);
1385                 break;
1386         case 11:
1387                 docenter_new();
1388                 break;
1389         case 12:
1390                 docenter_cursor();
1391                 break;
1392         case 13:
1393                 initTransform(TFM_TILT, CTX_NONE);
1394                 Transform();
1395                 break;
1396         case 14:
1397                 initTransform(TFM_CURVE_SHRINKFATTEN, CTX_NONE);
1398                 Transform();
1399                 break;
1400         case 15:
1401                 ts->snap_flag &= ~SCE_SNAP;
1402                 break;
1403         case 16:
1404                 ts->snap_flag |= SCE_SNAP;
1405                 break;
1406         case 17:
1407                 ts->snap_target = SCE_SNAP_TARGET_CLOSEST;
1408                 break;
1409         case 18:
1410                 ts->snap_target = SCE_SNAP_TARGET_CENTER;
1411                 break;
1412         case 19:
1413                 ts->snap_target = SCE_SNAP_TARGET_MEDIAN;
1414                 break;
1415         case 20:
1416                 ts->snap_target = SCE_SNAP_TARGET_ACTIVE;
1417                 break;
1418         case 21:
1419                 alignmenu();
1420                 break;
1421         }
1422 #endif
1423 }
1424
1425 static uiBlock *view3d_transformmenu(bContext *C, ARegion *ar, void *arg_unused)
1426 {
1427         ToolSettings *ts= CTX_data_tool_settings(C);
1428         Object *obedit = CTX_data_edit_object(C);
1429         uiBlock *block;
1430         short yco = 20, menuwidth = 120;
1431
1432         block= uiBeginBlock(C, ar, "view3d_transformmenu", UI_EMBOSSP);
1433         uiBlockSetButmFunc(block, do_view3d_transformmenu, NULL);
1434
1435         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Grab/Move|G",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1436         uiDefIconTextBlockBut(block, view3d_transform_moveaxismenu, NULL, ICON_RIGHTARROW_THIN, "Grab/Move on Axis", 0, yco-=20, 120, 19, "");
1437                 
1438         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate|R",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1439         uiDefIconTextBlockBut(block, view3d_transform_rotateaxismenu, NULL, ICON_RIGHTARROW_THIN, "Rotate on Axis", 0, yco-=20, 120, 19, "");
1440
1441         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1442         uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1443
1444         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1445         
1446         if (obedit) {
1447                 if (obedit->type == OB_MESH)
1448                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1449                 else if (obedit->type == OB_CURVE) {
1450                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
1451                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Radius|Alt S",     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
1452                 }
1453         }
1454         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1455         if (obedit) uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1456         else uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1457         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1458         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1459         
1460         if (!obedit) {
1461                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1462                 
1463                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale to Image Aspect Ratio|Alt V",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1464         }
1465         
1466         uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1467
1468         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1469         if (!obedit) {
1470                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1471                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
1472                 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, "");
1473         }
1474         
1475         if (BIF_snappingSupported(obedit))
1476         {
1477                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1478         
1479                 if (ts->snap_flag & SCE_SNAP)
1480                 {
1481                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Grid",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1482                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1483                 }
1484                 else
1485                 {
1486                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Grid",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
1487                         uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
1488                 }
1489                         
1490                 uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1491
1492                 switch(ts->snap_target)
1493                 {
1494                         case SCE_SNAP_TARGET_CLOSEST:
1495                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Closest",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1496                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1497                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1498                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1499                                 break;
1500                         case SCE_SNAP_TARGET_CENTER:
1501                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1502                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Center",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1503                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1504                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1505                                 break;
1506                         case SCE_SNAP_TARGET_MEDIAN:
1507                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1508                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1509                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Median",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1510                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Active",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1511                                 break;
1512                         case SCE_SNAP_TARGET_ACTIVE:
1513                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Closest",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1514                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Center",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1515                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Snap Median",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1516                                 uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Snap Active",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1517                                 break;
1518                 }
1519         }
1520
1521         uiBlockSetDirection(block, UI_RIGHT);
1522         uiTextBoundsBlock(block, 60);
1523         return block;
1524 }
1525
1526 #if 0
1527 void do_view3d_object_mirrormenu(bContext *C, void *arg, int event)
1528 {
1529 #if 0
1530         switch(event) {
1531                 case 0:
1532                         initTransform(TFM_MIRROR, CTX_NO_PET);
1533                         Transform();
1534                         break;
1535                 case 1:
1536                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1537                         BIF_setLocalAxisConstraint('X', " on X axis");
1538                         Transform();
1539                         break;
1540                 case 2:
1541                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1542                         BIF_setLocalAxisConstraint('Y', " on Y axis");
1543                         Transform();
1544                         break;
1545                 case 3:
1546                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
1547                         BIF_setLocalAxisConstraint('Z', " on Z axis");
1548                         Transform();
1549                         break;
1550         }
1551 #endif
1552 }
1553
1554 static uiBlock *view3d_object_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
1555 {
1556         uiBlock *block;
1557         short yco = 20, menuwidth = 120;
1558
1559         block= uiBeginBlock(C, ar, "view3d_object_mirrormenu", UI_EMBOSSP);
1560         uiBlockSetButmFunc(block, do_view3d_object_mirrormenu, NULL);
1561         
1562         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1563         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1564         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1565         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1566         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1567
1568         uiBlockSetDirection(block, UI_RIGHT);
1569         uiTextBoundsBlock(block, 60);
1570         return block;
1571 }
1572 #endif
1573 #endif
1574
1575 static void view3d_edit_object_transformmenu(bContext *C, uiLayout *layout, void *arg_unused)
1576 {
1577 #if 0
1578         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, "");
1579         apply_objects_locrot();
1580         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Visual Transform|Ctrl A, 2",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1581         apply_objects_visual_tx();
1582         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Deformation|Ctrl Shift A",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1583         if(OBACT) object_apply_deform(OBACT);
1584 #endif
1585         uiItemO(layout, NULL, 0, "OBJECT_OT_duplicates_make_real");
1586
1587         uiItemS(layout);
1588
1589         uiItemO(layout, NULL, 0, "OBJECT_OT_location_clear");
1590         uiItemO(layout, NULL, 0, "OBJECT_OT_rotation_clear");
1591         uiItemO(layout, NULL, 0, "OBJECT_OT_scale_clear");
1592         uiItemO(layout, NULL, 0, "OBJECT_OT_origin_clear");
1593 }
1594
1595 #if 0
1596 static void do_view3d_edit_object_makelocalmenu(bContext *C, void *arg, int event)
1597 {
1598 #if 0
1599         switch(event) {
1600                 case 1:
1601                 case 2:
1602                 case 3:
1603                         make_local(event);
1604                         break;
1605         }
1606 #endif
1607 }
1608
1609 static uiBlock *view3d_edit_object_makelocalmenu(bContext *C, ARegion *ar, void *arg_unused)
1610 {       
1611         uiBlock *block;
1612         short yco = 20, menuwidth = 120;
1613         
1614         block= uiBeginBlock(C, ar, "view3d_edit_object_makelocalmenu", UI_EMBOSSP);
1615         uiBlockSetButmFunc(block, do_view3d_edit_object_makelocalmenu, NULL);
1616         
1617         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects|L, 1",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1618         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Selected Objects and Data|L, 2",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1619         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All|L, 3",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1620         
1621         uiBlockSetDirection(block, UI_RIGHT);
1622         uiTextBoundsBlock(block, 60);
1623         return block;
1624 }
1625
1626 static void do_view3d_edit_object_makelinksmenu(bContext *C, void *arg, int event)
1627 {
1628 #if 0
1629         switch(event) {
1630         case 1:
1631         case 2:
1632         case 3:
1633         case 4:
1634                 make_links((short)event);
1635                 break;
1636                 }
1637 #endif
1638 }
1639
1640 static uiBlock *view3d_edit_object_makelinksmenu(bContext *C, ARegion *ar, void *arg_unused)
1641 {
1642         Scene *scene= CTX_data_scene(C);
1643         Object *ob=NULL;
1644         
1645         uiBlock *block;
1646         short yco = 20, menuwidth = 120;
1647
1648         block= uiBeginBlock(C, ar, "view3d_edit_object_makelinksmenu", UI_EMBOSSP);
1649         uiBlockSetButmFunc(block, do_view3d_edit_object_makelinksmenu, NULL);
1650         
1651         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Scene...|Ctrl L, 1",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1652         
1653         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1654         
1655         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Ipo|Ctrl L, 2",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1656         
1657         if ((ob=OBACT)) {
1658         
1659                 if(ob->type==OB_MESH) {
1660                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mesh Data|Ctrl L, 3",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1661                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1662                 } else if(ob->type==OB_CURVE) {
1663                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Data|Ctrl L, 3",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1664                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1665                 } else if(ob->type==OB_FONT) {
1666                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Text Data|Ctrl L, 3",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1667                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1668                 } else if(ob->type==OB_SURF) {
1669                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Surface Data|Ctrl L, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1670                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 4",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1671                 } else if(ob->type==OB_MBALL) {
1672                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials|Ctrl L, 3",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1673                 } else if(ob->type==OB_CAMERA) {
1674                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Data|Ctrl L, 3",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1675                 } else if(ob->type==OB_LAMP) {
1676                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lamp Data|Ctrl L, 3",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1677                 } else if(ob->type==OB_LATTICE) {
1678                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Lattice Data|Ctrl L, 3",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1679                 } else if(ob->type==OB_ARMATURE) {
1680                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Armature Data|Ctrl L, 3",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1681                 }
1682         }
1683         
1684         uiBlockSetDirection(block, UI_RIGHT);
1685         uiTextBoundsBlock(block, 60);
1686         return block;
1687 }
1688
1689 static void do_view3d_edit_object_singleusermenu(bContext *C, void *arg, int event)
1690 {
1691 #if 0
1692         switch(event) {
1693         case 1: /* Object */
1694                 single_object_users(1);
1695                 break;
1696         case 2: /* Object & ObData */ 
1697                 single_object_users(1);
1698                 single_obdata_users(1);
1699                 break;
1700         case 3: /* Object & ObData & Materials+Tex */
1701                 single_object_users(1);
1702                 single_obdata_users(1);
1703                 single_mat_users(1); /* also tex */
1704                 break;
1705         case 4: /* Materials+Tex */
1706                 single_mat_users(1);
1707                 break;
1708         case 5: /* Ipo */
1709                 single_ipo_users(1);
1710                 break;
1711         }
1712         
1713         clear_id_newpoins();
1714         countall();
1715         
1716 #endif
1717 }
1718
1719 static uiBlock *view3d_edit_object_singleusermenu(bContext *C, ARegion *ar, void *arg_unused)
1720 {
1721
1722         uiBlock *block;
1723         short yco = 20, menuwidth = 120;
1724
1725         block= uiBeginBlock(C, ar, "view3d_edit_object_singleusermenu", UI_EMBOSSP);
1726         uiBlockSetButmFunc(block, do_view3d_edit_object_singleusermenu, NULL);
1727         
1728         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object|U, 1",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1729         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData|U, 2",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1730         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object & ObData & Materials+Tex|U, 3",   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1731         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Materials+Tex|U, 4",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1732         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Ipos|U, 5",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1733         
1734         uiBlockSetDirection(block, UI_RIGHT);
1735         uiTextBoundsBlock(block, 60);
1736         return block;
1737 }
1738
1739 static void do_view3d_edit_object_copyattrmenu(bContext *C, void *arg, int event)
1740 {
1741         switch(event) {
1742         case 1:
1743         case 2:
1744         case 3:
1745         case 4:
1746         case 5:
1747         case 6:
1748         case 7:
1749         case 8:
1750         case 9:
1751         case 10:
1752         case 11:
1753         case 17:
1754         case 18:
1755         case 19:
1756         case 20:
1757         case 21:
1758         case 22:
1759         case 23:
1760         case 24:
1761         case 25:
1762         case 26:
1763         case 29:
1764         case 30:
1765 // XXX          copy_attr((short)event);
1766                 break;
1767                 }
1768 }
1769
1770 static uiBlock *view3d_edit_object_copyattrmenu(bContext *C, ARegion *ar, void *arg_unused)
1771 {
1772         Scene *scene= CTX_data_scene(C);
1773         Object *ob=NULL;
1774         
1775         uiBlock *block;
1776         short yco = 20, menuwidth = 120;
1777
1778         block= uiBeginBlock(C, ar, "view3d_edit_object_copyattrmenu", UI_EMBOSSP);
1779         uiBlockSetButmFunc(block, do_view3d_edit_object_copyattrmenu, NULL);
1780         
1781         ob= OBACT;
1782         
1783         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Location|Ctrl C, 1",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1784         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotation|Ctrl C, 2",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1785         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1786         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1787         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1788         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1789         
1790         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1791         
1792         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mass|Ctrl C, 7",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1793         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Damping|Ctrl C, 8",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1794         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "All Physical Attributes|Ctrl C, 11",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
1795         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Properties|Ctrl C, 9",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1796         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Logic Bricks|Ctrl C, 10",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
1797         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Protected Transform |Ctrl C",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 29, "");
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, "Object Constraints|Ctrl C",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
1802         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "NLA Strips|Ctrl C",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 26, "");
1803         
1804         if (ob) {
1805         
1806                 if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
1807                                 (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
1808                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1809                 }       
1810                 
1811                 if(ob->type == OB_FONT) {
1812                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1813                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1814                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
1815                 }
1816                 if(ob->type == OB_CURVE) {
1817                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
1818                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
1819                 }
1820         
1821                 if(ob->type==OB_MESH) {
1822                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subsurf Settings|Ctrl C",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
1823                         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
1824                 }
1825                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Pass Index|Ctrl C", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 30, "");
1826         }
1827         
1828         uiBlockSetDirection(block, UI_RIGHT);
1829         uiTextBoundsBlock(block, 60);
1830         return block;
1831 }
1832 #endif
1833
1834 #if 0
1835 #ifndef DISABLE_PYTHON
1836 static void do_view3d_edit_object_scriptsmenu(bContext *C, void *arg, int event)
1837 {
1838 #if 0
1839         BPY_menu_do_python(PYMENU_OBJECT, event);
1840
1841 #endif
1842 }
1843
1844 static uiBlock *view3d_edit_object_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
1845 {
1846         uiBlock *block;
1847 //      short yco = 20, menuwidth = 120;
1848 // XXX  BPyMenu *pym;
1849 //      int i = 0;
1850
1851         block= uiBeginBlock(C, ar, "v3d_eobject_pymenu", UI_EMBOSSP);
1852         uiBlockSetButmFunc(block, do_view3d_edit_object_scriptsmenu, NULL);
1853
1854 //      for (pym = BPyMenuTable[PYMENU_OBJECT]; pym; pym = pym->next, i++) {
1855 //              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);
1856 //      }
1857
1858         uiBlockSetDirection(block, UI_RIGHT);
1859         uiTextBoundsBlock(block, 60);
1860
1861         return block;
1862 }
1863 #endif /* DISABLE_PYTHON */
1864 #endif
1865
1866
1867 #if 0
1868 static void do_view3d_edit_objectmenu(bContext *C, void *arg, int event)
1869 {
1870         Scene *scene= CTX_data_scene(C);
1871         ScrArea *sa= CTX_wm_area(C);
1872         View3D *v3d= sa->spacedata.first;
1873         
1874         switch(event) {
1875          
1876         case 0: /* transform    properties*/
1877 // XXX          mainqenter(NKEY, 1);
1878                 break;
1879         case 5: /* make single user */
1880                 single_user();
1881                 break;
1882         case 7: /* boolean operation */
1883                 special_editmenu();
1884                 break;
1885         case 8: /* join objects */
1886                 join_menu();
1887                 break;
1888         case 9: /* convert object type */
1889                 convertmenu();
1890                 break;
1891         case 10: /* move to layer */
1892                 movetolayer();
1893                 break;
1894         case 11: /* insert keyframe */
1895                 common_insertkey();
1896                 break;
1897         case 16: /* make proxy object*/
1898                 make_proxy();
1899                 break;
1900         case 18: /* delete keyframe */
1901                 common_deletekey();
1902                 break; 
1903         }
1904 }
1905 #endif
1906
1907 static void view3d_edit_mesh_verticesmenu(bContext *C, uiLayout *layout, void *arg_unused)
1908 {
1909         uiItemO(layout, "Merge...", 0, "MESH_OT_merge");
1910         uiItemO(layout, "Rip", 0, "MESH_OT_rip");
1911         uiItemO(layout, "Split", 0, "MESH_OT_split");
1912         uiItemO(layout, "Separate", 0, "MESH_OT_separate");
1913
1914         uiItemS(layout);
1915
1916         uiItemO(layout, "Smooth", 0, "MESH_OT_vertices_smooth");
1917         uiItemO(layout, "Remove Doubles", 0, "MESH_OT_remove_doubles");
1918
1919 #if 0
1920         uiItemS(layout);
1921
1922         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, ""); // add_hook_menu();
1923         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, ""); // make_parent();
1924 #endif
1925 }
1926
1927 void do_view3d_edit_mesh_edgesmenu(bContext *C, void *arg, int event)
1928 {
1929 #if 0
1930         Scene *scene= CTX_data_scene(C);
1931         float fac;
1932         short randfac;
1933
1934         switch(event) {
1935         case 9: /* Crease SubSurf */
1936                 if(!multires_level1_test()) {
1937                         initTransform(TFM_CREASE, CTX_EDGE);
1938                         Transform();
1939                 }
1940                 break;
1941         case 12: /* Edgeslide */
1942                 EdgeSlide(0,0.0);
1943                 break;
1944         case 13: /* Edge Loop Delete */
1945                 if(EdgeLoopDelete()) {
1946                         countall();
1947                         ED_undo_push(C, "Erase Edge Loop");
1948                         DAG_object_flush_update(scene, obedit, OB_RECALC_DATA);
1949                 }
1950                 break;
1951         case 14: /*Collapse Edges*/
1952                 collapseEdges();
1953                 ED_undo_push(C, "Collapse");
1954                 break;
1955         case 17: /* Adjust Bevel Weight */
1956                 if(!multires_level1_test()) {
1957                         initTransform(TFM_BWEIGHT, CTX_EDGE);
1958                         Transform();
1959                 }
1960                 break;
1961         }
1962 #endif
1963 }
1964
1965 static void view3d_edit_mesh_edgesmenu(bContext *C, uiLayout *layout, void *arg_unused)
1966 {
1967         uiItemO(layout, NULL, 0, "MESH_OT_edge_face_add");
1968
1969 #if 0
1970         uiItemO(layout, "Bevel", 0, "MESH_OT_bevel"); // bevelmenu(em)
1971         uiItemO(layout, "Loop Subdivide...", 0, "MESH_OT_loop_subdivide"); // Ctr R, CutEdgeloop(1);
1972         uiItemO(layout, "Knife Subdivide...", 0, "MESH_OT_loop_subdivide"); // Shift K, KnifeSubdivide(KNIFE_PROMPT);
1973
1974         uiItemS(layout);
1975 #endif
1976
1977         uiItemO(layout, "Subdivide", 0, "MESH_OT_subdivide");
1978         uiItemFloatO(layout, "Subdivide Smooth", 0, "MESH_OT_subdivide", "smoothness", 1.0f);
1979
1980         uiItemS(layout);
1981
1982         uiItemO(layout, "Mark Seam", 0, "MESH_OT_mark_seam");
1983         uiItemBooleanO(layout, "Clear Seam", 0, "MESH_OT_mark_seam", "clear", 1);
1984
1985         uiItemS(layout);
1986
1987         uiItemO(layout, "Mark Sharp", 0, "MESH_OT_mark_sharp");
1988         uiItemBooleanO(layout, "Clear Sharp", 0, "MESH_OT_mark_sharp", "clear", 1);
1989
1990 #if 0
1991         uiItemS(layout);
1992         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1993         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Adjust Bevel Weight|Ctrl Shift E",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1994
1995         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1996         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1997 #endif
1998
1999         uiItemS(layout);
2000
2001         uiItemEnumO(layout, "Rotate Edge CW", 0, "MESH_OT_edge_rotate", "direction", 1);
2002         uiItemEnumO(layout, "Rotate Edge CCW", 0, "MESH_OT_edge_rotate", "direction", 2);
2003
2004 #if 0
2005         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");  
2006         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");  
2007
2008         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Collapse",                               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");  
2009 #endif
2010 }
2011
2012 static void view3d_edit_mesh_facesmenu(bContext *C, uiLayout *layout, void *arg_unused)
2013 {
2014         uiItemO(layout, NULL, 0, "MESH_OT_edge_face_add");
2015         uiItemO(layout, NULL, 0, "MESH_OT_fill");
2016         uiItemO(layout, NULL, 0, "MESH_OT_beauty_fill");
2017
2018         uiItemS(layout);
2019
2020         uiItemO(layout, NULL, 0, "MESH_OT_quads_convert_to_tris");
2021         uiItemO(layout, NULL, 0, "MESH_OT_tris_convert_to_quads");
2022         uiItemO(layout, NULL, 0, "MESH_OT_edge_flip");
2023
2024         uiItemS(layout);
2025
2026         uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_smooth");
2027         uiItemO(layout, NULL, 0, "MESH_OT_faces_shade_flat");
2028 }
2029
2030 static void view3d_edit_mesh_normalsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2031 {
2032         uiItemO(layout, "Recalculate Outside", 0, "MESH_OT_normals_make_consistent");
2033         uiItemBooleanO(layout, "Recalculate Inside", 0, "MESH_OT_normals_make_consistent", "inside", 1);
2034
2035         uiItemS(layout);
2036
2037         uiItemO(layout, NULL, 0, "MESH_OT_flip_normals");
2038 }
2039
2040 #if 0
2041 void do_view3d_edit_mirrormenu(bContext *C, void *arg, int event)
2042 {
2043         float mat[3][3];
2044         
2045         Mat3One(mat);
2046         
2047         switch(event) {
2048                 case 0:
2049                         initTransform(TFM_MIRROR, CTX_NO_PET);
2050                         Transform();
2051                         break;
2052                 case 1:
2053                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2054                         BIF_setSingleAxisConstraint(mat[0], " on global X axis");
2055                         Transform();
2056                         break;
2057                 case 2:
2058                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2059                         BIF_setSingleAxisConstraint(mat[1], " on global Y axis");
2060                         Transform();
2061                         break;
2062                 case 3:
2063                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2064                         BIF_setSingleAxisConstraint(mat[2], "on global Z axis");
2065                         Transform();
2066                         break;
2067                 case 4:
2068                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2069                         BIF_setLocalAxisConstraint('X', " on local X axis");
2070                         Transform();
2071                         break;
2072                 case 5:
2073                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2074                         BIF_setLocalAxisConstraint('Y', " on local Y axis");
2075                         Transform();
2076                         break;
2077                 case 6:
2078                         initTransform(TFM_MIRROR, CTX_NO_PET|CTX_AUTOCONFIRM);
2079                         BIF_setLocalAxisConstraint('Z', " on local Z axis");
2080                         Transform();
2081                         break;
2082         }
2083 }
2084
2085 static uiBlock *view3d_edit_mirrormenu(bContext *C, ARegion *ar, void *arg_unused)
2086 {
2087         uiBlock *block;
2088         short yco = 20, menuwidth = 120;
2089
2090         block= uiBeginBlock(C, ar, "view3d_edit_mirrormenu", UI_EMBOSSP);
2091         uiBlockSetButmFunc(block, do_view3d_edit_mirrormenu, NULL);
2092         
2093         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Interactive Mirror|Ctrl M",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2094
2095         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2096         
2097         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Global|Ctrl M, X",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2098         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Global|Ctrl M, Y",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2099         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Global|Ctrl M, Z",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2100         
2101         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2102         
2103         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "X Local|Ctrl M, X X",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2104         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Y Local|Ctrl M, Y Y",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2105         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Z Local|Ctrl M, Z Z",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2106
2107         uiBlockSetDirection(block, UI_RIGHT);
2108         uiTextBoundsBlock(block, 60);
2109         return block;
2110 }
2111 #endif
2112
2113 static void view3d_edit_mesh_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
2114 {
2115         uiItemO(layout, NULL, 0, "MESH_OT_reveal");
2116         uiItemO(layout, NULL, 0, "MESH_OT_hide");
2117         uiItemBooleanO(layout, "Hide Unselected", 0, "MESH_OT_hide", "unselected", 1);
2118 }
2119
2120 #ifndef DISABLE_PYTHON
2121 #if 0
2122 static void do_view3d_edit_mesh_scriptsmenu(bContext *C, void *arg, int event)
2123 {
2124         BPY_menu_do_python(PYMENU_MESH, event);
2125 }
2126
2127 static uiBlock *view3d_edit_mesh_scriptsmenu(bContext *C, ARegion *ar, void *arg_unused)
2128 {
2129         uiBlock *block;
2130 //      short yco = 20, menuwidth = 120;
2131 // XXX  BPyMenu *pym;
2132 //      int i = 0;
2133
2134         block= uiBeginBlock(C, ar, "v3d_emesh_pymenu", UI_EMBOSSP);
2135         uiBlockSetButmFunc(block, do_view3d_edit_mesh_scriptsmenu, NULL);
2136
2137 //      for (pym = BPyMenuTable[PYMENU_MESH]; pym; pym = pym->next, i++) {
2138 //              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);
2139 //      }
2140
2141         uiBlockSetDirection(block, UI_RIGHT);
2142         uiTextBoundsBlock(block, 60);
2143
2144         return block;
2145 }
2146 #endif
2147 #endif /* DISABLE_PYTHON */
2148
2149 #if 0
2150 static void do_view3d_edit_meshmenu(bContext *C, void *arg, int event)
2151 {
2152         ScrArea *sa= CTX_wm_area(C);
2153         
2154         switch(event) {
2155         
2156         case 2: /* transform properties */
2157                 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, 0);
2158                 break;
2159         case 4: /* insert keyframe */
2160                 common_insertkey();
2161                 break;
2162         case 16: /* delete keyframe */
2163                 common_deletekey();
2164                 break;
2165         }
2166 }
2167 #endif
2168
2169 static void view3d_edit_meshmenu(bContext *C, uiLayout *layout, void *arg_unused)
2170 {
2171         Scene *scene= CTX_data_scene(C);
2172         ToolSettings *ts= CTX_data_tool_settings(C);
2173         PointerRNA tsptr;
2174         
2175         RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &tsptr);
2176
2177         uiItemO(layout, "Undo Editing", 0, "ED_OT_undo");
2178         uiItemO(layout, "Redo Editing", 0, "ED_OT_redo");
2179
2180 #if 0
2181         uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
2182 #endif
2183
2184         uiItemS(layout);
2185         
2186 #if 0
2187         uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2188         uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, 120, 19, "");
2189         uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2190 #endif
2191
2192         uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2193
2194         uiItemS(layout);
2195
2196 #if 0
2197         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2198         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2199                 
2200         uiItemS(layout);
2201 #endif
2202
2203         uiItemO(layout, NULL, 0, "UV_OT_mapping_menu");
2204
2205         uiItemS(layout);
2206
2207         uiItemO(layout, NULL, 0, "MESH_OT_extrude");
2208         uiItemO(layout, NULL, 0, "MESH_OT_duplicate");
2209         uiItemO(layout, "Delete...", 0, "MESH_OT_delete");
2210
2211         uiItemS(layout);
2212
2213         uiItemMenuF(layout, "Vertices", 0, view3d_edit_mesh_verticesmenu);
2214         uiItemMenuF(layout, "Edges", 0, view3d_edit_mesh_edgesmenu);
2215         uiItemMenuF(layout, "Faces", 0, view3d_edit_mesh_facesmenu);
2216         uiItemMenuF(layout, "Normals", 0, view3d_edit_mesh_normalsmenu);
2217
2218         uiItemS(layout);
2219
2220         uiItemR(layout, NULL, 0, &tsptr, "automerge_editing", 0, 0, 0);
2221         uiItemR(layout, NULL, 0, &tsptr, "proportional_editing", 0, 0, 0); // |O
2222         uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O
2223
2224         uiItemS(layout);
2225
2226         uiItemMenuF(layout, "Show/Hide", 0, view3d_edit_mesh_showhidemenu);
2227
2228 #if 0
2229 #ifndef DISABLE_PYTHON
2230         uiItemS(layout);
2231         uiDefIconTextBlockBut(block, view3d_edit_mesh_scriptsmenu, NULL, ICON_RIGHTARROW_THIN, "Scripts", 0, yco-=20, 120, 19, "");
2232 #endif
2233 #endif
2234 }
2235
2236 static void view3d_edit_curve_controlpointsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2237 {
2238         Object *obedit= CTX_data_edit_object(C);
2239
2240         if(obedit->type == OB_CURVE) {
2241                 uiItemEnumO(layout, NULL, 0, "TFM_OT_transform", "mode", TFM_TILT);
2242                 uiItemO(layout, NULL, 0, "CURVE_OT_tilt_clear");
2243                 uiItemO(layout, NULL, 0, "CURVE_OT_separate");
2244                 
2245                 uiItemS(layout);
2246
2247                 uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 1);
2248                 uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 3);
2249                 uiItemEnumO(layout, NULL, 0, "CURVE_OT_handle_type_set", "type", 2);
2250
2251                 uiItemS(layout);
2252         }
2253
2254         // XXX uiItemO(layout, NULL, 0, "OBJECT_OT_make_vertex_parent"); Make VertexParent|Ctrl P
2255         // make_parent()
2256         // XXX uiItemO(layout, NULL, 0, "OBJECT_OT_add_hook"); Add Hook| Ctrl H
2257         // add_hook_menu()
2258 }
2259
2260 static void view3d_edit_curve_segmentsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2261 {
2262         uiItemO(layout, NULL, 0, "CURVE_OT_subdivide");
2263         uiItemO(layout, NULL, 0, "CURVE_OT_switch_direction");
2264 }
2265
2266 static void view3d_edit_curve_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
2267 {
2268         uiItemO(layout, NULL, 0, "CURVE_OT_reveal");
2269         uiItemO(layout, NULL, 0, "CURVE_OT_hide");
2270         uiItemBooleanO(layout, "Hide Unselected", 0, "CURVE_OT_hide", "unselected", 1);
2271 }
2272
2273 static void view3d_edit_curvemenu(bContext *C, uiLayout *layout, void *arg_unused)
2274 {
2275         Scene *scene= CTX_data_scene(C);
2276         ToolSettings *ts= CTX_data_tool_settings(C);
2277         PointerRNA tsptr;
2278         
2279         RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &tsptr);
2280
2281 #if 0
2282         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties...|N",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2283         uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2284         uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");      
2285 #endif
2286
2287         uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2288
2289         uiItemS(layout);
2290         
2291         // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I",                               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2292         // common_insertkey();
2293         // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2294         // common_deletekey();
2295
2296
2297         uiItemO(layout, NULL, 0, "CURVE_OT_extrude");
2298         uiItemO(layout, NULL, 0, "CURVE_OT_duplicate");
2299         uiItemO(layout, NULL, 0, "CURVE_OT_separate");
2300         uiItemO(layout, NULL, 0, "CURVE_OT_make_segment");
2301         uiItemO(layout, NULL, 0, "CURVE_OT_cyclic_toggle");
2302         uiItemO(layout, NULL, 0, "CURVE_OT_delete"); // Delete...
2303
2304         uiItemS(layout);
2305
2306         uiItemMenuF(layout, "Control Points", 0, view3d_edit_curve_controlpointsmenu);
2307         uiItemMenuF(layout, "Segments", 0, view3d_edit_curve_segmentsmenu);
2308
2309         uiItemS(layout);
2310
2311         uiItemR(layout, NULL, 0, &tsptr, "proportional_editing", 0, 0, 0); // |O
2312         uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O
2313
2314         uiItemS(layout);
2315
2316         uiItemMenuF(layout, "Show/Hide Control Points", 0, view3d_edit_curve_showhidemenu);
2317 }
2318
2319 static void view3d_edit_metaball_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
2320 {
2321         uiItemO(layout, NULL, 0, "MBALL_OT_hide_metaelems");
2322         uiItemO(layout, NULL, 0, "MBALL_OT_reveal_metaelems");
2323         uiItemBooleanO(layout, "Hide Unselected", 0, "MBALL_OT_hide_metaelems", "unselected", 1);
2324 }
2325
2326 static void view3d_edit_metaballmenu(bContext *C, uiLayout *layout, void *arg_unused)
2327 {
2328         Scene *scene= CTX_data_scene(C);
2329         ToolSettings *ts= CTX_data_tool_settings(C);
2330         PointerRNA tsptr;
2331         
2332         RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &tsptr);
2333
2334         uiItemO(layout, "Undo Editing", 0, "ED_OT_undo");
2335         uiItemO(layout, "Redo Editing", 0, "ED_OT_redo");
2336
2337         uiItemS(layout);
2338
2339         uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2340         
2341         uiItemS(layout);
2342         
2343         uiItemO(layout, NULL, 0, "MBALL_OT_delete_metaelems");
2344         uiItemO(layout, NULL, 0, "MBALL_OT_duplicate_metaelems");
2345         
2346         uiItemS(layout);
2347         
2348         uiItemR(layout, NULL, 0, &tsptr, "proportional_editing", 0, 0, 0); // |O
2349         uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O
2350         
2351         uiItemS(layout);
2352         
2353         uiItemMenuF(layout, "Show/Hide Control Points", 0, view3d_edit_metaball_showhidemenu);
2354 }
2355
2356 static void view3d_edit_text_charsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2357 {
2358         /* the character codes are specified in UTF-8 */
2359
2360         uiItemStringO(layout, "Copyright|Alt C", 0, "FONT_OT_text_insert", "text", "\xC2\xA9");
2361         uiItemStringO(layout, "Registered Trademark|Alt R", 0, "FONT_OT_text_insert", "text", "\xC2\xAE");
2362
2363         uiItemS(layout);
2364
2365         uiItemStringO(layout, "Degree Sign|Alt G", 0, "FONT_OT_text_insert", "text", "\xC2\xB0");
2366         uiItemStringO(layout, "Multiplication Sign|Alt x", 0, "FONT_OT_text_insert", "text", "\xC3\x97");
2367         uiItemStringO(layout, "Circle|Alt .", 0, "FONT_OT_text_insert", "text", "\xC2\x8A");
2368         uiItemStringO(layout, "Superscript 1|Alt 1", 0, "FONT_OT_text_insert", "text", "\xC2\xB9");
2369         uiItemStringO(layout, "Superscript 2|Alt 2", 0, "FONT_OT_text_insert", "text", "\xC2\xB2");
2370         uiItemStringO(layout, "Superscript 3|Alt 3", 0, "FONT_OT_text_insert", "text", "\xC2\xB3");
2371         uiItemStringO(layout, "Double >>|Alt >", 0, "FONT_OT_text_insert", "text", "\xC2\xBB");
2372         uiItemStringO(layout, "Double <<|Alt <", 0, "FONT_OT_text_insert", "text", "\xC2\xAB");
2373         uiItemStringO(layout, "Promillage|Alt %", 0, "FONT_OT_text_insert", "text", "\xE2\x80\xB0");
2374         
2375         uiItemS(layout);
2376         
2377         uiItemStringO(layout, "Dutch Florin|Alt F", 0, "FONT_OT_text_insert", "text", "\xC2\xA4");
2378         uiItemStringO(layout, "British Pound|Alt L", 0, "FONT_OT_text_insert", "text", "\xC2\xA3");
2379         uiItemStringO(layout, "Japanese Yen|Alt Y", 0, "FONT_OT_text_insert", "text", "\xC2\xA5");
2380         
2381         uiItemS(layout);
2382         
2383         uiItemStringO(layout, "German S|Alt S", 0, "FONT_OT_text_insert", "text", "\xC3\x9F");
2384         uiItemStringO(layout, "Spanish Question Mark|Alt ?", 0, "FONT_OT_text_insert", "text", "\xC2\xBF");
2385         uiItemStringO(layout, "Spanish Exclamation Mark|Alt !", 0, "FONT_OT_text_insert", "text", "\xC2\xA1");
2386 }
2387
2388 static void view3d_edit_textmenu(bContext *C, uiLayout *layout, void *arg_unused)
2389 {
2390         uiItemO(layout, NULL, 0, "FONT_OT_file_paste");
2391         uiItemS(layout);
2392         uiItemMenuF(layout, "Special Characters", 0, view3d_edit_text_charsmenu);
2393 }
2394
2395 static void view3d_edit_latticemenu(bContext *C, uiLayout *layout, void *arg_unused)
2396 {
2397         Scene *scene= CTX_data_scene(C);
2398         ToolSettings *ts= CTX_data_tool_settings(C);
2399         PointerRNA tsptr;
2400         
2401         RNA_pointer_create(&scene->id, &RNA_ToolSettings, ts, &tsptr);
2402
2403 #if 0
2404         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2405         
2406         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2407         
2408         uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2409         uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");              
2410 #endif
2411
2412         uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2413
2414         uiItemS(layout);
2415
2416         // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I",                               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2417         // common_insertkey();
2418         // XXX uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Keyframe|Alt I",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
2419         // common_deletekey();
2420         
2421         uiItemO(layout, NULL, 0, "LATTICE_OT_make_regular");
2422
2423         uiItemS(layout);
2424
2425         uiItemR(layout, NULL, 0, &tsptr, "proportional_editing", 0, 0, 0); // |O
2426         uiItemMenuEnumR(layout, NULL, 0, &tsptr, "proportional_editing_falloff"); // |Shift O
2427 }
2428
2429
2430 static void view3d_edit_armature_parentmenu(bContext *C, uiLayout *layout, void *arg_unused)
2431 {
2432         uiItemO(layout, NULL, 0, "ARMATURE_OT_parent_set");
2433         uiItemO(layout, NULL, 0, "ARMATURE_OT_parent_clear");
2434 }
2435
2436 static void view3d_edit_armature_rollmenu(bContext *C, uiLayout *layout, void *arg_unused)
2437 {
2438         /* 0 = 'Global', 1 = 'Cursor' */
2439         // TODO: keep these in sync...
2440         uiItemEnumO(layout, "Clear Roll (Z-Axis Up)", 0, "ARMATURE_OT_calculate_roll", "type", 0);
2441         uiItemEnumO(layout, "Roll to Cursor", 0, "ARMATURE_OT_calculate_roll", "type", 1);
2442         
2443         uiItemS(layout);
2444         
2445         uiItemEnumO(layout, "Set Roll", 0, "TFM_OT_transform", "mode", TFM_BONE_ROLL);
2446 }
2447
2448 static void view3d_edit_armature_settingsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2449 {
2450         uiItemEnumO(layout, "Toggle a Setting", 0, "ARMATURE_OT_flags_set", "mode", 2);
2451         uiItemEnumO(layout, "Enable a Setting", 0, "ARMATURE_OT_flags_set", "mode", 1);
2452         uiItemEnumO(layout, "Disable a Setting", 0, "ARMATURE_OT_flags_set", "mode", 0);
2453 }
2454
2455 #if 0
2456 static void do_view3d_edit_armaturemenu(bContext *C, void *arg, int event)
2457 {
2458         static short numcuts= 2;
2459
2460         switch(event) {
2461         case 0: /* Undo Editing */
2462                 remake_editArmature();
2463                 break;
2464         
2465         case 6: /* Shear */
2466                 initTransform(TFM_SHEAR, CTX_NONE);
2467                 Transform();
2468                 break;
2469         case 7: /* Warp */
2470                 initTransform(TFM_WARP, CTX_NONE);
2471                 Transform();
2472         case 23: /* bone sketching panel */
2473                 add_blockhandler(curarea, VIEW3D_HANDLER_BONESKETCH, UI_PNL_UNSTOW);
2474                 break;
2475         }
2476 }
2477 #endif
2478
2479 static void view3d_edit_armaturemenu(bContext *C, uiLayout *layout, void *arg_unused)
2480 {
2481         Object *obedit = CTX_data_edit_object(C);
2482         bArmature *arm= obedit->data;
2483         
2484 #if 0
2485         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2486         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Bone Sketching|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 23, "");
2487         uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2488         uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2489 #endif
2490         uiItemMenuF(layout, "Snap", 0, view3d_edit_snapmenu);
2491         uiItemMenuF(layout, "Bone Roll", 0, view3d_edit_armature_rollmenu);
2492         
2493         if (arm->drawtype == ARM_ENVELOPE)
2494                 uiItemEnumO(layout, "Scale Envelope Distance", 0, "TFM_OT_transform", "mode", TFM_BONESIZE);
2495         else
2496                 uiItemEnumO(layout, "Scale B-Bone Width", 0, "TFM_OT_transform", "mode", TFM_BONESIZE);
2497         
2498         uiItemS(layout);
2499         
2500         uiItemO(layout, "Extrude", 0, "ARMATURE_OT_extrude");
2501         if (arm->flag & ARM_MIRROR_EDIT)
2502                 uiItemBooleanO(layout, "Extrude Forked", 0, "ARMATURE_OT_extrude", "forked", 1);
2503         
2504         uiItemO(layout, NULL, 0, "ARMATURE_OT_duplicate");
2505         uiItemO(layout, NULL, 0, "ARMATURE_OT_merge");
2506         uiItemO(layout, NULL, 0, "ARMATURE_OT_fill");
2507         uiItemO(layout, NULL, 0, "ARMATURE_OT_delete");
2508         uiItemO(layout, NULL, 0, "ARMATURE_OT_separate");
2509         
2510         uiItemS(layout);
2511         
2512         uiItemO(layout, NULL, 0, "ARMATURE_OT_subdivide_simple");
2513         uiItemO(layout, NULL, 0, "ARMATURE_OT_subdivide_multi");
2514         
2515         uiItemEnumO(layout, "AutoName Left/Right", 0, "ARMATURE_OT_autoside_names", "axis", 0);
2516         uiItemEnumO(layout, "AutoName Front/Back", 0, "ARMATURE_OT_autoside_names", "axis", 1);
2517         uiItemEnumO(layout, "AutoName Top/Bottom", 0, "ARMATURE_OT_autoside_names", "axis", 2);
2518         
2519         uiItemO(layout, "Flip Left/Right Names", 0, "ARMATURE_OT_flip_names");
2520         
2521         uiItemS(layout);
2522         
2523         uiItemO(layout, NULL, 0, "ARMATURE_OT_armature_layers");
2524         uiItemO(layout, NULL, 0, "ARMATURE_OT_bone_layers");
2525         
2526         uiItemS(layout);
2527         
2528         uiItemMenuF(layout, "Parent", 0, view3d_edit_armature_parentmenu);
2529         
2530         uiItemS(layout);
2531         
2532         uiItemMenuF(layout, "Bone Settings ", 0, view3d_edit_armature_settingsmenu);
2533 }
2534
2535
2536 static void view3d_pose_armature_transformmenu(bContext *C, uiLayout *layout, void *arg_unused)
2537 {
2538         //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear User Transform|W", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2539                 //used: clear_user_transform(scene, ob);
2540         //uiDefBut(block, SEPR, 0, "",                          0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2541         
2542         uiItemO(layout, NULL, 0, "POSE_OT_loc_clear");
2543         uiItemO(layout, NULL, 0, "POSE_OT_rot_clear");
2544         uiItemO(layout, NULL, 0, "POSE_OT_scale_clear");
2545         
2546         // ???
2547         //uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Origin|Alt O",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2548                 //used:clear_object('o');
2549 }
2550
2551 static void view3d_pose_armature_showhidemenu(bContext *C, uiLayout *layout, void *arg_unused)
2552 {
2553         uiItemO(layout, "Show Hidden", 0, "POSE_OT_reveal");
2554         
2555         uiItemO(layout, "Hide Selected", 0, "POSE_OT_hide");
2556         uiItemBooleanO(layout, "Hide Unselected", 0, "POSE_OT_hide", "unselected", 1);
2557 }
2558
2559 static void view3d_pose_armature_ikmenu(bContext *C, uiLayout *layout, void *arg_unused)
2560 {
2561         uiItemO(layout, NULL, 0, "POSE_OT_ik_add");
2562         uiItemO(layout, NULL, 0, "POSE_OT_ik_clear");
2563 }
2564
2565 static void view3d_pose_armature_constraintsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2566 {
2567         uiItemO(layout, NULL, 0, "POSE_OT_constraint_add_with_targets");
2568         uiItemO(layout, NULL, 0, "POSE_OT_constraints_clear");
2569 }
2570
2571 static void view3d_pose_armature_groupmenu(bContext *C, uiLayout *layout, void *arg_unused)
2572 {
2573         uiItemO(layout, "Add Selected to Active Group", 0, "POSE_OT_group_assign");
2574         //uiItemO(layout, "Add Selected to Group", 0, "POSE_OT_group_assign");
2575         
2576         uiItemO(layout, "Add New Group", 0, "POSE_OT_group_add");
2577         
2578         uiItemO(layout, "Remove from All Groups", 0, "POSE_OT_group_unassign");
2579         uiItemO(layout, "Remove Active Group", 0, "POSE_OT_group_remove");
2580 }
2581
2582 static void view3d_pose_armature_motionpathsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2583 {
2584         uiItemO(layout, NULL, 0, "POSE_OT_paths_calculate");
2585         uiItemO(layout, NULL, 0, "POSE_OT_paths_clear");
2586 }
2587
2588 static void view3d_pose_armature_poselibmenu(bContext *C, uiLayout *layout, void *arg_unused)
2589 {
2590         uiItemO(layout, NULL, 0, "POSELIB_OT_browse_interactive");
2591         
2592         uiItemS(layout);
2593         
2594         uiItemO(layout, NULL, 0, "POSELIB_OT_pose_add");
2595         uiItemO(layout, NULL, 0, "POSELIB_OT_pose_rename");
2596         uiItemO(layout, NULL, 0, "POSELIB_OT_pose_remove");
2597 }
2598
2599 static void view3d_pose_armature_settingsmenu(bContext *C, uiLayout *layout, void *arg_unused)
2600 {
2601         uiItemEnumO(layout, "Toggle a Setting", 0, "POSE_OT_flags_set", "mode", 2);
2602         uiItemEnumO(layout, "Enable a Setting", 0, "POSE_OT_flags_set", "mode", 1);
2603         uiItemEnumO(layout, "Disable a Setting", 0, "POSE_OT_flags_set", "mode", 0);
2604 }
2605
2606 #if 0
2607 static void do_view3d_pose_armaturemenu(bContext *C, void *arg, int event)
2608 {
2609         Object *ob;
2610         ob=OBACT;
2611         
2612         switch(event) {
2613         case 5:
2614                 pose_copy_menu();
2615                 break;
2616         case 15:
2617                 pose_relax();
2618                 break;
2619         }
2620 }
2621 #endif
2622
2623 static void view3d_pose_armaturemenu(bContext *C, uiLayout *layout, void *arg_unused)
2624 {       
2625         Object *ob = CTX_data_active_object(C);
2626         bArmature *arm= ob->data;
2627         
2628 #if 0 // XXX to be ported, using uiItemMenuF(layout, "<Name>", 0, view3d_pose_armature_<category>menu);
2629         uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2630 #endif 
2631         if ( (arm) && ((arm->drawtype == ARM_B_BONE) || (arm->drawtype == ARM_ENVELOPE)) )
2632                 uiItemEnumO(layout, "Scale Envelope Distance", 0, "TFM_OT_transform", "mode", TFM_BONESIZE);
2633         uiItemMenuF(layout, "Clear Transform", 0, view3d_pose_armature_transformmenu);
2634         
2635         uiItemS(layout);
2636         
2637         // TODO: these operators may get renamed
2638         uiItemO(layout, NULL, 0, "ANIM_OT_insert_keyframe_menu");
2639         uiItemO(layout, NULL, 0, "ANIM_OT_delete_keyframe_v3d");
2640
2641         uiItemS(layout);
2642         
2643 #if 0
2644         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Relax Pose|W",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
2645 #endif
2646         uiItemO(layout, NULL, 0, "POSE_OT_apply");
2647         
2648         uiItemS(layout);
2649         
2650         uiItemO(layout, "Copy Current Pose", 0, "POSE_OT_copy");
2651         uiItemO(layout, "Paste Pose", 0, "POSE_OT_paste");
2652         uiItemBooleanO(layout, "Paste X-Flipped Pose", 0, "POSE_OT_paste", "flipped", 1);
2653         
2654         uiItemS(layout);
2655
2656         uiItemMenuF(layout, "Pose Library", 0, view3d_pose_armature_poselibmenu);
2657         uiItemMenuF(layout, "Motion Paths", 0, view3d_pose_armature_motionpathsmenu);
2658         uiItemMenuF(layout, "Bone Groups", 0, view3d_pose_armature_groupmenu);
2659         
2660         uiItemS(layout);
2661         
2662         uiItemMenuF(layout, "Inverse Kinematics", 0, view3d_pose_armature_ikmenu);
2663         uiItemMenuF(layout, "Constraints", 0, view3d_pose_armature_constraintsmenu);
2664         
2665         uiItemS(layout);
2666         
2667         uiItemEnumO(layout, "AutoName Left/Right", 0, "POSE_OT_autoside_names", "axis", 0);
2668         uiItemEnumO(layout, "AutoName Front/Back", 0, "POSE_OT_autoside_names", "axis", 1);
2669         uiItemEnumO(layout, "AutoName Top/Bottom", 0, "POSE_OT_autoside_names", "axis", 2);
2670         
2671         uiItemO(layout, "Flip Left/Right Names", 0, "POSE_OT_flip_names");
2672         
2673         uiItemS(layout);
2674         
2675         uiItemO(layout, NULL, 0, "POSE_OT_armature_layers");
2676         uiItemO(layout, NULL, 0, "POSE_OT_bone_layers");
2677         
2678         uiItemS(layout);
2679         
2680         uiItemMenuF(layout, "Show/Hide Bones", 0, view3d_pose_armature_showhidemenu);
2681         uiItemMenuF(layout, "Bone Settings", 0, view3d_pose_armature_settingsmenu);
2682         
2683 #if 0
2684         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Attributes...|Ctrl C",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2685 #endif
2686 }
2687
2688
2689 /* vertex paint menu */
2690 static void do_view3d_vpaintmenu(bContext *C, void *arg, int event)
2691 {
2692 #if 0
2693         /* events >= 3 are registered bpython scripts */
2694 #ifndef DISABLE_PYTHON
2695         if (event >= 3) BPY_menu_do_python(PYMENU_VERTEXPAINT, event - 3);
2696 #endif
2697         switch(event) {
2698         case 0: /* undo vertex painting */
2699                 BIF_undo();
2700                 break;
2701         case 1: /* set vertex colors/weight */
2702                 if(paint_facesel_test(CTX_data_active_object(C)))
2703                         clear_vpaint_selectedfaces();
2704                 else /* we know were in vertex paint mode */
2705                         clear_vpaint();
2706                 break;
2707         case 2:
2708                 make_vertexcol(1);
2709                 break;
2710         }
2711 #endif
2712 }
2713
2714 static uiBlock *view3d_vpaintmenu(bContext *C, ARegion *ar, void *arg_unused)
2715 {
2716         uiBlock *block;
2717         short yco= 0, menuwidth=120;
2718 #ifndef DISABLE_PYTHON
2719 // XXX  BPyMenu *pym;
2720 //      int i=0;
2721 #endif
2722         
2723         block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP);
2724         uiBlockSetButmFunc(block, do_view3d_vpaintmenu, NULL);
2725         
2726         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Vertex Painting|U",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2727         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Vertex Colors|Shift K",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2728         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Shaded Vertex Colors",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2729         
2730 #ifndef DISABLE_PYTHON
2731         /* note that we account for the 3 previous entries with i+3:
2732         even if the last item isnt displayed, it dosent matter */
2733 //      for (pym = BPyMenuTable[PYMENU_VERTEXPAINT]; pym; pym = pym->next, i++) {
2734 //              uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
2735 //                      menuwidth, 19, NULL, 0.0, 0.0, 1, i+3,
2736 //                      pym->tooltip?pym->tooltip:pym->filename);
2737 //      }
2738 #endif
2739
2740         if(ar->alignment==RGN_ALIGN_TOP) {
2741                 uiBlockSetDirection(block, UI_DOWN);
2742         }
2743         else {
2744                 uiBlockSetDirection(block, UI_TOP);
2745                 uiBlockFlipOrder(block);
2746         }
2747
2748         uiTextBoundsBlock(block, 50);
2749         return block;
2750 }
2751
2752
2753 /* texture paint menu (placeholder, no items yet??) */
2754 static void do_view3d_tpaintmenu(bContext *C, void *arg, int event)
2755 {
2756 #if 0
2757         switch(event) {
2758         case 0: /* undo image painting */
2759                 undo_imagepaint_step(1);
2760                 break;
2761         }
2762
2763 #endif
2764 }
2765
2766 static uiBlock *view3d_tpaintmenu(bContext *C, ARegion *ar, void *arg_unused)
2767 {
2768         uiBlock *block;
2769         short yco= 0, menuwidth=120;
2770         
2771         block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP);
2772         uiBlockSetButmFunc(block, do_view3d_tpaintmenu, NULL);
2773         
2774         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Texture Painting|U",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2775         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2776         
2777         if(ar->alignment==RGN_ALIGN_TOP) {
2778                 uiBlockSetDirection(block, UI_DOWN);
2779         }
2780         else {
2781                 uiBlockSetDirection(block, UI_TOP);
2782                 uiBlockFlipOrder(block);
2783         }
2784
2785         uiTextBoundsBlock(block, 50);
2786         return block;
2787 }
2788
2789
2790 static void do_view3d_wpaintmenu(bContext *C, void *arg, int event)
2791 {
2792 #if 0
2793         Object *ob= OBACT;
2794         
2795         /* events >= 3 are registered bpython scripts */
2796 #ifndef DISABLE_PYTHON
2797         if (event >= 4) BPY_menu_do_python(PYMENU_WEIGHTPAINT, event - 4);
2798 #endif  
2799         switch(event) {
2800         case 0: /* undo weight painting */
2801                 BIF_undo();
2802                 break;
2803         case 1: /* set vertex colors/weight */
2804                 clear_wpaint_selectedfaces();
2805                 break;
2806         case 2: /* vgroups from envelopes */
2807                 pose_adds_vgroups(ob, 0);
2808                 break;
2809         case 3: /* vgroups from bone heat */
2810                 pose_adds_vgroups(ob, 1);
2811                 break;
2812         }
2813 #endif
2814 }
2815
2816 static uiBlock *view3d_wpaintmenu(bContext *C, ARegion *ar, void *arg_unused)
2817 {
2818         uiBlock *block;
2819         short yco= 0, menuwidth=120, menunr=1;
2820 #ifndef DISABLE_PYTHON
2821 // XXX  BPyMenu *pym;
2822 //      int i=0;
2823 #endif
2824                 
2825         block= uiBeginBlock(C, ar, "view3d_paintmenu", UI_EMBOSSP);
2826         uiBlockSetButmFunc(block, do_view3d_wpaintmenu, NULL);
2827         
2828         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Weight Painting|U",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2829
2830         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2831
2832         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Bone Heat Weights to Vertex Groups|W, 2",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2833         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Apply Bone Envelopes to Vertex Groups|W, 1",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2834         
2835         uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2836         
2837         if (paint_facesel_test(CTX_data_active_object(C))) {
2838                 uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Weight|Shift K",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2839                 uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2840                 menunr++;
2841         }
2842
2843 #ifndef DISABLE_PYTHON
2844         /* note that we account for the 4 previous entries with i+4:
2845         even if the last item isnt displayed, it dosent matter */
2846 //      for (pym = BPyMenuTable[PYMENU_WEIGHTPAINT]; pym; pym = pym->next, i++) {
2847 //              uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
2848 //                      menuwidth, 19, NULL, 0.0, 0.0, 1, i+4,
2849 //                      pym->tooltip?pym->tooltip:pym->filename);
2850 //      }
2851 #endif
2852
2853         if(ar->alignment==RGN_ALIGN_TOP) {
2854                 uiBlockSetDirection(block, UI_DOWN);
2855         }
2856         else {
2857                 uiBlockSetDirection(block, UI_TOP);
2858                 uiBlockFlipOrder(block);
2859         }
2860
2861         uiTextBoundsBlock(block, 50);
2862         return block;
2863 }
2864
2865 void do_view3d_sculpt_inputmenu(bContext *C, void *arg, int event)
2866 {
2867 #if 0
2868         Scene *scene= CTX_data_scene(C);
2869         SculptData *sd= &scene->sculptdata;
2870         short val;
2871         
2872         switch(event) {
2873         case 0:
2874                 sd->flags ^= SCULPT_INPUT_SMOOTH;
2875                 ED_undo_push(C, "Smooth stroke");
2876                 break;
2877         case 1:
2878                 val= sd->tablet_size;
2879                 if(button(&val,0,10,"Tablet Size:")==0) return;
2880                 sd->tablet_size= val;
2881                 ED_undo_push(C, "Tablet size");
2882                 break;
2883         case 2:
2884                 val= sd->tablet_strength;
2885                 if(button(&val,0,10,"Tablet Strength:")==0) return;
2886                 sd->tablet_strength= val;
2887                 ED_undo_push(C, "Tablet strength");
2888                 break;
2889         }
2890         
2891 #endif
2892 }
2893
2894 void do_view3d_sculptmenu(bContext *C, void *arg, int event)
2895 {
2896 #if 0
2897         Scene *scene= CTX_data_scene(C);
2898         ScrArea *sa= CTX_wm_area(C);
2899         View3D *v3d= sa->spacedata.first;
2900         SculptData *sd= &scene->sculptdata;
2901         BrushData *br= sculptmode_brush();
2902
2903         switch(event) {
2904         case 0:
2905         case 1:
2906         case 2:
2907         case 3:
2908         case 4:
2909         case 5:
2910         case 6:
2911                 sd->brush_type= event+1;
2912                 ED_undo_push(C, "Brush type");
2913                 break;
2914         case 11:
2915                 if(v3d)
2916                         v3d->pivot_last= !v3d->pivot_last;
2917                 break;
2918         case 12:
2919                 sd->flags ^= SCULPT_DRAW_FAST;
2920                 ED_undo_push(C, "Partial Redraw");
2921                 break;
2922         case 13:
2923                 sd->flags ^= SCULPT_DRAW_BRUSH;
2924                 ED_undo_push(C, "Draw Brush");
2925                 break;
2926         case 14:
2927                 add_blockhandler(sa, VIEW3D_HANDLER_OBJECT, UI_PNL_UNSTOW);
2928                 break;
2929         case 15:
2930                 sculpt_radialcontrol_start(RADIALCONTROL_ROTATION);
2931                 break;
2932         case 16:
2933                 sculpt_radialcontrol_start(RADIALCONTROL_STRENGTH);
2934                 break;
2935         case 17:
2936                 sculpt_radialcontrol_start(RADIALCONTROL_SIZE);
2937                 break;
2938 #endif
2939 }
2940
2941 uiBlock *view3d_sculpt_inputmenu(bContext *C, ARegion *ar, void *arg_unused)
2942 {
2943         uiBlock *block;
2944         short yco= 0, menuwidth= 120;
2945         Sculpt *sd= CTX_data_tool_settings(C)->sculpt;
2946
2947         block= uiBeginBlock(C, ar, "view3d_sculpt_inputmenu", UI_EMBOSSP);
2948         uiBlockSetButmFunc(block, do_view3d_sculpt_inputmenu, NULL);
2949
2950         uiDefIconTextBut(block, BUTM, 1, ((sd->flags & SCULPT_INPUT_SMOOTH) ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Smooth Stroke|Shift S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2951         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tablet Size Adjust", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");       
2952         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tablet Strength Adjust", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2953         
2954         uiBlockSetDirection(block, UI_RIGHT);
2955         uiTextBoundsBlock(block, 50);
2956         return block;
2957 }
2958
2959 static void view3d_sculpt_menu(bContext *C, uiLayout *layout, void *arg_unused)
2960 {
2961         bScreen *sc= CTX_wm_screen(C);
2962         Sculpt *s = CTX_data_tool_settings(C)->sculpt;
2963         PointerRNA rna;
2964
2965         RNA_pointer_create(&sc->id, &RNA_Sculpt, s, &rna);
2966
2967         uiItemR(layout, NULL, 0, &rna, "symmetry_x", 0, 0, 0);
2968         uiItemR(layout, NULL, 0, &rna, "symmetry_y", 0, 0, 0);
2969         uiItemR(layout, NULL, 0, &rna, "symmetry_z", 0, 0, 0);
2970         uiItemR(layout, NULL, 0, &rna, "lock_x", 0, 0, 0);
2971         uiItemR(layout, NULL, 0, &rna, "lock_y", 0, 0, 0);
2972         uiItemR(layout, NULL, 0, &rna, "lock_z", 0, 0, 0);
2973
2974         /* Brush settings */
2975         RNA_pointer_create(&sc->id, &RNA_Brush, s->brush, &rna);
2976
2977         /* Curve */
2978         uiItemS(layout);
2979         uiItemEnumO(layout, NULL, 0, "BRUSH_OT_curve_preset", "shape", BRUSH_PRESET_SHARP);
2980         uiItemEnumO(layout, NULL, 0, "BRUSH_OT_curve_preset", "shape", BRUSH_PRESET_SMOOTH);
2981         uiItemEnumO(layout, NULL, 0, "BRUSH_OT_curve_preset", "shape", BRUSH_PRESET_MAX);
2982
2983         uiItemS(layout);
2984
2985         uiItemR(layout, NULL, 0, &rna, "airbrush", 0, 0, 0);
2986         uiItemR(layout, NULL, 0, &rna, "rake", 0, 0, 0);
2987         uiItemR(layout, NULL, 0, &rna, "anchored", 0, 0, 0);
2988         uiItemR(layout, NULL, 0, &rna, "space", 0, 0, 0);
2989         uiItemR(layout, NULL, 0, &rna, "smooth_stroke", 0, 0, 0);
2990
2991         uiItemR(layout, NULL, 0, &rna, "flip_direction", 0, 0, 0);
2992 }
2993
2994 uiBlock *view3d_sculptmenu(bContext *C, ARegion *ar, void *arg_unused)
2995 {
2996         ScrArea *sa= CTX_wm_area(C);
2997         View3D *v3d= sa->spacedata.first;
2998         uiBlock *block;
2999         Sculpt *sd= CTX_data_tool_settings(C)->sculpt;
3000 // XXX  const BrushData *br= sculptmode_brush();
3001         short yco= 0, menuwidth= 120;
3002         
3003         block= uiBeginBlock(C, ar, "view3d_sculptmenu", UI_EMBOSSP);
3004         uiBlockSetButmFunc(block, do_view3d_sculptmenu, NULL);
3005         
3006         uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Sculpt Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 14, "");
3007         uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3008         uiDefIconTextBlockBut(block, view3d_sculpt_inputmenu, NULL, ICON_RIGHTARROW_THIN, "Input Settings", 0, yco-=20, 120, 19, "");
3009         uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3010         uiDefIconTextBut(block, BUTM, 1, ((sd->flags & SCULPT_DRAW_BRUSH) ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Display Brush", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
3011         uiDefIconTextBut(block, BUTM, 1, ((sd->flags & SCULPT_DRAW_FAST) ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Partial Redraw", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
3012         if(v3d)
3013                 uiDefIconTextBut(block, BUTM, 1, (v3d->pivot_last ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Pivot Last", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
3014
3015         uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3016         
3017         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale Brush|F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
3018         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Strengthen Brush|Shift F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 16, "");
3019         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Brush|Ctrl F", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 15, "");
3020         
3021         uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3022         /* XXX uiDefIconTextBut(block, BUTM, 1, (sd->brush_type==FLATTEN_BRUSH ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Flatten|T", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
3023         uiDefIconTextBut(block, BUTM, 1, (sd->brush_type==LAYER_BRUSH ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Layer|L", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
3024         uiDefIconTextBut(block, BUTM, 1, (sd->brush_type==GRAB_BRUSH ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Grab|G", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
3025         uiDefIconTextBut(block, BUTM, 1, (sd->brush_type==INFLATE_BRUSH ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Inflate|I", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
3026         uiDefIconTextBut(block, BUTM, 1, (sd->brush_type==PINCH_BRUSH ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Pinch|P", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
3027         uiDefIconTextBut(block, BUTM, 1, (sd->brush_type==SMOOTH_BRUSH ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Smooth|S", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
3028         uiDefIconTextBut(block, BUTM, 1, (sd->brush_type==DRAW_BRUSH ? ICON_CHECKBOX_HLT : ICON_CHECKBOX_DEHLT), "Draw|D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");*/
3029         
3030
3031         if(ar->alignment==RGN_ALIGN_TOP) {
3032                 uiBlockSetDirection(block, UI_DOWN);
3033         }
3034         else {
3035                 uiBlockSetDirection(block, UI_TOP);
3036                 uiBlockFlipOrder(block);
3037         }
3038
3039         uiTextBoundsBlock(block, 50);
3040
3041         return block;
3042 }
3043
3044 static void do_view3d_facesel_showhidemenu(bContext *C, void *arg, int event)
3045 {
3046 #if 0
3047         switch(event) {
3048         case 4: /* show hidden faces */
3049                 reveal_tface();
3050                 break;
3051         case 5: /* hide selected faces */
3052                 hide_tface();
3053                 break;
3054         case 6: /* XXX hide deselected faces */
3055 //              G.qual |= LR_SHIFTKEY;
3056                 hide_tface();
3057 //              G.qual &= ~LR_SHIFTKEY;
3058                 break;
3059                 }
3060 #endif
3061 }
3062
3063 static uiBlock *view3d_facesel_showhidemenu(bContext *C, ARegion *ar, void *arg_unused)
3064 {
3065         uiBlock *block;
3066         short yco = 20, menuwidth = 120;
3067
3068         block= uiBeginBlock(C, ar, "view3d_facesel_showhidemenu", UI_EMBOSSP);
3069         uiBlockSetButmFunc(block, do_view3d_facesel_showhidemenu, NULL);
3070         
3071         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden Faces|Alt H",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
3072         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected Faces|H",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
3073         uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Unselected Faces|Shift H",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
3074
3075         uiBlockSetDirection(block, UI_RIGHT);
3076         uiTextBoundsBlock(block, 60);
3077         return block;
3078 }
3079
3080 static void do_view3d_faceselmenu(bContext *C, void *arg, int event)
3081 {
3082 #if 0
3083         switch(event) {
3084         case 0: /* set vertex colors */
3085                 clear_vpaint_selectedfaces();
3086                 break;
3087    &nbs