forked from qt-creator/qt-creator
Merge remote-tracking branch 'origin/4.7'
Change-Id: I3c5d7e9e8c589ad4425cd89d61e1f572f5cb7997
This commit is contained in:
@@ -71,7 +71,7 @@
|
|||||||
\image qtcreator-files-to-analyze.png
|
\image qtcreator-files-to-analyze.png
|
||||||
|
|
||||||
\li In the \uicontrol {Diagnostic Configuration} group, select
|
\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.
|
specify the Clang-Tidy and Clazy checks to perform.
|
||||||
|
|
||||||
\li Select the new custom configuration in the list of configurations
|
\li Select the new custom configuration in the list of configurations
|
||||||
|
|||||||
@@ -1,4 +1,6 @@
|
|||||||
%{Cpp:LicenseTemplate}\
|
%{Cpp:LicenseTemplate}\
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
#include <gmock/gmock-matchers.h>
|
#include <gmock/gmock-matchers.h>
|
||||||
|
|
||||||
|
|||||||
@@ -36,7 +36,7 @@
|
|||||||
namespace ClangBackEnd {
|
namespace ClangBackEnd {
|
||||||
|
|
||||||
template <typename FilePathStorage>
|
template <typename FilePathStorage>
|
||||||
class FilePathCache
|
class CLANGSUPPORT_GCCEXPORT FilePathCache
|
||||||
{
|
{
|
||||||
class FileNameView
|
class FileNameView
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ QDebug operator<<(QDebug debug, const FollowSymbolResult &result)
|
|||||||
{
|
{
|
||||||
debug.nospace() << "FollowSymbolResult("
|
debug.nospace() << "FollowSymbolResult("
|
||||||
<< result.range
|
<< result.range
|
||||||
<< ", " << result.isPureDeclarationForUsage;
|
<< ", " << result.isResultOnlyForFallBack;
|
||||||
|
|
||||||
debug.nospace() << ")";
|
debug.nospace() << ")";
|
||||||
|
|
||||||
|
|||||||
@@ -40,15 +40,15 @@ public:
|
|||||||
FollowSymbolResult(SourceRangeContainer range)
|
FollowSymbolResult(SourceRangeContainer range)
|
||||||
: range(std::move(range))
|
: range(std::move(range))
|
||||||
{}
|
{}
|
||||||
FollowSymbolResult(SourceRangeContainer range, bool isPureDeclarationForUsage)
|
FollowSymbolResult(SourceRangeContainer range, bool isResultOnlyForFallBack)
|
||||||
: range(std::move(range))
|
: range(std::move(range))
|
||||||
, isPureDeclarationForUsage(isPureDeclarationForUsage)
|
, isResultOnlyForFallBack(isResultOnlyForFallBack)
|
||||||
{}
|
{}
|
||||||
|
|
||||||
friend QDataStream &operator<<(QDataStream &out, const FollowSymbolResult &container)
|
friend QDataStream &operator<<(QDataStream &out, const FollowSymbolResult &container)
|
||||||
{
|
{
|
||||||
out << container.range;
|
out << container.range;
|
||||||
out << container.isPureDeclarationForUsage;
|
out << container.isResultOnlyForFallBack;
|
||||||
|
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
@@ -56,7 +56,7 @@ public:
|
|||||||
friend QDataStream &operator>>(QDataStream &in, FollowSymbolResult &container)
|
friend QDataStream &operator>>(QDataStream &in, FollowSymbolResult &container)
|
||||||
{
|
{
|
||||||
in >> container.range;
|
in >> container.range;
|
||||||
in >> container.isPureDeclarationForUsage;
|
in >> container.isResultOnlyForFallBack;
|
||||||
|
|
||||||
return in;
|
return in;
|
||||||
}
|
}
|
||||||
@@ -64,11 +64,11 @@ public:
|
|||||||
friend bool operator==(const FollowSymbolResult &first, const FollowSymbolResult &second)
|
friend bool operator==(const FollowSymbolResult &first, const FollowSymbolResult &second)
|
||||||
{
|
{
|
||||||
return first.range == second.range
|
return first.range == second.range
|
||||||
&& first.isPureDeclarationForUsage == second.isPureDeclarationForUsage;
|
&& first.isResultOnlyForFallBack == second.isResultOnlyForFallBack;
|
||||||
}
|
}
|
||||||
|
|
||||||
SourceRangeContainer range;
|
SourceRangeContainer range;
|
||||||
bool isPureDeclarationForUsage = false;
|
bool isResultOnlyForFallBack = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
class FollowSymbolMessage
|
class FollowSymbolMessage
|
||||||
|
|||||||
@@ -248,12 +248,13 @@ public:
|
|||||||
|
|
||||||
{}
|
{}
|
||||||
|
|
||||||
virtual void pragmaLibrary(int line, int column) override
|
void pragmaLibrary(int line, int column) override
|
||||||
{
|
{
|
||||||
isLibrary = true;
|
isLibrary = true;
|
||||||
addLocation(line, column);
|
addLocation(line, column);
|
||||||
}
|
}
|
||||||
virtual void importFile(const QString &jsfile, const QString &module,
|
|
||||||
|
void importFile(const QString &jsfile, const QString &module,
|
||||||
int line, int column) override
|
int line, int column) override
|
||||||
{
|
{
|
||||||
imports += ImportInfo::pathImport(
|
imports += ImportInfo::pathImport(
|
||||||
@@ -261,7 +262,7 @@ public:
|
|||||||
addLocation(line, column);
|
addLocation(line, column);
|
||||||
}
|
}
|
||||||
|
|
||||||
virtual void importModule(const QString &uri, const QString &version, const QString &module,
|
void importModule(const QString &uri, const QString &version, const QString &module,
|
||||||
int line, int column) override
|
int line, int column) override
|
||||||
{
|
{
|
||||||
imports += ImportInfo::moduleImport(uri, LanguageUtils::ComponentVersion(version), module);
|
imports += ImportInfo::moduleImport(uri, LanguageUtils::ComponentVersion(version), module);
|
||||||
|
|||||||
@@ -30,6 +30,8 @@ namespace FlameGraph {
|
|||||||
FlameGraph::FlameGraph(QQuickItem *parent) :
|
FlameGraph::FlameGraph(QQuickItem *parent) :
|
||||||
QQuickItem(parent)
|
QQuickItem(parent)
|
||||||
{
|
{
|
||||||
|
setAcceptedMouseButtons(Qt::LeftButton);
|
||||||
|
|
||||||
// Queue the rebuild in this case so that a delegate can set the root without getting deleted
|
// Queue the rebuild in this case so that a delegate can set the root without getting deleted
|
||||||
// during the call.
|
// during the call.
|
||||||
connect(this, &FlameGraph::rootChanged, this, &FlameGraph::rebuild, Qt::QueuedConnection);
|
connect(this, &FlameGraph::rootChanged, this, &FlameGraph::rebuild, Qt::QueuedConnection);
|
||||||
@@ -130,7 +132,6 @@ QObject *FlameGraph::appendChild(QObject *parentObject, QQuickItem *parentItem,
|
|||||||
return childObject;
|
return childObject;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int FlameGraph::buildNode(const QModelIndex &parentIndex, QObject *parentObject, int depth,
|
int FlameGraph::buildNode(const QModelIndex &parentIndex, QObject *parentObject, int depth,
|
||||||
int maximumDepth)
|
int maximumDepth)
|
||||||
{
|
{
|
||||||
@@ -194,4 +195,22 @@ void FlameGraph::rebuild()
|
|||||||
emit depthChanged(m_depth);
|
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
|
} // namespace FlameGraph
|
||||||
|
|||||||
@@ -45,6 +45,8 @@ class TRACING_EXPORT FlameGraph : public QQuickItem
|
|||||||
NOTIFY maximumDepthChanged)
|
NOTIFY maximumDepthChanged)
|
||||||
Q_PROPERTY(int depth READ depth NOTIFY depthChanged)
|
Q_PROPERTY(int depth READ depth NOTIFY depthChanged)
|
||||||
Q_PROPERTY(QPersistentModelIndex root READ root WRITE setRoot NOTIFY rootChanged)
|
Q_PROPERTY(QPersistentModelIndex root READ root WRITE setRoot NOTIFY rootChanged)
|
||||||
|
Q_PROPERTY(int selectedTypeId READ selectedTypeId WRITE setSelectedTypeId
|
||||||
|
NOTIFY selectedTypeIdChanged)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
FlameGraph(QQuickItem *parent = nullptr);
|
FlameGraph(QQuickItem *parent = nullptr);
|
||||||
@@ -101,6 +103,20 @@ public:
|
|||||||
|
|
||||||
static FlameGraphAttached *qmlAttachedProperties(QObject *object);
|
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:
|
signals:
|
||||||
void delegateChanged(QQmlComponent *delegate);
|
void delegateChanged(QQmlComponent *delegate);
|
||||||
void modelChanged(QAbstractItemModel *model);
|
void modelChanged(QAbstractItemModel *model);
|
||||||
@@ -109,6 +125,7 @@ signals:
|
|||||||
void depthChanged(int depth);
|
void depthChanged(int depth);
|
||||||
void maximumDepthChanged();
|
void maximumDepthChanged();
|
||||||
void rootChanged(const QPersistentModelIndex &root);
|
void rootChanged(const QPersistentModelIndex &root);
|
||||||
|
void selectedTypeIdChanged(int selectedTypeId);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void rebuild();
|
void rebuild();
|
||||||
@@ -120,11 +137,16 @@ private:
|
|||||||
int m_depth = 0;
|
int m_depth = 0;
|
||||||
qreal m_sizeThreshold = 0;
|
qreal m_sizeThreshold = 0;
|
||||||
int m_maximumDepth = std::numeric_limits<int>::max();
|
int m_maximumDepth = std::numeric_limits<int>::max();
|
||||||
|
int m_selectedTypeId = -1;
|
||||||
|
|
||||||
int buildNode(const QModelIndex &parentIndex, QObject *parentObject, int depth,
|
int buildNode(const QModelIndex &parentIndex, QObject *parentObject, int depth,
|
||||||
int maximumDepth);
|
int maximumDepth);
|
||||||
QObject *appendChild(QObject *parentObject, QQuickItem *parentItem, QQmlContext *context,
|
QObject *appendChild(QObject *parentObject, QQuickItem *parentItem, QQmlContext *context,
|
||||||
const QModelIndex &childIndex, qreal position, qreal size);
|
const QModelIndex &childIndex, qreal position, qreal size);
|
||||||
|
|
||||||
|
void mousePressEvent(QMouseEvent *event) final;
|
||||||
|
void mouseReleaseEvent(QMouseEvent *event) final;
|
||||||
|
void mouseDoubleClickEvent(QMouseEvent *event) final;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace FlameGraph
|
} // namespace FlameGraph
|
||||||
|
|||||||
@@ -32,7 +32,16 @@ import QtQuick.Controls 1.3
|
|||||||
|
|
||||||
ScrollView {
|
ScrollView {
|
||||||
id: root
|
id: root
|
||||||
|
|
||||||
property int selectedTypeId: -1
|
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 int sizeRole: -1
|
||||||
property var model: null
|
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 {
|
Flickable {
|
||||||
id: flickable
|
id: flickable
|
||||||
contentHeight: flamegraph.height
|
contentHeight: flamegraph.height
|
||||||
@@ -158,6 +148,14 @@ ScrollView {
|
|||||||
maximumDepth: 128
|
maximumDepth: 128
|
||||||
y: flickable.height > height ? flickable.height - height : 0
|
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 {
|
delegate: FlameGraphDelegate {
|
||||||
id: flamegraphItem
|
id: flamegraphItem
|
||||||
|
|
||||||
@@ -165,7 +163,7 @@ ScrollView {
|
|||||||
property bool isHighlighted: root.isHighlighted(flamegraphItem)
|
property bool isHighlighted: root.isHighlighted(flamegraphItem)
|
||||||
|
|
||||||
itemHeight: flamegraph.delegateHeight
|
itemHeight: flamegraph.delegateHeight
|
||||||
isSelected: typeId !== -1 && typeId === root.selectedTypeId
|
isSelected: typeId !== -1 && typeId === flamegraph.selectedTypeId
|
||||||
|
|
||||||
borderColor: {
|
borderColor: {
|
||||||
if (isSelected)
|
if (isSelected)
|
||||||
@@ -189,7 +187,7 @@ ScrollView {
|
|||||||
|
|
||||||
onIsSelectedChanged: {
|
onIsSelectedChanged: {
|
||||||
if (isSelected && (tooltip.selectedNode === null ||
|
if (isSelected && (tooltip.selectedNode === null ||
|
||||||
tooltip.selectedNode.typeId !== root.selectedTypeId)) {
|
tooltip.selectedNode.typeId !== flamegraph.selectedTypeId)) {
|
||||||
tooltip.selectedNode = flamegraphItem;
|
tooltip.selectedNode = flamegraphItem;
|
||||||
} else if (!isSelected && tooltip.selectedNode === flamegraphItem) {
|
} else if (!isSelected && tooltip.selectedNode === flamegraphItem) {
|
||||||
tooltip.selectedNode = null;
|
tooltip.selectedNode = null;
|
||||||
@@ -222,7 +220,7 @@ ScrollView {
|
|||||||
if (tooltip.hoveredNode === flamegraphItem) {
|
if (tooltip.hoveredNode === flamegraphItem) {
|
||||||
// Keep the window around until something else is hovered or selected.
|
// Keep the window around until something else is hovered or selected.
|
||||||
if (tooltip.selectedNode === null
|
if (tooltip.selectedNode === null
|
||||||
|| tooltip.selectedNode.typeId !== root.selectedTypeId) {
|
|| tooltip.selectedNode.typeId !== flamegraph.selectedTypeId) {
|
||||||
tooltip.selectedNode = flamegraphItem;
|
tooltip.selectedNode = flamegraphItem;
|
||||||
}
|
}
|
||||||
tooltip.hoveredNode = null;
|
tooltip.hoveredNode = null;
|
||||||
@@ -232,8 +230,7 @@ ScrollView {
|
|||||||
function selectClicked() {
|
function selectClicked() {
|
||||||
if (FlameGraph.dataValid) {
|
if (FlameGraph.dataValid) {
|
||||||
tooltip.selectedNode = flamegraphItem;
|
tooltip.selectedNode = flamegraphItem;
|
||||||
selectedTypeId = FlameGraph.data(root.typeIdRole);
|
flamegraph.selectedTypeId = FlameGraph.data(root.typeIdRole);
|
||||||
model.typeSelected(selectedTypeId);
|
|
||||||
model.gotoSourceLocation(
|
model.gotoSourceLocation(
|
||||||
FlameGraph.data(root.sourceFileRole),
|
FlameGraph.data(root.sourceFileRole),
|
||||||
FlameGraph.data(root.sourceLineRole),
|
FlameGraph.data(root.sourceLineRole),
|
||||||
@@ -246,6 +243,7 @@ ScrollView {
|
|||||||
tooltip.selectedNode = null;
|
tooltip.selectedNode = null;
|
||||||
tooltip.hoveredNode = null;
|
tooltip.hoveredNode = null;
|
||||||
flamegraph.root = FlameGraph.modelIndex;
|
flamegraph.root = FlameGraph.modelIndex;
|
||||||
|
selectClicked();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Functions, not properties to limit the initial overhead when creating the nodes,
|
// Functions, not properties to limit the initial overhead when creating the nodes,
|
||||||
@@ -288,9 +286,8 @@ ScrollView {
|
|||||||
}
|
}
|
||||||
|
|
||||||
onClearSelection: {
|
onClearSelection: {
|
||||||
selectedTypeId = -1;
|
flamegraph.selectedTypeId = -1;
|
||||||
selectedNode = null;
|
selectedNode = null;
|
||||||
root.model.typeSelected(-1);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
dialogTitle: {
|
dialogTitle: {
|
||||||
|
|||||||
@@ -36,6 +36,7 @@
|
|||||||
#include <QKeyEvent>
|
#include <QKeyEvent>
|
||||||
#include <QListView>
|
#include <QListView>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#include <QWindow>
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
namespace Internal {
|
namespace Internal {
|
||||||
@@ -62,19 +63,35 @@ public:
|
|||||||
class HistoryLineDelegate : public QItemDelegate
|
class HistoryLineDelegate : public QItemDelegate
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
HistoryLineDelegate(QObject *parent)
|
HistoryLineDelegate(QAbstractItemView *parent)
|
||||||
: QItemDelegate(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
|
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);
|
QItemDelegate::paint(painter,option,index);
|
||||||
QRect r = QStyle::alignedRect(option.direction, Qt::AlignRight | Qt::AlignVCenter , pixmap.size(), option.rect);
|
// add remove button
|
||||||
painter->drawPixmap(r, pixmap);
|
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
|
class HistoryLineView : public QListView
|
||||||
@@ -83,26 +100,32 @@ public:
|
|||||||
HistoryLineView(HistoryCompleterPrivate *model_)
|
HistoryLineView(HistoryCompleterPrivate *model_)
|
||||||
: model(model_)
|
: model(model_)
|
||||||
{
|
{
|
||||||
HistoryLineDelegate *delegate = new HistoryLineDelegate(this);
|
}
|
||||||
pixmapWidth = delegate->pixmap.width();
|
|
||||||
|
void installDelegate()
|
||||||
|
{
|
||||||
|
delegate = new HistoryLineDelegate(this);
|
||||||
setItemDelegate(delegate);
|
setItemDelegate(delegate);
|
||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void mousePressEvent(QMouseEvent *event)
|
void mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
int rr= event->x();
|
const QSize clearButtonSize = delegate->clearIconSize;
|
||||||
|
if (clearButtonSize.isValid()) {
|
||||||
|
int rr = event->x();
|
||||||
if (layoutDirection() == Qt::LeftToRight)
|
if (layoutDirection() == Qt::LeftToRight)
|
||||||
rr = viewport()->width() - event->x();
|
rr = viewport()->width() - event->x();
|
||||||
if (rr < pixmapWidth) {
|
if (rr < clearButtonSize.width()) {
|
||||||
model->removeRow(indexAt(event->pos()).row());
|
model->removeRow(indexAt(event->pos()).row());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
QListView::mousePressEvent(event);
|
QListView::mousePressEvent(event);
|
||||||
}
|
}
|
||||||
|
|
||||||
HistoryCompleterPrivate *model;
|
HistoryCompleterPrivate *model;
|
||||||
int pixmapWidth;
|
HistoryLineDelegate *delegate;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
@@ -178,7 +201,11 @@ HistoryCompleter::HistoryCompleter(const QString &historyKey, QObject *parent)
|
|||||||
d->isLastItemEmpty = theSettings->value(d->historyKeyIsLastItemEmpty, false).toBool();
|
d->isLastItemEmpty = theSettings->value(d->historyKeyIsLastItemEmpty, false).toBool();
|
||||||
|
|
||||||
setModel(d);
|
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)
|
bool HistoryCompleter::removeHistoryItem(int index)
|
||||||
|
|||||||
@@ -75,7 +75,6 @@ JavaEditorFactory::JavaEditorFactory()
|
|||||||
setUseGenericHighlighter(true);
|
setUseGenericHighlighter(true);
|
||||||
setCommentDefinition(Utils::CommentDefinition::CppStyle);
|
setCommentDefinition(Utils::CommentDefinition::CppStyle);
|
||||||
setEditorActionHandlers(TextEditor::TextEditorActionHandler::UnCommentSelection);
|
setEditorActionHandlers(TextEditor::TextEditorActionHandler::UnCommentSelection);
|
||||||
setMarksVisible(true);
|
|
||||||
setCompletionAssistProvider(new TextEditor::KeywordsCompletionAssistProvider(keywords));
|
setCompletionAssistProvider(new TextEditor::KeywordsCompletionAssistProvider(keywords));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -33,7 +33,7 @@ namespace Internal {
|
|||||||
class GTestResult : public TestResult
|
class GTestResult : public TestResult
|
||||||
{
|
{
|
||||||
public:
|
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);
|
GTestResult(const QString &id, const QString &projectFile, const QString &name);
|
||||||
const QString outputString(bool selected) const override;
|
const QString outputString(bool selected) const override;
|
||||||
|
|
||||||
|
|||||||
@@ -91,8 +91,7 @@ GTestSettings GTestSettingsWidget::settings() const
|
|||||||
GTestSettingsPage::GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
|
GTestSettingsPage::GTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
|
||||||
const ITestFramework *framework)
|
const ITestFramework *framework)
|
||||||
: ITestSettingsPage(framework),
|
: ITestSettingsPage(framework),
|
||||||
m_settings(qSharedPointerCast<GTestSettings>(settings)),
|
m_settings(qSharedPointerCast<GTestSettings>(settings))
|
||||||
m_widget(0)
|
|
||||||
{
|
{
|
||||||
setDisplayName(QCoreApplication::translate("GTestFramework",
|
setDisplayName(QCoreApplication::translate("GTestFramework",
|
||||||
GTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
|
GTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
|
||||||
|
|||||||
@@ -41,7 +41,7 @@ class GTestSettingsWidget : public QWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit GTestSettingsWidget(QWidget *parent = 0);
|
explicit GTestSettingsWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
void setSettings(const GTestSettings &settings);
|
void setSettings(const GTestSettings &settings);
|
||||||
GTestSettings settings() const;
|
GTestSettings settings() const;
|
||||||
|
|||||||
@@ -47,11 +47,11 @@ public:
|
|||||||
virtual const char *name() const = 0;
|
virtual const char *name() const = 0;
|
||||||
virtual unsigned priority() const = 0; // should this be modifyable?
|
virtual unsigned priority() const = 0; // should this be modifyable?
|
||||||
virtual bool hasFrameworkSettings() const { return false; }
|
virtual bool hasFrameworkSettings() const { return false; }
|
||||||
virtual IFrameworkSettings *createFrameworkSettings() const { return 0; }
|
virtual IFrameworkSettings *createFrameworkSettings() const { return nullptr; }
|
||||||
virtual ITestSettingsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
|
virtual ITestSettingsPage *createSettingsPage(QSharedPointer<IFrameworkSettings> settings) const
|
||||||
{
|
{
|
||||||
Q_UNUSED(settings);
|
Q_UNUSED(settings);
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
TestTreeItem *rootNode()
|
TestTreeItem *rootNode()
|
||||||
@@ -78,8 +78,8 @@ protected:
|
|||||||
virtual TestTreeItem *createRootNode() const = 0;
|
virtual TestTreeItem *createRootNode() const = 0;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
TestTreeItem *m_rootNode = 0;
|
TestTreeItem *m_rootNode = nullptr;
|
||||||
ITestParser *m_testParser = 0;
|
ITestParser *m_testParser = nullptr;
|
||||||
bool m_active = false;
|
bool m_active = false;
|
||||||
bool m_grouping = false;
|
bool m_grouping = false;
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -97,8 +97,9 @@ QStringList filterInterfering(const QStringList &provided, QStringList *omitted,
|
|||||||
// handle Quick options as well
|
// handle Quick options as well
|
||||||
static const QSet<QString> knownInterferingQuickOption = { "-qtquick1" };
|
static const QSet<QString> knownInterferingQuickOption = { "-qtquick1" };
|
||||||
static const QSet<QString> knownAllowedQuickOptionsWithParameter {
|
static const QSet<QString> knownAllowedQuickOptionsWithParameter {
|
||||||
"-import", "-plugins", "-input"
|
"-import", "-plugins", "-input", "-translation"
|
||||||
};
|
};
|
||||||
|
static const QSet<QString> knownAllowedSingleQuickOptions = { "-opengl", "-widgets" };
|
||||||
|
|
||||||
QStringList allowed;
|
QStringList allowed;
|
||||||
auto it = provided.cbegin();
|
auto it = provided.cbegin();
|
||||||
@@ -126,6 +127,8 @@ QStringList filterInterfering(const QStringList &provided, QStringList *omitted,
|
|||||||
++it;
|
++it;
|
||||||
QTC_ASSERT(it != end, return QStringList());
|
QTC_ASSERT(it != end, return QStringList());
|
||||||
allowed.append(*it);
|
allowed.append(*it);
|
||||||
|
} else if (knownAllowedSingleQuickOptions.contains(currentOpt)) {
|
||||||
|
allowed.append(currentOpt);
|
||||||
} else if (knownInterferingQuickOption.contains(currentOpt)) {
|
} else if (knownInterferingQuickOption.contains(currentOpt)) {
|
||||||
if (omitted)
|
if (omitted)
|
||||||
omitted->append(currentOpt);
|
omitted->append(currentOpt);
|
||||||
|
|||||||
@@ -95,8 +95,7 @@ QtTestSettings QtTestSettingsWidget::settings() const
|
|||||||
QtTestSettingsPage::QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
|
QtTestSettingsPage::QtTestSettingsPage(QSharedPointer<IFrameworkSettings> settings,
|
||||||
const ITestFramework *framework)
|
const ITestFramework *framework)
|
||||||
: ITestSettingsPage(framework),
|
: ITestSettingsPage(framework),
|
||||||
m_settings(qSharedPointerCast<QtTestSettings>(settings)),
|
m_settings(qSharedPointerCast<QtTestSettings>(settings))
|
||||||
m_widget(0)
|
|
||||||
{
|
{
|
||||||
setDisplayName(QCoreApplication::translate("QtTestFramework",
|
setDisplayName(QCoreApplication::translate("QtTestFramework",
|
||||||
QtTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
|
QtTest::Constants::FRAMEWORK_SETTINGS_CATEGORY));
|
||||||
|
|||||||
@@ -35,7 +35,8 @@ namespace Autotest {
|
|||||||
namespace Internal {
|
namespace Internal {
|
||||||
namespace QuickTestUtils {
|
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)
|
bool isQuickTestMacro(const QByteArray ¯o)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -56,7 +56,7 @@ public:
|
|||||||
Shutdown
|
Shutdown
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit TestCodeParser(TestTreeModel *parent = 0);
|
explicit TestCodeParser(TestTreeModel *parent = nullptr);
|
||||||
virtual ~TestCodeParser();
|
virtual ~TestCodeParser();
|
||||||
void setState(State state);
|
void setState(State state);
|
||||||
State state() const { return m_parserState; }
|
State state() const { return m_parserState; }
|
||||||
|
|||||||
@@ -59,8 +59,8 @@ TestConfiguration::~TestConfiguration()
|
|||||||
|
|
||||||
static bool isLocal(RunConfiguration *runConfiguration)
|
static bool isLocal(RunConfiguration *runConfiguration)
|
||||||
{
|
{
|
||||||
Target *target = runConfiguration ? runConfiguration->target() : 0;
|
Target *target = runConfiguration ? runConfiguration->target() : nullptr;
|
||||||
Kit *kit = target ? target->kit() : 0;
|
Kit *kit = target ? target->kit() : nullptr;
|
||||||
return DeviceTypeKitInformation::deviceTypeId(kit) == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE;
|
return DeviceTypeKitInformation::deviceTypeId(kit) == ProjectExplorer::Constants::DESKTOP_DEVICE_TYPE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -37,7 +37,7 @@ class TestResultDelegate : public QStyledItemDelegate
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit TestResultDelegate(QObject *parent = 0);
|
explicit TestResultDelegate(QObject *parent = nullptr);
|
||||||
|
|
||||||
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
||||||
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
QSize sizeHint(const QStyleOptionViewItem &option, const QModelIndex &index) const override;
|
||||||
|
|||||||
@@ -266,7 +266,7 @@ const TestResult *TestResultModel::testResult(const QModelIndex &idx)
|
|||||||
if (idx.isValid())
|
if (idx.isValid())
|
||||||
return static_cast<TestResultItem *>(itemForIndex(idx))->testResult();
|
return static_cast<TestResultItem *>(itemForIndex(idx))->testResult();
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestResultModel::recalculateMaxWidthOfFileName(const QFont &font)
|
void TestResultModel::recalculateMaxWidthOfFileName(const QFont &font)
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ private:
|
|||||||
class TestResultModel : public Utils::TreeModel<>
|
class TestResultModel : public Utils::TreeModel<>
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit TestResultModel(QObject *parent = 0);
|
explicit TestResultModel(QObject *parent = nullptr);
|
||||||
|
|
||||||
void addTestResult(const TestResultPtr &testResult, bool autoExpand = false);
|
void addTestResult(const TestResultPtr &testResult, bool autoExpand = false);
|
||||||
void removeCurrentTestMessage();
|
void removeCurrentTestMessage();
|
||||||
@@ -75,7 +75,7 @@ private:
|
|||||||
void recalculateMaxWidthOfFileName(const QFont &font);
|
void recalculateMaxWidthOfFileName(const QFont &font);
|
||||||
void addFileName(const QString &fileName);
|
void addFileName(const QString &fileName);
|
||||||
TestResultItem *findParentItemFor(const TestResultItem *item,
|
TestResultItem *findParentItemFor(const TestResultItem *item,
|
||||||
const TestResultItem *startItem = 0) const;
|
const TestResultItem *startItem = nullptr) const;
|
||||||
void updateParent(const TestResultItem *item);
|
void updateParent(const TestResultItem *item);
|
||||||
QMap<Result::Type, int> m_testResultCount;
|
QMap<Result::Type, int> m_testResultCount;
|
||||||
int m_widthOfLineNumber = 0;
|
int m_widthOfLineNumber = 0;
|
||||||
@@ -89,7 +89,7 @@ class TestResultFilterModel : public QSortFilterProxyModel
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit TestResultFilterModel(TestResultModel *sourceModel, QObject *parent = 0);
|
explicit TestResultFilterModel(TestResultModel *sourceModel, QObject *parent = nullptr);
|
||||||
|
|
||||||
void enableAllResultTypes();
|
void enableAllResultTypes();
|
||||||
void toggleTestResultType(Result::Type type);
|
void toggleTestResultType(Result::Type type);
|
||||||
|
|||||||
@@ -59,7 +59,7 @@ class ResultsTreeView : public Utils::TreeView
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit ResultsTreeView(QWidget *parent = 0);
|
explicit ResultsTreeView(QWidget *parent = nullptr);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void copyShortcutTriggered();
|
void copyShortcutTriggered();
|
||||||
@@ -96,7 +96,7 @@ public:
|
|||||||
void showTestResult(const QModelIndex &index);
|
void showTestResult(const QModelIndex &index);
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit TestResultsPane(QObject *parent = 0);
|
explicit TestResultsPane(QObject *parent = nullptr);
|
||||||
|
|
||||||
void onItemActivated(const QModelIndex &index);
|
void onItemActivated(const QModelIndex &index);
|
||||||
void onRunAllTriggered();
|
void onRunAllTriggered();
|
||||||
|
|||||||
@@ -73,8 +73,8 @@ public:
|
|||||||
}
|
}
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QWidget *createConfigurationWidget() override { return 0; }
|
QWidget *createConfigurationWidget() override { return nullptr; }
|
||||||
TestConfiguration *m_testConfig = 0;
|
TestConfiguration *m_testConfig = nullptr;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -249,12 +249,10 @@ void TestRunner::onProcessFinished()
|
|||||||
|
|
||||||
resetInternalPointers();
|
resetInternalPointers();
|
||||||
|
|
||||||
if (!m_selectedTests.isEmpty() && !m_fakeFutureInterface->isCanceled()) {
|
if (!m_selectedTests.isEmpty() && !m_fakeFutureInterface->isCanceled())
|
||||||
scheduleNext();
|
scheduleNext();
|
||||||
} else {
|
else
|
||||||
m_fakeFutureInterface->reportFinished();
|
m_fakeFutureInterface->reportFinished();
|
||||||
onFinished();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void TestRunner::resetInternalPointers()
|
void TestRunner::resetInternalPointers()
|
||||||
@@ -516,7 +514,7 @@ void TestRunner::debugTests()
|
|||||||
m_futureWatcher.setFuture(futureInterface->future());
|
m_futureWatcher.setFuture(futureInterface->future());
|
||||||
|
|
||||||
if (useOutputProcessor) {
|
if (useOutputProcessor) {
|
||||||
TestOutputReader *outputreader = config->outputReader(*futureInterface, 0);
|
TestOutputReader *outputreader = config->outputReader(*futureInterface, nullptr);
|
||||||
outputreader->setId(inferior.executable);
|
outputreader->setId(inferior.executable);
|
||||||
connect(outputreader, &TestOutputReader::newOutputAvailable,
|
connect(outputreader, &TestOutputReader::newOutputAvailable,
|
||||||
TestResultsPane::instance(), &TestResultsPane::addOutput);
|
TestResultsPane::instance(), &TestResultsPane::addOutput);
|
||||||
|
|||||||
@@ -85,7 +85,7 @@ private:
|
|||||||
void runTests();
|
void runTests();
|
||||||
void debugTests();
|
void debugTests();
|
||||||
void runOrDebugTests();
|
void runOrDebugTests();
|
||||||
explicit TestRunner(QObject *parent = 0);
|
explicit TestRunner(QObject *parent = nullptr);
|
||||||
|
|
||||||
QFutureWatcher<TestResultPtr> m_futureWatcher;
|
QFutureWatcher<TestResultPtr> m_futureWatcher;
|
||||||
QFutureInterface<TestResultPtr> *m_fakeFutureInterface = nullptr;
|
QFutureInterface<TestResultPtr> *m_fakeFutureInterface = nullptr;
|
||||||
|
|||||||
@@ -45,7 +45,7 @@ namespace Internal {
|
|||||||
class TestFilterDialog : public QDialog
|
class TestFilterDialog : public QDialog
|
||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
explicit TestFilterDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);
|
explicit TestFilterDialog(QWidget *parent = nullptr, Qt::WindowFlags f = 0);
|
||||||
QString filterPath() const;
|
QString filterPath() const;
|
||||||
void setDetailsText(const QString &details) { m_details->setText(details); }
|
void setDetailsText(const QString &details) { m_details->setText(details); }
|
||||||
void setDefaultFilterPath(const QString &defaultPath);
|
void setDefaultFilterPath(const QString &defaultPath);
|
||||||
@@ -276,7 +276,7 @@ void TestSettingsWidget::onRemoveFilterClicked()
|
|||||||
}
|
}
|
||||||
|
|
||||||
TestSettingsPage::TestSettingsPage(const QSharedPointer<TestSettings> &settings)
|
TestSettingsPage::TestSettingsPage(const QSharedPointer<TestSettings> &settings)
|
||||||
: m_settings(settings), m_widget(0)
|
: m_settings(settings)
|
||||||
{
|
{
|
||||||
setId("A.AutoTest.0.General");
|
setId("A.AutoTest.0.General");
|
||||||
setDisplayName(tr("General"));
|
setDisplayName(tr("General"));
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ class TestSettingsWidget : public QWidget
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit TestSettingsWidget(QWidget *parent = 0);
|
explicit TestSettingsWidget(QWidget *parent = nullptr);
|
||||||
|
|
||||||
void setSettings(const TestSettings &settings);
|
void setSettings(const TestSettings &settings);
|
||||||
TestSettings settings() const;
|
TestSettings settings() const;
|
||||||
|
|||||||
@@ -109,8 +109,8 @@ public:
|
|||||||
|
|
||||||
virtual bool canProvideTestConfiguration() const { return false; }
|
virtual bool canProvideTestConfiguration() const { return false; }
|
||||||
virtual bool canProvideDebugConfiguration() const { return false; }
|
virtual bool canProvideDebugConfiguration() const { return false; }
|
||||||
virtual TestConfiguration *testConfiguration() const { return 0; }
|
virtual TestConfiguration *testConfiguration() const { return nullptr; }
|
||||||
virtual TestConfiguration *debugConfiguration() const { return 0; }
|
virtual TestConfiguration *debugConfiguration() const { return nullptr; }
|
||||||
TestConfiguration *asConfiguration(TestRunMode mode) const;
|
TestConfiguration *asConfiguration(TestRunMode mode) const;
|
||||||
virtual QList<TestConfiguration *> getAllTestConfigurations() const;
|
virtual QList<TestConfiguration *> getAllTestConfigurations() const;
|
||||||
virtual QList<TestConfiguration *> getSelectedTestConfigurations() const;
|
virtual QList<TestConfiguration *> getSelectedTestConfigurations() const;
|
||||||
|
|||||||
@@ -34,7 +34,7 @@ class TestTreeItemDelegate : public QStyledItemDelegate
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
explicit TestTreeItemDelegate(QObject *parent = 0);
|
explicit TestTreeItemDelegate(QObject *parent = nullptr);
|
||||||
~TestTreeItemDelegate();
|
~TestTreeItemDelegate();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ private:
|
|||||||
bool sweepChildren(TestTreeItem *item);
|
bool sweepChildren(TestTreeItem *item);
|
||||||
void insertItemInParent(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled);
|
void insertItemInParent(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled);
|
||||||
void revalidateCheckState(TestTreeItem *item);
|
void revalidateCheckState(TestTreeItem *item);
|
||||||
explicit TestTreeModel(QObject *parent = 0);
|
explicit TestTreeModel(QObject *parent = nullptr);
|
||||||
void setupParsingConnections();
|
void setupParsingConnections();
|
||||||
void filterAndInsert(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled);
|
void filterAndInsert(TestTreeItem *item, TestTreeItem *root, bool groupingEnabled);
|
||||||
QList<TestTreeItem *> testItemsByName(TestTreeItem *root, const QString &testName);
|
QList<TestTreeItem *> testItemsByName(TestTreeItem *root, const QString &testName);
|
||||||
@@ -111,7 +111,7 @@ public:
|
|||||||
ShowAll = ShowInitAndCleanup | ShowTestData
|
ShowAll = ShowInitAndCleanup | ShowTestData
|
||||||
};
|
};
|
||||||
|
|
||||||
explicit TestTreeSortFilterModel(TestTreeModel *sourceModel, QObject *parent = 0);
|
explicit TestTreeSortFilterModel(TestTreeModel *sourceModel, QObject *parent = nullptr);
|
||||||
void setSortMode(TestTreeItem::SortMode sortMode);
|
void setSortMode(TestTreeItem::SortMode sortMode);
|
||||||
void setFilterMode(FilterMode filterMode);
|
void setFilterMode(FilterMode filterMode);
|
||||||
void toggleFilter(FilterMode filterMode);
|
void toggleFilter(FilterMode filterMode);
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ class TestTreeView : public Utils::NavigationTreeView
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit TestTreeView(QWidget *parent = 0);
|
explicit TestTreeView(QWidget *parent = nullptr);
|
||||||
|
|
||||||
void selectAll() override;
|
void selectAll() override;
|
||||||
void deselectAll();
|
void deselectAll();
|
||||||
|
|||||||
@@ -22,8 +22,8 @@
|
|||||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
#ifndef FOO_H_INCLUDED
|
|
||||||
#define FOO_H_INCLUDED
|
#pragma once
|
||||||
|
|
||||||
#include <QObject>
|
#include <QObject>
|
||||||
|
|
||||||
@@ -46,5 +46,3 @@ private slots:
|
|||||||
void test_case4();
|
void test_case4();
|
||||||
void test_case5() {}
|
void test_case5() {}
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|||||||
@@ -22,6 +22,9 @@
|
|||||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include <QQueue>
|
#include <QQueue>
|
||||||
|
|
||||||
class QueueTest : public ::testing::Test
|
class QueueTest : public ::testing::Test
|
||||||
|
|||||||
@@ -22,6 +22,9 @@
|
|||||||
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
** be met: https://www.gnu.org/licenses/gpl-3.0.html.
|
||||||
**
|
**
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
#include <QString>
|
#include <QString>
|
||||||
|
|||||||
@@ -120,6 +120,9 @@
|
|||||||
<property name="suffix">
|
<property name="suffix">
|
||||||
<string>s</string>
|
<string>s</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>360</number>
|
||||||
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<number>30</number>
|
<number>30</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -265,7 +265,7 @@ CppTools::SymbolInfo toSymbolInfo(const FollowSymbolMessage &message)
|
|||||||
result.endColumn = static_cast<int>(end.column);
|
result.endColumn = static_cast<int>(end.column);
|
||||||
result.fileName = start.filePath;
|
result.fileName = start.filePath;
|
||||||
|
|
||||||
result.isPureDeclarationForUsage = message.result.isPureDeclarationForUsage;
|
result.isResultOnlyForFallBack = message.result.isResultOnlyForFallBack;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -289,7 +289,7 @@ private:
|
|||||||
|
|
||||||
const QString link = documentationUrlForOption(option);
|
const QString link = documentationUrlForOption(option);
|
||||||
if (link.isEmpty())
|
if (link.isEmpty())
|
||||||
return QString();
|
return option;
|
||||||
|
|
||||||
return wrapInLink(option.toString(), link);
|
return wrapInLink(option.toString(), link);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -145,7 +145,7 @@ static ::Utils::ProcessLinkCallback extendedCallback(::Utils::ProcessLinkCallbac
|
|||||||
{
|
{
|
||||||
// If globalFollowSymbol finds nothing follow to the declaration.
|
// If globalFollowSymbol finds nothing follow to the declaration.
|
||||||
return [original_callback = std::move(callback), result](const ::Utils::Link &link) {
|
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,
|
return original_callback(::Utils::Link(result.fileName, result.startLine,
|
||||||
result.startColumn - 1));
|
result.startColumn - 1));
|
||||||
}
|
}
|
||||||
@@ -198,7 +198,7 @@ void ClangFollowSymbol::findLink(const CppTools::CursorInEditor &data,
|
|||||||
return callback(Utils::Link());
|
return callback(Utils::Link());
|
||||||
CppTools::SymbolInfo result = m_watcher->result();
|
CppTools::SymbolInfo result = m_watcher->result();
|
||||||
// We did not fail but the result is empty
|
// 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
|
const CppTools::RefactoringEngineInterface &refactoringEngine
|
||||||
= *CppTools::CppModelManager::instance();
|
= *CppTools::CppModelManager::instance();
|
||||||
refactoringEngine.globalFollowSymbol(data,
|
refactoringEngine.globalFollowSymbol(data,
|
||||||
|
|||||||
@@ -59,6 +59,8 @@ QtcPlugin {
|
|||||||
"projectpartutilities.h",
|
"projectpartutilities.h",
|
||||||
"qtcreatorclangqueryfindfilter.cpp",
|
"qtcreatorclangqueryfindfilter.cpp",
|
||||||
"qtcreatorclangqueryfindfilter.h",
|
"qtcreatorclangqueryfindfilter.h",
|
||||||
|
"qtcreatoreditormanager.cpp",
|
||||||
|
"qtcreatoreditormanager.h",
|
||||||
"qtcreatorsearch.cpp",
|
"qtcreatorsearch.cpp",
|
||||||
"qtcreatorsearch.h",
|
"qtcreatorsearch.h",
|
||||||
"qtcreatorsearchhandle.cpp",
|
"qtcreatorsearchhandle.cpp",
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#include "clangselectablefilesdialog.h"
|
#include "clangselectablefilesdialog.h"
|
||||||
#include "ui_clangselectablefilesdialog.h"
|
#include "ui_clangselectablefilesdialog.h"
|
||||||
|
#include "ui_clangtoolsbasicsettings.h"
|
||||||
|
|
||||||
#include "clangtoolsprojectsettings.h"
|
#include "clangtoolsprojectsettings.h"
|
||||||
#include "clangtoolssettings.h"
|
#include "clangtoolssettings.h"
|
||||||
@@ -269,9 +270,10 @@ enum { GlobalSettings , CustomSettings };
|
|||||||
|
|
||||||
static Core::Id diagnosticConfiguration(ClangToolsProjectSettings *settings)
|
static Core::Id diagnosticConfiguration(ClangToolsProjectSettings *settings)
|
||||||
{
|
{
|
||||||
if (settings->useGlobalSettings())
|
Core::Id id = settings->diagnosticConfig();
|
||||||
|
if (id.isValid())
|
||||||
|
return id;
|
||||||
return ClangToolsSettings::instance()->savedDiagnosticConfigId();
|
return ClangToolsSettings::instance()->savedDiagnosticConfigId();
|
||||||
return settings->diagnosticConfig();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo,
|
SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo,
|
||||||
@@ -290,37 +292,54 @@ SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo,
|
|||||||
m_ui->buttons->setStandardButtons(QDialogButtonBox::Cancel);
|
m_ui->buttons->setStandardButtons(QDialogButtonBox::Cancel);
|
||||||
m_ui->buttons->addButton(m_analyzeButton, QDialogButtonBox::AcceptRole);
|
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);
|
ClangToolsProjectSettings *settings = ClangToolsProjectSettingsManager::getSettings(m_project);
|
||||||
|
m_customDiagnosticConfig = diagnosticConfiguration(settings);
|
||||||
|
m_buildBeforeAnalysis = settings->buildBeforeAnalysis();
|
||||||
|
|
||||||
if (settings->useGlobalSettings()) {
|
if (settings->useGlobalSettings()) {
|
||||||
m_ui->globalOrCustom->setCurrentIndex(GlobalSettings);
|
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 {
|
} else {
|
||||||
m_ui->globalOrCustom->setCurrentIndex(CustomSettings);
|
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,
|
connect(m_ui->globalOrCustom,
|
||||||
static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
|
static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged),
|
||||||
[this](int index){
|
[=](int index){
|
||||||
m_ui->diagnosticConfigsSelectionWidget->setEnabled(index == CustomSettings);
|
m_ui->clangToolsBasicSettings->setEnabled(index == CustomSettings);
|
||||||
if (index == CustomSettings) {
|
if (index == CustomSettings) {
|
||||||
m_ui->diagnosticConfigsSelectionWidget->refresh(m_customDiagnosticConfig);
|
diagnosticConfigsSelectionWidget->refresh(m_customDiagnosticConfig);
|
||||||
|
buildBeforeAnalysis->setCheckState(m_buildBeforeAnalysis ? Qt::Checked : Qt::Unchecked);
|
||||||
} else {
|
} else {
|
||||||
m_ui->diagnosticConfigsSelectionWidget->refresh(
|
diagnosticConfigsSelectionWidget->refresh(
|
||||||
ClangToolsSettings::instance()->savedDiagnosticConfigId());
|
ClangToolsSettings::instance()->savedDiagnosticConfigId());
|
||||||
|
buildBeforeAnalysis->setCheckState(
|
||||||
|
ClangToolsSettings::instance()->savedBuildBeforeAnalysis()
|
||||||
|
? Qt::Checked : Qt::Unchecked);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
connect(m_ui->diagnosticConfigsSelectionWidget,
|
connect(diagnosticConfigsSelectionWidget,
|
||||||
&ClangDiagnosticConfigsSelectionWidget::currentConfigChanged,
|
&ClangDiagnosticConfigsSelectionWidget::currentConfigChanged,
|
||||||
[this](const Core::Id ¤tConfigId) {
|
[this](const Core::Id ¤tConfigId) {
|
||||||
if (m_ui->globalOrCustom->currentIndex() == CustomSettings)
|
if (m_ui->globalOrCustom->currentIndex() == CustomSettings)
|
||||||
m_customDiagnosticConfig = currentConfigId;
|
m_customDiagnosticConfig = currentConfigId;
|
||||||
});
|
});
|
||||||
|
connect(buildBeforeAnalysis, &QCheckBox::toggled, [this](bool checked) {
|
||||||
|
if (m_ui->globalOrCustom->currentIndex() == CustomSettings)
|
||||||
|
m_buildBeforeAnalysis = checked;
|
||||||
|
});
|
||||||
|
|
||||||
// Restore selection
|
// Restore selection
|
||||||
if (settings->selectedDirs().isEmpty() && settings->selectedFiles().isEmpty())
|
if (settings->selectedDirs().isEmpty() && settings->selectedFiles().isEmpty())
|
||||||
@@ -335,7 +354,12 @@ SelectableFilesDialog::SelectableFilesDialog(const ProjectInfo &projectInfo,
|
|||||||
|
|
||||||
connect(CppTools::codeModelSettings().data(), &CppTools::CppCodeModelSettings::changed,
|
connect(CppTools::codeModelSettings().data(), &CppTools::CppCodeModelSettings::changed,
|
||||||
this, [=]() {
|
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);
|
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->setUseGlobalSettings(m_ui->globalOrCustom->currentIndex() == GlobalSettings);
|
||||||
settings->setDiagnosticConfig(m_customDiagnosticConfig);
|
settings->setDiagnosticConfig(m_customDiagnosticConfig);
|
||||||
|
settings->setBuildBeforeAnalysis(m_buildBeforeAnalysis);
|
||||||
|
|
||||||
// Save selection
|
// Save selection
|
||||||
QSet<FileName> checkedDirs;
|
QSet<FileName> checkedDirs;
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ private:
|
|||||||
Core::Id m_customDiagnosticConfig;
|
Core::Id m_customDiagnosticConfig;
|
||||||
ProjectExplorer::Project *m_project;
|
ProjectExplorer::Project *m_project;
|
||||||
QPushButton *m_analyzeButton = nullptr;
|
QPushButton *m_analyzeButton = nullptr;
|
||||||
|
bool m_buildBeforeAnalysis = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace Internal
|
} // namespace Internal
|
||||||
|
|||||||
@@ -15,33 +15,44 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QGroupBox" name="groupBox">
|
<widget class="QGroupBox" name="groupBox_3">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>Diagnostic Configuration</string>
|
<string>General</string>
|
||||||
</property>
|
|
||||||
<property name="checkable">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
|
||||||
<property name="checked">
|
|
||||||
<bool>false</bool>
|
|
||||||
</property>
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_5">
|
||||||
|
<item>
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout">
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QComboBox" name="globalOrCustom">
|
<widget class="QComboBox" name="globalOrCustom">
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Global</string>
|
<string>Global Settings</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Custom</string>
|
<string>Custom Settings</string>
|
||||||
</property>
|
</property>
|
||||||
</item>
|
</item>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="CppTools::ClangDiagnosticConfigsSelectionWidget" name="diagnosticConfigsSelectionWidget" native="true"/>
|
<spacer name="horizontalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>40</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="ClangTools::ClangToolsBasicSettings" name="clangToolsBasicSettings" native="true"/>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
@@ -76,9 +87,9 @@
|
|||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>CppTools::ClangDiagnosticConfigsSelectionWidget</class>
|
<class>ClangTools::ClangToolsBasicSettings</class>
|
||||||
<extends>QWidget</extends>
|
<extends>QWidget</extends>
|
||||||
<header>cpptools/clangdiagnosticconfigsselectionwidget.h</header>
|
<header>clangtools/clangtoolsbasicsettings.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|||||||
@@ -27,6 +27,7 @@
|
|||||||
|
|
||||||
#include "clangtool.h"
|
#include "clangtool.h"
|
||||||
#include "clangtoolslogfilereader.h"
|
#include "clangtoolslogfilereader.h"
|
||||||
|
#include "clangtoolsprojectsettings.h"
|
||||||
#include "clangtoolssettings.h"
|
#include "clangtoolssettings.h"
|
||||||
#include "clangtoolsutils.h"
|
#include "clangtoolsutils.h"
|
||||||
#include "clangtoolrunner.h"
|
#include "clangtoolrunner.h"
|
||||||
@@ -237,12 +238,12 @@ ClangToolRunControl::ClangToolRunControl(RunControl *runControl,
|
|||||||
{
|
{
|
||||||
addStartDependency(m_projectBuilder);
|
addStartDependency(m_projectBuilder);
|
||||||
|
|
||||||
auto *settings = ClangToolsSettings::instance();
|
ClangToolsProjectSettings *projectSettings = ClangToolsProjectSettingsManager::getSettings(
|
||||||
m_projectBuilder->setEnabled(settings->savedBuildBeforeAnalysis());
|
target->project());
|
||||||
|
if (projectSettings->useGlobalSettings())
|
||||||
connect(settings, &ClangToolsSettings::buildBeforeAnalysisChanged, this, [this](bool checked) {
|
m_projectBuilder->setEnabled(ClangToolsSettings::instance()->savedBuildBeforeAnalysis());
|
||||||
m_projectBuilder->setEnabled(checked);
|
else
|
||||||
});
|
m_projectBuilder->setEnabled(projectSettings->buildBeforeAnalysis());
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClangToolRunControl::init()
|
void ClangToolRunControl::init()
|
||||||
|
|||||||
@@ -19,6 +19,7 @@ SOURCES += \
|
|||||||
clangtool.cpp \
|
clangtool.cpp \
|
||||||
clangtoolruncontrol.cpp \
|
clangtoolruncontrol.cpp \
|
||||||
clangtoolrunner.cpp \
|
clangtoolrunner.cpp \
|
||||||
|
clangtoolsbasicsettings.cpp \
|
||||||
clangtoolsdiagnostic.cpp \
|
clangtoolsdiagnostic.cpp \
|
||||||
clangtoolsdiagnosticmodel.cpp \
|
clangtoolsdiagnosticmodel.cpp \
|
||||||
clangtoolslogfilereader.cpp \
|
clangtoolslogfilereader.cpp \
|
||||||
@@ -41,6 +42,7 @@ HEADERS += \
|
|||||||
clangtoolruncontrol.h \
|
clangtoolruncontrol.h \
|
||||||
clangtoolrunner.h \
|
clangtoolrunner.h \
|
||||||
clangtools_global.h \
|
clangtools_global.h \
|
||||||
|
clangtoolsbasicsettings.h \
|
||||||
clangtoolsconstants.h \
|
clangtoolsconstants.h \
|
||||||
clangtoolsdiagnostic.h \
|
clangtoolsdiagnostic.h \
|
||||||
clangtoolsdiagnosticmodel.h \
|
clangtoolsdiagnosticmodel.h \
|
||||||
@@ -54,7 +56,8 @@ HEADERS += \
|
|||||||
FORMS += \
|
FORMS += \
|
||||||
clangtoolsprojectsettingswidget.ui \
|
clangtoolsprojectsettingswidget.ui \
|
||||||
clangtoolsconfigwidget.ui \
|
clangtoolsconfigwidget.ui \
|
||||||
clangselectablefilesdialog.ui
|
clangselectablefilesdialog.ui \
|
||||||
|
clangtoolsbasicsettings.ui
|
||||||
|
|
||||||
equals(TEST, 1) {
|
equals(TEST, 1) {
|
||||||
HEADERS += \
|
HEADERS += \
|
||||||
|
|||||||
@@ -48,11 +48,6 @@ QtcPlugin {
|
|||||||
"clangselectablefilesdialog.cpp",
|
"clangselectablefilesdialog.cpp",
|
||||||
"clangselectablefilesdialog.h",
|
"clangselectablefilesdialog.h",
|
||||||
"clangselectablefilesdialog.ui",
|
"clangselectablefilesdialog.ui",
|
||||||
"clangtoolsdiagnosticview.cpp",
|
|
||||||
"clangtoolsdiagnosticview.h",
|
|
||||||
"clangtoolsprojectsettingswidget.cpp",
|
|
||||||
"clangtoolsprojectsettingswidget.h",
|
|
||||||
"clangtoolsprojectsettingswidget.ui",
|
|
||||||
"clangtidyclazyruncontrol.cpp",
|
"clangtidyclazyruncontrol.cpp",
|
||||||
"clangtidyclazyruncontrol.h",
|
"clangtidyclazyruncontrol.h",
|
||||||
"clangtidyclazyrunner.cpp",
|
"clangtidyclazyrunner.cpp",
|
||||||
@@ -66,6 +61,9 @@ QtcPlugin {
|
|||||||
"clangtoolrunner.cpp",
|
"clangtoolrunner.cpp",
|
||||||
"clangtoolrunner.h",
|
"clangtoolrunner.h",
|
||||||
"clangtools_global.h",
|
"clangtools_global.h",
|
||||||
|
"clangtoolsbasicsettings.cpp",
|
||||||
|
"clangtoolsbasicsettings.h",
|
||||||
|
"clangtoolsbasicsettings.ui",
|
||||||
"clangtoolsconfigwidget.cpp",
|
"clangtoolsconfigwidget.cpp",
|
||||||
"clangtoolsconfigwidget.h",
|
"clangtoolsconfigwidget.h",
|
||||||
"clangtoolsconfigwidget.ui",
|
"clangtoolsconfigwidget.ui",
|
||||||
@@ -74,10 +72,15 @@ QtcPlugin {
|
|||||||
"clangtoolsdiagnostic.h",
|
"clangtoolsdiagnostic.h",
|
||||||
"clangtoolsdiagnosticmodel.cpp",
|
"clangtoolsdiagnosticmodel.cpp",
|
||||||
"clangtoolsdiagnosticmodel.h",
|
"clangtoolsdiagnosticmodel.h",
|
||||||
|
"clangtoolsdiagnosticview.cpp",
|
||||||
|
"clangtoolsdiagnosticview.h",
|
||||||
"clangtoolslogfilereader.cpp",
|
"clangtoolslogfilereader.cpp",
|
||||||
"clangtoolslogfilereader.h",
|
"clangtoolslogfilereader.h",
|
||||||
"clangtoolsprojectsettings.cpp",
|
"clangtoolsprojectsettings.cpp",
|
||||||
"clangtoolsprojectsettings.h",
|
"clangtoolsprojectsettings.h",
|
||||||
|
"clangtoolsprojectsettingswidget.cpp",
|
||||||
|
"clangtoolsprojectsettingswidget.h",
|
||||||
|
"clangtoolsprojectsettingswidget.ui",
|
||||||
"clangtoolssettings.cpp",
|
"clangtoolssettings.cpp",
|
||||||
"clangtoolssettings.h",
|
"clangtoolssettings.h",
|
||||||
"clangtoolsutils.cpp",
|
"clangtoolsutils.cpp",
|
||||||
|
|||||||
50
src/plugins/clangtools/clangtoolsbasicsettings.cpp
Normal file
50
src/plugins/clangtools/clangtoolsbasicsettings.cpp
Normal file
@@ -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
|
||||||
49
src/plugins/clangtools/clangtoolsbasicsettings.h
Normal file
49
src/plugins/clangtools/clangtoolsbasicsettings.h
Normal file
@@ -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 <QWidget>
|
||||||
|
|
||||||
|
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
|
||||||
50
src/plugins/clangtools/clangtoolsbasicsettings.ui
Normal file
50
src/plugins/clangtools/clangtoolsbasicsettings.ui
Normal file
@@ -0,0 +1,50 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>ClangTools::ClangToolsBasicSettings</class>
|
||||||
|
<widget class="QWidget" name="ClangTools::ClangToolsBasicSettings">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>400</width>
|
||||||
|
<height>300</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Form</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<property name="leftMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="topMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="rightMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<property name="bottomMargin">
|
||||||
|
<number>0</number>
|
||||||
|
</property>
|
||||||
|
<item>
|
||||||
|
<widget class="QCheckBox" name="buildBeforeAnalysis">
|
||||||
|
<property name="text">
|
||||||
|
<string>Build the project before analysis</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="CppTools::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>CppTools::ClangDiagnosticConfigsSelectionWidget</class>
|
||||||
|
<extends>QWidget</extends>
|
||||||
|
<header>cpptools/clangdiagnosticconfigsselectionwidget.h</header>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
||||||
@@ -24,6 +24,7 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "clangtoolsconfigwidget.h"
|
#include "clangtoolsconfigwidget.h"
|
||||||
|
#include "ui_clangtoolsbasicsettings.h"
|
||||||
#include "ui_clangtoolsconfigwidget.h"
|
#include "ui_clangtoolsconfigwidget.h"
|
||||||
|
|
||||||
#include "clangtoolsutils.h"
|
#include "clangtoolsutils.h"
|
||||||
@@ -54,24 +55,27 @@ ClangToolsConfigWidget::ClangToolsConfigWidget(
|
|||||||
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
|
static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged),
|
||||||
[settings](int count) { settings->setSimultaneousProcesses(count); });
|
[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);
|
? Qt::Checked : Qt::Unchecked);
|
||||||
connect(m_ui->buildBeforeAnalysis, &QCheckBox::toggled, [settings](bool checked) {
|
connect(buildBeforeAnalysis, &QCheckBox::toggled, [settings](bool checked) {
|
||||||
settings->setBuildBeforeAnalysis(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,
|
&CppTools::ClangDiagnosticConfigsSelectionWidget::currentConfigChanged,
|
||||||
this, [this](const Core::Id ¤tConfigId) {
|
this, [this](const Core::Id ¤tConfigId) {
|
||||||
m_settings->setDiagnosticConfigId(currentConfigId);
|
m_settings->setDiagnosticConfigId(currentConfigId);
|
||||||
});
|
});
|
||||||
|
|
||||||
connect(CppTools::codeModelSettings().data(), &CppTools::CppCodeModelSettings::changed,
|
connect(CppTools::codeModelSettings().data(), &CppTools::CppCodeModelSettings::changed,
|
||||||
this, [this]() {
|
this, [=]() {
|
||||||
// Settings were applied so apply also the current selection if possible.
|
// 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();
|
m_settings->writeSettings();
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -21,11 +21,7 @@
|
|||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout_2">
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QCheckBox" name="buildBeforeAnalysis">
|
<widget class="ClangTools::ClangToolsBasicSettings" name="clangToolsBasicSettings" native="true"/>
|
||||||
<property name="text">
|
|
||||||
<string>Build the project before analysis</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<layout class="QHBoxLayout" name="processesLayout">
|
<layout class="QHBoxLayout" name="processesLayout">
|
||||||
@@ -61,9 +57,6 @@
|
|||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
|
||||||
<widget class="CppTools::ClangDiagnosticConfigsSelectionWidget" name="clangDiagnosticConfigsSelectionWidget" native="true"/>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
@@ -84,9 +77,9 @@
|
|||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>CppTools::ClangDiagnosticConfigsSelectionWidget</class>
|
<class>ClangTools::ClangToolsBasicSettings</class>
|
||||||
<extends>QWidget</extends>
|
<extends>QWidget</extends>
|
||||||
<header>cpptools/clangdiagnosticconfigsselectionwidget.h</header>
|
<header>clangtools/clangtoolsbasicsettings.h</header>
|
||||||
</customwidget>
|
</customwidget>
|
||||||
</customwidgets>
|
</customwidgets>
|
||||||
<resources/>
|
<resources/>
|
||||||
|
|||||||
@@ -36,6 +36,7 @@ namespace Internal {
|
|||||||
|
|
||||||
static const char SETTINGS_KEY_USE_GLOBAL_SETTINGS[] = "ClangTools.UseGlobalSettings";
|
static const char SETTINGS_KEY_USE_GLOBAL_SETTINGS[] = "ClangTools.UseGlobalSettings";
|
||||||
static const char SETTINGS_KEY_DIAGNOSTIC_CONFIG[] = "ClangTools.DiagnosticConfig";
|
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_DIRS[] = "ClangTools.SelectedDirs";
|
||||||
static const char SETTINGS_KEY_SELECTED_FILES[] = "ClangTools.SelectedFiles";
|
static const char SETTINGS_KEY_SELECTED_FILES[] = "ClangTools.SelectedFiles";
|
||||||
static const char SETTINGS_KEY_SUPPRESSED_DIAGS[] = "ClangTools.SuppressedDiagnostics";
|
static const char SETTINGS_KEY_SUPPRESSED_DIAGS[] = "ClangTools.SuppressedDiagnostics";
|
||||||
@@ -86,6 +87,7 @@ void ClangToolsProjectSettings::load()
|
|||||||
m_useGlobalSettings = useGlobalVariant.isValid() ? useGlobalVariant.toBool() : true;
|
m_useGlobalSettings = useGlobalVariant.isValid() ? useGlobalVariant.toBool() : true;
|
||||||
m_diagnosticConfig = Core::Id::fromSetting(
|
m_diagnosticConfig = Core::Id::fromSetting(
|
||||||
m_project->namedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG));
|
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); };
|
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_USE_GLOBAL_SETTINGS, m_useGlobalSettings);
|
||||||
m_project->setNamedSettings(SETTINGS_KEY_DIAGNOSTIC_CONFIG, m_diagnosticConfig.toSetting());
|
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);
|
const QStringList dirs = Utils::transform(m_selectedDirs.toList(), &Utils::FileName::toString);
|
||||||
m_project->setNamedSettings(SETTINGS_KEY_SELECTED_DIRS, dirs);
|
m_project->setNamedSettings(SETTINGS_KEY_SELECTED_DIRS, dirs);
|
||||||
@@ -164,6 +167,16 @@ void ClangToolsProjectSettings::setDiagnosticConfig(const Core::Id &diagnosticCo
|
|||||||
m_diagnosticConfig = diagnosticConfig;
|
m_diagnosticConfig = diagnosticConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ClangToolsProjectSettings::buildBeforeAnalysis() const
|
||||||
|
{
|
||||||
|
return m_buildBeforeAnalysis;
|
||||||
|
}
|
||||||
|
|
||||||
|
void ClangToolsProjectSettings::setBuildBeforeAnalysis(bool build)
|
||||||
|
{
|
||||||
|
m_buildBeforeAnalysis = build;
|
||||||
|
}
|
||||||
|
|
||||||
ClangToolsProjectSettingsManager::ClangToolsProjectSettingsManager()
|
ClangToolsProjectSettingsManager::ClangToolsProjectSettingsManager()
|
||||||
{
|
{
|
||||||
QObject::connect(ProjectExplorer::SessionManager::instance(),
|
QObject::connect(ProjectExplorer::SessionManager::instance(),
|
||||||
|
|||||||
@@ -81,6 +81,9 @@ public:
|
|||||||
Core::Id diagnosticConfig() const;
|
Core::Id diagnosticConfig() const;
|
||||||
void setDiagnosticConfig(const Core::Id &diagnosticConfig);
|
void setDiagnosticConfig(const Core::Id &diagnosticConfig);
|
||||||
|
|
||||||
|
bool buildBeforeAnalysis() const;
|
||||||
|
void setBuildBeforeAnalysis(bool build);
|
||||||
|
|
||||||
QSet<Utils::FileName> selectedDirs() const { return m_selectedDirs; }
|
QSet<Utils::FileName> selectedDirs() const { return m_selectedDirs; }
|
||||||
void setSelectedDirs(const QSet<Utils::FileName> &value) { m_selectedDirs = value; }
|
void setSelectedDirs(const QSet<Utils::FileName> &value) { m_selectedDirs = value; }
|
||||||
|
|
||||||
@@ -105,6 +108,7 @@ private:
|
|||||||
QSet<Utils::FileName> m_selectedDirs;
|
QSet<Utils::FileName> m_selectedDirs;
|
||||||
QSet<Utils::FileName> m_selectedFiles;
|
QSet<Utils::FileName> m_selectedFiles;
|
||||||
SuppressedDiagnosticsList m_suppressedDiagnostics;
|
SuppressedDiagnosticsList m_suppressedDiagnostics;
|
||||||
|
bool m_buildBeforeAnalysis = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
class ClangToolsProjectSettingsManager
|
class ClangToolsProjectSettingsManager
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ bool ClangToolsSettings::savedBuildBeforeAnalysis() const
|
|||||||
return m_savedBuildBeforeAnalysis;
|
return m_savedBuildBeforeAnalysis;
|
||||||
}
|
}
|
||||||
|
|
||||||
int ClangToolsSettings::buildBeforeAnalysis() const
|
bool ClangToolsSettings::buildBeforeAnalysis() const
|
||||||
{
|
{
|
||||||
return m_buildBeforeAnalysis;
|
return m_buildBeforeAnalysis;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public:
|
|||||||
int simultaneousProcesses() const;
|
int simultaneousProcesses() const;
|
||||||
void setSimultaneousProcesses(int processes);
|
void setSimultaneousProcesses(int processes);
|
||||||
|
|
||||||
int buildBeforeAnalysis() const;
|
bool buildBeforeAnalysis() const;
|
||||||
void setBuildBeforeAnalysis(bool build);
|
void setBuildBeforeAnalysis(bool build);
|
||||||
|
|
||||||
Core::Id diagnosticConfigId() const;
|
Core::Id diagnosticConfigId() const;
|
||||||
|
|||||||
@@ -190,6 +190,9 @@
|
|||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>360</number>
|
<number>360</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="4" column="0" colspan="2">
|
<item row="4" column="0" colspan="2">
|
||||||
|
|||||||
@@ -403,6 +403,7 @@ void MenuActionContainer::insertAction(QAction *before, QAction *action)
|
|||||||
|
|
||||||
void MenuActionContainer::insertMenu(QAction *before, QMenu *menu)
|
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);
|
m_menu->insertMenu(before, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -509,6 +510,7 @@ void MenuBarActionContainer::insertAction(QAction *before, QAction *action)
|
|||||||
|
|
||||||
void MenuBarActionContainer::insertMenu(QAction *before, QMenu *menu)
|
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);
|
m_menuBar->insertMenu(before, menu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -85,11 +85,11 @@ public:
|
|||||||
: QAbstractTableModel(parent) {}
|
: QAbstractTableModel(parent) {}
|
||||||
virtual ~MimeTypeSettingsModel() {}
|
virtual ~MimeTypeSettingsModel() {}
|
||||||
|
|
||||||
virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
virtual int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
virtual QVariant headerData(int section, Qt::Orientation orientation,
|
QVariant headerData(int section, Qt::Orientation orientation,
|
||||||
int role = Qt::DisplayRole) const override;
|
int role = Qt::DisplayRole) const override;
|
||||||
virtual QVariant data(const QModelIndex &modelIndex, int role = Qt::DisplayRole) const override;
|
QVariant data(const QModelIndex &modelIndex, int role = Qt::DisplayRole) const override;
|
||||||
|
|
||||||
void load();
|
void load();
|
||||||
|
|
||||||
|
|||||||
@@ -10,6 +10,7 @@ QtcPlugin {
|
|||||||
Depends { name: "TextEditor" }
|
Depends { name: "TextEditor" }
|
||||||
|
|
||||||
cpp.includePaths: base.concat([project.sharedSourcesDir + "/cpaster"])
|
cpp.includePaths: base.concat([project.sharedSourcesDir + "/cpaster"])
|
||||||
|
cpp.defines: ["CPASTER_PLUGIN_GUI"]
|
||||||
|
|
||||||
files: [
|
files: [
|
||||||
"columnindicatortextedit.cpp",
|
"columnindicatortextedit.cpp",
|
||||||
|
|||||||
@@ -302,6 +302,7 @@ void KdePasteProtocol::paste(const QString &text, Protocol::ContentType ct, int
|
|||||||
const QString user;
|
const QString user;
|
||||||
const QString passwd;
|
const QString passwd;
|
||||||
qDebug() << "KDE needs credentials for pasting";
|
qDebug() << "KDE needs credentials for pasting";
|
||||||
|
emit pasteDone(QString());
|
||||||
return;
|
return;
|
||||||
#endif
|
#endif
|
||||||
// store input data as members to be able to use them after the authentication succeeded
|
// store input data as members to be able to use them after the authentication succeeded
|
||||||
|
|||||||
@@ -24,6 +24,9 @@
|
|||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
|
|
||||||
#include "protocol.h"
|
#include "protocol.h"
|
||||||
|
#ifdef CPASTER_PLUGIN_GUI
|
||||||
|
#include "authenticationdialog.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
#include <utils/networkaccessmanager.h>
|
#include <utils/networkaccessmanager.h>
|
||||||
|
|
||||||
@@ -47,6 +50,7 @@
|
|||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QApplication>
|
#include <QApplication>
|
||||||
#include <QPushButton>
|
#include <QPushButton>
|
||||||
|
#include <QAuthenticator>
|
||||||
|
|
||||||
namespace CodePaster {
|
namespace CodePaster {
|
||||||
|
|
||||||
@@ -205,10 +209,37 @@ QNetworkReply *NetworkProtocol::httpPost(const QString &link, const QByteArray &
|
|||||||
return Utils::NetworkAccessManager::instance()->post(r, data);
|
return Utils::NetworkAccessManager::instance()->post(r, data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
NetworkProtocol::NetworkProtocol()
|
||||||
|
: Protocol()
|
||||||
|
{
|
||||||
|
connect(Utils::NetworkAccessManager::instance(), &QNetworkAccessManager::authenticationRequired,
|
||||||
|
this, &NetworkProtocol::authenticationRequired);
|
||||||
|
}
|
||||||
|
|
||||||
NetworkProtocol::~NetworkProtocol()
|
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.<br/>"
|
||||||
|
"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)
|
bool NetworkProtocol::httpStatus(QString url, QString *errorMessage, bool useHttps)
|
||||||
{
|
{
|
||||||
// Connect to host and display a message box, using its event loop.
|
// Connect to host and display a message box, using its event loop.
|
||||||
|
|||||||
@@ -30,6 +30,7 @@
|
|||||||
#include <QSharedPointer>
|
#include <QSharedPointer>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
class QAuthenticator;
|
||||||
class QNetworkReply;
|
class QNetworkReply;
|
||||||
class QWidget;
|
class QWidget;
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
@@ -107,9 +108,16 @@ class NetworkProtocol : public Protocol
|
|||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
NetworkProtocol();
|
||||||
|
|
||||||
~NetworkProtocol() override;
|
~NetworkProtocol() override;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
void requestAuthentication(const QUrl &url, QNetworkReply *reply, QAuthenticator *authenticator);
|
||||||
|
|
||||||
QNetworkReply *httpGet(const QString &url, bool handleCookies = false);
|
QNetworkReply *httpGet(const QString &url, bool handleCookies = false);
|
||||||
|
|
||||||
QNetworkReply *httpPost(const QString &link, const QByteArray &data,
|
QNetworkReply *httpPost(const QString &link, const QByteArray &data,
|
||||||
|
|||||||
@@ -99,7 +99,6 @@ public:
|
|||||||
setAutoCompleterCreator([]() { return new CppAutoCompleter; });
|
setAutoCompleterCreator([]() { return new CppAutoCompleter; });
|
||||||
setCommentDefinition(CommentDefinition::CppStyle);
|
setCommentDefinition(CommentDefinition::CppStyle);
|
||||||
setCodeFoldingSupported(true);
|
setCodeFoldingSupported(true);
|
||||||
setMarksVisible(true);
|
|
||||||
setParenthesesMatchingEnabled(true);
|
setParenthesesMatchingEnabled(true);
|
||||||
|
|
||||||
setEditorActionHandlers(TextEditorActionHandler::Format
|
setEditorActionHandlers(TextEditorActionHandler::Format
|
||||||
|
|||||||
@@ -106,11 +106,6 @@ void ClangDiagnosticConfigsSelectionWidget::refresh(Core::Id id)
|
|||||||
connectToCurrentIndexChanged();
|
connectToCurrentIndexChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ClangDiagnosticConfigsSelectionWidget::showLabel(bool show)
|
|
||||||
{
|
|
||||||
m_label->setVisible(show);
|
|
||||||
}
|
|
||||||
|
|
||||||
void ClangDiagnosticConfigsSelectionWidget::connectToClangDiagnosticConfigsDialog(QPushButton *button)
|
void ClangDiagnosticConfigsSelectionWidget::connectToClangDiagnosticConfigsDialog(QPushButton *button)
|
||||||
{
|
{
|
||||||
connect(button, &QPushButton::clicked, [this]() {
|
connect(button, &QPushButton::clicked, [this]() {
|
||||||
|
|||||||
@@ -50,8 +50,6 @@ public:
|
|||||||
|
|
||||||
void refresh(Core::Id id);
|
void refresh(Core::Id id);
|
||||||
|
|
||||||
void showLabel(bool show);
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void currentConfigChanged(const Core::Id ¤tConfigId);
|
void currentConfigChanged(const Core::Id ¤tConfigId);
|
||||||
|
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ public:
|
|||||||
int endLine = 0;
|
int endLine = 0;
|
||||||
int endColumn = 0;
|
int endColumn = 0;
|
||||||
QString fileName;
|
QString fileName;
|
||||||
bool isPureDeclarationForUsage = false;
|
bool isResultOnlyForFallBack = false;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace CppTools
|
} // namespace CppTools
|
||||||
|
|||||||
@@ -97,6 +97,9 @@
|
|||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>360</number>
|
<number>360</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
</layout>
|
</layout>
|
||||||
|
|||||||
@@ -254,6 +254,11 @@ void Console::setScriptEvaluator(const ScriptEvaluator &evaluator)
|
|||||||
setContext(QString());
|
setContext(QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Console::populateFileFinder()
|
||||||
|
{
|
||||||
|
m_consoleView->populateFileFinder();
|
||||||
|
}
|
||||||
|
|
||||||
void Console::printItem(ConsoleItem::ItemType itemType, const QString &text)
|
void Console::printItem(ConsoleItem::ItemType itemType, const QString &text)
|
||||||
{
|
{
|
||||||
printItem(new ConsoleItem(itemType, text));
|
printItem(new ConsoleItem(itemType, text));
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ public:
|
|||||||
void setContext(const QString &context);
|
void setContext(const QString &context);
|
||||||
|
|
||||||
void setScriptEvaluator(const ScriptEvaluator &evaluator);
|
void setScriptEvaluator(const ScriptEvaluator &evaluator);
|
||||||
|
void populateFileFinder();
|
||||||
|
|
||||||
void evaluate(const QString &expression);
|
void evaluate(const QString &expression);
|
||||||
void printItem(ConsoleItem *item);
|
void printItem(ConsoleItem *item);
|
||||||
|
|||||||
@@ -29,6 +29,7 @@
|
|||||||
|
|
||||||
#include <coreplugin/editormanager/editormanager.h>
|
#include <coreplugin/editormanager/editormanager.h>
|
||||||
#include <coreplugin/manhattanstyle.h>
|
#include <coreplugin/manhattanstyle.h>
|
||||||
|
#include <qtsupport/baseqtversion.h>
|
||||||
#include <utils/hostosinfo.h>
|
#include <utils/hostosinfo.h>
|
||||||
|
|
||||||
#include <QAction>
|
#include <QAction>
|
||||||
@@ -107,13 +108,6 @@ ConsoleView::ConsoleView(ConsoleItemModel *model, QWidget *parent) :
|
|||||||
// Sometimes we get the standard windows 95 style as a fallback
|
// Sometimes we get the standard windows 95 style as a fallback
|
||||||
if (QStyleFactory::keys().contains(QLatin1String("Fusion"))) {
|
if (QStyleFactory::keys().contains(QLatin1String("Fusion"))) {
|
||||||
baseName = QLatin1String("fusion"); // Qt5
|
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);
|
ConsoleViewStyle *style = new ConsoleViewStyle(baseName);
|
||||||
@@ -135,6 +129,11 @@ void ConsoleView::onScrollToBottom()
|
|||||||
scrollToBottom();
|
scrollToBottom();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ConsoleView::populateFileFinder()
|
||||||
|
{
|
||||||
|
QtSupport::BaseQtVersion::populateQmlFileFinder(&m_finder, nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
void ConsoleView::mousePressEvent(QMouseEvent *event)
|
void ConsoleView::mousePressEvent(QMouseEvent *event)
|
||||||
{
|
{
|
||||||
QPoint pos = event->pos();
|
QPoint pos = event->pos();
|
||||||
@@ -219,17 +218,10 @@ void ConsoleView::onRowActivated(const QModelIndex &index)
|
|||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
return;
|
return;
|
||||||
|
|
||||||
// See if we have file and line Info
|
const QFileInfo fi(m_finder.findFile(model()->data(index, ConsoleItem::FileRole).toString()));
|
||||||
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()) {
|
if (fi.exists() && fi.isFile() && fi.isReadable()) {
|
||||||
int line = model()->data(index, ConsoleItem::LineRole).toInt();
|
Core::EditorManager::openEditorAt(fi.canonicalFilePath(),
|
||||||
Core::EditorManager::openEditorAt(fi.canonicalFilePath(), line);
|
model()->data(index, ConsoleItem::LineRole).toInt());
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -257,17 +249,9 @@ bool ConsoleView::canShowItemInTextEditor(const QModelIndex &index)
|
|||||||
if (!index.isValid())
|
if (!index.isValid())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
// See if we have file and line Info
|
bool success = false;
|
||||||
QString filePath = model()->data(index, ConsoleItem::FileRole).toString();
|
m_finder.findFile(model()->data(index, ConsoleItem::FileRole).toString(), &success);
|
||||||
const QUrl fileUrl = QUrl(filePath);
|
return success;
|
||||||
if (fileUrl.isLocalFile())
|
|
||||||
filePath = fileUrl.toLocalFile();
|
|
||||||
if (!filePath.isEmpty()) {
|
|
||||||
QFileInfo fi(filePath);
|
|
||||||
if (fi.exists() && fi.isFile() && fi.isReadable())
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
return false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
|||||||
@@ -25,6 +25,7 @@
|
|||||||
|
|
||||||
#pragma once
|
#pragma once
|
||||||
|
|
||||||
|
#include <utils/fileinprojectfinder.h>
|
||||||
#include <utils/itemviews.h>
|
#include <utils/itemviews.h>
|
||||||
|
|
||||||
namespace Debugger {
|
namespace Debugger {
|
||||||
@@ -40,6 +41,7 @@ public:
|
|||||||
ConsoleView(ConsoleItemModel *model, QWidget *parent);
|
ConsoleView(ConsoleItemModel *model, QWidget *parent);
|
||||||
|
|
||||||
void onScrollToBottom();
|
void onScrollToBottom();
|
||||||
|
void populateFileFinder();
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void mousePressEvent(QMouseEvent *event);
|
void mousePressEvent(QMouseEvent *event);
|
||||||
@@ -55,6 +57,7 @@ private:
|
|||||||
bool canShowItemInTextEditor(const QModelIndex &index);
|
bool canShowItemInTextEditor(const QModelIndex &index);
|
||||||
|
|
||||||
ConsoleItemModel *m_model;
|
ConsoleItemModel *m_model;
|
||||||
|
Utils::FileInProjectFinder m_finder;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // Internal
|
} // Internal
|
||||||
|
|||||||
@@ -265,6 +265,7 @@ QmlEngine::QmlEngine()
|
|||||||
connect(&d->applicationLauncher, &ApplicationLauncher::processStarted,
|
connect(&d->applicationLauncher, &ApplicationLauncher::processStarted,
|
||||||
this, &QmlEngine::handleLauncherStarted);
|
this, &QmlEngine::handleLauncherStarted);
|
||||||
|
|
||||||
|
debuggerConsole()->populateFileFinder();
|
||||||
debuggerConsole()->setScriptEvaluator([this](const QString &expr) {
|
debuggerConsole()->setScriptEvaluator([this](const QString &expr) {
|
||||||
executeDebuggerCommand(expr, QmlLanguage);
|
executeDebuggerCommand(expr, QmlLanguage);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -416,9 +416,9 @@ public:
|
|||||||
QString removeNamespaces(QString str) const;
|
QString removeNamespaces(QString str) const;
|
||||||
|
|
||||||
bool contextMenuEvent(const ItemViewEvent &ev);
|
bool contextMenuEvent(const ItemViewEvent &ev);
|
||||||
QMenu *createFormatMenu(WatchItem *item);
|
QMenu *createFormatMenu(WatchItem *item, QWidget *parent);
|
||||||
QMenu *createMemoryMenu(WatchItem *item);
|
QMenu *createMemoryMenu(WatchItem *item, QWidget *parent);
|
||||||
QMenu *createBreakpointMenu(WatchItem *item);
|
QMenu *createBreakpointMenu(WatchItem *item, QWidget *parent);
|
||||||
|
|
||||||
void addStackLayoutMemoryView(bool separateView, const QPoint &p);
|
void addStackLayoutMemoryView(bool separateView, const QPoint &p);
|
||||||
|
|
||||||
@@ -1657,9 +1657,9 @@ bool WatchModel::contextMenuEvent(const ItemViewEvent &ev)
|
|||||||
[this] { grabWidget(); });
|
[this] { grabWidget(); });
|
||||||
|
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addMenu(createFormatMenu(item));
|
menu->addMenu(createFormatMenu(item, menu));
|
||||||
menu->addMenu(createMemoryMenu(item));
|
menu->addMenu(createMemoryMenu(item, menu));
|
||||||
menu->addMenu(createBreakpointMenu(item));
|
menu->addMenu(createBreakpointMenu(item, menu));
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
|
|
||||||
addAction(menu, tr("Expand All Children"),
|
addAction(menu, tr("Expand All Children"),
|
||||||
@@ -1712,13 +1712,14 @@ bool WatchModel::contextMenuEvent(const ItemViewEvent &ev)
|
|||||||
|
|
||||||
menu->addSeparator();
|
menu->addSeparator();
|
||||||
menu->addAction(action(SettingsDialog));
|
menu->addAction(action(SettingsDialog));
|
||||||
|
connect(menu, &QMenu::aboutToHide, menu, &QObject::deleteLater);
|
||||||
menu->popup(ev.globalPos());
|
menu->popup(ev.globalPos());
|
||||||
return true;
|
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) {
|
if (!item) {
|
||||||
menu->setEnabled(false);
|
menu->setEnabled(false);
|
||||||
return menu;
|
return menu;
|
||||||
@@ -1760,9 +1761,9 @@ QMenu *WatchModel::createBreakpointMenu(WatchItem *item)
|
|||||||
return menu;
|
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)) {
|
if (!item || !m_engine->hasCapability(ShowMemoryCapability)) {
|
||||||
menu->setEnabled(false);
|
menu->setEnabled(false);
|
||||||
return menu;
|
return menu;
|
||||||
@@ -1813,9 +1814,9 @@ QMenu *WatchModel::createMemoryMenu(WatchItem *item)
|
|||||||
return menu;
|
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) {
|
if (!item) {
|
||||||
menu->setEnabled(false);
|
menu->setEnabled(false);
|
||||||
return menu;
|
return menu;
|
||||||
|
|||||||
@@ -132,6 +132,7 @@ public:
|
|||||||
setEditorWidgetCreator([]() { return new Internal::DesignerXmlEditorWidget; });
|
setEditorWidgetCreator([]() { return new Internal::DesignerXmlEditorWidget; });
|
||||||
setUseGenericHighlighter(true);
|
setUseGenericHighlighter(true);
|
||||||
setDuplicatedSupported(false);
|
setDuplicatedSupported(false);
|
||||||
|
setMarksVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
FormWindowEditor *create(QDesignerFormWindowInterface *form)
|
FormWindowEditor *create(QDesignerFormWindowInterface *form)
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ public:
|
|||||||
DescriptionEditorWidget(QWidget *parent = nullptr);
|
DescriptionEditorWidget(QWidget *parent = nullptr);
|
||||||
~DescriptionEditorWidget() override;
|
~DescriptionEditorWidget() override;
|
||||||
|
|
||||||
virtual QSize sizeHint() const override;
|
QSize sizeHint() const override;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
void setDisplaySettings(const DisplaySettings &ds) override;
|
void setDisplaySettings(const DisplaySettings &ds) override;
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ bool MergeTool::start(const QString &workingDirectory, const QStringList &files)
|
|||||||
m_process = new QProcess(this);
|
m_process = new QProcess(this);
|
||||||
m_process->setWorkingDirectory(workingDirectory);
|
m_process->setWorkingDirectory(workingDirectory);
|
||||||
m_process->setProcessEnvironment(env);
|
m_process->setProcessEnvironment(env);
|
||||||
|
m_process->setReadChannelMode(QProcess::MergedChannels);
|
||||||
const Utils::FileName binary = GitPlugin::client()->vcsBinary();
|
const Utils::FileName binary = GitPlugin::client()->vcsBinary();
|
||||||
VcsOutputWindow::appendCommand(workingDirectory, binary, arguments);
|
VcsOutputWindow::appendCommand(workingDirectory, binary, arguments);
|
||||||
m_process->start(binary.toString(), 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);
|
connect(m_process, &QIODevice::readyRead, this, &MergeTool::readData);
|
||||||
} else {
|
} else {
|
||||||
delete m_process;
|
delete m_process;
|
||||||
m_process = 0;
|
m_process = nullptr;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
|
|||||||
@@ -89,7 +89,7 @@
|
|||||||
<number>10</number>
|
<number>10</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>300</number>
|
<number>360</number>
|
||||||
</property>
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<number>30</number>
|
<number>30</number>
|
||||||
|
|||||||
@@ -325,7 +325,6 @@ GlslEditorFactory::GlslEditorFactory()
|
|||||||
setCommentDefinition(Utils::CommentDefinition::CppStyle);
|
setCommentDefinition(Utils::CommentDefinition::CppStyle);
|
||||||
setCompletionAssistProvider(new GlslCompletionAssistProvider);
|
setCompletionAssistProvider(new GlslCompletionAssistProvider);
|
||||||
setParenthesesMatchingEnabled(true);
|
setParenthesesMatchingEnabled(true);
|
||||||
setMarksVisible(true);
|
|
||||||
setCodeFoldingSupported(true);
|
setCodeFoldingSupported(true);
|
||||||
|
|
||||||
setEditorActionHandlers(TextEditorActionHandler::Format
|
setEditorActionHandlers(TextEditorActionHandler::Format
|
||||||
|
|||||||
@@ -100,6 +100,9 @@
|
|||||||
<property name="suffix">
|
<property name="suffix">
|
||||||
<string>s</string>
|
<string>s</string>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>360</number>
|
||||||
|
</property>
|
||||||
<property name="value">
|
<property name="value">
|
||||||
<number>30</number>
|
<number>30</number>
|
||||||
</property>
|
</property>
|
||||||
|
|||||||
@@ -67,9 +67,7 @@ NimEditorFactory::NimEditorFactory()
|
|||||||
});
|
});
|
||||||
setCommentDefinition(CommentDefinition::HashStyle);
|
setCommentDefinition(CommentDefinition::HashStyle);
|
||||||
setParenthesesMatchingEnabled(true);
|
setParenthesesMatchingEnabled(true);
|
||||||
setMarksVisible(false);
|
|
||||||
setCodeFoldingSupported(true);
|
setCodeFoldingSupported(true);
|
||||||
setMarksVisible(true);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Core::IEditor *NimEditorFactory::createEditor()
|
Core::IEditor *NimEditorFactory::createEditor()
|
||||||
|
|||||||
@@ -106,6 +106,8 @@ NimCompilerBuildStep::NimCompilerBuildStep(BuildStepList *parentList)
|
|||||||
auto bc = qobject_cast<NimBuildConfiguration *>(buildConfiguration());
|
auto bc = qobject_cast<NimBuildConfiguration *>(buildConfiguration());
|
||||||
connect(bc, &NimBuildConfiguration::buildDirectoryChanged,
|
connect(bc, &NimBuildConfiguration::buildDirectoryChanged,
|
||||||
this, &NimCompilerBuildStep::updateProcessParameters);
|
this, &NimCompilerBuildStep::updateProcessParameters);
|
||||||
|
connect(bc, &BuildConfiguration::environmentChanged,
|
||||||
|
this, &NimCompilerBuildStep::updateProcessParameters);
|
||||||
connect(this, &NimCompilerBuildStep::outFilePathChanged,
|
connect(this, &NimCompilerBuildStep::outFilePathChanged,
|
||||||
bc, &NimBuildConfiguration::outFilePathChanged);
|
bc, &NimBuildConfiguration::outFilePathChanged);
|
||||||
connect(bc->target()->project(), &ProjectExplorer::Project::fileListChanged,
|
connect(bc->target()->project(), &ProjectExplorer::Project::fileListChanged,
|
||||||
|
|||||||
@@ -119,6 +119,9 @@
|
|||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>360</number>
|
<number>360</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="4">
|
<item row="0" column="4">
|
||||||
|
|||||||
@@ -489,7 +489,13 @@ void AppOutputPane::appendMessage(RunControl *rc, const QString &out, Utils::Out
|
|||||||
const int index = indexOf(rc);
|
const int index = indexOf(rc);
|
||||||
if (index != -1) {
|
if (index != -1) {
|
||||||
Core::OutputWindow *window = m_runControlTabs.at(index).window;
|
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 (format != Utils::NormalMessageFormat) {
|
||||||
if (m_runControlTabs.at(index).behaviorOnOutput == Flash)
|
if (m_runControlTabs.at(index).behaviorOnOutput == Flash)
|
||||||
flash();
|
flash();
|
||||||
|
|||||||
@@ -421,7 +421,7 @@ void ProjectTreeWidget::editCurrentItem()
|
|||||||
m_view->edit(currentIndex);
|
m_view->edit(currentIndex);
|
||||||
// Select complete file basename for renaming
|
// Select complete file basename for renaming
|
||||||
const Node *node = m_model->nodeForIndex(currentIndex);
|
const Node *node = m_model->nodeForIndex(currentIndex);
|
||||||
if (!node || node->nodeType() != NodeType::File)
|
if (!node)
|
||||||
return;
|
return;
|
||||||
QLineEdit *editor = qobject_cast<QLineEdit*>(m_view->indexWidget(currentIndex));
|
QLineEdit *editor = qobject_cast<QLineEdit*>(m_view->indexWidget(currentIndex));
|
||||||
if (!editor)
|
if (!editor)
|
||||||
|
|||||||
@@ -57,7 +57,6 @@ PythonEditorFactory::PythonEditorFactory()
|
|||||||
setSyntaxHighlighterCreator([] { return new PythonHighlighter; });
|
setSyntaxHighlighterCreator([] { return new PythonHighlighter; });
|
||||||
setCommentDefinition(Utils::CommentDefinition::HashStyle);
|
setCommentDefinition(Utils::CommentDefinition::HashStyle);
|
||||||
setParenthesesMatchingEnabled(true);
|
setParenthesesMatchingEnabled(true);
|
||||||
setMarksVisible(true);
|
|
||||||
setCodeFoldingSupported(true);
|
setCodeFoldingSupported(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -57,7 +57,7 @@ namespace Internal {
|
|||||||
class ProFileEditorWidget : public TextEditorWidget
|
class ProFileEditorWidget : public TextEditorWidget
|
||||||
{
|
{
|
||||||
protected:
|
protected:
|
||||||
virtual void findLinkAt(const QTextCursor &,
|
void findLinkAt(const QTextCursor &,
|
||||||
Utils::ProcessLinkCallback &&processLinkCallback,
|
Utils::ProcessLinkCallback &&processLinkCallback,
|
||||||
bool resolveTarget = true,
|
bool resolveTarget = true,
|
||||||
bool inNextSplit = false) override;
|
bool inNextSplit = false) override;
|
||||||
|
|||||||
@@ -357,9 +357,11 @@ QmakeBuildConfiguration::MakefileState QmakeBuildConfiguration::compareToImportF
|
|||||||
return MakefileForWrongProject;
|
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:"
|
qCDebug(logs) << "**Different profile used to generate the Makefile:"
|
||||||
<< parse.srcProFile() << " expected profile:" << qs->project()->projectFilePath();
|
<< parse.srcProFile() << " expected profile:" << projectPath;
|
||||||
if (errorString)
|
if (errorString)
|
||||||
*errorString = tr("The Makefile is for a different project.");
|
*errorString = tr("The Makefile is for a different project.");
|
||||||
return MakefileIncompatible;
|
return MakefileIncompatible;
|
||||||
|
|||||||
@@ -1059,7 +1059,6 @@ QmlJSEditorFactory::QmlJSEditorFactory()
|
|||||||
setAutoCompleterCreator([]() { return new AutoCompleter; });
|
setAutoCompleterCreator([]() { return new AutoCompleter; });
|
||||||
setCommentDefinition(Utils::CommentDefinition::CppStyle);
|
setCommentDefinition(Utils::CommentDefinition::CppStyle);
|
||||||
setParenthesesMatchingEnabled(true);
|
setParenthesesMatchingEnabled(true);
|
||||||
setMarksVisible(true);
|
|
||||||
setCodeFoldingSupported(true);
|
setCodeFoldingSupported(true);
|
||||||
|
|
||||||
addHoverHandler(new QmlJSHoverHandler);
|
addHoverHandler(new QmlJSHoverHandler);
|
||||||
|
|||||||
@@ -95,7 +95,6 @@ public:
|
|||||||
|
|
||||||
signals:
|
signals:
|
||||||
void gotoSourceLocation(const QString &fileName, int lineNumber, int columnNumber);
|
void gotoSourceLocation(const QString &fileName, int lineNumber, int columnNumber);
|
||||||
void typeSelected(int typeIndex);
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QVariant lookup(const FlameGraphData &data, int role) const;
|
QVariant lookup(const FlameGraphData &data, int role) const;
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ FlameGraphView::FlameGraphView(QmlProfilerModelManager *manager, QWidget *parent
|
|||||||
layout->addWidget(m_content);
|
layout->addWidget(m_content);
|
||||||
setLayout(layout);
|
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,
|
connect(m_model, &FlameGraphModel::gotoSourceLocation,
|
||||||
this, &FlameGraphView::gotoSourceLocation);
|
this, &FlameGraphView::gotoSourceLocation);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -509,13 +509,13 @@ void QmlProfilerEventStorage::clear()
|
|||||||
m_size = 0;
|
m_size = 0;
|
||||||
m_file.clear();
|
m_file.clear();
|
||||||
if (!m_file.open())
|
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()
|
void QmlProfilerEventStorage::finalize()
|
||||||
{
|
{
|
||||||
if (!m_file.flush())
|
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
|
QmlProfilerEventStorage::ErrorHandler QmlProfilerEventStorage::errorHandler() const
|
||||||
@@ -536,13 +536,13 @@ bool QmlProfilerEventStorage::replay(
|
|||||||
case Timeline::TraceStashFile<QmlEvent>::ReplaySuccess:
|
case Timeline::TraceStashFile<QmlEvent>::ReplaySuccess:
|
||||||
return true;
|
return true;
|
||||||
case Timeline::TraceStashFile<QmlEvent>::ReplayOpenFailed:
|
case Timeline::TraceStashFile<QmlEvent>::ReplayOpenFailed:
|
||||||
m_errorHandler(tr("Could not re-open temporary trace file"));
|
m_errorHandler(tr("Could not re-open temporary trace file."));
|
||||||
break;
|
break;
|
||||||
case Timeline::TraceStashFile<QmlEvent>::ReplayLoadFailed:
|
case Timeline::TraceStashFile<QmlEvent>::ReplayLoadFailed:
|
||||||
// Happens if the loader rejects an event. Not an actual error
|
// Happens if the loader rejects an event. Not an actual error
|
||||||
break;
|
break;
|
||||||
case Timeline::TraceStashFile<QmlEvent>::ReplayReadPastEnd:
|
case Timeline::TraceStashFile<QmlEvent>::ReplayReadPastEnd:
|
||||||
m_errorHandler(tr("Read past end in temporary trace file"));
|
m_errorHandler(tr("Read past end in temporary trace file."));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ void QmlProfilerTraceClientTest::testMessageReceived()
|
|||||||
traceClient.clear();
|
traceClient.clear();
|
||||||
}, [this, &lastError](const QString &message) {
|
}, [this, &lastError](const QString &message) {
|
||||||
QVERIFY(!message.isEmpty());
|
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
|
// Ignore read-past-end errors: Our test traces are somewhat dirty and don't end on
|
||||||
// packet boundaries
|
// packet boundaries
|
||||||
modelManager.clearAll();
|
modelManager.clearAll();
|
||||||
|
|||||||
@@ -66,7 +66,7 @@ public:
|
|||||||
signals:
|
signals:
|
||||||
void contextMenuRequested(const QPoint &pos, int index);
|
void contextMenuRequested(const QPoint &pos, int index);
|
||||||
protected:
|
protected:
|
||||||
bool eventFilter(QObject *object, QEvent *event) override final;
|
bool eventFilter(QObject *object, QEvent *event) final;
|
||||||
private:
|
private:
|
||||||
int m_tabIndexForMiddleClick = -1;
|
int m_tabIndexForMiddleClick = -1;
|
||||||
};
|
};
|
||||||
@@ -112,7 +112,7 @@ class ComboBox : public QComboBox
|
|||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
public:
|
public:
|
||||||
void showPopup() override final;
|
void showPopup() final;
|
||||||
signals:
|
signals:
|
||||||
void opened();
|
void opened();
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -113,6 +113,9 @@
|
|||||||
<property name="maximum">
|
<property name="maximum">
|
||||||
<number>360</number>
|
<number>360</number>
|
||||||
</property>
|
</property>
|
||||||
|
<property name="value">
|
||||||
|
<number>30</number>
|
||||||
|
</property>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="4">
|
<item row="0" column="4">
|
||||||
|
|||||||
@@ -8477,7 +8477,6 @@ bool TextEditorWidget::isMissingSyntaxDefinition() const
|
|||||||
// The remnants of PlainTextEditor.
|
// The remnants of PlainTextEditor.
|
||||||
void TextEditorWidget::setupGenericHighlighter()
|
void TextEditorWidget::setupGenericHighlighter()
|
||||||
{
|
{
|
||||||
setMarksVisible(true);
|
|
||||||
setLineSeparatorsAllowed(true);
|
setLineSeparatorsAllowed(true);
|
||||||
|
|
||||||
connect(textDocument(), &IDocument::filePathChanged,
|
connect(textDocument(), &IDocument::filePathChanged,
|
||||||
@@ -8574,7 +8573,7 @@ public:
|
|||||||
bool m_duplicatedSupported = true;
|
bool m_duplicatedSupported = true;
|
||||||
bool m_codeFoldingSupported = false;
|
bool m_codeFoldingSupported = false;
|
||||||
bool m_paranthesesMatchinEnabled = false;
|
bool m_paranthesesMatchinEnabled = false;
|
||||||
bool m_marksVisible = false;
|
bool m_marksVisible = true;
|
||||||
};
|
};
|
||||||
|
|
||||||
} /// namespace Internal
|
} /// namespace Internal
|
||||||
|
|||||||
@@ -445,6 +445,8 @@ private:
|
|||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
class HeobDialog : public QDialog
|
class HeobDialog : public QDialog
|
||||||
{
|
{
|
||||||
|
Q_DECLARE_TR_FUNCTIONS(HeobDialog)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HeobDialog(QWidget *parent);
|
HeobDialog(QWidget *parent);
|
||||||
|
|
||||||
@@ -475,6 +477,8 @@ private:
|
|||||||
|
|
||||||
class HeobData : public QObject
|
class HeobData : public QObject
|
||||||
{
|
{
|
||||||
|
Q_DECLARE_TR_FUNCTIONS(HeobData)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
HeobData(MemcheckTool *mcTool, const QString &xmlPath, Kit *kit, bool attach);
|
HeobData(MemcheckTool *mcTool, const QString &xmlPath, Kit *kit, bool attach);
|
||||||
~HeobData();
|
~HeobData();
|
||||||
|
|||||||
@@ -80,6 +80,7 @@ VcsEditorFactory::VcsEditorFactory(const VcsBaseEditorParameters *parameters,
|
|||||||
});
|
});
|
||||||
|
|
||||||
setEditorCreator([]() { return new VcsBaseEditor(); });
|
setEditorCreator([]() { return new VcsBaseEditor(); });
|
||||||
|
setMarksVisible(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
VcsBaseEditor *VcsEditorFactory::createEditorById(const char *id)
|
VcsBaseEditor *VcsEditorFactory::createEditorById(const char *id)
|
||||||
|
|||||||
Submodule src/shared/qbs updated: c18c082406...d994e54712
@@ -37,7 +37,7 @@ enum class PreferredTranslationUnit
|
|||||||
};
|
};
|
||||||
|
|
||||||
// CLANG-UPGRADE-CHECK: Remove IS_PRETTY_DECL_SUPPORTED once we require clang >= 7.0
|
// 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
|
# define IS_PRETTY_DECL_SUPPORTED
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
@@ -46,4 +46,9 @@ enum class PreferredTranslationUnit
|
|||||||
# define IS_INVALIDDECL_SUPPORTED
|
# define IS_INVALIDDECL_SUPPORTED
|
||||||
#endif
|
#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
|
} // namespace ClangBackEnd
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user