1
mirror of https://invent.kde.org/network/falkon.git synced 2024-09-21 17:52:10 +02:00

TabContextMenu: Add Options flags

This commit is contained in:
David Rosca 2018-02-05 12:18:55 +01:00
parent 825ee7ea96
commit ea432a7de7
No known key found for this signature in database
GPG Key ID: EBC3FC294452C6D8
9 changed files with 67 additions and 46 deletions

View File

@ -347,7 +347,7 @@ void TabBar::contextMenuEvent(QContextMenuEvent* event)
int index = tabAt(event->pos());
TabContextMenu menu(index, Qt::Horizontal, m_window, m_tabWidget);
TabContextMenu menu(index, m_window);
// Prevent choosing first option with double rightclick
const QPoint pos = event->globalPos();

View File

@ -27,25 +27,24 @@
#include "checkboxdialog.h"
TabContextMenu::TabContextMenu(int index, Qt::Orientation orientation, BrowserWindow* window, TabWidget* tabWidget, bool showCloseOtherTabs)
TabContextMenu::TabContextMenu(int index, BrowserWindow *window, Options options)
: QMenu()
, m_clickedTab(index)
, m_tabsOrientation(orientation)
, m_window(window)
, m_tabWidget(tabWidget)
, m_showCloseOtherTabs(showCloseOtherTabs)
, m_options(options)
{
setObjectName("tabcontextmenu");
connect(this, SIGNAL(tabCloseRequested(int)), m_tabWidget->tabBar(), SIGNAL(tabCloseRequested(int)));
connect(this, SIGNAL(reloadTab(int)), m_tabWidget, SLOT(reloadTab(int)));
connect(this, SIGNAL(stopTab(int)), m_tabWidget, SLOT(stopTab(int)));
connect(this, SIGNAL(closeAllButCurrent(int)), m_tabWidget, SLOT(closeAllButCurrent(int)));
connect(this, SIGNAL(closeToRight(int)), m_tabWidget, SLOT(closeToRight(int)));
connect(this, SIGNAL(closeToLeft(int)), m_tabWidget, SLOT(closeToLeft(int)));
connect(this, SIGNAL(duplicateTab(int)), m_tabWidget, SLOT(duplicateTab(int)));
connect(this, SIGNAL(loadTab(int)), m_tabWidget, SLOT(loadTab(int)));
connect(this, SIGNAL(unloadTab(int)), m_tabWidget, SLOT(unloadTab(int)));
TabWidget *tabWidget = m_window->tabWidget();
connect(this, SIGNAL(tabCloseRequested(int)), tabWidget->tabBar(), SIGNAL(tabCloseRequested(int)));
connect(this, SIGNAL(reloadTab(int)), tabWidget, SLOT(reloadTab(int)));
connect(this, SIGNAL(stopTab(int)), tabWidget, SLOT(stopTab(int)));
connect(this, SIGNAL(closeAllButCurrent(int)), tabWidget, SLOT(closeAllButCurrent(int)));
connect(this, SIGNAL(closeToRight(int)), tabWidget, SLOT(closeToRight(int)));
connect(this, SIGNAL(closeToLeft(int)), tabWidget, SLOT(closeToLeft(int)));
connect(this, SIGNAL(duplicateTab(int)), tabWidget, SLOT(duplicateTab(int)));
connect(this, SIGNAL(loadTab(int)), tabWidget, SLOT(loadTab(int)));
connect(this, SIGNAL(unloadTab(int)), tabWidget, SLOT(unloadTab(int)));
init();
}
@ -84,7 +83,7 @@ void TabContextMenu::closeAllButCurrent()
void TabContextMenu::closeToRight()
{
const QString label = m_tabsOrientation == Qt::Horizontal
const QString label = m_options & HorizontalTabs
? tr("Do you really want to close all tabs to the right?")
: tr("Do you really want to close all tabs to the bottom?");
@ -95,7 +94,7 @@ void TabContextMenu::closeToRight()
void TabContextMenu::closeToLeft()
{
const QString label = m_tabsOrientation == Qt::Horizontal
const QString label = m_options & HorizontalTabs
? tr("Do you really want to close all tabs to the left?")
: tr("Do you really want to close all tabs to the top?");
@ -106,8 +105,9 @@ void TabContextMenu::closeToLeft()
void TabContextMenu::init()
{
TabWidget *tabWidget = m_window->tabWidget();
if (m_clickedTab != -1) {
WebTab* webTab = qobject_cast<WebTab*>(m_tabWidget->widget(m_clickedTab));
WebTab* webTab = tabWidget->webTab(m_clickedTab);
if (!webTab) {
return;
}
@ -131,14 +131,14 @@ void TabContextMenu::init()
}
addSeparator();
addAction(tr("Re&load All Tabs"), m_tabWidget, SLOT(reloadAllTabs()));
addAction(tr("Re&load All Tabs"), tabWidget, SLOT(reloadAllTabs()));
addAction(tr("Bookmark &All Tabs"), m_window, SLOT(bookmarkAllTabs()));
addSeparator();
if (m_showCloseOtherTabs) {
if (m_options & ShowCloseOtherTabsActions) {
addAction(tr("Close Ot&her Tabs"), this, SLOT(closeAllButCurrent()));
addAction(m_tabsOrientation == Qt::Horizontal ? tr("Close Tabs To The Right") : tr("Close Tabs To The Bottom"), this, SLOT(closeToRight()));
addAction(m_tabsOrientation == Qt::Horizontal ? tr("Close Tabs To The Left") : tr("Close Tabs To The Top"), this, SLOT(closeToLeft()));
addAction(m_options & HorizontalTabs ? tr("Close Tabs To The Right") : tr("Close Tabs To The Bottom"), this, SLOT(closeToRight()));
addAction(m_options & HorizontalTabs ? tr("Close Tabs To The Left") : tr("Close Tabs To The Top"), this, SLOT(closeToLeft()));
addSeparator();
}
@ -147,19 +147,18 @@ void TabContextMenu::init()
} else {
addAction(IconProvider::newTabIcon(), tr("&New tab"), m_window, SLOT(addTab()));
addSeparator();
addAction(tr("Reloa&d All Tabs"), m_tabWidget, SLOT(reloadAllTabs()));
addAction(tr("Reloa&d All Tabs"), tabWidget, SLOT(reloadAllTabs()));
addAction(tr("Bookmark &All Tabs"), m_window, SLOT(bookmarkAllTabs()));
addSeparator();
addAction(m_window->action(QSL("Other/RestoreClosedTab")));
}
m_window->action(QSL("Other/RestoreClosedTab"))->setEnabled(m_tabWidget->canRestoreTab());
m_window->action(QSL("Other/RestoreClosedTab"))->setEnabled(tabWidget->canRestoreTab());
}
void TabContextMenu::pinTab()
{
WebTab* webTab = qobject_cast<WebTab*>(m_tabWidget->widget(m_clickedTab));
WebTab* webTab = m_window->tabWidget()->webTab(m_clickedTab);
if (webTab) {
webTab->togglePinned();
}
@ -167,8 +166,7 @@ void TabContextMenu::pinTab()
void TabContextMenu::muteTab()
{
WebTab* webTab = qobject_cast<WebTab*>(m_tabWidget->widget(m_clickedTab));
WebTab* webTab = m_window->tabWidget()->webTab(m_clickedTab);
if (webTab) {
webTab->toggleMuted();
}

View File

@ -28,8 +28,19 @@ class TabWidget;
class FALKON_EXPORT TabContextMenu : public QMenu
{
Q_OBJECT
public:
explicit TabContextMenu(int index, Qt::Orientation orientation, BrowserWindow* window, TabWidget* tabWidget, bool showCloseOtherTabs = true);
enum Option {
InvalidOption = 0,
HorizontalTabs = 1 << 0,
VerticalTabs = 1 << 1,
ShowCloseOtherTabsActions = 1 << 2,
DefaultOptions = HorizontalTabs | ShowCloseOtherTabsActions
};
Q_DECLARE_FLAGS(Options, Option)
explicit TabContextMenu(int index, BrowserWindow *window, Options options = DefaultOptions);
signals:
void reloadTab(int index);
@ -61,10 +72,8 @@ private:
void init();
int m_clickedTab;
Qt::Orientation m_tabsOrientation;
BrowserWindow* m_window;
TabWidget* m_tabWidget;
bool m_showCloseOtherTabs;
BrowserWindow *m_window;
Options m_options = InvalidOption;
};
#endif // TABCONTEXTMENU_H

View File

@ -288,7 +288,11 @@ void TabManagerWidget::customContextMenuRequested(const QPoint &pos)
// if items are not grouped by Window then actions "Close Other Tabs",
// "Close Tabs To The Bottom" and "Close Tabs To The Top"
// are ambiguous and should be hidden.
menu = new TabContextMenu(index, Qt::Vertical, mainWindow, mainWindow->tabWidget(), m_groupType == GroupByWindow);
TabContextMenu::Options options = TabContextMenu::VerticalTabs;
if (m_groupType == GroupByWindow) {
options |= TabContextMenu::ShowCloseOtherTabsActions;
}
menu = new TabContextMenu(index, mainWindow, options);
menu->addSeparator();
}
}

View File

@ -27,8 +27,9 @@
#include <QToolTip>
#include <QHoverEvent>
TabListView::TabListView(QWidget *parent)
TabListView::TabListView(BrowserWindow *window, QWidget *parent)
: QListView(parent)
, m_window(window)
{
setDragEnabled(true);
setAcceptDrops(true);
@ -206,10 +207,9 @@ bool TabListView::viewportEvent(QEvent *event)
QContextMenuEvent *ce = static_cast<QContextMenuEvent*>(event);
const QModelIndex index = indexAt(ce->pos());
WebTab *tab = index.data(TabModel::WebTabRole).value<WebTab*>();
if (tab) {
TabContextMenu menu(tab, Qt::Horizontal, false);
menu.exec(ce->globalPos());
}
const int tabIndex = tab ? tab->tabIndex() : -1;
TabContextMenu menu(tabIndex, m_window, TabContextMenu::HorizontalTabs);
menu.exec(ce->globalPos());
break;
}
default:

View File

@ -19,6 +19,8 @@
#include <QListView>
class BrowserWindow;
class TabListDelegate;
class TabListView : public QListView
@ -26,7 +28,7 @@ class TabListView : public QListView
Q_OBJECT
public:
explicit TabListView(QWidget *parent = nullptr);
explicit TabListView(BrowserWindow *window, QWidget *parent = nullptr);
bool isHidingWhenEmpty() const;
void setHideWhenEmpty(bool enable);
@ -52,6 +54,7 @@ private:
DelegateButton buttonAt(const QPoint &pos, const QModelIndex &index) const;
void updateVisibility();
BrowserWindow *m_window;
TabListDelegate *m_delegate;
DelegateButton m_pressedButton = NoButton;
QModelIndex m_pressedIndex;

View File

@ -27,8 +27,9 @@
#include <QToolTip>
#include <QHoverEvent>
TabTreeView::TabTreeView(QWidget *parent)
TabTreeView::TabTreeView(BrowserWindow *window, QWidget *parent)
: QTreeView(parent)
, m_window(window)
, m_expandedSessionKey(QSL("VerticalTabs-expanded"))
{
setDragEnabled(true);
@ -289,10 +290,13 @@ bool TabTreeView::viewportEvent(QEvent *event)
QContextMenuEvent *ce = static_cast<QContextMenuEvent*>(event);
const QModelIndex index = indexAt(ce->pos());
WebTab *tab = index.data(TabModel::WebTabRole).value<WebTab*>();
if (tab) {
TabContextMenu menu(tab, Qt::Vertical, m_tabsInOrder);
menu.exec(ce->globalPos());
const int tabIndex = tab ? tab->tabIndex() : -1;
TabContextMenu::Options options = TabContextMenu::VerticalTabs;
if (m_tabsInOrder) {
options |= TabContextMenu::ShowCloseOtherTabsActions;
}
TabContextMenu menu(tabIndex, m_window, options);
menu.exec(ce->globalPos());
break;
}

View File

@ -19,6 +19,8 @@
#include <QTreeView>
class BrowserWindow;
class TabTreeDelegate;
class TabTreeView : public QTreeView
@ -27,7 +29,7 @@ class TabTreeView : public QTreeView
Q_PROPERTY(int backgroundIndentation READ backgroundIndentation WRITE setBackgroundIndentation)
public:
explicit TabTreeView(QWidget *parent = nullptr);
explicit TabTreeView(BrowserWindow *window, QWidget *parent = nullptr);
int backgroundIndentation() const;
void setBackgroundIndentation(int indentation);
@ -58,6 +60,7 @@ private:
void initView();
DelegateButton buttonAt(const QPoint &pos, const QModelIndex &index) const;
BrowserWindow *m_window;
TabTreeDelegate *m_delegate;
DelegateButton m_pressedButton = NoButton;
QPersistentModelIndex m_pressedIndex;

View File

@ -40,7 +40,7 @@ VerticalTabsWidget::VerticalTabsWidget(BrowserWindow *window)
layout->setSpacing(0);
layout->setContentsMargins(0, 0, 0, 0);
m_pinnedView = new TabListView(this);
m_pinnedView = new TabListView(m_window, this);
TabFilterModel *model = new TabFilterModel(m_pinnedView);
model->setFilterPinnedTabs(false);
model->setRejectDropOnLastIndex(true);
@ -48,7 +48,7 @@ VerticalTabsWidget::VerticalTabsWidget(BrowserWindow *window)
m_pinnedView->setModel(model);
m_pinnedView->setHideWhenEmpty(true);
m_normalView = new TabTreeView(this);
m_normalView = new TabTreeView(m_window, this);
m_pinnedView->setFocusProxy(m_normalView);
ToolButton *buttonAddTab = new ToolButton(this);