6
6
#include < KLocalizedString>
7
7
#include < QFile>
8
8
#include < QGroupBox>
9
- #include < QJsonArray>
10
9
#include < QJsonDocument>
11
10
#include < QJsonObject>
12
11
#include < QLabel>
13
12
#include < QTableWidget>
14
13
#include < QVBoxLayout>
15
14
#include < physis.hpp>
16
15
16
+ #include " magic_enum.hpp"
17
+
17
18
EXDPart::EXDPart (GameData *data, QWidget *parent)
18
19
: QWidget(parent)
19
20
, data(data)
@@ -22,11 +23,14 @@ EXDPart::EXDPart(GameData *data, QWidget *parent)
22
23
layout->setContentsMargins (0 , 0 , 0 , 0 );
23
24
setLayout (layout);
24
25
25
- // TODO: This information should really be somewhere else
26
- /* auto headerBox = new QGroupBox(QStringLiteral("Header"));
27
- layout->addWidget(headerBox);
28
- headerFormLayout = new QFormLayout();
29
- headerBox->setLayout(headerFormLayout);*/
26
+ languageComboBox = new QComboBox ();
27
+ connect (languageComboBox, &QComboBox::activated, this , [this ](const int index ) {
28
+ auto selectedLanguage = languageComboBox->itemData (index );
29
+ preferredLanguage = (Language)selectedLanguage.toInt ();
30
+
31
+ loadTables ();
32
+ });
33
+ layout->addWidget (languageComboBox);
30
34
31
35
pageTabWidget = new QTabWidget ();
32
36
pageTabWidget->setTabPosition (QTabWidget::TabPosition::South);
@@ -36,12 +40,9 @@ EXDPart::EXDPart(GameData *data, QWidget *parent)
36
40
37
41
void EXDPart::loadSheet (const QString &name, physis_Buffer buffer, const QString &definitionPath)
38
42
{
39
- pageTabWidget->clear ();
40
-
41
43
QFile definitionFile (definitionPath);
42
44
definitionFile.open (QIODevice::ReadOnly);
43
45
44
- QJsonArray definitionList;
45
46
if (definitionFile.isOpen ()) {
46
47
auto document = QJsonDocument::fromJson (definitionFile.readAll ());
47
48
definitionList = document.object ()[QLatin1String (" definitions" )].toArray ();
@@ -66,19 +67,24 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer, const QString
66
67
}
67
68
}
68
69
69
- auto exh = physis_parse_excel_sheet_header (buffer);
70
+ this ->name = name;
71
+ exh = physis_parse_excel_sheet_header (buffer);
70
72
71
- // ditto
72
- /* QLayoutItem *child;
73
- while ((child = headerFormLayout->takeAt(0)) != nullptr) {
74
- delete child->widget();
75
- delete child;
73
+ languageComboBox->clear ();
74
+ for (int i = 0 ; i < exh->language_count ; i++) {
75
+ const auto itemText = QString::fromUtf8 (magic_enum::enum_name (exh->languages [i]));
76
+ // Don't add duplicates
77
+ if (languageComboBox->findText (itemText) == -1 ) {
78
+ languageComboBox->addItem (itemText, static_cast <int >(exh->languages [i]));
79
+ }
76
80
}
77
81
78
- headerFormLayout->addRow(QStringLiteral("Num Rows"), new QLabel(QString::number(exh->row_count)));
79
- headerFormLayout->addRow(QStringLiteral("Num Columns"), new QLabel(QString::number(exh->column_count)));
80
- headerFormLayout->addRow(QStringLiteral("Num Pages"), new QLabel(QString::number(exh->page_count)));
81
- headerFormLayout->addRow(QStringLiteral("Num Languages"), new QLabel(QString::number(exh->language_count)));*/
82
+ loadTables ();
83
+ }
84
+
85
+ void EXDPart::loadTables ()
86
+ {
87
+ pageTabWidget->clear ();
82
88
83
89
for (uint32_t i = 0 ; i < exh->page_count ; i++) {
84
90
auto tableWidget = new QTableWidget ();
@@ -185,13 +191,22 @@ void EXDPart::loadSheet(const QString &name, physis_Buffer buffer, const QString
185
191
186
192
Language EXDPart::getSuitableLanguage (physis_EXH *pExh)
187
193
{
194
+ // Find the preferred language first
195
+ for (uint32_t i = 0 ; i < pExh->language_count ; i++) {
196
+ if (pExh->languages [i] == preferredLanguage) {
197
+ return preferredLanguage;
198
+ }
199
+ }
200
+
201
+ // Fallback to None
188
202
for (uint32_t i = 0 ; i < pExh->language_count ; i++) {
189
- if (pExh->languages [i] == Language::English ) {
190
- return Language::English ;
203
+ if (pExh->languages [i] == Language::None ) {
204
+ return Language::None ;
191
205
}
192
206
}
193
207
194
- return Language::None;
208
+ // Then English
209
+ return Language::English;
195
210
}
196
211
197
212
std::pair<QString, int > EXDPart::getColumnData (physis_ColumnData &columnData)
0 commit comments