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