forked from qt-creator/qt-creator
Utils: Add a JsonTreeItem
JsonTreeItem is used to visualize json values in tree views. It will automatically generate new child items if the value contains an object or array. Change-Id: I316ea9f626050c21c05cbfc0628d0a5e20ad5a49 Reviewed-by: Christian Stenger <christian.stenger@qt.io>
This commit is contained in:
99
src/libs/utils/jsontreeitem.cpp
Normal file
99
src/libs/utils/jsontreeitem.cpp
Normal file
@@ -0,0 +1,99 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 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 "jsontreeitem.h"
|
||||
|
||||
#include <QJsonArray>
|
||||
#include <QJsonObject>
|
||||
|
||||
Utils::JsonTreeItem::JsonTreeItem(const QString &displayName, const QJsonValue &value)
|
||||
: m_name(displayName)
|
||||
, m_value(value)
|
||||
{ }
|
||||
|
||||
static QString typeName(QJsonValue::Type type)
|
||||
{
|
||||
switch (type) {
|
||||
case QJsonValue::Null:
|
||||
return Utils::JsonTreeItem::tr("Null");
|
||||
case QJsonValue::Bool:
|
||||
return Utils::JsonTreeItem::tr("Bool");
|
||||
case QJsonValue::Double:
|
||||
return Utils::JsonTreeItem::tr("Double");
|
||||
case QJsonValue::String:
|
||||
return Utils::JsonTreeItem::tr("String");
|
||||
case QJsonValue::Array:
|
||||
return Utils::JsonTreeItem::tr("Array");
|
||||
case QJsonValue::Object:
|
||||
return Utils::JsonTreeItem::tr("Object");
|
||||
case QJsonValue::Undefined:
|
||||
return Utils::JsonTreeItem::tr("Undefined");
|
||||
}
|
||||
return {};
|
||||
}
|
||||
|
||||
QVariant Utils::JsonTreeItem::data(int column, int role) const
|
||||
{
|
||||
if (role != Qt::DisplayRole)
|
||||
return {};
|
||||
if (column == 0)
|
||||
return m_name;
|
||||
if (column == 2)
|
||||
return typeName(m_value.type());
|
||||
if (m_value.isObject())
|
||||
return QString('[' + QString::number(m_value.toObject().size()) + ' ' + tr("Items") + ']');
|
||||
if (m_value.isArray())
|
||||
return QString('[' + QString::number(m_value.toArray().size()) + ' ' + tr("Items") + ']');
|
||||
return m_value.toVariant();
|
||||
}
|
||||
|
||||
bool Utils::JsonTreeItem::canFetchMore() const
|
||||
{
|
||||
return canFetchObjectChildren() || canFetchArrayChildren();
|
||||
}
|
||||
|
||||
void Utils::JsonTreeItem::fetchMore()
|
||||
{
|
||||
if (canFetchObjectChildren()) {
|
||||
const QJsonObject &object = m_value.toObject();
|
||||
for (const QString &key : object.keys())
|
||||
appendChild(new JsonTreeItem(key, object.value(key)));
|
||||
} else if (canFetchArrayChildren()) {
|
||||
int index = 0;
|
||||
const QJsonArray &array = m_value.toArray();
|
||||
for (const QJsonValue &val : array)
|
||||
appendChild(new JsonTreeItem(QString::number(index++), val));
|
||||
}
|
||||
}
|
||||
|
||||
bool Utils::JsonTreeItem::canFetchObjectChildren() const
|
||||
{
|
||||
return m_value.isObject() && m_value.toObject().size() > childCount();
|
||||
}
|
||||
|
||||
bool Utils::JsonTreeItem::canFetchArrayChildren() const
|
||||
{
|
||||
return m_value.isArray() && m_value.toArray().size() > childCount();
|
||||
}
|
56
src/libs/utils/jsontreeitem.h
Normal file
56
src/libs/utils/jsontreeitem.h
Normal file
@@ -0,0 +1,56 @@
|
||||
/****************************************************************************
|
||||
**
|
||||
** Copyright (C) 2019 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 "treemodel.h"
|
||||
|
||||
#include "utils_global.h"
|
||||
|
||||
#include <QJsonValue>
|
||||
#include <QCoreApplication>
|
||||
|
||||
namespace Utils {
|
||||
|
||||
class QTCREATOR_UTILS_EXPORT JsonTreeItem : public TypedTreeItem<JsonTreeItem>
|
||||
{
|
||||
Q_DECLARE_TR_FUNCTIONS(JsonTreeModelItem)
|
||||
public:
|
||||
JsonTreeItem() = default;
|
||||
JsonTreeItem(const QString &displayName, const QJsonValue &value);
|
||||
|
||||
QVariant data(int column, int role) const override;
|
||||
bool canFetchMore() const override;
|
||||
void fetchMore() override;
|
||||
|
||||
private:
|
||||
bool canFetchObjectChildren() const;
|
||||
bool canFetchArrayChildren() const;
|
||||
|
||||
QString m_name;
|
||||
QJsonValue m_value;
|
||||
};
|
||||
|
||||
} // namespace Utils
|
@@ -123,7 +123,9 @@ SOURCES += \
|
||||
$$PWD/filecrumblabel.cpp \
|
||||
$$PWD/fixedsizeclicklabel.cpp \
|
||||
$$PWD/removefiledialog.cpp \
|
||||
$$PWD/differ.cpp
|
||||
$$PWD/differ.cpp \
|
||||
$$PWD/jsontreeitem.cpp
|
||||
|
||||
|
||||
win32:SOURCES += $$PWD/consoleprocess_win.cpp
|
||||
else:SOURCES += $$PWD/consoleprocess_unix.cpp
|
||||
@@ -263,7 +265,8 @@ HEADERS += \
|
||||
$$PWD/fixedsizeclicklabel.h \
|
||||
$$PWD/removefiledialog.h \
|
||||
$$PWD/differ.h \
|
||||
$$PWD/cpplanguage_details.h
|
||||
$$PWD/cpplanguage_details.h \
|
||||
$$PWD/jsontreeitem.h
|
||||
|
||||
FORMS += $$PWD/filewizardpage.ui \
|
||||
$$PWD/newclasswidget.ui \
|
||||
|
@@ -142,6 +142,8 @@ Project {
|
||||
"itemviews.h",
|
||||
"json.cpp",
|
||||
"json.h",
|
||||
"jsontreeitem.cpp",
|
||||
"jsontreeitem.h",
|
||||
"linecolumn.h",
|
||||
"link.h",
|
||||
"listutils.h",
|
||||
|
Reference in New Issue
Block a user