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 }