From 656b9f918540e7e95d0f599415a6f122a417fbbe Mon Sep 17 00:00:00 2001 From: Nikolai Kosjar Date: Mon, 11 Sep 2017 15:16:43 +0200 Subject: [PATCH] Clang: Restrict warning options edit to single line ...to avoid confusion. Use a customized QPlainTextEdit instead of a QLineEdit because the latter does not allow wrapping of long lines. Horizontal scrolling in a QLineEdit for long/many options is inconvenient. Change-Id: I15b5f034e04920d0ca955c4f822d882b05e9c235 Reviewed-by: Tim Jenssen --- .../cpptools/clangdiagnosticconfigswidget.ui | 9 ++- src/plugins/cpptools/cpptools.pro | 4 +- src/plugins/cpptools/cpptools.qbs | 2 + src/plugins/cpptools/wrappablelineedit.cpp | 59 +++++++++++++++++++ src/plugins/cpptools/wrappablelineedit.h | 44 ++++++++++++++ 5 files changed, 116 insertions(+), 2 deletions(-) create mode 100644 src/plugins/cpptools/wrappablelineedit.cpp create mode 100644 src/plugins/cpptools/wrappablelineedit.h diff --git a/src/plugins/cpptools/clangdiagnosticconfigswidget.ui b/src/plugins/cpptools/clangdiagnosticconfigswidget.ui index e07ffb7b063..251868faca1 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigswidget.ui +++ b/src/plugins/cpptools/clangdiagnosticconfigswidget.ui @@ -81,7 +81,7 @@ - + @@ -95,6 +95,13 @@ + + + CppTools::WrappableLineEdit + QLineEdit +
cpptools/wrappablelineedit.h
+
+
configChooserComboBox copyButton diff --git a/src/plugins/cpptools/cpptools.pro b/src/plugins/cpptools/cpptools.pro index 016294dc93e..20ed13d4cff 100644 --- a/src/plugins/cpptools/cpptools.pro +++ b/src/plugins/cpptools/cpptools.pro @@ -89,7 +89,8 @@ HEADERS += \ clangcompileroptionsbuilder.h \ cppprojectpartchooser.h \ cppsymbolinfo.h \ - cursorineditor.h + cursorineditor.h \ + wrappablelineedit.h \ SOURCES += \ abstracteditorsupport.cpp \ @@ -168,6 +169,7 @@ SOURCES += \ cppprojectfilecategorizer.cpp \ clangcompileroptionsbuilder.cpp \ cppprojectpartchooser.cpp \ + wrappablelineedit.cpp \ FORMS += \ clangdiagnosticconfigswidget.ui \ diff --git a/src/plugins/cpptools/cpptools.qbs b/src/plugins/cpptools/cpptools.qbs index 0af071828a4..35cb74c2630 100644 --- a/src/plugins/cpptools/cpptools.qbs +++ b/src/plugins/cpptools/cpptools.qbs @@ -175,6 +175,8 @@ Project { "indexitem.h", "insertionpointlocator.cpp", "insertionpointlocator.h", + "wrappablelineedit.cpp", + "wrappablelineedit.h", "projectinfo.cpp", "projectinfo.h", "projectpart.cpp", diff --git a/src/plugins/cpptools/wrappablelineedit.cpp b/src/plugins/cpptools/wrappablelineedit.cpp new file mode 100644 index 00000000000..786486a23fe --- /dev/null +++ b/src/plugins/cpptools/wrappablelineedit.cpp @@ -0,0 +1,59 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#include "wrappablelineedit.h" + +#include + +namespace CppTools { + +WrappableLineEdit::WrappableLineEdit(QWidget *parent) + : QPlainTextEdit(parent) +{ + setMaximumBlockCount(1); // Restrict to a single line. +} + +void WrappableLineEdit::keyPressEvent(QKeyEvent *event) +{ + switch (event->key()) { + case Qt::Key_Enter: + case Qt::Key_Return: + return; // Eat these to avoid new lines. + case Qt::Key_Backtab: + case Qt::Key_Tab: + // Let the parent handle these because they might be used for navigation purposes. + event->ignore(); + return; + default: + return QPlainTextEdit::keyPressEvent(event); + } +} + +void WrappableLineEdit::insertFromMimeData(const QMimeData *source) +{ + insertPlainText(source->text().simplified()); // Filter out new lines. +} + +} // namespace CppTools diff --git a/src/plugins/cpptools/wrappablelineedit.h b/src/plugins/cpptools/wrappablelineedit.h new file mode 100644 index 00000000000..411a2d49a98 --- /dev/null +++ b/src/plugins/cpptools/wrappablelineedit.h @@ -0,0 +1,44 @@ +/**************************************************************************** +** +** Copyright (C) 2017 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of Qt Creator. +** +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 3 as published by the Free Software +** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-3.0.html. +** +****************************************************************************/ + +#pragma once + +#include + +namespace CppTools { + +class WrappableLineEdit : public QPlainTextEdit +{ + Q_OBJECT + +public: + explicit WrappableLineEdit(QWidget *parent = nullptr); + +protected: + void keyPressEvent(QKeyEvent *event) override; + void insertFromMimeData(const QMimeData *source) override; +}; + +} // namespace CppTools