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);