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