diff -r 68ef2cc3e8d2 -r c5f6f3f1b714 src/EditProductTab13.cpp --- 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 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(); +} +