NOISSUE language selection wizard improvements
Same needs to be applied to the application settings later.
This commit is contained in:
parent
819503d530
commit
e71786d7b9
@ -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:
|
||||||
|
{
|
||||||
|
switch(column)
|
||||||
|
{
|
||||||
|
case Column::Language:
|
||||||
|
{
|
||||||
return d->m_languages[row].locale.nativeLanguageName();
|
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)
|
||||||
|
@ -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);
|
||||||
|
@ -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 ¤t, const QModelIndex &previous)
|
void LanguageWizardPage::languageRowChanged(const QModelIndex ¤t, const QModelIndex &previous)
|
||||||
|
@ -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;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user