mirror of
https://github.com/subsurface/subsurface.git
synced 2024-11-30 22:20:21 +00:00
Start transition from QWebKit to QWebEngine
This removes all references to WebKit if cmake option USE_WEBKIT is enabled. For the user manual it changes it to WebEngine (seems to work for me). Similar for the Facebook connection (minus a reference to a cookie jar). This I could not test at the moment, as I wrote this on a train. Printing does not work, it is a null operation at the moment. Currently, large parts of of the printing code are commented out as there is no direct way to access page elements in WebEngine. It seems this needs to be done via Javascript (with a callback invoked). There is new functionality in WebEngine to render a view to a PDF file but this needs more work (and probably some thoughts towards page breaks). Signed-off-by: Robert C. Helling <helling@atdotde.de>
This commit is contained in:
parent
10b8bda662
commit
529a4d499b
8 changed files with 159 additions and 7 deletions
|
@ -33,6 +33,7 @@ option(NO_USERMANUAL "don't include a viewer for the user manual" OFF)
|
||||||
option(FBSUPPORT "allow posting to Facebook" ON)
|
option(FBSUPPORT "allow posting to Facebook" ON)
|
||||||
option(BTSUPPORT "enable support for QtBluetooth (requires Qt5.4 or newer)" ON)
|
option(BTSUPPORT "enable support for QtBluetooth (requires Qt5.4 or newer)" ON)
|
||||||
option(FTDISUPPORT "enable support for libftdi based serial" OFF)
|
option(FTDISUPPORT "enable support for libftdi based serial" OFF)
|
||||||
|
option(USE_WEBENGINE "Use QWebEngine instead of QWebKit" OFF)
|
||||||
|
|
||||||
# Options regarding What should we build on subsurface
|
# Options regarding What should we build on subsurface
|
||||||
option(MAKE_TESTS "Make the tests" ON)
|
option(MAKE_TESTS "Make the tests" ON)
|
||||||
|
|
|
@ -2,6 +2,13 @@ if(NO_USERMANUAL)
|
||||||
message(STATUS "building without usermanual")
|
message(STATUS "building without usermanual")
|
||||||
add_definitions(-DNO_USERMANUAL)
|
add_definitions(-DNO_USERMANUAL)
|
||||||
else()
|
else()
|
||||||
list(APPEND QT_EXTRA_COMPONENTS WebKitWidgets)
|
if(USE_WEBENGINE)
|
||||||
list(APPEND QT_EXTRA_LIBRARIES Qt5::WebKitWidgets)
|
message(STATUS "building with QWebEngine")
|
||||||
|
list(APPEND QT_EXTRA_COMPONENTS WebEngineWidgets)
|
||||||
|
list(APPEND QT_EXTRA_LIBRARIES Qt5::WebEngineWidgets)
|
||||||
|
add_definitions(-DUSE_WEBENGINE)
|
||||||
|
else()
|
||||||
|
list(APPEND QT_EXTRA_COMPONENTS WebKitWidgets)
|
||||||
|
list(APPEND QT_EXTRA_LIBRARIES Qt5::WebKitWidgets)
|
||||||
|
endif()
|
||||||
endif()
|
endif()
|
||||||
|
|
|
@ -16,8 +16,11 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
#include <QInputDialog>
|
#include <QInputDialog>
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
#include <QWebEngineView>
|
||||||
|
#else
|
||||||
#include <QWebView>
|
#include <QWebView>
|
||||||
|
#endif
|
||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "profile-widget/profilewidget2.h"
|
#include "profile-widget/profilewidget2.h"
|
||||||
|
|
||||||
|
@ -224,14 +227,22 @@ void FacebookManager::sendDive()
|
||||||
FacebookConnectWidget::FacebookConnectWidget(QWidget *parent) : QDialog(parent), ui(new Ui::FacebookConnectWidget) {
|
FacebookConnectWidget::FacebookConnectWidget(QWidget *parent) : QDialog(parent), ui(new Ui::FacebookConnectWidget) {
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
FacebookManager *fb = FacebookManager::instance();
|
FacebookManager *fb = FacebookManager::instance();
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
facebookWebView = new QWebEngineView(this);
|
||||||
|
#else
|
||||||
facebookWebView = new QWebView(this);
|
facebookWebView = new QWebView(this);
|
||||||
|
#endif
|
||||||
ui->fbWebviewContainer->layout()->addWidget(facebookWebView);
|
ui->fbWebviewContainer->layout()->addWidget(facebookWebView);
|
||||||
if (fb->loggedIn()) {
|
if (fb->loggedIn()) {
|
||||||
facebookLoggedIn();
|
facebookLoggedIn();
|
||||||
} else {
|
} else {
|
||||||
facebookDisconnect();
|
facebookDisconnect();
|
||||||
}
|
}
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
connect(facebookWebView, &QWebEngineView::urlChanged, fb, &FacebookManager::tryLogin);
|
||||||
|
#else
|
||||||
connect(facebookWebView, &QWebView::urlChanged, fb, &FacebookManager::tryLogin);
|
connect(facebookWebView, &QWebView::urlChanged, fb, &FacebookManager::tryLogin);
|
||||||
|
#endif
|
||||||
connect(fb, &FacebookManager::justLoggedIn, this, &FacebookConnectWidget::facebookLoggedIn);
|
connect(fb, &FacebookManager::justLoggedIn, this, &FacebookConnectWidget::facebookLoggedIn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -250,7 +261,11 @@ void FacebookConnectWidget::facebookDisconnect()
|
||||||
ui->fbWebviewContainer->setEnabled(true);
|
ui->fbWebviewContainer->setEnabled(true);
|
||||||
ui->FBLabel->setText(tr("To connect to Facebook, please log in. This enables Subsurface to publish dives to your timeline"));
|
ui->FBLabel->setText(tr("To connect to Facebook, please log in. This enables Subsurface to publish dives to your timeline"));
|
||||||
if (facebookWebView) {
|
if (facebookWebView) {
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
//FIX ME
|
||||||
|
#else
|
||||||
facebookWebView->page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar());
|
facebookWebView->page()->networkAccessManager()->setCookieJar(new QNetworkCookieJar());
|
||||||
|
#endif
|
||||||
facebookWebView->setUrl(FacebookManager::instance()->connectUrl());
|
facebookWebView->setUrl(FacebookManager::instance()->connectUrl());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,11 @@
|
||||||
#define FACEBOOKCONNECTWIDGET_H
|
#define FACEBOOKCONNECTWIDGET_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
class QWebEngineView;
|
||||||
|
#else
|
||||||
class QWebView;
|
class QWebView;
|
||||||
|
#endif
|
||||||
namespace Ui {
|
namespace Ui {
|
||||||
class FacebookConnectWidget;
|
class FacebookConnectWidget;
|
||||||
class SocialnetworksDialog;
|
class SocialnetworksDialog;
|
||||||
|
@ -41,7 +45,11 @@ public:
|
||||||
void facebookDisconnect();
|
void facebookDisconnect();
|
||||||
private:
|
private:
|
||||||
Ui::FacebookConnectWidget *ui;
|
Ui::FacebookConnectWidget *ui;
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
QWebEngineView *facebookWebView;
|
||||||
|
#else
|
||||||
QWebView *facebookWebView;
|
QWebView *facebookWebView;
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
|
|
||||||
class SocialNetworkDialog : public QDialog {
|
class SocialNetworkDialog : public QDialog {
|
||||||
|
|
|
@ -4,10 +4,14 @@
|
||||||
#include "core/helpers.h"
|
#include "core/helpers.h"
|
||||||
|
|
||||||
#include <algorithm>
|
#include <algorithm>
|
||||||
#include <QtWebKitWidgets>
|
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
#include <QtWebEngineWidgets>
|
||||||
|
#else
|
||||||
|
#include <QtWebKitWidgets>
|
||||||
#include <QWebElementCollection>
|
#include <QWebElementCollection>
|
||||||
#include <QWebElement>
|
#include <QWebElement>
|
||||||
|
#endif
|
||||||
#include "profile-widget/profilewidget2.h"
|
#include "profile-widget/profilewidget2.h"
|
||||||
|
|
||||||
Printer::Printer(QPaintDevice *paintDevice, print_options *printOptions, template_options *templateOptions, PrintMode printMode)
|
Printer::Printer(QPaintDevice *paintDevice, print_options *printOptions, template_options *templateOptions, PrintMode printMode)
|
||||||
|
@ -18,7 +22,11 @@ Printer::Printer(QPaintDevice *paintDevice, print_options *printOptions, templat
|
||||||
this->printMode = printMode;
|
this->printMode = printMode;
|
||||||
dpi = 0;
|
dpi = 0;
|
||||||
done = 0;
|
done = 0;
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
webView = new QWebEngineView();
|
||||||
|
#else
|
||||||
webView = new QWebView();
|
webView = new QWebView();
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
Printer::~Printer()
|
Printer::~Printer()
|
||||||
|
@ -61,6 +69,7 @@ void Printer::putProfileImage(QRect profilePlaceholder, QRect viewPort, QPainter
|
||||||
void Printer::flowRender()
|
void Printer::flowRender()
|
||||||
{
|
{
|
||||||
// add extra padding at the bottom to pages with height not divisible by view port
|
// add extra padding at the bottom to pages with height not divisible by view port
|
||||||
|
#ifndef USE_WEBENGINE
|
||||||
int paddingBottom = pageSize.height() - (webView->page()->mainFrame()->contentsSize().height() % pageSize.height());
|
int paddingBottom = pageSize.height() - (webView->page()->mainFrame()->contentsSize().height() % pageSize.height());
|
||||||
QString styleString = QString::fromUtf8("padding-bottom: ") + QString::number(paddingBottom) + "px;";
|
QString styleString = QString::fromUtf8("padding-bottom: ") + QString::number(paddingBottom) + "px;";
|
||||||
webView->page()->mainFrame()->findFirstElement("body").setAttribute("style", styleString);
|
webView->page()->mainFrame()->findFirstElement("body").setAttribute("style", styleString);
|
||||||
|
@ -115,6 +124,9 @@ void Printer::flowRender()
|
||||||
webView->page()->mainFrame()->render(&painter, QWebFrame::ContentsLayer, reigon);
|
webView->page()->mainFrame()->render(&painter, QWebFrame::ContentsLayer, reigon);
|
||||||
|
|
||||||
painter.end();
|
painter.end();
|
||||||
|
#else
|
||||||
|
// FIX ME
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
void Printer::render(int Pages = 0)
|
void Printer::render(int Pages = 0)
|
||||||
|
@ -140,6 +152,9 @@ void Printer::render(int Pages = 0)
|
||||||
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
painter.setRenderHint(QPainter::SmoothPixmapTransform);
|
||||||
|
|
||||||
// get all refereces to diveprofile class in the Html template
|
// get all refereces to diveprofile class in the Html template
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
//FIX ME
|
||||||
|
#else
|
||||||
QWebElementCollection collection = webView->page()->mainFrame()->findAllElements(".diveprofile");
|
QWebElementCollection collection = webView->page()->mainFrame()->findAllElements(".diveprofile");
|
||||||
|
|
||||||
QSize originalSize = profile->size();
|
QSize originalSize = profile->size();
|
||||||
|
@ -173,13 +188,18 @@ void Printer::render(int Pages = 0)
|
||||||
static_cast<QPrinter*>(paintDevice)->newPage();
|
static_cast<QPrinter*>(paintDevice)->newPage();
|
||||||
}
|
}
|
||||||
painter.end();
|
painter.end();
|
||||||
|
#endif
|
||||||
|
|
||||||
// return profle settings
|
// return profle settings
|
||||||
profile->setFrameStyle(profileFrameStyle);
|
profile->setFrameStyle(profileFrameStyle);
|
||||||
profile->setPrintMode(false);
|
profile->setPrintMode(false);
|
||||||
profile->setFontPrintScale(fontScale);
|
profile->setFontPrintScale(fontScale);
|
||||||
profile->setToolTipVisibile(true);
|
profile->setToolTipVisibile(true);
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
//FIXME
|
||||||
|
#else
|
||||||
profile->resize(originalSize);
|
profile->resize(originalSize);
|
||||||
|
#endif
|
||||||
prefs.animation_speed = animationOriginal;
|
prefs.animation_speed = animationOriginal;
|
||||||
|
|
||||||
//replot the dive after returning the settings
|
//replot the dive after returning the settings
|
||||||
|
@ -210,8 +230,12 @@ void Printer::print()
|
||||||
//rendering resolution = selected paper size in inchs * printer dpi
|
//rendering resolution = selected paper size in inchs * printer dpi
|
||||||
pageSize.setHeight(qCeil(printerPtr->pageRect(QPrinter::Inch).height() * dpi));
|
pageSize.setHeight(qCeil(printerPtr->pageRect(QPrinter::Inch).height() * dpi));
|
||||||
pageSize.setWidth(qCeil(printerPtr->pageRect(QPrinter::Inch).width() * dpi));
|
pageSize.setWidth(qCeil(printerPtr->pageRect(QPrinter::Inch).width() * dpi));
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
//FIXME
|
||||||
|
#else
|
||||||
webView->page()->setViewportSize(pageSize);
|
webView->page()->setViewportSize(pageSize);
|
||||||
webView->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
|
webView->page()->mainFrame()->setScrollBarPolicy(Qt::Vertical, Qt::ScrollBarAlwaysOff);
|
||||||
|
#endif
|
||||||
// export border width with at least 1 pixel
|
// export border width with at least 1 pixel
|
||||||
templateOptions->border_width = std::max(1, pageSize.width() / 1000);
|
templateOptions->border_width = std::max(1, pageSize.width() / 1000);
|
||||||
if (printOptions->type == print_options::DIVELIST) {
|
if (printOptions->type == print_options::DIVELIST) {
|
||||||
|
@ -229,11 +253,15 @@ void Printer::print()
|
||||||
|
|
||||||
// get number of dives per page from data-numberofdives attribute in the body of the selected template
|
// get number of dives per page from data-numberofdives attribute in the body of the selected template
|
||||||
bool ok;
|
bool ok;
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
// FIX ME
|
||||||
|
#else
|
||||||
divesPerPage = webView->page()->mainFrame()->findFirstElement("body").attribute("data-numberofdives").toInt(&ok);
|
divesPerPage = webView->page()->mainFrame()->findFirstElement("body").attribute("data-numberofdives").toInt(&ok);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
divesPerPage = 1; // print each dive in a single page if the attribute is missing or malformed
|
divesPerPage = 1; // print each dive in a single page if the attribute is missing or malformed
|
||||||
//TODO: show warning
|
//TODO: show warning
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
int Pages;
|
int Pages;
|
||||||
if (divesPerPage == 0) {
|
if (divesPerPage == 0) {
|
||||||
flowRender();
|
flowRender();
|
||||||
|
@ -250,7 +278,11 @@ void Printer::previewOnePage()
|
||||||
|
|
||||||
pageSize.setHeight(paintDevice->height());
|
pageSize.setHeight(paintDevice->height());
|
||||||
pageSize.setWidth(paintDevice->width());
|
pageSize.setWidth(paintDevice->width());
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
//FIXME
|
||||||
|
#else
|
||||||
webView->page()->setViewportSize(pageSize);
|
webView->page()->setViewportSize(pageSize);
|
||||||
|
#endif
|
||||||
// initialize the border settings
|
// initialize the border settings
|
||||||
templateOptions->border_width = std::max(1, pageSize.width() / 1000);
|
templateOptions->border_width = std::max(1, pageSize.width() / 1000);
|
||||||
if (printOptions->type == print_options::DIVELIST) {
|
if (printOptions->type == print_options::DIVELIST) {
|
||||||
|
@ -258,7 +290,10 @@ void Printer::previewOnePage()
|
||||||
} else if (printOptions->type == print_options::STATISTICS ) {
|
} else if (printOptions->type == print_options::STATISTICS ) {
|
||||||
webView->setHtml(t.generateStatistics());
|
webView->setHtml(t.generateStatistics());
|
||||||
}
|
}
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
// FIX ME
|
||||||
|
render(1);
|
||||||
|
#else
|
||||||
bool ok;
|
bool ok;
|
||||||
int divesPerPage = webView->page()->mainFrame()->findFirstElement("body").attribute("data-numberofdives").toInt(&ok);
|
int divesPerPage = webView->page()->mainFrame()->findFirstElement("body").attribute("data-numberofdives").toInt(&ok);
|
||||||
if (!ok) {
|
if (!ok) {
|
||||||
|
@ -270,5 +305,6 @@ void Printer::previewOnePage()
|
||||||
} else {
|
} else {
|
||||||
render(1);
|
render(1);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,7 +2,11 @@
|
||||||
#define PRINTER_H
|
#define PRINTER_H
|
||||||
|
|
||||||
#include <QPrinter>
|
#include <QPrinter>
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
#include <QWebEngineView>
|
||||||
|
#else
|
||||||
#include <QWebView>
|
#include <QWebView>
|
||||||
|
#endif
|
||||||
#include <QRect>
|
#include <QRect>
|
||||||
#include <QPainter>
|
#include <QPainter>
|
||||||
|
|
||||||
|
@ -20,7 +24,11 @@ public:
|
||||||
|
|
||||||
private:
|
private:
|
||||||
QPaintDevice *paintDevice;
|
QPaintDevice *paintDevice;
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
QWebEngineView *webView;
|
||||||
|
#else
|
||||||
QWebView *webView;
|
QWebView *webView;
|
||||||
|
#endif
|
||||||
print_options *printOptions;
|
print_options *printOptions;
|
||||||
template_options *templateOptions;
|
template_options *templateOptions;
|
||||||
QSize pageSize;
|
QSize pageSize;
|
||||||
|
|
|
@ -34,6 +34,27 @@ void SearchBar::enableButtons(const QString &s)
|
||||||
ui.findNext->setEnabled(s.length());
|
ui.findNext->setEnabled(s.length());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
MyQWebEnginePage::MyQWebEnginePage(QObject* parent) : QWebEnginePage(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
bool MyQWebEnginePage::acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool)
|
||||||
|
{
|
||||||
|
if (type == QWebEnginePage::NavigationTypeLinkClicked)
|
||||||
|
{
|
||||||
|
QDesktopServices::openUrl(url);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
MyQWebEngineView::MyQWebEngineView(QWidget* parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
UserManual::UserManual(QWidget *parent) : QWidget(parent)
|
UserManual::UserManual(QWidget *parent) : QWidget(parent)
|
||||||
{
|
{
|
||||||
QShortcut *closeKey = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
|
QShortcut *closeKey = new QShortcut(QKeySequence(Qt::CTRL + Qt::Key_W), this);
|
||||||
|
@ -54,12 +75,20 @@ UserManual::UserManual(QWidget *parent) : QWidget(parent)
|
||||||
setWindowTitle(tr("User manual"));
|
setWindowTitle(tr("User manual"));
|
||||||
setWindowIcon(QIcon(":/subsurface-icon"));
|
setWindowIcon(QIcon(":/subsurface-icon"));
|
||||||
|
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
userManual = new MyQWebEngineView(this);
|
||||||
|
MyQWebEnginePage *page = new MyQWebEnginePage();
|
||||||
|
userManual->setPage(page);
|
||||||
|
#else
|
||||||
userManual = new QWebView(this);
|
userManual = new QWebView(this);
|
||||||
|
#endif
|
||||||
QString colorBack = palette().highlight().color().name(QColor::HexRgb);
|
QString colorBack = palette().highlight().color().name(QColor::HexRgb);
|
||||||
QString colorText = palette().highlightedText().color().name(QColor::HexRgb);
|
QString colorText = palette().highlightedText().color().name(QColor::HexRgb);
|
||||||
userManual->setStyleSheet(QString("QWebView { selection-background-color: %1; selection-color: %2; }")
|
userManual->setStyleSheet(QString("QWebView { selection-background-color: %1; selection-color: %2; }")
|
||||||
.arg(colorBack).arg(colorText));
|
.arg(colorBack).arg(colorText));
|
||||||
|
#ifndef USE_WEBENGINE
|
||||||
userManual->page()->setLinkDelegationPolicy(QWebPage::DelegateExternalLinks);
|
userManual->page()->setLinkDelegationPolicy(QWebPage::DelegateExternalLinks);
|
||||||
|
#endif
|
||||||
QString searchPath = getSubsurfaceDataPath("Documentation");
|
QString searchPath = getSubsurfaceDataPath("Documentation");
|
||||||
if (searchPath.size()) {
|
if (searchPath.size()) {
|
||||||
// look for localized versions of the manual first
|
// look for localized versions of the manual first
|
||||||
|
@ -84,7 +113,9 @@ UserManual::UserManual(QWidget *parent) : QWidget(parent)
|
||||||
searchBar->hide();
|
searchBar->hide();
|
||||||
connect(actionShowSearch, SIGNAL(triggered(bool)), searchBar, SLOT(show()));
|
connect(actionShowSearch, SIGNAL(triggered(bool)), searchBar, SLOT(show()));
|
||||||
connect(actionHideSearch, SIGNAL(triggered(bool)), searchBar, SLOT(hide()));
|
connect(actionHideSearch, SIGNAL(triggered(bool)), searchBar, SLOT(hide()));
|
||||||
|
#ifndef USE_WEBENGINE
|
||||||
connect(userManual, SIGNAL(linkClicked(QUrl)), this, SLOT(linkClickedSlot(QUrl)));
|
connect(userManual, SIGNAL(linkClicked(QUrl)), this, SLOT(linkClickedSlot(QUrl)));
|
||||||
|
#endif
|
||||||
connect(searchBar, SIGNAL(searchTextChanged(QString)), this, SLOT(searchTextChanged(QString)));
|
connect(searchBar, SIGNAL(searchTextChanged(QString)), this, SLOT(searchTextChanged(QString)));
|
||||||
connect(searchBar, SIGNAL(searchNext()), this, SLOT(searchNext()));
|
connect(searchBar, SIGNAL(searchNext()), this, SLOT(searchNext()));
|
||||||
connect(searchBar, SIGNAL(searchPrev()), this, SLOT(searchPrev()));
|
connect(searchBar, SIGNAL(searchPrev()), this, SLOT(searchPrev()));
|
||||||
|
@ -96,6 +127,13 @@ UserManual::UserManual(QWidget *parent) : QWidget(parent)
|
||||||
setLayout(vboxLayout);
|
setLayout(vboxLayout);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
void UserManual::search(QString text, QWebEnginePage::FindFlags flags = 0)
|
||||||
|
{
|
||||||
|
userManual->findText(text, flags,
|
||||||
|
[this, text](bool found) {searchBar->setStyleSheet(found || text.length() == 0 ? "" : "QLineEdit{background: red;}");});
|
||||||
|
}
|
||||||
|
#else
|
||||||
void UserManual::search(QString text, QWebPage::FindFlags flags = 0)
|
void UserManual::search(QString text, QWebPage::FindFlags flags = 0)
|
||||||
{
|
{
|
||||||
if (userManual->findText(text, QWebPage::FindWrapsAroundDocument | flags) || text.length() == 0) {
|
if (userManual->findText(text, QWebPage::FindWrapsAroundDocument | flags) || text.length() == 0) {
|
||||||
|
@ -104,6 +142,7 @@ void UserManual::search(QString text, QWebPage::FindFlags flags = 0)
|
||||||
searchBar->setStyleSheet("QLineEdit{background: red;}");
|
searchBar->setStyleSheet("QLineEdit{background: red;}");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void UserManual::searchTextChanged(const QString& text)
|
void UserManual::searchTextChanged(const QString& text)
|
||||||
{
|
{
|
||||||
|
@ -118,13 +157,19 @@ void UserManual::searchNext()
|
||||||
|
|
||||||
void UserManual::searchPrev()
|
void UserManual::searchPrev()
|
||||||
{
|
{
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
search(mLastText, QWebEnginePage::FindBackward);
|
||||||
|
#else
|
||||||
search(mLastText, QWebPage::FindBackward);
|
search(mLastText, QWebPage::FindBackward);
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifndef USE_WEBENGINE
|
||||||
void UserManual::linkClickedSlot(const QUrl& url)
|
void UserManual::linkClickedSlot(const QUrl& url)
|
||||||
{
|
{
|
||||||
QDesktopServices::openUrl(url);
|
QDesktopServices::openUrl(url);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef Q_OS_MAC
|
#ifdef Q_OS_MAC
|
||||||
void UserManual::showEvent(QShowEvent *e) {
|
void UserManual::showEvent(QShowEvent *e) {
|
||||||
|
|
|
@ -1,8 +1,12 @@
|
||||||
#ifndef USERMANUAL_H
|
#ifndef USERMANUAL_H
|
||||||
#define USERMANUAL_H
|
#define USERMANUAL_H
|
||||||
|
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
#include <QWebEngineView>
|
||||||
|
#include <QWebEnginePage>
|
||||||
|
#else
|
||||||
#include <QWebView>
|
#include <QWebView>
|
||||||
|
#endif
|
||||||
#include "ui_searchbar.h"
|
#include "ui_searchbar.h"
|
||||||
|
|
||||||
class SearchBar : public QWidget{
|
class SearchBar : public QWidget{
|
||||||
|
@ -21,6 +25,27 @@ private:
|
||||||
Ui::SearchBar ui;
|
Ui::SearchBar ui;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
class MyQWebEnginePage : public QWebEnginePage
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MyQWebEnginePage(QObject* parent = 0);
|
||||||
|
bool acceptNavigationRequest(const QUrl & url, QWebEnginePage::NavigationType type, bool);
|
||||||
|
};
|
||||||
|
|
||||||
|
class MyQWebEngineView : public QWebEngineView
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MyQWebEngineView(QWidget* parent = 0);
|
||||||
|
MyQWebEnginePage* page() const;
|
||||||
|
};
|
||||||
|
#endif
|
||||||
|
|
||||||
|
|
||||||
class UserManual : public QWidget {
|
class UserManual : public QWidget {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
|
@ -40,11 +65,18 @@ slots:
|
||||||
void searchTextChanged(const QString& s);
|
void searchTextChanged(const QString& s);
|
||||||
void searchNext();
|
void searchNext();
|
||||||
void searchPrev();
|
void searchPrev();
|
||||||
|
#ifndef USE_WEBENGINE
|
||||||
void linkClickedSlot(const QUrl& url);
|
void linkClickedSlot(const QUrl& url);
|
||||||
|
#endif
|
||||||
private:
|
private:
|
||||||
QWebView *userManual;
|
|
||||||
SearchBar *searchBar;
|
SearchBar *searchBar;
|
||||||
QString mLastText;
|
QString mLastText;
|
||||||
|
#ifdef USE_WEBENGINE
|
||||||
|
QWebEngineView *userManual;
|
||||||
|
void search(QString, QWebEnginePage::FindFlags);
|
||||||
|
#else
|
||||||
|
QWebView *userManual;
|
||||||
void search(QString, QWebPage::FindFlags);
|
void search(QString, QWebPage::FindFlags);
|
||||||
|
#endif
|
||||||
};
|
};
|
||||||
#endif // USERMANUAL_H
|
#endif // USERMANUAL_H
|
||||||
|
|
Loading…
Reference in a new issue