diff --git a/GoogleWebTranslator.cpp b/GoogleWebTranslator.cpp index aeb42e8..f5127f9 100644 --- a/GoogleWebTranslator.cpp +++ b/GoogleWebTranslator.cpp @@ -87,6 +87,8 @@ void GoogleWebTranslator::load (const ProcessingItem &item) { emit error (tr ("Неверные парметры для перевода.")); 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); } diff --git a/Manager.cpp b/Manager.cpp index d884264..7c23659 100644 --- a/Manager.cpp +++ b/Manager.cpp @@ -71,6 +71,8 @@ Manager::Manager (QObject *parent) : connect (this, SIGNAL (settingsEdited ()), resultDialog_, SLOT (applySettings ())); connect (resultDialog_, SIGNAL (requestRecognize (ProcessingItem)), this, SIGNAL (requestRecognize (ProcessingItem))); + connect (resultDialog_, SIGNAL (requestTranslate (ProcessingItem)), + this, SIGNAL (requestTranslate (ProcessingItem))); connect (resultDialog_, SIGNAL (requestClipboard ()), SLOT (copyLastToClipboard ())); diff --git a/ProcessingItem.h b/ProcessingItem.h index 7d6ca8c..d2dc272 100644 --- a/ProcessingItem.h +++ b/ProcessingItem.h @@ -11,6 +11,7 @@ struct ProcessingItem { QString ocrLanguage; QString sourceLanguage; + QString translateLanguage; Qt::KeyboardModifiers modifiers; diff --git a/ResultDialog.cpp b/ResultDialog.cpp index 81ea1ed..3d90eac 100644 --- a/ResultDialog.cpp +++ b/ResultDialog.cpp @@ -11,7 +11,8 @@ ResultDialog::ResultDialog (const LanguageHelper &dictionary, QWidget *parent) : QDialog (parent), ui (new Ui::ResultDialog), dictionary_ (dictionary), isShowAtCapturePos_ (true), - contextMenu_ (NULL), recognizeSubMenu_ (NULL), clipboardAction_ (NULL) { + contextMenu_ (NULL), recognizeSubMenu_ (NULL), translateSubMenu_ (NULL), + clipboardAction_ (NULL) { ui->setupUi (this); setWindowFlags (Qt::FramelessWindowHint | Qt::NoDropShadowWindowHint | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); @@ -32,11 +33,13 @@ const ProcessingItem &ResultDialog::item () const { void ResultDialog::applySettings () { dictionary_.updateMenu (recognizeSubMenu_, dictionary_.availableOcrLanguagesUi ()); + dictionary_.updateMenu (translateSubMenu_, dictionary_.translateLanguagesUi ()); } void ResultDialog::createContextMenu () { contextMenu_ = new QMenu (); recognizeSubMenu_ = contextMenu_->addMenu (tr ("Распознать другой язык")); + translateSubMenu_ = contextMenu_->addMenu (tr ("Перевести на другой язык")); clipboardAction_ = contextMenu_->addAction (tr ("Скопировать в буфер")); } @@ -52,6 +55,12 @@ bool ResultDialog::eventFilter (QObject *object, QEvent *event) { item.ocrLanguage = dictionary_.ocrUiToCode (action->text ()); emit requestRecognize (item); } + else if (translateSubMenu_->findChildren ().contains (action)) { + ProcessingItem item = item_; + item.translated.clear (); + item.translateLanguage = dictionary_.translateUiToCode (action->text ()); + emit requestTranslate (item); + } else if (action == clipboardAction_) { emit requestClipboard (); } diff --git a/ResultDialog.h b/ResultDialog.h index 911c765..cda4a12 100644 --- a/ResultDialog.h +++ b/ResultDialog.h @@ -20,6 +20,7 @@ class ResultDialog : public QDialog { signals: void requestRecognize (ProcessingItem item); + void requestTranslate (ProcessingItem item); void requestClipboard (); // Assume that slot will be called immediately. public: @@ -39,6 +40,7 @@ class ResultDialog : public QDialog { bool isShowAtCapturePos_; QMenu *contextMenu_; QMenu *recognizeSubMenu_; + QMenu *translateSubMenu_; QAction *clipboardAction_; ProcessingItem item_; }; diff --git a/Translator.cpp b/Translator.cpp index 399d21d..ac7d5f1 100644 --- a/Translator.cpp +++ b/Translator.cpp @@ -55,7 +55,9 @@ void Translator::translate (ProcessingItem item) { emit error (tr ("Неверные парметры для перевода.")); 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)); items_.insert (reply, item); }