1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "jsontabwidget.h"
6#include "jsondisplayview.h"
7
8#include <QHeaderView>
9#include <QTableWidget>
10#include <QStandardItemModel>
11#include <QDebug>
12
13class JsonTabWidgetPrivate
14{
15 friend class JsonTabWidget;
16 int findTab(QTabWidget *const tabWidget, const std::string tabText) const
17 {
18 for(int index = 0; index < tabWidget->count(); index ++){
19 if (tabWidget->tabText(index).toStdString() == tabText)
20 return index;
21 }
22 return -1;
23 }
24};
25
26JsonTabWidget::JsonTabWidget(QWidget *parent)
27 : QTabWidget (parent)
28 , d (new JsonTabWidgetPrivate)
29{
30 setTabPosition(QTabWidget::TabPosition::South);
31 qRegisterMetaType<Json::Value>("Json::Value");
32 qRegisterMetaType<Json::Value>("Json::Value&");
33}
34
35JsonTabWidget::~JsonTabWidget()
36{
37 if (d)
38 delete d;
39}
40
41void JsonTabWidget::parseJson(const Json::Value &data)
42{
43 if (!data.empty()) {
44 Json::Value result = data["result"];
45 if (!result.empty()) {
46 for (auto name : result.getMemberNames()) {
47 if (name.empty())
48 continue;
49 int tabIdx = d->findTab(this, name);
50 if (0 > tabIdx) {
51 tabIdx = addTab(new JsonDisplayView(this), QString::fromStdString(name));
52 }
53 JsonDisplayView *curr = qobject_cast<JsonDisplayView*>(widget(tabIdx));
54 if (curr) {
55 curr->parseJson(result[name]);
56 }
57 }
58 }
59 }
60}
61