diff -r 1fed3ff9a64e -r 8fc909360552 src/EditProductTab13.cpp --- a/src/EditProductTab13.cpp Mon Jan 16 16:55:41 2023 +0100 +++ b/src/EditProductTab13.cpp Wed Jan 18 16:17:31 2023 +0100 @@ -17,11 +17,133 @@ * along with this program. If not, see . */ -//void EditProduct::taste_date_changed(QDate val) -//{ -// product->taste_date = ui->taste_dateEdit->nullDate(); -// is_changed(); -// setStage(); -//} +void EditProduct::images_Init() +{ + qDebug() << "images_Init()"; + + // Start spinner + // Clean old picture areas + // Load images data for this product uuid + // Show thumbnails on the left. + // If any, show picture 1 + // Stop spinner +} +void EditProduct::addImage_clicked() +{ + QString fileName; + QByteArray imageByteArray; + QSqlQuery query; + QSettings settings(QSettings::IniFormat, QSettings::UserScope, "mbse", "bmsapp"); + + QFileDialog dialog1(this, tr("Open File")); + dialog1.setDirectory(settings.value("paths/images").toString()); + /* 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.setAcceptMode(QFileDialog::AcceptOpen); +// dialog1.setOption(QFileDialog::DontUseNativeDialog); + if (dialog1.exec() != QDialog::Accepted) + return; + + /* + * Save our current path + */ + settings.setValue("paths/images", dialog1.directory().absolutePath()); + + fileName = dialog1.selectedFiles().constFirst(); + QImageReader reader(fileName); + reader.setAutoTransform(true); + const QImage newImage = reader.read(); + if (newImage.isNull()) { + QMessageBox::information(this, QGuiApplication::applicationDisplayName(), tr("Cannot load %1: %2") + .arg(QDir::toNativeSeparators(fileName), reader.errorString())); + return; + } + qDebug() << "Image" << fileName << newImage.width() << newImage.height() << "size" << newImage.sizeInBytes(); + + QBuffer buffer(&imageByteArray); + buffer.open(QIODevice::WriteOnly); + newImage.save(&buffer, "PNG"); + + /* + * Now that we have selected a valid image, create a new dialog so + * we can add extra information for this image and a Save button. + */ + QDialog* dialog = new QDialog(this); + dialog->resize(500, 490); + QDialogButtonBox *buttonBox = new QDialogButtonBox(dialog); + buttonBox->setObjectName(QString::fromUtf8("buttonBox")); + buttonBox->setGeometry(QRect(10, 440, 480, 32)); + buttonBox->setLayoutDirection(Qt::LeftToRight); + buttonBox->setOrientation(Qt::Horizontal); + buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Save); + buttonBox->setCenterButtons(true); + + QLabel *imageLabel = new QLabel(dialog); + imageLabel->setObjectName(QString::fromUtf8("imageLabel")); + imageLabel->setGeometry(QRect(10, 10, 480, 320)); + imageLabel->setAlignment(Qt::AlignCenter); + imageLabel->setText(tr("Image here")); + QPixmap outPixmap = QPixmap(); + outPixmap.loadFromData(imageByteArray); + if (outPixmap.width() > 480 || outPixmap.height() > 320) + imageLabel->setPixmap(outPixmap.scaled(480, 320, Qt::KeepAspectRatio, Qt::SmoothTransformation)); + else + imageLabel->setPixmap(outPixmap); + + QLabel *typeLabel = new QLabel(dialog); + typeLabel->setObjectName(QString::fromUtf8("typeLabel")); + typeLabel->setText(tr("Image type:")); + typeLabel->setGeometry(QRect(10, 360, 141, 20)); + typeLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + + QComboBox *typeEdit = new QComboBox(dialog); + typeEdit->setObjectName(QString::fromUtf8("typeEdit")); + typeEdit->setGeometry(QRect(160, 360, 161, 23)); + for (int i = 0; i < 7; i++) + typeEdit->addItem(g_prod_pic_types[i]); + typeEdit->setCurrentIndex(0); + + QLabel *commentLabel = new QLabel(dialog); + commentLabel->setObjectName(QString::fromUtf8("commentLabel")); + commentLabel->setText(tr("Image comment:")); + commentLabel->setGeometry(QRect(10, 390, 141, 20)); + commentLabel->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter); + + QLineEdit *commentEdit = new QLineEdit(dialog); + commentEdit->setObjectName(QString::fromUtf8("commentEdit")); + commentEdit->setGeometry(QRect(160, 390, 320, 23)); + commentEdit->setToolTip(tr("The comment for this image.")); + + connect(buttonBox, SIGNAL(rejected()), dialog, SLOT(reject())); + connect(buttonBox, SIGNAL(accepted()), dialog, SLOT(accept())); + + dialog->setModal(true); + dialog->exec(); + if (dialog->result() == QDialog::Rejected) { + return; + } + disconnect(buttonBox, nullptr, nullptr, nullptr); + + query.prepare("INSERT INTO products_pics SET uuid=:uuid, pic_type=:pic_type, pic_data=:pic_data, pic_comment=:pic_comment"); + query.bindValue(":uuid", product->uuid); + query.bindValue(":pic_type", g_prod_pic_types[typeEdit->currentIndex()]); + query.bindValue(":pic_data", imageByteArray); + query.bindValue(":pic_comment", commentEdit->text()); + + query.exec(); + if (query.lastError().isValid()) { + qWarning() << "addImage_clicked()" << 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())); + } else { + qDebug() << "new image Saved"; + } + + //emit refreshAll(); +} + +