aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorIvan Komissarov <ABBAPOH@gmail.com>2019-05-01 22:32:12 +0200
committerIvan Komissarov <ABBAPOH@gmail.com>2019-05-06 08:24:43 +0000
commitfccfa6859bc019fae40fdcbcc6113c9c3b35e4b7 (patch)
treebee0c8ae3199b92355bf5550fbda31f1de6690c2 /src
parent69570eee906be111cee320cc75c83b2a75dd2336 (diff)
Do not allow to enter leading and trailing spaces in qbs-config-ui
Task-number: QBS-1427 Change-Id: I46e1dab6baf964a7f42fe96a3fb3be37cf6e692f Reviewed-by: Christian Kandeler <christian.kandeler@qt.io>
Diffstat (limited to 'src')
-rw-r--r--src/app/config-ui/mainwindow.cpp44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/app/config-ui/mainwindow.cpp b/src/app/config-ui/mainwindow.cpp
index 13708366a..2bf7fad5e 100644
--- a/src/app/config-ui/mainwindow.cpp
+++ b/src/app/config-ui/mainwindow.cpp
@@ -49,9 +49,52 @@
#include <QtGui/qkeysequence.h>
#include <QtWidgets/qaction.h>
+#include <QtWidgets/qlineedit.h>
#include <QtWidgets/qmenu.h>
#include <QtWidgets/qmenubar.h>
#include <QtWidgets/qmessagebox.h>
+#include <QtWidgets/qstyleditemdelegate.h>
+
+namespace {
+
+class TrimValidator : public QValidator
+{
+public:
+ explicit TrimValidator(QObject *parent = nullptr) : QValidator(parent) {}
+
+public: // QValidator interface
+ State validate(QString &input, int &pos) const override
+ {
+ Q_UNUSED(pos);
+ if (input.startsWith(QLatin1Char(' ')) || input.endsWith(QLatin1Char(' ')))
+ return State::Intermediate;
+ return State::Acceptable;
+ }
+
+ void fixup(QString &input) const override
+ {
+ input = input.trimmed();
+ }
+};
+
+class SettingsItemDelegate: public QStyledItemDelegate
+{
+public:
+ explicit SettingsItemDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) {}
+
+ QWidget *createEditor(QWidget *parent,
+ const QStyleOptionViewItem &option,
+ const QModelIndex &index) const override
+ {
+ const auto editor = QStyledItemDelegate::createEditor(parent, option, index);
+ const auto lineEdit = qobject_cast<QLineEdit *>(editor);
+ if (lineEdit)
+ lineEdit->setValidator(new TrimValidator(lineEdit));
+ return editor;
+ }
+};
+
+} // namespace
MainWindow::MainWindow(const QString &settingsDir, qbs::Settings::Scope scope, QWidget *parent)
: QMainWindow(parent), ui(new Ui::MainWindow)
@@ -59,6 +102,7 @@ MainWindow::MainWindow(const QString &settingsDir, qbs::Settings::Scope scope, Q
ui->setupUi(this);
m_model = new qbs::SettingsModel(settingsDir, scope, this);
ui->treeView->setModel(m_model);
+ ui->treeView->setItemDelegate(new SettingsItemDelegate(ui->treeView));
ui->treeView->setContextMenuPolicy(Qt::CustomContextMenu);
connect(ui->treeView, &QTreeView::expanded, this, &MainWindow::adjustColumns);
connect(ui->treeView, &QWidget::customContextMenuRequested,