From 86d5ee3aa68963ed0e41414bc7e6d012ba470891 Mon Sep 17 00:00:00 2001 From: Gres Date: Fri, 6 Mar 2020 20:08:41 +0300 Subject: [PATCH] Show current page's url and load images option --- README.md | 5 +++ recources.qrc | 2 + share/images/loadImages.png | Bin 0 -> 894 bytes share/images/loadImages@2x.png | Bin 0 -> 1672 bytes src/translate/translator.cpp | 74 ++++++++++++++++++++++++++++++--- src/translate/translator.h | 8 +++- src/translate/webpage.cpp | 12 +++++- src/translate/webpage.h | 3 ++ 8 files changed, 96 insertions(+), 8 deletions(-) create mode 100644 share/images/loadImages.png create mode 100644 share/images/loadImages@2x.png 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 0000000000000000000000000000000000000000..ac3932fc313e68f8a2e926beafe335d3c857f15f GIT binary patch literal 894 zcmV-^1A+XBP)l-JtvM8{c|!z~tNlmKoM*N1OanP zD;S=bM*qmT!fHdc>&-5{3{f~0E7nr=-e$RNc_?q(O z-ugtGxbsA4&5Q0n**|ATL1t607*qoM6N<$f@-e2@c;k- literal 0 HcmV?d00001 diff --git a/share/images/loadImages@2x.png b/share/images/loadImages@2x.png new file mode 100644 index 0000000000000000000000000000000000000000..ef6d1b4cb79e157f9f1a5f095fdae2ad888e7204 GIT binary patch literal 1672 zcmV;326y?1P)k|pasfL6_8c|B!IOsCC&0o| z2QQW%g|zkn#wGjFeB&^pg3e;s5iJl9?0XL5;{BMAJjuOF$A|9<&V|>QnK^dO${upQcR?l3s1^n-b5x(GUM+5WnzE~Ih(%3?C1$@=bcGd8V z_r|&4Cl;2PC*a!-HZv z$Jeui@x}58eECxNx)OeFYC*$1HDC6yBWH&|1pL*|3STV@rQs>-O8AX|Ih|<|WNUoR z*B<{lW~^QTf3UX0mrBA}@O35p;i4J6+O`~?@u@%u{Og3VdIbF1)frzbQwCmF!e7pr z;)78v{Pywj5J&v|w8^U|fXv=c13exNx~_!ZS=r*l5l-74oGxz;y z9~N%o63Cc*F49$H0w|vdaZ;@Sdd+=1C4hwzoCNY>RGol-T(rQ~bAnkIK}t}WfWH`7 z<10nVYfi8dR3hN_Hum^Zsq&f=umlwd_?5dee*i&AP=NsY#QaH+@|sh*gwIF1ZSKlT z^u+rTTva3BzsF7R{a9aBhUS+L;l>{}$rHOvieP%}9(?XLAi2691tJ-8>c$Z9dqXs4(BDY z4XI7S7bD$qvZ9K7!lTMyc`psYEw&2g-dVU{9fczoy>ZGY2!_r{un#Rp-u+G#J|v>D zQHHMJrw}0N?ZwTeCbe;+sTn1b2cP)0mT_cNR%7>ZN9;Okzb553Y9Z>M#wCe-2?@kIFH-u#8*n6H1AZ`FF7Eh_SE* zbd&JKl2o`A@f$N@{^yLU&6zsYaX;I0k&>& zc)Xg1XPAWLe6iwB1SUZJxW<$yXP&kF!{r;2xhVm$$tB>c7rLjI1Zkc~{y8GRI9%OW z`KFb!_Uw_(fv*Zn?`%rIjXQPVtHq^dTxlMse~Vt1_c^ktog#_!=VU{R1hfp#g0H4$ z=5Wr)Z$sft?ZUCRxCFkU-9@`>MSxi5z>!5L=(8>u7@r4U)r#A&=eWa~;SZj6L3i&E z_==t@^n6+QJ7Rf>J@8tNEP^3lBuk{5qYoIx%p&-zwY?AemchK?EgYlJKQOv#>tAmj zXY=2jS1o%tf#b*`7_N47yqS!|3v`nejS9%8`6bNHFW|+RW@P4HLr`Qca*J=GM%0QW z5|Xdx7MF3mL-`;Y&zFpSmB3NxA}mB>pCFrTWj8{XbPii7Iq9UzCIt&WT_BSFjlePJ zA~=fcyms(y1a2+p z@=TFmC;bLFCl1m_OrcnwLW15dsFM}EGA`1yMAC1rUd8JP+(w{_7PBK@N5IP^?Di%G SY=I{L0000 #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);