From 38d12bbe8c2d3c3e62ae40f5610a67b7e72c9dd7 Mon Sep 17 00:00:00 2001 From: nordsoft Date: Thu, 28 Sep 2023 22:48:52 +0200 Subject: [PATCH] Final changes for map editor translations --- mapeditor/icons/translations.png | Bin 1864 -> 2113 bytes mapeditor/mapsettings/translations.cpp | 84 +++++++++++++------------ mapeditor/mapsettings/translations.h | 2 + 3 files changed, 46 insertions(+), 40 deletions(-) diff --git a/mapeditor/icons/translations.png b/mapeditor/icons/translations.png index 0b031738683f700600f137a7ad8eea4deddda41d..1935db72fc3bfee1f6fafcbb6da3b6d95694351e 100644 GIT binary patch delta 975 zcmV;=12Fu^4#5zxfdqd8s!2paR9FecS4&8gQ52prp;b^&lz})1K~SJE5h%8;D0>)I zAoQeKw2F2`)J9rGMD&0%7lErbl}6OA3_)XPh=L-VN3}4Th+Ytt{e9o{oSEbJ|Ns1> zkq18Sx!*nKp7Wpk8e_3pmUwymd_I4toMXSCp<#<3|4%syz8HU#5}Scbz;mEJC^3x9 zNNVXFb@DK~X;(-lU5PxN0p9>m@CWTMa0;jgJ_El3uq`Y(_ymgE1G!wTKaog0g4H`< zy;wJ+B~*SwIRgwSf%cy0ok(E6;hh?#DsBnl@wkTx*3t`3Ph=t+T&UPnC=axQmeo>O z2j98U=|MZ9RSADhM2uF!;iljPT7t`=To-g!U@KtdH#$TI=RqaMWIkO+wk_m@x4uqy z6@bRcKgg(ZKMY5`qF@=9(1^hbg~EblGRdlXs6Z?ER4O$n9J@|xSsu*}`W~=Z8JmOl zDv;(l#)OX6AW$1DTa5KkI-NG%3DtcqlaP`5Q!M@$Ayt3qMm$|Vu5AHmma&R^z~(AG zIu|#&?+xpGWRUB`eQ;gCdYuD40z45_B>;Q9;6j7fFgTXrDC}_!hUY06P@zEo910!z$2Am{t z>@&nh=!<_$f68mhF$sPc>RW&@3ghGB!EB=nV8r%d_JwWpWVx+lJ#&4Uz*ga1HGtKp!i< zvi>3obYhe^ODl51bM4$!OI{>_HZeLndRGatOlZ?Zge{d#WTuK~OU|V5)92?E`ki=suoIp3I=^ums8sKi{J-`P{rB0NKXm`N3j&p=2zyKOZ zTK=!l1N3q-a%@c^``Cxv$0KweZ^_6+xAYgbFVW-X+*x8HY7)?vmrLV*^C4hAbl&|O z-=)bxFN$y{K+tB;&!%V`q|iwr6S;&WfhI?AO?-5M{Il6CpJ&>wfX`Uf$B^YVB@c=d xnfHB8qk3xzJ-uHd)dz(9y`PZ*= zp7WmPdCv23-}jbEld9c;d4$9^7=S0R5L%+PmW0jg)cA#c07pSP@Cm-B zu# zkqYSqO{`*6ge!lw7$wYx55{L~JO&lH1EO?vVpj~BuZdMewDSMZKl3y6swz0DQfOuG z!FQqP4$!qaR?W)wQ1bJZuX8#GXVgGz;3nLFjnIsA7c{wF&YCg&2p03?3LJx12By>l zdKIr#qe-PsuJOEpBltsbQo$e{!&Vp!u_EqXk`KY=v`&A11ZPQj4fW3IOX$1>e{N`J zt!_Sf=RtGmF13TC*LhXG1J%GpJH7+A8k~4Hd2u_l7O;<8AAb)1cAMjp*)fwfK+JQ$ z8>bxji7)EufCc?~u%EWb)gCg$iA1I@qs}#I5e+c|qWlf`lHe>D0bOX}cLBF`(yDc# zD>lUiYb$?t*kXl^IyWNihQ1@pUuGTj>rq=gx7e5|dIw_Paq<0@<_+enm(BX^YaHDl zo%=`FV8nTr66=Dy(2z8#Un;j*9dGkceX{WHP3~$mktR+4u}J$<(LwGD&~4XyKwnVT z0(1JY!=ScoA!${*;VMcbRUx39tH}qU{nT>&JrPVEHRi^xjfLn!zp=sf5lT}p4>ZOd zCFETwlanguageSelect->blockSignals(true); ui->languageSelect->addItem(QString("%1 (%2)").arg(QString::fromStdString(language.nameEnglish), QString::fromStdString(language.nameNative))); ui->languageSelect->setItemData(ui->languageSelect->count() - 1, QVariant(QString::fromStdString(language.identifier))); + ui->languageSelect->blockSignals(false); if(language.identifier == VLC->generaltexth->getPreferredLanguage()) ui->languageSelect->setCurrentIndex(ui->languageSelect->count() - 1); } @@ -37,31 +39,38 @@ Translations::~Translations() delete ui; } +void Translations::fillTranslationsTable(const std::string & language) +{ + auto & translation = mapHeader.translations[language]; + ui->translationsTable->blockSignals(true); + ui->translationsTable->setRowCount(0); + ui->translationsTable->setRowCount(translation.Struct().size()); + int i = 0; + for(auto & s : translation.Struct()) + { + auto * wId = new QTableWidgetItem(QString::fromStdString(s.first)); + auto * wText = new QTableWidgetItem(QString::fromStdString(s.second.String())); + wId->setFlags(wId->flags() & ~Qt::ItemIsEditable); + wText->setFlags(wId->flags() | Qt::ItemIsEditable); + ui->translationsTable->setItem(i, 0, wId); + ui->translationsTable->setItem(i++, 1, wText); + } + ui->translationsTable->resizeColumnToContents(0); + ui->translationsTable->blockSignals(false); +} + void Translations::on_languageSelect_currentIndexChanged(int index) { auto language = ui->languageSelect->currentData().toString().toStdString(); - auto & translation = mapHeader.translations[language]; - bool hasLanguage = !translation.isNull(); + bool hasLanguage = !mapHeader.translations[language].isNull(); ui->supportedCheck->blockSignals(true); ui->supportedCheck->setChecked(hasLanguage); ui->supportedCheck->blockSignals(false); ui->translationsTable->setEnabled(hasLanguage); if(hasLanguage) - { - ui->translationsTable->blockSignals(true); - ui->translationsTable->setRowCount(translation.Struct().size()); - int i = 0; - for(auto & s : translation.Struct()) - { - auto * wId = new QTableWidgetItem(QString::fromStdString(s.first)); - auto * wText = new QTableWidgetItem(QString::fromStdString(s.second.String())); - wId->setFlags(wId->flags() & ~Qt::ItemIsEditable); - wText->setFlags(wId->flags() | Qt::ItemIsEditable); - ui->translationsTable->setItem(i, 0, wId); - ui->translationsTable->setItem(i++, 0, wText); - } - ui->translationsTable->blockSignals(false); - } + fillTranslationsTable(language); + else + ui->translationsTable->setRowCount(0); } @@ -69,32 +78,15 @@ void Translations::on_supportedCheck_toggled(bool checked) { auto language = ui->languageSelect->currentData().toString().toStdString(); auto & translation = mapHeader.translations[language]; - bool hasLanguage = !translation.isNull(); bool hasRecord = !translation.Struct().empty(); if(checked) { - if(!hasLanguage) - translation = JsonNode(JsonNode::JsonType::DATA_STRUCT); - //copy from default language translation = mapHeader.translations[VLC->generaltexth->getPreferredLanguage()]; - hasLanguage = !translation.isNull(); - ui->translationsTable->blockSignals(true); - ui->translationsTable->setRowCount(translation.Struct().size()); - int i = 0; - for(auto & s : translation.Struct()) - { - auto * wId = new QTableWidgetItem(QString::fromStdString(s.first)); - auto * wText = new QTableWidgetItem(QString::fromStdString(s.second.String())); - wId->setFlags(wId->flags() & ~Qt::ItemIsEditable); - wText->setFlags(wId->flags() | Qt::ItemIsEditable); - ui->translationsTable->setItem(i, 0, wId); - ui->translationsTable->setItem(i++, 0, wText); - } - ui->translationsTable->blockSignals(false); - ui->translationsTable->setEnabled(hasLanguage); + fillTranslationsTable(language); + ui->translationsTable->setEnabled(true); } else { @@ -117,16 +109,28 @@ void Translations::on_supportedCheck_toggled(bool checked) return; } ui->translationsTable->blockSignals(true); - ui->translationsTable->clear(); - translation = JsonNode(); + ui->translationsTable->setRowCount(0); + translation = JsonNode(JsonNode::JsonType::DATA_NULL); ui->translationsTable->blockSignals(false); ui->translationsTable->setEnabled(false); } } -void Translations::on_translationsTable_itemChanged(QTableWidgetItem *item) +void Translations::on_translationsTable_itemChanged(QTableWidgetItem * item) { - + assert(item->column() == 1); + + auto language = ui->languageSelect->currentData().toString().toStdString(); + auto & translation = mapHeader.translations[language]; + + assert(!translation.isNull()); + + auto textId = ui->translationsTable->item(item->row(), 0)->text().toStdString(); + assert(!textId.empty()); + if(textId.empty()) + return; + + translation[textId].String() = item->text().toStdString(); } diff --git a/mapeditor/mapsettings/translations.h b/mapeditor/mapsettings/translations.h index 1444e6f25..27b9c8218 100644 --- a/mapeditor/mapsettings/translations.h +++ b/mapeditor/mapsettings/translations.h @@ -20,6 +20,8 @@ class Translations; class Translations : public QDialog { Q_OBJECT + + void fillTranslationsTable(const std::string & language); public: explicit Translations(CMapHeader & mapHeader, QWidget *parent = nullptr);