NOISSUE language selection wizard improvements

Same needs to be applied to the application settings later.
This commit is contained in:
Petr Mrázek 2019-01-08 02:20:36 +01:00
parent 819503d530
commit e71786d7b9
4 changed files with 102 additions and 9 deletions

View File

@ -43,7 +43,7 @@ struct Language
{ {
return 100.0f; return 100.0f;
} }
return float(translated) / float(total); return 100.0f * float(translated) / float(total);
} }
void setTranslationStats(unsigned _translated, unsigned _untranslated, unsigned _fuzzy) void setTranslationStats(unsigned _translated, unsigned _untranslated, unsigned _fuzzy)
@ -85,7 +85,7 @@ struct Language
file_sha1 = other.file_sha1; file_sha1 = other.file_sha1;
translated = other.translated; translated = other.translated;
fuzzy = other.fuzzy; fuzzy = other.fuzzy;
total = other.fuzzy; total = other.total;
localFileType = other.localFileType; localFileType = other.localFileType;
return *this; return *this;
} }
@ -304,20 +304,49 @@ void TranslationsModel::reloadLocalFiles()
endInsertRows(); endInsertRows();
} }
namespace {
enum class Column
{
Language,
Quality
};
}
QVariant TranslationsModel::data(const QModelIndex& index, int role) const QVariant TranslationsModel::data(const QModelIndex& index, int role) const
{ {
if (!index.isValid()) if (!index.isValid())
return QVariant(); return QVariant();
int row = index.row(); int row = index.row();
auto column = static_cast<Column>(index.column());
if (row < 0 || row >= d->m_languages.size()) if (row < 0 || row >= d->m_languages.size())
return QVariant(); return QVariant();
auto & lang = d->m_languages[row];
switch (role) switch (role)
{ {
case Qt::DisplayRole: 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: case Qt::UserRole:
return d->m_languages[row].key; return d->m_languages[row].key;
default: 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 int TranslationsModel::rowCount(const QModelIndex& parent) const
{ {
return d->m_languages.size(); return d->m_languages.size();
} }
int TranslationsModel::columnCount(const QModelIndex& parent) const
{
return 2;
}
Language * TranslationsModel::findLanguage(const QString& key) Language * TranslationsModel::findLanguage(const QString& key)
{ {
auto found = std::find_if(d->m_languages.begin(), d->m_languages.end(), [&](Language & lang) auto found = std::find_if(d->m_languages.begin(), d->m_languages.end(), [&](Language & lang)

View File

@ -28,8 +28,10 @@ public:
explicit TranslationsModel(QString path, QObject *parent = 0); explicit TranslationsModel(QString path, QObject *parent = 0);
virtual ~TranslationsModel(); virtual ~TranslationsModel();
virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
virtual int rowCount(const QModelIndex &parent = QModelIndex()) 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); bool selectLanguage(QString key);
void updateLanguage(QString key); void updateLanguage(QString key);

View File

@ -3,7 +3,9 @@
#include <translations/TranslationsModel.h> #include <translations/TranslationsModel.h>
#include <QVBoxLayout> #include <QVBoxLayout>
#include <QListView> #include <QTreeView>
#include <QHeaderView>
#include <QLabel>
LanguageWizardPage::LanguageWizardPage(QWidget *parent) LanguageWizardPage::LanguageWizardPage(QWidget *parent)
: BaseWizardPage(parent) : BaseWizardPage(parent)
@ -11,15 +13,29 @@ LanguageWizardPage::LanguageWizardPage(QWidget *parent)
setObjectName(QStringLiteral("languagePage")); setObjectName(QStringLiteral("languagePage"));
verticalLayout = new QVBoxLayout(this); verticalLayout = new QVBoxLayout(this);
verticalLayout->setObjectName(QStringLiteral("verticalLayout")); verticalLayout->setObjectName(QStringLiteral("verticalLayout"));
languageView = new QListView(this); languageView = new QTreeView(this);
languageView->setObjectName(QStringLiteral("languageView")); 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); verticalLayout->addWidget(languageView);
helpUsLabel = new QLabel(this);
helpUsLabel->setTextInteractionFlags(Qt::LinksAccessibleByMouse);
helpUsLabel->setOpenExternalLinks(true);
helpUsLabel->setWordWrap(true);
verticalLayout->addWidget(helpUsLabel);
retranslate(); retranslate();
auto translations = MMC->translations(); auto translations = MMC->translations();
auto index = translations->selectedIndex(); auto index = translations->selectedIndex();
languageView->setModel(translations.get()); languageView->setModel(translations.get());
languageView->setCurrentIndex(index); languageView->setCurrentIndex(index);
languageView->header()->setSectionResizeMode(QHeaderView::ResizeToContents);
languageView->header()->setSectionResizeMode(0, QHeaderView::Stretch);
connect(languageView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &LanguageWizardPage::languageRowChanged); connect(languageView->selectionModel(), &QItemSelectionModel::currentRowChanged, this, &LanguageWizardPage::languageRowChanged);
} }
@ -51,6 +67,11 @@ void LanguageWizardPage::retranslate()
{ {
setTitle(tr("Language")); setTitle(tr("Language"));
setSubTitle(tr("Select the language to use in MultiMC")); 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) void LanguageWizardPage::languageRowChanged(const QModelIndex &current, const QModelIndex &previous)

View File

@ -3,7 +3,8 @@
#include "BaseWizardPage.h" #include "BaseWizardPage.h"
class QVBoxLayout; class QVBoxLayout;
class QListView; class QTreeView;
class QLabel;
class LanguageWizardPage : public BaseWizardPage class LanguageWizardPage : public BaseWizardPage
{ {
@ -27,5 +28,6 @@ protected slots:
private: private:
QVBoxLayout *verticalLayout = nullptr; QVBoxLayout *verticalLayout = nullptr;
QListView *languageView = nullptr; QTreeView *languageView = nullptr;
QLabel *helpUsLabel = nullptr;
}; };