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