1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-04-28 22:47:45 +00:00
novus/parts/exd/exdpart.cpp
Joshua Goins 97f46bcca1 Introduce the parts system and EXD and MDL parts
These parts (inspired by the KDE parts system) will allow the tooling
to reuse GUI mechanisms. Right now the two supported parts are for Excel
and Models, and exdviewer and mdlviewer will be retrofitted to them in
future commits.
2023-04-09 15:28:00 -04:00

97 lines
No EOL
3.7 KiB
C++

#include "exdpart.h"
#include <physis.hpp>
#include <QTableWidget>
#include <QDebug>
#include <QVBoxLayout>
EXDPart::EXDPart(GameData* data) : data(data) {
pageTabWidget = new QTabWidget();
auto layout = new QVBoxLayout();
layout->addWidget(pageTabWidget);
setLayout(layout);
}
void EXDPart::loadSheet(const QString& name) {
qDebug() << "Loading" << name;
pageTabWidget->clear();
auto exh = physis_gamedata_read_excel_sheet_header(data, name.toStdString().c_str());
for(int i = 0; i < exh.page_count; i++) {
QTableWidget* tableWidget = new QTableWidget();
tableWidget->setColumnCount(exh.column_count);
auto exd = physis_gamedata_read_excel_sheet(data, name.toStdString().c_str(), &exh, exh.languages[0], i);
tableWidget->setRowCount(exd.row_count);
for (int j = 0; j < exd.row_count; j++) {
for(int z = 0; z < exd.column_count; z++) {
auto data = exd.row_data[j].column_data[z];
QString columnString;
QString columnType;
switch (data.tag) {
case physis_ColumnData::Tag::String:
columnString = QString(data.string._0);
columnType = "String";
break;
case physis_ColumnData::Tag::Bool:
columnString = data.bool_._0 ? "True" : "False";
columnType = "Bool";
break;
case physis_ColumnData::Tag::Int8:
columnString = QString::number(data.int8._0);
columnType = "Int8";
break;
case physis_ColumnData::Tag::UInt8:
columnString = QString::number(data.u_int8._0);
columnType = "UInt8";
break;
case physis_ColumnData::Tag::Int16:
columnString = QString::number(data.int16._0);
columnType = "Int16";
break;
case physis_ColumnData::Tag::UInt16:
columnString = QString::number(data.u_int16._0);
columnType = "UInt16";
break;
case physis_ColumnData::Tag::Int32:
columnString = QString::number(data.int32._0);
columnType = "Int32";
break;
case physis_ColumnData::Tag::UInt32:
columnString = QString::number(data.u_int32._0);
columnType = "UInt32";
break;
case physis_ColumnData::Tag::Float32:
columnString = QString::number(data.float32._0);
columnType = "Float32";
break;
case physis_ColumnData::Tag::Int64:
columnString = QString::number(data.int64._0);
columnType = "Int64";
break;
case physis_ColumnData::Tag::UInt64:
columnString = QString::number(data.u_int64._0);
columnType = "UInt64";
break;
}
auto newItem = new QTableWidgetItem(columnString);
tableWidget->setItem(i, j, newItem);
QTableWidgetItem* headerItem = new QTableWidgetItem();
headerItem->setText(columnType);
tableWidget->setHorizontalHeaderItem(j, headerItem);
}
}
pageTabWidget->addTab(tableWidget, QString("Page %1").arg(i));
}
}