Update languages menu moved to LanguageHelper from SelectionDialog.
This commit is contained in:
parent
fb1d25f914
commit
5b166cba4c
@ -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");
|
||||
|
@ -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 ();
|
||||
|
@ -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 ()));
|
||||
|
@ -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) {
|
||||
|
@ -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;
|
||||
|
Loading…
Reference in New Issue
Block a user