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