MIMETypeIconLibrary.st
author Claus Gittinger <cg@exept.de>
Tue, 02 Dec 2003 11:08:47 +0100
changeset 1865 b94668a9243f
parent 1863 15710a9d0dde
child 1869 c6800c75b7d0
permissions -rw-r--r--
rename

"{ Package: 'stx:libview2' }"

Object subclass:#MIMETypeIconLibrary
	instanceVariableNames:''
	classVariableNames:'Icons MatchedIcons'
	poolDictionaries:''
	category:'Interface-Smalltalk'
!


!MIMETypeIconLibrary class methodsFor:'initialization'!

initialize
    self initializeIcons
!

initializeFileTypeIcons
    |resources|

    resources := ResourcePack for:self.

    #(
        "/ internal-type to icon mappings.
        (#directory             'ICON_DIRECTORY'            'tiny_yellow_dir.xpm'            )
        (#directoryOpen         'ICON_DIRECTORY_OPEN'       'tiny_yellow_dir_open.xpm'       )
        (#directoryLocked       'ICON_DIRECTORY_LOCKED'     'tiny_yellow_dir_locked.xpm'     )
        (#directoryLink         'ICON_DIRECTORY_LINK'       'tiny_yellow_dir_link.xpm'       )
        (#directoryNetwork      'ICON_DIRECTORY_NETWORK'    'tiny_yellow_dir_network.xpm'    )
        (#file                  'ICON_FILE'                 'tiny_file_plain.xpm'            )
        (#fileLink              'ICON_FILE_LINK'            'tiny_file_link.xpm'             )
        (#fileLocked            'ICON_FILE_LOCKED'          'tiny_file_lock.xpm'             )
        (#imageFile             'ICON_IMAGE_FILE'           'tiny_file_pix.xpm'              )
        (#textFile              'ICON_TEXT_FILE'            'tiny_file_text.xpm'             )
        (#executableFile        'ICON_EXECUTABLEFILE'       'tiny_file_exec.xpm'             )
        (#deviceFile            'ICON_DEVICE_FILE'          'tiny_file_device.xpm'           )
        (#binaryFile            'ICON_BINARY_FILE'          'tiny_file_binary.xpm'           )
        (#specialFile           'ICON_SPECIALFILE'          'tiny_file_special.xpm'          )

        (#addOnLocked           'ICON_ADDON_LOCKED'         'tiny_addOn_lock.xpm'            )
        (#addOnLinked           'ICON_ADDON_LINKED'         'tiny_addOn_link.xpm'            )

        (#directoryGray         'ICON_DIRECTORY_GRAY'       'tiny_yellow_dir_gray.xpm'       )
        (#directoryOpenGray     'ICON_DIRECTORY_OPEN_GRAY'  'tiny_yellow_dir_open_gray.xpm'  )
     ) do:[:entry |
        |key resource defaultName nm img|

        key := entry at:1.
        resource := entry at:2.
        defaultName := entry at:3.

        resource notNil ifTrue:[
            nm := resources at:resource default:nil.
        ].
        nm isNil ifTrue:[
            nm := 'xpmBitmaps/document_images/' , defaultName
        ].
        Icons at:key put:(Smalltalk imageFromFileNamed:nm forClass:self).
    ]

    "
     self initializeFileTypeIcons
    "
!

initializeIcons
    Icons := Dictionary new.
    MatchedIcons := OrderedCollection new.
    self initializeFileTypeIcons.
    self initializeMimeTypeIcons.

    "
     self initializeIcons
    "

    "Modified: / 1.8.1998 / 17:39:27 / cg"
!

initializeMimeTypeIcons
    #(
        "/ mime-type to icon mappings.
"/        'image/jpeg'                                    'tiny_file_pix.xpm'
"/        'image/gif'                                     'tiny_file_pix.xpm'
"/        'image/tiff'                                    'tiny_file_pix.xpm'
"/        'image/x-xbitmap'                               'tiny_file_pix.xpm'
"/        'image/x-xpixmap'                               'tiny_file_pix.xpm'
"/        'image/x-png'                                   'tiny_file_pix.xpm'
"/        'image/x-photo-cd'                              'tiny_file_pix.xpm'
"/        'image/x-MS-bmp'                                'tiny_file_pix.xpm'
"/        'image/x-rgb'                                   'tiny_file_pix.xpm'
"/        'image/x-portable-pixmap'                       'tiny_file_pix.xpm'
"/        'image/x-portable-graymap'                      'tiny_file_pix.xpm'
"/        'image/x-portable-bitmap'                       'tiny_file_pix.xpm'
"/        'image/x-portable-anymap'                       'tiny_file_pix.xpm'
"/        'image/x-xwindowdump'                           'tiny_file_pix.xpm'
"/        'image/x-cmu-raster'                            'tiny_file_pix.xpm'
"/        'image/x-targa'                                 'tiny_file_pix.xpm'
        'image/*'                                       'tiny_file_pix.xpm'

        "/ misc text ...

        'text/html'                                     'tiny_file_html.xpm'
"/        'text/plain'                                    'tiny_file_text.xpm'
        'text/*'                                        'tiny_file_text.xpm'

        'application/postscript'                        'tiny_file_postscript.xpm'
        'application/pdf'                               'tiny_file_pdf.xpm'
        'application/rtf'                               'tiny_file_rtf.xpm'

        "/ video formats ...

"/        'video/x-sgi-movie'                             'tiny_file_movie.xpm'
"/        'video/x-msvideo'                               'tiny_file_movie.xpm'
"/        'video/quicktime'                               'tiny_file_movie.xpm'
"/        'video/x-mpeg2'                                 'tiny_file_movie.xpm'
"/        'video/mpeg'                                    'tiny_file_movie.xpm'
        'video/*'                                       'tiny_file_movie2.xpm'
        'application/vnd.rn-realmedia'                  'tiny_file_movie2.xpm'

        "/ audio formats ...

"/        'audio/x-pn-realaudio'                          'tiny_file_sound.xpm'
"/        'audio/x-mpeg'                                  'tiny_file_sound.xpm'
"/        'audio/x-mp3'                                   'tiny_file_sound.xpm'
"/        'audio/x-wav'                                   'tiny_file_sound.xpm'
"/        'audio/x-aiff'                                  'tiny_file_sound.xpm'
"/        'audio/basic'                                   'tiny_file_sound.xpm'
"/        'audio/x-shockwave-flash'                       'tiny_file_sound.xpm'
        'audio/*'                                       'tiny_file_sound.xpm'

        "/ misc stuff
        'application/winword'                           'tiny_file_text.xpm'

        "/ binary formats
        'application/binary'                            'tiny_file_binary.xpm'
        'application/library'                           'tiny_file_binary.xpm'
        'application/shared-library'                    'tiny_file_binary.xpm'

        "/ progr. languages
        'application/x-smalltalk-source'                'tiny_file_st.xpm'
        'application/x-smalltalk-source-sif'            'tiny_file_text.xpm'
        'application/x-c-source'                        'tiny_file_text.xpm'
        'application/x-c-header'                        'tiny_file_text.xpm'
        'application/x-cpp-source'                      'tiny_file_text.xpm'
        'application/x-javascript'                      'tiny_file_text.xpm'
        'application/x-java-source'                     'tiny_file_java.xpm'

        'application/x-sh'                              'tiny_file_text.xpm'
        'application/x-csh'                             'tiny_file_text.xpm'
        'application/x-tcl'                             'tiny_file_text.xpm'
        'application/x-perl'                            'tiny_file_text.xpm'
        'application/x-make'                            'tiny_file_text.xpm'
        'application/x-batch-script'                    'tiny_file_text.xpm'
        'application/x-asn1-source'                     'tiny_file_text.xpm'

        "/ compressors / archivers
        'application/x-tar'                           'tiny_file_archive.xpm'
        'application/x-gtar'                          'tiny_file_archive.xpm'
        'application/x-tar-compressed'                'tiny_file_compressed_archive.xpm'
        'application/x-zip-compressed'                'tiny_file_compressed_archive.xpm'
        'application/x-gzip-compressed'               'tiny_file_compressed_archive.xpm'
        'application/x-cpio'                          'tiny_file_archive.xpm'
        'application/x-shar'                          'tiny_file_archive.xpm'
        'application/java-archive'                    'tiny_file_archive.xpm'

        '*'                                           'tiny_file_plain.xpm'
     ) pairWiseDo:[:mimeTypePattern :fileName |
        | nm |

        nm := 'xpmBitmaps/document_images/' , fileName.
        mimeTypePattern includesMatchCharacters ifTrue:[
            MatchedIcons add:(mimeTypePattern-> (Smalltalk imageFromFileNamed:nm forClass:self)).
        ] ifFalse:[    
            Icons at:mimeTypePattern put:(Smalltalk imageFromFileNamed:nm forClass:self).
        ]
    ]

    "
     self initializeIcons
    "
! !

!MIMETypeIconLibrary class methodsFor:'accessing'!

fileTypeIconKeyFor:aFilename
    aFilename isSymbolicLink ifTrue:[
        ^ #symbolicLink.
    ].
    aFilename isDirectory ifTrue:[
        ^ #directory.
    ].
    aFilename isSpecialFile ifTrue:[
        ^ #specialFile.
    ].
    aFilename isExecutableProgram ifTrue:[
        ^ #executableFile
    ].
    ^ #file.
!

iconForKey:mimeTypeOrKey

    ^ Icons at:mimeTypeOrKey ifAbsent:nil.
!

iconForKeyMatching:mimeTypeOrKey

    |icn assoc|

    icn := self iconForKey:mimeTypeOrKey.
    icn notNil ifTrue:[^icn].
    assoc := self  iconForMatchKey:mimeTypeOrKey.
    assoc notNil ifTrue:[^ assoc value].
    ^ nil.
!

iconForMatchKey:matchKey

    ^ MatchedIcons detect:[:assoc | assoc key match:matchKey] ifNone:nil.
!

iconKeyForFile:aFilenameArg
    "given a fileName, return an appropriate icon"

    |aFilename fileType mimeType suffix|

    aFilename := aFilenameArg.

    aFilenameArg isFilename ifTrue:[
        fileType := self fileTypeIconKeyFor:aFilename.
    ] ifFalse:[
        fileType := #file
    ].

    (fileType == #directory) ifFalse:[
        suffix := aFilename suffix.
        (suffix = 'bak' or:[suffix = 'sav']) ifTrue:[
            aFilename := aFilename withoutSuffix.
        ].
        mimeType := MIMETypes mimeTypeForFilename:aFilename.
    ].

    ^ (mimeType ? fileType).
!

iconKeyForRemoteDirectory:aFilenameArg
    "given a fileName, return an appropriate icon"

    ^ #directoryNetwork
! !

!MIMETypeIconLibrary class methodsFor:'documentation'!

version
    ^ '$Header: /cvs/stx/stx/libview2/MIMETypeIconLibrary.st,v 1.6 2003-12-02 10:08:47 cg Exp $'
! !

MIMETypeIconLibrary initialize!