/* ============================================================
 *
 * This file is a part of kipi-plugins project
 * http://www.kipi-plugins.org
 *
 * Date        : 2007-11-14
 * Description : a kipi plugin to slide images.
 *
 * Copyright (C) 2007 by Valerio Fuoglio <valerio dot fuoglio at gmail dot com>
 *
 * Parts of this code are based on smoothslidesaver by Carsten Weinhold 
 * <carsten dot weinhold at gmx dot de>                                           
 *
 * 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, 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.
 *
 * ============================================================ */

#ifndef IMAGELOADTHREAD_H
#define IMAGELOADTHREAD_H

// QT includes.

#include <tqimage.h>
#include <tqthread.h>
#include <tqwaitcondition.h>
#include <tqmutex.h>
#include <tqvaluelist.h>
#include <tqpair.h>
#include <tqstring.h>
#include <tqobject.h>

namespace KIPISlideShowPlugin
{

class ImageLoadThread : public TQObject, public TQThread
{

Q_OBJECT
  TQ_OBJECT

public:

  ImageLoadThread(TQValueList<TQPair<TQString, int> >& fileList, int width, int height);
    
    void  quit();
    void  requestNewImage();
    bool  grabImage()   { m_imageLock.lock(); return m_haveImages; };
    void  ungrabImage() { m_imageLock.unlock(); };
    bool  ready()       { return m_initialized; };
    const TQImage &image()       { return m_texture; };
    float imageAspect() { return m_textureAspect; };

signals:

    void endOfShow();

protected:

    void run();

    bool loadImage();
    void invalidateCurrentImageName();
    
private:
  
    int                               m_fileIndex;
    TQValueList<TQPair<TQString, int> >  m_fileList;
    
    int                               m_width, m_height;
    
    TQWaitCondition                    m_imageRequest;
    TQMutex                            m_condLock, m_imageLock;
    bool                              m_initialized, m_needImage, m_haveImages, m_quitRequested, m_scanSubdirectories;
    
    float                             m_textureAspect;
    TQImage                            m_texture;
};

}  // NameSpace KIPISlideShowPlugin

#endif // IMAGELOADTHREAD_H
