<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>tabwidget.cpp Example File | Qt WebEngine 5.9</title> <link rel="stylesheet" type="text/css" href="style/offline-simple.css" /> <script type="text/javascript"> document.getElementsByTagName("link").item(0).setAttribute("href", "style/offline.css"); // loading style sheet breaks anchors that were jumped to before // so force jumping to anchor again setTimeout(function() { var anchor = location.hash; // need to jump to different anchor first (e.g. none) location.hash = "#"; setTimeout(function() { location.hash = anchor; }, 0); }, 0); </script> </head> <body> <div class="header" id="qtdocheader"> <div class="main"> <div class="main-rounded"> <div class="navigationbar"> <table><tr> <td >Qt 5.9</td><td ><a href="qtwebengine-index.html">Qt WebEngine</a></td><td ><a href="qtwebengine-webenginewidgets-demobrowser-example.html">WebEngine Demo Browser Example</a></td><td >tabwidget.cpp Example File</td></tr></table><table class="buildversion"><tr> <td id="buildversion" width="100%" align="right">Qt 5.9.4 Reference Documentation</td> </tr></table> </div> </div> <div class="content"> <div class="line"> <div class="content mainContent"> <div class="sidebar"><div class="sidebar-content" id="sidebar-content"></div></div> <h1 class="title">tabwidget.cpp Example File</h1> <span class="subtitle">webenginewidgets/demobrowser/tabwidget.cpp</span> <!-- $$$webenginewidgets/demobrowser/tabwidget.cpp-description --> <div class="descr"> <a name="details"></a> <pre class="cpp"> <span class="comment">/**************************************************************************** ** ** Copyright (C) 2016 The Qt Company Ltd. ** Contact: https://www.qt.io/licensing/ ** ** This file is part of the examples of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:BSD$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see https://www.qt.io/terms-conditions. For further ** information use the contact form at https://www.qt.io/contact-us. ** ** BSD License Usage ** Alternatively, you may use this file under the terms of the BSD license ** as follows: ** ** "Redistribution and use in source and binary forms, with or without ** modification, are permitted provided that the following conditions are ** met: ** * Redistributions of source code must retain the above copyright ** notice, this list of conditions and the following disclaimer. ** * Redistributions in binary form must reproduce the above copyright ** notice, this list of conditions and the following disclaimer in ** the documentation and/or other materials provided with the ** distribution. ** * Neither the name of The Qt Company Ltd nor the names of its ** contributors may be used to endorse or promote products derived ** from this software without specific prior written permission. ** ** ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." ** ** $QT_END_LICENSE$ ** ****************************************************************************/</span> <span class="preprocessor">#include "tabwidget.h"</span> <span class="preprocessor">#include "browserapplication.h"</span> <span class="preprocessor">#include "browsermainwindow.h"</span> <span class="preprocessor">#include "downloadmanager.h"</span> <span class="preprocessor">#include "fullscreennotification.h"</span> <span class="preprocessor">#include "history.h"</span> <span class="preprocessor">#include "savepagedialog.h"</span> <span class="preprocessor">#include "urllineedit.h"</span> <span class="preprocessor">#include "webview.h"</span> <span class="preprocessor">#include <QWebEngineDownloadItem></span> <span class="preprocessor">#include <QWebEngineProfile></span> <span class="preprocessor">#include <QWebEngineFullScreenRequest></span> <span class="preprocessor">#include <QtCore/QMimeData></span> <span class="preprocessor">#include <QtGui/QClipboard></span> <span class="preprocessor">#include <QtWidgets/QCompleter></span> <span class="preprocessor">#include <QtWidgets/QListView></span> <span class="preprocessor">#include <QtWidgets/QMenu></span> <span class="preprocessor">#include <QtWidgets/QMessageBox></span> <span class="preprocessor">#include <QtGui/QDrag></span> <span class="preprocessor">#include <QtGui/QMouseEvent></span> <span class="preprocessor">#include <QtWidgets/QStackedWidget></span> <span class="preprocessor">#include <QtWidgets/QStyle></span> <span class="preprocessor">#include <QtWidgets/QToolButton></span> <span class="preprocessor">#include <QtCore/QDebug></span> TabBar<span class="operator">::</span>TabBar(<span class="type">QWidget</span> <span class="operator">*</span>parent) : <span class="type">QTabBar</span>(parent) { setContextMenuPolicy(<span class="type">Qt</span><span class="operator">::</span>CustomContextMenu); setAcceptDrops(<span class="keyword">true</span>); connect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(customContextMenuRequested(<span class="type">QPoint</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(contextMenuRequested(<span class="type">QPoint</span>))); <span class="type">QString</span> ctrl <span class="operator">=</span> QLatin1String(<span class="string">"Ctrl+%1"</span>); <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">1</span>; i <span class="operator"><</span> <span class="number">10</span>; <span class="operator">+</span><span class="operator">+</span>i) { <span class="type">QShortcut</span> <span class="operator">*</span>shortCut <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QShortcut</span>(ctrl<span class="operator">.</span>arg(i)<span class="operator">,</span> <span class="keyword">this</span>); m_tabShortcuts<span class="operator">.</span>append(shortCut); connect(shortCut<span class="operator">,</span> SIGNAL(activated())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(selectTabAction())); } setTabsClosable(<span class="keyword">true</span>); connect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(tabCloseRequested(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(closeTab(<span class="type">int</span>))); setSelectionBehaviorOnRemove(<span class="type">QTabBar</span><span class="operator">::</span>SelectPreviousTab); setMovable(<span class="keyword">true</span>); } <span class="type">void</span> TabBar<span class="operator">::</span>selectTabAction() { <span class="keyword">if</span> (<span class="type">QShortcut</span> <span class="operator">*</span>shortCut <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QShortcut</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="type">int</span> index <span class="operator">=</span> m_tabShortcuts<span class="operator">.</span>indexOf(shortCut); setCurrentIndex(index); } } <span class="type">void</span> TabBar<span class="operator">::</span>contextMenuRequested(<span class="keyword">const</span> <span class="type">QPoint</span> <span class="operator">&</span>position) { <span class="type">QMenu</span> menu; menu<span class="operator">.</span>addAction(tr(<span class="string">"New &Tab"</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(newTab())<span class="operator">,</span> <span class="type">QKeySequence</span><span class="operator">::</span>AddTab); <span class="type">int</span> index <span class="operator">=</span> tabAt(position); <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) { <span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">"Clone Tab"</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(cloneTab())); action<span class="operator">-</span><span class="operator">></span>setData(index); menu<span class="operator">.</span>addSeparator(); action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">"&Close Tab"</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(closeTab())<span class="operator">,</span> <span class="type">QKeySequence</span><span class="operator">::</span>Close); action<span class="operator">-</span><span class="operator">></span>setData(index); action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">"Close &Other Tabs"</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(closeOtherTabs())); action<span class="operator">-</span><span class="operator">></span>setData(index); menu<span class="operator">.</span>addSeparator(); action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">"Reload Tab"</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(reloadTab())<span class="operator">,</span> <span class="type">QKeySequence</span><span class="operator">::</span>Refresh); action<span class="operator">-</span><span class="operator">></span>setData(index); <span class="comment">// Audio mute / unmute.</span> action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">"Mute tab"</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(muteTab())); action<span class="operator">-</span><span class="operator">></span>setData(index); action <span class="operator">=</span> menu<span class="operator">.</span>addAction(tr(<span class="string">"Unmute tab"</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(unmuteTab())); action<span class="operator">-</span><span class="operator">></span>setData(index); } <span class="keyword">else</span> { menu<span class="operator">.</span>addSeparator(); } menu<span class="operator">.</span>addAction(tr(<span class="string">"Reload All Tabs"</span>)<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(reloadAllTabs())); menu<span class="operator">.</span>exec(<span class="type">QCursor</span><span class="operator">::</span>pos()); } <span class="type">void</span> TabBar<span class="operator">::</span>cloneTab() { <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">></span>data()<span class="operator">.</span>toInt(); <span class="keyword">emit</span> cloneTab(index); } } <span class="type">void</span> TabBar<span class="operator">::</span>closeTab() { <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">></span>data()<span class="operator">.</span>toInt(); <span class="keyword">emit</span> closeTab(index); } } <span class="type">void</span> TabBar<span class="operator">::</span>closeOtherTabs() { <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">></span>data()<span class="operator">.</span>toInt(); <span class="keyword">emit</span> closeOtherTabs(index); } } <span class="type">void</span> TabBar<span class="operator">::</span>mousePressEvent(<span class="type">QMouseEvent</span> <span class="operator">*</span>event) { <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">></span>button() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>LeftButton) m_dragStartPos <span class="operator">=</span> event<span class="operator">-</span><span class="operator">></span>pos(); <span class="type">QTabBar</span><span class="operator">::</span>mousePressEvent(event); <span class="comment">// Middle click on tab should close it.</span> <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">></span>button() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>MiddleButton) { <span class="keyword">const</span> <span class="type">QPoint</span> pos <span class="operator">=</span> event<span class="operator">-</span><span class="operator">></span>pos(); <span class="type">int</span> index <span class="operator">=</span> tabAt(pos); <span class="keyword">if</span> (index <span class="operator">!</span><span class="operator">=</span> <span class="operator">-</span><span class="number">1</span>) { <span class="keyword">emit</span> closeTab(index); } } } <span class="type">void</span> TabBar<span class="operator">::</span>mouseMoveEvent(<span class="type">QMouseEvent</span> <span class="operator">*</span>event) { <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">></span>buttons() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>LeftButton) { <span class="type">int</span> diffX <span class="operator">=</span> event<span class="operator">-</span><span class="operator">></span>pos()<span class="operator">.</span>x() <span class="operator">-</span> m_dragStartPos<span class="operator">.</span>x(); <span class="type">int</span> diffY <span class="operator">=</span> event<span class="operator">-</span><span class="operator">></span>pos()<span class="operator">.</span>y() <span class="operator">-</span> m_dragStartPos<span class="operator">.</span>y(); <span class="keyword">if</span> ((event<span class="operator">-</span><span class="operator">></span>pos() <span class="operator">-</span> m_dragStartPos)<span class="operator">.</span>manhattanLength() <span class="operator">></span> <span class="type">QApplication</span><span class="operator">::</span>startDragDistance() <span class="operator">&</span><span class="operator">&</span> diffX <span class="operator"><</span> <span class="number">3</span> <span class="operator">&</span><span class="operator">&</span> diffX <span class="operator">></span> <span class="operator">-</span><span class="number">3</span> <span class="operator">&</span><span class="operator">&</span> diffY <span class="operator"><</span> <span class="operator">-</span><span class="number">10</span>) { <span class="type">QDrag</span> <span class="operator">*</span>drag <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QDrag</span>(<span class="keyword">this</span>); <span class="type">QMimeData</span> <span class="operator">*</span>mimeData <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QMimeData</span>; <span class="type">QList</span><span class="operator"><</span><span class="type">QUrl</span><span class="operator">></span> urls; <span class="type">int</span> index <span class="operator">=</span> tabAt(event<span class="operator">-</span><span class="operator">></span>pos()); <span class="type">QUrl</span> url <span class="operator">=</span> tabData(index)<span class="operator">.</span>toUrl(); urls<span class="operator">.</span>append(url); mimeData<span class="operator">-</span><span class="operator">></span>setUrls(urls); mimeData<span class="operator">-</span><span class="operator">></span>setText(tabText(index)); mimeData<span class="operator">-</span><span class="operator">></span>setData(QLatin1String(<span class="string">"action"</span>)<span class="operator">,</span> <span class="string">"tab-reordering"</span>); drag<span class="operator">-</span><span class="operator">></span>setMimeData(mimeData); drag<span class="operator">-</span><span class="operator">></span>exec(); } } <span class="type">QTabBar</span><span class="operator">::</span>mouseMoveEvent(event); } <span class="comment">// When index is -1 index chooses the current tab</span> <span class="type">void</span> TabWidget<span class="operator">::</span>reloadTab(<span class="type">int</span> index) { <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span>) index <span class="operator">=</span> currentIndex(); <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">></span><span class="operator">=</span> count()) <span class="keyword">return</span>; <span class="type">QWidget</span> <span class="operator">*</span>widget <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">></span>widget(index); <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(widget)) tab<span class="operator">-</span><span class="operator">></span>reload(); } <span class="type">void</span> TabBar<span class="operator">::</span>reloadTab() { <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">></span>data()<span class="operator">.</span>toInt(); <span class="keyword">emit</span> reloadTab(index); } } <span class="type">void</span> TabBar<span class="operator">::</span>muteTab() { <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">></span>data()<span class="operator">.</span>toInt(); <span class="keyword">emit</span> muteTab(index<span class="operator">,</span> <span class="keyword">true</span>); } } <span class="type">void</span> TabBar<span class="operator">::</span>unmuteTab() { <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="type">int</span> index <span class="operator">=</span> action<span class="operator">-</span><span class="operator">></span>data()<span class="operator">.</span>toInt(); <span class="keyword">emit</span> muteTab(index<span class="operator">,</span> <span class="keyword">false</span>); } } TabWidget<span class="operator">::</span>TabWidget(<span class="type">QWidget</span> <span class="operator">*</span>parent) : <span class="type">QTabWidget</span>(parent) <span class="operator">,</span> m_recentlyClosedTabsAction(<span class="number">0</span>) <span class="operator">,</span> m_newTabAction(<span class="number">0</span>) <span class="operator">,</span> m_closeTabAction(<span class="number">0</span>) <span class="operator">,</span> m_nextTabAction(<span class="number">0</span>) <span class="operator">,</span> m_previousTabAction(<span class="number">0</span>) <span class="operator">,</span> m_recentlyClosedTabsMenu(<span class="number">0</span>) <span class="operator">,</span> m_lineEditCompleter(<span class="number">0</span>) <span class="operator">,</span> m_lineEdits(<span class="number">0</span>) <span class="operator">,</span> m_tabBar(<span class="keyword">new</span> TabBar(<span class="keyword">this</span>)) <span class="operator">,</span> m_profile(<span class="type"><a href="qwebengineprofile.html">QWebEngineProfile</a></span><span class="operator">::</span>defaultProfile()) <span class="operator">,</span> m_fullScreenView(<span class="number">0</span>) <span class="operator">,</span> m_fullScreenNotification(<span class="number">0</span>) { setElideMode(<span class="type">Qt</span><span class="operator">::</span>ElideRight); connect(m_tabBar<span class="operator">,</span> SIGNAL(newTab())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(newTab())); connect(m_tabBar<span class="operator">,</span> SIGNAL(closeTab(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(requestCloseTab(<span class="type">int</span>))); connect(m_tabBar<span class="operator">,</span> SIGNAL(cloneTab(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(cloneTab(<span class="type">int</span>))); connect(m_tabBar<span class="operator">,</span> SIGNAL(closeOtherTabs(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(closeOtherTabs(<span class="type">int</span>))); connect(m_tabBar<span class="operator">,</span> SIGNAL(reloadTab(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(reloadTab(<span class="type">int</span>))); connect(m_tabBar<span class="operator">,</span> SIGNAL(reloadAllTabs())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(reloadAllTabs())); connect(m_tabBar<span class="operator">,</span> SIGNAL(tabMoved(<span class="type">int</span><span class="operator">,</span><span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(moveTab(<span class="type">int</span><span class="operator">,</span><span class="type">int</span>))); connect(m_tabBar<span class="operator">,</span> SIGNAL(tabBarDoubleClicked(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(handleTabBarDoubleClicked(<span class="type">int</span>))); connect(m_tabBar<span class="operator">,</span> SIGNAL(muteTab(<span class="type">int</span><span class="operator">,</span>bool))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(setAudioMutedForTab(<span class="type">int</span><span class="operator">,</span>bool))); setTabBar(m_tabBar); setDocumentMode(<span class="keyword">true</span>); <span class="comment">// Actions</span> m_newTabAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(<span class="type">QIcon</span>(QLatin1String(<span class="string">":addtab.png"</span>))<span class="operator">,</span> tr(<span class="string">"New &Tab"</span>)<span class="operator">,</span> <span class="keyword">this</span>); m_newTabAction<span class="operator">-</span><span class="operator">></span>setShortcuts(<span class="type">QKeySequence</span><span class="operator">::</span>AddTab); m_newTabAction<span class="operator">-</span><span class="operator">></span>setIconVisibleInMenu(<span class="keyword">false</span>); connect(m_newTabAction<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(newTab())); m_closeTabAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(<span class="type">QIcon</span>(QLatin1String(<span class="string">":closetab.png"</span>))<span class="operator">,</span> tr(<span class="string">"&Close Tab"</span>)<span class="operator">,</span> <span class="keyword">this</span>); m_closeTabAction<span class="operator">-</span><span class="operator">></span>setShortcuts(<span class="type">QKeySequence</span><span class="operator">::</span>Close); m_closeTabAction<span class="operator">-</span><span class="operator">></span>setIconVisibleInMenu(<span class="keyword">false</span>); connect(m_closeTabAction<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(requestCloseTab())); m_nextTabAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(tr(<span class="string">"Show Next Tab"</span>)<span class="operator">,</span> <span class="keyword">this</span>); <span class="type">QList</span><span class="operator"><</span><span class="type">QKeySequence</span><span class="operator">></span> shortcuts; shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_BraceRight)); shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_PageDown)); shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_BracketRight)); shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_Less)); m_nextTabAction<span class="operator">-</span><span class="operator">></span>setShortcuts(shortcuts); connect(m_nextTabAction<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(nextTab())); m_previousTabAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(tr(<span class="string">"Show Previous Tab"</span>)<span class="operator">,</span> <span class="keyword">this</span>); shortcuts<span class="operator">.</span>clear(); shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_BraceLeft)); shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_PageUp)); shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_BracketLeft)); shortcuts<span class="operator">.</span>append(<span class="type">QKeySequence</span>(<span class="type">Qt</span><span class="operator">::</span>CTRL <span class="operator">|</span> <span class="type">Qt</span><span class="operator">::</span>Key_Greater)); m_previousTabAction<span class="operator">-</span><span class="operator">></span>setShortcuts(shortcuts); connect(m_previousTabAction<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(previousTab())); m_recentlyClosedTabsMenu <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QMenu</span>(<span class="keyword">this</span>); connect(m_recentlyClosedTabsMenu<span class="operator">,</span> SIGNAL(aboutToShow())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(aboutToShowRecentTabsMenu())); connect(m_recentlyClosedTabsMenu<span class="operator">,</span> SIGNAL(triggered(<span class="type">QAction</span><span class="operator">*</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(aboutToShowRecentTriggeredAction(<span class="type">QAction</span><span class="operator">*</span>))); m_recentlyClosedTabsAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(tr(<span class="string">"Recently Closed Tabs"</span>)<span class="operator">,</span> <span class="keyword">this</span>); m_recentlyClosedTabsAction<span class="operator">-</span><span class="operator">></span>setMenu(m_recentlyClosedTabsMenu); m_recentlyClosedTabsAction<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); connect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(currentChanged(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(currentChanged(<span class="type">int</span>))); m_lineEdits <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QStackedWidget</span>(<span class="keyword">this</span>); } TabWidget<span class="operator">::</span><span class="operator">~</span>TabWidget() { <span class="keyword">if</span> (m_fullScreenView) <span class="keyword">delete</span> m_fullScreenView; } <span class="type">void</span> TabWidget<span class="operator">::</span>clear() { <span class="comment">// clear the recently closed tabs</span> m_recentlyClosedTabs<span class="operator">.</span>clear(); <span class="comment">// clear the line edit history</span> <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator"><</span> m_lineEdits<span class="operator">-</span><span class="operator">></span>count(); <span class="operator">+</span><span class="operator">+</span>i) { <span class="type">QLineEdit</span> <span class="operator">*</span>qLineEdit <span class="operator">=</span> lineEdit(i); qLineEdit<span class="operator">-</span><span class="operator">></span>setText(qLineEdit<span class="operator">-</span><span class="operator">></span>text()); } } <span class="type">void</span> TabWidget<span class="operator">::</span>moveTab(<span class="type">int</span> fromIndex<span class="operator">,</span> <span class="type">int</span> toIndex) { <span class="type">QWidget</span> <span class="operator">*</span>lineEdit <span class="operator">=</span> m_lineEdits<span class="operator">-</span><span class="operator">></span>widget(fromIndex); m_lineEdits<span class="operator">-</span><span class="operator">></span>removeWidget(lineEdit); m_lineEdits<span class="operator">-</span><span class="operator">></span>insertWidget(toIndex<span class="operator">,</span> lineEdit); } <span class="type">void</span> TabWidget<span class="operator">::</span>setAudioMutedForTab(<span class="type">int</span> index<span class="operator">,</span> bool mute) { <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span>) index <span class="operator">=</span> currentIndex(); <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">></span><span class="operator">=</span> count()) <span class="keyword">return</span>; <span class="type">QWidget</span> <span class="operator">*</span>widget <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">></span>widget(index); <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(widget)) tab<span class="operator">-</span><span class="operator">></span>page()<span class="operator">-</span><span class="operator">></span>setAudioMuted(mute); } <span class="type">void</span> TabWidget<span class="operator">::</span>addWebAction(<span class="type">QAction</span> <span class="operator">*</span>action<span class="operator">,</span> <span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>WebAction webAction) { <span class="keyword">if</span> (<span class="operator">!</span>action) <span class="keyword">return</span>; m_actions<span class="operator">.</span>append(<span class="keyword">new</span> WebActionMapper(action<span class="operator">,</span> webAction<span class="operator">,</span> <span class="keyword">this</span>)); } <span class="type">void</span> TabWidget<span class="operator">::</span>currentChanged(<span class="type">int</span> index) { WebView <span class="operator">*</span>webView <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">></span>webView(index); <span class="keyword">if</span> (<span class="operator">!</span>webView) <span class="keyword">return</span>; Q_ASSERT(m_lineEdits<span class="operator">-</span><span class="operator">></span>count() <span class="operator">=</span><span class="operator">=</span> count()); WebView <span class="operator">*</span>oldWebView <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">></span>webView(m_lineEdits<span class="operator">-</span><span class="operator">></span>currentIndex()); <span class="keyword">if</span> (oldWebView) { <span class="preprocessor">#if defined(QWEBENGINEVIEW_STATUSBARMESSAGE)</span> disconnect(oldWebView<span class="operator">,</span> SIGNAL(statusBarMessage(<span class="type">QString</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(showStatusBarMessage(<span class="type">QString</span>))); <span class="preprocessor">#endif</span> disconnect(oldWebView<span class="operator">-</span><span class="operator">></span>page()<span class="operator">,</span> SIGNAL(linkHovered(<span class="keyword">const</span> <span class="type">QString</span><span class="operator">&</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(linkHovered(<span class="keyword">const</span> <span class="type">QString</span><span class="operator">&</span>))); disconnect(oldWebView<span class="operator">,</span> SIGNAL(loadProgress(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(loadProgress(<span class="type">int</span>))); disconnect(oldWebView<span class="operator">-</span><span class="operator">></span>page()<span class="operator">-</span><span class="operator">></span>profile()<span class="operator">,</span> SIGNAL(downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">*</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">*</span>))); disconnect(oldWebView<span class="operator">-</span><span class="operator">></span>page()<span class="operator">,</span> SIGNAL(fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span>))); } <span class="preprocessor">#if defined(QWEBENGINEVIEW_STATUSBARMESSAGE)</span> connect(webView<span class="operator">,</span> SIGNAL(statusBarMessage(<span class="type">QString</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(showStatusBarMessage(<span class="type">QString</span>))); <span class="preprocessor">#endif</span> connect(webView<span class="operator">-</span><span class="operator">></span>page()<span class="operator">,</span> SIGNAL(linkHovered(<span class="keyword">const</span> <span class="type">QString</span><span class="operator">&</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(linkHovered(<span class="keyword">const</span> <span class="type">QString</span><span class="operator">&</span>))); connect(webView<span class="operator">,</span> SIGNAL(loadProgress(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(loadProgress(<span class="type">int</span>))); connect(webView<span class="operator">-</span><span class="operator">></span>page()<span class="operator">-</span><span class="operator">></span>profile()<span class="operator">,</span> SIGNAL(downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">*</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">*</span>))); connect(webView<span class="operator">-</span><span class="operator">></span>page()<span class="operator">,</span> SIGNAL(fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span>))); <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator"><</span> m_actions<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) { WebActionMapper <span class="operator">*</span>mapper <span class="operator">=</span> m_actions<span class="operator">[</span>i<span class="operator">]</span>; mapper<span class="operator">-</span><span class="operator">></span>updateCurrent(webView<span class="operator">-</span><span class="operator">></span>page()); } <span class="keyword">emit</span> setCurrentTitle(webView<span class="operator">-</span><span class="operator">></span>title()); m_lineEdits<span class="operator">-</span><span class="operator">></span>setCurrentIndex(index); <span class="keyword">emit</span> loadProgress(webView<span class="operator">-</span><span class="operator">></span>progress()); <span class="keyword">emit</span> showStatusBarMessage(webView<span class="operator">-</span><span class="operator">></span>lastStatusBarText()); <span class="keyword">if</span> (webView<span class="operator">-</span><span class="operator">></span>url()<span class="operator">.</span>isEmpty()) m_lineEdits<span class="operator">-</span><span class="operator">></span>currentWidget()<span class="operator">-</span><span class="operator">></span>setFocus(); <span class="keyword">else</span> webView<span class="operator">-</span><span class="operator">></span>setFocus(); } <span class="type">void</span> TabWidget<span class="operator">::</span>fullScreenRequested(<span class="type"><a href="qwebenginefullscreenrequest.html">QWebEngineFullScreenRequest</a></span> request) { WebPage <span class="operator">*</span>webPage <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebPage<span class="operator">*</span><span class="operator">></span>(sender()); <span class="keyword">if</span> (request<span class="operator">.</span>toggleOn()) { <span class="keyword">if</span> (<span class="operator">!</span>m_fullScreenView) { m_fullScreenView <span class="operator">=</span> <span class="keyword">new</span> <span class="type"><a href="qwebengineview.html">QWebEngineView</a></span>(); m_fullScreenNotification <span class="operator">=</span> <span class="keyword">new</span> FullScreenNotification(m_fullScreenView); <span class="type">QAction</span> <span class="operator">*</span>exitFullScreenAction <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(m_fullScreenView); exitFullScreenAction<span class="operator">-</span><span class="operator">></span>setShortcut(<span class="type">Qt</span><span class="operator">::</span>Key_Escape); connect(exitFullScreenAction<span class="operator">,</span> <span class="operator">&</span><span class="type">QAction</span><span class="operator">::</span>triggered<span class="operator">,</span> <span class="operator">[</span>webPage<span class="operator">]</span> { webPage<span class="operator">-</span><span class="operator">></span>triggerAction(<span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>ExitFullScreen); }); m_fullScreenView<span class="operator">-</span><span class="operator">></span>addAction(exitFullScreenAction); } m_oldWindowGeometry <span class="operator">=</span> window()<span class="operator">-</span><span class="operator">></span>geometry(); m_fullScreenView<span class="operator">-</span><span class="operator">></span>setGeometry(m_oldWindowGeometry); webPage<span class="operator">-</span><span class="operator">></span>setView(m_fullScreenView); request<span class="operator">.</span>accept(); m_fullScreenView<span class="operator">-</span><span class="operator">></span>showFullScreen(); m_fullScreenNotification<span class="operator">-</span><span class="operator">></span>show(); window()<span class="operator">-</span><span class="operator">></span>hide(); } <span class="keyword">else</span> { <span class="keyword">if</span> (<span class="operator">!</span>m_fullScreenView) <span class="keyword">return</span>; WebView <span class="operator">*</span>oldWebView <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">></span>webView(m_lineEdits<span class="operator">-</span><span class="operator">></span>currentIndex()); webPage<span class="operator">-</span><span class="operator">></span>setView(oldWebView); request<span class="operator">.</span>accept(); <span class="keyword">delete</span> m_fullScreenView; m_fullScreenView <span class="operator">=</span> <span class="number">0</span>; window()<span class="operator">-</span><span class="operator">></span>show(); window()<span class="operator">-</span><span class="operator">></span>setGeometry(m_oldWindowGeometry); } } <span class="type">void</span> TabWidget<span class="operator">::</span>handleTabBarDoubleClicked(<span class="type">int</span> index) { <span class="keyword">if</span> (index <span class="operator">!</span><span class="operator">=</span> <span class="operator">-</span><span class="number">1</span>) <span class="keyword">return</span>; newTab(); } <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>newTabAction() <span class="keyword">const</span> { <span class="keyword">return</span> m_newTabAction; } <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>closeTabAction() <span class="keyword">const</span> { <span class="keyword">return</span> m_closeTabAction; } <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>recentlyClosedTabsAction() <span class="keyword">const</span> { <span class="keyword">return</span> m_recentlyClosedTabsAction; } <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>nextTabAction() <span class="keyword">const</span> { <span class="keyword">return</span> m_nextTabAction; } <span class="type">QAction</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>previousTabAction() <span class="keyword">const</span> { <span class="keyword">return</span> m_previousTabAction; } <span class="type">QWidget</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>lineEditStack() <span class="keyword">const</span> { <span class="keyword">return</span> m_lineEdits; } <span class="type">QLineEdit</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>currentLineEdit() <span class="keyword">const</span> { <span class="keyword">return</span> lineEdit(m_lineEdits<span class="operator">-</span><span class="operator">></span>currentIndex()); } WebView <span class="operator">*</span>TabWidget<span class="operator">::</span>currentWebView() <span class="keyword">const</span> { <span class="keyword">return</span> webView(currentIndex()); } <span class="type">QLineEdit</span> <span class="operator">*</span>TabWidget<span class="operator">::</span>lineEdit(<span class="type">int</span> index) <span class="keyword">const</span> { UrlLineEdit <span class="operator">*</span>urlLineEdit <span class="operator">=</span> qobject_cast<span class="operator"><</span>UrlLineEdit<span class="operator">*</span><span class="operator">></span>(m_lineEdits<span class="operator">-</span><span class="operator">></span>widget(index)); <span class="keyword">if</span> (urlLineEdit) <span class="keyword">return</span> urlLineEdit<span class="operator">-</span><span class="operator">></span>lineEdit(); <span class="keyword">return</span> <span class="number">0</span>; } WebView <span class="operator">*</span>TabWidget<span class="operator">::</span>webView(<span class="type">int</span> index) <span class="keyword">const</span> { <span class="type">QWidget</span> <span class="operator">*</span>widget <span class="operator">=</span> <span class="keyword">this</span><span class="operator">-</span><span class="operator">></span>widget(index); <span class="keyword">if</span> (WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(widget)) { <span class="keyword">return</span> webView; } <span class="keyword">else</span> { <span class="comment">// optimization to delay creating the first webview</span> <span class="keyword">if</span> (count() <span class="operator">=</span><span class="operator">=</span> <span class="number">1</span>) { TabWidget <span class="operator">*</span>that <span class="operator">=</span> <span class="keyword">const_cast</span><span class="operator"><</span>TabWidget<span class="operator">*</span><span class="operator">></span>(<span class="keyword">this</span>); that<span class="operator">-</span><span class="operator">></span>setUpdatesEnabled(<span class="keyword">false</span>); that<span class="operator">-</span><span class="operator">></span>newTab(); that<span class="operator">-</span><span class="operator">></span>closeTab(<span class="number">0</span>); that<span class="operator">-</span><span class="operator">></span>setUpdatesEnabled(<span class="keyword">true</span>); <span class="keyword">return</span> currentWebView(); } } <span class="keyword">return</span> <span class="number">0</span>; } <span class="type">int</span> TabWidget<span class="operator">::</span>webViewIndex(WebView <span class="operator">*</span>webView) <span class="keyword">const</span> { <span class="type">int</span> index <span class="operator">=</span> indexOf(webView); <span class="keyword">return</span> index; } <span class="type">void</span> TabWidget<span class="operator">::</span>setupPage(<span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">*</span> page) { connect(page<span class="operator">,</span> SIGNAL(windowCloseRequested())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(windowCloseRequested())); connect(page<span class="operator">,</span> SIGNAL(geometryChangeRequested(<span class="type">QRect</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(geometryChangeRequested(<span class="type">QRect</span>))); <span class="preprocessor">#if defined(QWEBENGINEPAGE_PRINTREQUESTED)</span> connect(page<span class="operator">,</span> SIGNAL(printRequested(<span class="type">QWebEngineFrame</span><span class="operator">*</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(printRequested(<span class="type">QWebEngineFrame</span><span class="operator">*</span>))); <span class="preprocessor">#endif</span> <span class="preprocessor">#if defined(QWEBENGINEPAGE_MENUBARVISIBILITYCHANGEREQUESTED)</span> connect(page<span class="operator">,</span> SIGNAL(menuBarVisibilityChangeRequested(bool))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(menuBarVisibilityChangeRequested(bool))); <span class="preprocessor">#endif</span> <span class="preprocessor">#if defined(QWEBENGINEPAGE_STATUSBARVISIBILITYCHANGEREQUESTED)</span> connect(page<span class="operator">,</span> SIGNAL(statusBarVisibilityChangeRequested(bool))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(statusBarVisibilityChangeRequested(bool))); <span class="preprocessor">#endif</span> <span class="preprocessor">#if defined(QWEBENGINEPAGE_TOOLBARVISIBILITYCHANGEREQUESTED)</span> connect(page<span class="operator">,</span> SIGNAL(toolBarVisibilityChangeRequested(bool))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SIGNAL(toolBarVisibilityChangeRequested(bool))); <span class="preprocessor">#endif</span> <span class="comment">// webview actions</span> <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator"><</span> m_actions<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) { WebActionMapper <span class="operator">*</span>mapper <span class="operator">=</span> m_actions<span class="operator">[</span>i<span class="operator">]</span>; mapper<span class="operator">-</span><span class="operator">></span>addChild(page<span class="operator">-</span><span class="operator">></span>action(mapper<span class="operator">-</span><span class="operator">></span>webAction())); } } WebView <span class="operator">*</span>TabWidget<span class="operator">::</span>newTab(bool makeCurrent) { <span class="comment">// line edit</span> UrlLineEdit <span class="operator">*</span>urlLineEdit <span class="operator">=</span> <span class="keyword">new</span> UrlLineEdit; <span class="type">QLineEdit</span> <span class="operator">*</span>lineEdit <span class="operator">=</span> urlLineEdit<span class="operator">-</span><span class="operator">></span>lineEdit(); <span class="keyword">if</span> (<span class="operator">!</span>m_lineEditCompleter <span class="operator">&</span><span class="operator">&</span> count() <span class="operator">></span> <span class="number">0</span>) { HistoryCompletionModel <span class="operator">*</span>completionModel <span class="operator">=</span> <span class="keyword">new</span> HistoryCompletionModel(<span class="keyword">this</span>); completionModel<span class="operator">-</span><span class="operator">></span>setSourceModel(BrowserApplication<span class="operator">::</span>historyManager()<span class="operator">-</span><span class="operator">></span>historyFilterModel()); m_lineEditCompleter <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QCompleter</span>(completionModel<span class="operator">,</span> <span class="keyword">this</span>); <span class="comment">// Should this be in Qt by default?</span> <span class="type">QAbstractItemView</span> <span class="operator">*</span>popup <span class="operator">=</span> m_lineEditCompleter<span class="operator">-</span><span class="operator">></span>popup(); <span class="type">QListView</span> <span class="operator">*</span>listView <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QListView</span><span class="operator">*</span><span class="operator">></span>(popup); <span class="keyword">if</span> (listView) listView<span class="operator">-</span><span class="operator">></span>setUniformItemSizes(<span class="keyword">true</span>); } lineEdit<span class="operator">-</span><span class="operator">></span>setCompleter(m_lineEditCompleter); connect(lineEdit<span class="operator">,</span> SIGNAL(returnPressed())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(lineEditReturnPressed())); m_lineEdits<span class="operator">-</span><span class="operator">></span>addWidget(urlLineEdit); m_lineEdits<span class="operator">-</span><span class="operator">></span>setSizePolicy(lineEdit<span class="operator">-</span><span class="operator">></span>sizePolicy()); <span class="comment">// optimization to delay creating the more expensive WebView, history, etc</span> <span class="keyword">if</span> (count() <span class="operator">=</span><span class="operator">=</span> <span class="number">0</span>) { <span class="type">QWidget</span> <span class="operator">*</span>emptyWidget <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QWidget</span>; <span class="type">QPalette</span> p <span class="operator">=</span> emptyWidget<span class="operator">-</span><span class="operator">></span>palette(); p<span class="operator">.</span>setColor(<span class="type">QPalette</span><span class="operator">::</span>Window<span class="operator">,</span> palette()<span class="operator">.</span>color(<span class="type">QPalette</span><span class="operator">::</span>Base)); emptyWidget<span class="operator">-</span><span class="operator">></span>setPalette(p); emptyWidget<span class="operator">-</span><span class="operator">></span>setAutoFillBackground(<span class="keyword">true</span>); disconnect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(currentChanged(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(currentChanged(<span class="type">int</span>))); addTab(emptyWidget<span class="operator">,</span> tr(<span class="string">"(Untitled)"</span>)); connect(<span class="keyword">this</span><span class="operator">,</span> SIGNAL(currentChanged(<span class="type">int</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(currentChanged(<span class="type">int</span>))); <span class="keyword">return</span> <span class="number">0</span>; } <span class="comment">// webview</span> WebView <span class="operator">*</span>webView <span class="operator">=</span> <span class="keyword">new</span> WebView; webView<span class="operator">-</span><span class="operator">></span>setPage(<span class="keyword">new</span> WebPage(m_profile<span class="operator">,</span> webView)); urlLineEdit<span class="operator">-</span><span class="operator">></span>setWebView(webView); connect(webView<span class="operator">,</span> SIGNAL(loadStarted())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(webViewLoadStarted())); connect(webView<span class="operator">,</span> SIGNAL(iconChanged(<span class="type">QIcon</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(webViewIconChanged(<span class="type">QIcon</span>))); connect(webView<span class="operator">,</span> SIGNAL(titleChanged(<span class="type">QString</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(webViewTitleChanged(<span class="type">QString</span>))); connect(webView<span class="operator">-</span><span class="operator">></span>page()<span class="operator">,</span> SIGNAL(audioMutedChanged(bool))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(webPageMutedOrAudibleChanged())); connect(webView<span class="operator">-</span><span class="operator">></span>page()<span class="operator">,</span> SIGNAL(recentlyAudibleChanged(bool))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(webPageMutedOrAudibleChanged())); connect(webView<span class="operator">,</span> SIGNAL(urlChanged(<span class="type">QUrl</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(webViewUrlChanged(<span class="type">QUrl</span>))); addTab(webView<span class="operator">,</span> tr(<span class="string">"(Untitled)"</span>)); <span class="keyword">if</span> (makeCurrent) setCurrentWidget(webView); setupPage(webView<span class="operator">-</span><span class="operator">></span>page()); <span class="keyword">if</span> (count() <span class="operator">=</span><span class="operator">=</span> <span class="number">1</span>) currentChanged(currentIndex()); <span class="keyword">emit</span> tabsChanged(); <span class="keyword">return</span> webView; } <span class="type">void</span> TabWidget<span class="operator">::</span>reloadAllTabs() { <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator"><</span> count(); <span class="operator">+</span><span class="operator">+</span>i) { <span class="type">QWidget</span> <span class="operator">*</span>tabWidget <span class="operator">=</span> widget(i); <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(tabWidget)) { tab<span class="operator">-</span><span class="operator">></span>reload(); } } } <span class="type">void</span> TabWidget<span class="operator">::</span>lineEditReturnPressed() { <span class="keyword">if</span> (<span class="type">QLineEdit</span> <span class="operator">*</span>lineEdit <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QLineEdit</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="keyword">emit</span> loadPage(lineEdit<span class="operator">-</span><span class="operator">></span>text()); <span class="keyword">if</span> (m_lineEdits<span class="operator">-</span><span class="operator">></span>currentWidget() <span class="operator">=</span><span class="operator">=</span> lineEdit) currentWebView()<span class="operator">-</span><span class="operator">></span>setFocus(); } } <span class="type">void</span> TabWidget<span class="operator">::</span>windowCloseRequested() { WebPage <span class="operator">*</span>webPage <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebPage<span class="operator">*</span><span class="operator">></span>(sender()); WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(webPage<span class="operator">-</span><span class="operator">></span>view()); <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView); <span class="keyword">if</span> (index <span class="operator">></span><span class="operator">=</span> <span class="number">0</span>) closeTab(index); } <span class="type">void</span> TabWidget<span class="operator">::</span>closeOtherTabs(<span class="type">int</span> index) { <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">=</span><span class="operator">=</span> index) <span class="keyword">return</span>; <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> count() <span class="operator">-</span> <span class="number">1</span>; i <span class="operator">></span> index; <span class="operator">-</span><span class="operator">-</span>i) closeTab(i); <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> index <span class="operator">-</span> <span class="number">1</span>; i <span class="operator">></span><span class="operator">=</span> <span class="number">0</span>; <span class="operator">-</span><span class="operator">-</span>i) closeTab(i); } <span class="comment">// When index is -1 index chooses the current tab</span> <span class="type">void</span> TabWidget<span class="operator">::</span>cloneTab(<span class="type">int</span> index) { <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span>) index <span class="operator">=</span> currentIndex(); <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">></span><span class="operator">=</span> count()) <span class="keyword">return</span>; WebView <span class="operator">*</span>tab <span class="operator">=</span> newTab(<span class="keyword">false</span>); tab<span class="operator">-</span><span class="operator">></span>setUrl(webView(index)<span class="operator">-</span><span class="operator">></span>url()); } <span class="comment">// When index is -1 index chooses the current tab</span> <span class="type">void</span> TabWidget<span class="operator">::</span>requestCloseTab(<span class="type">int</span> index) { <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span>) index <span class="operator">=</span> currentIndex(); <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">></span><span class="operator">=</span> count()) <span class="keyword">return</span>; WebView <span class="operator">*</span>tab <span class="operator">=</span> webView(index); <span class="keyword">if</span> (<span class="operator">!</span>tab) <span class="keyword">return</span>; tab<span class="operator">-</span><span class="operator">></span>page()<span class="operator">-</span><span class="operator">></span>triggerAction(<span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>RequestClose); } <span class="type">void</span> TabWidget<span class="operator">::</span>closeTab(<span class="type">int</span> index) { <span class="keyword">if</span> (index <span class="operator"><</span> <span class="number">0</span> <span class="operator">|</span><span class="operator">|</span> index <span class="operator">></span><span class="operator">=</span> count()) <span class="keyword">return</span>; bool hasFocus <span class="operator">=</span> <span class="keyword">false</span>; <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> webView(index)) { hasFocus <span class="operator">=</span> tab<span class="operator">-</span><span class="operator">></span>hasFocus(); <span class="keyword">if</span> (m_profile <span class="operator">=</span><span class="operator">=</span> <span class="type"><a href="qwebengineprofile.html">QWebEngineProfile</a></span><span class="operator">::</span>defaultProfile()) { m_recentlyClosedTabsAction<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">true</span>); m_recentlyClosedTabs<span class="operator">.</span>prepend(tab<span class="operator">-</span><span class="operator">></span>url()); <span class="keyword">if</span> (m_recentlyClosedTabs<span class="operator">.</span>size() <span class="operator">></span><span class="operator">=</span> TabWidget<span class="operator">::</span>m_recentlyClosedTabsSize) m_recentlyClosedTabs<span class="operator">.</span>removeLast(); } } <span class="type">QWidget</span> <span class="operator">*</span>lineEdit <span class="operator">=</span> m_lineEdits<span class="operator">-</span><span class="operator">></span>widget(index); m_lineEdits<span class="operator">-</span><span class="operator">></span>removeWidget(lineEdit); lineEdit<span class="operator">-</span><span class="operator">></span>deleteLater(); <span class="type">QWidget</span> <span class="operator">*</span>webView <span class="operator">=</span> widget(index); removeTab(index); webView<span class="operator">-</span><span class="operator">></span>deleteLater(); <span class="keyword">emit</span> tabsChanged(); <span class="keyword">if</span> (hasFocus <span class="operator">&</span><span class="operator">&</span> count() <span class="operator">></span> <span class="number">0</span>) currentWebView()<span class="operator">-</span><span class="operator">></span>setFocus(); <span class="keyword">if</span> (count() <span class="operator">=</span><span class="operator">=</span> <span class="number">0</span>) <span class="keyword">emit</span> lastTabClosed(); } <span class="type">void</span> TabWidget<span class="operator">::</span>setProfile(<span class="type"><a href="qwebengineprofile.html">QWebEngineProfile</a></span> <span class="operator">*</span>profile) { m_profile <span class="operator">=</span> profile; <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator"><</span> count(); <span class="operator">+</span><span class="operator">+</span>i) { <span class="type">QWidget</span> <span class="operator">*</span>tabWidget <span class="operator">=</span> widget(i); <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(tabWidget)) { WebPage<span class="operator">*</span> webPage <span class="operator">=</span> <span class="keyword">new</span> WebPage(m_profile<span class="operator">,</span> tab); setupPage(webPage); webPage<span class="operator">-</span><span class="operator">></span>load(tab<span class="operator">-</span><span class="operator">></span>page()<span class="operator">-</span><span class="operator">></span>url()); tab<span class="operator">-</span><span class="operator">></span>setPage(webPage); } } } <span class="type">void</span> TabWidget<span class="operator">::</span>webViewLoadStarted() { WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(sender()); <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView); <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) { <span class="type">QIcon</span> icon(QLatin1String(<span class="string">":loading.gif"</span>)); setTabIcon(index<span class="operator">,</span> icon); } } <span class="type">void</span> TabWidget<span class="operator">::</span>webViewIconChanged(<span class="keyword">const</span> <span class="type">QIcon</span> <span class="operator">&</span>icon) { WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(sender()); <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView); <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) setTabIcon(index<span class="operator">,</span> icon); } <span class="type">void</span> TabWidget<span class="operator">::</span>webViewTitleChanged(<span class="keyword">const</span> <span class="type">QString</span> <span class="operator">&</span>title) { WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(sender()); <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView); <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) { setTabText(index<span class="operator">,</span> title); } <span class="keyword">if</span> (currentIndex() <span class="operator">=</span><span class="operator">=</span> index) <span class="keyword">emit</span> setCurrentTitle(title); BrowserApplication<span class="operator">::</span>historyManager()<span class="operator">-</span><span class="operator">></span>updateHistoryItem(webView<span class="operator">-</span><span class="operator">></span>url()<span class="operator">,</span> title); } <span class="type">void</span> TabWidget<span class="operator">::</span>webPageMutedOrAudibleChanged() { <span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">*</span> webPage <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">*</span><span class="operator">></span>(sender()); WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(webPage<span class="operator">-</span><span class="operator">></span>view()); <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView); <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) { <span class="type">QString</span> title <span class="operator">=</span> webView<span class="operator">-</span><span class="operator">></span>title(); bool muted <span class="operator">=</span> webPage<span class="operator">-</span><span class="operator">></span>isAudioMuted(); bool audible <span class="operator">=</span> webPage<span class="operator">-</span><span class="operator">></span>recentlyAudible(); <span class="keyword">if</span> (muted) title <span class="operator">+</span><span class="operator">=</span> tr(<span class="string">" (muted)"</span>); <span class="keyword">else</span> <span class="keyword">if</span> (audible) title <span class="operator">+</span><span class="operator">=</span> tr(<span class="string">" (audible)"</span>); setTabText(index<span class="operator">,</span> title); } } <span class="type">void</span> TabWidget<span class="operator">::</span>webViewUrlChanged(<span class="keyword">const</span> <span class="type">QUrl</span> <span class="operator">&</span>url) { WebView <span class="operator">*</span>webView <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(sender()); <span class="type">int</span> index <span class="operator">=</span> webViewIndex(webView); <span class="keyword">if</span> (<span class="operator">-</span><span class="number">1</span> <span class="operator">!</span><span class="operator">=</span> index) { m_tabBar<span class="operator">-</span><span class="operator">></span>setTabData(index<span class="operator">,</span> url); HistoryManager <span class="operator">*</span>manager <span class="operator">=</span> BrowserApplication<span class="operator">::</span>historyManager(); <span class="keyword">if</span> (url<span class="operator">.</span>isValid()) manager<span class="operator">-</span><span class="operator">></span>addHistoryEntry(url<span class="operator">.</span>toString()); } <span class="keyword">emit</span> tabsChanged(); } <span class="type">void</span> TabWidget<span class="operator">::</span>aboutToShowRecentTabsMenu() { m_recentlyClosedTabsMenu<span class="operator">-</span><span class="operator">></span>clear(); <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator"><</span> m_recentlyClosedTabs<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) { <span class="type">QAction</span> <span class="operator">*</span>action <span class="operator">=</span> <span class="keyword">new</span> <span class="type">QAction</span>(m_recentlyClosedTabsMenu); action<span class="operator">-</span><span class="operator">></span>setData(m_recentlyClosedTabs<span class="operator">.</span>at(i)); <span class="type">QIcon</span> icon <span class="operator">=</span> BrowserApplication<span class="operator">::</span>instance()<span class="operator">-</span><span class="operator">></span>icon(m_recentlyClosedTabs<span class="operator">.</span>at(i)); action<span class="operator">-</span><span class="operator">></span>setIcon(icon); action<span class="operator">-</span><span class="operator">></span>setText(m_recentlyClosedTabs<span class="operator">.</span>at(i)<span class="operator">.</span>toString()); m_recentlyClosedTabsMenu<span class="operator">-</span><span class="operator">></span>addAction(action); } } <span class="type">void</span> TabWidget<span class="operator">::</span>aboutToShowRecentTriggeredAction(<span class="type">QAction</span> <span class="operator">*</span>action) { <span class="type">QUrl</span> url <span class="operator">=</span> action<span class="operator">-</span><span class="operator">></span>data()<span class="operator">.</span>toUrl(); loadUrlInCurrentTab(url); } <span class="type">void</span> TabWidget<span class="operator">::</span>mouseDoubleClickEvent(<span class="type">QMouseEvent</span> <span class="operator">*</span>event) { <span class="keyword">if</span> (<span class="operator">!</span>childAt(event<span class="operator">-</span><span class="operator">></span>pos()) <span class="comment">// Remove the line below when QTabWidget does not have a one pixel frame</span> <span class="operator">&</span><span class="operator">&</span> event<span class="operator">-</span><span class="operator">></span>pos()<span class="operator">.</span>y() <span class="operator"><</span> (tabBar()<span class="operator">-</span><span class="operator">></span>y() <span class="operator">+</span> tabBar()<span class="operator">-</span><span class="operator">></span>height())) { newTab(); <span class="keyword">return</span>; } <span class="type">QTabWidget</span><span class="operator">::</span>mouseDoubleClickEvent(event); } <span class="type">void</span> TabWidget<span class="operator">::</span>contextMenuEvent(<span class="type">QContextMenuEvent</span> <span class="operator">*</span>event) { <span class="keyword">if</span> (<span class="operator">!</span>childAt(event<span class="operator">-</span><span class="operator">></span>pos())) { m_tabBar<span class="operator">-</span><span class="operator">></span>contextMenuRequested(event<span class="operator">-</span><span class="operator">></span>pos()); <span class="keyword">return</span>; } <span class="type">QTabWidget</span><span class="operator">::</span>contextMenuEvent(event); } <span class="type">void</span> TabWidget<span class="operator">::</span>mouseReleaseEvent(<span class="type">QMouseEvent</span> <span class="operator">*</span>event) { <span class="keyword">if</span> (event<span class="operator">-</span><span class="operator">></span>button() <span class="operator">=</span><span class="operator">=</span> <span class="type">Qt</span><span class="operator">::</span>MidButton <span class="operator">&</span><span class="operator">&</span> <span class="operator">!</span>childAt(event<span class="operator">-</span><span class="operator">></span>pos()) <span class="comment">// Remove the line below when QTabWidget does not have a one pixel frame</span> <span class="operator">&</span><span class="operator">&</span> event<span class="operator">-</span><span class="operator">></span>pos()<span class="operator">.</span>y() <span class="operator"><</span> (tabBar()<span class="operator">-</span><span class="operator">></span>y() <span class="operator">+</span> tabBar()<span class="operator">-</span><span class="operator">></span>height())) { <span class="type">QUrl</span> url(<span class="type">QApplication</span><span class="operator">::</span>clipboard()<span class="operator">-</span><span class="operator">></span>text(<span class="type">QClipboard</span><span class="operator">::</span>Selection)); <span class="keyword">if</span> (<span class="operator">!</span>url<span class="operator">.</span>isEmpty() <span class="operator">&</span><span class="operator">&</span> url<span class="operator">.</span>isValid() <span class="operator">&</span><span class="operator">&</span> <span class="operator">!</span>url<span class="operator">.</span>scheme()<span class="operator">.</span>isEmpty()) { WebView <span class="operator">*</span>webView <span class="operator">=</span> newTab(); webView<span class="operator">-</span><span class="operator">></span>setUrl(url); } } } <span class="type">void</span> TabWidget<span class="operator">::</span>loadUrlInCurrentTab(<span class="keyword">const</span> <span class="type">QUrl</span> <span class="operator">&</span>url) { WebView <span class="operator">*</span>webView <span class="operator">=</span> currentWebView(); <span class="keyword">if</span> (webView) { webView<span class="operator">-</span><span class="operator">></span>loadUrl(url); webView<span class="operator">-</span><span class="operator">></span>setFocus(); } } <span class="type">void</span> TabWidget<span class="operator">::</span>nextTab() { <span class="type">int</span> next <span class="operator">=</span> currentIndex() <span class="operator">+</span> <span class="number">1</span>; <span class="keyword">if</span> (next <span class="operator">=</span><span class="operator">=</span> count()) next <span class="operator">=</span> <span class="number">0</span>; setCurrentIndex(next); } <span class="type">void</span> TabWidget<span class="operator">::</span>previousTab() { <span class="type">int</span> next <span class="operator">=</span> currentIndex() <span class="operator">-</span> <span class="number">1</span>; <span class="keyword">if</span> (next <span class="operator"><</span> <span class="number">0</span>) next <span class="operator">=</span> count() <span class="operator">-</span> <span class="number">1</span>; setCurrentIndex(next); } <span class="keyword">static</span> <span class="keyword">const</span> <span class="type">qint32</span> TabWidgetMagic <span class="operator">=</span> <span class="number">0xaa</span>; <span class="type">QByteArray</span> TabWidget<span class="operator">::</span>saveState() <span class="keyword">const</span> { <span class="type">int</span> version <span class="operator">=</span> <span class="number">1</span>; <span class="type">QByteArray</span> data; <span class="type">QDataStream</span> stream(<span class="operator">&</span>data<span class="operator">,</span> <span class="type">QIODevice</span><span class="operator">::</span>WriteOnly); stream <span class="operator"><</span><span class="operator"><</span> <span class="type">qint32</span>(TabWidgetMagic); stream <span class="operator"><</span><span class="operator"><</span> <span class="type">qint32</span>(version); <span class="type">QStringList</span> tabs; <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator"><</span> count(); <span class="operator">+</span><span class="operator">+</span>i) { <span class="keyword">if</span> (WebView <span class="operator">*</span>tab <span class="operator">=</span> qobject_cast<span class="operator"><</span>WebView<span class="operator">*</span><span class="operator">></span>(widget(i))) { tabs<span class="operator">.</span>append(tab<span class="operator">-</span><span class="operator">></span>url()<span class="operator">.</span>toString()); } <span class="keyword">else</span> { tabs<span class="operator">.</span>append(<span class="type">QString</span>()); } } stream <span class="operator"><</span><span class="operator"><</span> tabs; stream <span class="operator"><</span><span class="operator"><</span> currentIndex(); <span class="keyword">return</span> data; } bool TabWidget<span class="operator">::</span>restoreState(<span class="keyword">const</span> <span class="type">QByteArray</span> <span class="operator">&</span>state) { <span class="type">int</span> version <span class="operator">=</span> <span class="number">1</span>; <span class="type">QByteArray</span> sd <span class="operator">=</span> state; <span class="type">QDataStream</span> stream(<span class="operator">&</span>sd<span class="operator">,</span> <span class="type">QIODevice</span><span class="operator">::</span>ReadOnly); <span class="keyword">if</span> (stream<span class="operator">.</span>atEnd()) <span class="keyword">return</span> <span class="keyword">false</span>; <span class="type">qint32</span> marker; <span class="type">qint32</span> v; stream <span class="operator">></span><span class="operator">></span> marker; stream <span class="operator">></span><span class="operator">></span> v; <span class="keyword">if</span> (marker <span class="operator">!</span><span class="operator">=</span> TabWidgetMagic <span class="operator">|</span><span class="operator">|</span> v <span class="operator">!</span><span class="operator">=</span> version) <span class="keyword">return</span> <span class="keyword">false</span>; <span class="type">QStringList</span> openTabs; stream <span class="operator">></span><span class="operator">></span> openTabs; <span class="keyword">for</span> (<span class="type">int</span> i <span class="operator">=</span> <span class="number">0</span>; i <span class="operator"><</span> openTabs<span class="operator">.</span>count(); <span class="operator">+</span><span class="operator">+</span>i) { <span class="keyword">if</span> (i <span class="operator">!</span><span class="operator">=</span> <span class="number">0</span>) newTab(); loadPage(openTabs<span class="operator">.</span>at(i)); } <span class="type">int</span> currentTab; stream <span class="operator">></span><span class="operator">></span> currentTab; setCurrentIndex(currentTab); <span class="keyword">return</span> <span class="keyword">true</span>; } <span class="type">void</span> TabWidget<span class="operator">::</span>downloadRequested(<span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span> <span class="operator">*</span>download) { <span class="keyword">if</span> (download<span class="operator">-</span><span class="operator">></span>savePageFormat() <span class="operator">!</span><span class="operator">=</span> <span class="type"><a href="qwebenginedownloaditem.html">QWebEngineDownloadItem</a></span><span class="operator">::</span>UnknownSaveFormat) { SavePageDialog dlg(<span class="keyword">this</span><span class="operator">,</span> download<span class="operator">-</span><span class="operator">></span>savePageFormat()<span class="operator">,</span> download<span class="operator">-</span><span class="operator">></span>path()); <span class="keyword">if</span> (dlg<span class="operator">.</span>exec() <span class="operator">!</span><span class="operator">=</span> SavePageDialog<span class="operator">::</span>Accepted) <span class="keyword">return</span>; download<span class="operator">-</span><span class="operator">></span>setSavePageFormat(dlg<span class="operator">.</span>pageFormat()); download<span class="operator">-</span><span class="operator">></span>setPath(dlg<span class="operator">.</span>filePath()); } BrowserApplication<span class="operator">::</span>downloadManager()<span class="operator">-</span><span class="operator">></span>download(download); download<span class="operator">-</span><span class="operator">></span>accept(); } WebActionMapper<span class="operator">::</span>WebActionMapper(<span class="type">QAction</span> <span class="operator">*</span>root<span class="operator">,</span> <span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>WebAction webAction<span class="operator">,</span> <span class="type">QObject</span> <span class="operator">*</span>parent) : <span class="type">QObject</span>(parent) <span class="operator">,</span> m_currentParent(<span class="number">0</span>) <span class="operator">,</span> m_root(root) <span class="operator">,</span> m_webAction(webAction) { <span class="keyword">if</span> (<span class="operator">!</span>m_root) <span class="keyword">return</span>; connect(m_root<span class="operator">,</span> SIGNAL(triggered())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(rootTriggered())); connect(root<span class="operator">,</span> SIGNAL(destroyed(<span class="type">QObject</span><span class="operator">*</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(rootDestroyed())); root<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); } <span class="type">void</span> WebActionMapper<span class="operator">::</span>rootDestroyed() { m_root <span class="operator">=</span> <span class="number">0</span>; } <span class="type">void</span> WebActionMapper<span class="operator">::</span>currentDestroyed() { updateCurrent(<span class="number">0</span>); } <span class="type">void</span> WebActionMapper<span class="operator">::</span>addChild(<span class="type">QAction</span> <span class="operator">*</span>action) { <span class="keyword">if</span> (<span class="operator">!</span>action) <span class="keyword">return</span>; connect(action<span class="operator">,</span> SIGNAL(changed())<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(childChanged())); } <span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span><span class="operator">::</span>WebAction WebActionMapper<span class="operator">::</span>webAction() <span class="keyword">const</span> { <span class="keyword">return</span> m_webAction; } <span class="type">void</span> WebActionMapper<span class="operator">::</span>rootTriggered() { <span class="keyword">if</span> (m_currentParent) { <span class="type">QAction</span> <span class="operator">*</span>gotoAction <span class="operator">=</span> m_currentParent<span class="operator">-</span><span class="operator">></span>action(m_webAction); gotoAction<span class="operator">-</span><span class="operator">></span>trigger(); } } <span class="type">void</span> WebActionMapper<span class="operator">::</span>childChanged() { <span class="keyword">if</span> (<span class="type">QAction</span> <span class="operator">*</span>source <span class="operator">=</span> qobject_cast<span class="operator"><</span><span class="type">QAction</span><span class="operator">*</span><span class="operator">></span>(sender())) { <span class="keyword">if</span> (m_root <span class="operator">&</span><span class="operator">&</span> m_currentParent <span class="operator">&</span><span class="operator">&</span> source<span class="operator">-</span><span class="operator">></span>parent() <span class="operator">=</span><span class="operator">=</span> m_currentParent) { m_root<span class="operator">-</span><span class="operator">></span>setChecked(source<span class="operator">-</span><span class="operator">></span>isChecked()); m_root<span class="operator">-</span><span class="operator">></span>setEnabled(source<span class="operator">-</span><span class="operator">></span>isEnabled()); } } } <span class="type">void</span> WebActionMapper<span class="operator">::</span>updateCurrent(<span class="type"><a href="qwebenginepage.html">QWebEnginePage</a></span> <span class="operator">*</span>currentParent) { <span class="keyword">if</span> (m_currentParent) disconnect(m_currentParent<span class="operator">,</span> SIGNAL(destroyed(<span class="type">QObject</span><span class="operator">*</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(currentDestroyed())); m_currentParent <span class="operator">=</span> currentParent; <span class="keyword">if</span> (<span class="operator">!</span>m_root) <span class="keyword">return</span>; <span class="keyword">if</span> (<span class="operator">!</span>m_currentParent) { m_root<span class="operator">-</span><span class="operator">></span>setEnabled(<span class="keyword">false</span>); m_root<span class="operator">-</span><span class="operator">></span>setChecked(<span class="keyword">false</span>); <span class="keyword">return</span>; } <span class="type">QAction</span> <span class="operator">*</span>source <span class="operator">=</span> m_currentParent<span class="operator">-</span><span class="operator">></span>action(m_webAction); m_root<span class="operator">-</span><span class="operator">></span>setChecked(source<span class="operator">-</span><span class="operator">></span>isChecked()); m_root<span class="operator">-</span><span class="operator">></span>setEnabled(source<span class="operator">-</span><span class="operator">></span>isEnabled()); connect(m_currentParent<span class="operator">,</span> SIGNAL(destroyed(<span class="type">QObject</span><span class="operator">*</span>))<span class="operator">,</span> <span class="keyword">this</span><span class="operator">,</span> SLOT(currentDestroyed())); } </pre> </div> <!-- @@@webenginewidgets/demobrowser/tabwidget.cpp --> </div> </div> </div> </div> </div> <div class="footer"> <p> <acronym title="Copyright">©</acronym> 2017 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners.<br> The documentation provided herein is licensed under the terms of the <a href="http://www.gnu.org/licenses/fdl.html">GNU Free Documentation License version 1.3</a> as published by the Free Software Foundation.<br> Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners. </p> </div> </body> </html>