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

TabManager: Port icon to AbstractButtonInterface

It is now available from both NavigationBar and StatusBar
This commit is contained in:
David Rosca 2018-01-24 20:31:53 +01:00
parent cc55c0ad02
commit 32e7ec1826
2 changed files with 51 additions and 26 deletions

View File

@ -18,12 +18,13 @@
* ============================================================ */
#include "tabmanagerwidgetcontroller.h"
#include "tabmanagerwidget.h"
#include "clickablelabel.h"
#include "abstractbuttoninterface.h"
#include "browserwindow.h"
#include "tabwidget.h"
#include "mainapplication.h"
#include "tabbar.h"
#include "statusbar.h"
#include "navigationbar.h"
#include <QDesktopWidget>
#include <QAction>
@ -31,6 +32,26 @@
#include <QDebug>
class TabManagerButton : public AbstractButtonInterface
{
public:
explicit TabManagerButton(QObject *parent = nullptr)
: AbstractButtonInterface(parent)
{
}
QString id() const override
{
return QSL("tabmanager-icon");
}
QString name() const override
{
return tr("Tab Manager button");
}
};
TabManagerWidgetController::TabManagerWidgetController(QObject* parent)
: SideBarInterface(parent)
, m_defaultTabManager(0)
@ -63,7 +84,7 @@ QWidget* TabManagerWidgetController::createSideBarWidget(BrowserWindow* mainWind
return createTabManagerWidget(mainWindow, mainWindow);
}
QWidget* TabManagerWidgetController::createStatusBarIcon(BrowserWindow* mainWindow)
AbstractButtonInterface* TabManagerWidgetController::createStatusBarIcon(BrowserWindow* mainWindow)
{
if (!defaultTabManager()) {
return 0;
@ -73,11 +94,27 @@ QWidget* TabManagerWidgetController::createStatusBarIcon(BrowserWindow* mainWind
return m_statusBarIcons.value(mainWindow);
}
ClickableLabel* icon = new ClickableLabel(mainWindow);
icon->setCursor(Qt::PointingHandCursor);
QPixmap p(":tabmanager/data/tabmanager.png");
icon->setPixmap(p.scaledToHeight(16));
TabManagerButton* icon = new TabManagerButton(this);
icon->setIcon(QPixmap(":tabmanager/data/tabmanager.png"));
icon->setTitle(tr("Tab Manager"));
icon->setToolTip(tr("Show Tab Manager"));
connect(icon, &AbstractButtonInterface::clicked, this, [=](AbstractButtonInterface::ClickController *c) {
if (!defaultTabManager()) {
return;
}
static int frameWidth = (defaultTabManager()->frameGeometry().width() - defaultTabManager()->geometry().width()) / 2;
static int titleBarHeight = defaultTabManager()->style()->pixelMetric(QStyle::PM_TitleBarHeight);
QSize newSize(defaultTabManager()->width(), mainWindow->height() - titleBarHeight - frameWidth);
QRect newGeo(c->popupPosition(newSize), newSize);
defaultTabManager()->setGeometry(newGeo);
raiseTabManager();
QTimer::singleShot(0, this, [=]() {
c->popupClosed();
});
});
QAction* showAction = createMenuAction();
showAction->setCheckable(false);
@ -85,8 +122,6 @@ QWidget* TabManagerWidgetController::createStatusBarIcon(BrowserWindow* mainWind
mainWindow->addAction(showAction);
connect(showAction, SIGNAL(triggered()), this, SLOT(raiseTabManager()));
connect(icon, SIGNAL(clicked(QPoint)), this, SLOT(raiseTabManager()));
m_statusBarIcons.insert(mainWindow, icon);
m_actions.insert(mainWindow, showAction);
@ -137,14 +172,16 @@ TabManagerWidget* TabManagerWidgetController::defaultTabManager()
void TabManagerWidgetController::addStatusBarIcon(BrowserWindow* window)
{
if (window) {
window->statusBar()->addPermanentWidget(createStatusBarIcon(window));
window->statusBar()->addButton(createStatusBarIcon(window));
window->navigationBar()->addToolButton(createStatusBarIcon(window));
}
}
void TabManagerWidgetController::removeStatusBarIcon(BrowserWindow* window)
{
if (window) {
window->statusBar()->removeWidget(m_statusBarIcons.value(window));
window->statusBar()->removeButton(m_statusBarIcons.value(window));
window->navigationBar()->removeToolButton(m_statusBarIcons.value(window));
window->removeAction(m_actions.value(window));
delete m_actions.value(window);
delete m_statusBarIcons.value(window);
@ -166,20 +203,6 @@ void TabManagerWidgetController::raiseTabManager()
return;
}
ClickableLabel* icon = qobject_cast<ClickableLabel*>(sender());
if (icon) {
static int frameWidth = (defaultTabManager()->frameGeometry().width() - defaultTabManager()->geometry().width()) / 2;
static int titleBarHeight = defaultTabManager()->style()->pixelMetric(QStyle::PM_TitleBarHeight);
int y = qMax(0, icon->mapToGlobal(QPoint(0, 0)).y() - 1 - icon->window()->height() + titleBarHeight - frameWidth);
int x = icon->mapToGlobal(QPoint(0, 0)).x();
if (!mApp->isRightToLeft()) {
x -= defaultTabManager()->width();
}
QRect newGeo(x, y, defaultTabManager()->width(), icon->window()->height() - titleBarHeight - frameWidth);
defaultTabManager()->setGeometry(newGeo);
}
defaultTabManager()->activateWindow();
defaultTabManager()->showNormal();
defaultTabManager()->raise();

View File

@ -1,6 +1,7 @@
/* ============================================================
* TabManager plugin for Falkon
* Copyright (C) 2013-2017 S. Razi Alavizadeh <s.r.alavizadeh@gmail.com>
* Copyright (C) 2018 David Rosca <nowrep@gmail.com>
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
@ -22,6 +23,7 @@
#include "tabmanagerwidget.h"
class WebPage;
class AbstractButtonInterface;
class TabManagerWidgetController : public SideBarInterface
{
@ -34,7 +36,7 @@ public:
QAction* createMenuAction();
QWidget* createSideBarWidget(BrowserWindow* mainWindow);
QWidget* createStatusBarIcon(BrowserWindow* mainWindow);
AbstractButtonInterface* createStatusBarIcon(BrowserWindow* mainWindow);
TabManagerWidget::GroupType groupType();
TabManagerWidget* createTabManagerWidget(BrowserWindow* mainClass, QWidget* parent = 0, bool defaultWidget = false);
@ -55,7 +57,7 @@ private:
TabManagerWidget* m_defaultTabManager;
TabManagerWidget::GroupType m_groupType;
QHash<BrowserWindow*, QWidget*> m_statusBarIcons;
QHash<BrowserWindow*, AbstractButtonInterface*> m_statusBarIcons;
QHash<BrowserWindow*, QAction*> m_actions;
signals: