From f3c4f1c5b5625c1d1305bfd00fa2c29e045df339 Mon Sep 17 00:00:00 2001 From: Gres Date: Thu, 1 Oct 2015 20:49:53 +0300 Subject: [PATCH] Added ability to correct recognized text. --- Manager.cpp | 13 +++++++++++++ Manager.h | 1 + ResultDialog.cpp | 8 +++++++- ResultDialog.h | 2 ++ 4 files changed, 23 insertions(+), 1 deletion(-) diff --git a/Manager.cpp b/Manager.cpp index 7c23659..94ebd7b 100644 --- a/Manager.cpp +++ b/Manager.cpp @@ -10,6 +10,7 @@ #include #include #include +#include #include "Settings.h" #include "SettingsEditor.h" @@ -74,6 +75,8 @@ Manager::Manager (QObject *parent) : connect (resultDialog_, SIGNAL (requestTranslate (ProcessingItem)), this, SIGNAL (requestTranslate (ProcessingItem))); connect (resultDialog_, SIGNAL (requestClipboard ()), SLOT (copyLastToClipboard ())); + connect (resultDialog_, SIGNAL (requestEdition (ProcessingItem)), + this, SLOT (editRecognized (ProcessingItem))); connect (trayIcon_, SIGNAL (activated (QSystemTrayIcon::ActivationReason)), @@ -272,6 +275,16 @@ void Manager::processTrayAction (QSystemTrayIcon::ActivationReason reason) { } } +void Manager::editRecognized (ProcessingItem item) { + ST_ASSERT (item.isValid ()); + QString fixed = QInputDialog::getMultiLineText ( + NULL, tr ("Правка"), tr ("Исправьте распознанный текст"), item.recognized); + if (!fixed.isEmpty ()) { + item.recognized = fixed; + showResult (item); + } +} + void Manager::showLast () { const ProcessingItem &item = resultDialog_->item (); if (item.isValid ()) { diff --git a/Manager.h b/Manager.h index 184a503..ceb84be 100644 --- a/Manager.h +++ b/Manager.h @@ -41,6 +41,7 @@ class Manager : public QObject { void processTrayAction (QSystemTrayIcon::ActivationReason reason); + void editRecognized (ProcessingItem item); void handleSelection (ProcessingItem item); void showResult (ProcessingItem item); void showError (QString text); diff --git a/ResultDialog.cpp b/ResultDialog.cpp index 7145ccc..747cf00 100644 --- a/ResultDialog.cpp +++ b/ResultDialog.cpp @@ -12,7 +12,7 @@ ResultDialog::ResultDialog (const LanguageHelper &dictionary, QWidget *parent) : ui (new Ui::ResultDialog), dictionary_ (dictionary), contextMenu_ (NULL), recognizeSubMenu_ (NULL), translateSubMenu_ (NULL), - clipboardAction_ (NULL) { + clipboardAction_ (NULL), correctAction_ (NULL) { ui->setupUi (this); setWindowFlags (Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); @@ -41,6 +41,7 @@ void ResultDialog::createContextMenu () { recognizeSubMenu_ = contextMenu_->addMenu (tr ("Распознать другой язык")); translateSubMenu_ = contextMenu_->addMenu (tr ("Перевести на другой язык")); clipboardAction_ = contextMenu_->addAction (tr ("Скопировать в буфер")); + correctAction_ = contextMenu_->addAction (tr ("Исправить распознанный текст")); } bool ResultDialog::eventFilter (QObject *object, QEvent *event) { @@ -64,6 +65,11 @@ bool ResultDialog::eventFilter (QObject *object, QEvent *event) { else if (action == clipboardAction_) { emit requestClipboard (); } + else if (action == correctAction_) { + emit requestEdition (item_); + // Return because Manager calls showResult() before hide() otherwise. + return QDialog::eventFilter (object, event); + } } hide (); } diff --git a/ResultDialog.h b/ResultDialog.h index e3edd0a..6574d7e 100644 --- a/ResultDialog.h +++ b/ResultDialog.h @@ -22,6 +22,7 @@ class ResultDialog : public QDialog { void requestRecognize (ProcessingItem item); void requestTranslate (ProcessingItem item); void requestClipboard (); // Assume that slot will be called immediately. + void requestEdition (ProcessingItem item); public: const ProcessingItem &item () const; @@ -41,6 +42,7 @@ class ResultDialog : public QDialog { QMenu *recognizeSubMenu_; QMenu *translateSubMenu_; QAction *clipboardAction_; + QAction *correctAction_; ProcessingItem item_; };