summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetr Mrázek <peterix@gmail.com>2019-01-08 02:20:36 +0100
committerPetr Mrázek <peterix@gmail.com>2019-01-08 02:20:36 +0100
commite71786d7b97c6e3b7aa91d085c935ef67832abc3 (patch)
tree9f4986254d4825ec55d8eedcf38aa90a401bb5f3
parent819503d53083a1b39a6d16285c8753ff9525584d (diff)
downloadMultiMC-e71786d7b97c6e3b7aa91d085c935ef67832abc3.tar
MultiMC-e71786d7b97c6e3b7aa91d085c935ef67832abc3.tar.gz
MultiMC-e71786d7b97c6e3b7aa91d085c935ef67832abc3.tar.lz
MultiMC-e71786d7b97c6e3b7aa91d085c935ef67832abc3.tar.xz
MultiMC-e71786d7b97c6e3b7aa91d085c935ef67832abc3.zip
NOISSUE language selection wizard improvements
Same needs to be applied to the application settings later.
-rw-r--r--api/logic/translations/TranslationsModel.cpp74
-rw-r--r--api/logic/translations/TranslationsModel.h6
-rw-r--r--application/setupwizard/LanguageWizardPage.cpp25
-rw-r--r--application/setupwizard/LanguageWizardPage.h6
4 files changed, 102 insertions, 9 deletions
diff --git a/api/logic/translations/TranslationsModel.cpp b/api/logic/translations/TranslationsModel.cpp
index 3f374083..b1c65917 100644
--- a/api/logic/translations/TranslationsModel.cpp
+++ b/api/logic/translations/TranslationsModel.cpp
@@ -43,7 +43,7 @@ struct Language
{
return 100.0f;
}
- return float(translated) / float(total);
+ return 100.0f * float(translated) / float(total);
}
void setTranslationStats(unsigned _translated, unsigned _untranslated, unsigned _fuzzy)
@@ -85,7 +85,7 @@ struct Language
file_sha1 = other.file_sha1;
translated = other.translated;
fuzzy = other.fuzzy;
- total = other.fuzzy;
+ total = other.total;
localFileType = other.localFileType;
return *this;
}
@@ -304,20 +304,49 @@ void TranslationsModel::reloadLocalFiles()
endInsertRows();
}
+namespace {
+enum class Column
+{
+ Language,
+ Quality
+};
+}
+
+
QVariant TranslationsModel::data(const QModelIndex& index, int role) const
{
if (!index.isValid())
return QVariant();
int row = index.row();
+ auto column = static_cast<Column>(index.column());
if (row < 0 || row >= d->m_languages.size())
return QVariant();
+ auto & lang = d->m_languages[row];
switch (role)
{
case Qt::DisplayRole:
- return d->m_languages[row].locale.nativeLanguageName();
+ {
+ switch(column)
+ {
+ case Column::Language:
+ {
+ return d->m_languages[row].locale.nativeLanguageName();
+ }
+ case Column::Quality:
+ {
+ QString text;
+ text.sprintf("%3.1f %%", lang.percentTranslated());
+ return text;
+ }
+ }
+ }
+ case Qt::ToolTipRole:
+ {
+ return tr("%1:\n%2 translated\n%3 fuzzy\n%4 total").arg(lang.key, QString::number(lang.translated), QString::number(lang.fuzzy), QString::number(lang.total));
+ }
case Qt::UserRole:
return d->m_languages[row].key;
default:
@@ -325,11 +354,50 @@ QVariant TranslationsModel::data(const QModelIndex& index, int role) const
}
}
+QVariant TranslationsModel::headerData(int section, Qt::Orientation orientation, int role) const
+{
+ auto column = static_cast<Column>(section);
+ if(role == Qt::DisplayRole)
+ {
+ switch(column)
+ {
+ case Column::Language:
+ {
+ return tr("Language");
+ }
+ case Column::Quality:
+ {
+ return tr("Quality");
+ }
+ }
+ }
+ else if(role == Qt::ToolTipRole)
+ {
+ switch(column)
+ {
+ case Column::Language:
+ {
+ return tr("The native language name.");
+ }
+ case Column::Quality:
+ {
+ return tr("Quality is the percentage of fully translated strings, not counting automatically guessed ones.");
+ }
+ }
+ }
+ return QAbstractListModel::headerData(section, orientation, role);
+}
+
int TranslationsModel::rowCount(const QModelIndex& parent) const
{
return d->m_languages.size();
}
+int TranslationsModel::columnCount(const QModelIndex& parent) const
+{
+ return 2;
+}
+
Language * TranslationsModel::findLanguage(const QString& key)
{
auto found = std::find_if(d->m_languages.begin(), d->m_languages.end(), [&](Language & lang)
diff --git a/api/logic/translations/TranslationsModel.h b/api/logic/translations/TranslationsModel.h
index 5bf769c3..8fee43de 100644
--- a/api/logic/translations/TranslationsModel.h
+++ b/api/logic/translations/TranslationsModel.h
@@ -28,8 +28,10 @@ public:
explicit TranslationsModel(QString path, QObject *parent = 0);
virtual ~TranslationsModel();
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
- virtual int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
+ QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
+ int rowCount(const QModelIndex &parent = QModelIndex()) const override;
+ int columnCount(const QModelIndex & parent) const override;
bool selectLanguage(QString key);
void updateLanguage(QString key);
diff --git a/application/setupwizard/LanguageWizardPage.cpp b/application/setupwizard/LanguageWizardPage.cpp
index dbbe5e7f..9a8fd37f 100644
--- a/application/setupwizard/LanguageWizardPage.cpp
+++ b/application/setupwizard/LanguageWizardPage.cpp
@@ -3,7 +3,9 @@
#include <translations/TranslationsModel.h>
#include <QVBoxLayout>
-#include <QListView>
+#include <QTreeView>
+#include <QHeaderView>
+#include <QLabel>
LanguageWizardPage::LanguageWizardPage(QWidget *parent)
: BaseWizardPage(parent)
@@ -11,15 +13,29 @@ LanguageWizardPage::LanguageWizardPage(QWidget *parent)
setObjectName(QStringLiteral("languagePage"));
verticalLayout = new QVBoxLayout(this);
verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
- languageView = new QListView(this);
+ languageView = new QTreeView(this);
languageView->setObjectName(QStringLiteral("languageView"));
+ languageView->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ languageView->setAlternatingRowColors(true);
+ languageView->setRootIsDecorated(false);
+ languageView->setItemsExpandable(false);
+ languageView->setWordWrap(true);
+ languageView->header()->setCascadingSectionResizes(true);
+ languageView->header()->setStretchLastSection(false);
verticalLayout->addWidget(languageView);
+ helpUsLabel = new QLabel(this);
+ helpUsLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse);
+ helpUsLabel->setOpenExternalLinks(true);
+ helpUsLabel->setWordWrap(true);
+ verticalLayout->addWidget(helpUsLabel);
retranslate();
auto translations = MMC->translations();
auto index = translations->selectedIndex();
languageView->setModel(translations.get());
languageView->setCurrentIndex(index);
+ languageView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
+ languageView->header()->setSectionResizeMode(0, QHeaderView::Stretch);
connect(languageView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &LanguageWizardPage::languageRowChanged);
}
@@ -51,6 +67,11 @@ void LanguageWizardPage::retranslate()
{
setTitle(tr("Language"));
setSubTitle(tr("Select the language to use in MultiMC"));
+ QString text =
+ tr("Don't see your language or the quality is poor?") +
+ "<br/>" +
+ QString("<a href=\"https://github.com/MultiMC/MultiMC5/wiki/Translating-MultiMC\">%1</a>").arg("Help us with translations!");
+ helpUsLabel->setText(text);
}
void LanguageWizardPage::languageRowChanged(const QModelIndex &current, const QModelIndex &previous)
diff --git a/application/setupwizard/LanguageWizardPage.h b/application/setupwizard/LanguageWizardPage.h
index 866f81c3..bfc02c95 100644
--- a/application/setupwizard/LanguageWizardPage.h
+++ b/application/setupwizard/LanguageWizardPage.h
@@ -3,7 +3,8 @@
#include "BaseWizardPage.h"
class QVBoxLayout;
-class QListView;
+class QTreeView;
+class QLabel;
class LanguageWizardPage : public BaseWizardPage
{
@@ -27,5 +28,6 @@ protected slots:
private:
QVBoxLayout *verticalLayout = nullptr;
- QListView *languageView = nullptr;
+ QTreeView *languageView = nullptr;
+ QLabel *helpUsLabel = nullptr;
};