tabwidget.h Example File | Qt WebKit Examples 5.9

Qt 5.9 | Qt WebKit Examples | Tab Browser | tabwidget.h Example File

Qt 5.9.2 Reference Documentation

# tabwidget.h Example File

webkitwidgets/browser/tabwidget.h

      /****************************************************************************
      **
      ** Copyright (C) 2015 The Qt Company Ltd.
      ** Contact: http://www.qt.io/licensing/
      **
      ** This file is part of the demonstration applications of the Qt Toolkit.
      **
      ** $QT_BEGIN_LICENSE:LGPL21$
      ** 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 http://www.qt.io/terms-conditions. For further
      ** information use the contact form at http://www.qt.io/contact-us.
      **
      ** GNU Lesser General Public License Usage
      ** Alternatively, this file may be used under the terms of the GNU Lesser
      ** General Public License version 2.1 or version 3 as published by the Free
      ** Software Foundation and appearing in the file LICENSE.LGPLv21 and
      ** LICENSE.LGPLv3 included in the packaging of this file. Please review the
      ** following information to ensure the GNU Lesser General Public License
      ** requirements will be met: https://www.gnu.org/licenses/lgpl.html and
      ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
      **
      ** As a special exception, The Qt Company gives you certain additional
      ** rights. These rights are described in The Qt Company LGPL Exception
      ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
      **
      ** $QT_END_LICENSE$
      **
      ****************************************************************************/

      #ifndef TABWIDGET_H
      #define TABWIDGET_H

      #include <QtWidgets/QTabBar>

      #include <QtWidgets/QShortcut>
      /*
          Tab bar with a few more features such as a context menu and shortcuts
       */
      class TabBar : public QTabBar
      {
          Q_OBJECT

      signals:
          void newTab();
          void cloneTab(int index);
          void closeTab(int index);
          void closeOtherTabs(int index);
          void reloadTab(int index);
          void reloadAllTabs();
          void tabMoveRequested(int fromIndex, int toIndex);

      public:
          TabBar(QWidget *parent = 0);

      protected:
          void mousePressEvent(QMouseEvent* event);
          void mouseMoveEvent(QMouseEvent* event);

      private slots:
          void selectTabAction();
          void cloneTab();
          void closeTab();
          void closeOtherTabs();
          void reloadTab();
          void contextMenuRequested(const QPoint &position);

      private:
          QList<QShortcut*> m_tabShortcuts;
          friend class TabWidget;

          QPoint m_dragStartPos;
          int m_dragCurrentIndex;
      };

      #include <QWebPage>

      class QAction;

      class WebView;
      /*!
          A proxy object that connects a single browser action
          to one child webpage action at a time.

          Example usage: used to keep the main window stop action in sync with
          the current tabs webview's stop action.
       */
      class WebActionMapper : public QObject
      {
          Q_OBJECT

      public:
          WebActionMapper(QAction *root, QWebPage::WebAction webAction, QObject *parent);
          QWebPage::WebAction webAction() const;
          void addChild(QAction *action);
          void updateCurrent(QWebPage *currentParent);

      private slots:
          void rootTriggered();
          void childChanged();
          void rootDestroyed();
          void currentDestroyed();

      private:
          QWebPage *m_currentParent;
          QAction *m_root;
          QWebPage::WebAction m_webAction;
      };

      #include <QtCore/QUrl>
      #include <QtWidgets/QTabWidget>
      class QCompleter;
      class QLineEdit;
      class QMenu;
      class QStackedWidget;

      /*!
          TabWidget that contains WebViews and a stack widget of associated line edits.

          Connects up the current tab's signals to this class's signal and uses WebActionMapper
          to proxy the actions.
       */
      class TabWidget : public QTabWidget
      {
          Q_OBJECT

      signals:
          // tab widget signals
          void loadPage(const QString &url);
          void tabsChanged();
          void lastTabClosed();

          // current tab signals
          void setCurrentTitle(const QString &url);
          void showStatusBarMessage(const QString &message);
          void linkHovered(const QString &link);
          void loadProgress(int progress);
          void geometryChangeRequested(const QRect &geometry);
          void menuBarVisibilityChangeRequested(bool visible);
          void statusBarVisibilityChangeRequested(bool visible);
          void toolBarVisibilityChangeRequested(bool visible);
          void printRequested(QWebFrame *frame);

      public:
          TabWidget(QWidget *parent = 0);
          void clear();
          void addWebAction(QAction *action, QWebPage::WebAction webAction);

          QAction *newTabAction() const;
          QAction *closeTabAction() const;
          QAction *recentlyClosedTabsAction() const;
          QAction *nextTabAction() const;
          QAction *previousTabAction() const;

          QWidget *lineEditStack() const;
          QLineEdit *currentLineEdit() const;
          WebView *currentWebView() const;
          WebView *webView(int index) const;
          QLineEdit *lineEdit(int index) const;
          int webViewIndex(WebView *webView) const;

          QByteArray saveState() const;
          bool restoreState(const QByteArray &state);

      protected:
          void mouseDoubleClickEvent(QMouseEvent *event);
          void contextMenuEvent(QContextMenuEvent *event);
          void mouseReleaseEvent(QMouseEvent *event);

      public slots:
          void loadUrlInCurrentTab(const QUrl &url);
          WebView *newTab(bool makeCurrent = true);
          void cloneTab(int index = -1);
          void closeTab(int index = -1);
          void closeOtherTabs(int index);
          void reloadTab(int index = -1);
          void reloadAllTabs();
          void nextTab();
          void previousTab();

      private slots:
          void currentChanged(int index);
          void aboutToShowRecentTabsMenu();
          void aboutToShowRecentTriggeredAction(QAction *action);
          void webViewLoadStarted();
          void webViewIconChanged();
          void webViewTitleChanged(const QString &title);
          void webViewUrlChanged(const QUrl &url);
          void lineEditReturnPressed();
          void windowCloseRequested();
          void moveTab(int fromIndex, int toIndex);

      private:
          QAction *m_recentlyClosedTabsAction;
          QAction *m_newTabAction;
          QAction *m_closeTabAction;
          QAction *m_nextTabAction;
          QAction *m_previousTabAction;

          QMenu *m_recentlyClosedTabsMenu;
          static const int m_recentlyClosedTabsSize = 10;
          QList<QUrl> m_recentlyClosedTabs;
          QList<WebActionMapper*> m_actions;

          QCompleter *m_lineEditCompleter;
          QStackedWidget *m_lineEdits;
          TabBar *m_tabBar;
      };

      #endif // TABWIDGET_H