diff --git a/release/scripts/op/image.py b/release/scripts/op/image.py new file mode 100644 index 00000000000..f38385de994 --- /dev/null +++ b/release/scripts/op/image.py @@ -0,0 +1,44 @@ +# ##### BEGIN GPL LICENSE BLOCK ##### +# +# This program is free software; you can redistribute it and/or +# modify it under the terms of the GNU General Public License +# as published by the Free Software Foundation; either version 2 +# of the License, or (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software Foundation, +# Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +# ##### END GPL LICENSE BLOCK ##### + +# + +import bpy + +class SaveDirty(bpy.types.Operator): + '''Select object matching a naming pattern''' + bl_idname = "image.save_dirty" + bl_label = "Save Dirty" + bl_register = True + bl_undo = True + + def execute(self, context): + unique_paths = set() + for image in bpy.data.images: + if image.dirty: + path = bpy.utils.expandpath(image.filename) + if "\\" not in path and "/" not in path: + self.report({'WARNING'}, "Invalid path: " + path) + elif path in unique_paths: + self.report({'WARNING'}, "Path used by more then one image: " + path) + else: + unique_paths.add(path) + image.save(path=path) + return {'FINISHED'} + +bpy.types.register(SaveDirty) \ No newline at end of file diff --git a/release/scripts/ui/space_view3d.py b/release/scripts/ui/space_view3d.py index e33234a153c..2718bf37db2 100644 --- a/release/scripts/ui/space_view3d.py +++ b/release/scripts/ui/space_view3d.py @@ -65,21 +65,25 @@ class VIEW3D_HT_header(bpy.types.Header): row_sub.prop(toolsettings, "mesh_selection_mode", text="", index=2, icon='FACESEL') ''' + if obj: + # Particle edit + if obj.mode == 'PARTICLE_EDIT': + row.prop(toolsettings.particle_edit, "selection_mode", text="", expand=True, toggle=True) - # Particle edit - if obj and obj.mode == 'PARTICLE_EDIT': - row.prop(toolsettings.particle_edit, "selection_mode", text="", expand=True, toggle=True) + # Occlude geometry + if view.viewport_shading in ('SOLID', 'SHADED', 'TEXTURED') and (obj.mode == 'PARTICLE_EDIT' or (obj.mode == 'EDIT' and obj.type == 'MESH')): + row.prop(view, "occlude_geometry", text="") - # Occlude geometry - if obj and view.viewport_shading in ('SOLID', 'SHADED', 'TEXTURED') and (obj.mode == 'PARTICLE_EDIT' or (obj.mode == 'EDIT' and obj.type == 'MESH')): - row.prop(view, "occlude_geometry", text="") - - # Proportional editing - if obj and obj.mode in ('OBJECT', 'EDIT', 'PARTICLE_EDIT'): - row = layout.row(align=True) - row.prop(toolsettings, "proportional_editing", text="", icon_only=True) - if toolsettings.proportional_editing != 'DISABLED': - row.prop(toolsettings, "proportional_editing_falloff", text="", icon_only=True) + # Proportional editing + if obj.mode in ('OBJECT', 'EDIT', 'PARTICLE_EDIT'): + row = layout.row(align=True) + row.prop(toolsettings, "proportional_editing", text="", icon_only=True) + if toolsettings.proportional_editing != 'DISABLED': + row.prop(toolsettings, "proportional_editing_falloff", text="", icon_only=True) + + # paint save + if mode_string == 'PAINT_TEXTURE': + row.operator("image.save_dirty", text="Save Edited") # Snap row = layout.row(align=True)