1
Fork 0
mirror of https://github.com/redstrate/Novus.git synced 2025-04-20 11:47:45 +00:00

Add support for viewing dictionary files

This commit is contained in:
Joshua Goins 2024-04-18 22:21:53 -04:00
parent ce29debf24
commit 384f23ef1e
9 changed files with 109 additions and 13 deletions

View file

@ -5,7 +5,7 @@
#include <QString> #include <QString>
enum class FileType { Unknown, ExcelList, ExcelHeader, ExcelData, Model, Texture, ShaderPackage, CharaMakeParams, Skeleton }; enum class FileType { Unknown, ExcelList, ExcelHeader, ExcelData, Model, Texture, ShaderPackage, CharaMakeParams, Skeleton, Dictionary };
class FileTypes class FileTypes
{ {

View file

@ -13,7 +13,8 @@ const static QMap<QString, FileType> extensionToType{{QStringLiteral("exl"), Fil
{QStringLiteral("tex"), FileType::Texture}, {QStringLiteral("tex"), FileType::Texture},
{QStringLiteral("shpk"), FileType::ShaderPackage}, {QStringLiteral("shpk"), FileType::ShaderPackage},
{QStringLiteral("cmp"), FileType::CharaMakeParams}, {QStringLiteral("cmp"), FileType::CharaMakeParams},
{QStringLiteral("sklb"), FileType::Skeleton}}; {QStringLiteral("sklb"), FileType::Skeleton},
{QStringLiteral("dic"), FileType::Dictionary}};
const static QMap<FileType, QString> typeToName{{FileType::Unknown, i18n("Unknown")}, const static QMap<FileType, QString> typeToName{{FileType::Unknown, i18n("Unknown")},
{FileType::ExcelList, i18n("Excel List")}, {FileType::ExcelList, i18n("Excel List")},
@ -23,17 +24,19 @@ const static QMap<FileType, QString> typeToName{{FileType::Unknown, i18n("Unknow
{FileType::Texture, i18n("Texture")}, {FileType::Texture, i18n("Texture")},
{FileType::ShaderPackage, i18n("Shader Package")}, {FileType::ShaderPackage, i18n("Shader Package")},
{FileType::CharaMakeParams, i18n("Chara Make Params")}, {FileType::CharaMakeParams, i18n("Chara Make Params")},
{FileType::Skeleton, i18n("Skeleton")}}; {FileType::Skeleton, i18n("Skeleton")},
{FileType::Dictionary, i18n("Dictionary")}};
const static QMap<FileType, QString> typeToIcon{{FileType::Unknown, i18n("unknown")}, const static QMap<FileType, QString> typeToIcon{{FileType::Unknown, QStringLiteral("unknown")},
{FileType::ExcelList, i18n("x-office-spreadsheet")}, {FileType::ExcelList, QStringLiteral("x-office-spreadsheet")},
{FileType::ExcelHeader, i18n("x-office-spreadsheet")}, {FileType::ExcelHeader, QStringLiteral("x-office-spreadsheet")},
{FileType::ExcelData, i18n("x-office-spreadsheet")}, {FileType::ExcelData, QStringLiteral("x-office-spreadsheet")},
{FileType::Model, i18n("shape-cuboid-symbolic")}, {FileType::Model, QStringLiteral("shape-cuboid-symbolic")},
{FileType::Texture, i18n("viewimage-symbolic")}, {FileType::Texture, QStringLiteral("viewimage-symbolic")},
{FileType::ShaderPackage, i18n("paint-pattern-symbolic")}, {FileType::ShaderPackage, QStringLiteral("paint-pattern-symbolic")},
{FileType::CharaMakeParams, i18n("step_object_SoftBody-symbolic")}, {FileType::CharaMakeParams, QStringLiteral("step_object_SoftBody-symbolic")},
{FileType::Skeleton, i18n("user-symbolic")}}; {FileType::Skeleton, QStringLiteral("user-symbolic")},
{FileType::Dictionary, QStringLiteral("accessories-dictionary-symbolic")}};
FileType FileTypes::getFileType(const QString &extension) FileType FileTypes::getFileType(const QString &extension)
{ {

2
extern/libphysis vendored

@ -1 +1 @@
Subproject commit 6cd4b5ddfa3c13cadf0ef0b39a5d23d0ac1ff431 Subproject commit d90badda85518997d9e639c49744531d4745d165

View file

@ -2,6 +2,7 @@
# SPDX-License-Identifier: CC0-1.0 # SPDX-License-Identifier: CC0-1.0
add_subdirectory(cmp) add_subdirectory(cmp)
add_subdirectory(dic)
add_subdirectory(exd) add_subdirectory(exd)
add_subdirectory(exl) add_subdirectory(exl)
add_subdirectory(hex) add_subdirectory(hex)

15
parts/dic/CMakeLists.txt Normal file
View file

@ -0,0 +1,15 @@
# SPDX-FileCopyrightText: 2024 Joshua Goins <josh@redstrate.com>
# SPDX-License-Identifier: CC0-1.0
add_library(dicpart STATIC)
target_sources(dicpart PRIVATE dicpart.cpp)
target_link_libraries(dicpart
PUBLIC
KF6::I18n
Physis::Physis
Qt6::Core
Qt6::Widgets)
target_include_directories(dicpart PUBLIC ${CMAKE_CURRENT_SOURCE_DIR})
target_compile_definitions(dicpart PRIVATE TRANSLATION_DOMAIN="novus")
add_library(Novus::DicPart ALIAS dicpart)

47
parts/dic/dicpart.cpp Normal file
View file

@ -0,0 +1,47 @@
// SPDX-FileCopyrightText: 2024 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-3.0-or-later
#include "dicpart.h"
#include <KLocalizedString>
#include <QFile>
#include <QJsonArray>
#include <QJsonDocument>
#include <QJsonObject>
#include <QVBoxLayout>
#include <physis.hpp>
DicPart::DicPart(QWidget *parent)
: QWidget(parent)
{
auto layout = new QVBoxLayout();
layout->setContentsMargins(0, 0, 0, 0);
m_tableWidget = new QTableWidget();
layout->addWidget(m_tableWidget);
setLayout(layout);
}
void DicPart::load(physis_Buffer file)
{
auto dic = physis_parse_dictionary(file);
if (dic.num_words > 0) {
m_tableWidget->clear();
m_tableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers);
m_tableWidget->setColumnCount(1);
m_tableWidget->setRowCount(dic.num_words);
m_tableWidget->setHorizontalHeaderLabels({i18nc("@title:column", "Word")});
for (int i = 0; i < dic.num_words; i++) {
// TODO: it seems not all utf8 characters are parsed correctly?
auto item = new QTableWidgetItem(QString::fromUtf8(dic.words[i]));
m_tableWidget->setItem(i, 0, item);
}
m_tableWidget->resizeColumnsToContents();
}
}
#include "moc_dicpart.cpp"

23
parts/dic/dicpart.h Normal file
View file

@ -0,0 +1,23 @@
// SPDX-FileCopyrightText: 2024 Joshua Goins <josh@redstrate.com>
// SPDX-License-Identifier: GPL-3.0-or-later
#pragma once
#include <QTableWidget>
#include <QWidget>
#include <physis.hpp>
class DicPart : public QWidget
{
Q_OBJECT
public:
explicit DicPart(QWidget *parent = nullptr);
void load(physis_Buffer file);
private:
GameData *data = nullptr;
QTableWidget *m_tableWidget = nullptr;
};

View file

@ -43,6 +43,7 @@ target_link_libraries(novus-sagasu
Novus::MdlPart Novus::MdlPart
Novus::ExdPart Novus::ExdPart
Novus::TexPart Novus::TexPart
Novus::DicPart
Physis::Logger Physis::Logger
Qt6::Concurrent Qt6::Concurrent
Qt6::Network) Qt6::Network)

View file

@ -17,6 +17,7 @@
#include <QTemporaryDir> #include <QTemporaryDir>
#include "cmppart.h" #include "cmppart.h"
#include "dicpart.h"
#include "exdpart.h" #include "exdpart.h"
#include "exlpart.h" #include "exlpart.h"
#include "filepropertieswindow.h" #include "filepropertieswindow.h"
@ -126,6 +127,11 @@ void MainWindow::refreshParts(const QString &path)
sklbWidget->load(physis_parse_skeleton(file)); sklbWidget->load(physis_parse_skeleton(file));
partHolder->addTab(sklbWidget, i18nc("@title:tab", "Skeleton")); partHolder->addTab(sklbWidget, i18nc("@title:tab", "Skeleton"));
} break; } break;
case FileType::Dictionary: {
auto dicWidget = new DicPart();
dicWidget->load(file);
partHolder->addTab(dicWidget, i18nc("@title:tab", "Dictionary"));
} break;
default: default:
break; break;
} }