diff --git a/src/admc/rename_object_helper.cpp b/src/admc/rename_object_helper.cpp index a60c6141..e4584625 100644 --- a/src/admc/rename_object_helper.cpp +++ b/src/admc/rename_object_helper.cpp @@ -39,12 +39,17 @@ void RenameObjectHelper::fail_msg(const QString &old_name) { g_status->add_message(message, StatusType_Error); } -RenameObjectHelper::RenameObjectHelper(AdInterface &ad, const QString &target_arg, QLineEdit *name_edit_arg, const QList &edits_arg, QDialog *parent_dialog_arg) +RenameObjectHelper::RenameObjectHelper(AdInterface &ad, const QString &target_arg, QLineEdit *name_edit_arg, const QList &edits_arg, QDialog *parent_dialog_arg, QList required, QDialogButtonBox *button_box) : QObject(parent_dialog_arg) { name_edit = name_edit_arg; edits = edits_arg; target = target_arg; parent_dialog = parent_dialog_arg; + required_list = required; + ok_button = nullptr; + if(button_box != nullptr) { + ok_button = button_box->button(QDialogButtonBox::Ok); + } const QString name = dn_get_name(target); name_edit->setText(name); @@ -53,6 +58,13 @@ RenameObjectHelper::RenameObjectHelper(AdInterface &ad, const QString &target_ar const AdObject object = ad.search_object(target); AttributeEdit::load(edits, ad, object); + + if(!required_list.isEmpty() && ok_button != nullptr) { + for(QLineEdit *edit : required_list) { + connect(edit, &QLineEdit::textChanged, this, &RenameObjectHelper::on_edited); + } + on_edited(); + } } bool RenameObjectHelper::accept() const { @@ -116,3 +128,18 @@ QString RenameObjectHelper::get_new_dn() const { return new_dn; } + +void RenameObjectHelper::on_edited() +{ + const bool all_required_filled = [this]() { + for (QLineEdit *edit : required_list) { + if (edit->text().isEmpty()) { + return false; + } + } + + return true; + }(); + + ok_button->setEnabled(all_required_filled); +} diff --git a/src/admc/rename_object_helper.h b/src/admc/rename_object_helper.h index eb779407..caa20875 100644 --- a/src/admc/rename_object_helper.h +++ b/src/admc/rename_object_helper.h @@ -21,7 +21,9 @@ #ifndef RENAME_OBJECT_HELPER_H #define RENAME_OBJECT_HELPER_H +#include #include +#include class QLineEdit; class QDialog; @@ -32,7 +34,7 @@ class RenameObjectHelper : public QObject { Q_OBJECT public: - RenameObjectHelper(AdInterface &ad, const QString &target_arg, QLineEdit *name_edit_arg, const QList &edits_arg, QDialog *parent_dialog); + RenameObjectHelper(AdInterface &ad, const QString &target_arg, QLineEdit *name_edit_arg, const QList &edits_arg, QDialog *parent_dialog, QList required = QList(), QDialogButtonBox *button_box = nullptr); static void success_msg(const QString &old_name); static void fail_msg(const QString &old_name); @@ -41,11 +43,16 @@ public: QString get_new_name() const; QString get_new_dn() const; +private slots: + void on_edited(); + private: QString target; QLineEdit *name_edit; QList edits; QDialog *parent_dialog; + QList required_list; + QPushButton *ok_button; }; #endif /* RENAME_OBJECT_HELPER_H */ diff --git a/src/admc/rename_user_dialog.cpp b/src/admc/rename_user_dialog.cpp index 514866b1..8a4be67a 100644 --- a/src/admc/rename_user_dialog.cpp +++ b/src/admc/rename_user_dialog.cpp @@ -51,7 +51,13 @@ RenameUserDialog::RenameUserDialog(AdInterface &ad, const QString &target_arg, Q sam_name_edit, }; - helper = new RenameObjectHelper(ad, target_arg, ui->name_edit, edit_list, this); + const QList required_list = { + ui->name_edit, + ui->upn_prefix_edit, + ui->sam_name_edit + }; + + helper = new RenameObjectHelper(ad, target_arg, ui->name_edit, edit_list, this, required_list, ui->button_box); setup_lineedit_autofill(ui->upn_prefix_edit, ui->sam_name_edit);