diff --git a/src/cataloglistview/catalogmodel.h b/src/cataloglistview/catalogmodel.h --- a/src/cataloglistview/catalogmodel.h +++ b/src/cataloglistview/catalogmodel.h @@ -44,7 +44,7 @@ Q_OBJECT public: - enum CatalogModelColumns { + enum class CatalogModelColumns { Key = 0, Source, Target, @@ -56,8 +56,8 @@ IsModified, IsPlural, ColumnCount, - DisplayedColumnCount = TranslationStatus + 1 }; + static const int DisplayedColumnCount = static_cast(CatalogModelColumns::TranslationStatus) + 1; enum Roles { StringFilterRole = Qt::UserRole + 1 diff --git a/src/cataloglistview/catalogmodel.cpp b/src/cataloglistview/catalogmodel.cpp --- a/src/cataloglistview/catalogmodel.cpp +++ b/src/cataloglistview/catalogmodel.cpp @@ -115,13 +115,19 @@ if (role != Qt::DisplayRole) return QVariant(); - switch (section) { - case Key: return i18nc("@title:column", "Entry"); - case Source: return i18nc("@title:column Original text", "Source"); - case Target: return i18nc("@title:column Text in target language", "Target"); - case Notes: return i18nc("@title:column", "Notes"); - case Context: return i18nc("@title:column", "Context"); - case TranslationStatus: return i18nc("@title:column", "Translation Status"); + switch (static_cast(section)) { + case CatalogModelColumns::Key: + return i18nc("@title:column", "Entry"); + case CatalogModelColumns::Source: + return i18nc("@title:column Original text", "Source"); + case CatalogModelColumns::Target: + return i18nc("@title:column Text in target language", "Target"); + case CatalogModelColumns::Notes: + return i18nc("@title:column", "Notes"); + case CatalogModelColumns::Context: + return i18nc("@title:column", "Context"); + case CatalogModelColumns::TranslationStatus: + return i18nc("@title:column", "Translation Status"); } return QVariant(); } @@ -131,6 +137,8 @@ if (m_catalog->numberOfEntries() <= index.row()) return QVariant(); + const CatalogModelColumns column = static_cast(index.column()); + if (role == Qt::SizeHintRole) { //no need to cache because of uniform row heights return QFontMetrics(QApplication::font()).size(Qt::TextSingleLine, QString::fromLatin1(" ")); @@ -148,19 +156,25 @@ return colorScheme.foreground(KColorScheme::InactiveText); } } else if (role == Qt::UserRole) { - switch (index.column()) { - case TranslationStatus: return m_catalog->isApproved(index.row()); - case IsEmpty: return m_catalog->isEmpty(index.row()); - case State: return int(m_catalog->state(index.row())); - case IsModified: return m_catalog->isModified(index.row()); - case IsPlural: return m_catalog->isPlural(index.row()); - default: role = Qt::DisplayRole; + switch (column) { + case CatalogModelColumns::TranslationStatus: + return m_catalog->isApproved(index.row()); + case CatalogModelColumns::IsEmpty: + return m_catalog->isEmpty(index.row()); + case CatalogModelColumns::State: + return int(m_catalog->state(index.row())); + case CatalogModelColumns::IsModified: + return m_catalog->isModified(index.row()); + case CatalogModelColumns::IsPlural: + return m_catalog->isPlural(index.row()); + default: + role = Qt::DisplayRole; } } else if (role == StringFilterRole) { //exclude UI strings - if (index.column() >= TranslationStatus) + if (column >= CatalogModelColumns::TranslationStatus) return QVariant(); - else if (index.column() == Source || index.column() == Target) { - QString str = index.column() == Source ? m_catalog->msgidWithPlurals(index.row(), false) : m_catalog->msgstrWithPlurals(index.row(), false); + else if (column == CatalogModelColumns::Source || column == CatalogModelColumns::Target) { + QString str = column == CatalogModelColumns::Source ? m_catalog->msgidWithPlurals(index.row(), false) : m_catalog->msgstrWithPlurals(index.row(), false); return m_ignoreAccel ? str.remove(Project::instance()->accel()) : str; } role = Qt::DisplayRole; @@ -170,27 +184,28 @@ - switch (index.column()) { - case Key: return index.row() + 1; - case Source: - return m_catalog->msgidWithPlurals(index.row(), true); - case Target: - return m_catalog->msgstrWithPlurals(index.row(), true); - case Notes: { - QString result; - foreach (const Note ¬e, m_catalog->notes(index.row())) - result += note.content; - return result; - } - case Context: return m_catalog->context(index.row()); - case TranslationStatus: - static QString statuses[] = {i18nc("@info:status 'non-fuzzy' in gettext terminology", "Ready"), - i18nc("@info:status 'fuzzy' in gettext terminology", "Needs review"), - i18nc("@info:status", "Untranslated") - }; - if (m_catalog->isEmpty(index.row())) - return statuses[2]; - return statuses[!m_catalog->isApproved(index.row())]; + switch (column) { + case CatalogModelColumns::Key: + return index.row() + 1; + case CatalogModelColumns::Source: + return m_catalog->msgidWithPlurals(index.row(), true); + case CatalogModelColumns::Target: + return m_catalog->msgstrWithPlurals(index.row(), true); + case CatalogModelColumns::Notes: { + QString result; + foreach (const Note ¬e, m_catalog->notes(index.row())) + result += note.content; + return result; + } + case CatalogModelColumns::Context: return m_catalog->context(index.row()); + case CatalogModelColumns::TranslationStatus: + static QString statuses[] = {i18nc("@info:status 'non-fuzzy' in gettext terminology", "Ready"), + i18nc("@info:status 'fuzzy' in gettext terminology", "Needs review"), + i18nc("@info:status", "Untranslated") + }; + if (m_catalog->isEmpty(index.row())) + return statuses[2]; + return statuses[!m_catalog->isApproved(index.row())]; } return QVariant(); } @@ -247,19 +262,19 @@ int filerOptions = m_filterOptions; bool accepts = true; if (bool(filerOptions & Ready) != bool(filerOptions & NotReady)) { - bool ready = sourceModel()->index(source_row, CatalogTreeModel::TranslationStatus, source_parent).data(Qt::UserRole).toBool(); + bool ready = sourceModel()->index(source_row, static_cast(CatalogTreeModel::CatalogModelColumns::TranslationStatus), source_parent).data(Qt::UserRole).toBool(); accepts = (ready == bool(filerOptions & Ready) || ready != bool(filerOptions & NotReady)); } if (accepts && bool(filerOptions & NonEmpty) != bool(filerOptions & Empty)) { - bool untr = sourceModel()->index(source_row, CatalogTreeModel::IsEmpty, source_parent).data(Qt::UserRole).toBool(); + bool untr = sourceModel()->index(source_row, static_cast(CatalogTreeModel::CatalogModelColumns::IsEmpty), source_parent).data(Qt::UserRole).toBool(); accepts = (untr == bool(filerOptions & Empty) || untr != bool(filerOptions & NonEmpty)); } if (accepts && bool(filerOptions & Modified) != bool(filerOptions & NonModified)) { - bool modified = sourceModel()->index(source_row, CatalogTreeModel::IsModified, source_parent).data(Qt::UserRole).toBool(); + bool modified = sourceModel()->index(source_row, static_cast(CatalogTreeModel::CatalogModelColumns::IsModified), source_parent).data(Qt::UserRole).toBool(); accepts = (modified == bool(filerOptions & Modified) || modified != bool(filerOptions & NonModified)); } if (accepts && bool(filerOptions & Plural) != bool(filerOptions & NonPlural)) { - bool modified = sourceModel()->index(source_row, CatalogTreeModel::IsPlural, source_parent).data(Qt::UserRole).toBool(); + bool modified = sourceModel()->index(source_row, static_cast(CatalogTreeModel::CatalogModelColumns::IsPlural), source_parent).data(Qt::UserRole).toBool(); accepts = (modified == bool(filerOptions & Plural) || modified != bool(filerOptions & NonPlural)); } @@ -283,7 +298,7 @@ } if (accepts && (filerOptions & STATES) != STATES) { - int state = sourceModel()->index(source_row, CatalogTreeModel::State, source_parent).data(Qt::UserRole).toInt(); + int state = sourceModel()->index(source_row, static_cast(CatalogTreeModel::CatalogModelColumns::State), source_parent).data(Qt::UserRole).toInt(); accepts = (filerOptions & (1 << (state + FIRSTSTATEPOSITION))); }