#
#   Python GUI - File references and types - Cocoa
#

from struct import unpack
from Foundation import NSFileTypeForHFSTypeCode, \
    NSFileManager, NSFileHFSCreatorCode, NSFileHFSTypeCode
from GUI.GFiles import FileRef as GFileRef, DirRef, FileType as GFileType

class FileType(GFileType):

    def _ns_file_types(self):
        #  Return list of Cocoa file type specifications matched
        #  by this file type.
        result = []
        mac_type = self._mac_type
        if mac_type:
            result.append(NSFileTypeForHFSTypeCode(mac_type))
        suffix = self._suffix
        if suffix:
            result.append(suffix)
        return result


class FileRef(GFileRef):

    def _set_type(self, file_type):
        creator = file_type.mac_creator
        type = file_type.mac_type
        if creator is not None or type is not None:
            fm = NSFileManager.defaultManager()
            attrs = {}
            if creator is not None:
                attrs[NSFileHFSCreatorCode] = four_char_code(creator)
            if type is not None:
                attrs[NSFileHFSTypeCode] = four_char_code(type)
            #print "FileRef: Setting attributes of %r to %s" % ( ###
            #	self.path, attrs) ###
            fm.changeFileAttributes_atPath_(attrs, self.path)


def four_char_code(chars):
    return unpack(">L", chars)[0]
