diff --git a/doc/src/analyze/creator-clang-static-analyzer.qdoc b/doc/src/analyze/creator-clang-static-analyzer.qdoc index 66ef1cd97c0..d3b99b0efaa 100644 --- a/doc/src/analyze/creator-clang-static-analyzer.qdoc +++ b/doc/src/analyze/creator-clang-static-analyzer.qdoc @@ -71,7 +71,7 @@ \image qtcreator-files-to-analyze.png \li In the \uicontrol {Diagnostic Configuration} group, select - \uicontrol Custom, and then select \uicontrol Manage to + \uicontrol {Custom Settings}, and then select \uicontrol Manage to specify the Clang-Tidy and Clazy checks to perform. \li Select the new custom configuration in the list of configurations diff --git a/share/qtcreator/templates/wizards/autotest/files/tst_src.h b/share/qtcreator/templates/wizards/autotest/files/tst_src.h index 9731d06cf58..8fafc6c653e 100644 --- a/share/qtcreator/templates/wizards/autotest/files/tst_src.h +++ b/share/qtcreator/templates/wizards/autotest/files/tst_src.h @@ -1,4 +1,6 @@ %{Cpp:LicenseTemplate}\ +#pragma once + #include #include diff --git a/src/libs/clangsupport/filepathcache.h b/src/libs/clangsupport/filepathcache.h index 2cfb4eae16a..d0c8a529dff 100644 --- a/src/libs/clangsupport/filepathcache.h +++ b/src/libs/clangsupport/filepathcache.h @@ -36,7 +36,7 @@ namespace ClangBackEnd { template -class FilePathCache +class CLANGSUPPORT_GCCEXPORT FilePathCache { class FileNameView { diff --git a/src/libs/clangsupport/followsymbolmessage.cpp b/src/libs/clangsupport/followsymbolmessage.cpp index 22e77ee6d41..df2d1f5e6f6 100644 --- a/src/libs/clangsupport/followsymbolmessage.cpp +++ b/src/libs/clangsupport/followsymbolmessage.cpp @@ -33,7 +33,7 @@ QDebug operator<<(QDebug debug, const FollowSymbolResult &result) { debug.nospace() << "FollowSymbolResult(" << result.range - << ", " << result.isPureDeclarationForUsage; + << ", " << result.isResultOnlyForFallBack; debug.nospace() << ")"; diff --git a/src/libs/clangsupport/followsymbolmessage.h b/src/libs/clangsupport/followsymbolmessage.h index ec113825aeb..b63820a4ad9 100644 --- a/src/libs/clangsupport/followsymbolmessage.h +++ b/src/libs/clangsupport/followsymbolmessage.h @@ -40,15 +40,15 @@ public: FollowSymbolResult(SourceRangeContainer range) : range(std::move(range)) {} - FollowSymbolResult(SourceRangeContainer range, bool isPureDeclarationForUsage) + FollowSymbolResult(SourceRangeContainer range, bool isResultOnlyForFallBack) : range(std::move(range)) - , isPureDeclarationForUsage(isPureDeclarationForUsage) + , isResultOnlyForFallBack(isResultOnlyForFallBack) {} friend QDataStream &operator<<(QDataStream &out, const FollowSymbolResult &container) { out << container.range; - out << container.isPureDeclarationForUsage; + out << container.isResultOnlyForFallBack; return out; } @@ -56,7 +56,7 @@ public: friend QDataStream &operator>>(QDataStream &in, FollowSymbolResult &container) { in >> container.range; - in >> container.isPureDeclarationForUsage; + in >> container.isResultOnlyForFallBack; return in; } @@ -64,11 +64,11 @@ public: friend bool operator==(const FollowSymbolResult &first, const FollowSymbolResult &second) { return first.range == second.range - && first.isPureDeclarationForUsage == second.isPureDeclarationForUsage; + && first.isResultOnlyForFallBack == second.isResultOnlyForFallBack; } SourceRangeContainer range; - bool isPureDeclarationForUsage = false; + bool isResultOnlyForFallBack = false; }; class FollowSymbolMessage diff --git a/src/libs/qmljs/qmljsdocument.cpp b/src/libs/qmljs/qmljsdocument.cpp index e64deb0c722..6de0a75fcb2 100644 --- a/src/libs/qmljs/qmljsdocument.cpp +++ b/src/libs/qmljs/qmljsdocument.cpp @@ -248,21 +248,22 @@ public: {} - virtual void pragmaLibrary(int line, int column) override + void pragmaLibrary(int line, int column) override { isLibrary = true; addLocation(line, column); } - virtual void importFile(const QString &jsfile, const QString &module, - int line, int column) override + + void importFile(const QString &jsfile, const QString &module, + int line, int column) override { imports += ImportInfo::pathImport( documentPath, jsfile, LanguageUtils::ComponentVersion(), module); addLocation(line, column); } - virtual void importModule(const QString &uri, const QString &version, const QString &module, - int line, int column) override + void importModule(const QString &uri, const QString &version, const QString &module, + int line, int column) override { imports += ImportInfo::moduleImport(uri, LanguageUtils::ComponentVersion(version), module); addLocation(line, column); diff --git a/src/libs/tracing/flamegraph.cpp b/src/libs/tracing/flamegraph.cpp index 2fa38313edc..9d7df037f5f 100644 --- a/src/libs/tracing/flamegraph.cpp +++ b/src/libs/tracing/flamegraph.cpp @@ -30,6 +30,8 @@ namespace FlameGraph { FlameGraph::FlameGraph(QQuickItem *parent) : QQuickItem(parent) { + setAcceptedMouseButtons(Qt::LeftButton); + // Queue the rebuild in this case so that a delegate can set the root without getting deleted // during the call. connect(this, &FlameGraph::rootChanged, this, &FlameGraph::rebuild, Qt::QueuedConnection); @@ -130,7 +132,6 @@ QObject *FlameGraph::appendChild(QObject *parentObject, QQuickItem *parentItem, return childObject; } - int FlameGraph::buildNode(const QModelIndex &parentIndex, QObject *parentObject, int depth, int maximumDepth) { @@ -194,4 +195,22 @@ void FlameGraph::rebuild() emit depthChanged(m_depth); } +void FlameGraph::mousePressEvent(QMouseEvent *event) +{ + Q_UNUSED(event); +} + +void FlameGraph::mouseReleaseEvent(QMouseEvent *event) +{ + Q_UNUSED(event); + setSelectedTypeId(-1); +} + +void FlameGraph::mouseDoubleClickEvent(QMouseEvent *event) +{ + Q_UNUSED(event); + setSelectedTypeId(-1); + resetRoot(); +} + } // namespace FlameGraph diff --git a/src/libs/tracing/flamegraph.h b/src/libs/tracing/flamegraph.h index 265423e393a..a9f6ecc3711 100644 --- a/src/libs/tracing/flamegraph.h +++ b/src/libs/tracing/flamegraph.h @@ -45,6 +45,8 @@ class TRACING_EXPORT FlameGraph : public QQuickItem NOTIFY maximumDepthChanged) Q_PROPERTY(int depth READ depth NOTIFY depthChanged) Q_PROPERTY(QPersistentModelIndex root READ root WRITE setRoot NOTIFY rootChanged) + Q_PROPERTY(int selectedTypeId READ selectedTypeId WRITE setSelectedTypeId + NOTIFY selectedTypeIdChanged) public: FlameGraph(QQuickItem *parent = nullptr); @@ -101,6 +103,20 @@ public: static FlameGraphAttached *qmlAttachedProperties(QObject *object); + int selectedTypeId() const + { + return m_selectedTypeId; + } + + void setSelectedTypeId(int selectedTypeId) + { + if (m_selectedTypeId == selectedTypeId) + return; + + m_selectedTypeId = selectedTypeId; + emit selectedTypeIdChanged(m_selectedTypeId); + } + signals: void delegateChanged(QQmlComponent *delegate); void modelChanged(QAbstractItemModel *model); @@ -109,6 +125,7 @@ signals: void depthChanged(int depth); void maximumDepthChanged(); void rootChanged(const QPersistentModelIndex &root); + void selectedTypeIdChanged(int selectedTypeId); private: void rebuild(); @@ -120,11 +137,16 @@ private: int m_depth = 0; qreal m_sizeThreshold = 0; int m_maximumDepth = std::numeric_limits::max(); + int m_selectedTypeId = -1; int buildNode(const QModelIndex &parentIndex, QObject *parentObject, int depth, int maximumDepth); QObject *appendChild(QObject *parentObject, QQuickItem *parentItem, QQmlContext *context, const QModelIndex &childIndex, qreal position, qreal size); + + void mousePressEvent(QMouseEvent *event) final; + void mouseReleaseEvent(QMouseEvent *event) final; + void mouseDoubleClickEvent(QMouseEvent *event) final; }; } // namespace FlameGraph diff --git a/src/libs/tracing/qml/FlameGraphView.qml b/src/libs/tracing/qml/FlameGraphView.qml index b8706d03797..8f99b304c88 100644 --- a/src/libs/tracing/qml/FlameGraphView.qml +++ b/src/libs/tracing/qml/FlameGraphView.qml @@ -32,7 +32,16 @@ import QtQuick.Controls 1.3 ScrollView { id: root + property int selectedTypeId: -1 + signal typeSelected(int typeId) + + onSelectedTypeIdChanged: { + // selectedTypeId can be set from outside. Don't send typeSelected() from here. + tooltip.hoveredNode = null; + flamegraph.selectedTypeId = selectedTypeId; + } + property int sizeRole: -1 property var model: null @@ -117,25 +126,6 @@ ScrollView { } } - onSelectedTypeIdChanged: tooltip.hoveredNode = null - - MouseArea { - anchors.fill: parent - onClicked: { - selectedTypeId = -1; - tooltip.selectedNode = null; - if (model !== null) - model.typeSelected(-1); - } - onDoubleClicked: { - selectedTypeId = -1; - tooltip.selectedNode = null; - if (model !== null) - model.typeSelected(-1); - flamegraph.resetRoot(); - } - } - Flickable { id: flickable contentHeight: flamegraph.height @@ -158,6 +148,14 @@ ScrollView { maximumDepth: 128 y: flickable.height > height ? flickable.height - height : 0 + onSelectedTypeIdChanged: { + if (selectedTypeId !== root.selectedTypeId) { + // Change originates from inside. Send typeSelected(). + root.selectedTypeId = selectedTypeId; + root.typeSelected(selectedTypeId); + } + } + delegate: FlameGraphDelegate { id: flamegraphItem @@ -165,7 +163,7 @@ ScrollView { property bool isHighlighted: root.isHighlighted(flamegraphItem) itemHeight: flamegraph.delegateHeight - isSelected: typeId !== -1 && typeId === root.selectedTypeId + isSelected: typeId !== -1 && typeId === flamegraph.selectedTypeId borderColor: { if (isSelected) @@ -189,7 +187,7 @@ ScrollView { onIsSelectedChanged: { if (isSelected && (tooltip.selectedNode === null || - tooltip.selectedNode.typeId !== root.selectedTypeId)) { + tooltip.selectedNode.typeId !== flamegraph.selectedTypeId)) { tooltip.selectedNode = flamegraphItem; } else if (!isSelected && tooltip.selectedNode === flamegraphItem) { tooltip.selectedNode = null; @@ -222,7 +220,7 @@ ScrollView { if (tooltip.hoveredNode === flamegraphItem) { // Keep the window around until something else is hovered or selected. if (tooltip.selectedNode === null - || tooltip.selectedNode.typeId !== root.selectedTypeId) { + || tooltip.selectedNode.typeId !== flamegraph.selectedTypeId) { tooltip.selectedNode = flamegraphItem; } tooltip.hoveredNode = null; @@ -232,8 +230,7 @@ ScrollView { function selectClicked() { if (FlameGraph.dataValid) { tooltip.selectedNode = flamegraphItem; - selectedTypeId = FlameGraph.data(root.typeIdRole); - model.typeSelected(selectedTypeId); + flamegraph.selectedTypeId = FlameGraph.data(root.typeIdRole); model.gotoSourceLocation( FlameGraph.data(root.sourceFileRole), FlameGraph.data(root.sourceLineRole), @@ -246,6 +243,7 @@ ScrollView { tooltip.selectedNode = null; tooltip.hoveredNode = null; flamegraph.root = FlameGraph.modelIndex; + selectClicked(); } // Functions, not properties to limit the initial overhead when creating the nodes, @@ -288,9 +286,8 @@ ScrollView { } onClearSelection: { - selectedTypeId = -1; + flamegraph.selectedTypeId = -1; selectedNode = null; - root.model.typeSelected(-1); } dialogTitle: { diff --git a/src/libs/utils/historycompleter.cpp b/src/libs/utils/historycompleter.cpp index 736f55a7405..6d0484b85a0 100644 --- a/src/libs/utils/historycompleter.cpp +++ b/src/libs/utils/historycompleter.cpp @@ -36,6 +36,7 @@ #include #include #include +#include namespace Utils { namespace Internal { @@ -62,19 +63,35 @@ public: class HistoryLineDelegate : public QItemDelegate { public: - HistoryLineDelegate(QObject *parent) + HistoryLineDelegate(QAbstractItemView *parent) : QItemDelegate(parent) - , pixmap(Icons::EDIT_CLEAR.pixmap()) + , view(parent) + , icon(Icons::EDIT_CLEAR.icon()) {} void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const { + // from QHistoryCompleter + QStyleOptionViewItem optCopy = option; + optCopy.showDecorationSelected = true; + if (view->currentIndex() == index) + optCopy.state |= QStyle::State_HasFocus; QItemDelegate::paint(painter,option,index); - QRect r = QStyle::alignedRect(option.direction, Qt::AlignRight | Qt::AlignVCenter , pixmap.size(), option.rect); - painter->drawPixmap(r, pixmap); + // add remove button + QWindow *window = view->window()->windowHandle(); + const QPixmap iconPixmap = icon.pixmap(window, option.rect.size()); + QRect pixmapRect = QStyle::alignedRect(option.direction, + Qt::AlignRight | Qt::AlignVCenter, + iconPixmap.size() / window->devicePixelRatio(), + option.rect); + if (!clearIconSize.isValid()) + clearIconSize = pixmapRect.size(); + painter->drawPixmap(pixmapRect, iconPixmap); } - QPixmap pixmap; + QAbstractItemView *view; + QIcon icon; + mutable QSize clearIconSize; }; class HistoryLineView : public QListView @@ -83,26 +100,32 @@ public: HistoryLineView(HistoryCompleterPrivate *model_) : model(model_) { - HistoryLineDelegate *delegate = new HistoryLineDelegate(this); - pixmapWidth = delegate->pixmap.width(); + } + + void installDelegate() + { + delegate = new HistoryLineDelegate(this); setItemDelegate(delegate); } private: void mousePressEvent(QMouseEvent *event) { - int rr= event->x(); - if (layoutDirection() == Qt::LeftToRight) - rr = viewport()->width() - event->x(); - if (rr < pixmapWidth) { - model->removeRow(indexAt(event->pos()).row()); - return; + const QSize clearButtonSize = delegate->clearIconSize; + if (clearButtonSize.isValid()) { + int rr = event->x(); + if (layoutDirection() == Qt::LeftToRight) + rr = viewport()->width() - event->x(); + if (rr < clearButtonSize.width()) { + model->removeRow(indexAt(event->pos()).row()); + return; + } } QListView::mousePressEvent(event); } HistoryCompleterPrivate *model; - int pixmapWidth; + HistoryLineDelegate *delegate; }; } // namespace Internal @@ -178,7 +201,11 @@ HistoryCompleter::HistoryCompleter(const QString &historyKey, QObject *parent) d->isLastItemEmpty = theSettings->value(d->historyKeyIsLastItemEmpty, false).toBool(); setModel(d); - setPopup(new HistoryLineView(d)); + auto popup = new HistoryLineView(d); + setPopup(popup); + // setPopup unconditionally sets a delegate on the popup, + // so we need to set our delegate afterwards + popup->installDelegate(); } bool HistoryCompleter::removeHistoryItem(int index) diff --git a/src/plugins/android/javaeditor.cpp b/src/plugins/android/javaeditor.cpp index 81c3112219f..8b023b17032 100644 --- a/src/plugins/android/javaeditor.cpp +++ b/src/plugins/android/javaeditor.cpp @@ -75,7 +75,6 @@ JavaEditorFactory::JavaEditorFactory() setUseGenericHighlighter(true); setCommentDefinition(Utils::CommentDefinition::CppStyle); setEditorActionHandlers(TextEditor::TextEditorActionHandler::UnCommentSelection); - setMarksVisible(true); setCompletionAssistProvider(new TextEditor::KeywordsCompletionAssistProvider(keywords)); } diff --git a/src/plugins/autotest/gtest/gtestresult.h b/src/plugins/autotest/gtest/gtestresult.h index a0f33fa11a3..9e2d2557d82 100644 --- a/src/plugins/autotest/gtest/gtestresult.h +++ b/src/plugins/autotest/gtest/gtestresult.h @@ -33,7 +33,7 @@ namespace Internal { class GTestResult : public TestResult { public: - GTestResult(const QString &projectFile, const QString &name = QString()); + explicit GTestResult(const QString &projectFile, const QString &name = QString()); GTestResult(const QString &id, const QString &projectFile, const QString &name); const QString outputString(bool selected) const override; diff --git a/src/plugins/autotest/gtest/gtestsettingspage.cpp b/src/plugins/autotest/gtest/gtestsettingspage.cpp index 363d4e3ba1e..a500a10753e 100644 --- a/src/plugins/autotest/gtest/gtestsettingspage.cpp +++ b/src/plugins/autotest/gtest/gtestsettingspage.cpp @@ -91,8 +91,7 @@ GTestSettings GTestSettingsWidget::settings() const GTestSettingsPage::GTestSettingsPage(QSharedPointer settings, const ITestFramework *framework) : ITestSettingsPage(framework), - m_settings(qSharedPointerCast(settings)), - m_widget(0) + m_settings(qSharedPointerCast(settings)) { setDisplayName(QCoreApplication::translate("GTestFramework", GTest::Constants::FRAMEWORK_SETTINGS_CATEGORY)); diff --git a/src/plugins/autotest/gtest/gtestsettingspage.h b/src/plugins/autotest/gtest/gtestsettingspage.h index 3d4bc787788..4e5a056504e 100644 --- a/src/plugins/autotest/gtest/gtestsettingspage.h +++ b/src/plugins/autotest/gtest/gtestsettingspage.h @@ -41,7 +41,7 @@ class GTestSettingsWidget : public QWidget { Q_OBJECT public: - explicit GTestSettingsWidget(QWidget *parent = 0); + explicit GTestSettingsWidget(QWidget *parent = nullptr); void setSettings(const GTestSettings &settings); GTestSettings settings() const; diff --git a/src/plugins/autotest/itestframework.h b/src/plugins/autotest/itestframework.h index ec24bfa3a08..abcc2184068 100644 --- a/src/plugins/autotest/itestframework.h +++ b/src/plugins/autotest/itestframework.h @@ -47,11 +47,11 @@ public: virtual const char *name() const = 0; virtual unsigned priority() const = 0; // should this be modifyable? virtual bool hasFrameworkSettings() const { return false; } - virtual IFrameworkSettings *createFrameworkSettings() const { return 0; } + virtual IFrameworkSettings *createFrameworkSettings() const { return nullptr; } virtual ITestSettingsPage *createSettingsPage(QSharedPointer settings) const { Q_UNUSED(settings); - return 0; + return nullptr; } TestTreeItem *rootNode() @@ -78,8 +78,8 @@ protected: virtual TestTreeItem *createRootNode() const = 0; private: - TestTreeItem *m_rootNode = 0; - ITestParser *m_testParser = 0; + TestTreeItem *m_rootNode = nullptr; + ITestParser *m_testParser = nullptr; bool m_active = false; bool m_grouping = false; }; diff --git a/src/plugins/autotest/qtest/qttest_utils.cpp b/src/plugins/autotest/qtest/qttest_utils.cpp index 321cba252b0..47019270486 100644 --- a/src/plugins/autotest/qtest/qttest_utils.cpp +++ b/src/plugins/autotest/qtest/qttest_utils.cpp @@ -97,8 +97,9 @@ QStringList filterInterfering(const QStringList &provided, QStringList *omitted, // handle Quick options as well static const QSet knownInterferingQuickOption = { "-qtquick1" }; static const QSet knownAllowedQuickOptionsWithParameter { - "-import", "-plugins", "-input" + "-import", "-plugins", "-input", "-translation" }; + static const QSet knownAllowedSingleQuickOptions = { "-opengl", "-widgets" }; QStringList allowed; auto it = provided.cbegin(); @@ -126,6 +127,8 @@ QStringList filterInterfering(const QStringList &provided, QStringList *omitted, ++it; QTC_ASSERT(it != end, return QStringList()); allowed.append(*it); + } else if (knownAllowedSingleQuickOptions.contains(currentOpt)) { + allowed.append(currentOpt); } else if (knownInterferingQuickOption.contains(currentOpt)) { if (omitted) omitted->append(currentOpt); diff --git a/src/plugins/autotest/qtest/qttestsettingspage.cpp b/src/plugins/autotest/qtest/qttestsettingspage.cpp index 8aa4c6cc133..4ea1fe13196 100644 --- a/src/plugins/autotest/qtest/qttestsettingspage.cpp +++ b/src/plugins/autotest/qtest/qttestsettingspage.cpp @@ -95,8 +95,7 @@ QtTestSettings QtTestSettingsWidget::settings() const QtTestSettingsPage::QtTestSettingsPage(QSharedPointer settings, const ITestFramework *framework) : ITestSettingsPage(framework), - m_settings(qSharedPointerCast(settings)), - m_widget(0) + m_settings(qSharedPointerCast(settings)) { setDisplayName(QCoreApplication::translate("QtTestFramework", QtTest::Constants::FRAMEWORK_SETTINGS_CATEGORY)); diff --git a/src/plugins/autotest/quick/quicktest_utils.cpp b/src/plugins/autotest/quick/quicktest_utils.cpp index 81657e25c0d..92a36a9a19e 100644 --- a/src/plugins/autotest/quick/quicktest_utils.cpp +++ b/src/plugins/autotest/quick/quicktest_utils.cpp @@ -35,7 +35,8 @@ namespace Autotest { namespace Internal { namespace QuickTestUtils { -static const QByteArrayList valid = {"QUICK_TEST_MAIN", "QUICK_TEST_OPENGL_MAIN"}; +static const QByteArrayList valid = {"QUICK_TEST_MAIN", "QUICK_TEST_OPENGL_MAIN", + "QUICK_TEST_MAIN_WITH_SETUP"}; bool isQuickTestMacro(const QByteArray ¯o) { diff --git a/src/plugins/autotest/testcodeparser.h b/src/plugins/autotest/testcodeparser.h index 4dbacc7ad72..0bd9fa85a51 100644 --- a/src/plugins/autotest/testcodeparser.h +++ b/src/plugins/autotest/testcodeparser.h @@ -56,7 +56,7 @@ public: Shutdown }; - explicit TestCodeParser(TestTreeModel *parent = 0); + explicit TestCodeParser(TestTreeModel *parent = nullptr); virtual ~TestCodeParser(); void setState(State state); State state() const { return m_parserState; } diff --git a/src/plugins/autotest/testconfiguration.cpp b/src/plugins/autotest/testconfiguration.cpp index 5217ece730c..7aafdd315c3 100644 --- a/src/plugins/autotest/testconfiguration.cpp +++ b/src/plugins/autotest/testconfiguration.cpp @@ -59,8 +59,8 @@ TestConfiguration::~TestConfiguration() static bool isLocal(RunConfiguration *runConfiguration) { - Target *target = runConfiguration ? runConfiguration->target() : 0; - Kit *kit = target ? target->kit() : 0; + Target *target = runConfiguration ? runConfiguration->target() : nullptr; + Kit *kit = target ? target->kit() : nullptr; return DeviceTypeKitInformation::deviceTypeId(kit) == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE; } diff --git a/src/plugins/autotest/testresultdelegate.h b/src/plugins/autotest/testresultdelegate.h index bc61f2a0675..5921ebdc92d 100644 --- a/src/plugins/autotest/testresultdelegate.h +++ b/src/plugins/autotest/testresultdelegate.h @@ -37,7 +37,7 @@ class TestResultDelegate : public QStyledItemDelegate { Q_OBJECT public: - explicit TestResultDelegate(QObject *parent = 0); + explicit TestResultDelegate(QObject *parent = nullptr); void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override; QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override; diff --git a/src/plugins/autotest/testresultmodel.cpp b/src/plugins/autotest/testresultmodel.cpp index 4702894105b..240b61cfc4a 100644 --- a/src/plugins/autotest/testresultmodel.cpp +++ b/src/plugins/autotest/testresultmodel.cpp @@ -266,7 +266,7 @@ const TestResult *TestResultModel::testResult(const QModelIndex &idx) if (idx.isValid()) return static_cast(itemForIndex(idx))->testResult(); - return 0; + return nullptr; } void TestResultModel::recalculateMaxWidthOfFileName(const QFont &font) diff --git a/src/plugins/autotest/testresultmodel.h b/src/plugins/autotest/testresultmodel.h index 7b151d9b7d9..b6d38ffedd7 100644 --- a/src/plugins/autotest/testresultmodel.h +++ b/src/plugins/autotest/testresultmodel.h @@ -57,7 +57,7 @@ private: class TestResultModel : public Utils::TreeModel<> { public: - explicit TestResultModel(QObject *parent = 0); + explicit TestResultModel(QObject *parent = nullptr); void addTestResult(const TestResultPtr &testResult, bool autoExpand = false); void removeCurrentTestMessage(); @@ -75,7 +75,7 @@ private: void recalculateMaxWidthOfFileName(const QFont &font); void addFileName(const QString &fileName); TestResultItem *findParentItemFor(const TestResultItem *item, - const TestResultItem *startItem = 0) const; + const TestResultItem *startItem = nullptr) const; void updateParent(const TestResultItem *item); QMap m_testResultCount; int m_widthOfLineNumber = 0; @@ -89,7 +89,7 @@ class TestResultFilterModel : public QSortFilterProxyModel { Q_OBJECT public: - explicit TestResultFilterModel(TestResultModel *sourceModel, QObject *parent = 0); + explicit TestResultFilterModel(TestResultModel *sourceModel, QObject *parent = nullptr); void enableAllResultTypes(); void toggleTestResultType(Result::Type type); diff --git a/src/plugins/autotest/testresultspane.h b/src/plugins/autotest/testresultspane.h index 285b5baf0f4..9cedf7e7c6b 100644 --- a/src/plugins/autotest/testresultspane.h +++ b/src/plugins/autotest/testresultspane.h @@ -59,7 +59,7 @@ class ResultsTreeView : public Utils::TreeView { Q_OBJECT public: - explicit ResultsTreeView(QWidget *parent = 0); + explicit ResultsTreeView(QWidget *parent = nullptr); signals: void copyShortcutTriggered(); @@ -96,7 +96,7 @@ public: void showTestResult(const QModelIndex &index); private: - explicit TestResultsPane(QObject *parent = 0); + explicit TestResultsPane(QObject *parent = nullptr); void onItemActivated(const QModelIndex &index); void onRunAllTriggered(); diff --git a/src/plugins/autotest/testrunconfiguration.h b/src/plugins/autotest/testrunconfiguration.h index f08d198f584..c47b975f363 100644 --- a/src/plugins/autotest/testrunconfiguration.h +++ b/src/plugins/autotest/testrunconfiguration.h @@ -73,8 +73,8 @@ public: } private: - QWidget *createConfigurationWidget() override { return 0; } - TestConfiguration *m_testConfig = 0; + QWidget *createConfigurationWidget() override { return nullptr; } + TestConfiguration *m_testConfig = nullptr; }; } // namespace Internal diff --git a/src/plugins/autotest/testrunner.cpp b/src/plugins/autotest/testrunner.cpp index 29cb027efba..bd7a8f86f63 100644 --- a/src/plugins/autotest/testrunner.cpp +++ b/src/plugins/autotest/testrunner.cpp @@ -249,12 +249,10 @@ void TestRunner::onProcessFinished() resetInternalPointers(); - if (!m_selectedTests.isEmpty() && !m_fakeFutureInterface->isCanceled()) { + if (!m_selectedTests.isEmpty() && !m_fakeFutureInterface->isCanceled()) scheduleNext(); - } else { + else m_fakeFutureInterface->reportFinished(); - onFinished(); - } } void TestRunner::resetInternalPointers() @@ -516,7 +514,7 @@ void TestRunner::debugTests() m_futureWatcher.setFuture(futureInterface->future()); if (useOutputProcessor) { - TestOutputReader *outputreader = config->outputReader(*futureInterface, 0); + TestOutputReader *outputreader = config->outputReader(*futureInterface, nullptr); outputreader->setId(inferior.executable); connect(outputreader, &TestOutputReader::newOutputAvailable, TestResultsPane::instance(), &TestResultsPane::addOutput); diff --git a/src/plugins/autotest/testrunner.h b/src/plugins/autotest/testrunner.h index 9fb1322386c..bbfe90381e1 100644 --- a/src/plugins/autotest/testrunner.h +++ b/src/plugins/autotest/testrunner.h @@ -85,7 +85,7 @@ private: void runTests(); void debugTests(); void runOrDebugTests(); - explicit TestRunner(QObject *parent = 0); + explicit TestRunner(QObject *parent = nullptr); QFutureWatcher m_futureWatcher; QFutureInterface *m_fakeFutureInterface = nullptr; diff --git a/src/plugins/autotest/testsettingspage.cpp b/src/plugins/autotest/testsettingspage.cpp index bb24281f166..738e37ec33c 100644 --- a/src/plugins/autotest/testsettingspage.cpp +++ b/src/plugins/autotest/testsettingspage.cpp @@ -45,7 +45,7 @@ namespace Internal { class TestFilterDialog : public QDialog { public: - explicit TestFilterDialog(QWidget *parent = 0, Qt::WindowFlags f = 0); + explicit TestFilterDialog(QWidget *parent = nullptr, Qt::WindowFlags f = 0); QString filterPath() const; void setDetailsText(const QString &details) { m_details->setText(details); } void setDefaultFilterPath(const QString &defaultPath); @@ -276,7 +276,7 @@ void TestSettingsWidget::onRemoveFilterClicked() } TestSettingsPage::TestSettingsPage(const QSharedPointer &settings) - : m_settings(settings), m_widget(0) + : m_settings(settings) { setId("A.AutoTest.0.General"); setDisplayName(tr("General")); diff --git a/src/plugins/autotest/testsettingspage.h b/src/plugins/autotest/testsettingspage.h index 91c16d6705f..66077e20aea 100644 --- a/src/plugins/autotest/testsettingspage.h +++ b/src/plugins/autotest/testsettingspage.h @@ -40,7 +40,7 @@ class TestSettingsWidget : public QWidget { Q_OBJECT public: - explicit TestSettingsWidget(QWidget *parent = 0); + explicit TestSettingsWidget(QWidget *parent = nullptr); void setSettings(const TestSettings &settings); TestSettings settings() const; diff --git a/src/plugins/autotest/testtreeitem.h b/src/plugins/autotest/testtreeitem.h index dbb82f486a3..10c5dee29bd 100644 --- a/src/plugins/autotest/testtreeitem.h +++ b/src/plugins/autotest/testtreeitem.h @@ -109,8 +109,8 @@ public: virtual bool canProvideTestConfiguration() const { return false; } virtual bool canProvideDebugConfiguration() const { return false; } - virtual TestConfiguration *testConfiguration() const { return 0; } - virtual TestConfiguration *debugConfiguration() const { return 0; } + virtual TestConfiguration *testConfiguration() const { return nullptr; } + virtual TestConfiguration *debugConfiguration() const { return nullptr; } TestConfiguration *asConfiguration(TestRunMode mode) const; virtual QList getAllTestConfigurations() const; virtual QList getSelectedTestConfigurations() const; diff --git a/src/plugins/autotest/testtreeitemdelegate.h b/src/plugins/autotest/testtreeitemdelegate.h index 3647c3dc0f9..02c87b36273 100644 --- a/src/plugins/autotest/testtreeitemdelegate.h +++ b/src/plugins/autotest/testtreeitemdelegate.h @@ -34,7 +34,7 @@ class TestTreeItemDelegate : public QStyledItemDelegate { Q_OBJECT public: - explicit TestTreeItemDelegate(QObject *parent = 0); + explicit TestTreeItemDelegate(QObject *parent = nullptr); ~TestTreeItemDelegate(); public: diff --git a/src/plugins/autotest/testtreemodel.h b/src/plugins/autotest/testtreemodel.h index 1d6082d5ef3..561e76302ad 100644 --- a/src/plugins/autotest/testtreemodel.h +++ b/src/plugins/autotest/testtreemodel.h @@ -92,7 +92,7 @@ private: bool sweepChildren(TestTreeItem *item); void insertItemInParent(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled); void revalidateCheckState(TestTreeItem *item); - explicit TestTreeModel(QObject *parent = 0); + explicit TestTreeModel(QObject *parent = nullptr); void setupParsingConnections(); void filterAndInsert(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled); QList testItemsByName(TestTreeItem *root, const QString &testName); @@ -111,7 +111,7 @@ public: ShowAll = ShowInitAndCleanup | ShowTestData }; - explicit TestTreeSortFilterModel(TestTreeModel *sourceModel, QObject *parent = 0); + explicit TestTreeSortFilterModel(TestTreeModel *sourceModel, QObject *parent = nullptr); void setSortMode(TestTreeItem::SortMode sortMode); void setFilterMode(FilterMode filterMode); void toggleFilter(FilterMode filterMode); diff --git a/src/plugins/autotest/testtreeview.h b/src/plugins/autotest/testtreeview.h index 1641851cc7a..10034e4ff83 100644 --- a/src/plugins/autotest/testtreeview.h +++ b/src/plugins/autotest/testtreeview.h @@ -39,7 +39,7 @@ class TestTreeView : public Utils::NavigationTreeView Q_OBJECT public: - explicit TestTreeView(QWidget *parent = 0); + explicit TestTreeView(QWidget *parent = nullptr); void selectAll() override; void deselectAll(); diff --git a/src/plugins/autotest/unit_test/mixed_atp/tests/auto/dummy/tst_foo.h b/src/plugins/autotest/unit_test/mixed_atp/tests/auto/dummy/tst_foo.h index 1f70867f807..4ec7ac6621e 100644 --- a/src/plugins/autotest/unit_test/mixed_atp/tests/auto/dummy/tst_foo.h +++ b/src/plugins/autotest/unit_test/mixed_atp/tests/auto/dummy/tst_foo.h @@ -22,8 +22,8 @@ ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ -#ifndef FOO_H_INCLUDED -#define FOO_H_INCLUDED + +#pragma once #include @@ -46,5 +46,3 @@ private slots: void test_case4(); void test_case5() {} }; - -#endif diff --git a/src/plugins/autotest/unit_test/simple_gt/tests/gt2/queuetest.h b/src/plugins/autotest/unit_test/simple_gt/tests/gt2/queuetest.h index 2ba330d6f68..7fb47e8e62e 100644 --- a/src/plugins/autotest/unit_test/simple_gt/tests/gt2/queuetest.h +++ b/src/plugins/autotest/unit_test/simple_gt/tests/gt2/queuetest.h @@ -22,6 +22,9 @@ ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ + +#pragma once + #include class QueueTest : public ::testing::Test diff --git a/src/plugins/autotest/unit_test/simple_gt/tests/gt3/dummytest.h b/src/plugins/autotest/unit_test/simple_gt/tests/gt3/dummytest.h index f92c1a1b160..9e3711eff30 100644 --- a/src/plugins/autotest/unit_test/simple_gt/tests/gt3/dummytest.h +++ b/src/plugins/autotest/unit_test/simple_gt/tests/gt3/dummytest.h @@ -22,6 +22,9 @@ ** be met: https://www.gnu.org/licenses/gpl-3.0.html. ** ****************************************************************************/ + +#pragma once + #include #include diff --git a/src/plugins/bazaar/optionspage.ui b/src/plugins/bazaar/optionspage.ui index 221c6d93838..419ce3e94d3 100644 --- a/src/plugins/bazaar/optionspage.ui +++ b/src/plugins/bazaar/optionspage.ui @@ -120,6 +120,9 @@ s + + 360 + 30 diff --git a/src/plugins/clangcodemodel/clangbackendreceiver.cpp b/src/plugins/clangcodemodel/clangbackendreceiver.cpp index 2a2792b921d..d340a990d31 100644 --- a/src/plugins/clangcodemodel/clangbackendreceiver.cpp +++ b/src/plugins/clangcodemodel/clangbackendreceiver.cpp @@ -265,7 +265,7 @@ CppTools::SymbolInfo toSymbolInfo(const FollowSymbolMessage &message) result.endColumn = static_cast(end.column); result.fileName = start.filePath; - result.isPureDeclarationForUsage = message.result.isPureDeclarationForUsage; + result.isResultOnlyForFallBack = message.result.isResultOnlyForFallBack; return result; } diff --git a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp index 24b9506fc28..d7af5ab8ec7 100644 --- a/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp +++ b/src/plugins/clangcodemodel/clangdiagnostictooltipwidget.cpp @@ -289,7 +289,7 @@ private: const QString link = documentationUrlForOption(option); if (link.isEmpty()) - return QString(); + return option; return wrapInLink(option.toString(), link); } diff --git a/src/plugins/clangcodemodel/clangfollowsymbol.cpp b/src/plugins/clangcodemodel/clangfollowsymbol.cpp index e1f33bdf854..f503a777d2a 100644 --- a/src/plugins/clangcodemodel/clangfollowsymbol.cpp +++ b/src/plugins/clangcodemodel/clangfollowsymbol.cpp @@ -145,7 +145,7 @@ static ::Utils::ProcessLinkCallback extendedCallback(::Utils::ProcessLinkCallbac { // If globalFollowSymbol finds nothing follow to the declaration. return [original_callback = std::move(callback), result](const ::Utils::Link &link) { - if (!link.hasValidTarget() && result.isPureDeclarationForUsage) { + if (link.linkTextStart < 0 && result.isResultOnlyForFallBack) { return original_callback(::Utils::Link(result.fileName, result.startLine, result.startColumn - 1)); } @@ -198,7 +198,7 @@ void ClangFollowSymbol::findLink(const CppTools::CursorInEditor &data, return callback(Utils::Link()); CppTools::SymbolInfo result = m_watcher->result(); // We did not fail but the result is empty - if (result.fileName.isEmpty() || result.isPureDeclarationForUsage) { + if (result.fileName.isEmpty() || result.isResultOnlyForFallBack) { const CppTools::RefactoringEngineInterface &refactoringEngine = *CppTools::CppModelManager::instance(); refactoringEngine.globalFollowSymbol(data, diff --git a/src/plugins/clangrefactoring/clangrefactoring.qbs b/src/plugins/clangrefactoring/clangrefactoring.qbs index 9778e1a3d04..803986423c0 100644 --- a/src/plugins/clangrefactoring/clangrefactoring.qbs +++ b/src/plugins/clangrefactoring/clangrefactoring.qbs @@ -59,6 +59,8 @@ QtcPlugin { "projectpartutilities.h", "qtcreatorclangqueryfindfilter.cpp", "qtcreatorclangqueryfindfilter.h", + "qtcreatoreditormanager.cpp", + "qtcreatoreditormanager.h", "qtcreatorsearch.cpp", "qtcreatorsearch.h", "qtcreatorsearchhandle.cpp", diff --git a/src/plugins/clangtools/clangselectablefilesdialog.cpp b/src/plugins/clangtools/clangselectablefilesdialog.cpp index 91b5c8ea531..e9cdc42625c 100644 --- a/src/plugins/clangtools/clangselectablefilesdialog.cpp +++ b/src/plugins/clangtools/clangselectablefilesdialog.cpp @@ -25,6 +25,7 @@ #include "clangselectablefilesdialog.h" #include "ui_clangselectablefilesdialog.h" +#include "ui_clangtoolsbasicsettings.h" #include "clangtoolsprojectsettings.h" #include "clangtoolssettings.h" @@ -269,9 +270,10 @@ enum { GlobalSettings , CustomSettings }; static Core::Id diagnosticConfiguration(ClangToolsProjectSettings *settings) { - if (settings->useGlobalSettings()) - return ClangToolsSettings::instance()->savedDiagnosticConfigId(); - return settings->diagnosticConfig(); + Core::Id id = settings->diagnosticConfig(); + if (id.isValid()) + return id; + return ClangToolsSettings::instance()->savedDiagnosticConfigId(); } SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo, @@ -290,37 +292,54 @@ SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo, m_ui->buttons->setStandardButtons(QDialogButtonBox::Cancel); m_ui->buttons->addButton(m_analyzeButton, QDialogButtonBox::AcceptRole); - m_ui->diagnosticConfigsSelectionWidget->showLabel(false); + CppTools::ClangDiagnosticConfigsSelectionWidget *diagnosticConfigsSelectionWidget + = m_ui->clangToolsBasicSettings->ui()->clangDiagnosticConfigsSelectionWidget; + QCheckBox *buildBeforeAnalysis = m_ui->clangToolsBasicSettings->ui()->buildBeforeAnalysis; ClangToolsProjectSettings *settings = ClangToolsProjectSettingsManager::getSettings(m_project); + m_customDiagnosticConfig = diagnosticConfiguration(settings); + m_buildBeforeAnalysis = settings->buildBeforeAnalysis(); if (settings->useGlobalSettings()) { m_ui->globalOrCustom->setCurrentIndex(GlobalSettings); - m_ui->diagnosticConfigsSelectionWidget->setEnabled(false); + m_ui->clangToolsBasicSettings->setEnabled(false); + diagnosticConfigsSelectionWidget->refresh( + ClangToolsSettings::instance()->savedDiagnosticConfigId()); + buildBeforeAnalysis->setCheckState( + ClangToolsSettings::instance()->savedBuildBeforeAnalysis() + ? Qt::Checked : Qt::Unchecked); } else { m_ui->globalOrCustom->setCurrentIndex(CustomSettings); - m_ui->diagnosticConfigsSelectionWidget->setEnabled(true); + m_ui->clangToolsBasicSettings->setEnabled(true); + diagnosticConfigsSelectionWidget->refresh(m_customDiagnosticConfig); + buildBeforeAnalysis->setCheckState(m_buildBeforeAnalysis ? Qt::Checked : Qt::Unchecked); } - m_customDiagnosticConfig = diagnosticConfiguration(settings); - m_ui->diagnosticConfigsSelectionWidget->refresh(m_customDiagnosticConfig); connect(m_ui->globalOrCustom, static_cast(&QComboBox::currentIndexChanged), - [this](int index){ - m_ui->diagnosticConfigsSelectionWidget->setEnabled(index == CustomSettings); + [=](int index){ + m_ui->clangToolsBasicSettings->setEnabled(index == CustomSettings); if (index == CustomSettings) { - m_ui->diagnosticConfigsSelectionWidget->refresh(m_customDiagnosticConfig); + diagnosticConfigsSelectionWidget->refresh(m_customDiagnosticConfig); + buildBeforeAnalysis->setCheckState(m_buildBeforeAnalysis ? Qt::Checked : Qt::Unchecked); } else { - m_ui->diagnosticConfigsSelectionWidget->refresh( + diagnosticConfigsSelectionWidget->refresh( ClangToolsSettings::instance()->savedDiagnosticConfigId()); + buildBeforeAnalysis->setCheckState( + ClangToolsSettings::instance()->savedBuildBeforeAnalysis() + ? Qt::Checked : Qt::Unchecked); } }); - connect(m_ui->diagnosticConfigsSelectionWidget, + connect(diagnosticConfigsSelectionWidget, &ClangDiagnosticConfigsSelectionWidget::currentConfigChanged, [this](const Core::Id ¤tConfigId) { if (m_ui->globalOrCustom->currentIndex() == CustomSettings) m_customDiagnosticConfig = currentConfigId; }); + connect(buildBeforeAnalysis, &QCheckBox::toggled, [this](bool checked) { + if (m_ui->globalOrCustom->currentIndex() == CustomSettings) + m_buildBeforeAnalysis = checked; + }); // Restore selection if (settings->selectedDirs().isEmpty() && settings->selectedFiles().isEmpty()) @@ -335,7 +354,12 @@ SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo, connect(CppTools::codeModelSettings().data(), &CppTools::CppCodeModelSettings::changed, this, [=]() { - m_ui->diagnosticConfigsSelectionWidget->refresh(diagnosticConfiguration(settings)); + if (m_ui->globalOrCustom->currentIndex() == CustomSettings) { + diagnosticConfigsSelectionWidget->refresh(m_customDiagnosticConfig); + } else { + diagnosticConfigsSelectionWidget->refresh( + ClangToolsSettings::instance()->savedDiagnosticConfigId()); + } }); } @@ -350,9 +374,10 @@ void SelectableFilesDialog::accept() { ClangToolsProjectSettings *settings = ClangToolsProjectSettingsManager::getSettings(m_project); - // Save diagnostic configuration + // Save diagnostic configuration and flag to build before analysis settings->setUseGlobalSettings(m_ui->globalOrCustom->currentIndex() == GlobalSettings); settings->setDiagnosticConfig(m_customDiagnosticConfig); + settings->setBuildBeforeAnalysis(m_buildBeforeAnalysis); // Save selection QSet checkedDirs; diff --git a/src/plugins/clangtools/clangselectablefilesdialog.h b/src/plugins/clangtools/clangselectablefilesdialog.h index e639d061992..39dc1fcbede 100644 --- a/src/plugins/clangtools/clangselectablefilesdialog.h +++ b/src/plugins/clangtools/clangselectablefilesdialog.h @@ -65,6 +65,7 @@ private: Core::Id m_customDiagnosticConfig; ProjectExplorer::Project *m_project; QPushButton *m_analyzeButton = nullptr; + bool m_buildBeforeAnalysis = true; }; } // namespace Internal diff --git a/src/plugins/clangtools/clangselectablefilesdialog.ui b/src/plugins/clangtools/clangselectablefilesdialog.ui index 69af94c4c68..316b9946fb9 100644 --- a/src/plugins/clangtools/clangselectablefilesdialog.ui +++ b/src/plugins/clangtools/clangselectablefilesdialog.ui @@ -15,33 +15,44 @@ - + - Diagnostic Configuration + General - - false - - - false - - + - + - - Global - + + + + Global Settings + + + + + Custom Settings + + + - - Custom - + + + Qt::Horizontal + + + + 40 + 20 + + + - + - + @@ -76,9 +87,9 @@ - CppTools::ClangDiagnosticConfigsSelectionWidget + ClangTools::ClangToolsBasicSettings QWidget -
cpptools/clangdiagnosticconfigsselectionwidget.h
+
clangtools/clangtoolsbasicsettings.h
diff --git a/src/plugins/clangtools/clangtoolruncontrol.cpp b/src/plugins/clangtools/clangtoolruncontrol.cpp index 707ccccfa3e..cc25d5124d2 100644 --- a/src/plugins/clangtools/clangtoolruncontrol.cpp +++ b/src/plugins/clangtools/clangtoolruncontrol.cpp @@ -27,6 +27,7 @@ #include "clangtool.h" #include "clangtoolslogfilereader.h" +#include "clangtoolsprojectsettings.h" #include "clangtoolssettings.h" #include "clangtoolsutils.h" #include "clangtoolrunner.h" @@ -237,12 +238,12 @@ ClangToolRunControl::ClangToolRunControl(RunControl *runControl, { addStartDependency(m_projectBuilder); - auto *settings = ClangToolsSettings::instance(); - m_projectBuilder->setEnabled(settings->savedBuildBeforeAnalysis()); - - connect(settings, &ClangToolsSettings::buildBeforeAnalysisChanged, this, [this](bool checked) { - m_projectBuilder->setEnabled(checked); - }); + ClangToolsProjectSettings *projectSettings = ClangToolsProjectSettingsManager::getSettings( + target->project()); + if (projectSettings->useGlobalSettings()) + m_projectBuilder->setEnabled(ClangToolsSettings::instance()->savedBuildBeforeAnalysis()); + else + m_projectBuilder->setEnabled(projectSettings->buildBeforeAnalysis()); } void ClangToolRunControl::init() diff --git a/src/plugins/clangtools/clangtools.pro b/src/plugins/clangtools/clangtools.pro index 5f855290e00..f0611a6c858 100644 --- a/src/plugins/clangtools/clangtools.pro +++ b/src/plugins/clangtools/clangtools.pro @@ -19,6 +19,7 @@ SOURCES += \ clangtool.cpp \ clangtoolruncontrol.cpp \ clangtoolrunner.cpp \ + clangtoolsbasicsettings.cpp \ clangtoolsdiagnostic.cpp \ clangtoolsdiagnosticmodel.cpp \ clangtoolslogfilereader.cpp \ @@ -41,6 +42,7 @@ HEADERS += \ clangtoolruncontrol.h \ clangtoolrunner.h \ clangtools_global.h \ + clangtoolsbasicsettings.h \ clangtoolsconstants.h \ clangtoolsdiagnostic.h \ clangtoolsdiagnosticmodel.h \ @@ -54,7 +56,8 @@ HEADERS += \ FORMS += \ clangtoolsprojectsettingswidget.ui \ clangtoolsconfigwidget.ui \ - clangselectablefilesdialog.ui + clangselectablefilesdialog.ui \ + clangtoolsbasicsettings.ui equals(TEST, 1) { HEADERS += \ diff --git a/src/plugins/clangtools/clangtools.qbs b/src/plugins/clangtools/clangtools.qbs index 71df19430c9..e0bab2c34ca 100644 --- a/src/plugins/clangtools/clangtools.qbs +++ b/src/plugins/clangtools/clangtools.qbs @@ -48,11 +48,6 @@ QtcPlugin { "clangselectablefilesdialog.cpp", "clangselectablefilesdialog.h", "clangselectablefilesdialog.ui", - "clangtoolsdiagnosticview.cpp", - "clangtoolsdiagnosticview.h", - "clangtoolsprojectsettingswidget.cpp", - "clangtoolsprojectsettingswidget.h", - "clangtoolsprojectsettingswidget.ui", "clangtidyclazyruncontrol.cpp", "clangtidyclazyruncontrol.h", "clangtidyclazyrunner.cpp", @@ -66,6 +61,9 @@ QtcPlugin { "clangtoolrunner.cpp", "clangtoolrunner.h", "clangtools_global.h", + "clangtoolsbasicsettings.cpp", + "clangtoolsbasicsettings.h", + "clangtoolsbasicsettings.ui", "clangtoolsconfigwidget.cpp", "clangtoolsconfigwidget.h", "clangtoolsconfigwidget.ui", @@ -74,10 +72,15 @@ QtcPlugin { "clangtoolsdiagnostic.h", "clangtoolsdiagnosticmodel.cpp", "clangtoolsdiagnosticmodel.h", + "clangtoolsdiagnosticview.cpp", + "clangtoolsdiagnosticview.h", "clangtoolslogfilereader.cpp", "clangtoolslogfilereader.h", "clangtoolsprojectsettings.cpp", "clangtoolsprojectsettings.h", + "clangtoolsprojectsettingswidget.cpp", + "clangtoolsprojectsettingswidget.h", + "clangtoolsprojectsettingswidget.ui", "clangtoolssettings.cpp", "clangtoolssettings.h", "clangtoolsutils.cpp", diff --git a/src/plugins/clangtools/clangtoolsbasicsettings.cpp b/src/plugins/clangtools/clangtoolsbasicsettings.cpp new file mode 100644 index 00000000000..7fe56e9193b --- /dev/null +++ b/src/plugins/clangtools/clangtoolsbasicsettings.cpp @@ -0,0 +1,50 @@ +/**************************************************************************** +** +** Copyright (C) 2018 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 "clangtoolsbasicsettings.h" +#include "ui_clangtoolsbasicsettings.h" + +#include "clangtoolsutils.h" + +namespace ClangTools { + +ClangToolsBasicSettings::ClangToolsBasicSettings(QWidget *parent) + : QWidget(parent) + , m_ui(new Ui::ClangToolsBasicSettings) +{ + m_ui->setupUi(this); +} + +ClangToolsBasicSettings::~ClangToolsBasicSettings() +{ + delete m_ui; +} + +Ui::ClangToolsBasicSettings *ClangToolsBasicSettings::ui() +{ + return m_ui; +} + +} // namespace ClangTools diff --git a/src/plugins/clangtools/clangtoolsbasicsettings.h b/src/plugins/clangtools/clangtoolsbasicsettings.h new file mode 100644 index 00000000000..27cdb427865 --- /dev/null +++ b/src/plugins/clangtools/clangtoolsbasicsettings.h @@ -0,0 +1,49 @@ +/**************************************************************************** +** +** Copyright (C) 2016 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 ClangTools { + +namespace Ui { class ClangToolsBasicSettings; } + +class ClangExecutableVersion; + +class ClangToolsBasicSettings : public QWidget +{ + Q_OBJECT + +public: + explicit ClangToolsBasicSettings(QWidget *parent = 0); + ~ClangToolsBasicSettings(); + + Ui::ClangToolsBasicSettings *ui(); +private: + Ui::ClangToolsBasicSettings *m_ui; +}; + +} // namespace ClangTools diff --git a/src/plugins/clangtools/clangtoolsbasicsettings.ui b/src/plugins/clangtools/clangtoolsbasicsettings.ui new file mode 100644 index 00000000000..22842500d52 --- /dev/null +++ b/src/plugins/clangtools/clangtoolsbasicsettings.ui @@ -0,0 +1,50 @@ + + + ClangTools::ClangToolsBasicSettings + + + + 0 + 0 + 400 + 300 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + + + Build the project before analysis + + + + + + + + + + + CppTools::ClangDiagnosticConfigsSelectionWidget + QWidget +
cpptools/clangdiagnosticconfigsselectionwidget.h
+
+
+ + +
diff --git a/src/plugins/clangtools/clangtoolsconfigwidget.cpp b/src/plugins/clangtools/clangtoolsconfigwidget.cpp index 313c343194c..c721966e9de 100644 --- a/src/plugins/clangtools/clangtoolsconfigwidget.cpp +++ b/src/plugins/clangtools/clangtoolsconfigwidget.cpp @@ -24,6 +24,7 @@ ****************************************************************************/ #include "clangtoolsconfigwidget.h" +#include "ui_clangtoolsbasicsettings.h" #include "ui_clangtoolsconfigwidget.h" #include "clangtoolsutils.h" @@ -54,24 +55,27 @@ ClangToolsConfigWidget::ClangToolsConfigWidget( static_cast(&QSpinBox::valueChanged), [settings](int count) { settings->setSimultaneousProcesses(count); }); - m_ui->buildBeforeAnalysis->setCheckState(settings->savedBuildBeforeAnalysis() + QCheckBox *buildBeforeAnalysis = m_ui->clangToolsBasicSettings->ui()->buildBeforeAnalysis; + buildBeforeAnalysis->setCheckState(settings->savedBuildBeforeAnalysis() ? Qt::Checked : Qt::Unchecked); - connect(m_ui->buildBeforeAnalysis, &QCheckBox::toggled, [settings](bool checked) { + connect(buildBeforeAnalysis, &QCheckBox::toggled, [settings](bool checked) { settings->setBuildBeforeAnalysis(checked); }); - m_ui->clangDiagnosticConfigsSelectionWidget->refresh(settings->savedDiagnosticConfigId()); + CppTools::ClangDiagnosticConfigsSelectionWidget *clangDiagnosticConfigsSelectionWidget + = m_ui->clangToolsBasicSettings->ui()->clangDiagnosticConfigsSelectionWidget; + clangDiagnosticConfigsSelectionWidget->refresh(settings->savedDiagnosticConfigId()); - connect(m_ui->clangDiagnosticConfigsSelectionWidget, + connect(clangDiagnosticConfigsSelectionWidget, &CppTools::ClangDiagnosticConfigsSelectionWidget::currentConfigChanged, this, [this](const Core::Id ¤tConfigId) { m_settings->setDiagnosticConfigId(currentConfigId); }); connect(CppTools::codeModelSettings().data(), &CppTools::CppCodeModelSettings::changed, - this, [this]() { + this, [=]() { // Settings were applied so apply also the current selection if possible. - m_ui->clangDiagnosticConfigsSelectionWidget->refresh(m_settings->diagnosticConfigId()); + clangDiagnosticConfigsSelectionWidget->refresh(m_settings->diagnosticConfigId()); m_settings->writeSettings(); }); } diff --git a/src/plugins/clangtools/clangtoolsconfigwidget.ui b/src/plugins/clangtools/clangtoolsconfigwidget.ui index 1119a745327..ea8dafb92b8 100644 --- a/src/plugins/clangtools/clangtoolsconfigwidget.ui +++ b/src/plugins/clangtools/clangtoolsconfigwidget.ui @@ -21,11 +21,7 @@ - - - Build the project before analysis - - + @@ -61,9 +57,6 @@ - - - @@ -84,9 +77,9 @@ - CppTools::ClangDiagnosticConfigsSelectionWidget + ClangTools::ClangToolsBasicSettings QWidget -
cpptools/clangdiagnosticconfigsselectionwidget.h
+
clangtools/clangtoolsbasicsettings.h
diff --git a/src/plugins/clangtools/clangtoolsprojectsettings.cpp b/src/plugins/clangtools/clangtoolsprojectsettings.cpp index 4622afe2c41..9f2bad1999c 100644 --- a/src/plugins/clangtools/clangtoolsprojectsettings.cpp +++ b/src/plugins/clangtools/clangtoolsprojectsettings.cpp @@ -36,6 +36,7 @@ namespace Internal { static const char SETTINGS_KEY_USE_GLOBAL_SETTINGS[] = "ClangTools.UseGlobalSettings"; static const char SETTINGS_KEY_DIAGNOSTIC_CONFIG[] = "ClangTools.DiagnosticConfig"; +static const char SETTINGS_KEY_BUILD_BEFORE_ANALYSIS[] = "ClangTools.BuildBeforeAnalysis"; static const char SETTINGS_KEY_SELECTED_DIRS[] = "ClangTools.SelectedDirs"; static const char SETTINGS_KEY_SELECTED_FILES[] = "ClangTools.SelectedFiles"; static const char SETTINGS_KEY_SUPPRESSED_DIAGS[] = "ClangTools.SuppressedDiagnostics"; @@ -86,6 +87,7 @@ void ClangToolsProjectSettings::load() m_useGlobalSettings = useGlobalVariant.isValid() ? useGlobalVariant.toBool() : true; m_diagnosticConfig = Core::Id::fromSetting( m_project->namedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG)); + m_buildBeforeAnalysis = m_project->namedSettings(SETTINGS_KEY_BUILD_BEFORE_ANALYSIS).toBool(); auto toFileName = [](const QString &s) { return Utils::FileName::fromString(s); }; @@ -124,6 +126,7 @@ void ClangToolsProjectSettings::store() { m_project->setNamedSettings(SETTINGS_KEY_USE_GLOBAL_SETTINGS, m_useGlobalSettings); m_project->setNamedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG, m_diagnosticConfig.toSetting()); + m_project->setNamedSettings(SETTINGS_KEY_BUILD_BEFORE_ANALYSIS, m_buildBeforeAnalysis); const QStringList dirs = Utils::transform(m_selectedDirs.toList(), &Utils::FileName::toString); m_project->setNamedSettings(SETTINGS_KEY_SELECTED_DIRS, dirs); @@ -164,6 +167,16 @@ void ClangToolsProjectSettings::setDiagnosticConfig(const Core::Id &diagnosticCo m_diagnosticConfig = diagnosticConfig; } +bool ClangToolsProjectSettings::buildBeforeAnalysis() const +{ + return m_buildBeforeAnalysis; +} + +void ClangToolsProjectSettings::setBuildBeforeAnalysis(bool build) +{ + m_buildBeforeAnalysis = build; +} + ClangToolsProjectSettingsManager::ClangToolsProjectSettingsManager() { QObject::connect(ProjectExplorer::SessionManager::instance(), diff --git a/src/plugins/clangtools/clangtoolsprojectsettings.h b/src/plugins/clangtools/clangtoolsprojectsettings.h index 659a7b56485..e6a3351ca74 100644 --- a/src/plugins/clangtools/clangtoolsprojectsettings.h +++ b/src/plugins/clangtools/clangtoolsprojectsettings.h @@ -81,6 +81,9 @@ public: Core::Id diagnosticConfig() const; void setDiagnosticConfig(const Core::Id &diagnosticConfig); + bool buildBeforeAnalysis() const; + void setBuildBeforeAnalysis(bool build); + QSet selectedDirs() const { return m_selectedDirs; } void setSelectedDirs(const QSet &value) { m_selectedDirs = value; } @@ -105,6 +108,7 @@ private: QSet m_selectedDirs; QSet m_selectedFiles; SuppressedDiagnosticsList m_suppressedDiagnostics; + bool m_buildBeforeAnalysis = true; }; class ClangToolsProjectSettingsManager diff --git a/src/plugins/clangtools/clangtoolssettings.cpp b/src/plugins/clangtools/clangtoolssettings.cpp index 87b00d9d64e..54a9b1338ac 100644 --- a/src/plugins/clangtools/clangtoolssettings.cpp +++ b/src/plugins/clangtools/clangtoolssettings.cpp @@ -73,7 +73,7 @@ bool ClangToolsSettings::savedBuildBeforeAnalysis() const return m_savedBuildBeforeAnalysis; } -int ClangToolsSettings::buildBeforeAnalysis() const +bool ClangToolsSettings::buildBeforeAnalysis() const { return m_buildBeforeAnalysis; } diff --git a/src/plugins/clangtools/clangtoolssettings.h b/src/plugins/clangtools/clangtoolssettings.h index 8d3168338d2..07f5bc7f473 100644 --- a/src/plugins/clangtools/clangtoolssettings.h +++ b/src/plugins/clangtools/clangtoolssettings.h @@ -48,7 +48,7 @@ public: int simultaneousProcesses() const; void setSimultaneousProcesses(int processes); - int buildBeforeAnalysis() const; + bool buildBeforeAnalysis() const; void setBuildBeforeAnalysis(bool build); Core::Id diagnosticConfigId() const; diff --git a/src/plugins/clearcase/settingspage.ui b/src/plugins/clearcase/settingspage.ui index b925ec7f8d6..ce07cdd053a 100644 --- a/src/plugins/clearcase/settingspage.ui +++ b/src/plugins/clearcase/settingspage.ui @@ -190,6 +190,9 @@ 360 + + 30 + diff --git a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp index c1ca6e7970b..e1374ac73af 100644 --- a/src/plugins/coreplugin/actionmanager/actioncontainer.cpp +++ b/src/plugins/coreplugin/actionmanager/actioncontainer.cpp @@ -403,6 +403,7 @@ void MenuActionContainer::insertAction(QAction *before, QAction *action) void MenuActionContainer::insertMenu(QAction *before, QMenu *menu) { + menu->setParent(m_menu, menu->windowFlags()); // work around issues with Qt Wayland (QTBUG-68636) m_menu->insertMenu(before, menu); } @@ -509,6 +510,7 @@ void MenuBarActionContainer::insertAction(QAction *before, QAction *action) void MenuBarActionContainer::insertMenu(QAction *before, QMenu *menu) { + menu->setParent(m_menuBar, menu->windowFlags()); // work around issues with Qt Wayland (QTBUG-68636) m_menuBar->insertMenu(before, menu); } diff --git a/src/plugins/coreplugin/mimetypesettings.cpp b/src/plugins/coreplugin/mimetypesettings.cpp index aed356185a0..2e4272ab876 100644 --- a/src/plugins/coreplugin/mimetypesettings.cpp +++ b/src/plugins/coreplugin/mimetypesettings.cpp @@ -85,11 +85,11 @@ public: : QAbstractTableModel(parent) {} virtual ~MimeTypeSettingsModel() {} - virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override; - virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override; - virtual QVariant headerData(int section, Qt::Orientation orientation, - int role = Qt::DisplayRole) const override; - virtual QVariant data(const QModelIndex &modelIndex, int role = Qt::DisplayRole) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; + QVariant headerData(int section, Qt::Orientation orientation, + int role = Qt::DisplayRole) const override; + QVariant data(const QModelIndex &modelIndex, int role = Qt::DisplayRole) const override; void load(); diff --git a/src/plugins/cpaster/cpaster.qbs b/src/plugins/cpaster/cpaster.qbs index f9144b53d81..694e495f43a 100644 --- a/src/plugins/cpaster/cpaster.qbs +++ b/src/plugins/cpaster/cpaster.qbs @@ -10,6 +10,7 @@ QtcPlugin { Depends { name: "TextEditor" } cpp.includePaths: base.concat([project.sharedSourcesDir + "/cpaster"]) + cpp.defines: ["CPASTER_PLUGIN_GUI"] files: [ "columnindicatortextedit.cpp", diff --git a/src/plugins/cpaster/kdepasteprotocol.cpp b/src/plugins/cpaster/kdepasteprotocol.cpp index bafe229e3d6..21c15897a0a 100644 --- a/src/plugins/cpaster/kdepasteprotocol.cpp +++ b/src/plugins/cpaster/kdepasteprotocol.cpp @@ -302,6 +302,7 @@ void KdePasteProtocol::paste(const QString &text, Protocol::ContentType ct, int const QString user; const QString passwd; qDebug() << "KDE needs credentials for pasting"; + emit pasteDone(QString()); return; #endif // store input data as members to be able to use them after the authentication succeeded diff --git a/src/plugins/cpaster/protocol.cpp b/src/plugins/cpaster/protocol.cpp index e80b8fd526f..61e9c2d91e3 100644 --- a/src/plugins/cpaster/protocol.cpp +++ b/src/plugins/cpaster/protocol.cpp @@ -24,6 +24,9 @@ ****************************************************************************/ #include "protocol.h" +#ifdef CPASTER_PLUGIN_GUI +#include "authenticationdialog.h" +#endif #include @@ -47,6 +50,7 @@ #include #include #include +#include namespace CodePaster { @@ -205,10 +209,37 @@ QNetworkReply *NetworkProtocol::httpPost(const QString &link, const QByteArray & return Utils::NetworkAccessManager::instance()->post(r, data); } +NetworkProtocol::NetworkProtocol() + : Protocol() +{ + connect(Utils::NetworkAccessManager::instance(), &QNetworkAccessManager::authenticationRequired, + this, &NetworkProtocol::authenticationRequired); +} + NetworkProtocol::~NetworkProtocol() { } +void NetworkProtocol::requestAuthentication(const QUrl &url, QNetworkReply *reply, QAuthenticator *authenticator) +{ +#ifdef CPASTER_PLUGIN_GUI + if (reply->request().url().host() == url.host()) { + const QString details = tr("Pasting needs authentication.
" + "Enter your identity credentials to continue."); + AuthenticationDialog authDialog(details, Core::ICore::dialogParent()); + authDialog.setWindowTitle(tr("Authenticate for Paster")); + if (authDialog.exec() == QDialog::Accepted) { + authenticator->setUser(authDialog.userName()); + authenticator->setPassword(authDialog.password()); + } + } +#else + Q_UNUSED(url); + Q_UNUSED(reply); + Q_UNUSED(authenticator); +#endif +} + bool NetworkProtocol::httpStatus(QString url, QString *errorMessage, bool useHttps) { // Connect to host and display a message box, using its event loop. diff --git a/src/plugins/cpaster/protocol.h b/src/plugins/cpaster/protocol.h index 4dc2acb6b2e..20cad376121 100644 --- a/src/plugins/cpaster/protocol.h +++ b/src/plugins/cpaster/protocol.h @@ -30,6 +30,7 @@ #include QT_BEGIN_NAMESPACE +class QAuthenticator; class QNetworkReply; class QWidget; QT_END_NAMESPACE @@ -107,9 +108,16 @@ class NetworkProtocol : public Protocol Q_OBJECT public: + NetworkProtocol(); + ~NetworkProtocol() override; +signals: + void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator); + protected: + void requestAuthentication(const QUrl &url, QNetworkReply *reply, QAuthenticator *authenticator); + QNetworkReply *httpGet(const QString &url, bool handleCookies = false); QNetworkReply *httpPost(const QString &link, const QByteArray &data, diff --git a/src/plugins/cppeditor/cppeditorplugin.cpp b/src/plugins/cppeditor/cppeditorplugin.cpp index 0f88851d2fc..5f2e9a703df 100644 --- a/src/plugins/cppeditor/cppeditorplugin.cpp +++ b/src/plugins/cppeditor/cppeditorplugin.cpp @@ -99,7 +99,6 @@ public: setAutoCompleterCreator([]() { return new CppAutoCompleter; }); setCommentDefinition(CommentDefinition::CppStyle); setCodeFoldingSupported(true); - setMarksVisible(true); setParenthesesMatchingEnabled(true); setEditorActionHandlers(TextEditorActionHandler::Format diff --git a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp index 0af6a20edd9..e7d68465787 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp +++ b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.cpp @@ -106,11 +106,6 @@ void ClangDiagnosticConfigsSelectionWidget::refresh(Core::Id id) connectToCurrentIndexChanged(); } -void ClangDiagnosticConfigsSelectionWidget::showLabel(bool show) -{ - m_label->setVisible(show); -} - void ClangDiagnosticConfigsSelectionWidget::connectToClangDiagnosticConfigsDialog(QPushButton *button) { connect(button, &QPushButton::clicked, [this]() { diff --git a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.h b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.h index 61c0e12a1cb..da82789c75e 100644 --- a/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.h +++ b/src/plugins/cpptools/clangdiagnosticconfigsselectionwidget.h @@ -50,8 +50,6 @@ public: void refresh(Core::Id id); - void showLabel(bool show); - signals: void currentConfigChanged(const Core::Id ¤tConfigId); diff --git a/src/plugins/cpptools/cppsymbolinfo.h b/src/plugins/cpptools/cppsymbolinfo.h index 38edec11b3c..16e604a8299 100644 --- a/src/plugins/cpptools/cppsymbolinfo.h +++ b/src/plugins/cpptools/cppsymbolinfo.h @@ -39,7 +39,7 @@ public: int endLine = 0; int endColumn = 0; QString fileName; - bool isPureDeclarationForUsage = false; + bool isResultOnlyForFallBack = false; }; } // namespace CppTools diff --git a/src/plugins/cvs/settingspage.ui b/src/plugins/cvs/settingspage.ui index 981d973ac28..08395ca627f 100644 --- a/src/plugins/cvs/settingspage.ui +++ b/src/plugins/cvs/settingspage.ui @@ -97,6 +97,9 @@ 360 + + 30 +
diff --git a/src/plugins/debugger/console/console.cpp b/src/plugins/debugger/console/console.cpp index 74800498fbb..31a16f8d738 100644 --- a/src/plugins/debugger/console/console.cpp +++ b/src/plugins/debugger/console/console.cpp @@ -254,6 +254,11 @@ void Console::setScriptEvaluator(const ScriptEvaluator &evaluator) setContext(QString()); } +void Console::populateFileFinder() +{ + m_consoleView->populateFileFinder(); +} + void Console::printItem(ConsoleItem::ItemType itemType, const QString &text) { printItem(new ConsoleItem(itemType, text)); diff --git a/src/plugins/debugger/console/console.h b/src/plugins/debugger/console/console.h index ae2b394eace..d95a56601a2 100644 --- a/src/plugins/debugger/console/console.h +++ b/src/plugins/debugger/console/console.h @@ -76,6 +76,7 @@ public: void setContext(const QString &context); void setScriptEvaluator(const ScriptEvaluator &evaluator); + void populateFileFinder(); void evaluate(const QString &expression); void printItem(ConsoleItem *item); diff --git a/src/plugins/debugger/console/consoleview.cpp b/src/plugins/debugger/console/consoleview.cpp index d9352a2ef63..50a8a838f90 100644 --- a/src/plugins/debugger/console/consoleview.cpp +++ b/src/plugins/debugger/console/consoleview.cpp @@ -29,6 +29,7 @@ #include #include +#include #include #include @@ -107,13 +108,6 @@ ConsoleView::ConsoleView(ConsoleItemModel *model, QWidget *parent) : // Sometimes we get the standard windows 95 style as a fallback if (QStyleFactory::keys().contains(QLatin1String("Fusion"))) { baseName = QLatin1String("fusion"); // Qt5 - } else { // Qt4 - // e.g. if we are running on a KDE4 desktop - QByteArray desktopEnvironment = qgetenv("DESKTOP_SESSION"); - if (desktopEnvironment == "kde") - baseName = QLatin1String("plastique"); - else - baseName = QLatin1String("cleanlooks"); } } ConsoleViewStyle *style = new ConsoleViewStyle(baseName); @@ -135,6 +129,11 @@ void ConsoleView::onScrollToBottom() scrollToBottom(); } +void ConsoleView::populateFileFinder() +{ + QtSupport::BaseQtVersion::populateQmlFileFinder(&m_finder, nullptr); +} + void ConsoleView::mousePressEvent(QMouseEvent *event) { QPoint pos = event->pos(); @@ -219,17 +218,10 @@ void ConsoleView::onRowActivated(const QModelIndex &index) if (!index.isValid()) return; - // See if we have file and line Info - QString filePath = model()->data(index, ConsoleItem::FileRole).toString(); - const QUrl fileUrl = QUrl(filePath); - if (fileUrl.isLocalFile()) - filePath = fileUrl.toLocalFile(); - if (!filePath.isEmpty()) { - QFileInfo fi(filePath); - if (fi.exists() && fi.isFile() && fi.isReadable()) { - int line = model()->data(index, ConsoleItem::LineRole).toInt(); - Core::EditorManager::openEditorAt(fi.canonicalFilePath(), line); - } + const QFileInfo fi(m_finder.findFile(model()->data(index, ConsoleItem::FileRole).toString())); + if (fi.exists() && fi.isFile() && fi.isReadable()) { + Core::EditorManager::openEditorAt(fi.canonicalFilePath(), + model()->data(index, ConsoleItem::LineRole).toInt()); } } @@ -257,17 +249,9 @@ bool ConsoleView::canShowItemInTextEditor(const QModelIndex &index) if (!index.isValid()) return false; - // See if we have file and line Info - QString filePath = model()->data(index, ConsoleItem::FileRole).toString(); - const QUrl fileUrl = QUrl(filePath); - if (fileUrl.isLocalFile()) - filePath = fileUrl.toLocalFile(); - if (!filePath.isEmpty()) { - QFileInfo fi(filePath); - if (fi.exists() && fi.isFile() && fi.isReadable()) - return true; - } - return false; + bool success = false; + m_finder.findFile(model()->data(index, ConsoleItem::FileRole).toString(), &success); + return success; } } // Internal diff --git a/src/plugins/debugger/console/consoleview.h b/src/plugins/debugger/console/consoleview.h index 89a59439180..493e65a2527 100644 --- a/src/plugins/debugger/console/consoleview.h +++ b/src/plugins/debugger/console/consoleview.h @@ -25,6 +25,7 @@ #pragma once +#include #include namespace Debugger { @@ -40,6 +41,7 @@ public: ConsoleView(ConsoleItemModel *model, QWidget *parent); void onScrollToBottom(); + void populateFileFinder(); protected: void mousePressEvent(QMouseEvent *event); @@ -55,6 +57,7 @@ private: bool canShowItemInTextEditor(const QModelIndex &index); ConsoleItemModel *m_model; + Utils::FileInProjectFinder m_finder; }; } // Internal diff --git a/src/plugins/debugger/qml/qmlengine.cpp b/src/plugins/debugger/qml/qmlengine.cpp index 3399b56f2af..a59b35c3932 100644 --- a/src/plugins/debugger/qml/qmlengine.cpp +++ b/src/plugins/debugger/qml/qmlengine.cpp @@ -265,6 +265,7 @@ QmlEngine::QmlEngine() connect(&d->applicationLauncher, &ApplicationLauncher::processStarted, this, &QmlEngine::handleLauncherStarted); + debuggerConsole()->populateFileFinder(); debuggerConsole()->setScriptEvaluator([this](const QString &expr) { executeDebuggerCommand(expr, QmlLanguage); }); diff --git a/src/plugins/debugger/watchhandler.cpp b/src/plugins/debugger/watchhandler.cpp index 6031ba57d11..69d26cb87f0 100644 --- a/src/plugins/debugger/watchhandler.cpp +++ b/src/plugins/debugger/watchhandler.cpp @@ -416,9 +416,9 @@ public: QString removeNamespaces(QString str) const; bool contextMenuEvent(const ItemViewEvent &ev); - QMenu *createFormatMenu(WatchItem *item); - QMenu *createMemoryMenu(WatchItem *item); - QMenu *createBreakpointMenu(WatchItem *item); + QMenu *createFormatMenu(WatchItem *item, QWidget *parent); + QMenu *createMemoryMenu(WatchItem *item, QWidget *parent); + QMenu *createBreakpointMenu(WatchItem *item, QWidget *parent); void addStackLayoutMemoryView(bool separateView, const QPoint &p); @@ -1657,9 +1657,9 @@ bool WatchModel::contextMenuEvent(const ItemViewEvent &ev) [this] { grabWidget(); }); menu->addSeparator(); - menu->addMenu(createFormatMenu(item)); - menu->addMenu(createMemoryMenu(item)); - menu->addMenu(createBreakpointMenu(item)); + menu->addMenu(createFormatMenu(item, menu)); + menu->addMenu(createMemoryMenu(item, menu)); + menu->addMenu(createBreakpointMenu(item, menu)); menu->addSeparator(); addAction(menu, tr("Expand All Children"), @@ -1712,13 +1712,14 @@ bool WatchModel::contextMenuEvent(const ItemViewEvent &ev) menu->addSeparator(); menu->addAction(action(SettingsDialog)); + connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater); menu->popup(ev.globalPos()); return true; } -QMenu *WatchModel::createBreakpointMenu(WatchItem *item) +QMenu *WatchModel::createBreakpointMenu(WatchItem *item, QWidget *parent) { - auto menu = new QMenu(tr("Add Data Breakpoint")); + auto menu = new QMenu(tr("Add Data Breakpoint"), parent); if (!item) { menu->setEnabled(false); return menu; @@ -1760,9 +1761,9 @@ QMenu *WatchModel::createBreakpointMenu(WatchItem *item) return menu; } -QMenu *WatchModel::createMemoryMenu(WatchItem *item) +QMenu *WatchModel::createMemoryMenu(WatchItem *item, QWidget *parent) { - auto menu = new QMenu(tr("Open Memory Editor")); + auto menu = new QMenu(tr("Open Memory Editor"), parent); if (!item || !m_engine->hasCapability(ShowMemoryCapability)) { menu->setEnabled(false); return menu; @@ -1813,9 +1814,9 @@ QMenu *WatchModel::createMemoryMenu(WatchItem *item) return menu; } -QMenu *WatchModel::createFormatMenu(WatchItem *item) +QMenu *WatchModel::createFormatMenu(WatchItem *item, QWidget *parent) { - auto menu = new QMenu(tr("Change Value Display Format")); + auto menu = new QMenu(tr("Change Value Display Format"), parent); if (!item) { menu->setEnabled(false); return menu; diff --git a/src/plugins/designer/formeditorw.cpp b/src/plugins/designer/formeditorw.cpp index 35dc799cf57..b3e64ec2b09 100644 --- a/src/plugins/designer/formeditorw.cpp +++ b/src/plugins/designer/formeditorw.cpp @@ -132,6 +132,7 @@ public: setEditorWidgetCreator([]() { return new Internal::DesignerXmlEditorWidget; }); setUseGenericHighlighter(true); setDuplicatedSupported(false); + setMarksVisible(false); } FormWindowEditor *create(QDesignerFormWindowInterface *form) diff --git a/src/plugins/diffeditor/diffeditor.cpp b/src/plugins/diffeditor/diffeditor.cpp index 8c4942e11b7..74d2ed8d96b 100644 --- a/src/plugins/diffeditor/diffeditor.cpp +++ b/src/plugins/diffeditor/diffeditor.cpp @@ -79,7 +79,7 @@ public: DescriptionEditorWidget(QWidget *parent = nullptr); ~DescriptionEditorWidget() override; - virtual QSize sizeHint() const override; + QSize sizeHint() const override; protected: void setDisplaySettings(const DisplaySettings &ds) override; diff --git a/src/plugins/git/mergetool.cpp b/src/plugins/git/mergetool.cpp index 84cfea4dd12..511a762acf4 100644 --- a/src/plugins/git/mergetool.cpp +++ b/src/plugins/git/mergetool.cpp @@ -60,6 +60,7 @@ bool MergeTool::start(const QString &workingDirectory, const QStringList &files) m_process = new QProcess(this); m_process->setWorkingDirectory(workingDirectory); m_process->setProcessEnvironment(env); + m_process->setReadChannelMode(QProcess::MergedChannels); const Utils::FileName binary = GitPlugin::client()->vcsBinary(); VcsOutputWindow::appendCommand(workingDirectory, binary, arguments); m_process->start(binary.toString(), arguments); @@ -68,7 +69,7 @@ bool MergeTool::start(const QString &workingDirectory, const QStringList &files) connect(m_process, &QIODevice::readyRead, this, &MergeTool::readData); } else { delete m_process; - m_process = 0; + m_process = nullptr; return false; } return true; diff --git a/src/plugins/git/settingspage.ui b/src/plugins/git/settingspage.ui index 86c95e02bfc..dd2e447fc9f 100644 --- a/src/plugins/git/settingspage.ui +++ b/src/plugins/git/settingspage.ui @@ -89,7 +89,7 @@ 10 - 300 + 360 30 diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp index 928deda44f1..108ef838793 100644 --- a/src/plugins/glsleditor/glsleditor.cpp +++ b/src/plugins/glsleditor/glsleditor.cpp @@ -325,7 +325,6 @@ GlslEditorFactory::GlslEditorFactory() setCommentDefinition(Utils::CommentDefinition::CppStyle); setCompletionAssistProvider(new GlslCompletionAssistProvider); setParenthesesMatchingEnabled(true); - setMarksVisible(true); setCodeFoldingSupported(true); setEditorActionHandlers(TextEditorActionHandler::Format diff --git a/src/plugins/mercurial/optionspage.ui b/src/plugins/mercurial/optionspage.ui index d5c89fbeb8c..cf13d326da0 100644 --- a/src/plugins/mercurial/optionspage.ui +++ b/src/plugins/mercurial/optionspage.ui @@ -100,6 +100,9 @@ s + + 360 + 30 diff --git a/src/plugins/nim/editor/nimeditorfactory.cpp b/src/plugins/nim/editor/nimeditorfactory.cpp index 18b6a29eaee..4a2cb4d59b7 100644 --- a/src/plugins/nim/editor/nimeditorfactory.cpp +++ b/src/plugins/nim/editor/nimeditorfactory.cpp @@ -67,9 +67,7 @@ NimEditorFactory::NimEditorFactory() }); setCommentDefinition(CommentDefinition::HashStyle); setParenthesesMatchingEnabled(true); - setMarksVisible(false); setCodeFoldingSupported(true); - setMarksVisible(true); } Core::IEditor *NimEditorFactory::createEditor() diff --git a/src/plugins/nim/project/nimcompilerbuildstep.cpp b/src/plugins/nim/project/nimcompilerbuildstep.cpp index de081f04a13..d193fbd7454 100644 --- a/src/plugins/nim/project/nimcompilerbuildstep.cpp +++ b/src/plugins/nim/project/nimcompilerbuildstep.cpp @@ -106,6 +106,8 @@ NimCompilerBuildStep::NimCompilerBuildStep(BuildStepList *parentList) auto bc = qobject_cast(buildConfiguration()); connect(bc, &NimBuildConfiguration::buildDirectoryChanged, this, &NimCompilerBuildStep::updateProcessParameters); + connect(bc, &BuildConfiguration::environmentChanged, + this, &NimCompilerBuildStep::updateProcessParameters); connect(this, &NimCompilerBuildStep::outFilePathChanged, bc, &NimBuildConfiguration::outFilePathChanged); connect(bc->target()->project(), &ProjectExplorer::Project::fileListChanged, diff --git a/src/plugins/perforce/settingspage.ui b/src/plugins/perforce/settingspage.ui index a63778643f5..dafda710086 100644 --- a/src/plugins/perforce/settingspage.ui +++ b/src/plugins/perforce/settingspage.ui @@ -119,6 +119,9 @@ 360 + + 30 + diff --git a/src/plugins/projectexplorer/appoutputpane.cpp b/src/plugins/projectexplorer/appoutputpane.cpp index 3a27db85530..e99ad86d9b9 100644 --- a/src/plugins/projectexplorer/appoutputpane.cpp +++ b/src/plugins/projectexplorer/appoutputpane.cpp @@ -489,7 +489,13 @@ void AppOutputPane::appendMessage(RunControl *rc, const QString &out, Utils::Out const int index = indexOf(rc); if (index != -1) { Core::OutputWindow *window = m_runControlTabs.at(index).window; - window->appendMessage(out, format); + QString stringToWrite; + if (format == Utils::NormalMessageFormat || format == Utils::ErrorMessageFormat) { + stringToWrite = QTime::currentTime().toString(); + stringToWrite += QLatin1String(": "); + } + stringToWrite += out; + window->appendMessage(stringToWrite, format); if (format != Utils::NormalMessageFormat) { if (m_runControlTabs.at(index).behaviorOnOutput == Flash) flash(); diff --git a/src/plugins/projectexplorer/projecttreewidget.cpp b/src/plugins/projectexplorer/projecttreewidget.cpp index ea4081698a6..688c7b245c2 100644 --- a/src/plugins/projectexplorer/projecttreewidget.cpp +++ b/src/plugins/projectexplorer/projecttreewidget.cpp @@ -421,7 +421,7 @@ void ProjectTreeWidget::editCurrentItem() m_view->edit(currentIndex); // Select complete file basename for renaming const Node *node = m_model->nodeForIndex(currentIndex); - if (!node || node->nodeType() != NodeType::File) + if (!node) return; QLineEdit *editor = qobject_cast(m_view->indexWidget(currentIndex)); if (!editor) diff --git a/src/plugins/pythoneditor/pythoneditor.cpp b/src/plugins/pythoneditor/pythoneditor.cpp index 8ae6efde823..c3a608e8d36 100644 --- a/src/plugins/pythoneditor/pythoneditor.cpp +++ b/src/plugins/pythoneditor/pythoneditor.cpp @@ -57,7 +57,6 @@ PythonEditorFactory::PythonEditorFactory() setSyntaxHighlighterCreator([] { return new PythonHighlighter; }); setCommentDefinition(Utils::CommentDefinition::HashStyle); setParenthesesMatchingEnabled(true); - setMarksVisible(true); setCodeFoldingSupported(true); } diff --git a/src/plugins/qmakeprojectmanager/profileeditor.cpp b/src/plugins/qmakeprojectmanager/profileeditor.cpp index cccb3ba98b2..fb854311a75 100644 --- a/src/plugins/qmakeprojectmanager/profileeditor.cpp +++ b/src/plugins/qmakeprojectmanager/profileeditor.cpp @@ -57,10 +57,10 @@ namespace Internal { class ProFileEditorWidget : public TextEditorWidget { protected: - virtual void findLinkAt(const QTextCursor &, - Utils::ProcessLinkCallback &&processLinkCallback, - bool resolveTarget = true, - bool inNextSplit = false) override; + void findLinkAt(const QTextCursor &, + Utils::ProcessLinkCallback &&processLinkCallback, + bool resolveTarget = true, + bool inNextSplit = false) override; void contextMenuEvent(QContextMenuEvent *) override; }; diff --git a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp index ec192fbe586..572adb1a768 100644 --- a/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp +++ b/src/plugins/qmakeprojectmanager/qmakebuildconfiguration.cpp @@ -357,9 +357,11 @@ QmakeBuildConfiguration::MakefileState QmakeBuildConfiguration::compareToImportF return MakefileForWrongProject; } - if (parse.srcProFile() != qs->project()->projectFilePath().toString()) { + const Utils::FileName projectPath = + m_subNodeBuild ? m_subNodeBuild->filePath() : qs->project()->projectFilePath(); + if (parse.srcProFile() != projectPath.toString()) { qCDebug(logs) << "**Different profile used to generate the Makefile:" - << parse.srcProFile() << " expected profile:" << qs->project()->projectFilePath(); + << parse.srcProFile() << " expected profile:" << projectPath; if (errorString) *errorString = tr("The Makefile is for a different project."); return MakefileIncompatible; diff --git a/src/plugins/qmljseditor/qmljseditor.cpp b/src/plugins/qmljseditor/qmljseditor.cpp index 1cc059c0467..a9e063245eb 100644 --- a/src/plugins/qmljseditor/qmljseditor.cpp +++ b/src/plugins/qmljseditor/qmljseditor.cpp @@ -1059,7 +1059,6 @@ QmlJSEditorFactory::QmlJSEditorFactory() setAutoCompleterCreator([]() { return new AutoCompleter; }); setCommentDefinition(Utils::CommentDefinition::CppStyle); setParenthesesMatchingEnabled(true); - setMarksVisible(true); setCodeFoldingSupported(true); addHoverHandler(new QmlJSHoverHandler); diff --git a/src/plugins/qmlprofiler/flamegraphmodel.h b/src/plugins/qmlprofiler/flamegraphmodel.h index c1984ffc437..a5549c934d6 100644 --- a/src/plugins/qmlprofiler/flamegraphmodel.h +++ b/src/plugins/qmlprofiler/flamegraphmodel.h @@ -95,7 +95,6 @@ public: signals: void gotoSourceLocation(const QString &fileName, int lineNumber, int columnNumber); - void typeSelected(int typeIndex); private: QVariant lookup(const FlameGraphData &data, int role) const; diff --git a/src/plugins/qmlprofiler/flamegraphview.cpp b/src/plugins/qmlprofiler/flamegraphview.cpp index 815ffcb86de..5c192d77f2d 100644 --- a/src/plugins/qmlprofiler/flamegraphview.cpp +++ b/src/plugins/qmlprofiler/flamegraphview.cpp @@ -67,7 +67,7 @@ FlameGraphView::FlameGraphView(QmlProfilerModelManager *manager, QWidget *parent layout->addWidget(m_content); setLayout(layout); - connect(m_model, &FlameGraphModel::typeSelected, this, &FlameGraphView::typeSelected); + connect(m_content->rootObject(), SIGNAL(typeSelected(int)), this, SIGNAL(typeSelected(int))); connect(m_model, &FlameGraphModel::gotoSourceLocation, this, &FlameGraphView::gotoSourceLocation); } diff --git a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp index 55a2cfea4b4..c54c7f0981c 100644 --- a/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp +++ b/src/plugins/qmlprofiler/qmlprofilermodelmanager.cpp @@ -509,13 +509,13 @@ void QmlProfilerEventStorage::clear() m_size = 0; m_file.clear(); if (!m_file.open()) - m_errorHandler(tr("Failed to reset temporary trace file")); + m_errorHandler(tr("Failed to reset temporary trace file.")); } void QmlProfilerEventStorage::finalize() { if (!m_file.flush()) - m_errorHandler(tr("Failed to flush temporary trace file")); + m_errorHandler(tr("Failed to flush temporary trace file.")); } QmlProfilerEventStorage::ErrorHandler QmlProfilerEventStorage::errorHandler() const @@ -536,13 +536,13 @@ bool QmlProfilerEventStorage::replay( case Timeline::TraceStashFile::ReplaySuccess: return true; case Timeline::TraceStashFile::ReplayOpenFailed: - m_errorHandler(tr("Could not re-open temporary trace file")); + m_errorHandler(tr("Could not re-open temporary trace file.")); break; case Timeline::TraceStashFile::ReplayLoadFailed: // Happens if the loader rejects an event. Not an actual error break; case Timeline::TraceStashFile::ReplayReadPastEnd: - m_errorHandler(tr("Read past end in temporary trace file")); + m_errorHandler(tr("Read past end in temporary trace file.")); break; } return false; diff --git a/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.cpp b/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.cpp index 32aa45a5272..d986939f8c4 100644 --- a/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.cpp +++ b/src/plugins/qmlprofiler/tests/qmlprofilertraceclient_test.cpp @@ -88,7 +88,7 @@ void QmlProfilerTraceClientTest::testMessageReceived() traceClient.clear(); }, [this, &lastError](const QString &message) { QVERIFY(!message.isEmpty()); - if (lastError == QmlProfilerModelManager::tr("Read past end in temporary trace file")) { + if (lastError == QmlProfilerModelManager::tr("Read past end in temporary trace file.")) { // Ignore read-past-end errors: Our test traces are somewhat dirty and don't end on // packet boundaries modelManager.clearAll(); diff --git a/src/plugins/serialterminal/serialoutputpane.cpp b/src/plugins/serialterminal/serialoutputpane.cpp index 2fc5cf48ebc..12613d447df 100644 --- a/src/plugins/serialterminal/serialoutputpane.cpp +++ b/src/plugins/serialterminal/serialoutputpane.cpp @@ -66,7 +66,7 @@ public: signals: void contextMenuRequested(const QPoint &pos, int index); protected: - bool eventFilter(QObject *object, QEvent *event) override final; + bool eventFilter(QObject *object, QEvent *event) final; private: int m_tabIndexForMiddleClick = -1; }; @@ -112,7 +112,7 @@ class ComboBox : public QComboBox { Q_OBJECT public: - void showPopup() override final; + void showPopup() final; signals: void opened(); }; diff --git a/src/plugins/subversion/settingspage.ui b/src/plugins/subversion/settingspage.ui index 0adcf1cc311..f2a9bc06918 100644 --- a/src/plugins/subversion/settingspage.ui +++ b/src/plugins/subversion/settingspage.ui @@ -113,6 +113,9 @@ 360 + + 30 + diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 9ef886f2972..a915b656f6e 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -8477,7 +8477,6 @@ bool TextEditorWidget::isMissingSyntaxDefinition() const // The remnants of PlainTextEditor. void TextEditorWidget::setupGenericHighlighter() { - setMarksVisible(true); setLineSeparatorsAllowed(true); connect(textDocument(), &IDocument::filePathChanged, @@ -8574,7 +8573,7 @@ public: bool m_duplicatedSupported = true; bool m_codeFoldingSupported = false; bool m_paranthesesMatchinEnabled = false; - bool m_marksVisible = false; + bool m_marksVisible = true; }; } /// namespace Internal diff --git a/src/plugins/valgrind/memchecktool.cpp b/src/plugins/valgrind/memchecktool.cpp index 7ea1b4b0504..7860156db55 100644 --- a/src/plugins/valgrind/memchecktool.cpp +++ b/src/plugins/valgrind/memchecktool.cpp @@ -445,6 +445,8 @@ private: #ifdef Q_OS_WIN class HeobDialog : public QDialog { + Q_DECLARE_TR_FUNCTIONS(HeobDialog) + public: HeobDialog(QWidget *parent); @@ -475,6 +477,8 @@ private: class HeobData : public QObject { + Q_DECLARE_TR_FUNCTIONS(HeobData) + public: HeobData(MemcheckTool *mcTool, const QString &xmlPath, Kit *kit, bool attach); ~HeobData(); diff --git a/src/plugins/vcsbase/basevcseditorfactory.cpp b/src/plugins/vcsbase/basevcseditorfactory.cpp index 4c4083a431e..5ba38b58eb6 100644 --- a/src/plugins/vcsbase/basevcseditorfactory.cpp +++ b/src/plugins/vcsbase/basevcseditorfactory.cpp @@ -80,6 +80,7 @@ VcsEditorFactory::VcsEditorFactory(const VcsBaseEditorParameters *parameters, }); setEditorCreator([]() { return new VcsBaseEditor(); }); + setMarksVisible(false); } VcsBaseEditor *VcsEditorFactory::createEditorById(const char *id) diff --git a/src/shared/qbs b/src/shared/qbs index c18c0824061..d994e54712e 160000 --- a/src/shared/qbs +++ b/src/shared/qbs @@ -1 +1 @@ -Subproject commit c18c082406152ede2bcb39c423ca22fbc9864cf1 +Subproject commit d994e54712efb69225d73d93fc57b89a3d39cacb diff --git a/src/tools/clangbackend/source/clangbackend_global.h b/src/tools/clangbackend/source/clangbackend_global.h index 927141e01f3..2d2535e12cd 100644 --- a/src/tools/clangbackend/source/clangbackend_global.h +++ b/src/tools/clangbackend/source/clangbackend_global.h @@ -37,7 +37,7 @@ enum class PreferredTranslationUnit }; // CLANG-UPGRADE-CHECK: Remove IS_PRETTY_DECL_SUPPORTED once we require clang >= 7.0 -#if defined(CINDEX_VERSION_HAS_PRETTYDECL_BACKPORTED) || CINDEX_VERSION_MINOR >= 47 +#if defined(CINDEX_VERSION_HAS_PRETTYDECL_BACKPORTED) || CINDEX_VERSION_MINOR >= 46 # define IS_PRETTY_DECL_SUPPORTED #endif @@ -46,4 +46,9 @@ enum class PreferredTranslationUnit # define IS_INVALIDDECL_SUPPORTED #endif +// CLANG-UPGRADE-CHECK: Remove IS_LIMITSKIPFUNCTIONBODIESTOPREAMBLE_SUPPORTED once we require clang >= 7.0 +#if defined(CINDEX_VERSION_HAS_LIMITSKIPFUNCTIONBODIESTOPREAMBLE_BACKPORTED) || CINDEX_VERSION_MINOR >= 46 +# define IS_LIMITSKIPFUNCTIONBODIESTOPREAMBLE_SUPPORTED +#endif + } // namespace ClangBackEnd diff --git a/src/tools/clangbackend/source/clangfollowsymbol.cpp b/src/tools/clangbackend/source/clangfollowsymbol.cpp index f557e1850b5..d41af5dc758 100644 --- a/src/tools/clangbackend/source/clangfollowsymbol.cpp +++ b/src/tools/clangbackend/source/clangfollowsymbol.cpp @@ -152,14 +152,15 @@ FollowSymbolResult FollowSymbol::followSymbol(CXTranslationUnit tu, if (!cursor.isDeclaration()) { // This is the symbol usage // We want to return definition - FollowSymbolResult result; cursor = cursor.referenced(); if (cursor.isNull()) return SourceRangeContainer(); - if (!cursor.isDefinition()) { - // We can't find definition in this TU - result.isPureDeclarationForUsage = true; - } + + FollowSymbolResult result; + // We can't find definition in this TU or it's a virtual method call + if (!cursor.isDefinition() || cursor.isVirtualMethod()) + result.isResultOnlyForFallBack = true; + result.range = extractMatchingTokenRange(cursor, tokenSpelling); return result; } diff --git a/src/tools/clangbackend/source/clangtranslationunitupdater.cpp b/src/tools/clangbackend/source/clangtranslationunitupdater.cpp index 6033224732a..ac21ebb72ab 100644 --- a/src/tools/clangbackend/source/clangtranslationunitupdater.cpp +++ b/src/tools/clangbackend/source/clangtranslationunitupdater.cpp @@ -25,6 +25,7 @@ #include "clangtranslationunitupdater.h" +#include "clangbackend_global.h" #include "clangfilepath.h" #include "clangstring.h" #include "clangunsavedfilesshallowarguments.h" @@ -176,7 +177,7 @@ uint TranslationUnitUpdater::defaultParseOptions() return CXTranslationUnit_CacheCompletionResults | CXTranslationUnit_PrecompiledPreamble | CXTranslationUnit_CreatePreambleOnFirstParse -#ifdef CINDEX_VERSION_HAS_LIMITSKIPFUNCTIONBODIESTOPREAMBLE_BACKPORTED +#ifdef IS_LIMITSKIPFUNCTIONBODIESTOPREAMBLE_SUPPORTED | CXTranslationUnit_SkipFunctionBodies | CXTranslationUnit_LimitSkipFunctionBodiesToPreamble #endif diff --git a/tests/auto/tracing/flamegraphview/TestFlameGraphView.qml b/tests/auto/tracing/flamegraphview/TestFlameGraphView.qml new file mode 100644 index 00000000000..3be69a445ab --- /dev/null +++ b/tests/auto/tracing/flamegraphview/TestFlameGraphView.qml @@ -0,0 +1,63 @@ +/**************************************************************************** +** +** Copyright (C) 2018 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. +** +****************************************************************************/ + +import TestFlameGraphModel 1.0 +import "../tracing/" + +FlameGraphView { + id: root + sizeRole: TestFlameGraphModel.SizeRole + + model: flameGraphModel + + typeIdRole: TestFlameGraphModel.TypeIdRole + sourceFileRole: TestFlameGraphModel.SourceFileRole + sourceLineRole: TestFlameGraphModel.SourceLineRole + sourceColumnRole: TestFlameGraphModel.SourceColumnRole + detailsTitleRole: TestFlameGraphModel.DetailsTitleRole + summaryRole: TestFlameGraphModel.SummaryRole + + modes: [ + TestFlameGraphModel.SizeRole, + TestFlameGraphModel.SourceLineRole, + TestFlameGraphModel.SourceColumnRole, + ] + + trRoleNames: [ + TestFlameGraphModel.SizeRole, qsTr("Size"), + TestFlameGraphModel.SourceFileRole, qsTr("Source File"), + TestFlameGraphModel.SourceLineRole, qsTr("Source Line"), + TestFlameGraphModel.SourceColumnRole, qsTr("Source Column"), + ].reduce(toMap, {}) + + details: function(flameGraph) { + var model = []; + root.addDetail(TestFlameGraphModel.SizeRole, detailFormats.noop, + model, flameGraph); + root.addDetail(TestFlameGraphModel.SourceFileRole, detailFormats.addLine, + model, flameGraph); + return model; + } +} diff --git a/tests/auto/tracing/flamegraphview/flamegraphview.pro b/tests/auto/tracing/flamegraphview/flamegraphview.pro new file mode 100644 index 00000000000..3ebd7682fb0 --- /dev/null +++ b/tests/auto/tracing/flamegraphview/flamegraphview.pro @@ -0,0 +1,10 @@ +QT += quick quickwidgets + +QTC_LIB_DEPENDS += tracing +include(../../qttest.pri) + +SOURCES += \ + tst_flamegraphview.cpp + +RESOURCES += \ + flamegraphview.qrc diff --git a/tests/auto/tracing/flamegraphview/flamegraphview.qbs b/tests/auto/tracing/flamegraphview/flamegraphview.qbs new file mode 100644 index 00000000000..c3331c7a6a7 --- /dev/null +++ b/tests/auto/tracing/flamegraphview/flamegraphview.qbs @@ -0,0 +1,15 @@ +import qbs +import "../tracingautotest.qbs" as TracingAutotest + +TracingAutotest { + name: "FlameGraphView autotest" + + Depends { name: "Qt.quickwidgets" } + + Group { + name: "Test sources" + files: [ + "tst_flamegraphview.cpp", "flamegraphview.qrc" + ] + } +} diff --git a/tests/auto/tracing/flamegraphview/flamegraphview.qrc b/tests/auto/tracing/flamegraphview/flamegraphview.qrc new file mode 100644 index 00000000000..912864eacff --- /dev/null +++ b/tests/auto/tracing/flamegraphview/flamegraphview.qrc @@ -0,0 +1,5 @@ + + + TestFlameGraphView.qml + + diff --git a/tests/auto/tracing/flamegraphview/tst_flamegraphview.cpp b/tests/auto/tracing/flamegraphview/tst_flamegraphview.cpp new file mode 100644 index 00000000000..d29ee1f7c83 --- /dev/null +++ b/tests/auto/tracing/flamegraphview/tst_flamegraphview.cpp @@ -0,0 +1,176 @@ +/**************************************************************************** +** +** Copyright (C) 2018 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 +#include +#include + +#include +#include +#include +#include +#include + +class TestFlameGraphModel : public QStandardItemModel +{ + Q_OBJECT + Q_ENUMS(Role) +public: + enum Role { + TypeIdRole = Qt::UserRole + 1, + SizeRole, + SourceFileRole, + SourceLineRole, + SourceColumnRole, + DetailsTitleRole, + SummaryRole, + MaxRole + }; + + void fill() { + qreal sizeSum = 0; + for (int i = 1; i < 10; ++i) { + QStandardItem *item = new QStandardItem; + item->setData(i, SizeRole); + item->setData(100 / i, TypeIdRole); + item->setData("trara", SourceFileRole); + item->setData(20, SourceLineRole); + item->setData(10, SourceColumnRole); + item->setData("details", DetailsTitleRole); + item->setData("summary", SummaryRole); + + for (int j = 1; j < i; ++j) { + QStandardItem *item2 = new QStandardItem; + item2->setData(1, SizeRole); + item2->setData(100 / j, TypeIdRole); + item2->setData(1, SourceLineRole); + item2->setData("child", DetailsTitleRole); + item2->setData("childsummary", SummaryRole); + for (int k = 1; k < 10; ++k) { + QStandardItem *skipped = new QStandardItem; + skipped->setData(0.001, SizeRole); + skipped->setData(100 / k, TypeIdRole); + item2->appendRow(skipped); + } + item->appendRow(item2); + } + + appendRow(item); + sizeSum += i; + } + invisibleRootItem()->setData(sizeSum, SizeRole); + invisibleRootItem()->setData(9 * 20, SourceLineRole); + invisibleRootItem()->setData(9 * 10, SourceColumnRole); + } + + Q_INVOKABLE void gotoSourceLocation(const QString &file, int line, int column) + { + Q_UNUSED(file); + Q_UNUSED(line); + Q_UNUSED(column); + } +}; + +class DummyTheme : public Utils::Theme +{ +public: + DummyTheme() : Utils::Theme(QLatin1String("dummy")) + { + for (int i = 0; i < d->colors.count(); ++i) { + d->colors[i] = QPair( + QColor::fromRgb(qrand() % 256, qrand() % 256, qrand() % 256), + QString::number(i)); + } + } +}; + +class tst_FlameGraphView : public QObject +{ + Q_OBJECT +public: + tst_FlameGraphView() { Utils::setCreatorTheme(&theme); } + +private slots: + void initTestCase(); + void testZoom(); + +private: + static const int sizeRole = Qt::UserRole + 1; + static const int dataRole = Qt::UserRole + 2; + TestFlameGraphModel model; + QQuickWidget widget; + DummyTheme theme; +}; + +void tst_FlameGraphView::initTestCase() +{ + model.fill(); + qmlRegisterType("FlameGraph", 1, 0, "FlameGraph"); + qmlRegisterUncreatableType( + "TestFlameGraphModel", 1, 0, "TestFlameGraphModel", + QLatin1String("use the context property")); + + + Timeline::TimelineTheme::setupTheme(widget.engine()); + + widget.rootContext()->setContextProperty(QStringLiteral("flameGraphModel"), &model); + widget.setSource(QUrl(QStringLiteral("qrc:/tracingtest/TestFlameGraphView.qml"))); + + widget.setResizeMode(QQuickWidget::SizeRootObjectToView); + widget.setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); + widget.resize(800, 600); + + widget.show(); +} + +void tst_FlameGraphView::testZoom() +{ + auto selectedTypeId = [&]() { + return widget.rootObject()->property("selectedTypeId").toInt(); + }; + + QWindow *window = widget.windowHandle(); + + QCOMPARE(selectedTypeId(), -1); + QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() - 5, + widget.height() - 5)); + QTRY_VERIFY(selectedTypeId() != -1); + const int typeId1 = selectedTypeId(); + + QTest::mouseDClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(5, widget.height() - 5)); + QTRY_VERIFY(selectedTypeId() != typeId1); + QVERIFY(selectedTypeId() != -1); + + QTest::mouseDClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() / 2, + widget.height() / 2)); + QTRY_COMPARE(selectedTypeId(), -1); + QTest::mouseClick(window, Qt::LeftButton, Qt::NoModifier, QPoint(widget.width() - 5, + widget.height() - 5)); + QTRY_COMPARE(selectedTypeId(), typeId1); +} + +QTEST_MAIN(tst_FlameGraphView) + +#include "tst_flamegraphview.moc" diff --git a/tests/auto/tracing/tracing.pro b/tests/auto/tracing/tracing.pro index 7772d6ec6b6..fd432940a6e 100644 --- a/tests/auto/tracing/tracing.pro +++ b/tests/auto/tracing/tracing.pro @@ -3,6 +3,7 @@ TEMPLATE = subdirs SUBDIRS = \ flamegraph \ + flamegraphview \ timelineabstractrenderer \ timelineitemsrenderpass \ timelinemodel \ diff --git a/tests/unit/mockup/coreplugin/vcsmanager.h b/tests/unit/mockup/coreplugin/vcsmanager.h new file mode 100644 index 00000000000..7e308e18a78 --- /dev/null +++ b/tests/unit/mockup/coreplugin/vcsmanager.h @@ -0,0 +1,38 @@ +/**************************************************************************** +** +** Copyright (C) 2018 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 Core { +class VcsManager { +public: + static QString findTopLevelForDirectory(const QString &directory) + { + return directory; + } +}; +} // namespace Core diff --git a/tests/unit/unittest/gtest-creator-printing.cpp b/tests/unit/unittest/gtest-creator-printing.cpp index a6d6118bccc..a3e5a8982bb 100644 --- a/tests/unit/unittest/gtest-creator-printing.cpp +++ b/tests/unit/unittest/gtest-creator-printing.cpp @@ -241,7 +241,7 @@ std::ostream &operator<<(std::ostream &os, const FollowSymbolResult &result) { os << "(" << result.range - << ", " << result.isPureDeclarationForUsage + << ", " << result.isResultOnlyForFallBack << ")"; return os;