From 5b166cba4cac3e8c439d0acf38eb1a060b302dd5 Mon Sep 17 00:00:00 2001 From: Gres Date: Wed, 30 Sep 2015 20:20:33 +0300 Subject: [PATCH] Update languages menu moved to LanguageHelper from SelectionDialog. --- LanguageHelper.cpp | 33 +++++++++++++++++++++++++++++++++ LanguageHelper.h | 4 ++++ Manager.cpp | 2 +- SelectionDialog.cpp | 37 +++---------------------------------- SelectionDialog.h | 2 +- 5 files changed, 42 insertions(+), 36 deletions(-) diff --git a/LanguageHelper.cpp b/LanguageHelper.cpp index fac4813..0f55977 100644 --- a/LanguageHelper.cpp +++ b/LanguageHelper.cpp @@ -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"); diff --git a/LanguageHelper.h b/LanguageHelper.h index c602e59..be8d7f7 100644 --- a/LanguageHelper.h +++ b/LanguageHelper.h @@ -3,6 +3,7 @@ #include #include +#include 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 (); diff --git a/Manager.cpp b/Manager.cpp index ecbbfec..8ca61bb 100644 --- a/Manager.cpp +++ b/Manager.cpp @@ -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 ())); diff --git a/SelectionDialog.cpp b/SelectionDialog.cpp index 3bbc9e8..ec63fce 100644 --- a/SelectionDialog.cpp +++ b/SelectionDialog.cpp @@ -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) { diff --git a/SelectionDialog.h b/SelectionDialog.h index 1d3c814..58dda6c 100644 --- a/SelectionDialog.h +++ b/SelectionDialog.h @@ -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;