Added ability to repeat image recognition with another OCR language from ResultDialog.

This commit is contained in:
Gres 2015-09-30 20:38:55 +03:00
parent 5b166cba4c
commit 1f5d6c73bd
3 changed files with 53 additions and 6 deletions

View File

@ -25,7 +25,7 @@ Manager::Manager (QObject *parent) :
QObject (parent), QObject (parent),
trayIcon_ (new QSystemTrayIcon (QIcon (":/images/icon.png"), this)), trayIcon_ (new QSystemTrayIcon (QIcon (":/images/icon.png"), this)),
dictionary_ (new LanguageHelper), dictionary_ (new LanguageHelper),
resultDialog_ (new ResultDialog), resultDialog_ (new ResultDialog (*dictionary_)),
captureAction_ (NULL), repeatCaptureAction_ (NULL), captureAction_ (NULL), repeatCaptureAction_ (NULL),
repeatAction_ (NULL), clipboardAction_ (NULL), repeatAction_ (NULL), clipboardAction_ (NULL),
useResultDialog_ (true) { useResultDialog_ (true) {
@ -66,7 +66,11 @@ Manager::Manager (QObject *parent) :
connect (qApp, SIGNAL (aboutToQuit ()), translatorThread, SLOT (quit ())); connect (qApp, SIGNAL (aboutToQuit ()), translatorThread, SLOT (quit ()));
connect (this, SIGNAL (settingsEdited ()), this, SLOT (applySettings ())); connect (this, SIGNAL (settingsEdited ()), this, SLOT (applySettings ()));
resultDialog_->setWindowIcon (trayIcon_->icon ()); resultDialog_->setWindowIcon (trayIcon_->icon ());
connect (this, SIGNAL (settingsEdited ()), resultDialog_, SLOT (applySettings ()));
connect (resultDialog_, SIGNAL (requestRecognize (ProcessingItem)),
this, SIGNAL (requestRecognize (ProcessingItem)));
connect (trayIcon_, SIGNAL (activated (QSystemTrayIcon::ActivationReason)), connect (trayIcon_, SIGNAL (activated (QSystemTrayIcon::ActivationReason)),

View File

@ -1,28 +1,57 @@
#include "ResultDialog.h" #include "ResultDialog.h"
#include "ui_ResultDialog.h" #include "ui_ResultDialog.h"
#include "StAssert.h" #include "StAssert.h"
#include "LanguageHelper.h"
#include <QDesktopWidget> #include <QDesktopWidget>
#include <QMouseEvent>
#include <QMenu>
ResultDialog::ResultDialog (QWidget *parent) : ResultDialog::ResultDialog (const LanguageHelper &dictionary, QWidget *parent) :
QDialog (parent), QDialog (parent),
ui (new Ui::ResultDialog), ui (new Ui::ResultDialog),
isShowAtCapturePos_ (true) { dictionary_ (dictionary), isShowAtCapturePos_ (true),
contextMenu_ (NULL), recognizeSubMenu_ (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);
installEventFilter (this); installEventFilter (this);
createContextMenu ();
applySettings ();
} }
ResultDialog::~ResultDialog () { ResultDialog::~ResultDialog () {
delete contextMenu_;
delete ui; delete ui;
} }
void ResultDialog::applySettings () {
dictionary_.updateMenu (recognizeSubMenu_, dictionary_.availableOcrLanguagesUi ());
}
void ResultDialog::createContextMenu () {
contextMenu_ = new QMenu ();
recognizeSubMenu_ = contextMenu_->addMenu (tr ("Распознать другой язык"));
}
bool ResultDialog::eventFilter (QObject *object, QEvent *event) { bool ResultDialog::eventFilter (QObject *object, QEvent *event) {
Q_UNUSED (object); Q_UNUSED (object);
if (event->type () == QEvent::MouseButtonRelease || if (event->type () == QEvent::MouseButtonPress) {
event->type () == QEvent::WindowDeactivate) { Qt::MouseButton button = static_cast<QMouseEvent *>(event)->button ();
if (button == Qt::RightButton) {
QAction *action = contextMenu_->exec (QCursor::pos ());
QWidget *subMenu = action->parentWidget ();
if (recognizeSubMenu_->isAncestorOf (subMenu)) {
ProcessingItem item = lastItem_;
item.translated = item.recognized = QString ();
item.ocrLanguage = dictionary_.ocrUiToCode (action->text ());
emit requestRecognize (item);
}
}
hide ();
}
else if (event->type () == QEvent::WindowDeactivate) {
hide (); hide ();
} }
return QDialog::eventFilter (object, event); return QDialog::eventFilter (object, event);
@ -30,6 +59,7 @@ bool ResultDialog::eventFilter (QObject *object, QEvent *event) {
void ResultDialog::showResult (ProcessingItem item) { void ResultDialog::showResult (ProcessingItem item) {
ST_ASSERT (item.isValid ()); ST_ASSERT (item.isValid ());
lastItem_ = item;
ui->sourceLabel->setPixmap (item.source); ui->sourceLabel->setPixmap (item.source);
ui->recognizeLabel->setText (item.recognized); ui->recognizeLabel->setText (item.recognized);
ui->translateLabel->setText (item.translated); ui->translateLabel->setText (item.translated);

View File

@ -2,29 +2,42 @@
#define RESULTDIALOG_H #define RESULTDIALOG_H
#include <QDialog> #include <QDialog>
#include <QMenu>
#include "ProcessingItem.h" #include "ProcessingItem.h"
namespace Ui { namespace Ui {
class ResultDialog; class ResultDialog;
} }
class LanguageHelper;
class ResultDialog : public QDialog { class ResultDialog : public QDialog {
Q_OBJECT Q_OBJECT
public: public:
explicit ResultDialog (QWidget *parent = 0); explicit ResultDialog (const LanguageHelper &dictionary, QWidget *parent = 0);
~ResultDialog (); ~ResultDialog ();
signals:
void requestRecognize (ProcessingItem item);
public: public:
bool eventFilter (QObject *object, QEvent *event); bool eventFilter (QObject *object, QEvent *event);
public slots: public slots:
void showResult (ProcessingItem item); void showResult (ProcessingItem item);
void applySettings ();
private:
void createContextMenu ();
private: private:
Ui::ResultDialog *ui; Ui::ResultDialog *ui;
const LanguageHelper &dictionary_;
bool isShowAtCapturePos_; bool isShowAtCapturePos_;
QMenu *contextMenu_;
QMenu *recognizeSubMenu_;
ProcessingItem lastItem_;
}; };
#endif // RESULTDIALOG_H #endif // RESULTDIALOG_H