# ##### 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
#
# ##### END GPL LICENSE BLOCK #####

#    <pep8-80 compliant>

#---------------------------------------------#
#    todo
#---------------------------------------------#
'''
- add file selection for single and multiple files
- option to enable/disable fake users
'''

#---------------------------------------------#
#    changelog
#---------------------------------------------#
'''
    "version": (1,2,0)
        - added missing texture types
        - new way to filter file types
        - option for fake user flag

    "version": (1,1,5)
        - changed addon category to Import-Export

    "version": (1,1,4),
        filename will be used as texture name (still limited by stringlength)

    "version": (1,1,3),
        fixed operator and registration
        added tracker and wiki url\

    version": (1,1,2)
        replaced image.new() with image.load()
        changed addon category
        removed some unused/old code

    version":1.11:
        added type arg to texture.new() [L48]
        cleared default filename
'''

#---------------------------------------------#
import bpy
import os
from bpy.props import *

#addon description
bl_info = {
    "name": "import BrushSet",
    "author": "Daniel Grauer (kromar)",
    "version": (1, 2, 0),
    "blender": (2, 64, 0),
    "category": "Import-Export",
    "location": "File > Import > BrushSet",
    "description": "imports all image files from a folder",
    "warning": '', # used for warning icon and text in addons panel
    "wiki_url": "http://wiki.blender.org/index.php/Extensions:2.5/Py/Scripts/Import-Export/BrushSet",
    "tracker_url": "https://developer.blender.org/T25702",
    }

#---------------------------------------------#

#    extension filter (alternative use mimetypes)
ext_list = ['.bmp',
            '.png',
            '.jpg',
            '.jp2',
            '.rgb',
            '.dds',
            '.hdr',
            '.exr',
            '.dpx',
            '.cin',
            '.tga',
            '.tif'];

#---------------------------------------------#

fakeUser = False

def LoadBrushSet(filepath, filename):
    for file in os.listdir(filepath):
        path = (filepath + file)

        #get folder name
        (f1, f2) = os.path.split(filepath)
        (f3, foldername) = os.path.split(f1)

        #    filter files by extensions (filter images)
        for i in ext_list:
            if file.endswith(i):
                print("file: ", file)
                #    create new texture
                texture = bpy.data.textures.new(file, 'IMAGE')
                texture.use_fake_user = fakeUser
                print("texture: ", texture)

                #    now we need to load the image into data
                image = bpy.data.images.load(path)
                image.use_fake_user = fakeUser
                #    image.source = 'FILE' #default is FILE so can remove this
                #    image.filepath = path
                print("image: ", image, " ", path)
                print("texturename: ", texture.name)

                #    and assign the image to the texture
                bpy.data.textures[texture.name].image = image


    print("Brush Set imported!")

#---------------------------------------------#

class BrushSetImporter(bpy.types.Operator):
    '''Load Brush Set'''
    bl_idname = "import_image.brushset"
    bl_label = "Import BrushSet"

    filename = StringProperty(name="File Name", description="filepath", default="", maxlen=1024, options={'ANIMATABLE'}, subtype='NONE')
    filepath = StringProperty(name="File Name", description="filepath", default="", maxlen=1024, options={'ANIMATABLE'}, subtype='NONE')

    def execute(self, context):
        LoadBrushSet(self.properties.filepath, self.properties.filename)
        return {'FINISHED'}

    def invoke(self, context, event):
        wm = context.window_manager
        wm.fileselect_add(self)
        return {'RUNNING_MODAL'}

#---------------------------------------------#

def menu_func(self, context):
    #clear the default name for import
    import_name = ""

    self.layout.operator(BrushSetImporter.bl_idname, text = "Brush Set").filename = import_name


#---------------------------------------------#
#    GUI
#---------------------------------------------#

'''
class Brush_set_UI(bpy.types.Panel):

    bl_space_type ='USER_PREFERENCES'
    bl_label = 'Brush_Path'
    bl_region_type = 'WINDOW'
    bl_options = {'HIDE_HEADER'}

    def draw(self, context):

        scn = context.scene
        layout = self.layout
        column = layout.column(align=True)
        column.label(text='Brush Directory:')
        column.prop(scn,'filepath')
'''

#---------------------------------------------#

def register():
    bpy.utils.register_module(__name__)
    bpy.types.INFO_MT_file_import.append(menu_func)

def unregister():
    bpy.utils.unregister_module(__name__)
    bpy.types.INFO_MT_file_import.remove(menu_func)

if __name__ == "__main__":
    register()