From c865301eb74fa7e35cc145b202f69c648f40ccb1 Mon Sep 17 00:00:00 2001 From: Dmitry Degtyarev Date: Mon, 7 Feb 2022 18:12:15 +0400 Subject: [PATCH] add length limit to string large edit --- .../attribute_edits/string_large_edit.cpp | 22 +++++++++++++++++++ src/admc/attribute_edits/string_large_edit.h | 3 +++ 2 files changed, 25 insertions(+) diff --git a/src/admc/attribute_edits/string_large_edit.cpp b/src/admc/attribute_edits/string_large_edit.cpp index 923cc900..103ff8f9 100644 --- a/src/admc/attribute_edits/string_large_edit.cpp +++ b/src/admc/attribute_edits/string_large_edit.cpp @@ -22,6 +22,7 @@ #include "adldap.h" #include "utils.h" +#include "globals.h" #include @@ -29,10 +30,14 @@ StringLargeEdit::StringLargeEdit(QPlainTextEdit *edit_arg, const QString &attrib : AttributeEdit(parent) { attribute = attribute_arg; edit = edit_arg; + ignore_on_text_changed = false; connect( edit, &QPlainTextEdit::textChanged, this, &AttributeEdit::edited); + connect( + edit, &QPlainTextEdit::textChanged, + this, &StringLargeEdit::on_text_changed); } void StringLargeEdit::load(AdInterface &ad, const AdObject &object) { @@ -49,3 +54,20 @@ bool StringLargeEdit::apply(AdInterface &ad, const QString &dn) const { return success; } + +// NOTE: this is a custom length limit mechanism +// because QPlainText doesn't have it built-in +void StringLargeEdit::on_text_changed() { + ignore_on_text_changed = true; + { + const int range_upper = g_adconfig->get_attribute_range_upper(attribute); + + const QString value = edit->toPlainText(); + + if (value.length() > range_upper) { + const QString shortened_value = value.left(range_upper); + edit->setPlainText(shortened_value); + } + } + ignore_on_text_changed = false; +} diff --git a/src/admc/attribute_edits/string_large_edit.h b/src/admc/attribute_edits/string_large_edit.h index f7031eaf..120c94ca 100644 --- a/src/admc/attribute_edits/string_large_edit.h +++ b/src/admc/attribute_edits/string_large_edit.h @@ -41,6 +41,9 @@ public: private: QPlainTextEdit *edit; QString attribute; + bool ignore_on_text_changed; + + void on_text_changed(); }; #endif /* STRING_LARGE_EDIT_H */