File indexing completed on 2024-04-28 05:38:14
0001 /*************************************************************************** 0002 * Copyright (C) 2018 by Renaud Guezennec * 0003 * https://rolisteam.org/ * 0004 * * 0005 * rolisteam is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0019 ***************************************************************************/ 0020 #include "webview.h" 0021 0022 #include "controller/view_controller/webpagecontroller.h" 0023 #include "network/networkmessagereader.h" 0024 #include "ui_webview.h" 0025 #include <QHBoxLayout> 0026 #include <QVBoxLayout> 0027 0028 WebView::WebView(WebpageController* ctrl, QWidget* parent) 0029 : MediaContainer(ctrl, MediaContainer::ContainerType::WebViewContainer, parent) 0030 , m_webCtrl(ctrl) 0031 , m_ui(new Ui::WebView) 0032 { 0033 auto wid= new QWidget(); 0034 m_ui->setupUi(wid); 0035 0036 setObjectName("WebPage"); 0037 setGeometry(0, 0, 500, 500); 0038 setWindowIcon(QIcon::fromTheme("webPage")); 0039 0040 m_ui->m_nextAct->setIcon(style()->standardIcon(QStyle::SP_ArrowForward)); 0041 m_ui->m_previousAct->setIcon(style()->standardIcon(QStyle::SP_ArrowBack)); 0042 m_ui->m_reloadAct->setIcon(style()->standardIcon(QStyle::SP_BrowserReload)); 0043 0044 m_ui->m_nextBtn->setDefaultAction(m_ui->m_nextAct); 0045 m_ui->m_previousBtn->setDefaultAction(m_ui->m_previousAct); 0046 m_ui->m_reloadBtn->setDefaultAction(m_ui->m_reloadAct); 0047 m_ui->m_hideAddressBtn->setDefaultAction(m_ui->m_hideAddressAct); 0048 0049 m_ui->m_shareBtn->setDefaultAction(m_ui->m_shareAct); 0050 m_ui->m_htmlShareBtn->setDefaultAction(m_ui->m_htmlShareAct); 0051 0052 connect(m_ui->m_keepSharing, &QCheckBox::clicked, m_webCtrl, &WebpageController::setKeepSharing); 0053 connect(m_webCtrl, &WebpageController::nameChanged, this, &WebView::updateTitle); 0054 connect(m_ui->m_webview, &QWebEngineView::titleChanged, m_webCtrl, &WebpageController::setName); 0055 connect(m_ui->m_webview, &QWebEngineView::urlChanged, m_webCtrl, &WebpageController::setPageUrl); 0056 connect(m_ui->m_addressEdit, &QLineEdit::editingFinished, this, 0057 [this]() { m_webCtrl->setPageUrl(QUrl::fromUserInput(m_ui->m_addressEdit->text())); }); 0058 connect(m_webCtrl, &WebpageController::pageUrlChanged, this, 0059 [this]() { m_ui->m_webview->setUrl(m_webCtrl->pageUrl()); }); 0060 0061 connect(m_ui->m_webview, &QWebEngineView::loadFinished, this, [this]() { 0062 m_ui->m_webview->page()->toHtml([this](QString html) { 0063 if(m_webCtrl) 0064 m_webCtrl->setHtml(html); 0065 }); 0066 }); 0067 0068 connect(m_ui->m_reloadAct, &QAction::triggered, m_ui->m_webview, &QWebEngineView::reload); 0069 connect(m_ui->m_nextAct, &QAction::triggered, m_ui->m_webview, &QWebEngineView::forward); 0070 connect(m_ui->m_previousAct, &QAction::triggered, m_ui->m_webview, &QWebEngineView::back); 0071 connect(m_ui->m_hideAddressAct, &QAction::triggered, this, 0072 [this](bool b) { m_ui->m_addressEdit->setEchoMode(b ? QLineEdit::Password : QLineEdit::Normal); }); 0073 m_ui->m_addressEdit->setFocusPolicy(Qt::StrongFocus); 0074 0075 connect(m_ui->m_shareAct, &QAction::triggered, m_webCtrl, &WebpageController::setUrlSharing); 0076 connect(m_ui->m_htmlShareAct, &QAction::triggered, m_webCtrl, &WebpageController::setHtmlSharing); 0077 connect(m_webCtrl, &WebpageController::sharingModeChanged, [this]() { 0078 m_ui->m_shareAct->setChecked(m_webCtrl->urlSharing()); 0079 m_ui->m_htmlShareAct->setChecked(m_webCtrl->htmlSharing()); 0080 }); 0081 0082 updateTitle(); 0083 setWidget(wid); 0084 0085 if(m_webCtrl) 0086 { 0087 if(m_webCtrl->state() == WebpageController::LocalIsPlayer) 0088 { 0089 m_ui->m_htmlShareAct->setVisible(false); 0090 m_ui->m_shareAct->setVisible(false); 0091 m_ui->m_keepSharing->setVisible(false); 0092 } 0093 else if(m_webCtrl->state() == WebpageController::RemoteView) 0094 { 0095 m_ui->m_htmlShareAct->setVisible(false); 0096 m_ui->m_shareAct->setVisible(false); 0097 m_ui->m_keepSharing->setVisible(false); 0098 m_ui->m_nextAct->setVisible(false); 0099 m_ui->m_previousAct->setVisible(false); 0100 m_ui->m_addressEdit->setReadOnly(true); 0101 } 0102 0103 m_ui->m_webview->setHtml(m_webCtrl->html()); 0104 m_ui->m_webview->setUrl(m_webCtrl->pageUrl()); 0105 m_ui->m_addressEdit->setText(m_webCtrl->pageUrl().toString()); 0106 m_ui->m_hideAddressAct->setChecked(m_webCtrl->hideUrl()); 0107 m_ui->m_addressEdit->setEchoMode(m_webCtrl->hideUrl() ? QLineEdit::Password : QLineEdit::Normal); 0108 0109 qDebug() << "webview " << m_webCtrl->pageUrl() << m_webCtrl->html(); 0110 } 0111 } 0112 0113 WebView::~WebView() {} 0114 0115 void WebView::updateTitle() 0116 { 0117 if(m_webCtrl) 0118 setWindowTitle(tr("%1 - WebPage").arg(m_webCtrl->title())); 0119 } 0120 0121 void WebView::mousePressEvent(QMouseEvent* mouseEvent) 0122 { 0123 if(mouseEvent->button() == Qt::BackButton) 0124 { 0125 m_ui->m_webview->back(); 0126 } 0127 else if(mouseEvent->button() == Qt::ForwardButton) 0128 { 0129 m_ui->m_webview->forward(); 0130 } 0131 MediaContainer::mousePressEvent(mouseEvent); 0132 } 0133 0134 void WebView::showEvent(QShowEvent* event) 0135 { 0136 MediaContainer::showEvent(event); 0137 if(nullptr != m_ui->m_addressEdit) 0138 m_ui->m_addressEdit->setFocus(); 0139 }