Skip to content

Commit

Permalink
Sort tessdata manager entries by label, not file prefix
Browse files Browse the repository at this point in the history
  • Loading branch information
manisandro committed Jan 28, 2022
1 parent 00027dc commit 645fd76
Show file tree
Hide file tree
Showing 2 changed files with 39 additions and 38 deletions.
39 changes: 19 additions & 20 deletions gtk/src/TessdataManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -197,34 +197,33 @@ bool TessdataManager::fetchLanguageList(Glib::ustring& messages) {
}

std::vector<Glib::ustring> availableLanguages = MAIN->getConfig()->getAvailableLanguages();
std::vector<Glib::ustring> languages;
typedef std::pair<Glib::ustring, Glib::ustring> string_pair_t;
std::vector<string_pair_t> languages;
for(auto it : m_languageFiles) {
languages.push_back(it.first);
Config::Lang lang;
lang.prefix = it.first;
if(MAIN->getConfig()->searchLangSpec(lang)) {
languages.push_back(std::make_pair(lang.prefix, lang.name));
} else {
languages.push_back(std::make_pair(lang.prefix, lang.prefix));
}
}
std::sort(languages.begin(), languages.end(), [](const Glib::ustring & s1, const Glib::ustring & s2) {
bool s1Script = s1.substr(0, 6) == "script" || s1.substr(0, 1) == s1.substr(0, 1).uppercase();
bool s2Script = s2.substr(0, 6) == "script" || s2.substr(0, 1) == s2.substr(0, 1).uppercase();
if(s1Script != s2Script) {
return !s1Script;
std::sort(languages.begin(), languages.end(), [](const string_pair_t& p1, const string_pair_t& p2) {
bool p1Script = p1.first.substr(0, 6) == "script" || p1.first.substr(0, 1) == p1.first.substr(0, 1).uppercase();
bool p2Script = p2.first.substr(0, 6) == "script" || p2.first.substr(0, 1) == p2.first.substr(0, 1).uppercase();
if(p1Script != p2Script) {
return !p1Script;
} else {
return s1 < s2;
return p1.second.lowercase() < p2.second.lowercase();
}
});

for(const Glib::ustring& prefix : languages) {
Config::Lang lang;
lang.prefix = prefix;
Glib::ustring label;
if(MAIN->getConfig()->searchLangSpec(lang)) {
label = lang.name;
} else {
label = lang.prefix;
}
for(const string_pair_t& entry : languages) {
Gtk::TreeIter it = m_languageListStore->append();
bool installed = std::find(availableLanguages.begin(), availableLanguages.end(), lang.prefix) != availableLanguages.end();
bool installed = std::find(availableLanguages.begin(), availableLanguages.end(), entry.first) != availableLanguages.end();
(*it)[m_viewCols.selected] = installed;
(*it)[m_viewCols.label] = label;
(*it)[m_viewCols.prefix] = lang.prefix;
(*it)[m_viewCols.label] = entry.second;
(*it)[m_viewCols.prefix] = entry.first;
}
return true;
}
Expand Down
38 changes: 20 additions & 18 deletions qt/src/TessdataManager.cc
Original file line number Diff line number Diff line change
Expand Up @@ -171,29 +171,31 @@ bool TessdataManager::fetchLanguageList(QString& messages) {

QStringList availableLanguages = MAIN->getConfig()->getAvailableLanguages();

QStringList languages = QStringList(m_languageFiles.keys());
std::sort(languages.begin(), languages.end(), [](const QString & s1, const QString & s2) {
bool s1Script = s1.startsWith("script") || s1.left(1) == s1.left(1).toUpper();
bool s2Script = s2.startsWith("script") || s2.left(1) == s2.left(1).toUpper();
if(s1Script != s2Script) {
return !s1Script;
} else {
return s1 < s2;
}
});

for(const QString& prefix : languages) {
typedef QPair<QString, QString> string_pair_t;
QList<string_pair_t> languages;
for(const QString& prefix : m_languageFiles.keys()) {
Config::Lang lang;
lang.prefix = prefix;
QString label;
if(MAIN->getConfig()->searchLangSpec(lang)) {
label = lang.name;
languages.push_back(qMakePair(lang.prefix, lang.name));
} else {
label = lang.prefix;
languages.push_back(qMakePair(lang.prefix, lang.prefix));
}
QListWidgetItem* item = new QListWidgetItem(label);
item->setData(Qt::UserRole, lang.prefix);
item->setCheckState(availableLanguages.contains(lang.prefix) ? Qt::Checked : Qt::Unchecked);
}
std::sort(languages.begin(), languages.end(), [](const string_pair_t& p1, const string_pair_t& p2) {
bool p1Script = p1.first.startsWith("script") || p1.first.left(1) == p1.first.left(1).toUpper();
bool p2Script = p2.first.startsWith("script") || p2.first.left(1) == p2.first.left(1).toUpper();
if(p1Script != p2Script) {
return !p1Script;
} else {
return p1.second.toLower() < p2.second.toLower();
}
});

for(const string_pair_t& entry : languages) {
QListWidgetItem* item = new QListWidgetItem(entry.second);
item->setData(Qt::UserRole, entry.first);
item->setCheckState(availableLanguages.contains(entry.first) ? Qt::Checked : Qt::Unchecked);
m_languageList->addItem(item);
}
return true;
Expand Down

0 comments on commit 645fd76

Please sign in to comment.