Added ability to correct recognized text.

This commit is contained in:
Gres 2015-10-01 20:49:53 +03:00
parent 381df69650
commit f3c4f1c5b5
4 changed files with 23 additions and 1 deletions

View File

@ -10,6 +10,7 @@
#include <QSettings> #include <QSettings>
#include <QClipboard> #include <QClipboard>
#include <QMessageBox> #include <QMessageBox>
#include <QInputDialog>
#include "Settings.h" #include "Settings.h"
#include "SettingsEditor.h" #include "SettingsEditor.h"
@ -74,6 +75,8 @@ Manager::Manager (QObject *parent) :
connect (resultDialog_, SIGNAL (requestTranslate (ProcessingItem)), connect (resultDialog_, SIGNAL (requestTranslate (ProcessingItem)),
this, SIGNAL (requestTranslate (ProcessingItem))); this, SIGNAL (requestTranslate (ProcessingItem)));
connect (resultDialog_, SIGNAL (requestClipboard ()), SLOT (copyLastToClipboard ())); connect (resultDialog_, SIGNAL (requestClipboard ()), SLOT (copyLastToClipboard ()));
connect (resultDialog_, SIGNAL (requestEdition (ProcessingItem)),
this, SLOT (editRecognized (ProcessingItem)));
connect (trayIcon_, SIGNAL (activated (QSystemTrayIcon::ActivationReason)), 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 () { void Manager::showLast () {
const ProcessingItem &item = resultDialog_->item (); const ProcessingItem &item = resultDialog_->item ();
if (item.isValid ()) { if (item.isValid ()) {

View File

@ -41,6 +41,7 @@ class Manager : public QObject {
void processTrayAction (QSystemTrayIcon::ActivationReason reason); void processTrayAction (QSystemTrayIcon::ActivationReason reason);
void editRecognized (ProcessingItem item);
void handleSelection (ProcessingItem item); void handleSelection (ProcessingItem item);
void showResult (ProcessingItem item); void showResult (ProcessingItem item);
void showError (QString text); void showError (QString text);

View File

@ -12,7 +12,7 @@ ResultDialog::ResultDialog (const LanguageHelper &dictionary, QWidget *parent) :
ui (new Ui::ResultDialog), ui (new Ui::ResultDialog),
dictionary_ (dictionary), dictionary_ (dictionary),
contextMenu_ (NULL), recognizeSubMenu_ (NULL), translateSubMenu_ (NULL), contextMenu_ (NULL), recognizeSubMenu_ (NULL), translateSubMenu_ (NULL),
clipboardAction_ (NULL) { clipboardAction_ (NULL), correctAction_ (NULL) {
ui->setupUi (this); ui->setupUi (this);
setWindowFlags (Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint | setWindowFlags (Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint |
Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint);
@ -41,6 +41,7 @@ void ResultDialog::createContextMenu () {
recognizeSubMenu_ = contextMenu_->addMenu (tr ("Распознать другой язык")); recognizeSubMenu_ = contextMenu_->addMenu (tr ("Распознать другой язык"));
translateSubMenu_ = contextMenu_->addMenu (tr ("Перевести на другой язык")); translateSubMenu_ = contextMenu_->addMenu (tr ("Перевести на другой язык"));
clipboardAction_ = contextMenu_->addAction (tr ("Скопировать в буфер")); clipboardAction_ = contextMenu_->addAction (tr ("Скопировать в буфер"));
correctAction_ = contextMenu_->addAction (tr ("Исправить распознанный текст"));
} }
bool ResultDialog::eventFilter (QObject *object, QEvent *event) { bool ResultDialog::eventFilter (QObject *object, QEvent *event) {
@ -64,6 +65,11 @@ bool ResultDialog::eventFilter (QObject *object, QEvent *event) {
else if (action == clipboardAction_) { else if (action == clipboardAction_) {
emit requestClipboard (); emit requestClipboard ();
} }
else if (action == correctAction_) {
emit requestEdition (item_);
// Return because Manager calls showResult() before hide() otherwise.
return QDialog::eventFilter (object, event);
}
} }
hide (); hide ();
} }

View File

@ -22,6 +22,7 @@ class ResultDialog : public QDialog {
void requestRecognize (ProcessingItem item); void requestRecognize (ProcessingItem item);
void requestTranslate (ProcessingItem item); void requestTranslate (ProcessingItem item);
void requestClipboard (); // Assume that slot will be called immediately. void requestClipboard (); // Assume that slot will be called immediately.
void requestEdition (ProcessingItem item);
public: public:
const ProcessingItem &item () const; const ProcessingItem &item () const;
@ -41,6 +42,7 @@ class ResultDialog : public QDialog {
QMenu *recognizeSubMenu_; QMenu *recognizeSubMenu_;
QMenu *translateSubMenu_; QMenu *translateSubMenu_;
QAction *clipboardAction_; QAction *clipboardAction_;
QAction *correctAction_;
ProcessingItem item_; ProcessingItem item_;
}; };