mirror of
https://github.com/redstrate/Novus.git
synced 2025-04-20 19:57:44 +00:00
Add support for viewing dictionary files
This commit is contained in:
parent
ce29debf24
commit
384f23ef1e
9 changed files with 109 additions and 13 deletions
|
@ -5,7 +5,7 @@
|
|||
|
||||
#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
|
||||
{
|
||||
|
|
|
@ -13,7 +13,8 @@ const static QMap<QString, FileType> extensionToType{{QStringLiteral("exl"), Fil
|
|||
{QStringLiteral("tex"), FileType::Texture},
|
||||
{QStringLiteral("shpk"), FileType::ShaderPackage},
|
||||
{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")},
|
||||
{FileType::ExcelList, i18n("Excel List")},
|
||||
|
@ -23,17 +24,19 @@ const static QMap<FileType, QString> typeToName{{FileType::Unknown, i18n("Unknow
|
|||
{FileType::Texture, i18n("Texture")},
|
||||
{FileType::ShaderPackage, i18n("Shader Package")},
|
||||
{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")},
|
||||
{FileType::ExcelList, i18n("x-office-spreadsheet")},
|
||||
{FileType::ExcelHeader, i18n("x-office-spreadsheet")},
|
||||
{FileType::ExcelData, i18n("x-office-spreadsheet")},
|
||||
{FileType::Model, i18n("shape-cuboid-symbolic")},
|
||||
{FileType::Texture, i18n("viewimage-symbolic")},
|
||||
{FileType::ShaderPackage, i18n("paint-pattern-symbolic")},
|
||||
{FileType::CharaMakeParams, i18n("step_object_SoftBody-symbolic")},
|
||||
{FileType::Skeleton, i18n("user-symbolic")}};
|
||||
const static QMap<FileType, QString> typeToIcon{{FileType::Unknown, QStringLiteral("unknown")},
|
||||
{FileType::ExcelList, QStringLiteral("x-office-spreadsheet")},
|
||||
{FileType::ExcelHeader, QStringLiteral("x-office-spreadsheet")},
|
||||
{FileType::ExcelData, QStringLiteral("x-office-spreadsheet")},
|
||||
{FileType::Model, QStringLiteral("shape-cuboid-symbolic")},
|
||||
{FileType::Texture, QStringLiteral("viewimage-symbolic")},
|
||||
{FileType::ShaderPackage, QStringLiteral("paint-pattern-symbolic")},
|
||||
{FileType::CharaMakeParams, QStringLiteral("step_object_SoftBody-symbolic")},
|
||||
{FileType::Skeleton, QStringLiteral("user-symbolic")},
|
||||
{FileType::Dictionary, QStringLiteral("accessories-dictionary-symbolic")}};
|
||||
|
||||
FileType FileTypes::getFileType(const QString &extension)
|
||||
{
|
||||
|
|
2
extern/libphysis
vendored
2
extern/libphysis
vendored
|
@ -1 +1 @@
|
|||
Subproject commit 6cd4b5ddfa3c13cadf0ef0b39a5d23d0ac1ff431
|
||||
Subproject commit d90badda85518997d9e639c49744531d4745d165
|
|
@ -2,6 +2,7 @@
|
|||
# SPDX-License-Identifier: CC0-1.0
|
||||
|
||||
add_subdirectory(cmp)
|
||||
add_subdirectory(dic)
|
||||
add_subdirectory(exd)
|
||||
add_subdirectory(exl)
|
||||
add_subdirectory(hex)
|
||||
|
|
15
parts/dic/CMakeLists.txt
Normal file
15
parts/dic/CMakeLists.txt
Normal 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
47
parts/dic/dicpart.cpp
Normal 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
23
parts/dic/dicpart.h
Normal 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;
|
||||
};
|
|
@ -43,6 +43,7 @@ target_link_libraries(novus-sagasu
|
|||
Novus::MdlPart
|
||||
Novus::ExdPart
|
||||
Novus::TexPart
|
||||
Novus::DicPart
|
||||
Physis::Logger
|
||||
Qt6::Concurrent
|
||||
Qt6::Network)
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <QTemporaryDir>
|
||||
|
||||
#include "cmppart.h"
|
||||
#include "dicpart.h"
|
||||
#include "exdpart.h"
|
||||
#include "exlpart.h"
|
||||
#include "filepropertieswindow.h"
|
||||
|
@ -126,6 +127,11 @@ void MainWindow::refreshParts(const QString &path)
|
|||
sklbWidget->load(physis_parse_skeleton(file));
|
||||
partHolder->addTab(sklbWidget, i18nc("@title:tab", "Skeleton"));
|
||||
} break;
|
||||
case FileType::Dictionary: {
|
||||
auto dicWidget = new DicPart();
|
||||
dicWidget->load(file);
|
||||
partHolder->addTab(dicWidget, i18nc("@title:tab", "Dictionary"));
|
||||
} break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
|
Loading…
Add table
Reference in a new issue