Update languages menu moved to LanguageHelper from SelectionDialog.

This commit is contained in:
Gres 2015-09-30 20:20:33 +03:00
parent fb1d25f914
commit 5b166cba4c
5 changed files with 42 additions and 36 deletions

View File

@ -3,6 +3,7 @@
#include "LanguageHelper.h"
#include "Settings.h"
#include "StAssert.h"
LanguageHelper::LanguageHelper () {
init ();
@ -95,6 +96,38 @@ void LanguageHelper::updateAvailableOcrLanguages () {
availableOcrLanguages_ = availableOcrLanguages (tessDataPlace);
}
void LanguageHelper::updateMenu (QMenu *menu, const QStringList &languages, int groupSize) const {
ST_ASSERT (menu != NULL);
menu->clear ();
if (languages.isEmpty ()) {
return;
}
if (languages.size () <= groupSize) {
foreach (const QString &language, languages) {
menu->addAction (language);
}
}
else {
int subIndex = groupSize;
QMenu *subMenu = NULL;
QString prevLetter;
foreach (const QString &language, languages) {
QString curLetter = language.left (1);
if (++subIndex >= groupSize && prevLetter != curLetter) {
if (subMenu != NULL) {
subMenu->setTitle (subMenu->title () + " - " + prevLetter);
}
subMenu = menu->addMenu (curLetter);
subIndex = 0;
}
prevLetter = curLetter;
subMenu->addAction (language);
}
subMenu->setTitle (subMenu->title () + " - " + prevLetter);
}
}
void LanguageHelper::initTranslateLanguages () {
translateLanguages_.insert (QObject::tr ("Afrikaans"),"af");
translateLanguages_.insert (QObject::tr ("Albanian"),"sq");

View File

@ -3,6 +3,7 @@
#include <QMap>
#include <QStringList>
#include <QMenu>
class LanguageHelper {
public:
@ -22,6 +23,9 @@ class LanguageHelper {
void updateAvailableOcrLanguages ();
//! Update languages menu. Group items into submenus if needed.
void updateMenu (QMenu *menu, const QStringList &languages, int groupSize = 10) const;
private:
QStringList availableOcrLanguages (const QString &path) const;
void init ();

View File

@ -187,7 +187,7 @@ void Manager::capture () {
SelectionDialog *selection = new SelectionDialog (*dictionary_);
selection->setWindowIcon (trayIcon_->icon ());
connect (this, SIGNAL (closeSelections ()), selection, SLOT (close ()));
connect (this, SIGNAL (settingsEdited ()), selection, SLOT (updateMenu ()));
connect (this, SIGNAL (settingsEdited ()), selection, SLOT (applySettings ()));
connect (selection, SIGNAL (selected (ProcessingItem)),
SLOT (handleSelection (ProcessingItem)));
connect (selection, SIGNAL (rejected ()), SIGNAL (closeSelections ()));

View File

@ -19,46 +19,15 @@ SelectionDialog::SelectionDialog (const LanguageHelper &dictionary, QWidget *par
ui->label->setAutoFillBackground (false);
ui->label->installEventFilter (this);
updateMenu ();
applySettings ();
}
SelectionDialog::~SelectionDialog () {
delete ui;
}
void SelectionDialog::updateMenu () {
Q_CHECK_PTR (languageMenu_);
languageMenu_->clear ();
QStringList languages = dictionary_.availableOcrLanguagesUi ();
if (languages.isEmpty ()) {
return;
}
const int max = 10;
if (languages.size () <= max) {
foreach (const QString &language, languages) {
languageMenu_->addAction (language);
}
}
else {
int subIndex = max;
QMenu *subMenu = NULL;
QString prevLetter;
foreach (const QString &language, languages) {
QString curLetter = language.left (1);
if (++subIndex >= max && prevLetter != curLetter) {
if (subMenu != NULL) {
subMenu->setTitle (subMenu->title () + " - " + prevLetter);
}
subMenu = languageMenu_->addMenu (curLetter);
subIndex = 0;
}
prevLetter = curLetter;
subMenu->addAction (language);
}
subMenu->setTitle (subMenu->title () + " - " + prevLetter);
}
void SelectionDialog::applySettings () {
dictionary_.updateMenu (languageMenu_, dictionary_.availableOcrLanguagesUi ());
}
bool SelectionDialog::eventFilter (QObject *object, QEvent *event) {

View File

@ -28,7 +28,7 @@ class SelectionDialog : public QDialog {
public slots:
//! Show pixmap with given geometry.
void setPixmap (QPixmap pixmap, const QRect &showGeometry);
void updateMenu ();
void applySettings ();
private:
Ui::SelectionDialog *ui;