Revision: 49670
          
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=49670
Author:   campbellbarton
Date:     2012-08-07 17:20:21 +0000 (Tue, 07 Aug 2012)
Log Message:
-----------
select linked
- dupligroup now only selects objects with dupligroup enabled.
- selected onjects are skipped, this way and undo push wont happen if no new 
objects are selected.

also minor edits to node view all/selected

Modified Paths:
--------------
    trunk/blender/source/blender/editors/object/object_select.c
    trunk/blender/source/blender/editors/space_node/node_view.c

Modified: trunk/blender/source/blender/editors/object/object_select.c
===================================================================
--- trunk/blender/source/blender/editors/object/object_select.c 2012-08-07 
16:59:39 UTC (rev 49669)
+++ trunk/blender/source/blender/editors/object/object_select.c 2012-08-07 
17:20:21 UTC (rev 49670)
@@ -236,11 +236,13 @@
 
        CTX_DATA_BEGIN (C, Base *, base, visible_bases)
        {
-               if (base->object->data == obdata) {
-                       base->flag |= SELECT;
-                       base->object->flag = base->flag;
+               if ((base->flag & SELECT) == 0) {
+                       if (base->object->data == obdata) {
+                               base->flag |= SELECT;
+                               base->object->flag = base->flag;
 
-                       changed = TRUE;
+                               changed = TRUE;
+                       }
                }
        }
        CTX_DATA_END;
@@ -254,50 +256,56 @@
 
        CTX_DATA_BEGIN (C, Base *, base, visible_bases)
        {
-               Object *ob = base->object;
-               Material *mat1;
-               int a, b;
+               if ((base->flag & SELECT) == 0) {
+                       Object *ob = base->object;
+                       Material *mat1;
+                       int a, b;
 
-               for (a = 1; a <= ob->totcol; a++) {
-                       mat1 = give_current_material(ob, a);
+                       for (a = 1; a <= ob->totcol; a++) {
+                               mat1 = give_current_material(ob, a);
 
-                       if (!use_texture) {
-                               if (mat1 == mat) {
-                                       base->flag |= SELECT;
-                                       changed = TRUE;
+                               if (!use_texture) {
+                                       if (mat1 == mat) {
+                                               base->flag |= SELECT;
+                                               changed = TRUE;
+                                       }
                                }
-                       }
-                       else if (mat1 && use_texture) {
-                               for (b = 0; b < MAX_MTEX; b++) {
-                                       if (mat1->mtex[b]) {
-                                               if (tex == mat1->mtex[b]->tex) {
-                                                       base->flag |= SELECT;
-                                                       changed = TRUE;
-                                                       break;
+                               else if (mat1 && use_texture) {
+                                       for (b = 0; b < MAX_MTEX; b++) {
+                                               if (mat1->mtex[b]) {
+                                                       if (tex == 
mat1->mtex[b]->tex) {
+                                                               base->flag |= 
SELECT;
+                                                               changed = TRUE;
+                                                               break;
+                                                       }
                                                }
                                        }
                                }
                        }
+
+                       base->object->flag = base->flag;
                }
-
-               base->object->flag = base->flag;
        }
        CTX_DATA_END;
 
        return changed;
 }
 
-static int object_select_all_by_dup_group(bContext *C, Group *dup_group)
+static int object_select_all_by_dup_group(bContext *C, Object *ob)
 {
        int changed = FALSE;
+       Group *dup_group = (ob->transflag & OB_DUPLIGROUP) ? ob->dup_group : 
NULL;
 
        CTX_DATA_BEGIN (C, Base *, base, visible_bases)
        {
-               if (base->object->dup_group == dup_group) {
-                       base->flag |= SELECT;
-                       base->object->flag = base->flag;
+               if ((base->flag & SELECT) == 0) {
+                       Group *dup_group_other = (base->object->transflag & 
OB_DUPLIGROUP) ? base->object->dup_group : NULL;
+                       if (dup_group == dup_group_other) {
+                               base->flag |= SELECT;
+                               base->object->flag = base->flag;
 
-                       changed = TRUE;
+                               changed = TRUE;
+                       }
                }
        }
        CTX_DATA_END;
@@ -311,25 +319,27 @@
 
        CTX_DATA_BEGIN (C, Base *, base, visible_bases)
        {
-               /* loop through other, then actives particles*/
-               ParticleSystem *psys;
-               ParticleSystem *psys_act;
+               if ((base->flag & SELECT) == 0) {
+                       /* loop through other, then actives particles*/
+                       ParticleSystem *psys;
+                       ParticleSystem *psys_act;
 
-               for (psys = base->object->particlesystem.first; psys; psys = 
psys->next) {
-                       for (psys_act = ob->particlesystem.first; psys_act; 
psys_act = psys_act->next) {
-                               if (psys->part == psys_act->part) {
-                                       base->flag |= SELECT;
-                                       changed = TRUE;
+                       for (psys = base->object->particlesystem.first; psys; 
psys = psys->next) {
+                               for (psys_act = ob->particlesystem.first; 
psys_act; psys_act = psys_act->next) {
+                                       if (psys->part == psys_act->part) {
+                                               base->flag |= SELECT;
+                                               changed = TRUE;
+                                               break;
+                                       }
+                               }
+
+                               if (base->flag & SELECT) {
                                        break;
                                }
                        }
 
-                       if (base->flag & SELECT) {
-                               break;
-                       }
+                       base->object->flag = base->flag;
                }
-
-               base->object->flag = base->flag;
        }
        CTX_DATA_END;
 
@@ -342,11 +352,13 @@
 
        CTX_DATA_BEGIN (C, Base *, base, visible_bases)
        {
-               if (lib == base->object->id.lib) {
-                       base->flag |= SELECT;
-                       base->object->flag = base->flag;
+               if ((base->flag & SELECT) == 0) {
+                       if (lib == base->object->id.lib) {
+                               base->flag |= SELECT;
+                               base->object->flag = base->flag;
 
-                       changed = TRUE;
+                               changed = TRUE;
+                       }
                }
        }
        CTX_DATA_END;
@@ -360,11 +372,13 @@
 
        CTX_DATA_BEGIN (C, Base *, base, visible_bases)
        {
-               if (base->object->data && lib == ((ID 
*)base->object->data)->lib) {
-                       base->flag |= SELECT;
-                       base->object->flag = base->flag;
+               if ((base->flag & SELECT) == 0) {
+                       if (base->object->data && lib == ((ID 
*)base->object->data)->lib) {
+                               base->flag |= SELECT;
+                               base->object->flag = base->flag;
 
-                       changed = TRUE;
+                               changed = TRUE;
+                       }
                }
        }
        CTX_DATA_END;
@@ -446,7 +460,7 @@
                if (ob->dup_group == NULL)
                        return OPERATOR_CANCELLED;
 
-               changed = object_select_all_by_dup_group(C, ob->dup_group);
+               changed = object_select_all_by_dup_group(C, ob);
        }
        else if (nr == OBJECT_SELECT_LINKED_PARTICLE) {
                if (ob->particlesystem.first == NULL)

Modified: trunk/blender/source/blender/editors/space_node/node_view.c
===================================================================
--- trunk/blender/source/blender/editors/space_node/node_view.c 2012-08-07 
16:59:39 UTC (rev 49669)
+++ trunk/blender/source/blender/editors/space_node/node_view.c 2012-08-07 
17:20:21 UTC (rev 49670)
@@ -60,7 +60,7 @@
 
 /* **************** View All Operator ************** */
 
-static int snode_home(ScrArea *UNUSED(sa), ARegion *ar, SpaceNode *snode, 
const int node_flag)
+static int space_node_view_flag(SpaceNode *snode, ARegion *ar, const int 
node_flag)
 {
        bNode *node;
        rctf cur_new;
@@ -110,11 +110,10 @@
 
 static int node_view_all_exec(bContext *C, wmOperator *UNUSED(op))
 {
-       ScrArea *sa = CTX_wm_area(C);
        ARegion *ar = CTX_wm_region(C);
        SpaceNode *snode = CTX_wm_space_node(C);
        
-       if (snode_home(sa, ar, snode, 0)) {
+       if (space_node_view_flag(snode, ar, 0)) {
                ED_region_tag_redraw(ar);
 
                return OPERATOR_FINISHED;
@@ -141,11 +140,10 @@
 
 static int node_view_selected_exec(bContext *C, wmOperator *UNUSED(op))
 {
-       ScrArea *sa = CTX_wm_area(C);
        ARegion *ar = CTX_wm_region(C);
        SpaceNode *snode = CTX_wm_space_node(C);
 
-       if (snode_home(sa, ar, snode, NODE_SELECT)) {
+       if (space_node_view_flag(snode, ar, NODE_SELECT)) {
                ED_region_tag_redraw(ar);
 
                return OPERATOR_FINISHED;

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to