diff --git a/README.md b/README.md index cc6f4dc..1b4c03c 100644 --- a/README.md +++ b/README.md @@ -44,3 +44,8 @@ Also download [data files](https://github.com/tesseract-ocr/tessdata/tree/3.04.0 * see [Tesseract](https://code.google.com/p/tesseract-ocr/) * see [Leptonica](http://leptonica.com/) * several online translation services + +## Attributions + +* icons made by [Smashicons](https://www.flaticon.com/authors/smashicons) +from [Flaticon](https://www.flaticon.com/) diff --git a/recources.qrc b/recources.qrc index e95ac19..cc0e5c2 100644 --- a/recources.qrc +++ b/recources.qrc @@ -7,5 +7,7 @@ share/images/STIconGreen.png share/images/STIconOrange.png share/images/STIconRed.png + share/images/loadImages.png + share/images/loadImages@2x.png diff --git a/share/images/loadImages.png b/share/images/loadImages.png new file mode 100644 index 0000000..ac3932f Binary files /dev/null and b/share/images/loadImages.png differ diff --git a/share/images/loadImages@2x.png b/share/images/loadImages@2x.png new file mode 100644 index 0000000..ef6d1b4 Binary files /dev/null and b/share/images/loadImages@2x.png differ diff --git a/src/translate/translator.cpp b/src/translate/translator.cpp index 5f3b23d..873b1a0 100644 --- a/src/translate/translator.cpp +++ b/src/translate/translator.cpp @@ -8,9 +8,12 @@ #include #include +#include +#include #include #include #include +#include #include @@ -32,6 +35,9 @@ static std::map loadScripts(const QString &dir, Translator::Translator(Manager &manager) : manager_(manager) , view_(nullptr) + , url_(new QLineEdit(this)) + , loadImages_( + new QAction(QIcon(":/icons/loadImages.png"), tr("Load images"), this)) , tabs_(new QTabWidget(this)) { #ifdef DEVELOP @@ -50,17 +56,35 @@ Translator::Translator(Manager &manager) view_ = new QWebEngineView(this); + auto detailsFrame = new QWidget(this); + { + auto toolBar = new QToolBar(this); + toolBar->addWidget(new QLabel(tr("Url:"), this)); + toolBar->addWidget(url_); + toolBar->addAction(loadImages_); + + auto layout = new QVBoxLayout(detailsFrame); + layout->addWidget(toolBar); + layout->addWidget(tabs_); + } + auto splitter = new QSplitter(Qt::Vertical, this); splitter->addWidget(view_); - splitter->addWidget(tabs_); + splitter->addWidget(detailsFrame); auto layout = new QVBoxLayout(this); layout->addWidget(splitter); startTimer(1000); + url_->setReadOnly(true); + + loadImages_->setCheckable(true); + connect(loadImages_, &QAction::toggled, // + this, &Translator::setPageLoadImages); + connect(tabs_, &QTabWidget::currentChanged, // - this, &Translator::changeCurrentPage); + this, &Translator::udpateCurrentPage); view_->setMinimumSize(200, 200); @@ -80,6 +104,7 @@ void Translator::updateSettings(const Settings &settings) { view_->setPage(nullptr); pages_.clear(); + url_->clear(); tabs_->blockSignals(true); for (auto i = 0, end = tabs_->count(); i < end; ++i) { @@ -114,6 +139,8 @@ void Translator::updateSettings(const Settings &settings) connect(page.get(), &WebPage::log, // log, &QTextEdit::append); + connect(page.get(), &WebPage::urlChanged, // + this, &Translator::updateUrl); SOFT_ASSERT(log->document(), continue) log->document()->setMaximumBlockCount(1000); @@ -126,11 +153,46 @@ void Translator::updateSettings(const Settings &settings) } } -void Translator::changeCurrentPage(int tabIndex) +WebPage *Translator::currentPage() const { - const auto name = tabs_->tabText(tabIndex); - SOFT_ASSERT(pages_.count(name), return ); - view_->setPage(pages_[name].get()); + const auto index = tabs_->currentIndex(); + if (index == -1) + return nullptr; + + const auto name = tabs_->tabText(index); + SOFT_ASSERT(pages_.count(name), return nullptr); + + return pages_.at(name).get(); +} + +void Translator::udpateCurrentPage() +{ + auto page = currentPage(); + if (!page) + return; + + view_->setPage(page); + QSignalBlocker blocker(loadImages_); + loadImages_->setChecked(page->isLoadImages()); + url_->setText(page->url().toString()); +} + +void Translator::updateUrl() +{ + auto page = currentPage(); + if (!page) + return; + + url_->setText(page->url().toString()); +} + +void Translator::setPageLoadImages(bool isOn) +{ + auto page = currentPage(); + if (!page) + return; + + page->setLoadImages(isOn); } void Translator::processQueue() diff --git a/src/translate/translator.h b/src/translate/translator.h index 7c1a7ab..f8b397b 100644 --- a/src/translate/translator.h +++ b/src/translate/translator.h @@ -6,6 +6,7 @@ class QWebEngineView; class QTabWidget; +class QLineEdit; class WebPage; @@ -25,12 +26,17 @@ protected: void closeEvent(QCloseEvent *event) override; private: - void changeCurrentPage(int tabIndex); + WebPage *currentPage() const; + void udpateCurrentPage(); + void updateUrl(); + void setPageLoadImages(bool isOn); void processQueue(); void markTranslated(const TaskPtr &task); Manager &manager_; QWebEngineView *view_; + QLineEdit *url_; + QAction *loadImages_; QTabWidget *tabs_; std::vector queue_; std::map> pages_; diff --git a/src/translate/webpage.cpp b/src/translate/webpage.cpp index 16ef43d..be32744 100644 --- a/src/translate/webpage.cpp +++ b/src/translate/webpage.cpp @@ -24,7 +24,7 @@ WebPage::WebPage(Translator &translator, const QString &script, scheduleWebchannelInitScript(); scheduleTranslatorScript(script, scriptName); - settings()->setAttribute(QWebEngineSettings::AutoLoadImages, false); + setLoadImages(false); auto channel = new QWebChannel(this); channel->registerObject("proxy", proxy_.get()); @@ -140,6 +140,16 @@ TaskPtr WebPage::task() const return task_; } +bool WebPage::isLoadImages() const +{ + return settings()->testAttribute(QWebEngineSettings::AutoLoadImages); +} + +void WebPage::setLoadImages(bool isOn) +{ + settings()->setAttribute(QWebEngineSettings::AutoLoadImages, isOn); +} + void WebPage::javaScriptConsoleMessage( QWebEnginePage::JavaScriptConsoleMessageLevel /*level*/, const QString &message, int lineNumber, const QString &sourceID) diff --git a/src/translate/webpage.h b/src/translate/webpage.h index 8699868..b28a223 100644 --- a/src/translate/webpage.h +++ b/src/translate/webpage.h @@ -24,6 +24,9 @@ public: bool isBusy() const; TaskPtr task() const; + bool isLoadImages() const; + void setLoadImages(bool isOn); + signals: void log(const QString &text);