~siretart/ubuntu/utopic/blender/libav10

« back to all changes in this revision

Viewing changes to source/blender/src/header_view3d.c

Tags: upstream-2.40
ImportĀ upstreamĀ versionĀ 2.40

Show diffs side-by-side

added added

removed removed

Lines of Context:
4
4
 * Functions to draw the "3D Viewport" window header
5
5
 * and handle user events sent to it.
6
6
 * 
7
 
 * $Id: header_view3d.c,v 1.83 2004/12/02 12:37:08 ton Exp $
 
7
 * $Id: header_view3d.c,v 1.147 2005/12/19 19:28:22 guitargeek Exp $
8
8
 *
9
9
 * ***** BEGIN GPL/BL DUAL LICENSE BLOCK *****
10
10
 *
42
42
#include <config.h>
43
43
#endif
44
44
 
45
 
#ifdef WIN32
46
 
#include "BLI_winstuff.h"
47
 
#endif
48
 
 
49
45
#include "BMF_Api.h"
50
46
#include "BIF_language.h"
51
 
#ifdef INTERNATIONAL
52
 
#include "FTF_Api.h"
53
 
#endif
54
47
 
55
48
#include "MEM_guardedalloc.h"
56
49
 
 
50
#include "DNA_armature_types.h"
57
51
#include "DNA_ID.h"
 
52
#include "DNA_image_types.h"
58
53
#include "DNA_mesh_types.h"
59
54
#include "DNA_object_types.h"
60
55
#include "DNA_scene_types.h"
61
56
#include "DNA_screen_types.h"
62
57
#include "DNA_space_types.h"
63
58
#include "DNA_view3d_types.h"
64
 
#include "DNA_image_types.h"
 
59
#include "DNA_text_types.h" /* for space handlers */
65
60
#include "DNA_texture_types.h"
66
61
 
67
 
#include "BKE_library.h"
68
62
#include "BKE_curve.h"
 
63
#include "BKE_depsgraph.h"
69
64
#include "BKE_displist.h"
70
65
#include "BKE_effect.h"
71
66
#include "BKE_global.h"
 
67
#include "BKE_image.h"
 
68
#include "BKE_library.h"
72
69
#include "BKE_main.h"
73
70
#include "BKE_mesh.h"
74
 
#include "BKE_image.h"
75
71
 
 
72
#include "BLI_arithb.h"
76
73
#include "BLI_blenlib.h"
77
74
 
78
75
#include "BSE_edit.h"
79
 
#include "BSE_editaction.h"
80
76
#include "BSE_editipo.h"
81
77
#include "BSE_headerbuttons.h"
82
78
#include "BSE_view.h"
90
86
 
91
87
#include "BIF_editlattice.h"
92
88
#include "BIF_editarmature.h"
 
89
#include "BIF_editconstraint.h"
93
90
#include "BIF_editdeform.h"
94
91
#include "BIF_editfont.h"
95
92
#include "BIF_editmesh.h"
96
93
#include "BIF_editmode_undo.h"
97
94
#include "BIF_editview.h"
 
95
#include "BIF_gl.h"
98
96
#include "BIF_interface.h"
99
97
#include "BIF_mainqueue.h"
100
98
#include "BIF_meshtools.h"
105
103
#include "BIF_space.h"
106
104
#include "BIF_toets.h"
107
105
#include "BIF_toolbox.h"
108
 
#include "BIF_gl.h"
 
106
#include "BIF_transform.h"
109
107
 
110
108
#include "BPY_extern.h"
111
109
#include "BPY_menus.h"
116
114
 
117
115
#include "BIF_poseobject.h"
118
116
 
119
 
#include "TPT_DependKludge.h"
120
 
 
121
117
/* View3d->modeselect 
122
118
 * This is a bit of a dodgy hack to enable a 'mode' menu with icons+labels
123
119
 * rather than those buttons.
127
123
 * This can be cleaned when I make some new 'mode' icons.
128
124
 */
129
125
 
130
 
#define V3D_OBJECTMODE_SEL                              ICON_OBJECT
131
 
#define V3D_EDITMODE_SEL                                ICON_EDITMODE_HLT
 
126
#define V3D_OBJECTMODE_SEL                      ICON_OBJECT
 
127
#define V3D_EDITMODE_SEL                        ICON_EDITMODE_HLT
132
128
#define V3D_FACESELECTMODE_SEL          ICON_FACESEL_HLT
133
129
#define V3D_VERTEXPAINTMODE_SEL         ICON_VPAINT_HLT
134
130
#define V3D_TEXTUREPAINTMODE_SEL        ICON_TPAINT_HLT
135
131
#define V3D_WEIGHTPAINTMODE_SEL         ICON_WPAINT_HLT
136
 
#define V3D_POSEMODE_SEL                                        ICON_POSE_HLT
 
132
#define V3D_POSEMODE_SEL                        ICON_POSE_HLT
137
133
 
138
134
#define TEST_EDITMESH   if(G.obedit==0) return; \
139
135
                                                if( (G.vd->lay & G.obedit->lay)==0 ) return;
161
157
                
162
158
                if(G.vd->scenelock) handle_view3d_lock();
163
159
                scrarea_queue_winredraw(curarea);
 
160
                
 
161
                /* new layers might need unflushed events events */
 
162
                DAG_scene_update_flags(G.scene, G.vd->lay);     // tags all that moves and flushes
164
163
        }
165
164
        else {
166
165
                if(G.qual & LR_ALTKEY) {
227
226
        case 10: /* Reset Zoom */
228
227
                persptoetsen(PADENTER);
229
228
                break;
 
229
        case 11: /* Camera Fly mode */
 
230
                fly();
 
231
                break;
230
232
        }
231
233
        allqueue(REDRAWVIEW3D, 0);
232
234
}
239
241
        
240
242
        block= uiNewBlock(&curarea->uiblocks, "view3d_view_cameracontrolsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
241
243
        uiBlockSetButmFunc(block, do_view3d_view_cameracontrolsmenu, NULL);
 
244
 
 
245
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Camera Fly Mode|Shift F",        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
 
246
        
 
247
        uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, 140, 6, NULL, 0.0, 0.0, 0, 0, "");
242
248
        
243
249
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Left|NumPad 4",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 0, "");
244
250
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Orbit Right|NumPad 6", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 1, "");
340
346
        return block;
341
347
}
342
348
 
 
349
static void do_view3d_view_spacehandlers(void *arg, int event)
 
350
{
 
351
        Text *text = G.main->text.first;
 
352
        unsigned short menu_evt_num = 0;
 
353
 
 
354
        if (event > 0) {
 
355
                while (text) {
 
356
                        if (++menu_evt_num == event) {
 
357
 
 
358
                                if (BPY_has_spacehandler(text, curarea))
 
359
                                        BPY_del_spacehandler(text, curarea);
 
360
                                else
 
361
                                        BPY_add_spacehandler(text, curarea, SPACE_VIEW3D);
 
362
 
 
363
                                break;
 
364
                        }
 
365
                        text = text->id.next;
 
366
                }
 
367
        }
 
368
 
 
369
        allqueue(REDRAWVIEW3D, 1);
 
370
}
 
371
 
 
372
static uiBlock *view3d_view_spacehandlers(void *arg_unused)
 
373
{
 
374
        uiBlock *block;
 
375
        short yco= 0, menuwidth=120;
 
376
        Text *text = G.main->text.first;
 
377
        ScrArea *sa = curarea;
 
378
        unsigned short handlertype;
 
379
        int icontype, slinks_num = 0;
 
380
        unsigned short menu_evt_num = 0;
 
381
        char menustr[64];
 
382
        static char msg_tog_on[] = "Click to enable";
 
383
        static char msg_tog_off[]= "Click to disable";
 
384
        char *tip = NULL;
 
385
        
 
386
        block= uiNewBlock(&curarea->uiblocks, "view3d_view_spacehandlers", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
 
387
        uiBlockSetButmFunc(block, do_view3d_view_spacehandlers, NULL);
 
388
 
 
389
        while (text) {
 
390
                menu_evt_num++;
 
391
                handlertype = BPY_is_spacehandler(text, SPACE_VIEW3D);
 
392
 
 
393
                if (handlertype) {
 
394
                        slinks_num++;
 
395
 
 
396
                        /* mark text as script, so we can remove its link if its header
 
397
                         * becomes corrupt and it's not recognized anymore */
 
398
                        if (!(text->flags & TXT_ISSCRIPT)) text->flags |= TXT_ISSCRIPT;
 
399
 
 
400
                        if (handlertype == SPACEHANDLER_VIEW3D_EVENT)
 
401
                                BLI_strncpy(menustr, "Event: ", 8);
 
402
                        else
 
403
                                BLI_strncpy(menustr, "Draw:  ", 8);
 
404
                        BLI_strncpy(menustr+7, text->id.name+2, 22);
 
405
 
 
406
                        if (BPY_has_spacehandler(text, sa)) {
 
407
                                icontype = ICON_CHECKBOX_HLT;
 
408
                                tip = msg_tog_off;
 
409
                        }
 
410
                        else {
 
411
                                icontype = ICON_CHECKBOX_DEHLT;
 
412
                                tip = msg_tog_on;
 
413
                        }
 
414
 
 
415
                        uiDefIconTextBut(block, BUTM, 1, icontype, menustr,             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, menu_evt_num, tip);
 
416
                }
 
417
                else if (text->flags & TXT_ISSCRIPT) {
 
418
                        /* if bit set, text was a space handler, but its header got corrupted,
 
419
                         * so we need to remove the link here */
 
420
                        BPY_del_spacehandler(text, sa);
 
421
                        text->flags &=~TXT_ISSCRIPT;
 
422
                }
 
423
 
 
424
                text = text->id.next;
 
425
        }
 
426
 
 
427
        if (slinks_num == 0) {
 
428
                uiDefIconTextBut(block, BUTM, 1, ICON_SCRIPT, "None Available", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, -1, "None of the texts in the Text Editor is a 3D View space handler");
 
429
        }
 
430
 
 
431
        uiBlockSetDirection(block, UI_RIGHT);
 
432
        uiTextBoundsBlock(block, 50);
 
433
 
 
434
        return block;
 
435
}
 
436
 
343
437
static void do_view3d_viewmenu(void *arg, int event)
344
438
{
 
439
        View3D *v3d= curarea->spacedata.first;
345
440
        extern int play_anim(int mode);
346
441
        
347
442
        switch(event) {
390
485
        case 16: /* View  Panel */
391
486
                add_blockhandler(curarea, VIEW3D_HANDLER_PROPERTIES, UI_PNL_UNSTOW);
392
487
                break;
 
488
        case 17: /* Set Clipping Border */
 
489
                view3d_edit_clipping(v3d);
 
490
                break;
393
491
        }
394
492
        allqueue(REDRAWVIEW3D, 1);
395
493
}
396
494
 
397
495
static uiBlock *view3d_viewmenu(void *arg_unused)
398
496
{
399
 
/*              static short tog=0; */
400
497
        uiBlock *block;
401
498
        short yco= 0, menuwidth=120;
 
499
        View3D *v3d= curarea->spacedata.first;
402
500
        
403
501
        block= uiNewBlock(&curarea->uiblocks, "view3d_viewmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
404
502
        uiBlockSetButmFunc(block, do_view3d_viewmenu, NULL);
440
538
        
441
539
        uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
442
540
        
 
541
        if(v3d->flag & V3D_CLIPPING)
 
542
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Clipping Border|Alt B",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
 
543
        else
 
544
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Clipping Border|Alt B",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 17, "");
443
545
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View Selected|NumPad .",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 11, "");
444
546
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "View All|Home",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 9, "");
445
547
        if(!curarea->full) uiDefIconTextBut(block, BUTM, B_FULL, ICON_BLANK1, "Maximize Window|Ctrl UpArrow", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 99, "");
449
551
        
450
552
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Play Back Animation|Alt A",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 13, "");
451
553
 
 
554
        uiDefBut(block, SEPR, 0, "",                                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
555
        uiDefIconTextBlockBut(block, view3d_view_spacehandlers, NULL, ICON_RIGHTARROW_THIN, "Space Handler Scripts", 0, yco-=20, 120, 19, "");
 
556
 
452
557
        if(curarea->headertype==HEADERTOP) {
453
558
                uiBlockSetDirection(block, UI_DOWN);
454
559
        }
534
639
 
535
640
void do_view3d_select_object_layermenu(void *arg, int event)
536
641
{
537
 
        extern void selectall_layer(int layernum);
 
642
        extern void selectall_layer(unsigned int layernum);
538
643
        
539
644
        switch(event) {
540
645
        case 0:
611
716
                selectlinks(event);
612
717
                break;
613
718
        }
 
719
        countall();
614
720
        allqueue(REDRAWVIEW3D, 0);
615
721
}
616
722
 
663
769
        return block;
664
770
}
665
771
 
666
 
static void do_view3d_select_objectmenu(void *arg, int event)
 
772
void do_view3d_select_objectmenu(void *arg, int event)
667
773
{
668
774
        switch(event) {
669
775
        
673
779
        case 1: /* Select/Deselect All */
674
780
                deselectall();
675
781
                break;
 
782
        case 2: /* inverse */
 
783
                selectswap();
 
784
                break;
676
785
        }
677
786
        allqueue(REDRAWVIEW3D, 0);
678
787
}
689
798
        
690
799
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
691
800
        
692
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
801
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
802
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse",                                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
693
803
        uiDefIconTextBlockBut(block, view3d_select_object_layermenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Layer", 0, yco-=20, 120, 19, "");
694
804
        uiDefIconTextBlockBut(block, view3d_select_object_typemenu, NULL, ICON_RIGHTARROW_THIN, "Select All by Type", 0, yco-=20, 120, 19, "");
695
805
                
731
841
                case 5: /* select random */
732
842
                        selectrandom_mesh();
733
843
                        break;
734
 
                case 6: /* select Faceloop */
735
 
                        loopoperations(LOOP_SELECT);
736
 
                        break;
737
844
                case 7: /* select more */
738
845
                        select_more();
739
846
                        break;
743
850
                case 9: /* select less */
744
851
                        select_non_manifold();
745
852
                        break;
746
 
                case 10: /* select vertexloop */
747
 
                        vertex_loop_select();
748
 
                        break;
 
853
                case 11: /* select triangles */
 
854
                        select_faces_by_numverts(3);
 
855
                        break;
 
856
                case 12: /* select quads */
 
857
                        select_faces_by_numverts(4);
 
858
                        break;
 
859
                case 13: /* select non-triangles/quads */
 
860
                        select_faces_by_numverts(5);
 
861
                        break;
 
862
 
749
863
        }
750
864
        allqueue(REDRAWVIEW3D, 0);
751
865
}
777
891
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
778
892
                         menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
779
893
 
 
894
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
 
895
                                         "Triangles|Ctrl Alt Shift 3", 
 
896
                                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
 
897
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
 
898
                                         "Quads|Ctrl Alt Shift 4", 
 
899
                                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
 
900
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, 
 
901
                                         "Non-Triangles/Quads|Ctrl Alt Shift 5", 
 
902
                                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
 
903
 
 
904
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
 
905
                         menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
906
 
780
907
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "More|Ctrl NumPad +",
781
908
                                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
782
909
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Less|Ctrl NumPad -",
785
912
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
786
913
                         menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
787
914
 
788
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Face Loop...|Shift R",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
789
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vertex Loop|Alt B",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
790
915
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Vertices|Ctrl L",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
791
916
                
792
917
        if(curarea->headertype==HEADERTOP) {
886
1011
        block= uiNewBlock(&curarea->uiblocks, "view3d_select_metaballmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
887
1012
        uiBlockSetButmFunc(block, do_view3d_select_metaballmenu, NULL);
888
1013
        
889
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B",                                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
890
 
        
891
 
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
892
 
        
893
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
 
1014
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Border Select|B", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
 
1015
        
 
1016
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
1017
        
 
1018
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
894
1019
                
895
1020
        if(curarea->headertype==HEADERTOP) {
896
1021
                uiBlockSetDirection(block, UI_DOWN);
954
1079
                        borderselect();
955
1080
                        break;
956
1081
                case 2: /* Select/Deselect all */
957
 
                        deselectall_armature();
 
1082
                        deselectall_armature(1);
958
1083
                        break;
959
1084
        }
960
1085
        allqueue(REDRAWVIEW3D, 0);
991
1116
//      extern void borderselect(void);
992
1117
        
993
1118
        switch(event) {
994
 
                        case 0: /* border select */
995
 
                        borderselect();
996
 
                        break;
997
 
                case 2: /* Select/Deselect all */
998
 
                        deselectall_posearmature(1);
999
 
                        break;
 
1119
        case 0: /* border select */
 
1120
                borderselect();
 
1121
                break;
 
1122
        case 2: /* Select/Deselect all */
 
1123
                deselectall_posearmature(OBACT, 1);
 
1124
                break;
 
1125
        case 3:
 
1126
                pose_select_constraint_target();
 
1127
                break;
1000
1128
        }
1001
1129
        allqueue(REDRAWVIEW3D, 0);
1002
1130
}
1014
1142
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1015
1143
        
1016
1144
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select/Deselect All|A",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
 
1145
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Select Constraint Target|W",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1017
1146
 
1018
1147
        if(curarea->headertype==HEADERTOP) {
1019
1148
                uiBlockSetDirection(block, UI_DOWN);
1030
1159
static void do_view3d_select_faceselmenu(void *arg, int event)
1031
1160
{
1032
1161
//      extern void borderselect(void);
1033
 
        
 
1162
 
 
1163
        /* events >= 6 are registered bpython scripts */
 
1164
        if (event >= 6) BPY_menu_do_python(PYMENU_FACESELECT, event - 6);
 
1165
 
1034
1166
        switch(event) {
1035
 
                        case 0: /* border select */
 
1167
                case 0: /* border select */
1036
1168
                        borderselect();
1037
1169
                        break;
1038
1170
                case 2: /* Select/Deselect all */
1044
1176
                case 4: /* Select Same UV */
1045
1177
                        get_same_uv();
1046
1178
                        break;
 
1179
                case 5: /* Select Linked */
 
1180
                        select_linked_tfaces(2);
 
1181
                        break;
1047
1182
        }
1048
1183
        allqueue(REDRAWVIEW3D, 0);
1049
1184
}
1052
1187
{
1053
1188
        uiBlock *block;
1054
1189
        short yco= 0, menuwidth=120;
1055
 
        
 
1190
        BPyMenu *pym;
 
1191
        int i = 0;
 
1192
 
1056
1193
        block= uiNewBlock(&curarea->uiblocks, "view3d_select_faceselmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
1057
1194
        uiBlockSetButmFunc(block, do_view3d_select_faceselmenu, NULL);
1058
1195
        
1064
1201
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Inverse",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1065
1202
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Same UV",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1066
1203
 
 
1204
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
1205
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Linked Faces|Ctrl L",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
 
1206
 
 
1207
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
1208
 
 
1209
        /* note that we account for the 6 previous entries with i+6: */
 
1210
        for (pym = BPyMenuTable[PYMENU_FACESELECT]; pym; pym = pym->next, i++) {
 
1211
                uiDefIconTextBut(block, BUTM, 1, ICON_PYTHON, pym->name, 0, yco-=20,
 
1212
                        menuwidth, 19, NULL, 0.0, 0.0, 1, i+6,
 
1213
                        pym->tooltip?pym->tooltip:pym->filename);
 
1214
        }
 
1215
 
1067
1216
        if(curarea->headertype==HEADERTOP) {
1068
1217
                uiBlockSetDirection(block, UI_DOWN);
1069
1218
        }
1120
1269
 
1121
1270
void do_view3d_transform_moveaxismenu(void *arg, int event)
1122
1271
{
 
1272
        float mat[3][3];
 
1273
        
 
1274
        Mat3One(mat);
 
1275
        
1123
1276
        switch(event)
1124
1277
        {
1125
1278
            case 0: /* X Global */
1126
 
                    transform('g'*'X');
 
1279
                        initTransform(TFM_TRANSLATION, CTX_NONE);
 
1280
                        BIF_setSingleAxisConstraint(mat[0], " X");
 
1281
                        Transform();
1127
1282
                        break;
1128
1283
                case 1: /* Y Global */
1129
 
                        transform('g'*'Y');
 
1284
                        initTransform(TFM_TRANSLATION, CTX_NONE);
 
1285
                        BIF_setSingleAxisConstraint(mat[1], " Y");
 
1286
                        Transform();
1130
1287
                        break;
1131
1288
                case 2: /* Z Global */
1132
 
                        transform('g'*'Z');
 
1289
                        initTransform(TFM_TRANSLATION, CTX_NONE);
 
1290
                        BIF_setSingleAxisConstraint(mat[2], " Z");
 
1291
                        Transform();
1133
1292
                        break;
1134
1293
                case 3: /* X Local */
1135
 
                        transform('g'*'x');
 
1294
                        initTransform(TFM_TRANSLATION, CTX_NONE);
 
1295
                        BIF_setLocalAxisConstraint('X', " X");
 
1296
                        Transform();
1136
1297
                        break;
1137
1298
                case 4: /* Y Local */
1138
 
                        transform('g'*'y');
 
1299
                        initTransform(TFM_TRANSLATION, CTX_NONE);
 
1300
                        BIF_setLocalAxisConstraint('Y', " Y");
 
1301
                        Transform();
1139
1302
                        break;
1140
1303
                case 5: /* Z Local */
1141
 
                        transform('g'*'z');
 
1304
                        initTransform(TFM_TRANSLATION, CTX_NONE);
 
1305
                        BIF_setLocalAxisConstraint('Z', " Z");
 
1306
                        Transform();
1142
1307
                        break;
1143
1308
        }
1144
1309
        allqueue(REDRAWVIEW3D, 0);
1170
1335
 
1171
1336
void do_view3d_transform_rotateaxismenu(void *arg, int event)
1172
1337
{
 
1338
        float mat[3][3];
 
1339
        
 
1340
        Mat3One(mat);
 
1341
        
1173
1342
        switch(event)
1174
1343
        {
1175
1344
            case 0: /* X Global */
1176
 
                    transform('r'*'X');
 
1345
                        initTransform(TFM_ROTATION, CTX_NONE);
 
1346
                        BIF_setSingleAxisConstraint(mat[0], " X");
 
1347
                        Transform();
1177
1348
                        break;
1178
1349
                case 1: /* Y Global */
1179
 
                        transform('r'*'Y');
 
1350
                        initTransform(TFM_ROTATION, CTX_NONE);
 
1351
                        BIF_setSingleAxisConstraint(mat[1], " Y");
 
1352
                        Transform();
1180
1353
                        break;
1181
1354
                case 2: /* Z Global */
1182
 
                        transform('r'*'Z');
1183
 
                        break;
 
1355
                        initTransform(TFM_ROTATION, CTX_NONE);
 
1356
                        BIF_setSingleAxisConstraint(mat[2], " Z");
 
1357
                        Transform();
 
1358
                        break;
1184
1359
                case 3: /* X Local */
1185
 
                        transform('r'*'x');
 
1360
                        initTransform(TFM_ROTATION, CTX_NONE);
 
1361
                        BIF_setLocalAxisConstraint('X', " X");
 
1362
                        Transform();
1186
1363
                        break;
1187
1364
                case 4: /* Y Local */
1188
 
                        transform('r'*'y');
 
1365
                        initTransform(TFM_ROTATION, CTX_NONE);
 
1366
                        BIF_setLocalAxisConstraint('Y', " Y");
 
1367
                        Transform();
1189
1368
                        break;
1190
1369
                case 5: /* Z Local */
1191
 
                        transform('r'*'z');
 
1370
                        initTransform(TFM_ROTATION, CTX_NONE);
 
1371
                        BIF_setLocalAxisConstraint('Z', " Z");
 
1372
                        Transform();
1192
1373
                        break;
1193
1374
        }
1194
1375
        allqueue(REDRAWVIEW3D, 0);
1220
1401
 
1221
1402
void do_view3d_transform_scaleaxismenu(void *arg, int event)
1222
1403
{
 
1404
        float mat[3][3];
 
1405
        
 
1406
        Mat3One(mat);
 
1407
        
1223
1408
        switch(event)
1224
1409
        {
1225
1410
            case 0: /* X Global */
1226
 
                    transform('s'*'X');
 
1411
                        initTransform(TFM_RESIZE, CTX_NONE);
 
1412
                        BIF_setSingleAxisConstraint(mat[0], " X");
 
1413
                        Transform();
1227
1414
                        break;
1228
1415
                case 1: /* Y Global */
1229
 
                        transform('s'*'Y');
 
1416
                        initTransform(TFM_RESIZE, CTX_NONE);
 
1417
                        BIF_setSingleAxisConstraint(mat[1], " Y");
 
1418
                        Transform();
1230
1419
                        break;
1231
1420
                case 2: /* Z Global */
1232
 
                        transform('s'*'Z');
 
1421
                        initTransform(TFM_RESIZE, CTX_NONE);
 
1422
                        BIF_setSingleAxisConstraint(mat[2], " Z");
 
1423
                        Transform();
1233
1424
                        break;
1234
1425
                case 3: /* X Local */
1235
 
                        transform('s'*'x');
 
1426
                        initTransform(TFM_RESIZE, CTX_NONE);
 
1427
                        BIF_setLocalAxisConstraint('X', " X");
 
1428
                        Transform();
1236
1429
                        break;
1237
1430
                case 4: /* Y Local */
1238
 
                        transform('s'*'y');
 
1431
                        initTransform(TFM_RESIZE, CTX_NONE);
 
1432
                        BIF_setLocalAxisConstraint('X', " X");
 
1433
                        Transform();
1239
1434
                        break;
1240
1435
                case 5: /* Z Local */
1241
 
                        transform('s'*'z');
 
1436
                        initTransform(TFM_RESIZE, CTX_NONE);
 
1437
                        BIF_setLocalAxisConstraint('X', " X");
 
1438
                        Transform();
1242
1439
                        break;
1243
1440
        }
1244
1441
        allqueue(REDRAWVIEW3D, 0);
1268
1465
        return block;
1269
1466
}
1270
1467
 
1271
 
void do_view3d_transformmenu(void *arg, int event)
 
1468
static void do_view3d_transformmenu(void *arg, int event)
1272
1469
{
1273
1470
        switch(event) {
1274
1471
        case 1:
1275
 
                transform('g');
 
1472
                initTransform(TFM_TRANSLATION, CTX_NONE);
 
1473
                Transform();
1276
1474
                break;
1277
1475
        case 2:
1278
 
                transform('r');
 
1476
                initTransform(TFM_ROTATION, CTX_NONE);
 
1477
                Transform();
1279
1478
                break;
1280
1479
        case 3:
1281
 
                transform('s');
 
1480
                initTransform(TFM_RESIZE, CTX_NONE);
 
1481
                Transform();
 
1482
                break;
 
1483
        case 4:
 
1484
                image_aspect();
 
1485
                break;
 
1486
        case 5:
 
1487
                initTransform(TFM_TOSPHERE, CTX_NONE);
 
1488
                Transform();
 
1489
                break;
 
1490
        case 6:
 
1491
                initTransform(TFM_SHEAR, CTX_NONE);
 
1492
                Transform();
 
1493
                break;
 
1494
        case 7:
 
1495
                initTransform(TFM_WARP, CTX_NONE);
 
1496
                Transform();
 
1497
                break;
 
1498
        case 8:
 
1499
                initTransform(TFM_PUSHPULL, CTX_NONE);
 
1500
                Transform();
 
1501
                break;
 
1502
        case 9:
 
1503
                if (G.obedit) {
 
1504
                        if (G.obedit->type == OB_MESH)
 
1505
                                initTransform(TFM_SHRINKFATTEN, CTX_NONE);
 
1506
                                Transform();
 
1507
                } else error("Only meshes can be shrinked/fattened");
 
1508
                break;
 
1509
        case 10:
 
1510
                docentre(0);
 
1511
                break;
 
1512
        case 11:
 
1513
                docentre_new();
 
1514
                break;
 
1515
        case 12:
 
1516
                docentre_cursor();
1282
1517
                break;
1283
1518
        }
1284
1519
        allqueue(REDRAWVIEW3D, 0);
1301
1536
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale|S",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1302
1537
        uiDefIconTextBlockBut(block, view3d_transform_scaleaxismenu, NULL, ICON_RIGHTARROW_THIN, "Scale on Axis", 0, yco-=20, 120, 19, "");
1303
1538
 
 
1539
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
1540
        
 
1541
        if (G.obedit) {
 
1542
                if (G.obedit->type == OB_MESH)
 
1543
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
 
1544
        }
 
1545
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "To Sphere|Ctrl Shift S",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
 
1546
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl Shift Alt S",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
 
1547
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
 
1548
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Push/Pull|Shift P",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
 
1549
        
 
1550
        if (!G.obedit) {
 
1551
                uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
1552
                
 
1553
                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, "");
 
1554
        }
 
1555
        
 
1556
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
1557
 
 
1558
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "ObData to Center",               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
 
1559
        if (!G.obedit) {
 
1560
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center New",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
 
1561
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Center Cursor",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
 
1562
        }
 
1563
        
1304
1564
        uiBlockSetDirection(block, UI_RIGHT);
1305
1565
        uiTextBoundsBlock(block, 60);
1306
1566
        return block;
1312
1572
                case 1:
1313
1573
                case 2:
1314
1574
                case 3:
1315
 
                        mirror_object(event);
 
1575
                        Mirror(event + 3); // + 3 because the first three modes are global
1316
1576
                        break;
1317
1577
        }
1318
1578
        allqueue(REDRAWVIEW3D, 0);
1351
1611
                clear_object('g');
1352
1612
                break;
1353
1613
        case 4:
1354
 
                object_apply_deform(OBACT);
 
1614
                if(OBACT) object_apply_deform(OBACT);
1355
1615
                break;
1356
1616
        case 5: /* make duplis real */
1357
1617
                make_duplilist_real();
1513
1773
        case 20:
1514
1774
        case 21:
1515
1775
        case 22:
 
1776
        case 23:
 
1777
        case 24:
 
1778
        case 25:
1516
1779
                copy_attr((short)event);
1517
1780
                break;
1518
1781
                }
1536
1799
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Size|Ctrl C, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1537
1800
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Drawtype|Ctrl C, 4",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1538
1801
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Time Offset|Ctrl C, 5",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
1539
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
 
1802
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Dupli|Ctrl C, 6",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1540
1803
        
1541
1804
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1542
1805
        
1547
1810
        
1548
1811
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1549
1812
        
1550
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C, 11",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
 
1813
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Object Constraints|Ctrl C, 22",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 22, "");
1551
1814
        
1552
1815
        if (ob) {
1553
1816
        
1554
1817
                if ((ob->type == OB_MESH) || (ob->type == OB_CURVE) || (ob->type == OB_SURF) ||
1555
1818
                                (ob->type == OB_FONT) || (ob->type == OB_MBALL)) {
1556
 
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C, 12",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
 
1819
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Texture Space|Ctrl C, 17",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 17, "");
1557
1820
                }       
1558
1821
                
1559
1822
                if(ob->type == OB_FONT) {
1560
 
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C, 13",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
1561
 
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C, 14",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
 
1823
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Font Settings|Ctrl C, 18",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 18, "");
 
1824
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C, 19",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
 
1825
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C, 20",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
1562
1826
                }
1563
1827
                if(ob->type == OB_CURVE) {
1564
 
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C, 13",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
 
1828
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel Settings|Ctrl C, 19",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 19, "");
 
1829
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Curve Resolution|Ctrl C, 20",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 25, "");
1565
1830
                }
1566
1831
        
1567
1832
                if(ob->type==OB_MESH) {
1568
 
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdiv|Ctrl C, 13",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
 
1833
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdiv|Ctrl C, 21",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 21, "");
 
1834
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Modifiers ...|Ctrl C, 24",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 24, "");
1569
1835
                }
1570
1836
        
1571
1837
                if( give_parteff(ob) ) {
1572
 
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Particle Settings|Ctrl C, 14",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
 
1838
                        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Particle Settings|Ctrl C, 20",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 20, "");
1573
1839
                }
1574
1840
        }
1575
1841
        
1637
1903
        return block;
1638
1904
}
1639
1905
 
 
1906
static void do_view3d_edit_object_constraintsmenu(void *arg, int event)
 
1907
{
 
1908
        switch(event) {
 
1909
        case 1: /* add constraint */
 
1910
                add_constraint(0);
 
1911
                break;
 
1912
        case 2: /* clear constraint */
 
1913
                ob_clear_constraints();
 
1914
                break;
 
1915
                }
 
1916
        allqueue(REDRAWVIEW3D, 0);
 
1917
}
 
1918
 
 
1919
static uiBlock *view3d_edit_object_constraintsmenu(void *arg_unused)
 
1920
{
 
1921
        uiBlock *block;
 
1922
        short yco = 20, menuwidth = 120;
 
1923
 
 
1924
        block= uiNewBlock(&curarea->uiblocks, "view3d_edit_object_constraintsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
 
1925
        uiBlockSetButmFunc(block, do_view3d_edit_object_constraintsmenu, NULL);
 
1926
        
 
1927
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint...|Ctrl Alt C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
1928
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
 
1929
        
 
1930
        uiBlockSetDirection(block, UI_RIGHT);
 
1931
        uiTextBoundsBlock(block, 60);
 
1932
        return block;
 
1933
}
 
1934
 
1640
1935
static void do_view3d_edit_object_scriptsmenu(void *arg, int event)
1641
1936
{
1642
1937
        BPY_menu_do_python(PYMENU_OBJECT, event);
1754
2049
        
1755
2050
        uiDefIconTextBlockBut(block, view3d_edit_object_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
1756
2051
        uiDefIconTextBlockBut(block, view3d_edit_object_trackmenu, NULL, ICON_RIGHTARROW_THIN, "Track", 0, yco-=20, 120, 19, "");
 
2052
        uiDefIconTextBlockBut(block, view3d_edit_object_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
1757
2053
        
1758
2054
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1759
2055
        
1786
2082
 
1787
2083
static void do_view3d_edit_propfalloffmenu(void *arg, int event)
1788
2084
{
1789
 
        extern int prop_mode;
1790
 
        
1791
 
        switch(event) {
1792
 
        case 0: /* proportional edit - sharp*/
1793
 
                prop_mode = 0;
1794
 
                break;
1795
 
        case 1: /* proportional edit - smooth*/
1796
 
                prop_mode = 1;
1797
 
                break;
1798
 
                }
 
2085
        
 
2086
        G.scene->prop_mode= event;
 
2087
        
1799
2088
        allqueue(REDRAWVIEW3D, 1);
1800
2089
}
1801
2090
 
1803
2092
{
1804
2093
        uiBlock *block;
1805
2094
        short yco = 20, menuwidth = 120;
1806
 
        extern int prop_mode;
1807
2095
 
1808
2096
        block= uiNewBlock(&curarea->uiblocks, "view3d_edit_propfalloffmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1809
2097
        uiBlockSetButmFunc(block, do_view3d_edit_propfalloffmenu, NULL);
1810
2098
        
1811
 
        if (prop_mode==0) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Sharp|Shift O",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1812
 
        else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1813
 
        if (prop_mode==1) uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Smooth|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1814
 
        else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
2099
        if (G.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, "");
 
2100
        else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Smooth|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SMOOTH, "");
 
2101
        if (G.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, "");
 
2102
        else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sphere|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SPHERE, "");
 
2103
        if (G.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, "");
 
2104
        else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Root|Shift O",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_ROOT, "");
 
2105
        if (G.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, "");
 
2106
        else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Sharp|Shift O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_SHARP, "");
 
2107
        if (G.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, "");
 
2108
        else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Linear|Shift O",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_LIN, "");
 
2109
        if (G.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, "");
 
2110
        else uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Constant|Shift O",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, PROP_CONST, "");
1815
2111
                
1816
2112
        uiBlockSetDirection(block, UI_RIGHT);
1817
2113
        uiTextBoundsBlock(block, 60);
1821
2117
 
1822
2118
void do_view3d_edit_mesh_verticesmenu(void *arg, int event)
1823
2119
{
1824
 
        extern float doublimit;
1825
2120
        
1826
2121
        switch(event) {
1827
2122
                 
1829
2124
                make_parent();
1830
2125
                break;
1831
2126
        case 1: /* remove doubles */
1832
 
                notice("Removed: %d", removedoublesflag(1, doublimit));
 
2127
                notice("Removed: %d", removedoublesflag(1, G.scene->toolsettings->doublimit));
1833
2128
                break;
1834
2129
        case 2: /* smooth */
1835
2130
                vertexsmooth();
1846
2141
        case 6: /* add hook */
1847
2142
                add_hook();
1848
2143
                break;
 
2144
        case 7: /* rip */
 
2145
                mesh_rip();
 
2146
                break;
1849
2147
        }
1850
2148
        allqueue(REDRAWVIEW3D, 0);
1851
2149
}
1859
2157
        uiBlockSetButmFunc(block, do_view3d_edit_mesh_verticesmenu, NULL);
1860
2158
        
1861
2159
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Merge...|Alt M",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
 
2160
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rip|V",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1862
2161
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Split|Y",                        0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1863
2162
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1864
2163
        
1865
2164
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1866
2165
        
1867
2166
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Smooth|W, 0",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1868
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 5",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
2167
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Remove Doubles|W, 6",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1869
2168
        
1870
2169
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1871
2170
 
1879
2178
 
1880
2179
void do_view3d_edit_mesh_edgesmenu(void *arg, int event)
1881
2180
{
1882
 
        extern short editbutflag;
1883
2181
        float fac;
1884
2182
        short randfac;
1885
2183
 
1886
2184
        switch(event) {
1887
2185
                 
1888
2186
        case 0: /* subdivide smooth */
1889
 
                subdivideflag(1, 0.0, editbutflag | B_SMOOTH);
 
2187
                esubdivideflag(1, 0.0, G.scene->toolsettings->editbutflag | B_SMOOTH,1,0);
1890
2188
                BIF_undo_push("Subdivide Smooth");
1891
2189
                break;
1892
2190
        case 1: /*subdivide fractal */
1893
2191
                randfac= 10;
1894
2192
                if(button(&randfac, 1, 100, "Rand fac:")==0) return;
1895
2193
                fac= -( (float)randfac )/100;
1896
 
                subdivideflag(1, fac, editbutflag);
 
2194
                esubdivideflag(1, fac, G.scene->toolsettings->editbutflag,1,0);
1897
2195
                BIF_undo_push("Subdivide Fractal");
1898
2196
                break;
1899
2197
        case 2: /* subdivide */
1900
 
                subdivideflag(1, 0.0, editbutflag);
 
2198
                esubdivideflag(1, 0.0, G.scene->toolsettings->editbutflag,1,0);
1901
2199
                BIF_undo_push("Subdivide");
1902
2200
                break;
1903
2201
        case 3: /* knife subdivide */
1904
2202
                KnifeSubdivide(KNIFE_PROMPT);
1905
2203
                break;
1906
2204
        case 4: /* Loop subdivide */
1907
 
                loopoperations(LOOP_CUT);
 
2205
                CutEdgeloop(1);
1908
2206
                break;
1909
2207
        case 5: /* Make Edge/Face */
1910
2208
                addedgeface_mesh();
1919
2217
                editmesh_mark_seam(1);
1920
2218
                break;
1921
2219
        case 9: /* Cease SubSurf */
1922
 
                transform('e');
 
2220
                initTransform(TFM_CREASE, CTX_EDGE);
 
2221
                Transform();
1923
2222
                break;
1924
2223
        case 10: /* Rotate Edge */
1925
 
                edge_rotate_selected();
 
2224
                edge_rotate_selected(2);
 
2225
                break;
 
2226
        case 11: /* Rotate Edge */
 
2227
                edge_rotate_selected(1);
 
2228
                break;
 
2229
        case 12: /* Edgeslide */
 
2230
                EdgeSlide(0,0.0);
 
2231
                break;
 
2232
        case 13: /* Edge Loop Delete */
 
2233
                EdgeLoopDelete();
1926
2234
                break;
1927
2235
        }
1928
2236
        allqueue(REDRAWVIEW3D, 0);
1932
2240
{
1933
2241
        uiBlock *block;
1934
2242
        short yco = 20, menuwidth = 120;
1935
 
        
1936
 
        Mesh *me= get_mesh(OBACT);
1937
2243
 
1938
2244
        block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mesh_edgesmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
1939
2245
        uiBlockSetButmFunc(block, do_view3d_edit_mesh_edgesmenu, NULL);
1942
2248
        
1943
2249
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1944
2250
        
1945
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 1",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
 
2251
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Bevel|W, Alt 2",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
1946
2252
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Loop Subdivide...|Ctrl R",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
1947
2253
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Knife Subdivide...|Shift K",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
1948
2254
        
1949
2255
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1950
2256
        
1951
2257
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide|W, 1",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
1952
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 2",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
1953
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 3",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
 
2258
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Fractal|W, 3",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
2259
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Subdivide Smooth|W, 4",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
1954
2260
 
1955
2261
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1956
2262
 
1957
2263
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mark Seam|Ctrl E",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
1958
2264
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Seam|Ctrl E",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
1959
2265
 
1960
 
        if (me->flag & ME_SUBSURF) {
1961
 
                uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1962
 
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
1963
 
        }
1964
 
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
1965
 
 
1966
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge|Ctrl E",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
 
2266
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
2267
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Crease SubSurf|Shift E",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
 
2268
 
 
2269
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
2270
 
 
2271
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CW|Ctrl E",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
 
2272
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate Edge CCW|Ctrl E",                 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");  
 
2273
 
 
2274
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Slide Edge |Ctrl E",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");  
 
2275
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete Edge Loop|X",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");  
 
2276
 
1967
2277
        
1968
2278
        uiBlockSetDirection(block, UI_RIGHT);
1969
2279
        uiTextBoundsBlock(block, 60);
1970
2280
        return block;
1971
2281
}
1972
2282
 
1973
 
static void do_view3d_edit_mesh_facesmenu(void *arg, int event)
 
2283
void do_view3d_edit_mesh_facesmenu(void *arg, int event)
1974
2284
{
1975
2285
        switch(event) {
1976
2286
        case 0: /* Fill Faces */
1983
2293
                convert_to_triface(0);
1984
2294
                allqueue(REDRAWVIEW3D, 0);
1985
2295
                countall();
1986
 
                makeDispList(G.obedit);
 
2296
                DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
1987
2297
                break;
1988
2298
        case 3: /* Tris to Quads */
1989
2299
                join_triangles();
1994
2304
        case 5: /* Make Edge/Face */
1995
2305
                addedgeface_mesh();
1996
2306
                break;
 
2307
        case 6: /* Set Smooth */
 
2308
                mesh_set_smooth_faces(1);
 
2309
                break;
 
2310
        case 7: /* Set Solid */
 
2311
                mesh_set_smooth_faces(0);
 
2312
                break;
 
2313
                
1997
2314
        }
1998
2315
        allqueue(REDRAWVIEW3D, 0);
1999
2316
}
2016
2333
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Convert Triangles to Quads|Alt J", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2017
2334
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip Triangle Edges|Ctrl F",             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2018
2335
        
 
2336
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
2337
        
 
2338
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Smooth|W, Alt 3",    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
 
2339
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Set Solid|W, Alt 4", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
 
2340
        
2019
2341
        uiBlockSetDirection(block, UI_RIGHT);
2020
2342
        uiTextBoundsBlock(block, 60);
2021
2343
        return block;
2050
2372
        
2051
2373
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2052
2374
        
2053
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip|W, 9",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
 
2375
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip|W, 0",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2054
2376
        
2055
2377
        uiBlockSetDirection(block, UI_RIGHT);
2056
2378
        uiTextBoundsBlock(block, 60);
2069
2391
                case 7:
2070
2392
                case 8:
2071
2393
                case 9:
2072
 
                        mirror_edit(event);
 
2394
                        Mirror(event);
2073
2395
                        break;
2074
2396
        }
2075
2397
        allqueue(REDRAWVIEW3D, 0);
2195
2517
                delete_context_selected();
2196
2518
                break;
2197
2519
        case 9: /* Shrink/Fatten Along Normals */
2198
 
                transform('N');
 
2520
                initTransform(TFM_SHRINKFATTEN, CTX_NONE);
 
2521
                Transform();
2199
2522
                break;
2200
2523
        case 10: /* Shear */
2201
 
                transform('S');
 
2524
                initTransform(TFM_SHEAR, CTX_NONE);
 
2525
                Transform();
2202
2526
                break;
2203
2527
        case 11: /* Warp */
2204
 
                transform('w');
 
2528
                initTransform(TFM_WARP, CTX_NONE);
 
2529
                Transform();
2205
2530
                break;
2206
2531
        case 12: /* proportional edit (toggle) */
2207
 
                if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL;
2208
 
                else G.f |= G_PROPORTIONAL;
 
2532
                if(G.scene->proportional) G.scene->proportional= 0;
 
2533
                else G.scene->proportional= 1;
2209
2534
                break;
2210
2535
        }
2211
2536
        allqueue(REDRAWVIEW3D, 0);
2220
2545
        block= uiNewBlock(&curarea->uiblocks, "view3d_edit_meshmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2221
2546
        uiBlockSetButmFunc(block, do_view3d_edit_meshmenu, NULL);
2222
2547
                
2223
 
        /*
2224
 
        uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Move", 0, yco-=20, 120, 19, "");
2225
 
        uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Rotate", 0, yco-=20, 120, 19, "");
2226
 
        uiDefIconTextBlockBut(block, view3d_edit_mesh_facesmenu, NULL, ICON_RIGHTARROW_THIN, "Scale", 0, yco-=20, 120, 19, "");
2227
 
        */
2228
2548
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|U",         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2229
2549
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Redo Editing|Shift U",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2230
2550
        uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
2233
2553
        
2234
2554
        uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties...|N",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2235
2555
        uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
 
2556
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, 120, 19, "");
2236
2557
        uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2237
2558
        
2238
2559
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2254
2575
        uiDefIconTextBlockBut(block, view3d_edit_mesh_normalsmenu, NULL, ICON_RIGHTARROW_THIN, "Normals", 0, yco-=20, 120, 19, "");
2255
2576
        
2256
2577
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2257
 
        
2258
 
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, 120, 19, "");
2259
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shrink/Fatten Along Normals|Alt S",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2260
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
2261
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2262
 
        
2263
 
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2264
 
        
2265
 
        if(G.f & G_PROPORTIONAL) {
 
2578
                
 
2579
        if(G.scene->proportional) {
2266
2580
                uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2267
2581
        } else {
2268
2582
                uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
2292
2606
{
2293
2607
        switch(event) {
2294
2608
        case 0: /* tilt */
2295
 
                transform('t');
 
2609
                initTransform(TFM_TILT, CTX_NONE);
 
2610
                Transform();
2296
2611
                break;
2297
2612
        case 1: /* clear tilt */
2298
2613
                clear_tilt();
2299
2614
                break;
2300
2615
        case 2: /* Free */
2301
2616
                sethandlesNurb(3);
2302
 
                makeDispList(G.obedit);
 
2617
                DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2303
2618
                break;
2304
2619
        case 3: /* vector */
2305
2620
                sethandlesNurb(2);
2306
 
                makeDispList(G.obedit);
 
2621
                DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2307
2622
                break;
2308
2623
        case 4: /* smooth */
2309
2624
                sethandlesNurb(1);
2310
 
                makeDispList(G.obedit);
 
2625
                DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2311
2626
                break;
2312
2627
        case 5: /* make vertex parent */
2313
2628
                make_parent();
2315
2630
        case 6: /* add hook */
2316
2631
                add_hook();
2317
2632
                break;
 
2633
        case 7:
 
2634
                separate_nurb();
 
2635
                break;
2318
2636
        }
2319
2637
        allqueue(REDRAWVIEW3D, 0);
2320
2638
}
2330
2648
        if (OBACT->type == OB_CURVE) {
2331
2649
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Tilt|T",                         0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2332
2650
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Tilt|Alt T",                               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
2651
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Separate|P",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
2333
2652
                
2334
2653
                uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2335
2654
                
2336
2655
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Automatic|Shift H",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2337
2656
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Toggle Free/Aligned|H",                  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2338
2657
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Vector|V",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2339
 
                
 
2658
 
 
2659
                uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");             
2340
2660
        }
2341
2661
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Vertex Parent|Ctrl P",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2342
2662
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Hook|Ctrl H",                0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2436
2756
                break;
2437
2757
        case 7: /* toggle cyclic */
2438
2758
                makecyclicNurb();
2439
 
                makeDispList(G.obedit);
 
2759
                DAG_object_flush_update(G.scene, G.obedit, OB_RECALC_DATA);
2440
2760
                break;
2441
2761
        case 8: /* delete */
2442
2762
                delete_context_selected();
2443
2763
                break;
2444
2764
        case 9: /* proportional edit (toggle) */
2445
 
                if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL;
2446
 
                else G.f |= G_PROPORTIONAL;
 
2765
                if(G.scene->proportional) G.scene->proportional= 0;
 
2766
                else G.scene->proportional= 1;
2447
2767
                break;
2448
2768
        case 13: /* Shear */
2449
 
                transform('S');
 
2769
                initTransform(TFM_SHEAR, CTX_NONE);
 
2770
                Transform();
2450
2771
                break;
2451
2772
        case 14: /* Warp */
2452
 
                transform('w');
 
2773
                initTransform(TFM_WARP, CTX_NONE);
 
2774
                Transform();
2453
2775
                break;
2454
2776
        }
2455
2777
        allqueue(REDRAWVIEW3D, 0);
2469
2791
        
2470
2792
        uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties...|N",          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2471
2793
        uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
 
2794
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");      
2472
2795
        uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2473
2796
        
2474
2797
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2490
2813
        
2491
2814
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2492
2815
        
2493
 
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");      
2494
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2495
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 14, "");
2496
 
 
2497
 
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2498
 
        
2499
 
        if(G.f & G_PROPORTIONAL) {
 
2816
        if(G.scene->proportional) {
2500
2817
                uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2501
2818
        } else {
2502
2819
                uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
2519
2836
        return block;
2520
2837
}
2521
2838
 
 
2839
static void do_view3d_edit_mball_showhidemenu(void *arg, int event)
 
2840
{
 
2841
        switch(event) {
 
2842
        case 10: /* show hidden control points */
 
2843
                reveal_mball();
 
2844
                break;
 
2845
        case 11: /* hide selected control points */
 
2846
                hide_mball(0);
 
2847
                break;
 
2848
        case 12: /* hide deselected control points */
 
2849
                hide_mball(1);
 
2850
                break;
 
2851
                }
 
2852
        allqueue(REDRAWVIEW3D, 0);
 
2853
}
 
2854
 
 
2855
static uiBlock *view3d_edit_mball_showhidemenu(void *arg_unused)
 
2856
{
 
2857
        uiBlock *block;
 
2858
        short yco = 20, menuwidth = 120;
 
2859
 
 
2860
        block= uiNewBlock(&curarea->uiblocks, "view3d_edit_mball_showhidemenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
 
2861
        uiBlockSetButmFunc(block, do_view3d_edit_mball_showhidemenu, NULL);
 
2862
        
 
2863
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Show Hidden|Alt H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
 
2864
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Selected|H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
 
2865
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Hide Deselected|Shift H", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 12, "");
 
2866
 
 
2867
        uiBlockSetDirection(block, UI_RIGHT);
 
2868
        uiTextBoundsBlock(block, 60);
 
2869
        return block;
 
2870
}
2522
2871
static void do_view3d_edit_metaballmenu(void *arg, int event)
2523
2872
{
2524
2873
        switch(event) {
2535
2884
                delete_context_selected();
2536
2885
                break;
2537
2886
        case 5: /* Shear */
2538
 
                transform('S');
 
2887
                initTransform(TFM_SHEAR, CTX_NONE);
 
2888
                Transform();
2539
2889
                break;
2540
2890
        case 6: /* Warp */
2541
 
                transform('w');
 
2891
                initTransform(TFM_WARP, CTX_NONE);
 
2892
                Transform();
 
2893
                break;
 
2894
        case 7: /* Transform Properties */
 
2895
                add_blockhandler(curarea, VIEW3D_HANDLER_OBJECT, 0);
2542
2896
                break;
2543
2897
        }
2544
2898
        allqueue(REDRAWVIEW3D, 0);
2552
2906
        block= uiNewBlock(&curarea->uiblocks, "view3d_edit_metaballmenu", UI_EMBOSSP, UI_HELV, curarea->headwin);
2553
2907
        uiBlockSetButmFunc(block, do_view3d_edit_metaballmenu, NULL);
2554
2908
 
2555
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|Ctrl Z",            0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2556
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Redo Editing|Shift Ctrl Z",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
 
2909
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Undo Editing|Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
2910
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Redo Editing|Shift Ctrl Z", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2557
2911
        uiDefIconTextBlockBut(block, editmode_undohistorymenu, NULL, ICON_RIGHTARROW_THIN, "Undo History", 0, yco-=20, 120, 19, "");
2558
 
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2559
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2560
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X",                    0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2561
 
        
2562
 
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2563
 
        
 
2912
 
 
2913
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
2914
        
 
2915
        uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N",0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 0, 7, "");
 
2916
        uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2564
2917
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2565
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2566
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
 
2918
        uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
 
2919
        
 
2920
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
2921
 
 
2922
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
 
2923
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete...|X", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
 
2924
 
 
2925
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
2926
 
 
2927
        uiDefIconTextBlockBut(block, view3d_edit_mball_showhidemenu, NULL, ICON_RIGHTARROW_THIN, "Hide MetaElems", 0, yco-=20, 120, 19, "");
2567
2928
 
2568
2929
        if(curarea->headertype==HEADERTOP) {
2569
2930
                uiBlockSetDirection(block, UI_DOWN);
2731
3092
                common_insertkey();
2732
3093
                break;
2733
3094
        case 3: /* Shear */
2734
 
                transform('S');
 
3095
                initTransform(TFM_SHEAR, CTX_NONE);
 
3096
                Transform();
2735
3097
                break;
2736
3098
        case 4: /* Warp */
2737
 
                transform('w');
 
3099
                initTransform(TFM_WARP, CTX_NONE);
 
3100
                Transform();
2738
3101
                break;
2739
3102
        case 5: /* proportional edit (toggle) */
2740
 
                if(G.f & G_PROPORTIONAL) G.f &= ~G_PROPORTIONAL;
2741
 
                else G.f |= G_PROPORTIONAL;
 
3103
                if(G.scene->proportional) G.scene->proportional= 0;
 
3104
                else G.scene->proportional= 1;
2742
3105
                break;
2743
3106
        }
2744
3107
        allqueue(REDRAWVIEW3D, 0);
2756
3119
        
2757
3120
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2758
3121
        
 
3122
        uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
 
3123
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");              
2759
3124
        uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
2760
3125
        
2761
3126
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2763
3128
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Insert Keyframe|I",      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2764
3129
        
2765
3130
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2766
 
 
2767
 
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");      
2768
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2769
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2770
 
        
2771
 
        uiDefBut(block, SEPR, 0, "",                    0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2772
 
        
2773
 
        if(G.f & G_PROPORTIONAL) {
 
3131
        
 
3132
        if(G.scene->proportional) {
2774
3133
                uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_HLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2775
3134
        } else {
2776
3135
                uiDefIconTextBut(block, BUTM, 1, ICON_CHECKBOX_DEHLT, "Proportional Editing|O", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2789
3148
        return block;
2790
3149
}
2791
3150
 
 
3151
void do_view3d_edit_armature_parentmenu(void *arg, int event)
 
3152
{
 
3153
        switch(event) {
 
3154
        case 1:
 
3155
                make_bone_parent();
 
3156
                break;
 
3157
        case 2:
 
3158
                clear_bone_parent();
 
3159
                break;
 
3160
                }
 
3161
        allqueue(REDRAWVIEW3D, 0);
 
3162
}
 
3163
 
 
3164
static uiBlock *view3d_edit_armature_parentmenu(void *arg_unused)
 
3165
{
 
3166
        uiBlock *block;
 
3167
        short yco = 20, menuwidth = 120;
 
3168
 
 
3169
        block= uiNewBlock(&curarea->uiblocks, "view3d_edit_armature_parentmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
 
3170
        uiBlockSetButmFunc(block, do_view3d_edit_armature_parentmenu, NULL);
 
3171
        
 
3172
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Make Parent...|Ctrl P",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
3173
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Parent...|Alt P",  0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
 
3174
 
 
3175
        uiBlockSetDirection(block, UI_RIGHT);
 
3176
        uiTextBoundsBlock(block, 60);
 
3177
        return block;
 
3178
}
 
3179
 
2792
3180
static void do_view3d_edit_armaturemenu(void *arg, int event)
2793
3181
{
2794
3182
        switch(event) {
2800
3188
                mainqenter(NKEY, 1);
2801
3189
                break;
2802
3190
        case 3: /* extrude */
2803
 
                extrude_armature();
 
3191
                extrude_armature(0);
2804
3192
                break;
2805
3193
        case 4: /* duplicate */
2806
3194
                duplicate_context_selected();
2809
3197
                delete_context_selected();
2810
3198
                break;
2811
3199
        case 6: /* Shear */
2812
 
                transform('S');
 
3200
                initTransform(TFM_SHEAR, CTX_NONE);
 
3201
                Transform();
2813
3202
                break;
2814
3203
        case 7: /* Warp */
2815
 
                transform('w');
 
3204
                initTransform(TFM_WARP, CTX_NONE);
 
3205
                Transform();
 
3206
        case 10: /* forked! */
 
3207
                extrude_armature(1);
 
3208
                break;
 
3209
        case 11: /* clear roll */
 
3210
                auto_align_armature();
2816
3211
                break;
2817
3212
        }
2818
3213
        allqueue(REDRAWVIEW3D, 0);
2820
3215
 
2821
3216
static uiBlock *view3d_edit_armaturemenu(void *arg_unused)
2822
3217
{
 
3218
        bArmature *arm= G.obedit->data;
2823
3219
        uiBlock *block;
2824
3220
        short yco= 0, menuwidth=120;
2825
3221
        
2832
3228
        
2833
3229
        uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
2834
3230
        uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
 
3231
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");
2835
3232
        uiDefIconTextBlockBut(block, view3d_edit_snapmenu, NULL, ICON_RIGHTARROW_THIN, "Snap", 0, yco-=20, 120, 19, "");
 
3233
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Bone Roll Angle|Ctrl N",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 11, "");
2836
3234
        
2837
3235
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2838
3236
 
2839
3237
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude|E",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");
2840
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D",                              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
 
3238
        if(arm->flag & ARM_MIRROR_EDIT)
 
3239
                uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Extrude Forked|Shift E", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 10, "");
 
3240
                
 
3241
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Duplicate|Shift D",              0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 4, "");
2841
3242
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Delete|X",                               0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
2842
3243
        
2843
3244
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2844
 
 
2845
 
        uiDefIconTextBlockBut(block, view3d_edit_mirrormenu, NULL, ICON_RIGHTARROW_THIN, "Mirror", 0, yco-=20, menuwidth, 19, "");      
2846
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Shear|Ctrl S",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 6, "");
2847
 
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Warp|Shift W",                           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
 
3245
        
 
3246
        uiDefIconTextBlockBut(block, view3d_edit_armature_parentmenu, NULL, ICON_RIGHTARROW_THIN, "Parent", 0, yco-=20, 120, 19, "");
2848
3247
 
2849
3248
        if(curarea->headertype==HEADERTOP) {
2850
3249
                uiBlockSetDirection(block, UI_DOWN);
2896
3295
        return block;
2897
3296
}
2898
3297
 
2899
 
static void do_view3d_pose_armaturemenu(void *arg, int event)
2900
 
{
2901
 
        switch(event) {
2902
 
        
2903
 
        case 0: /* transform properties */
2904
 
                mainqenter(NKEY, 1);
2905
 
                break;
2906
 
        case 1: /* copy current pose */
2907
 
                copy_posebuf();
2908
 
                break;
2909
 
        case 2: /* paste pose */
2910
 
                paste_posebuf(0);
2911
 
                break;
2912
 
        case 3: /* paste flipped pose */
2913
 
                paste_posebuf(1);
2914
 
                break;
2915
 
        case 4: /* insert keyframe */
2916
 
                common_insertkey();
2917
 
                break;
2918
 
        }
2919
 
        allqueue(REDRAWVIEW3D, 0);
2920
 
}
2921
 
 
2922
3298
static void do_view3d_pose_armature_showhidemenu(void *arg, int event)
2923
3299
{
2924
3300
        
2954
3330
        return block;
2955
3331
}
2956
3332
 
 
3333
static void do_view3d_pose_armature_ikmenu(void *arg, int event)
 
3334
{
 
3335
        
 
3336
        switch(event) {
 
3337
                 
 
3338
        case 1:
 
3339
                pose_add_IK();
 
3340
                break;
 
3341
        case 2:
 
3342
                pose_clear_IK();
 
3343
                break;
 
3344
        }
 
3345
        allqueue(REDRAWVIEW3D, 0);
 
3346
}
 
3347
 
 
3348
static uiBlock *view3d_pose_armature_ikmenu(void *arg_unused)
 
3349
{
 
3350
        uiBlock *block;
 
3351
        short yco = 20, menuwidth = 120;
 
3352
 
 
3353
        block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armature_ikmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
 
3354
        uiBlockSetButmFunc(block, do_view3d_pose_armature_ikmenu, NULL);
 
3355
        
 
3356
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add IK to Bone...|Ctrl I",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
3357
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear IK...|Alt I",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
 
3358
        
 
3359
        uiBlockSetDirection(block, UI_RIGHT);
 
3360
        uiTextBoundsBlock(block, 60);
 
3361
        return block;
 
3362
}
 
3363
 
 
3364
static void do_view3d_pose_armature_constraintsmenu(void *arg, int event)
 
3365
{
 
3366
        
 
3367
        switch(event) {
 
3368
                 
 
3369
        case 1:
 
3370
                add_constraint(0);
 
3371
                break;
 
3372
        case 2:
 
3373
                pose_clear_constraints();
 
3374
                break;
 
3375
        }
 
3376
        allqueue(REDRAWVIEW3D, 0);
 
3377
}
 
3378
 
 
3379
static uiBlock *view3d_pose_armature_constraintsmenu(void *arg_unused)
 
3380
{
 
3381
        uiBlock *block;
 
3382
        short yco = 20, menuwidth = 120;
 
3383
 
 
3384
        block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armature_constraintsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
 
3385
        uiBlockSetButmFunc(block, do_view3d_pose_armature_constraintsmenu, NULL);
 
3386
        
 
3387
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Add Constraint to Bone...|Ctrl Alt C",                   0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
3388
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear Constraints...|Alt C",                     0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
 
3389
 
 
3390
        uiBlockSetDirection(block, UI_RIGHT);
 
3391
        uiTextBoundsBlock(block, 60);
 
3392
        return block;
 
3393
}
 
3394
 
 
3395
static void do_view3d_pose_armature_motionpathsmenu(void *arg, int event)
 
3396
{
 
3397
        
 
3398
        switch(event) {
 
3399
                 
 
3400
        case 1:
 
3401
                pose_calculate_path(OBACT);
 
3402
                break;
 
3403
        case 2:
 
3404
                pose_clear_paths(OBACT);
 
3405
                break;
 
3406
        }
 
3407
        allqueue(REDRAWVIEW3D, 0);
 
3408
}
 
3409
 
 
3410
static uiBlock *view3d_pose_armature_motionpathsmenu(void *arg_unused)
 
3411
{
 
3412
        uiBlock *block;
 
3413
        short yco = 20, menuwidth = 120;
 
3414
 
 
3415
        block= uiNewBlock(&curarea->uiblocks, "view3d_pose_armature_motionpathsmenu", UI_EMBOSSP, UI_HELV, G.curscreen->mainwin);
 
3416
        uiBlockSetButmFunc(block, do_view3d_pose_armature_motionpathsmenu, NULL);
 
3417
        
 
3418
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Calculate Paths|W",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 1, "");
 
3419
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Clear All Paths|W",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
 
3420
        
 
3421
        uiBlockSetDirection(block, UI_RIGHT);
 
3422
        uiTextBoundsBlock(block, 60);
 
3423
        return block;
 
3424
}
 
3425
 
 
3426
static void do_view3d_pose_armaturemenu(void *arg, int event)
 
3427
{
 
3428
        Object *ob;
 
3429
        ob=OBACT;
 
3430
        
 
3431
        switch(event) {
 
3432
        
 
3433
        case 0: /* transform properties */
 
3434
                mainqenter(NKEY, 1);
 
3435
                break;
 
3436
        case 1: /* copy current pose */
 
3437
                copy_posebuf();
 
3438
                break;
 
3439
        case 2: /* paste pose */
 
3440
                paste_posebuf(0);
 
3441
                break;
 
3442
        case 3: /* paste flipped pose */
 
3443
                paste_posebuf(1);
 
3444
                break;
 
3445
        case 4: /* insert keyframe */
 
3446
                common_insertkey();
 
3447
                break;
 
3448
        case 5:
 
3449
                pose_copy_menu();
 
3450
                break;
 
3451
        case 9:
 
3452
                pose_flip_names();
 
3453
                break;
 
3454
        case 13:
 
3455
                if(ob && (ob->flag & OB_POSEMODE)) {
 
3456
                        bArmature *arm= ob->data;
 
3457
                        if( (arm->drawtype == ARM_B_BONE) || (arm->drawtype == ARM_ENVELOPE)) {
 
3458
                                initTransform(TFM_BONESIZE, CTX_NONE);
 
3459
                                Transform();
 
3460
                                break;
 
3461
                        }
 
3462
                }
 
3463
                break;
 
3464
        }
 
3465
        allqueue(REDRAWVIEW3D, 0);
 
3466
}
 
3467
 
2957
3468
static uiBlock *view3d_pose_armaturemenu(void *arg_unused)
2958
3469
{
2959
3470
        uiBlock *block;
2965
3476
        uiDefIconTextBut(block, BUTM, 1, ICON_MENU_PANEL, "Transform Properties|N", 0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 0, "");
2966
3477
        uiDefIconTextBlockBut(block, view3d_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Transform", 0, yco-=20, 120, 19, "");
2967
3478
        uiDefIconTextBlockBut(block, view3d_pose_armature_transformmenu, NULL, ICON_RIGHTARROW_THIN, "Clear Transform", 0, yco-=20, 120, 19, "");
 
3479
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Scale Envelope Distance|Alt S",                          0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 13, "");
2968
3480
        
2969
3481
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2970
3482
        
2976
3488
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste Pose",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 2, "");
2977
3489
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Paste Flipped Pose",                             0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 3, "");   
2978
3490
 
2979
 
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, 
2980
 
                         menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
3491
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
3492
        
 
3493
        uiDefIconTextBlockBut(block, view3d_pose_armature_motionpathsmenu, NULL, ICON_RIGHTARROW_THIN, "Motion Paths", 0, yco-=20, 120, 19, "");
 
3494
        uiDefIconTextBlockBut(block, view3d_pose_armature_ikmenu, NULL, ICON_RIGHTARROW_THIN, "Inverse Kinematics", 0, yco-=20, 120, 19, "");
 
3495
        uiDefIconTextBlockBut(block, view3d_pose_armature_constraintsmenu, NULL, ICON_RIGHTARROW_THIN, "Constraints", 0, yco-=20, 120, 19, "");
 
3496
        
 
3497
        uiDefBut(block, SEPR, 0, "", 0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
 
3498
        
 
3499
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Flip L/R Names|W",                       0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
 
3500
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Copy Attributes...|Ctrl C",                      0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 5, "");
 
3501
 
 
3502
        
 
3503
        uiDefBut(block, SEPR, 0, "", 0, yco-=6,  menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
2981
3504
        
2982
3505
        uiDefIconTextBlockBut(block, view3d_pose_armature_showhidemenu, 
2983
 
                                                  NULL, ICON_RIGHTARROW_THIN, 
2984
 
                                                  "Show/Hide Bones", 0, yco-=20, 120, 19, "");
2985
 
 
 
3506
                                                  NULL, ICON_RIGHTARROW_THIN,   "Show/Hide Bones", 0, yco-=20, 120, 19, "");
 
3507
        
2986
3508
        if(curarea->headertype==HEADERTOP) {
2987
3509
                uiBlockSetDirection(block, UI_DOWN);
2988
3510
        }
3197
3719
        uiTextBoundsBlock(block, 60);
3198
3720
        return block;
3199
3721
}
 
3722
 
3200
3723
static void do_view3d_faceselmenu(void *arg, int event)
3201
3724
{
3202
3725
        /* code copied from buttons.c :(        
3251
3774
        case 7: /* rotate UVs */
3252
3775
                rotate_uv_tface();
3253
3776
                break;
 
3777
        case 9: /* mirror UVs */
 
3778
                mirror_uv_tface();
 
3779
                break;
3254
3780
        
3255
3781
        }
3256
3782
        allqueue(REDRAWVIEW3D, 0);
3274
3800
 
3275
3801
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Unwrap UVs|U",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 8, "");
3276
3802
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Rotate UVs|R",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 7, "");
 
3803
        uiDefIconTextBut(block, BUTM, 1, ICON_BLANK1, "Mirror UVs|M",           0, yco-=20, menuwidth, 19, NULL, 0.0, 0.0, 1, 9, "");
3277
3804
 
3278
3805
        uiDefBut(block, SEPR, 0, "",                            0, yco-=6, menuwidth, 6, NULL, 0.0, 0.0, 0, 0, "");
3279
3806
        
3300
3827
 
3301
3828
static char *view3d_modeselect_pup(void)
3302
3829
{
 
3830
        Object *ob= OBACT;
3303
3831
        static char string[1024];
3304
3832
        char formatstr[1024];
3305
3833
        char tempstr[1024];
3310
3838
        sprintf(tempstr, formatstr, "Object Mode", V3D_OBJECTMODE_SEL, ICON_OBJECT);
3311
3839
        strcat(string, tempstr);
3312
3840
        
 
3841
        if(ob==NULL) return string;
 
3842
        
3313
3843
        /* if active object is editable */
3314
 
        if (OBACT && ((OBACT->type == OB_MESH) || (OBACT->type == OB_ARMATURE)
3315
 
                || (OBACT->type == OB_CURVE) || (OBACT->type == OB_SURF) || (OBACT->type == OB_FONT)
3316
 
                || (OBACT->type == OB_MBALL) || (OBACT->type == OB_LATTICE))) {
 
3844
        if ( ((ob->type == OB_MESH) || (ob->type == OB_ARMATURE)
 
3845
                || (ob->type == OB_CURVE) || (ob->type == OB_SURF) || (ob->type == OB_FONT)
 
3846
                || (ob->type == OB_MBALL) || (ob->type == OB_LATTICE))) {
3317
3847
                
3318
3848
                sprintf(tempstr, formatstr, "Edit Mode", V3D_EDITMODE_SEL, ICON_EDITMODE_HLT);
3319
3849
                strcat(string, tempstr);
3320
3850
        }
3321
3851
 
3322
 
        if (OBACT && OBACT->type == OB_MESH) {
 
3852
        if (ob->type == OB_MESH) {
3323
3853
        
3324
3854
                sprintf(tempstr, formatstr, "UV Face Select", V3D_FACESELECTMODE_SEL, ICON_FACESEL_HLT);
3325
3855
                strcat(string, tempstr);
3327
3857
                strcat(string, tempstr);
3328
3858
                sprintf(tempstr, formatstr, "Texture Paint", V3D_TEXTUREPAINTMODE_SEL, ICON_TPAINT_HLT);
3329
3859
                strcat(string, tempstr);
3330
 
 
3331
 
        
3332
 
                if ( ((Mesh*)(OBACT->data))->dvert)  {
3333
 
                        sprintf(tempstr, formatstr, "Weight Paint", V3D_WEIGHTPAINTMODE_SEL, ICON_WPAINT_HLT);
3334
 
                        strcat(string, tempstr);
3335
 
                }
 
3860
                sprintf(tempstr, formatstr, "Weight Paint", V3D_WEIGHTPAINTMODE_SEL, ICON_WPAINT_HLT);
 
3861
                strcat(string, tempstr);
3336
3862
        }
3337
3863
 
3338
3864
        
3339
3865
        /* if active object is an armature */
3340
 
        if (OBACT && OBACT->type==OB_ARMATURE) {
 
3866
        if (ob->type==OB_ARMATURE) {
3341
3867
                sprintf(tempstr, formatstr, "Pose Mode", V3D_POSEMODE_SEL, ICON_POSE_HLT);
3342
3868
                strcat(string, tempstr);
3343
3869
        }
3350
3876
{
3351
3877
        static char string[512];
3352
3878
 
3353
 
        strcpy(string, "Draw type:%t"); 
 
3879
        strcpy(string, "Draw type: %t"); 
3354
3880
        strcat(string, "|Bounding Box %x1"); 
3355
3881
        strcat(string, "|Wireframe %x2");
3356
3882
        strcat(string, "|Solid %x3");
3362
3888
{
3363
3889
        static char string[512];
3364
3890
 
3365
 
        strcpy(string, "Pivot:%t"); 
 
3891
        strcpy(string, "Pivot: %t"); 
3366
3892
        strcat(string, "|Bounding Box Center %x0"); 
3367
3893
        strcat(string, "|Median Point %x3");
3368
3894
        strcat(string, "|3D Cursor %x1");
3369
 
        strcat(string, "|Individual Object Centers %x2");
 
3895
        strcat(string, "|Individual Centers %x2");
 
3896
        strcat(string, "|Active Object %x4");
3370
3897
        return (string);
3371
3898
}
3372
3899
 
3373
 
char *propfalloff_pup(void)
 
3900
static char *propfalloff_pup(void)
3374
3901
{
3375
3902
        static char string[512];
3376
3903
 
3377
 
        strcpy(string, "Falloff:%t"); 
3378
 
        strcat(string, "|Sharp Falloff%x0"); 
3379
 
        strcat(string, "|Smooth Falloff%x1");
 
3904
        strcpy(string, "Falloff: %t"); 
 
3905
        strcat(string, "|Smooth Falloff%x0");
 
3906
        strcat(string, "|Sphere Falloff%x1");
 
3907
        strcat(string, "|Root Falloff%x2"); 
 
3908
        strcat(string, "|Sharp Falloff%x3"); 
 
3909
        strcat(string, "|Linear Falloff%x4");
 
3910
        strcat(string, "|Constant, No Falloff%x5");
3380
3911
        return (string);
3381
3912
}
3382
3913
 
3383
3914
 
3384
3915
void do_view3d_buttons(short event)
3385
3916
{
 
3917
        Object *ob= OBACT;
3386
3918
        int bit;
3387
3919
 
3388
3920
        /* watch it: if curarea->win does not exist, check that when calling direct drawing routines */
3408
3940
                        scrarea_queue_headredraw(curarea);
3409
3941
                }
3410
3942
                break;
 
3943
                
3411
3944
        case B_LOCALVIEW:
3412
3945
                if(G.vd->localview) initlocalview();
3413
 
                else endlocalview(curarea);
3414
 
                scrarea_queue_headredraw(curarea);
3415
 
                break;
3416
 
        case B_EDITMODE:
3417
 
                if (G.f & G_VERTEXPAINT) {
3418
 
                        /* Switch off vertex paint */
3419
 
                        G.f &= ~G_VERTEXPAINT;
3420
 
                }
3421
 
                if (G.f & G_WEIGHTPAINT){
3422
 
                        /* Switch off weight paint */
3423
 
                        G.f &= ~G_WEIGHTPAINT;
3424
 
                }
3425
 
#ifdef NAN_TPT
3426
 
                if (G.f & G_TEXTUREPAINT) {
3427
 
                        /* Switch off texture paint */
3428
 
                        G.f &= ~G_TEXTUREPAINT;
3429
 
                }
3430
 
#endif /* NAN_VPT */
3431
 
                if(G.obedit==NULL) {
3432
 
                        enter_editmode();
3433
 
                        BIF_undo_push("Original");      // here, because all over code enter_editmode is abused
3434
 
                }
3435
 
                else exit_editmode(2); // freedata, and undo
3436
 
                scrarea_queue_headredraw(curarea);
3437
 
                break;
3438
 
        case B_POSEMODE:
3439
 
        /*      if (G.obedit){
3440
 
                        error("Unable to perform function in EditMode");
3441
 
                        G.vd->flag &= ~V3D_POSEMODE;
3442
 
                        scrarea_queue_headredraw(curarea);
3443
 
                }
3444
 
                else{
3445
 
                */      
3446
 
                if (G.obpose==NULL) enter_posemode();
3447
 
                else exit_posemode(1);
3448
 
 
3449
 
                allqueue(REDRAWHEADERS, 0); 
3450
 
                
3451
 
                break;
3452
 
        case B_WPAINT:
3453
 
                if (G.f & G_VERTEXPAINT) {
3454
 
                        /* Switch off vertex paint */
3455
 
                        G.f &= ~G_VERTEXPAINT;
3456
 
                }
3457
 
#ifdef NAN_TPT
3458
 
                if ((!(G.f & G_WEIGHTPAINT)) && (G.f & G_TEXTUREPAINT)) {
3459
 
                        /* Switch off texture paint */
3460
 
                        G.f &= ~G_TEXTUREPAINT;
3461
 
                }
3462
 
#endif /* NAN_VPT */
3463
 
                if(G.obedit) {
3464
 
                        error("Unable to perform function in EditMode");
3465
 
                        G.vd->flag &= ~V3D_WEIGHTPAINT;
3466
 
                        scrarea_queue_headredraw(curarea);
3467
 
                }
3468
 
                else if(G.obpose) {
3469
 
                        error("Unable to perform function in PoseMode");
3470
 
                        G.vd->flag &= ~V3D_WEIGHTPAINT;
3471
 
                        scrarea_queue_headredraw(curarea);
3472
 
                }
3473
 
                else set_wpaint();
3474
 
                break;
3475
 
        case B_VPAINT:
3476
 
                if ((!(G.f & G_VERTEXPAINT)) && (G.f & G_WEIGHTPAINT)) {
3477
 
                        G.f &= ~G_WEIGHTPAINT;
3478
 
                }
3479
 
#ifdef NAN_TPT
3480
 
                if ((!(G.f & G_VERTEXPAINT)) && (G.f & G_TEXTUREPAINT)) {
3481
 
                        /* Switch off texture paint */
3482
 
                        G.f &= ~G_TEXTUREPAINT;
3483
 
                }
3484
 
#endif /* NAN_VPT */
3485
 
                if(G.obedit) {
3486
 
                        error("Unable to perform function in EditMode");
3487
 
                        G.vd->flag &= ~V3D_VERTEXPAINT;
3488
 
                        scrarea_queue_headredraw(curarea);
3489
 
                }
3490
 
                else if(G.obpose) {
3491
 
                        error("Unable to perform function in PoseMode");
3492
 
                        G.vd->flag &= ~V3D_VERTEXPAINT;
3493
 
                        scrarea_queue_headredraw(curarea);
3494
 
                }
3495
 
                else set_vpaint();
3496
 
                break;
3497
 
                
3498
 
#ifdef NAN_TPT
3499
 
        case B_TEXTUREPAINT:
3500
 
                if (G.f & G_TEXTUREPAINT) {
3501
 
                        G.f &= ~G_TEXTUREPAINT;
3502
 
                }
3503
3946
                else {
3504
 
                        if (G.obedit) {
3505
 
                                error("Unable to perform function in EditMode");
3506
 
                                G.vd->flag &= ~V3D_TEXTUREPAINT;
3507
 
                        }
3508
 
                        else {
3509
 
                                if (G.f & G_WEIGHTPAINT){
3510
 
                                        /* Switch off weight paint */
3511
 
                                        G.f &= ~G_WEIGHTPAINT;
3512
 
                                }
3513
 
                                if (G.f & G_VERTEXPAINT) {
3514
 
                                        /* Switch off vertex paint */
3515
 
                                        G.f &= ~G_VERTEXPAINT;
3516
 
                                }
3517
 
                                if (G.f & G_FACESELECT) {
3518
 
                                        /* Switch off face select */
3519
 
                                        G.f &= ~G_FACESELECT;
3520
 
                                }
3521
 
                                G.f |= G_TEXTUREPAINT;
3522
 
                                scrarea_queue_headredraw(curarea);
3523
 
                        }
3524
 
                }
3525
 
                break;
3526
 
#endif /* NAN_TPT */
3527
 
 
3528
 
        case B_FACESEL:
3529
 
                if(G.obedit) {
3530
 
                        error("Unable to perform function in EditMode");
3531
 
                        G.vd->flag &= ~V3D_FACESELECT;
3532
 
                        scrarea_queue_headredraw(curarea);
3533
 
                }
3534
 
                else if(G.obpose) {
3535
 
                        error("Unable to perform function in PoseMode");
3536
 
                        G.vd->flag &= ~V3D_FACESELECT;
3537
 
                        scrarea_queue_headredraw(curarea);
3538
 
                }
3539
 
                else set_faceselect();
 
3947
                        endlocalview(curarea);
 
3948
                        /* new layers might need unflushed events events */
 
3949
                        DAG_scene_update_flags(G.scene, G.vd->lay);     // tags all that moves and flushes
 
3950
                }
 
3951
                scrarea_queue_headredraw(curarea);
3540
3952
                break;
3541
3953
                
3542
3954
        case B_VIEWBUT:
3578
3990
                viewmove(1);
3579
3991
                scrarea_queue_headredraw(curarea);
3580
3992
                break;
 
3993
                
3581
3994
        case B_MODESELECT:
3582
 
                if (G.vd->modeselect == V3D_OBJECTMODE_SEL) { 
 
3995
                if (G.vd->modeselect == V3D_OBJECTMODE_SEL) {
 
3996
                        
3583
3997
                        G.vd->flag &= ~V3D_MODE;
3584
3998
                        G.f &= ~G_VERTEXPAINT;          /* Switch off vertex paint */
3585
3999
                        G.f &= ~G_TEXTUREPAINT;         /* Switch off texture paint */
3586
 
                        G.f &= ~G_WEIGHTPAINT;          /* Switch off weight paint */
 
4000
                        if(G.f & G_WEIGHTPAINT) set_wpaint();           /* Switch off weight paint */
3587
4001
                        G.f &= ~G_FACESELECT;           /* Switch off face select */
3588
 
                        if (G.obpose) exit_posemode(1); /* exit posemode */
 
4002
                        if(ob) exit_posemode();         /* exit posemode for active object */
3589
4003
                        if(G.obedit) exit_editmode(2);  /* exit editmode and undo */
3590
 
                } else if (G.vd->modeselect == V3D_EDITMODE_SEL) {
 
4004
                } 
 
4005
                else if (G.vd->modeselect == V3D_EDITMODE_SEL) {
3591
4006
                        if(!G.obedit) {
3592
4007
                                G.vd->flag &= ~V3D_MODE;
3593
4008
                                G.f &= ~G_VERTEXPAINT;          /* Switch off vertex paint */
3594
4009
                                G.f &= ~G_TEXTUREPAINT;         /* Switch off texture paint */
3595
 
                                G.f &= ~G_WEIGHTPAINT;          /* Switch off weight paint */
3596
 
                                if (G.obpose) exit_posemode(1); /* exit posemode */
 
4010
                                if(G.f & G_WEIGHTPAINT) set_wpaint();           /* Switch off weight paint */
3597
4011
                                        
3598
4012
                                enter_editmode();
3599
4013
                                BIF_undo_push("Original");      // here, because all over code enter_editmode is abused
3600
4014
                        }
3601
 
                } else if (G.vd->modeselect == V3D_FACESELECTMODE_SEL) {
 
4015
                } 
 
4016
                else if (G.vd->modeselect == V3D_FACESELECTMODE_SEL) {
3602
4017
                        if ((G.obedit) && (G.f & G_FACESELECT)) {
3603
4018
                                exit_editmode(2); /* exit editmode and undo */
3604
4019
                        } else if ((G.f & G_FACESELECT) && (G.f & G_VERTEXPAINT)) {
3609
4024
                                G.vd->flag &= ~V3D_MODE;
3610
4025
                                G.f &= ~G_VERTEXPAINT;          /* Switch off vertex paint */
3611
4026
                                G.f &= ~G_TEXTUREPAINT;         /* Switch off texture paint */
3612
 
                                G.f &= ~G_WEIGHTPAINT;          /* Switch off weight paint */
3613
 
                                if (G.obpose) exit_posemode(1); /* exit posemode */
 
4027
                                if(G.f & G_WEIGHTPAINT) set_wpaint();           /* Switch off weight paint */
3614
4028
                                if (G.obedit) exit_editmode(2); /* exit editmode and undo */
3615
4029
                                
3616
4030
                                set_faceselect();
3617
4031
                        }
3618
 
                } else if (G.vd->modeselect == V3D_VERTEXPAINTMODE_SEL) {
 
4032
                } 
 
4033
                else if (G.vd->modeselect == V3D_VERTEXPAINTMODE_SEL) {
3619
4034
                        if (!(G.f & G_VERTEXPAINT)) {
3620
4035
                                G.vd->flag &= ~V3D_MODE;
3621
4036
                                G.f &= ~G_TEXTUREPAINT;         /* Switch off texture paint */
3622
 
                                G.f &= ~G_WEIGHTPAINT;          /* Switch off weight paint */
3623
 
                                if (G.obpose) exit_posemode(1); /* exit posemode */
 
4037
                                if(G.f & G_WEIGHTPAINT) set_wpaint();           /* Switch off weight paint */
3624
4038
                                if(G.obedit) exit_editmode(2);  /* exit editmode and undo */
3625
4039
                                        
3626
4040
                                set_vpaint();
3627
4041
                        }
3628
 
                } else if (G.vd->modeselect == V3D_TEXTUREPAINTMODE_SEL) {
 
4042
                } 
 
4043
                else if (G.vd->modeselect == V3D_TEXTUREPAINTMODE_SEL) {
3629
4044
                        if (!(G.f & G_TEXTUREPAINT)) {
3630
4045
                                G.vd->flag &= ~V3D_MODE;
3631
4046
                                G.f &= ~G_VERTEXPAINT;          /* Switch off vertex paint */
3632
 
                                G.f &= ~G_WEIGHTPAINT;          /* Switch off weight paint */
3633
 
                                if (G.obpose) exit_posemode(1); /* exit posemode */
 
4047
                                if(G.f & G_WEIGHTPAINT) set_wpaint();           /* Switch off weight paint */
3634
4048
                                if(G.obedit) exit_editmode(2);  /* exit editmode and undo */
3635
4049
                                        
3636
4050
                                G.f |= G_TEXTUREPAINT;          /* Switch on texture paint flag */
3637
4051
                        }
3638
 
                } else if (G.vd->modeselect == V3D_WEIGHTPAINTMODE_SEL) {
3639
 
                        if (!(G.f & G_WEIGHTPAINT) && (OBACT && OBACT->type == OB_MESH) && ((((Mesh*)(OBACT->data))->dvert))) {
 
4052
                } 
 
4053
                else if (G.vd->modeselect == V3D_WEIGHTPAINTMODE_SEL) {
 
4054
                        if (!(G.f & G_WEIGHTPAINT) && (ob && ob->type == OB_MESH) ) {
3640
4055
                                G.vd->flag &= ~V3D_MODE;
3641
4056
                                G.f &= ~G_VERTEXPAINT;          /* Switch off vertex paint */
3642
4057
                                G.f &= ~G_TEXTUREPAINT;         /* Switch off texture paint */
3643
 
                                if (G.obpose) exit_posemode(1); /* exit posemode */
3644
4058
                                if(G.obedit) exit_editmode(2);  /* exit editmode and undo */
3645
4059
                                
3646
4060
                                set_wpaint();
3647
4061
                        }
3648
 
                } else if (G.vd->modeselect == V3D_POSEMODE_SEL) {
3649
 
                        if (!G.obpose) {
 
4062
                } 
 
4063
                else if (G.vd->modeselect == V3D_POSEMODE_SEL) {
 
4064
                        
 
4065
                        if (ob) {
3650
4066
                                G.vd->flag &= ~V3D_MODE;
3651
4067
                                if(G.obedit) exit_editmode(2);  /* exit editmode and undo */
3652
4068
                                        
3655
4071
                }
3656
4072
                allqueue(REDRAWVIEW3D, 1);
3657
4073
                break;
 
4074
                
3658
4075
        case B_AROUND:
3659
 
                handle_view3d_around();
 
4076
                handle_view3d_around(); // copies to other 3d windows
 
4077
                allqueue(REDRAWVIEW3D, 1);
3660
4078
                break;
3661
4079
                
3662
4080
        case B_SEL_VERT:
3677
4095
                EM_selectmode_set();
3678
4096
                allqueue(REDRAWVIEW3D, 1);
3679
4097
                break;
 
4098
        
 
4099
        case B_MAN_TRANS:
 
4100
                if( (G.qual & LR_SHIFTKEY)==0 || G.vd->twtype==0)
 
4101
                        G.vd->twtype= V3D_MANIP_TRANSLATE;
 
4102
                allqueue(REDRAWVIEW3D, 1);
 
4103
                break;
 
4104
        case B_MAN_ROT:
 
4105
                if( (G.qual & LR_SHIFTKEY)==0 || G.vd->twtype==0)
 
4106
                        G.vd->twtype= V3D_MANIP_ROTATE;
 
4107
                allqueue(REDRAWVIEW3D, 1);
 
4108
                break;
 
4109
        case B_MAN_SCALE:
 
4110
                if( (G.qual & LR_SHIFTKEY)==0 || G.vd->twtype==0)
 
4111
                        G.vd->twtype= V3D_MANIP_SCALE;
 
4112
                allqueue(REDRAWVIEW3D, 1);
 
4113
                break;
3680
4114
                
3681
4115
        default:
3682
4116
 
3706
4140
                                G.vd->layact= G.vd->lay;
3707
4141
                                scrarea_queue_headredraw(curarea);
3708
4142
                        }
 
4143
                        
 
4144
                        if(G.vd->scenelock) handle_view3d_lock();
 
4145
                        
3709
4146
                        scrarea_queue_winredraw(curarea);
3710
4147
                        countall();
 
4148
                        
 
4149
                        /* new layers might need unflushed events events */
 
4150
                        DAG_scene_update_flags(G.scene, G.vd->lay);     // tags all that moves and flushes
3711
4151
 
3712
 
                        if(G.vd->scenelock) handle_view3d_lock();
3713
4152
                        allqueue(REDRAWOOPS, 0);
3714
4153
                }
3715
4154
                break;
3718
4157
 
3719
4158
static void view3d_header_pulldowns(uiBlock *block, short *xcoord)
3720
4159
{
 
4160
        Object *ob= OBACT;
3721
4161
        short xmax, xco= *xcoord;
3722
4162
        
3723
4163
        /* pull down menus */
3740
4180
        
3741
4181
        xmax= GetButStringLength("Select");
3742
4182
        if (G.obedit) {
3743
 
                if (OBACT && OBACT->type == OB_MESH) {
 
4183
                if (ob && ob->type == OB_MESH) {
3744
4184
                        uiDefPulldownBut(block, view3d_select_meshmenu, NULL, "Select", xco,-2, xmax-3, 24, "");
3745
 
                } else if (OBACT && (OBACT->type == OB_CURVE || OBACT->type == OB_SURF)) {
 
4185
                } else if (ob && (ob->type == OB_CURVE || ob->type == OB_SURF)) {
3746
4186
                        uiDefPulldownBut(block, view3d_select_curvemenu, NULL, "Select", xco,-2, xmax-3, 24, "");
3747
 
                } else if (OBACT && OBACT->type == OB_FONT) {
 
4187
                } else if (ob && ob->type == OB_FONT) {
3748
4188
                        uiDefPulldownBut(block, view3d_select_meshmenu, NULL, "Select", xco, -2, xmax-3, 24, "");
3749
 
                } else if (OBACT && OBACT->type == OB_MBALL) {
 
4189
                } else if (ob && ob->type == OB_MBALL) {
3750
4190
                        uiDefPulldownBut(block, view3d_select_metaballmenu, NULL, "Select",     xco,-2, xmax-3, 24, "");
3751
 
                } else if (OBACT && OBACT->type == OB_LATTICE) {
 
4191
                } else if (ob && ob->type == OB_LATTICE) {
3752
4192
                        uiDefPulldownBut(block, view3d_select_latticemenu, NULL, "Select", xco,-2, xmax-3, 24, "");
3753
 
                } else if (OBACT && OBACT->type == OB_ARMATURE) {
 
4193
                } else if (ob && ob->type == OB_ARMATURE) {
3754
4194
                        uiDefPulldownBut(block, view3d_select_armaturemenu, NULL, "Select",     xco,-2, xmax-3, 24, "");
3755
4195
                }
3756
4196
        } else if (G.f & G_FACESELECT) {
3757
 
                if (OBACT && OBACT->type == OB_MESH) {
 
4197
                if (ob && ob->type == OB_MESH) {
3758
4198
                        uiDefPulldownBut(block, view3d_select_faceselmenu, NULL, "Select", xco,-2, xmax-3, 24, "");
3759
4199
                }
3760
 
        } else if (G.obpose) {
3761
 
                if (OBACT && OBACT->type == OB_ARMATURE) {
3762
 
                        uiDefPulldownBut(block, view3d_select_pose_armaturemenu, NULL, "Select", xco,-2, xmax-3, 24, "");
3763
 
                }
3764
4200
        } else if ((G.f & G_VERTEXPAINT) || (G.f & G_TEXTUREPAINT) || (G.f & G_WEIGHTPAINT)) {
3765
4201
                uiDefBut(block, LABEL,0,"", xco, 0, xmax, 20, 0, 0, 0, 0, 0, "");
3766
4202
        } else {
3767
 
                uiDefPulldownBut(block, view3d_select_objectmenu, NULL, "Select",       xco,-2, xmax-3, 24, "");
 
4203
                
 
4204
                if (ob && (ob->flag & OB_POSEMODE))
 
4205
                        uiDefPulldownBut(block, view3d_select_pose_armaturemenu, NULL, "Select", xco,-2, xmax-3, 24, "");
 
4206
                else
 
4207
                        uiDefPulldownBut(block, view3d_select_objectmenu, NULL, "Select",       xco,-2, xmax-3, 24, "");
3768
4208
        }
3769
4209
        xco+= xmax;
3770
4210
        
3771
 
        
3772
4211
        if (G.obedit) {
3773
 
                if (OBACT && OBACT->type == OB_MESH) {
 
4212
                if (ob && ob->type == OB_MESH) {
3774
4213
                        xmax= GetButStringLength("Mesh");
3775
4214
                        uiDefPulldownBut(block, view3d_edit_meshmenu, NULL, "Mesh",     xco,-2, xmax-3, 24, "");
3776
4215
                        xco+= xmax;
3777
 
                } else if (OBACT && OBACT->type == OB_CURVE) {
 
4216
                } else if (ob && ob->type == OB_CURVE) {
3778
4217
                        xmax= GetButStringLength("Curve");
3779
4218
                        uiDefPulldownBut(block, view3d_edit_curvemenu, NULL, "Curve",   xco,-2, xmax-3, 24, "");
3780
4219
                        xco+= xmax;
3781
 
                } else if (OBACT && OBACT->type == OB_SURF) {
 
4220
                } else if (ob && ob->type == OB_SURF) {
3782
4221
                        xmax= GetButStringLength("Surface");
3783
4222
                        uiDefPulldownBut(block, view3d_edit_curvemenu, NULL, "Surface", xco,-2, xmax-3, 24, "");
3784
4223
                        xco+= xmax;
3785
 
                } else if (OBACT && OBACT->type == OB_FONT) {
 
4224
                } else if (ob && ob->type == OB_FONT) {
3786
4225
                        xmax= GetButStringLength("Text");
3787
4226
                        uiDefPulldownBut(block, view3d_edit_textmenu, NULL, "Text",     xco,-2, xmax-3, 24, "");
3788
4227
                        xco+= xmax;
3789
 
                } else if (OBACT && OBACT->type == OB_MBALL) {
 
4228
                } else if (ob && ob->type == OB_MBALL) {
3790
4229
                        xmax= GetButStringLength("Metaball");
3791
4230
                        uiDefPulldownBut(block, view3d_edit_metaballmenu, NULL, "Metaball",     xco,-2, xmax-3, 24, "");
3792
4231
                        xco+= xmax;
3793
 
                } else if (OBACT && OBACT->type == OB_LATTICE) {
 
4232
                } else if (ob && ob->type == OB_LATTICE) {
3794
4233
                        xmax= GetButStringLength("Lattice");
3795
4234
                        uiDefPulldownBut(block, view3d_edit_latticemenu, NULL, "Lattice",       xco,-2, xmax-3, 24, "");
3796
4235
                        xco+= xmax;
3797
 
                } else if (OBACT && OBACT->type == OB_ARMATURE) {
 
4236
                } else if (ob && ob->type == OB_ARMATURE) {
3798
4237
                        xmax= GetButStringLength("Armature");
3799
4238
                        uiDefPulldownBut(block, view3d_edit_armaturemenu, NULL, "Armature",     xco,-2, xmax-3, 24, "");
3800
4239
                        xco+= xmax;
3806
4245
                xco+= xmax;
3807
4246
        } 
3808
4247
        else if (G.f & G_FACESELECT) {
3809
 
                if (OBACT && OBACT->type == OB_MESH) {
 
4248
                if (ob && ob->type == OB_MESH) {
3810
4249
                        xmax= GetButStringLength("Face");
3811
4250
                        uiDefPulldownBut(block, view3d_faceselmenu, NULL, "Face",       xco,-2, xmax-3, 24, "");
3812
4251
                        xco+= xmax;
3813
4252
                }
3814
 
        } else if (G.obpose) {
3815
 
                if (OBACT && OBACT->type == OB_ARMATURE) {
3816
 
                        xmax= GetButStringLength("Armature");
3817
 
                        uiDefPulldownBut(block, view3d_pose_armaturemenu, NULL, "Armature",     xco,-2, xmax-3, 24, "");
3818
 
                        xco+= xmax;
3819
 
                }
3820
4253
        } else {
3821
 
                xmax= GetButStringLength("Object");
3822
 
                uiDefPulldownBut(block, view3d_edit_objectmenu, NULL, "Object", xco,-2, xmax-3, 24, "");
3823
 
                xco+= xmax;
 
4254
                if (ob && (ob->flag & OB_POSEMODE)) {
 
4255
                        xmax= GetButStringLength("Pose");
 
4256
                        uiDefPulldownBut(block, view3d_pose_armaturemenu, NULL, "Pose", xco,-2, xmax-3, 24, "");
 
4257
                        xco+= xmax;
 
4258
                }
 
4259
                else {
 
4260
                        xmax= GetButStringLength("Object");
 
4261
                        uiDefPulldownBut(block, view3d_edit_objectmenu, NULL, "Object", xco,-2, xmax-3, 24, "");
 
4262
                        xco+= xmax;
 
4263
                }
3824
4264
        }
3825
4265
 
3826
4266
        *xcoord= xco;
3829
4269
void view3d_buttons(void)
3830
4270
{
3831
4271
        uiBlock *block;
 
4272
        Object *ob= OBACT;
3832
4273
        int a;
3833
4274
        short xco = 0;
3834
4275
        
3845
4286
 
3846
4287
        uiBlockSetEmboss(block, UI_EMBOSSN);
3847
4288
        if(curarea->flag & HEADER_NO_PULLDOWN) {
3848
 
                uiDefIconButS(block, TOG|BIT|0, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_RIGHT,
 
4289
                uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_RIGHT,
3849
4290
                                xco,2,XIC,YIC-2,
3850
4291
                                &(curarea->flag), 0, 0, 0, 0, "Enables display of pulldown menus");
3851
4292
        } else {
3852
 
                uiDefIconButS(block, TOG|BIT|0, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_DOWN,
 
4293
                uiDefIconButBitS(block, TOG, HEADER_NO_PULLDOWN, B_FLIPINFOMENU, ICON_DISCLOSURE_TRI_DOWN,
3853
4294
                                xco,2,XIC,YIC-2,
3854
4295
                                &(curarea->flag), 0, 0, 0, 0, "Hides pulldown menus");
3855
4296
        }
3864
4305
        
3865
4306
        /* mode */
3866
4307
        G.vd->modeselect = V3D_OBJECTMODE_SEL;
3867
 
        if (G.f & G_WEIGHTPAINT) G.vd->modeselect = V3D_WEIGHTPAINTMODE_SEL;
 
4308
        
 
4309
        if (G.obedit) G.vd->modeselect = V3D_EDITMODE_SEL;
 
4310
        else if(ob && (ob->flag & OB_POSEMODE)) G.vd->modeselect = V3D_POSEMODE_SEL;
 
4311
        else if (G.f & G_WEIGHTPAINT) G.vd->modeselect = V3D_WEIGHTPAINTMODE_SEL;
3868
4312
        else if (G.f & G_VERTEXPAINT) G.vd->modeselect = V3D_VERTEXPAINTMODE_SEL;
3869
4313
        else if (G.f & G_TEXTUREPAINT) G.vd->modeselect = V3D_TEXTUREPAINTMODE_SEL;
3870
4314
        else if(G.f & G_FACESELECT) G.vd->modeselect = V3D_FACESELECTMODE_SEL;
3871
 
        if (G.obpose) G.vd->modeselect = V3D_POSEMODE_SEL;
3872
 
        if (G.obedit) G.vd->modeselect = V3D_EDITMODE_SEL;
3873
4315
                
3874
4316
        G.vd->flag &= ~V3D_MODE;
 
4317
        
 
4318
        /* not sure what the G.vd->flag is useful for now... modeselect is confusing */
3875
4319
        if(G.obedit) G.vd->flag |= V3D_EDITMODE;
 
4320
        if(ob && (ob->flag & OB_POSEMODE)) G.vd->flag |= V3D_POSEMODE;
3876
4321
        if(G.f & G_VERTEXPAINT) G.vd->flag |= V3D_VERTEXPAINT;
3877
4322
        if(G.f & G_WEIGHTPAINT) G.vd->flag |= V3D_WEIGHTPAINT;
3878
 
#ifdef NAN_TPT
3879
4323
        if (G.f & G_TEXTUREPAINT) G.vd->flag |= V3D_TEXTUREPAINT;
3880
 
#endif /* NAN_TPT */
3881
4324
        if(G.f & G_FACESELECT) G.vd->flag |= V3D_FACESELECT;
3882
 
        if(G.obpose){
3883
 
                G.vd->flag |= V3D_POSEMODE;
3884
 
        }
3885
4325
        
3886
4326
        uiDefIconTextButS(block, MENU, B_MODESELECT, (G.vd->modeselect),view3d_modeselect_pup() , 
3887
4327
                                                                                                                                xco,0,126,20, &(G.vd->modeselect), 0, 0, 0, 0, "Mode:");
3899
4339
 
3900
4340
        xco+= XIC+10;
3901
4341
        
3902
 
        uiDefIconButS(block, TOG|BIT|10, B_AROUND, ICON_ALIGN,
 
4342
        uiDefIconButBitS(block, TOG, V3D_ALIGN, B_AROUND, ICON_ALIGN,
3903
4343
                                xco,0,XIC,YIC,
3904
4344
                                &G.vd->flag, 0, 0, 0, 0, "Move object centers only");   
3905
4345
        uiBlockEndAlign(block);
3906
4346
        
3907
4347
        xco+= XIC+8;
 
4348
 
 
4349
        /* Transform widget / manipulators */
 
4350
        uiBlockBeginAlign(block);
 
4351
        uiDefIconButBitS(block, TOG, V3D_USE_MANIPULATOR, B_REDR, ICON_MANIPUL,xco,0,XIC,YIC, &G.vd->twflag, 0, 0, 0, 0, "Use 3d transform manipulator (Ctrl Space)");  
 
4352
        xco+= XIC;
 
4353
        
 
4354
        if(G.vd->twflag & V3D_USE_MANIPULATOR) {
 
4355
                uiDefIconButBitS(block, TOG, V3D_MANIP_TRANSLATE, B_MAN_TRANS, ICON_MAN_TRANS, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Translate manipulator mode (Ctrl Alt G)");
 
4356
                xco+= XIC;
 
4357
                uiDefIconButBitS(block, TOG, V3D_MANIP_ROTATE, B_MAN_ROT, ICON_MAN_ROT, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Rotate manipulator mode (Ctrl Alt R)");
 
4358
                xco+= XIC;
 
4359
                uiDefIconButBitS(block, TOG, V3D_MANIP_SCALE, B_MAN_SCALE, ICON_MAN_SCALE, xco,0,XIC,YIC, &G.vd->twtype, 1.0, 0.0, 0, 0, "Scale manipulator mode (Ctrl Alt S)");
 
4360
                xco+= XIC;
 
4361
        }
 
4362
        uiDefButS(block, MENU, B_NOP, "Orientation%t|Global%x0|Local%x1|Normal%x2|View%x3",xco,0,70,YIC, &G.vd->twmode, 0, 0, 0, 0, "Transform Orientation (Alt Space)");
 
4363
        xco+= 70;
 
4364
        uiBlockEndAlign(block);
 
4365
        xco+= 8;
3908
4366
        
3909
4367
        /* LAYERS */
3910
 
        if(G.vd->localview==0) {
 
4368
        if(G.obedit==NULL && G.vd->localview==0) {
3911
4369
                
3912
4370
                uiBlockBeginAlign(block);
3913
4371
                for(a=0; a<5; a++)
3914
 
                        uiDefButI(block, TOG|BIT|a, B_LAY+a, "",        (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility");
 
4372
                        uiDefButBitI(block, TOG, 1<<a, B_LAY+a, "",     (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility");
3915
4373
                for(a=0; a<5; a++)
3916
 
                        uiDefButI(block, TOG|BIT|(a+10), B_LAY+10+a, "",(short)(xco+a*(XIC/2)), 0,                      XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility");
 
4374
                        uiDefButBitI(block, TOG, 1<<(a+10), B_LAY+10+a, "",(short)(xco+a*(XIC/2)), 0,                   XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility");
3917
4375
                        
3918
4376
                xco+= 5;
3919
4377
                uiBlockBeginAlign(block);
3920
4378
                for(a=5; a<10; a++)
3921
 
                        uiDefButI(block, TOG|BIT|a, B_LAY+a, "",        (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility");
 
4379
                        uiDefButBitI(block, TOG, 1<<a, B_LAY+a, "",     (short)(xco+a*(XIC/2)), (short)(YIC/2),(short)(XIC/2),(short)(YIC/2), &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility");
3922
4380
                for(a=5; a<10; a++)
3923
 
                        uiDefButI(block, TOG|BIT|(a+10), B_LAY+10+a, "",(short)(xco+a*(XIC/2)), 0,                      XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility");
 
4381
                        uiDefButBitI(block, TOG, 1<<(a+10), B_LAY+10+a, "",(short)(xco+a*(XIC/2)), 0,                   XIC/2, (YIC)/2, &(G.vd->lay), 0, 0, 0, 0, "Toggles Layer visibility");
3924
4382
 
3925
4383
                uiBlockEndAlign(block);
3926
4384
                
3931
4389
                xco+= XIC+10;
3932
4390
 
3933
4391
        }
3934
 
        else xco+= (10+1)*(XIC/2)+10;
3935
4392
        
3936
4393
        /* proportional falloff */
3937
4394
        if(G.obedit && (G.obedit->type == OB_MESH || G.obedit->type == OB_CURVE || G.obedit->type == OB_SURF || G.obedit->type == OB_LATTICE)) {
3938
 
                extern int prop_mode;
3939
 
                if(G.f & G_PROPORTIONAL) {
3940
 
                        uiDefIconTextButI(block, ICONTEXTROW,B_REDR, ICON_SHARPCURVE, propfalloff_pup(), xco,0,XIC+10,YIC, &(prop_mode), 0, 1.0, 0, 0, "Proportional Edit Falloff (Hotkey: Shift O) ");
3941
 
                        xco+= XIC+20;
 
4395
                
 
4396
                uiBlockBeginAlign(block);
 
4397
                uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_PROP_OFF, "Proportional %t|Off %x0|On %x1|Connected %x2", xco,0,XIC+10,YIC, &(G.scene->proportional), 0, 1.0, 0, 0, "Proportional Edit Falloff (Hotkey: O) ");
 
4398
                xco+= XIC+10;
 
4399
                
 
4400
                if(G.scene->proportional) {
 
4401
                        uiDefIconTextButS(block, ICONTEXTROW,B_REDR, ICON_SMOOTHCURVE, propfalloff_pup(), xco,0,XIC+10,YIC, &(G.scene->prop_mode), 0.0, 0.0, 0, 0, "Proportional Edit Falloff (Hotkey: Shift O) ");
 
4402
                        xco+= XIC+10;
3942
4403
                }
 
4404
                xco+= 10;
3943
4405
        }
3944
4406
 
3945
4407
        /* selection modus */
3946
4408
        if(G.obedit && (G.obedit->type == OB_MESH)) {
3947
4409
                uiBlockBeginAlign(block);
3948
 
                uiDefIconButS(block, TOG|BIT|0, B_SEL_VERT, ICON_VERTEXSEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Vertex select mode");
3949
 
                xco+= XIC;
3950
 
                uiDefIconButS(block, TOG|BIT|1, B_SEL_EDGE, ICON_EDGESEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Edge select mode");
3951
 
                xco+= XIC;
3952
 
                uiDefIconButS(block, TOG|BIT|2, B_SEL_FACE, ICON_FACESEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Face select mode");
 
4410
                uiDefIconButBitS(block, TOG, SCE_SELECT_VERTEX, B_SEL_VERT, ICON_VERTEXSEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Vertex select mode");
 
4411
                xco+= XIC;
 
4412
                uiDefIconButBitS(block, TOG, SCE_SELECT_EDGE, B_SEL_EDGE, ICON_EDGESEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Edge select mode");
 
4413
                xco+= XIC;
 
4414
                uiDefIconButBitS(block, TOG, SCE_SELECT_FACE, B_SEL_FACE, ICON_FACESEL, xco,0,XIC,YIC, &G.scene->selectmode, 1.0, 0.0, 0, 0, "Face select mode");
3953
4415
                xco+= XIC;
3954
4416
                uiBlockEndAlign(block);
3955
4417
                if(G.vd->drawtype > OB_WIRE) {
3956
 
                        uiDefIconButS(block, TOG|BIT|12, B_REDR, ICON_ORTHO, xco,0,XIC,YIC, &G.vd->flag, 1.0, 0.0, 0, 0, "Limit selection to visible (clipped with depth buffer)");
 
4418
                        uiDefIconButBitS(block, TOG, V3D_ZBUF_SELECT, B_REDR, ICON_ORTHO, xco,0,XIC,YIC, &G.vd->flag, 1.0, 0.0, 0, 0, "Limit selection to visible (clipped with depth buffer)");
3957
4419
                        xco+= XIC;
3958
4420
                }
3959
4421
                xco+= 20;
3961
4423
 
3962
4424
        uiDefIconBut(block, BUT, B_VIEWRENDER, ICON_SCENE_DEHLT, xco,0,XIC,YIC, NULL, 0, 1.0, 0, 0, "Render this window (hold CTRL for anim)");
3963
4425
        
3964
 
        if (G.obpose){
 
4426
        if (ob && (ob->flag & OB_POSEMODE)) {
3965
4427
                xco+= XIC/2;
3966
4428
                if(curarea->headertype==HEADERTOP) {
3967
4429
                        uiDefIconBut(block, BUT, B_ACTCOPY, ICON_COPYUP, 
3968
4430
                                                 xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, 
3969
4431
                                                 "Copies the current pose to the buffer");
3970
 
                        uiSetButLock(G.obpose->id.lib!=0, "Can't edit library data");
 
4432
                        uiSetButLock(ob->id.lib!=0, "Can't edit library data");
3971
4433
                        uiDefIconBut(block, BUT, B_ACTPASTE, ICON_PASTEUP,      
3972
4434
                                                 xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, 
3973
4435
                                                 "Pastes the pose from the buffer");
3979
4441
                        uiDefIconBut(block, BUT, B_ACTCOPY, ICON_COPYDOWN,
3980
4442
                                                 xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, 
3981
4443
                                                 "Copies the current pose to the buffer");
3982
 
                        uiSetButLock(G.obpose->id.lib!=0, "Can't edit library data");
 
4444
                        uiSetButLock(ob->id.lib!=0, "Can't edit library data");
3983
4445
                        uiDefIconBut(block, BUT, B_ACTPASTE, ICON_PASTEDOWN,
3984
4446
                                                 xco+=XIC,0,XIC,YIC, 0, 0, 0, 0, 0, 
3985
4447
                                                 "Pastes the pose from the buffer");