Added ability to retranslate item from ResultDialog.

This commit is contained in:
Gres 2015-09-30 21:25:45 +03:00
parent f33c0431b9
commit 3e499b86c5
6 changed files with 21 additions and 3 deletions

View File

@ -87,6 +87,8 @@ void GoogleWebTranslator::load (const ProcessingItem &item) {
emit error (tr ("Неверные парметры для перевода.")); emit error (tr ("Неверные парметры для перевода."));
return; return;
} }
QUrl url (QString ("https://translate.google.com/#auto/%1/%2").arg (translationLanguage_, item.recognized)); QString translateLanguage = (item.translateLanguage.isEmpty ())
? translationLanguage_ : item.translateLanguage;
QUrl url (QString ("https://translate.google.com/#auto/%1/%2").arg (translateLanguage, item.recognized));
view_->setUrl (url); view_->setUrl (url);
} }

View File

@ -71,6 +71,8 @@ Manager::Manager (QObject *parent) :
connect (this, SIGNAL (settingsEdited ()), resultDialog_, SLOT (applySettings ())); connect (this, SIGNAL (settingsEdited ()), resultDialog_, SLOT (applySettings ()));
connect (resultDialog_, SIGNAL (requestRecognize (ProcessingItem)), connect (resultDialog_, SIGNAL (requestRecognize (ProcessingItem)),
this, SIGNAL (requestRecognize (ProcessingItem))); this, SIGNAL (requestRecognize (ProcessingItem)));
connect (resultDialog_, SIGNAL (requestTranslate (ProcessingItem)),
this, SIGNAL (requestTranslate (ProcessingItem)));
connect (resultDialog_, SIGNAL (requestClipboard ()), SLOT (copyLastToClipboard ())); connect (resultDialog_, SIGNAL (requestClipboard ()), SLOT (copyLastToClipboard ()));

View File

@ -11,6 +11,7 @@ struct ProcessingItem {
QString ocrLanguage; QString ocrLanguage;
QString sourceLanguage; QString sourceLanguage;
QString translateLanguage;
Qt::KeyboardModifiers modifiers; Qt::KeyboardModifiers modifiers;

View File

@ -11,7 +11,8 @@ ResultDialog::ResultDialog (const LanguageHelper &dictionary, QWidget *parent) :
QDialog (parent), QDialog (parent),
ui (new Ui::ResultDialog), ui (new Ui::ResultDialog),
dictionary_ (dictionary), isShowAtCapturePos_ (true), dictionary_ (dictionary), isShowAtCapturePos_ (true),
contextMenu_ (NULL), recognizeSubMenu_ (NULL), clipboardAction_ (NULL) { contextMenu_ (NULL), recognizeSubMenu_ (NULL), translateSubMenu_ (NULL),
clipboardAction_ (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);
@ -32,11 +33,13 @@ const ProcessingItem &ResultDialog::item () const {
void ResultDialog::applySettings () { void ResultDialog::applySettings () {
dictionary_.updateMenu (recognizeSubMenu_, dictionary_.availableOcrLanguagesUi ()); dictionary_.updateMenu (recognizeSubMenu_, dictionary_.availableOcrLanguagesUi ());
dictionary_.updateMenu (translateSubMenu_, dictionary_.translateLanguagesUi ());
} }
void ResultDialog::createContextMenu () { void ResultDialog::createContextMenu () {
contextMenu_ = new QMenu (); contextMenu_ = new QMenu ();
recognizeSubMenu_ = contextMenu_->addMenu (tr ("Распознать другой язык")); recognizeSubMenu_ = contextMenu_->addMenu (tr ("Распознать другой язык"));
translateSubMenu_ = contextMenu_->addMenu (tr ("Перевести на другой язык"));
clipboardAction_ = contextMenu_->addAction (tr ("Скопировать в буфер")); clipboardAction_ = contextMenu_->addAction (tr ("Скопировать в буфер"));
} }
@ -52,6 +55,12 @@ bool ResultDialog::eventFilter (QObject *object, QEvent *event) {
item.ocrLanguage = dictionary_.ocrUiToCode (action->text ()); item.ocrLanguage = dictionary_.ocrUiToCode (action->text ());
emit requestRecognize (item); emit requestRecognize (item);
} }
else if (translateSubMenu_->findChildren<QAction *> ().contains (action)) {
ProcessingItem item = item_;
item.translated.clear ();
item.translateLanguage = dictionary_.translateUiToCode (action->text ());
emit requestTranslate (item);
}
else if (action == clipboardAction_) { else if (action == clipboardAction_) {
emit requestClipboard (); emit requestClipboard ();
} }

View File

@ -20,6 +20,7 @@ class ResultDialog : public QDialog {
signals: signals:
void requestRecognize (ProcessingItem item); void requestRecognize (ProcessingItem item);
void requestTranslate (ProcessingItem item);
void requestClipboard (); // Assume that slot will be called immediately. void requestClipboard (); // Assume that slot will be called immediately.
public: public:
@ -39,6 +40,7 @@ class ResultDialog : public QDialog {
bool isShowAtCapturePos_; bool isShowAtCapturePos_;
QMenu *contextMenu_; QMenu *contextMenu_;
QMenu *recognizeSubMenu_; QMenu *recognizeSubMenu_;
QMenu *translateSubMenu_;
QAction *clipboardAction_; QAction *clipboardAction_;
ProcessingItem item_; ProcessingItem item_;
}; };

View File

@ -55,7 +55,9 @@ void Translator::translate (ProcessingItem item) {
emit error (tr ("Неверные парметры для перевода.")); emit error (tr ("Неверные парметры для перевода."));
return; return;
} }
QUrl url (translateBaseUrl.arg (item.recognized, sourceLanguage, translationLanguage_)); QString translateLanguage = (item.translateLanguage.isEmpty ())
? translationLanguage_ : item.translateLanguage;
QUrl url (translateBaseUrl.arg (item.recognized, sourceLanguage, translateLanguage));
QNetworkReply *reply = network_.get (QNetworkRequest (url)); QNetworkReply *reply = network_.get (QNetworkRequest (url));
items_.insert (reply, item); items_.insert (reply, item);
} }