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:
parent
ce29debf24
commit
384f23ef1e
9 changed files with 109 additions and 13 deletions
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
@ -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
2
extern/libphysis
vendored
|
@ -1 +1 @@
|
||||||
Subproject commit 6cd4b5ddfa3c13cadf0ef0b39a5d23d0ac1ff431
|
Subproject commit d90badda85518997d9e639c49744531d4745d165
|
|
@ -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
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::MdlPart
|
||||||
Novus::ExdPart
|
Novus::ExdPart
|
||||||
Novus::TexPart
|
Novus::TexPart
|
||||||
|
Novus::DicPart
|
||||||
Physis::Logger
|
Physis::Logger
|
||||||
Qt6::Concurrent
|
Qt6::Concurrent
|
||||||
Qt6::Network)
|
Qt6::Network)
|
||||||
|
|
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue