#include "slideshow.h"
#include <QDir>
#include <QPainter>
#include <QPixmap>
#include <QImage>
#include <QTimerEvent>
#include <QPaintEvent>
#include <QImageReader>
#include <QSettings>


SlideShow::SlideShow(QWidget *parent) : QWidget(parent)
{
	resize(parent->size());
	timerId = 0;
}


SlideShow::~SlideShow()
{
}


void SlideShow::showEvent(QShowEvent *se)
{
	index = 0;
	if (timerId)
		killTimer(timerId);
	QSettings settings("dpf.ini", QSettings::IniFormat);
	timerId = startTimer(settings.value("SlideShowSpeed", 2000).toInt());
}


void SlideShow::hideEvent(QHideEvent *he)
{
	if (timerId)
		killTimer(timerId);
	timerId = 0;
}


void SlideShow::timerEvent(QTimerEvent *te)
{
	index++;
	repaint();
}


void SlideShow::keyPressEvent(QKeyEvent *ke)
{
	setStage(-2);
}


void SlideShow::paintEvent(QPaintEvent *pe)
{
	QDir dir("photos/Internal");
	if ( dir.count() < 2 ) { // Return, empty directory
		setStage(-1);
	}
	int firstIndex = index;
	bool found = false;
	while (!found) {
		if (index >= (int)dir.count())
			index = 0;
		QString filename = "photos/Internal/" + dir.entryList()[index];
		if (QFile::exists(filename)) {
			QImageReader iio(filename);
			QSize size = iio.size();
			size.scale(QSize(800,480), Qt::KeepAspectRatio);
			iio.setScaledSize(size);
			iio.setQuality(0);
			QImage img = iio.read();
			if (!img.isNull()) {
				QPixmap pix = pix.fromImage(img);
				QPainter p(this);
				p.setPen(Qt::NoPen);
				p.setBrush(Qt::black);
				p.drawRect(0,0,800,480);
				p.drawPixmap((800 - size.width()) / 2,
						(480 - size.height()) / 2, pix.scaled(size));
				return;
			}
		}
		index++;
		if (index == firstIndex) /* went through directory and no images */
			return;
	}
}

