##
## widget.py
## Login : <uli@pu.smp.net>
## Started on  Tue Sep 14 11:00:16 2010 Uli Fouquet
## $Id$
## 
## Copyright (C) 2010 Uli Fouquet
## 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
##
"""Image file widgets.
"""
from hurry.file import HurryFile
from hurry.file.browser.widget import (
    FileWidgetBase, EncodingFileWidget, DownloadWidget,
    )
from zope.app.form.browser.textwidgets import escape
from zope.app.form.browser.widget import renderElement

class EncodingImageFileWidget(EncodingFileWidget):
    """Stuff actual file data away in form, encoded.
    """
    def _storeFile(self, file_upload):
        # filenames are normally in unicode encoding, while the contents
        # are byte streams. We turn the filename into a bytestream.
        data = '%s\n%s' % (str(file_upload.filename), file_upload.read())
        return data.encode('base64')[:-1]

class ThumbnailWidget(DownloadWidget):
    """An image file widget that displays the data as thumbnail.
    """

    def __call__(self):
        if self._renderedValueSet():
            value = self._data
        else:
            value = self.context.default
        if value == self.context.missing_value:
            return renderElement(
                u'div',
                contents=u'Download not available')
        filename = escape(value.filename)
        return renderElement(
            u'img',
            src=filename,
            contents=None)
