ya imprime bien + se puede seleccionar cada foto por separado y
[photoboothMX.git] / mainwindow.cpp
blobf54ae86cb94463d5eec45409e8d044efdbdc4d3e
1 #include "mainwindow.h"
2 #include "ui_mainwindow.h"
3 #include <opencv/cv.h>
4 #include <opencv/highgui.h>
5 #include <QMessageBox>
6 #include <QImage>
7 #include <QDebug>
8 #include "camara.h"
9 #include <QTimer>
10 #include <QList>
11 #include <QLabel>
12 //#include <QDesktopWidget>
13 #include "milabel.h"
14 #include <QPrinter>
15 #include <QPainter>
16 //#include <qrea
18 // importante ui->label->setPixmap(QPixmap::fromImage(qimg));
19 using namespace cv;
21 MainWindow::MainWindow(QWidget *parent) :
22 QMainWindow(parent),
23 ui(new Ui::MainWindow)
25 //constructor
26 ui->setupUi(this);
28 ui->buttonBox->hide();
30 QTimer* timeer = new QTimer;
31 timi = new QTimer;
33 //parametros fijos
34 fotonum = 1; //este sive como indice para saber en que label se musetra la foto..
35 foto=0;
37 foto1 = new MiLabel();
38 foto2 = new MiLabel();
39 foto3 = new MiLabel();
40 foto4 = new MiLabel();
42 //foto1->setPixmap(QPixmap(":imas/admira"));
43 foto1->setidd(-1);
44 foto2->setidd(-2);
45 foto3->setidd(-3);
46 foto4->setidd(-4);
48 foto1->setParent(ui->filmstrip);
49 foto2->setParent(ui->filmstrip);
50 foto3->setParent(ui->filmstrip);
51 foto4->setParent(ui->filmstrip);
53 foto1->setGeometry(25,23,160,120);
54 foto2->setGeometry(25,171,160,120);
55 foto3->setGeometry(25,317,160,120);
56 foto4->setGeometry(25,462,160,120);
58 //agregar fondos
59 for(int i=0;i<=10;i++)
61 misfondos.append(new MiLabel(ui->scrollAreaFondos));
62 QString pixm;
63 pixm = ":fondos/fondo" + QString::number(i);
64 misfondos.last()->setPixmap(pixm);
65 misfondos.last()->setGeometry(5,(0 + i*120),160,120);
66 misfondos.last()->conmarco(true);
67 misfondos.last()->setidd(i);
70 //agrega el objeto camaru de tipo camara
71 camaru = new camara;
73 //acomoda los widgets en principal
74 ui->verticalLayout_2->addWidget(ui->countdown);
75 ui->verticalLayout_2->addWidget(camaru);
76 ui->verticalLayout_2->addSpacerItem(ui->verticalSpacer);
77 ui->verticalLayout_2->addWidget(ui->buttonBox);
78 ui->verticalLayout_2->addWidget(ui->botonfoto);
81 camaru->setpix(QPixmap(":imas/admira")); //esto es temporal solo para que muestre alguna imagen en cuanto habra el programa
82 camaru->adjustSize();
84 //conecciones debe haber un if y hacer todo esto si abrio bien la camara
86 connect(timeer, SIGNAL(timeout()), camaru, SLOT(newQframe()));
87 timeer->start(60);
89 connect(timi, SIGNAL(timeout()),this, SLOT(aumentaEnSegundo()));
90 connect(this,SIGNAL(yaaa()),this,SLOT(tomafotoReal()));
92 connect(foto1, SIGNAL(seleccionado(int)), this, SLOT(seSelecciono(int)));
93 connect(foto2, SIGNAL(seleccionado(int)), this, SLOT(seSelecciono(int)));
94 connect(foto3, SIGNAL(seleccionado(int)), this, SLOT(seSelecciono(int)));
95 connect(foto4, SIGNAL(seleccionado(int)), this, SLOT(seSelecciono(int)));
99 MainWindow::~MainWindow()
101 delete ui;
104 void MainWindow::on_botonfoto_clicked() //el boton que toma la foto
106 if (camaru->geterror() == 2)
108 ui->buttonBox->hide();
109 camaru->opencam();
112 seg=6; // setea seg a 6 para comenzar cuenta regresiva
113 timi->start(1000); // comienza cuenta regresiva
114 ui->countdown->setText("!!Listos!!");
115 ui->countdown->show();
119 void MainWindow::on_printbut_clicked() //el boton que debe abrir un widget donde muestre la vista previa de las fotos yyy un boton para imprimirles o descartar.
122 foto1->conmarco(false); foto2->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);
124 QPrinter* mipdf=new QPrinter();
125 mipdf->setOutputFormat(QPrinter::PdfFormat);
126 mipdf->setOutputFileName("/tmp/impresion.pdf");
127 QPainter painter;
130 //mipdf->setResolution(QPrinter::HighResolution);
131 mipdf->setPageSize(QPrinter::Custom);
132 mipdf->setFullPage(false);
133 mipdf->setPageMargins(3,3,3,4,QPrinter::Millimeter);
134 mipdf->setPaperSize(QSize(55,158),QPrinter::Millimeter);
136 qDebug() << "page rect " << mipdf->pageRect();
137 qDebug() << "paper rect " << mipdf->paperRect();
138 //mipdf->getPageMargins(qreal izq,qreal arriba,qreal derecho,qreal abajo,QPrinter::DevicePixel);
140 if (! painter.begin(mipdf))
142 qWarning("failed to open file, is it writable?");
143 painter.end();
144 }else
146 painter.setWindow(0,0,210,600);
147 ui->filmstrip->render(&painter);
151 void MainWindow::on_butonFullscreen_clicked()
153 setWindowState(Qt::WindowFullScreen);
154 ui->butonFullscreen->hide();
157 void MainWindow::aumentaEnSegundo()
159 seg--;
160 ui->countdown->setText(QString::number(seg));
161 qDebug() << seg;
162 if (seg<=0)
163 emit yaaa();
166 void MainWindow::tomafotoReal()
169 ui->countdown->setText("");
170 timi->stop();
172 foto++;
173 switch(fotonum)
175 case 1: {foto1->setPixmap(camaru->getpix()); camaru->guardImagen("foto" + QString::number(foto) + ".jpg");} break;
176 case 2: {foto2->setPixmap(camaru->getpix()); camaru->guardImagen("foto" + QString::number(foto) + ".jpg");} break;
177 case 3: {foto3->setPixmap(camaru->getpix()); camaru->guardImagen("foto" + QString::number(foto) + ".jpg");} break;
178 case 4: {foto4->setPixmap(camaru->getpix()); camaru->guardImagen("foto" + QString::number(foto) + ".jpg");} break;
179 default:
181 QMessageBox pregunta;
182 pregunta.setText(tr("Ya no quieres las fotos?"));
183 pregunta.setInformativeText(tr("te pasaste de fotos, quieres sobre escribir las actuales?"));
184 pregunta.setStandardButtons(QMessageBox::No | QMessageBox::Yes);
185 pregunta.setDefaultButton(QMessageBox::No);
186 pregunta.setStyleSheet("color: rgb(255, 255, 0);"
187 "background-image: url(:/imas/fondo3);"
188 "background-position: padding;"
189 "background-origin: content;"
190 "font: 75 15pt Bitstream Charter;");
191 pregunta.setParent(this);
192 int ret = pregunta.exec();
193 switch (ret){
194 case QMessageBox::Yes : fotonum=0; break;
195 default: break;
197 } break;
199 fotonum++;
201 switch (fotonum)
203 case 1 : {foto1->conmarco(true); foto2->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);} break;
204 case 2 : {foto2->conmarco(true); foto1->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);} break;
205 case 3 : {foto3->conmarco(true); foto2->conmarco(false); foto1->conmarco(false); foto4->conmarco(false);} break;
206 case 4 : {foto4->conmarco(true); foto2->conmarco(false); foto3->conmarco(false); foto1->conmarco(false);} break;
210 void MainWindow::seSelecciono(const int &id)
212 camaru->relacam();
213 ui->buttonBox->show();
215 switch (id)
217 case -1 : {camaru->setpix(foto1->getpix()); fotonum=1;} break;
218 case -2 : {camaru->setpix(foto2->getpix()); fotonum=2;} break;
219 case -3 : {camaru->setpix(foto3->getpix()); fotonum=3;} break;
220 case -4 : {camaru->setpix(foto4->getpix()); fotonum=4;} break;
223 switch (fotonum)
225 case 1 : {foto1->conmarco(true); foto2->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);} break;
226 case 2 : {foto2->conmarco(true); foto1->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);} break;
227 case 3 : {foto3->conmarco(true); foto2->conmarco(false); foto1->conmarco(false); foto4->conmarco(false);} break;
228 case 4 : {foto4->conmarco(true); foto2->conmarco(false); foto3->conmarco(false); foto1->conmarco(false);} break;
234 void MainWindow::on_buttonBox_accepted()
236 ui->buttonBox->hide();
237 fotonum++;
238 camaru->opencam();
240 switch (fotonum)
242 case 1 : {foto1->conmarco(true); foto2->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);} break;
243 case 2 : {foto2->conmarco(true); foto1->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);} break;
244 case 3 : {foto3->conmarco(true); foto2->conmarco(false); foto1->conmarco(false); foto4->conmarco(false);} break;
245 case 4 : {foto4->conmarco(true); foto2->conmarco(false); foto3->conmarco(false); foto1->conmarco(false);} break;
249 void MainWindow::on_buttonBox_rejected()
251 ui->buttonBox->hide();
252 fotonum++;
253 camaru->opencam();
255 switch (fotonum)
257 case 1 : {foto1->conmarco(true); foto2->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);} break;
258 case 2 : {foto2->conmarco(true); foto1->conmarco(false); foto3->conmarco(false); foto4->conmarco(false);} break;
259 case 3 : {foto3->conmarco(true); foto2->conmarco(false); foto1->conmarco(false); foto4->conmarco(false);} break;
260 case 4 : {foto4->conmarco(true); foto2->conmarco(false); foto3->conmarco(false); foto1->conmarco(false);} break;