aboutsummaryrefslogtreecommitdiff
path: root/src/subwindow
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-12-13 12:49:28 +0100
committerAqua-sama <aqua@iserlohn-fortress.net>2018-12-13 13:41:50 +0100
commit4eedf60d76a047f63b0991eee0b623e9be854c76 (patch)
treec8b335c8909a309c2bc2765e823bec5da74aa5aa /src/subwindow
parentFix crash creating ConfigurationEditorPlugin widget (diff)
downloadsmolbote-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.cpp38
-rw-r--r--src/subwindow/subwindow.h3
-rw-r--r--src/subwindow/tabwidget.cpp78
-rw-r--r--src/subwindow/tabwidget.h5
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;