style cleanup: follow style guide for formatting of if/for/while loops, and else...
[blender.git] / source / blender / editors / object / object_select.c
index 0e88c84ea2a1076009598fc2072eee9f52403e36..53726d70cf923c68f859f2446e41a17b2007bd40 100644 (file)
@@ -1,6 +1,4 @@
 /*
- * $Id$
- *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
  * This program is free software; you can redistribute it and/or
 
 #include "MEM_guardedalloc.h"
 
+#include "DNA_anim_types.h"
 #include "DNA_group_types.h"
 #include "DNA_material_types.h"
 #include "DNA_modifier_types.h"
 #include "DNA_property_types.h"
 #include "DNA_scene_types.h"
+#include "DNA_armature_types.h"
 
 #include "BLI_math.h"
 #include "BLI_listbase.h"
@@ -49,8 +49,6 @@
 #include "BLI_string.h"
 #include "BLI_utildefines.h"
 
-#include "BLF_api.h"
-
 #include "BKE_context.h"
 #include "BKE_group.h"
 #include "BKE_main.h"
@@ -67,6 +65,7 @@
 
 #include "ED_object.h"
 #include "ED_screen.h"
+#include "ED_keyframing.h"
 
 #include "UI_interface.h"
 #include "UI_resources.h"
@@ -108,7 +107,7 @@ void ED_base_object_activate(bContext *C, Base *base)
        /* sets scene->basact */
        BASACT= base;
        
-       if(base) {
+       if (base) {
                
                /* XXX old signals, remember to handle notifiers now! */
                //              select_actionchannel_by_name(base->object->action, "Object", 1);
@@ -121,6 +120,20 @@ void ED_base_object_activate(bContext *C, Base *base)
 
 /********************** Selection Operators **********************/
 
+static int objects_selectable_poll(bContext *C)
+{
+       /* we don't check for linked scenes here, selection is
+        * still allowed then for inspection of scene */
+       Object *obact= CTX_data_active_object(C);
+
+       if (CTX_data_edit_object(C))
+               return 0;
+       if (obact && obact->mode)
+               return 0;
+       
+       return 1;
+}
+
 /************************ Select by Type *************************/
 
 static int object_select_by_type_exec(bContext *C, wmOperator *op)
@@ -138,7 +151,7 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op)
        }
        
        CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
-               if(base->object->type==obtype) {
+               if (base->object->type==obtype) {
                        ED_base_object_select(base, BA_SELECT);
                }
        }
@@ -152,34 +165,34 @@ static int object_select_by_type_exec(bContext *C, wmOperator *op)
 void OBJECT_OT_select_by_type(wmOperatorType *ot)
 {
        /* identifiers */
-       ot->name= _("Select By Type");
-       ot->description = _("Select all visible objects that are of a type");
-       ot->idname= "OBJECT_OT_select_by_type";
+       ot->name = "Select By Type";
+       ot->description = "Select all visible objects that are of a type";
+       ot->idname = "OBJECT_OT_select_by_type";
        
        /* api callbacks */
-       ot->invoke= WM_menu_invoke;
-       ot->exec= object_select_by_type_exec;
-       ot->poll= ED_operator_objectmode;
+       ot->invoke = WM_menu_invoke;
+       ot->exec = object_select_by_type_exec;
+       ot->poll = objects_selectable_poll;
        
        /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
        
        /* properties */
-       RNA_def_boolean(ot->srna, "extend", FALSE, _("Extend"), _("Extend selection instead of deselecting everything first."));
-       ot->prop= RNA_def_enum(ot->srna, "type", RNA_enum_items_gettexted(object_type_items), 1, _("Type"), "");
+       RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first");
+       ot->prop = RNA_def_enum(ot->srna, "type", object_type_items, 1, "Type", "");
 }
 
 /*********************** Selection by Links *********************/
 
 static EnumPropertyItem prop_select_linked_types[] = {
        //{1, "IPO", 0, "Object IPO", ""}, // XXX depreceated animation system stuff...
-       {2, "OBDATA", 0, N_("Object Data"), ""},
-       {3, "MATERIAL", 0, N_("Material"), ""},
-       {4, "TEXTURE", 0, N_("Texture"), ""},
-       {5, "DUPGROUP", 0, N_("Dupligroup"), ""},
-       {6, "PARTICLE", 0, N_("Particle System"), ""},
-       {7, "LIBRARY", 0, N_("Library"), ""},
-       {8, "LIBRARY_OBDATA", 0, N_("Library (Object Data)"), ""},
+       {2, "OBDATA", 0, "Object Data", ""},
+       {3, "MATERIAL", 0, "Material", ""},
+       {4, "TEXTURE", 0, "Texture", ""},
+       {5, "DUPGROUP", 0, "Dupligroup", ""},
+       {6, "PARTICLE", 0, "Particle System", ""},
+       {7, "LIBRARY", 0, "Library", ""},
+       {8, "LIBRARY_OBDATA", 0, "Library (Object Data)", ""},
        {0, NULL, 0, NULL, NULL}
 };
 
@@ -212,67 +225,67 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
        }
        
        ob= OBACT;
-       if(ob==NULL)
+       if (ob==NULL) 
                BKE_report(op->reports, RPT_ERROR, "No Active Object");
                return OPERATOR_CANCELLED;
        }
        
-       if(nr==1) {     
+       if (nr==1) {    
                        // XXX old animation system
                //ipo= ob->ipo;
                //if(ipo==0) return OPERATOR_CANCELLED;
                return OPERATOR_CANCELLED;
        }
-       else if(nr==2) {
-               if(ob->data==NULL) return OPERATOR_CANCELLED;
+       else if (nr==2) {
+               if (ob->data==NULL) return OPERATOR_CANCELLED;
                obdata= ob->data;
        }
-       else if(nr==3 || nr==4) {
+       else if (nr==3 || nr==4) {
                mat= give_current_material(ob, ob->actcol);
-               if(mat==NULL) return OPERATOR_CANCELLED;
-               if(nr==4) {
-                       if(mat->mtex[ (int)mat->texact ]) tex= mat->mtex[ (int)mat->texact ]->tex;
-                       if(tex==NULL) return OPERATOR_CANCELLED;
+               if (mat==NULL) return OPERATOR_CANCELLED;
+               if (nr==4) {
+                       if (mat->mtex[ (int)mat->texact ]) tex= mat->mtex[ (int)mat->texact ]->tex;
+                       if (tex==NULL) return OPERATOR_CANCELLED;
                }
        }
-       else if(nr==5) {
-               if(ob->dup_group==NULL) return OPERATOR_CANCELLED;
+       else if (nr==5) {
+               if (ob->dup_group==NULL) return OPERATOR_CANCELLED;
        }
-       else if(nr==6) {
-               if(ob->particlesystem.first==NULL) return OPERATOR_CANCELLED;
+       else if (nr==6) {
+               if (ob->particlesystem.first==NULL) return OPERATOR_CANCELLED;
        }
-       else if(nr==7) {
+       else if (nr==7) {
                /* do nothing */
        }
-       else if(nr==8) {
-               if(ob->data==NULL) return OPERATOR_CANCELLED;
+       else if (nr==8) {
+               if (ob->data==NULL) return OPERATOR_CANCELLED;
        }
        else
                return OPERATOR_CANCELLED;
        
        CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
-               if(nr==1) {
+               if (nr==1) {
                                // XXX old animation system
                        //if(base->object->ipo==ipo) base->flag |= SELECT;
                        //changed = 1;
                }
-               else if(nr==2) {
-                       if(base->object->data==obdata) base->flag |= SELECT;
+               else if (nr==2) {
+                       if (base->object->data==obdata) base->flag |= SELECT;
                        changed = 1;
                }
-               else if(nr==3 || nr==4) {
+               else if (nr==3 || nr==4) {
                        ob= base->object;
                        
-                       for(a=1; a<=ob->totcol; a++) {
+                       for (a=1; a<=ob->totcol; a++) {
                                mat1= give_current_material(ob, a);
-                               if(nr==3) {
-                                       if(mat1==mat) base->flag |= SELECT;
+                               if (nr==3) {
+                                       if (mat1==mat) base->flag |= SELECT;
                                        changed = 1;
                                }
-                               else if(mat1 && nr==4) {
-                                       for(b=0; b<MAX_MTEX; b++) {
-                                               if(mat1->mtex[b]) {
-                                                       if(tex==mat1->mtex[b]->tex) {
+                               else if (mat1 && nr==4) {
+                                       for (b=0; b<MAX_MTEX; b++) {
+                                               if (mat1->mtex[b]) {
+                                                       if (tex==mat1->mtex[b]->tex) {
                                                                base->flag |= SELECT;
                                                                changed = 1;
                                                                break;
@@ -282,19 +295,19 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
                                }
                        }
                }
-               else if(nr==5) {
-                       if(base->object->dup_group==ob->dup_group) {
-                                base->flag |= SELECT;
-                                changed = 1;
+               else if (nr==5) {
+                       if (base->object->dup_group==ob->dup_group) {
+                               base->flag |= SELECT;
+                               changed = 1;
                        }
                }
-               else if(nr==6) {
+               else if (nr==6) {
                        /* 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) {
+                       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 = 1;
@@ -307,14 +320,14 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
                                }
                        }
                }
-               else if(nr==7) {
-                       if(ob->id.lib == base->object->id.lib) {
+               else if (nr==7) {
+                       if (ob->id.lib == base->object->id.lib) {
                                base->flag |= SELECT;
                                changed= 1;
                        }
                }
-               else if(nr==8) {
-                       if(base->object->data && ((ID *)ob->data)->lib == ((ID *)base->object->data)->lib) {
+               else if (nr==8) {
+                       if (base->object->data && ((ID *)ob->data)->lib == ((ID *)base->object->data)->lib) {
                                base->flag |= SELECT;
                                changed= 1;
                        }
@@ -334,37 +347,38 @@ static int object_select_linked_exec(bContext *C, wmOperator *op)
 void OBJECT_OT_select_linked(wmOperatorType *ot)
 {
        /* identifiers */
-       ot->name= _("Select Linked");
-       ot->description = _("Select all visible objects that are linked");
-       ot->idname= "OBJECT_OT_select_linked";
+       ot->name = "Select Linked";
+       ot->description = "Select all visible objects that are linked";
+       ot->idname = "OBJECT_OT_select_linked";
        
        /* api callbacks */
-       ot->invoke= WM_menu_invoke;
-       ot->exec= object_select_linked_exec;
-       ot->poll= ED_operator_objectmode;
+       ot->invoke = WM_menu_invoke;
+       ot->exec = object_select_linked_exec;
+       ot->poll = objects_selectable_poll;
        
        /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
        
        /* properties */
-       RNA_def_boolean(ot->srna, "extend", FALSE, _("Extend"), _("Extend selection instead of deselecting everything first."));
-       ot->prop= RNA_def_enum(ot->srna, "type", RNA_enum_items_gettexted(prop_select_linked_types), 0, _("Type"), "");
+       RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first");
+       ot->prop = RNA_def_enum(ot->srna, "type", prop_select_linked_types, 0, "Type", "");
 }
 
 /*********************** Selected Grouped ********************/
 
 static EnumPropertyItem prop_select_grouped_types[] = {
-       {1, "CHILDREN_RECURSIVE", 0, N_("Children"), ""},
-       {2, "CHILDREN", 0, N_("Immediate Children"), ""},
-       {3, "PARENT", 0, N_("Parent"), ""},
-       {4, "SIBLINGS", 0, N_("Siblings"), N_("Shared Parent")},
-       {5, "TYPE", 0, N_("Type"), N_("Shared object type")},
-       {6, "LAYER", 0, N_("Layer"), N_("Shared layers")},
-       {7, "GROUP", 0, N_("Group"), N_("Shared group")},
-       {8, "HOOK", 0, N_("Hook"), ""},
-       {9, "PASS", 0, N_("Pass"), N_("Render pass Index")},
-       {10, "COLOR", 0, N_("Color"), N_("Object Color")},
-       {11, "PROPERTIES", 0, N_("Properties"), N_("Game Properties")},
+       {1, "CHILDREN_RECURSIVE", 0, "Children", ""},
+       {2, "CHILDREN", 0, "Immediate Children", ""},
+       {3, "PARENT", 0, "Parent", ""},
+       {4, "SIBLINGS", 0, "Siblings", "Shared Parent"},
+       {5, "TYPE", 0, "Type", "Shared object type"},
+       {6, "LAYER", 0, "Layer", "Shared layers"},
+       {7, "GROUP", 0, "Group", "Shared group"},
+       {8, "HOOK", 0, "Hook", ""},
+       {9, "PASS", 0, "Pass", "Render pass Index"},
+       {10, "COLOR", 0, "Color", "Object Color"},
+       {11, "PROPERTIES", 0, "Properties", "Game Properties"},
+       {12, "KEYINGSET", 0, "Keying Set", "Objects included in active Keying Set"},
        {0, NULL, 0, NULL, NULL}
 };
 
@@ -400,7 +414,7 @@ static short select_grouped_parent(bContext *C)     /* Makes parent active and de-se
        baspar= object_in_scene(basact->object->parent, scene);
 
        /* can be NULL if parent in other scene */
-       if(baspar && BASE_SELECTABLE(v3d, baspar)) {
+       if (baspar && BASE_SELECTABLE(v3d, baspar)) {
                ED_base_object_select(basact, BA_DESELECT);
                ED_base_object_select(baspar, BA_SELECT);
                ED_base_object_activate(C, baspar);
@@ -478,7 +492,7 @@ static short select_grouped_object_hooks(bContext *C, Object *ob)
        return changed;
 }
 
-/* Select objects woth the same parent as the active (siblings),
+/* Select objects with the same parent as the active (siblings),
  * parent can be NULL also */
 static short select_grouped_siblings(bContext *C, Object *ob)
 {
@@ -555,7 +569,7 @@ static short objects_share_gameprop(Object *a, Object *b)
        bProperty *prop;
        /*make a copy of all its properties*/
 
-       for( prop= a->prop.first; prop; prop = prop->next ) {
+       for ( prop= a->prop.first; prop; prop = prop->next ) {
                if ( get_ob_property(b, prop->name) )
                        return 1;
        }
@@ -576,6 +590,42 @@ static short select_grouped_gameprops(bContext *C, Object *ob)
        return changed;
 }
 
+static short select_grouped_keyingset(bContext *C, Object *UNUSED(ob))
+{
+       KeyingSet *ks = ANIM_scene_get_active_keyingset(CTX_data_scene(C));
+       short changed = 0;
+       
+       /* firstly, validate KeyingSet */
+       if ((ks == NULL) || (ANIM_validate_keyingset(C, NULL, ks) != 0))
+               return 0;
+       
+       /* select each object that Keying Set refers to */
+       // TODO: perhaps to be more in line with the rest of these, we should only take objects 
+       // if the passed in object is included in this too
+       CTX_DATA_BEGIN(C, Base*, base, selectable_bases) 
+       {
+               /* only check for this object if it isn't selected already, to limit time wasted */
+               if ((base->flag & SELECT) == 0) {
+                       KS_Path *ksp;
+                       
+                       /* this is the slow way... we could end up with > 500 items here, 
+                        * with none matching, but end up doing this on 1000 objects...
+                        */
+                       for (ksp = ks->paths.first; ksp; ksp = ksp->next) {
+                               /* if id matches, select then stop looping (match found) */
+                               if (ksp->id == (ID *)base->object) {
+                                       ED_base_object_select(base, BA_SELECT);
+                                       changed = 1;
+                                       break;
+                               }
+                       }
+               }
+       }
+       CTX_DATA_END;
+               
+       return changed;
+}
+
 static int object_select_grouped_exec(bContext *C, wmOperator *op)
 {
        Scene *scene= CTX_data_scene(C);
@@ -594,22 +644,23 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
        }
        
        ob= OBACT;
-       if(ob==NULL) { 
+       if (ob==NULL) { 
                BKE_report(op->reports, RPT_ERROR, "No Active Object");
                return OPERATOR_CANCELLED;
        }
        
-       if(nr==1)               changed |= select_grouped_children(C, ob, 1);
-       else if(nr==2)  changed |= select_grouped_children(C, ob, 0);
-       else if(nr==3)  changed |= select_grouped_parent(C);
-       else if(nr==4)  changed |= select_grouped_siblings(C, ob);
-       else if(nr==5)  changed |= select_grouped_type(C, ob);
-       else if(nr==6)  changed |= select_grouped_layer(C, ob);
-       else if(nr==7)  changed |= select_grouped_group(C, ob);
-       else if(nr==8)  changed |= select_grouped_object_hooks(C, ob);
-       else if(nr==9)  changed |= select_grouped_index_object(C, ob);
-       else if(nr==10) changed |= select_grouped_color(C, ob);
-       else if(nr==11) changed |= select_grouped_gameprops(C, ob);
+       if (nr==1)              changed |= select_grouped_children(C, ob, 1);
+       else if (nr==2) changed |= select_grouped_children(C, ob, 0);
+       else if (nr==3) changed |= select_grouped_parent(C);
+       else if (nr==4) changed |= select_grouped_siblings(C, ob);
+       else if (nr==5) changed |= select_grouped_type(C, ob);
+       else if (nr==6) changed |= select_grouped_layer(C, ob);
+       else if (nr==7) changed |= select_grouped_group(C, ob);
+       else if (nr==8) changed |= select_grouped_object_hooks(C, ob);
+       else if (nr==9) changed |= select_grouped_index_object(C, ob);
+       else if (nr==10)        changed |= select_grouped_color(C, ob);
+       else if (nr==11)        changed |= select_grouped_gameprops(C, ob);
+       else if (nr==12) changed |= select_grouped_keyingset(C, ob);
        
        if (changed) {
                WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C));
@@ -622,21 +673,21 @@ static int object_select_grouped_exec(bContext *C, wmOperator *op)
 void OBJECT_OT_select_grouped(wmOperatorType *ot)
 {
        /* identifiers */
-       ot->name= _("Select Grouped");
-       ot->description = _("Select all visible objects grouped by various properties");
-       ot->idname= "OBJECT_OT_select_grouped";
+       ot->name = "Select Grouped";
+       ot->description = "Select all visible objects grouped by various properties";
+       ot->idname = "OBJECT_OT_select_grouped";
        
        /* api callbacks */
-       ot->invoke= WM_menu_invoke;
-       ot->exec= object_select_grouped_exec;
-       ot->poll= ED_operator_objectmode;
+       ot->invoke = WM_menu_invoke;
+       ot->exec = object_select_grouped_exec;
+       ot->poll = objects_selectable_poll;
        
        /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
        
        /* properties */
-       RNA_def_boolean(ot->srna, "extend", FALSE, _("Extend"), _("Extend selection instead of deselecting everything first."));
-       ot->prop= RNA_def_enum(ot->srna, "type", RNA_enum_items_gettexted(prop_select_grouped_types), 0, _("Type"), "");
+       RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first");
+       ot->prop = RNA_def_enum(ot->srna, "type", prop_select_grouped_types, 0, "Type", "");
 }
 
 /************************* Select by Layer **********************/
@@ -657,7 +708,7 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op)
        }
                
        CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
-               if(base->lay == (1<< (layernum -1)))
+               if (base->lay == (1<< (layernum -1)))
                        ED_base_object_select(base, BA_SELECT);
        }
        CTX_DATA_END;
@@ -671,56 +722,21 @@ static int object_select_by_layer_exec(bContext *C, wmOperator *op)
 void OBJECT_OT_select_by_layer(wmOperatorType *ot)
 {
        /* identifiers */
-       ot->name= _("Select by Layer");
-       ot->description = _("Select all visible objects on a layer");
-       ot->idname= "OBJECT_OT_select_by_layer";
+       ot->name = "Select by Layer";
+       ot->description = "Select all visible objects on a layer";
+       ot->idname = "OBJECT_OT_select_by_layer";
        
        /* api callbacks */
        /*ot->invoke = XXX - need a int grid popup*/
-       ot->exec= object_select_by_layer_exec;
-       ot->poll= ED_operator_objectmode;
+       ot->exec = object_select_by_layer_exec;
+       ot->poll = objects_selectable_poll;
        
        /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
        
        /* properties */
-       RNA_def_boolean(ot->srna, "extend", FALSE, _("Extend"), _("Extend selection instead of deselecting everything first."));
-       RNA_def_int(ot->srna, "layers", 1, 1, 20, _("Layer"), "", 1, 20);
-}
-
-/************************** Select Inverse *************************/
-
-static int object_select_inverse_exec(bContext *C, wmOperator *UNUSED(op))
-{
-       CTX_DATA_BEGIN(C, Base*, base, visible_bases) {
-               if (base->flag & SELECT)
-                       ED_base_object_select(base, BA_DESELECT);
-               else
-                       ED_base_object_select(base, BA_SELECT);
-       }
-       CTX_DATA_END;
-       
-       /* undo? */
-       WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C));
-       
-       return OPERATOR_FINISHED;
-}
-
-void OBJECT_OT_select_inverse(wmOperatorType *ot)
-{
-       
-       /* identifiers */
-       ot->name= _("Select Inverse");
-       ot->description = _("Invert selection of all visible objects");
-       ot->idname= "OBJECT_OT_select_inverse";
-       
-       /* api callbacks */
-       ot->exec= object_select_inverse_exec;
-       ot->poll= ED_operator_objectmode;
-       
-       /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-       
+       RNA_def_boolean(ot->srna, "extend", FALSE, "Extend", "Extend selection instead of deselecting everything first");
+       RNA_def_int(ot->srna, "layers", 1, 1, 20, "Layer", "", 1, 20);
 }
 
 /**************************** (De)select All ****************************/
@@ -754,7 +770,8 @@ static int object_select_all_exec(bContext *C, wmOperator *op)
                case SEL_INVERT:
                        if (base->flag & SELECT) {
                                ED_base_object_select(base, BA_DESELECT);
-                       } else {
+                       }
+                       else {
                                ED_base_object_select(base, BA_SELECT);
                        }
                        break;
@@ -771,16 +788,16 @@ void OBJECT_OT_select_all(wmOperatorType *ot)
 {
        
        /* identifiers */
-       ot->name= _("Select or Deselect All");
-       ot->description = _("Change selection of all visible objects in scene");
-       ot->idname= "OBJECT_OT_select_all";
+       ot->name = "(De)select All";
+       ot->description = "Change selection of all visible objects in scene";
+       ot->idname = "OBJECT_OT_select_all";
        
        /* api callbacks */
-       ot->exec= object_select_all_exec;
-       ot->poll= ED_operator_objectmode;
+       ot->exec = object_select_all_exec;
+       ot->poll = objects_selectable_poll;
        
        /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
 
        WM_operator_properties_select_all(ot);
 }
@@ -790,7 +807,7 @@ void OBJECT_OT_select_all(wmOperatorType *ot)
 static int object_select_same_group_exec(bContext *C, wmOperator *op)
 {
        Group *group;
-       char group_name[32];
+       char group_name[MAX_ID_NAME];
 
        /* passthrough if no objects are visible */
        if (CTX_DATA_COUNT(C, visible_bases) == 0) return OPERATOR_PASS_THROUGH;
@@ -820,18 +837,18 @@ void OBJECT_OT_select_same_group(wmOperatorType *ot)
 {
        
        /* identifiers */
-       ot->name= _("Select Same Group");
-       ot->description = _("Select object in the same group");
-       ot->idname= "OBJECT_OT_select_same_group";
+       ot->name = "Select Same Group";
+       ot->description = "Select object in the same group";
+       ot->idname = "OBJECT_OT_select_same_group";
        
        /* api callbacks */
-       ot->exec= object_select_same_group_exec;
-       ot->poll= ED_operator_objectmode;
+       ot->exec = object_select_same_group_exec;
+       ot->poll = objects_selectable_poll;
        
        /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
 
-       RNA_def_string(ot->srna, "group", "", 32, _("Group"), _("Name of the group to select."));
+       RNA_def_string(ot->srna, "group", "", MAX_ID_NAME, "Group", "Name of the group to select");
 }
 
 /**************************** Select Mirror ****************************/
@@ -843,16 +860,16 @@ static int object_select_mirror_exec(bContext *C, wmOperator *op)
        extend= RNA_boolean_get(op->ptr, "extend");
        
        CTX_DATA_BEGIN(C, Base*, primbase, selected_bases) {
-               char tmpname[32];
+               char tmpname[MAXBONENAME];
 
                flip_side_name(tmpname, primbase->object->id.name+2, TRUE);
                
-               if(strcmp(tmpname, primbase->object->id.name+2)!=0) { /* names differ */
+               if (strcmp(tmpname, primbase->object->id.name+2)!=0) { /* names differ */
                        Object *ob= (Object *)find_id("OB", tmpname);
-                       if(ob) {
+                       if (ob) {
                                Base *secbase= object_in_scene(ob, scene);
 
-                               if(secbase) {
+                               if (secbase) {
                                        ED_base_object_select(secbase, BA_SELECT);
                                }
                        }
@@ -873,78 +890,21 @@ void OBJECT_OT_select_mirror(wmOperatorType *ot)
 {
        
        /* identifiers */
-       ot->name= _("Select Mirror");
-       ot->description = _("Select the Mirror objects of the selected object eg. L.sword -> R.sword");
-       ot->idname= "OBJECT_OT_select_mirror";
+       ot->name = "Select Mirror";
+       ot->description = "Select the Mirror objects of the selected object eg. L.sword -> R.sword";
+       ot->idname = "OBJECT_OT_select_mirror";
        
        /* api callbacks */
-       ot->exec= object_select_mirror_exec;
-       ot->poll= ED_operator_objectmode;
+       ot->exec = object_select_mirror_exec;
+       ot->poll = objects_selectable_poll;
        
        /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
        
-       RNA_def_boolean(ot->srna, "extend", 0, _("Extend"), _("Extend selection instead of deselecting everything first."));
+       RNA_def_boolean(ot->srna, "extend", 0, "Extend", "Extend selection instead of deselecting everything first");
 }
 
 
-static int object_select_name_exec(bContext *C, wmOperator *op)
-{
-       char *name= RNA_string_get_alloc(op->ptr, "name", NULL, 0);
-       short extend= RNA_boolean_get(op->ptr, "extend");
-       short changed = 0;
-
-       if(!extend) {
-               CTX_DATA_BEGIN(C, Base*, base, selectable_bases) {
-                       if(base->flag & SELECT) {
-                               ED_base_object_select(base, BA_DESELECT);
-                               changed= 1;
-                       }
-               }
-               CTX_DATA_END;
-       }
-
-       CTX_DATA_BEGIN(C, Base*, base, selectable_bases) {
-               /* this is a bit dodjy, there should only be ONE object with this name, but library objects can mess this up */
-               if(strcmp(name, base->object->id.name+2)==0) {
-                       ED_base_object_activate(C, base);
-                       ED_base_object_select(base, BA_SELECT);
-                       changed= 1;
-               }
-       }
-       CTX_DATA_END;
-
-       MEM_freeN(name);
-
-       /* undo? */
-       if(changed) {
-               WM_event_add_notifier(C, NC_SCENE|ND_OB_SELECT, CTX_data_scene(C));
-               return OPERATOR_FINISHED;
-       }
-       else {
-               return OPERATOR_CANCELLED;
-       }
-}
-
-void OBJECT_OT_select_name(wmOperatorType *ot)
-{
-
-       /* identifiers */
-       ot->name= _("Select Name");
-       ot->description = _("Select an object with this name");
-       ot->idname= "OBJECT_OT_select_name";
-
-       /* api callbacks */
-       ot->exec= object_select_name_exec;
-       ot->poll= ED_operator_objectmode;
-
-       /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
-
-       RNA_def_string(ot->srna, "name", "", 0, _("Name"), _("Object name to select."));
-       RNA_def_boolean(ot->srna, "extend", 0, _("Extend"), _("Extend selection instead of deselecting everything first."));
-}
-
 /**************************** Select Random ****************************/
 
 static int object_select_random_exec(bContext *C, wmOperator *op)
@@ -977,21 +937,21 @@ static int object_select_random_exec(bContext *C, wmOperator *op)
 void OBJECT_OT_select_random(wmOperatorType *ot)
 {
        /* identifiers */
-       ot->name= _("Select Random");
-       ot->description = _("Set select on random visible objects");
-       ot->idname= "OBJECT_OT_select_random";
+       ot->name = "Select Random";
+       ot->description = "Set select on random visible objects";
+       ot->idname = "OBJECT_OT_select_random";
        
        /* api callbacks */
-       /*ot->invoke= object_select_random_invoke XXX - need a number popup ;*/
+       /*ot->invoke = object_select_random_invoke XXX - need a number popup ;*/
        ot->exec = object_select_random_exec;
-       ot->poll= ED_operator_objectmode;
+       ot->poll = objects_selectable_poll;
        
        /* flags */
-       ot->flag= OPTYPE_REGISTER|OPTYPE_UNDO;
+       ot->flag = OPTYPE_REGISTER|OPTYPE_UNDO;
        
        /* properties */
-       RNA_def_float_percentage(ot->srna, "percent", 50.f, 0.0f, 100.0f, _("Percent"), _("Percentage of objects to select randomly"), 0.f, 100.0f);
-       RNA_def_boolean(ot->srna, "extend", FALSE, _("Extend Selection"), _("Extend selection instead of deselecting everything first."));
+       RNA_def_float_percentage(ot->srna, "percent", 50.f, 0.0f, 100.0f, "Percent", "Percentage of objects to select randomly", 0.f, 100.0f);
+       RNA_def_boolean(ot->srna, "extend", FALSE, "Extend Selection", "Extend selection instead of deselecting everything first");
 }