diff options
| author | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-12-13 12:49:28 +0100 | 
|---|---|---|
| committer | Aqua-sama <aqua@iserlohn-fortress.net> | 2018-12-13 13:41:50 +0100 | 
| commit | 4eedf60d76a047f63b0991eee0b623e9be854c76 (patch) | |
| tree | c8b335c8909a309c2bc2765e823bec5da74aa5aa /src/subwindow | |
| parent | Fix crash creating ConfigurationEditorPlugin widget (diff) | |
| download | smolbote-4eedf60d76a047f63b0991eee0b623e9be854c76.tar.xz | |
MainWindow: rework menu bar
Split off menu bar into its own class out of MainWindow
Menu bar now has a 'Find in menus' function
Diffstat (limited to 'src/subwindow')
| -rw-r--r-- | src/subwindow/subwindow.cpp | 38 | ||||
| -rw-r--r-- | src/subwindow/subwindow.h | 3 | ||||
| -rw-r--r-- | src/subwindow/tabwidget.cpp | 78 | ||||
| -rw-r--r-- | src/subwindow/tabwidget.h | 5 | 
4 files changed, 60 insertions, 64 deletions
| diff --git a/src/subwindow/subwindow.cpp b/src/subwindow/subwindow.cpp index 0844f1f..4beba49 100644 --- a/src/subwindow/subwindow.cpp +++ b/src/subwindow/subwindow.cpp @@ -61,18 +61,6 @@ SubWindow::SubWindow(const Configuration *config, QWidget *parent, Qt::WindowFla          menu->insertSeparator(firstAction);      } -    // new tab button -    auto *newTab_button = new QToolButton(this); -    newTab_button->setIcon(style()->standardIcon(QStyle::SP_FileIcon)); -    newTab_button->setToolTip(tr("Add tab")); -    newTab_button->setShortcut(QKeySequence(config->value<QString>("subwindow.shortcuts.new").value())); -    connect(newTab_button, &QToolButton::clicked, this, [=]() { -        auto index = addTab(WebProfile::defaultProfile()->newtab()); -        tabWidget->setCurrentIndex(index); -    }); -    newTab_button->setMenu(tabWidget->createTabMenu(newTab_button)); -    tabWidget->setCornerWidget(newTab_button, Qt::TopRightCorner); -      // general actions      auto *closeTab_shortcut = new QShortcut(QKeySequence(config->value<QString>("subwindow.shortcuts.close").value()), this);      connect(closeTab_shortcut, &QShortcut::activated, this, [=]() { @@ -159,8 +147,10 @@ int SubWindow::tabCount() const  void SubWindow::setProfile(WebProfile *profile)  { -    if(profile == nullptr) +    if(profile == nullptr) { +        setProfile(WebProfile::defaultProfile());          return; +    }      this->m_profile = profile;      for(int i = 0; i < tabWidget->count(); ++i) { @@ -178,13 +168,29 @@ int SubWindow::addTab(const QUrl &url, WebProfile *profile)  {      Q_CHECK_PTR(m_profile); -    auto *view = new WebView((profile == nullptr) ? m_profile : profile, this); -    if(!url.isEmpty()) +    auto *_profile = (profile == nullptr) ? m_profile : profile; + +    auto *view = new WebView(_profile, this); +    if(url.isEmpty()) +        view->load(_profile->newtab()); +    else          view->load(url); +      return tabWidget->addTab(view);  }  void SubWindow::setCurrentTab(int index)  { -    tabWidget->setCurrentIndex(index); +    if(index > 0) +        tabWidget->setCurrentIndex(index); +} + +int SubWindow::restoreLastTab() +{ +    return tabWidget->restoreLastTab(); +} + +void SubWindow::restoreTabMenu(QMenu *menu) +{ +    tabWidget->restoreTabMenu(menu);  } diff --git a/src/subwindow/subwindow.h b/src/subwindow/subwindow.h index 3d70c98..1fc0097 100644 --- a/src/subwindow/subwindow.h +++ b/src/subwindow/subwindow.h @@ -40,6 +40,9 @@ public slots:      int addTab(const QUrl &url = QUrl(), WebProfile *profile = nullptr);      void setCurrentTab(int index); +    int restoreLastTab(); +    void restoreTabMenu(QMenu *menu); +  private:      WebProfile *m_profile;      TabWidget *tabWidget; diff --git a/src/subwindow/tabwidget.cpp b/src/subwindow/tabwidget.cpp index 942a364..c635aee 100644 --- a/src/subwindow/tabwidget.cpp +++ b/src/subwindow/tabwidget.cpp @@ -31,7 +31,7 @@ TabWidget::TabWidget(QWidget *parent)      setStyleSheet("QTabBar::tab { width: 200px; }");      setTabsClosable(true); -    //setTabBarAutoHide(true); +    setTabBarAutoHide(true);      setElideMode(Qt::ElideRight);      setMovable(true); @@ -75,51 +75,6 @@ TabWidget::~TabWidget()      }  } -QMenu *TabWidget::createTabMenu(QWidget *parent) -{ -    auto *menu = new QMenu(parent); - -    auto *reopenTabAction = menu->addAction(tr("Reopen last tab")); -    connect(reopenTabAction, &QAction::triggered, this, [this]() { -        if(!m_closedTabs.isEmpty()) { -            TabInformation tab = m_closedTabs.takeLast(); -            addTab(createViewFromInfo(tab, this)); -        } -    }); - -    auto *tabHistoryMenu = menu->addMenu(tr("Tab History")); -    connect(tabHistoryMenu, &QMenu::aboutToShow, this, [this, tabHistoryMenu]() { -        tabHistoryMenu->clear(); -        for(int i = 0; i < m_closedTabs.count(); ++i) { -            auto *openAction = tabHistoryMenu->addAction(m_closedTabs.at(i).title); - -            connect(openAction, &QAction::triggered, this, [this, i]() { -                TabInformation tab = m_closedTabs.takeAt(i); -                addTab(createViewFromInfo(tab, this)); -            }); -        } - -        tabHistoryMenu->addSeparator(); - -        auto *clearTabHistory = tabHistoryMenu->addAction(tr("Clear")); -        connect(clearTabHistory, &QAction::triggered, this, [this]() { -            m_closedTabs.clear(); -        }); -    }); - -    connect(menu, &QMenu::aboutToShow, this, [this, reopenTabAction, tabHistoryMenu]() { -        if(m_closedTabs.isEmpty()) { -            reopenTabAction->setEnabled(false); -            tabHistoryMenu->setEnabled(false); -        } else { -            reopenTabAction->setEnabled(true); -            tabHistoryMenu->setEnabled(true); -        } -    }); - -    return menu; -} -  int TabWidget::addTab(WebView *view)  {      Q_ASSERT_X(view != nullptr, "TabWidget::addTab", "Tried to add null view"); @@ -165,6 +120,37 @@ void TabWidget::deleteTab(int index)          parentWidget()->close();  } +int TabWidget::restoreLastTab() +{ +    if(!m_closedTabs.isEmpty()) { +        TabInformation tab = m_closedTabs.takeLast(); +        return addTab(createViewFromInfo(tab, this)); +    } +    return -1; +} + +void TabWidget::restoreTabMenu(QMenu *menu) +{ +    if(m_closedTabs.isEmpty()) +        return; + +    for(int i = 0; i < m_closedTabs.count(); ++i) { +        auto *openAction = menu->addAction(m_closedTabs.at(i).title); + +        connect(openAction, &QAction::triggered, this, [this, i]() { +            TabInformation tab = m_closedTabs.takeAt(i); +            addTab(createViewFromInfo(tab, this)); +        }); +    } + +    menu->addSeparator(); + +    auto *clearTabHistory = menu->addAction(tr("Clear")); +    connect(clearTabHistory, &QAction::triggered, this, [this]() { +        m_closedTabs.clear(); +    }); +} +  void TabWidget::contextMenuEvent(QContextMenuEvent *event)  {      // check if the context menu was called on a tab diff --git a/src/subwindow/tabwidget.h b/src/subwindow/tabwidget.h index 48690e8..ef1930d 100644 --- a/src/subwindow/tabwidget.h +++ b/src/subwindow/tabwidget.h @@ -34,12 +34,13 @@ public:      explicit TabWidget(QWidget *parent = nullptr);      ~TabWidget() override; -    QMenu *createTabMenu(QWidget *parent = nullptr); -  public slots:      int addTab(WebView *view);      void deleteTab(int index); +    int restoreLastTab(); +    void restoreTabMenu(QMenu *menu); +  protected:      void contextMenuEvent(QContextMenuEvent *event) override;      void mousePressEvent(QMouseEvent *event) override; | 
