src/EditProductTab13.cpp

changeset 467
c5f6f3f1b714
parent 466
68ef2cc3e8d2
child 468
b21da6f583be
--- a/src/EditProductTab13.cpp	Wed Jan 18 17:08:25 2023 +0100
+++ b/src/EditProductTab13.cpp	Fri Jan 20 16:44:08 2023 +0100
@@ -19,17 +19,107 @@
 
 void EditProduct::images_Init()
 {
-	qDebug() << "images_Init()";
+    qDebug() << "images_Init()";
 
 	// Start spinner
-	// Clean old picture areas
-	// Load images data for this product uuid
-	// Show thumbnails on the left.
+
+    /*
+     * Clean old picture areas.
+     */
+
+    /*
+     * Load images data for this product uuid.
+     */
+    if (product->images_count < 0) {
+	QSqlQuery query;
+
+	qDebug() << "  loading data";
+	query.prepare("SELECT * FROM products_pics WHERE uuid=:uuid");
+	query.bindValue(":uuid", product->uuid);
+	query.exec();
+
+	if (query.lastError().isValid()) {
+            qWarning() << "images_init()" << query.lastError();
+            QMessageBox::warning(this, tr("Database error"), tr("MySQL error: %1\n%2\n%3")
+                .arg(query.lastError().nativeErrorCode()).arg(query.lastError().driverText()).arg(query.lastError().databaseText()));
+	}
+	product->images_count = 0;
+
+	while (query.next()) {
+	    Images i;
+	    qDebug() << product->images_count << query.value("pic_data").toByteArray().size();
+	    i.pic_type = query.value("pic_type").toInt();
+	    i.pic_data = query.value("pic_data").toByteArray();
+	    i.pic_comment = query.value("pic_comment").toString();
+	    i.filename = query.value("filename").toString();
+	    i.timestamp = query.value("timestamp").toDateTime();
+	    product->images_list.append(i);
+	    product->images_count++;
+	}
+	qDebug() << "  loaded" << product->images_count << product->images_list.size();
+	if (product->images_count < 1)
+	    product->images_current = -1;
+	else
+	    product->images_current = 0;
+    }
+
+    images_Thumbnails();
+    if (product->images_current >= 0) {
+    	ui->filmStrip->setCurrentRow(product->images_current);
+    }
+    images_Main(product->images_current);
+
 	// If any, show picture 1
 	// Stop spinner
 }
 
 
+/*
+ * Show thumbnails on the left.
+ */
+void EditProduct::images_Thumbnails()
+{
+    QList<QListWidgetItem*> items = ui->filmStrip->selectedItems();
+    foreach(QListWidgetItem * item, items) {
+	delete ui->filmStrip->takeItem(ui->filmStrip->row(item));
+    }
+
+    for (int i = 0; i < product->images_list.size(); i++) {
+	QListWidgetItem* newItem = new QListWidgetItem();
+	QString text = QCoreApplication::translate("PicType", g_prod_pic_types[product->images_list.at(i).pic_type]);
+	if (product->images_list.at(i).filename != "")
+	    text.append("\n" + product->images_list.at(i).filename);
+	if (product->images_list.at(i).pic_comment != "")
+	    text.append("\n" + product->images_list.at(i).pic_comment);
+	// product->images_list.at(i).timestamp
+	newItem->setText(text);
+	newItem->setBackground(QColor(0x45,0x53,0x64));
+
+	QPixmap outPixmap = QPixmap();
+	outPixmap.loadFromData(product->images_list.at(i).pic_data);
+	qDebug() << "  " << outPixmap.width() << "x" << outPixmap.height() << "size" << outPixmap.size() << product->images_list.at(i).filename;
+	if (outPixmap.width() > 320 || outPixmap.height() > 240)
+	    newItem->setIcon(QIcon(outPixmap.scaled(320, 240, Qt::KeepAspectRatio, Qt::SmoothTransformation)));
+	else
+	    newItem->setIcon(QIcon(outPixmap));
+
+	ui->filmStrip->addItem(newItem);
+    }
+}
+
+
+void EditProduct::images_Main(int id)
+{
+    qDebug() << "  Main(" << id << ")";
+
+    ui->prevImage->setEnabled((product->images_count > 0 && product->images_current > 0) ? true:false);
+    ui->nextImage->setEnabled((product->images_count > 0 && (product->images_current + 1) < product->images_count) ? true:false);
+    ui->downloadImage->setEnabled((product->images_count > 0) ? true:false);
+    ui->printImage->setEnabled((product->images_count > 0) ? true:false);
+    ui->delImage->setEnabled((product->images_count > 0) ? true:false);
+}
+
+
 void EditProduct::addImage_clicked()
 {
     QString fileName;
@@ -42,7 +132,7 @@
     /* Only a few image formats are valid */
     QStringList mimeTypeFilters ({ "image/bmp", "image/gif", "image/jpeg", "image/png", "image/svg+xml" });
     dialog1.setMimeTypeFilters(mimeTypeFilters);
-    dialog1.setNameFilter("Images (*.bmp *.BMP *.gif *.GIF *.jpg *.JPG *.png *.PNG *.svg *.SVG)");
+    dialog1.setNameFilter("Images (*.bmp *.BMP *.gif *.GIF *.jpg *.JPG *.jpeg *.JPEG *.png *.PNG *.svg *.SVG)");
     dialog1.setAcceptMode(QFileDialog::AcceptOpen);
 //    dialog1.setOption(QFileDialog::DontUseNativeDialog);
     if (dialog1.exec() != QDialog::Accepted)
@@ -66,7 +156,7 @@
 
     QBuffer buffer(&imageByteArray);
     buffer.open(QIODevice::WriteOnly);
-    newImage.save(&buffer, "PNG");
+    newImage.save(&buffer, "PNG");	/* Convert to lossless .png format. */
 
     /*
      * Now that we have selected a valid image, create a new dialog so
@@ -132,10 +222,10 @@
     query.prepare("INSERT INTO products_pics SET uuid=:uuid, pic_type=:pic_type, pic_data=:pic_data, "
 		  "pic_comment=:pic_comment, filename=:filename, timestamp=:timestamp");
     query.bindValue(":uuid", product->uuid);
-    query.bindValue(":pic_type", g_prod_pic_types[typeEdit->currentIndex()]);
+    query.bindValue(":pic_type", typeEdit->currentIndex());
     query.bindValue(":pic_data", imageByteArray);
     query.bindValue(":pic_comment", commentEdit->text());
-    query.bindValue(":filename", fi.fileName());
+    query.bindValue(":filename", fi.completeBaseName() + ".png");	/* The image is converted to .png */
     query.bindValue(":timestamp", fi.lastModified());
 
     query.exec();
@@ -151,3 +241,54 @@
 }
 
 
+void EditProduct::delImage_clicked()
+{
+    qDebug() << "delImage_clicked()" << product->images_current << ui->filmStrip->currentRow();
+}
+
+
+void EditProduct::nextImage_clicked()
+{
+    qDebug() << "nextImage_clicked()" << product->images_current << ui->filmStrip->currentRow();
+
+    if (product->images_count >= 0) {
+	if ((product->images_current + 1) < product->images_count) {
+	    product->images_current++;
+	    ui->filmStrip->setCurrentRow(product->images_current);
+	    images_Main(product->images_current);
+	}
+    }
+}
+
+
+void EditProduct::prevImage_clicked()
+{
+    qDebug() << "prevImage_clicked()" << product->images_current << ui->filmStrip->currentRow();
+
+    if (product->images_count >= 0) {
+	if (product->images_current > 0) {
+	    product->images_current--;
+	    ui->filmStrip->setCurrentRow(product->images_current);
+	    images_Main(product->images_current);
+	}
+    }
+}
+
+
+void EditProduct::downloadImage_clicked()
+{
+    qDebug() << "downloadImage_clicked()" << product->images_current << ui->filmStrip->currentRow();
+}
+
+
+void EditProduct::printImage_clicked()
+{
+    qDebug() << "printImage_clicked()" << product->images_current << ui->filmStrip->currentRow();
+}
+
+
+void EditProduct::selectImage_clicked(int val)
+{
+    qDebug() << "selectImage_clicked()" << val << product->images_current << ui->filmStrip->currentRow();
+}
+

mercurial