
#include "Viewer.h"
#include "Case.h"
#include "Grille.h"

#include <QtCore>
#include <QtGui>

#include <QToolButton>
#include <QGridLayout>
#include <QString>
#include <QBrush>
#include <QPainter>


#include <iostream>
using namespace std;

Viewer::Viewer(Grid *_grid, int w, int h, QWidget *parent)
 : QWidget(parent),grid(_grid)
{
	sI = -1, sJ = -1;
	setGeometry(0,0,w,h);

	// load the Pixmaps
	for (unsigned k = 0; k < 10; ++k)
	{
		pixmap[k] = new QPixmap(":/images/nombres/" + QVariant(k).toString() + ".png");
	}

	setBackgroundRole(QPalette::Base);
	setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
	show();
}

void Viewer::paintEvent(QPaintEvent *)
{
	dim = (width() < height() ? width() : height());
	inc = (dim - 6) / 9;       // 6 = espacement de 3px entre chaque bloc
	startX = (width()  - dim) / 2;
	startY = (height() - dim) / 2;

	repaint();
}

void Viewer::resizeEvent(QResizeEvent *event)
{
	if (width() > dim || height() > dim)
	{
		dim = (width() < height() ? width() : height());
		inc = (dim - 6) / 9;       // 6 = espacement de 3px entre chaque bloc
		startX = (width()  - dim) / 2;
		startY = (height() - dim) / 2;
		repaint();
	}
	QWidget::resizeEvent(event);
}

void Viewer::actualize(Grid *ptr)
{
	grid = ptr;
	repaint();
	resize(width(), height());
}

void Viewer::repaint()
{
	QPainter painter(this);
	painter.setRenderHint(QPainter::Antialiasing, true);
	painter.fillRect(startX, startY, dim, dim, QBrush(QColor("#CCC")));

	// placer les cases
	unsigned i=0,j=0;
	for (int x=startX;i<9;++i,x+=inc)
	{
		if (i && !(i % 3) && i < 9)
			x += 3;
		j = 0;
		for (int y=startY;j<9;++j,y+=inc)
		{
			if (j && !(j % 3) && j < 9)
				y += 3;

			unsigned v = grid->value(i,j).val;
			painter.drawPixmap(x, y, inc,inc,**(pixmap + v));
		}
	}
	if (sI != -1 && sJ != -1)
		select(sI,sJ);
}

void Viewer::select(int i, int j)
{
	QPainter painter(this);
	painter.setRenderHint(QPainter::Antialiasing, true);
    painter.setBrush(QColor(50, 100, 220, 200));

    int x, y;
    if (i < 3)
    	x = i*inc;
    else if (x < 6)
    	x = i*inc + 3;
    else
    	x = i*inc + 6;

    if (j < 3)
    	y = j*inc;
    else if (x < 6)
    	y = j*inc + 3;
    else
    	y = j*inc + 6;
	
	sI = i;
	sJ = j;
	//QMessageBox::about(this,"tr", tr("x=%1,y=%2,xm=%3,y%4").arg(x).arg(y).arg(inc+x).arg(inc+y));

	painter.drawRect(x, y,inc+x,inc+y);
}

void Viewer::unproject(const QPoint& p, int& i, int& j)
{
	int x = p.x();
	int y = p.y();
	i = 0, j = 0;
	
	i = x / inc;
	j = y / inc;
}

void Viewer::mousePressEvent(QMouseEvent *event)
{
	if (event->button() == Qt::LeftButton)
	{
		// unproject
		QPoint pos = event->pos();
		int i=0,j=0;
		unproject(pos,i,j);
		// select
		select(i,j);
	}
}



/*
	1/ Faire le pixmap avec kes 81 cases redimenssionnées
	2/ Gerer l'appuie des touches avec QProcessEvent *
	3/ Gerer les petits chiffres pour écrire les probailité de trucs
*/
