1// SPDX-FileCopyrightText: 2023 UnionTech Software Technology Co., Ltd.
2//
3// SPDX-License-Identifier: GPL-3.0-or-later
4
5#include "reportpane.h"
6#include "codeporting.h"
7
8#include <QTableWidget>
9#include <QHeaderView>
10#include <QDebug>
11#include <QHBoxLayout>
12
13ReportPane::ReportPane(CodePorting *_codePorting, QWidget *parent) : QWidget(parent)
14 , srcTableWidget(new QTableWidget(this))
15 , libTableWidget(new QTableWidget(this))
16 , codePorting(_codePorting)
17{
18 initTableWidget();
19}
20
21void ReportPane::refreshDispaly()
22{
23 auto &&srcReport = codePorting->getSourceReport();
24 auto &&libReport = codePorting->getDependLibReport();
25 refreshTableView(srcTableWidget, srcReport);
26 refreshTableView(libTableWidget, libReport);
27}
28
29void ReportPane::srcCellSelected(int row, int col)
30{
31 qDebug() << "srcCellSelected: " << row << col;
32
33 auto &&report = codePorting->getSourceReport();
34 if (report.size()) {
35 auto items = report[row];
36 if (items.size() == CodePorting::kItemsCount) {
37 QString range = items[CodePorting::kCodeRange];
38 QRegularExpression reg("(?<=\\()(\\d)*, (\\d)*(?=\\))");
39 auto match = reg.match(range);
40 int startLine = 0;
41 int endLine = 0;
42 if (match.hasMatch()) {
43 QStringList lines = match.captured().split(",");
44 if (lines.size() == 2) {
45 startLine = lines.front().toInt();
46 endLine = lines.back().toInt();
47 }
48 }
49 emit selectedChanged(items[CodePorting::kFilePath], items[CodePorting::kSuggestion], startLine, endLine);
50 }
51 }
52}
53
54void ReportPane::libCellSelected(int row, int col)
55{
56 qDebug() << "libCellSelected: " << row << col;
57 // TODO(mozart)
58}
59
60void ReportPane::initTableWidget()
61{
62 setTableWidgetStyle(srcTableWidget, codePorting->getSrcItemNames());
63 setTableWidgetStyle(libTableWidget, codePorting->getLibItemNames());
64
65 connect(srcTableWidget, &QTableWidget::cellDoubleClicked, this, &ReportPane::srcCellSelected);
66 connect(libTableWidget, &QTableWidget::cellDoubleClicked, this, &ReportPane::libCellSelected);
67
68 QTabWidget *tabWidget = new QTabWidget(this);
69 tabWidget->addTab(srcTableWidget, tr("Source files to migrate"));
70
71 tabWidget->addTab(libTableWidget, tr("Architecture-dependent library files"));
72 tabWidget->setTabPosition(QTabWidget::South);
73
74 auto hLayout = new QHBoxLayout(this);
75 hLayout->setContentsMargins(0, 0, 0, 9);
76 this->setLayout(hLayout);
77 hLayout->addWidget(tabWidget);
78}
79
80void ReportPane::refreshTableView(QTableWidget *widget, const QList<QStringList> &report)
81{
82 if (widget && report.size() > 0) {
83 widget->clearContents();
84
85 int itemsCount = report.size();
86 widget->setRowCount(itemsCount);
87
88 int row = 0;
89 int col = 0;
90 for (auto itItem = report.begin(); itItem != report.end(); ++itItem) {
91 for (auto data : *itItem) {
92 widget->setItem(row, col, new QTableWidgetItem(data));
93 col++;
94 }
95 row++;
96 col = 0;
97 }
98 widget->resizeColumnsToContents();
99 }
100}
101
102void ReportPane::setTableWidgetStyle(QTableWidget *tableWidget, const QStringList &colNames)
103{
104 tableWidget->setColumnCount(colNames.count());
105 tableWidget->setHorizontalHeaderLabels(colNames);
106 tableWidget->verticalHeader()->setVisible(true);
107 tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
108 tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
109 tableWidget->setSelectionMode(QAbstractItemView::SingleSelection);
110 tableWidget->setShowGrid(true);
111}
112