|
|
@@ -0,0 +1,120 @@
|
|
|
+#include <QtWidgets>
|
|
|
+#include "vinsertimagedialog.h"
|
|
|
+
|
|
|
+VInsertImageDialog::VInsertImageDialog(const QString &title, const QString &defaultImageTitle,
|
|
|
+ const QString &defaultPath, QWidget *parent)
|
|
|
+ : QDialog(parent), title(title), defaultImageTitle(defaultImageTitle), defaultPath(defaultPath),
|
|
|
+ image(NULL), browseable(true)
|
|
|
+{
|
|
|
+ setupUI();
|
|
|
+
|
|
|
+ connect(imageTitleEdit, &QLineEdit::textChanged, this, &VInsertImageDialog::enableOkButton);
|
|
|
+ connect(pathEdit, &QLineEdit::textChanged, this, &VInsertImageDialog::enableOkButton);
|
|
|
+ connect(browseBtn, &QPushButton::clicked, this, &VInsertImageDialog::handleBrowseBtnClicked);
|
|
|
+ connect(okBtn, &QPushButton::clicked, this, &VInsertImageDialog::accept);
|
|
|
+ connect(cancelBtn, &QPushButton::clicked, this, &VInsertImageDialog::reject);
|
|
|
+
|
|
|
+ enableOkButton();
|
|
|
+}
|
|
|
+
|
|
|
+VInsertImageDialog::~VInsertImageDialog()
|
|
|
+{
|
|
|
+ if (image) {
|
|
|
+ delete image;
|
|
|
+ image = NULL;
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+void VInsertImageDialog::setupUI()
|
|
|
+{
|
|
|
+ pathLabel = new QLabel(tr("&From"));
|
|
|
+ pathEdit = new QLineEdit(defaultPath);
|
|
|
+ pathLabel->setBuddy(pathEdit);
|
|
|
+ browseBtn = new QPushButton(tr("&Browse"));
|
|
|
+ QHBoxLayout *pathLayout = new QHBoxLayout();
|
|
|
+ pathLayout->addWidget(pathEdit);
|
|
|
+ pathLayout->addWidget(browseBtn);
|
|
|
+
|
|
|
+ imageTitleLabel = new QLabel(tr("&Title"));
|
|
|
+ imageTitleEdit = new QLineEdit(defaultImageTitle);
|
|
|
+ imageTitleEdit->selectAll();
|
|
|
+ imageTitleLabel->setBuddy(imageTitleEdit);
|
|
|
+
|
|
|
+ okBtn = new QPushButton(tr("&OK"));
|
|
|
+ okBtn->setDefault(true);
|
|
|
+ cancelBtn = new QPushButton(tr("&Cancel"));
|
|
|
+
|
|
|
+ QVBoxLayout *topLayout = new QVBoxLayout();
|
|
|
+ topLayout->addWidget(pathLabel);
|
|
|
+ topLayout->addLayout(pathLayout);
|
|
|
+ topLayout->addWidget(imageTitleLabel);
|
|
|
+ topLayout->addWidget(imageTitleEdit);
|
|
|
+
|
|
|
+ QHBoxLayout *btmLayout = new QHBoxLayout();
|
|
|
+ btmLayout->addStretch();
|
|
|
+ btmLayout->addWidget(okBtn);
|
|
|
+ btmLayout->addWidget(cancelBtn);
|
|
|
+
|
|
|
+ imagePreviewLabel = new QLabel();
|
|
|
+ imagePreviewLabel->setVisible(false);
|
|
|
+
|
|
|
+ QVBoxLayout *mainLayout = new QVBoxLayout();
|
|
|
+ mainLayout->addLayout(topLayout);
|
|
|
+ mainLayout->addLayout(btmLayout);
|
|
|
+ mainLayout->addWidget(imagePreviewLabel);
|
|
|
+ setLayout(mainLayout);
|
|
|
+ layout()->setSizeConstraint(QLayout::SetFixedSize);
|
|
|
+ setWindowTitle(title);
|
|
|
+}
|
|
|
+
|
|
|
+void VInsertImageDialog::enableOkButton()
|
|
|
+{
|
|
|
+ bool enabled = true;
|
|
|
+ if (imageTitleEdit->text().isEmpty() || !image) {
|
|
|
+ enabled = false;
|
|
|
+ }
|
|
|
+ okBtn->setEnabled(enabled);
|
|
|
+}
|
|
|
+
|
|
|
+QString VInsertImageDialog::getImageTitleInput() const
|
|
|
+{
|
|
|
+ return imageTitleEdit->text();
|
|
|
+}
|
|
|
+
|
|
|
+QString VInsertImageDialog::getPathInput() const
|
|
|
+{
|
|
|
+ return pathEdit->text();
|
|
|
+}
|
|
|
+
|
|
|
+void VInsertImageDialog::handleBrowseBtnClicked()
|
|
|
+{
|
|
|
+ static QString lastPath = QDir::homePath();
|
|
|
+ QString filePath = QFileDialog::getOpenFileName(this, tr("Select the image to be inserted"),
|
|
|
+ lastPath, tr("Images (*.png *.xpm *.jpg *.bmp *.gif)"));
|
|
|
+ // Update lastPath
|
|
|
+ lastPath = QFileInfo(filePath).path();
|
|
|
+
|
|
|
+ pathEdit->setText(filePath);
|
|
|
+}
|
|
|
+
|
|
|
+void VInsertImageDialog::setImage(const QImage &image)
|
|
|
+{
|
|
|
+ Q_ASSERT(!image.isNull());
|
|
|
+ QSize previewSize(256, 256);
|
|
|
+ if (!this->image) {
|
|
|
+ this->image = new QImage(image);
|
|
|
+ } else {
|
|
|
+ *(this->image) = image;
|
|
|
+ }
|
|
|
+ imagePreviewLabel->setPixmap(QPixmap::fromImage(this->image->scaled(previewSize)));
|
|
|
+ imagePreviewLabel->setVisible(true);
|
|
|
+ enableOkButton();
|
|
|
+}
|
|
|
+
|
|
|
+void VInsertImageDialog::setBrowseable(bool browseable)
|
|
|
+{
|
|
|
+ this->browseable = browseable;
|
|
|
+ pathLabel->setVisible(browseable);
|
|
|
+ pathEdit->setVisible(browseable);
|
|
|
+ browseBtn->setVisible(browseable);
|
|
|
+}
|