bl_addon_info --> bl_info
[blender-addons-contrib.git] / object_batch_rename_datablocks.py
1 # ##### BEGIN GPL LICENSE BLOCK #####
2 #
3 #  This program is free software; you can redistribute it and/or
4 #  modify it under the terms of the GNU General Public License
5 #  as published by the Free Software Foundation; either version 2
6 #  of the License, or (at your option) any later version.
7 #
8 #  This program is distributed in the hope that it will be useful,
9 #  but WITHOUT ANY WARRANTY; without even the implied warranty of
10 #  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11 #  GNU General Public License for more details.
12 #
13 #  You should have received a copy of the GNU General Public License
14 #  along with this program; if not, write to the Free Software Foundation,
15 #  Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
16 #
17 # ##### END GPL LICENSE BLOCK #####
18
19 bl_info = {
20     "name": "Batch Rename Datablocks",
21     "author": "tstscr",
22     "version": (1, 0),
23     "blender": (2, 5, 5),
24     "api": 33684,
25     "location": "use the search :)",
26     "description": "Batch renaming of datablocks (e.g. rename materials after objectnames)",
27     "warning": "",
28     "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/"\
29         "Scripts/Object/Batch_Rename_Datablocks",
30     "tracker_url": "http://projects.blender.org/tracker/index.php?"\
31         "func=detail&aid=25242",
32     "category": "Object"}
33
34
35 import bpy
36 from bpy.props import *
37
38 def get_first_material_name(ob):
39     for m_slot in ob.material_slots:
40         if m_slot.material:
41             material_name = m_slot.material.name
42             return material_name
43
44 def get_name(self, ob):
45     if self.naming_base == 'Object':
46         return ob.name
47     
48     if self.naming_base == 'Mesh':
49         if ob.data: return ob.data.name
50         else: return ob.name
51     
52     if self.naming_base == 'Material':
53         material_name = get_first_material_name(ob)
54         if not material_name: return ob.name
55         else: return material_name
56
57     if self.naming_base == 'Custom':
58         return self.rename_custom
59     
60     
61 def rename_datablocks_main(self, context):
62     obs = context.selected_editable_objects
63     for ob in obs:
64         name = get_name(self, ob)
65         
66         if self.rename_object:
67             if (self.rename_use_prefix
68             and self.prefix_object):
69                 ob.name = self.rename_prefix + name
70             else:
71                 ob.name = name
72         
73         if self.rename_data:
74             if (ob.data
75             and ob.data.users == 1):
76                 if (self.rename_use_prefix
77                 and self.prefix_data):
78                     ob.data.name = self.rename_prefix + name
79                 else:
80                     ob.data.name = name
81         
82         if self.rename_material:
83             if ob.material_slots:
84                 for m_slot in ob.material_slots:
85                     if m_slot.material:
86                         if m_slot.material.users == 1:
87                             if (self.rename_use_prefix
88                             and self.prefix_material):
89                                 m_slot.material.name = self.rename_prefix + name
90                             else:
91                                 m_slot.material.name = name
92
93 class OBJECT_OT_batch_rename_datablocks(bpy.types.Operator):
94     '''Batch rename Datablocks'''
95     bl_idname = "object.batch_rename_datablocks"
96     bl_label = "Batch Rename Datablocks"
97     bl_options = {'REGISTER', 'UNDO'}
98     
99     name_origins = [
100                     ('Object', 'Object', 'Object'),
101                     ('Mesh', 'Mesh', 'Mesh'),
102                     ('Material', 'Material', 'Material'),
103                     ('Custom', 'Custom', 'Custom')
104                     ]
105     naming_base = EnumProperty(name='Name after:',
106                                 items=name_origins)
107     rename_custom = StringProperty(name='Custom Name',
108                                 default='New Name',
109                                 description='Rename all with this String')
110     rename_object = BoolProperty(name='Rename Objects',
111                                 default=False,
112                                 description='Rename Objects')
113     rename_data = BoolProperty(name='Rename Data',
114                                 default=True,
115                                 description='Rename Object\'s Data')
116     rename_material = BoolProperty(name='Rename Materials',
117                                 default=True,
118                                 description='Rename Objects\' Materials')
119     rename_use_prefix = BoolProperty(name='Add Prefix',
120                                 default=False,
121                                 description='Prefix Objectnames with first Groups name')
122     rename_prefix = StringProperty(name='Prefix',
123                                 default='',
124                                 description='Prefix name with this string')
125     prefix_object = BoolProperty(name='Object',
126                                 default=True,
127                                 description='Prefix Object Names')
128     prefix_data = BoolProperty(name='Data',
129                                 default=True,
130                                 description='Prefix Data Names')
131     prefix_material = BoolProperty(name='Material',
132                                 default=True,
133                                 description='Prefix Material Names')
134
135     dialog_width = 260
136
137     def draw(self, context):
138         layout = self.layout
139         col = layout.column()
140         col.label(text='Rename after:')
141         
142         row = layout.row()
143         row.prop(self.properties, 'naming_base', expand=True)
144         
145         col = layout.column()
146         col.prop(self.properties, 'rename_custom')
147
148         col.separator()
149         col.label('Datablocks to rename:')
150         col.prop(self.properties, 'rename_object')
151         col.prop(self.properties, 'rename_data')
152         col.prop(self.properties, 'rename_material')
153         
154         col.separator()
155         col.prop(self.properties, 'rename_use_prefix')
156         col.prop(self.properties, 'rename_prefix')
157         
158         row = layout.row()
159         row.prop(self.properties, 'prefix_object')
160         row.prop(self.properties, 'prefix_data')
161         row.prop(self.properties, 'prefix_material')
162         
163         col = layout.column()
164         
165     @classmethod
166     def poll(cls, context):
167         return context.selected_objects != None
168
169     def execute(self, context):
170
171         rename_datablocks_main(self, context)
172         
173         return {'FINISHED'}
174
175     def invoke(self, context, event):
176         wm = context.window_manager
177         wm.invoke_props_dialog(self, self.dialog_width)
178         return {'RUNNING_MODAL'}
179         
180         
181 def register():
182     pass
183 def unregister():
184     pass
185 if __name__ == '__main__':
186     register()