Skip to content

Commit

Permalink
Translation: Implemented language visibility system
Browse files Browse the repository at this point in the history
  • Loading branch information
Wohlstand committed Mar 2, 2024
1 parent 9b6d278 commit 1ab1521
Show file tree
Hide file tree
Showing 4 changed files with 179 additions and 114 deletions.
37 changes: 35 additions & 2 deletions Translator/textdata/langs_list_model.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,34 @@
#include <QColor>
#include <QPalette>
#include <QLocale>
#include <QSettings>
#include <QApplication>

#include "langs_list_model.h"

LangsListModel::LangsListModel(TranslateProject *project, QObject *parent)
void LangsListModel::rebuildMap()
{
m_viewByLang.clear();

for(int i = 0; i < m_view.size(); ++i)
m_viewByLang[m_view[i].code] = i;
}

LangsListModel::LangsListModel(TranslateProject *project, QSettings *setup, QObject *parent)
: QAbstractTableModel(parent)
, m_project(project)
, m_setup(setup)
{
Q_ASSERT(m_project);
Q_ASSERT(m_setup);
}

bool LangsListModel::langIsVisible(const QString &langCode)
{
if(m_viewByLang.contains(langCode))
return m_view[m_viewByLang[langCode]].vis;

return false;
}

static QString getStdLangName(const QString &fname)
Expand All @@ -44,6 +63,9 @@ void LangsListModel::refreshData()
beginResetModel();

m_view.clear();
m_viewByLang.clear();

m_setup->beginGroup("LangVisibility");

for(auto it = m_project->begin(); it != m_project->end(); ++it)
{
Expand All @@ -53,7 +75,7 @@ void LangsListModel::refreshData()
auto &et = it.value();

LangsView e;
e.vis = false; // TODO: Preserve favourite languages and show them always with no matter which project is
e.vis = m_setup->value(it.key(), false).toBool();
e.strings = et.t_strings;
e.translated = et.t_translated;
e.code = it.key();
Expand All @@ -66,16 +88,20 @@ void LangsListModel::refreshData()
if(!e.lang_name.isEmpty())
e.lang_name[0] = e.lang_name[0].toUpper();

m_viewByLang[e.code] = (int)m_view.size();
m_view.push_back(e);
}

m_setup->endGroup();

endResetModel();
}

void LangsListModel::clear()
{
beginResetModel();
m_view.clear();
m_viewByLang.clear();
endResetModel();
}

Expand Down Expand Up @@ -210,6 +236,8 @@ void LangsListModel::sort(int column, Qt::SortOrder order)
emit dataChanged(QModelIndex(), QModelIndex());
break;
}

rebuildMap();
}

int LangsListModel::rowCount(const QModelIndex &parent) const
Expand Down Expand Up @@ -290,6 +318,11 @@ bool LangsListModel::setData(const QModelIndex &index, const QVariant &value, in
case C_VISIBLE:
it.vis = (value.toInt() == Qt::Checked);
emit dataChanged(index, index, {role});
emit visibilityChanged();
m_setup->beginGroup("LangVisibility");
m_setup->setValue(it.code, it.vis);
m_setup->endArray();
m_setup->sync();
break;

default:
Expand Down
14 changes: 13 additions & 1 deletion Translator/textdata/langs_list_model.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,13 +21,17 @@
#define LANGSLISTMODEL_H

#include <QAbstractTableModel>
#include <QHash>
#include "textdata.h"

class QSettings;

class LangsListModel : public QAbstractTableModel
{
Q_OBJECT

TranslateProject *m_project = nullptr;
QSettings *m_setup = nullptr;

struct LangsView
{
Expand All @@ -40,9 +44,15 @@ class LangsListModel : public QAbstractTableModel

typedef QVector<LangsView> LangsViewList;
LangsViewList m_view;
QHash<QString, int> m_viewByLang;

void rebuildMap();

signals:
void visibilityChanged();

public:
explicit LangsListModel(TranslateProject *project, QObject *parent = nullptr);
explicit LangsListModel(TranslateProject *project, QSettings *setup, QObject *parent = nullptr);

enum Columns
{
Expand All @@ -55,6 +65,8 @@ class LangsListModel : public QAbstractTableModel
P_COLUMNS_COUNT
};

bool langIsVisible(const QString &langCode);

void refreshData();
void clear();

Expand Down
Loading

0 comments on commit 1ab1521

Please sign in to comment.