|
|
@@ -17,18 +17,92 @@ BrowseModal::BrowseModal(bool _cancellable, const std::vector<std::string>& prev
|
|
|
ui->buttonBox->setStandardButtons(QDialogButtonBox::StandardButton::Open | QDialogButtonBox::StandardButton::Cancel);
|
|
|
connect(ui->buttonBox, &QDialogButtonBox::rejected, this, [this]() { rejected = true; });
|
|
|
}
|
|
|
- connect(ui->pushButton, &QPushButton::clicked, this, [this]() { BrowseForInput(*ui->lineEdit); });
|
|
|
- connect(ui->pushButton_2, &QPushButton::clicked, this, [this]() { BrowseForInput(*ui->lineEdit_2); });
|
|
|
- if (previous.size() > 0)
|
|
|
- ui->lineEdit->setText(previous[0].c_str());
|
|
|
- if (previous.size() > 1)
|
|
|
- ui->lineEdit_2->setText(previous[1].c_str());
|
|
|
+
|
|
|
+ // Initialize Inputs
|
|
|
+ {
|
|
|
+ InitializeBrowseInput(ui->groupBox, ui->lineEdit, ui->pushButton, previous.size() > 0 ? previous[0].c_str() : nullptr);
|
|
|
+ InitializeBrowseInput(ui->groupBox_2, ui->lineEdit_2, ui->pushButton_2, previous.size() > 1 ? previous[1].c_str() : nullptr);
|
|
|
+
|
|
|
+ for (int i = 2; i < previous.size(); ++i)
|
|
|
+ ui->verticalLayout->insertWidget(ui->verticalLayout->count() - 2, CreateBrowseInput(previous[i].c_str()));
|
|
|
+ CheckValidationPossible();
|
|
|
+ }
|
|
|
+
|
|
|
+ // AddInput Button
|
|
|
+ {
|
|
|
+ QAbstractButton* addInputButton = CreateAddButton();
|
|
|
+ ui->buttonBox->addButton(addInputButton, QDialogButtonBox::ButtonRole::NoRole);
|
|
|
+ connect(addInputButton, &QAbstractButton::clicked, this, [this](){ ui->verticalLayout->insertWidget(ui->verticalLayout->count() -2, CreateBrowseInput()); CheckValidationPossible(); });
|
|
|
+ }
|
|
|
+
|
|
|
setModal(this);
|
|
|
}
|
|
|
|
|
|
+QWidget* BrowseModal::CreateBrowseInput(const char* text)
|
|
|
+{
|
|
|
+ QGroupBox* groupBox = new QGroupBox(this);
|
|
|
+ QHBoxLayout* horizontalLayout_2 = new QHBoxLayout(groupBox);
|
|
|
+ QLineEdit* lineEdit = new QLineEdit(groupBox);
|
|
|
+ horizontalLayout_2->addWidget(lineEdit);
|
|
|
+ QPushButton* pushButton = new QPushButton(groupBox);
|
|
|
+ pushButton->setText(QCoreApplication::translate("BrowseModal", "Parcourir", nullptr));
|
|
|
+ horizontalLayout_2->addWidget(pushButton);
|
|
|
+ InitializeBrowseInput(groupBox, lineEdit, pushButton, text);
|
|
|
+ return groupBox;
|
|
|
+}
|
|
|
+
|
|
|
+void BrowseModal::UpdateGroupTitle(const QLineEdit& lineEdit, QGroupBox& groupBox)
|
|
|
+{
|
|
|
+ QString newUrl(lineEdit.text());
|
|
|
+ while (newUrl.endsWith("/"))
|
|
|
+ newUrl.removeLast();
|
|
|
+ if (newUrl.isEmpty())
|
|
|
+ return;
|
|
|
+
|
|
|
+ QFileInfo dir(newUrl);
|
|
|
+ if (!dir.exists())
|
|
|
+ groupBox.setTitle("File not found");
|
|
|
+ else if (!dir.isDir())
|
|
|
+ groupBox.setTitle("File is not a directory");
|
|
|
+ else
|
|
|
+ groupBox.setTitle(dir.fileName());
|
|
|
+}
|
|
|
+
|
|
|
+void BrowseModal::CheckValidationPossible()
|
|
|
+{
|
|
|
+ auto isInputInvalid = [](const QLineEdit* input) {
|
|
|
+ if (input->text().isEmpty())
|
|
|
+ return true;
|
|
|
+ QFileInfo dir(input->text());
|
|
|
+ if (!dir.exists() || !dir.isDir())
|
|
|
+ return true;
|
|
|
+ return false;
|
|
|
+ };
|
|
|
+
|
|
|
+ ui->buttonBox->button(QDialogButtonBox::StandardButton::Open)->setEnabled(!std::any_of(inputs.begin(), inputs.end(), isInputInvalid));
|
|
|
+}
|
|
|
+
|
|
|
+void BrowseModal::InitializeBrowseInput(QGroupBox* groupBox, QLineEdit* input, QAbstractButton* browseButton, const char* text)
|
|
|
+{
|
|
|
+ if (text)
|
|
|
+ input->setText(text);
|
|
|
+ groupBox->setTitle("");
|
|
|
+ UpdateGroupTitle(*input, *groupBox);
|
|
|
+ connect(browseButton, &QPushButton::clicked, this, [this, input, groupBox]() { BrowseForInput(*input); UpdateGroupTitle(*input, *groupBox); CheckValidationPossible(); });
|
|
|
+ connect(input, &QLineEdit::editingFinished, this, [this, groupBox, input]() { UpdateGroupTitle(*input, *groupBox); CheckValidationPossible(); });
|
|
|
+ inputs.push_back(input);
|
|
|
+}
|
|
|
+
|
|
|
BrowseModal::~BrowseModal()
|
|
|
{}
|
|
|
|
|
|
+QAbstractButton* BrowseModal::CreateAddButton()
|
|
|
+{
|
|
|
+ QPushButton* result = new QPushButton(this);
|
|
|
+ result->setText("Ajouter");
|
|
|
+ return result;
|
|
|
+}
|
|
|
+
|
|
|
void BrowseModal::reject()
|
|
|
{
|
|
|
if (cancellable)
|
|
|
@@ -49,7 +123,6 @@ std::vector<std::string> BrowseModal::Display(bool cancellable, const std::vecto
|
|
|
if (dialog.rejected)
|
|
|
return std::vector<std::string> {};
|
|
|
std::vector<std::string> result;
|
|
|
- result.push_back(dialog.ui->lineEdit->text().toStdString());
|
|
|
- result.push_back(dialog.ui->lineEdit_2->text().toStdString());
|
|
|
+ std::transform(dialog.inputs.begin(), dialog.inputs.end(), std::back_inserter(result), [](const QLineEdit* input) { return input->text().toStdString(); });
|
|
|
return result;
|
|
|
}
|