1
mirror of https://invent.kde.org/network/falkon.git synced 2024-12-20 02:36:34 +01:00

NavigationBar: Add support for badge text in tool buttons

This commit is contained in:
David Rosca 2018-01-06 15:53:52 +01:00
parent 8827b1fb90
commit 15a2afb4b6
8 changed files with 66 additions and 1 deletions

View File

@ -381,7 +381,11 @@ void NavigationBar::aboutToShowToolsMenu()
for (const WidgetData &data : qAsConst(m_widgets)) { for (const WidgetData &data : qAsConst(m_widgets)) {
AbstractButtonInterface *button = data.button; AbstractButtonInterface *button = data.button;
if (button && !m_layoutIds.contains(data.id)) { if (button && !m_layoutIds.contains(data.id)) {
m_menuTools->addAction(button->icon(), button->title(), this, &NavigationBar::toolActionActivated)->setData(data.id); QString title = button->title();
if (!button->badgeLabelText().isEmpty()) {
title.append(QSL(" (%1)").arg(button->badgeLabelText()));
}
m_menuTools->addAction(button->icon(), title, this, &NavigationBar::toolActionActivated)->setData(data.id);
} }
} }

View File

@ -18,6 +18,7 @@
#include "navigationbartoolbutton.h" #include "navigationbartoolbutton.h"
#include "abstractbuttoninterface.h" #include "abstractbuttoninterface.h"
#include <QLabel>
#include <QApplication> #include <QApplication>
NavigationBarToolButton::NavigationBarToolButton(AbstractButtonInterface *button, QWidget *parent) NavigationBarToolButton::NavigationBarToolButton(AbstractButtonInterface *button, QWidget *parent)
@ -28,12 +29,21 @@ NavigationBarToolButton::NavigationBarToolButton(AbstractButtonInterface *button
setToolbarButtonLook(true); setToolbarButtonLook(true);
setFocusPolicy(Qt::NoFocus); setFocusPolicy(Qt::NoFocus);
m_badgeLabel = new QLabel(this);
m_badgeLabel->setObjectName(QSL("navigation-toolbutton-badge"));
QFont f = m_badgeLabel->font();
f.setPixelSize(m_badgeLabel->height() / 2.5);
m_badgeLabel->setFont(f);
m_badgeLabel->hide();
setToolTip(button->toolTip()); setToolTip(button->toolTip());
updateIcon(); updateIcon();
updateBadge();
connect(button, &AbstractButtonInterface::iconChanged, this, &NavigationBarToolButton::updateIcon); connect(button, &AbstractButtonInterface::iconChanged, this, &NavigationBarToolButton::updateIcon);
connect(button, &AbstractButtonInterface::activeChanged, this, &NavigationBarToolButton::updateIcon); connect(button, &AbstractButtonInterface::activeChanged, this, &NavigationBarToolButton::updateIcon);
connect(button, &AbstractButtonInterface::toolTipChanged, this, &NavigationBarToolButton::setToolTip); connect(button, &AbstractButtonInterface::toolTipChanged, this, &NavigationBarToolButton::setToolTip);
connect(button, &AbstractButtonInterface::badgeLabelTextChanged, this, &NavigationBarToolButton::updateBadge);
connect(this, &ToolButton::clicked, this, &NavigationBarToolButton::clicked); connect(this, &ToolButton::clicked, this, &NavigationBarToolButton::clicked);
} }
@ -61,3 +71,15 @@ void NavigationBarToolButton::updateIcon()
const QImage img = m_button->icon().pixmap(iconSize(), mode).toImage(); const QImage img = m_button->icon().pixmap(iconSize(), mode).toImage();
setIcon(QPixmap::fromImage(img, Qt::MonoOnly)); setIcon(QPixmap::fromImage(img, Qt::MonoOnly));
} }
void NavigationBarToolButton::updateBadge()
{
if (m_button->badgeLabelText().isEmpty()) {
m_badgeLabel->hide();
} else {
m_badgeLabel->setText(m_button->badgeLabelText());
m_badgeLabel->resize(m_badgeLabel->sizeHint());
m_badgeLabel->move(width() - m_badgeLabel->width(), 0);
m_badgeLabel->show();
}
}

View File

@ -20,6 +20,8 @@
#include "qzcommon.h" #include "qzcommon.h"
#include "toolbutton.h" #include "toolbutton.h"
class QLabel;
class AbstractButtonInterface; class AbstractButtonInterface;
class QUPZILLA_EXPORT NavigationBarToolButton : public ToolButton class QUPZILLA_EXPORT NavigationBarToolButton : public ToolButton
@ -30,6 +32,8 @@ public:
private: private:
void clicked(); void clicked();
void updateIcon(); void updateIcon();
void updateBadge();
AbstractButtonInterface *m_button; AbstractButtonInterface *m_button;
QLabel *m_badgeLabel = nullptr;
}; };

View File

@ -57,6 +57,13 @@
qproperty-icon: url(images/menu.png); qproperty-icon: url(images/menu.png);
} }
#navigation-toolbutton-badge
{
background: palette(dark);
color: palette(bright-text);
margin: 0px 1px;
}
/*TabWidget*/ /*TabWidget*/
#tabbar::tab #tabbar::tab
{ {

View File

@ -101,6 +101,13 @@
qproperty-multiIcon: url(images/navigation-supermenu.png); qproperty-multiIcon: url(images/navigation-supermenu.png);
} }
#navigation-toolbutton-badge
{
background: palette(dark);
color: palette(bright-text);
margin: 0px 1px;
}
ToolButton[toolbar-look="true"] ToolButton[toolbar-look="true"]
{ {
qproperty-iconSize: 16px 16px; qproperty-iconSize: 16px 16px;

View File

@ -59,6 +59,13 @@
qproperty-fallbackIcon: url(images/menu.svg); qproperty-fallbackIcon: url(images/menu.svg);
} }
#navigation-toolbutton-badge
{
background: palette(dark);
color: palette(bright-text);
margin: 0px 1px;
}
/*TabWidget*/ /*TabWidget*/
#tabbar-button-right #tabbar-button-right
{ {

View File

@ -102,6 +102,13 @@
qproperty-multiIcon: url(images/navigation-supermenu.png); qproperty-multiIcon: url(images/navigation-supermenu.png);
} }
#navigation-toolbutton-badge
{
background: palette(dark);
color: palette(bright-text);
margin: 0px 1px;
}
/*TabWidget*/ /*TabWidget*/
#tabbar-button-right #tabbar-button-right
{ {

View File

@ -112,6 +112,13 @@
qproperty-iconSize: 23px 22px; qproperty-iconSize: 23px 22px;
} }
#navigation-toolbutton-badge
{
background: palette(dark);
color: palette(bright-text);
margin: 0px 1px;
}
/*TabWidget*/ /*TabWidget*/
#tabbar-button-right #tabbar-button-right
{ {