12#include <QActionEvent>
13#include <QActionGroup>
18RibbonQuickAccessButton::RibbonQuickAccessButton(QWidget *parent)
20 , m_orientation(Qt::Horizontal)
30 QSize sz = QToolButton::sizeHint();
31 if (m_orientation == Qt::Horizontal) {
32 return QSize(sz.width() / 2, sz.height());
34 return QSize(sz.width(), sz.height() / 2);
40 m_orientation = orientation;
48 , m_removingAction(false)
49 , m_takingAction(false)
60 q->setAutoFillBackground(
false);
61 q->setAttribute(Qt::WA_NoSystemBackground);
62 q->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
64 const int sz = q->style()->pixelMetric(QStyle::PM_SmallIconSize,
Q_NULLPTR, q);
65 q->setIconSize(QSize(sz, sz));
69 QObject::connect(q, SIGNAL(orientationChanged(Qt::Orientation)),
m_accessPopup,
70 SLOT(setOrientation(Qt::Orientation)));
105 if (wrapper->isChecked() == visible) {
114 wrapper->setChecked(visible);
122 bool actionInBar = (q->widgetForAction(srcAction) != NULL);
123 bool actionIsVisible = srcAction->isVisible();
127 if (actionIsVisible) {
131 srcAction->setVisible(
true);
137 q->insertAction(before, srcAction);
139 q->addAction(srcAction);
146 q->removeAction(srcAction);
158 if (a->isChecked() || (q->widgetForAction(a->
m_srcAction) != NULL)) {
161 }
else if (act == action) {
173 Q_EMIT q->customizeActionChanged();
182 m_menu->addAction(action);
184 Q_EMIT q->showCustomizeMenu(
m_menu);
198 layout()->setSizeConstraint(QLayout::SetFixedSize);
206 return d->m_actionAccessPopup;
212 d->setActionVisible(action, visible);
219 return wrapper->isChecked();
228 QList<QAction *> list = d->m_customizeGroup->actions();
229 for (
int i = 0, count = list.count(); i < count; ++i) {
231 if (act->isChecked()) {
243 foreach (QAction *act, d->m_actionList) {
244 s.append(act->isChecked() ?
'1' :
'0');
255 int cnt =
static_cast<int>(s.size());
257 foreach (QAction *action, d->m_actionList) {
260 if (s.at(j) ==
'1' && !act->isChecked()) {
261 d->setActionVisible(act, act->m_srcAction,
true);
262 }
else if (s.at(j) ==
'0' && act->isChecked()) {
263 d->setActionVisible(act, act->m_srcAction,
false);
273 if (parentWidget() && (
event->type() == QEvent::Hide ||
event->type() == QEvent::Show)) {
275 }
else if (
event->type() == QEvent::StyleChange) {
276 const int sz = style()->pixelMetric(QStyle::PM_SmallIconSize,
Q_NULLPTR,
this);
277 setIconSize(QSize(sz, sz));
279 return QToolBar::event(
event);
285 QToolBar::actionEvent(
event);
286 if (d->m_actionAccessPopup) {
287 if (
event->type() == QEvent::ActionAdded) {
288 if (!d->m_removingAction) {
290 removeAction(d->m_actionAccessPopup);
293 if (
event->action() != d->m_actionAccessPopup && !quickAccessAction) {
295 d->m_actionList.append(act);
296 d->m_customizeGroup->addAction(act);
298 }
else if (quickAccessAction) {
299 quickAccessAction->
update();
301 }
else if (
event->type() == QEvent::ActionRemoved) {
302 if (
event->action() == d->m_actionAccessPopup) {
303 d->m_removingAction =
true;
304 addAction(d->m_actionAccessPopup);
305 d->m_removingAction =
false;
307 if (d->m_takingAction) {
308 d->m_takingAction =
false;
313 d->m_actionList.removeOne(act);
314 d->m_customizeGroup->removeAction(act);
318 }
else if (
event->type() == QEvent::ActionChanged) {
319 if (
event->action() == d->m_actionAccessPopup) {
320 d->m_accessPopup->setDefaultAction(d->m_actionAccessPopup);
322 d->updateAction(
event->action());
RibbonQuickAccessButton * m_accessPopup
QList< QAction * > m_actionList
void aboutToHideCustomizeMenu()
void customizeAction(QAction *action)
QActionGroup * m_customizeGroup
QAction * nextSrcAction(QAction *action)
QAction * m_actionAccessPopup
void aboutToShowCustomizeMenu()
RibbonQuickAccessBarPrivate()
void setActionVisible(QAction *action, bool visible)
void updateAction(QAction *action)
void setActionShown(QuickAccessAction *action, QAction *srcAction, bool visible)
virtual ~RibbonQuickAccessBarPrivate()
QuickAccessAction * findQuickAccessAction(QAction *action) const
virtual bool event(QEvent *event)
QAction * actionCustomizeButton() const
virtual ~RibbonQuickAccessBar()
virtual void actionEvent(QActionEvent *event)
void setActionVisible(QAction *action, bool visible)
RibbonQuickAccessBar(QWidget *parent=Q_NULLPTR)
bool isActionVisible(QAction *action) const
void setState(const QByteArray &s)
#define QX_INIT_PRIVATE(Class)
#define Q_NULLPTR
Copyleft (C) 2025 maminjie canpool@163.com SPDX-License-Identifier: MulanPSL-2.0
#define QX_FINI_PRIVATE()
#define QX_RIBBON_END_NAMESPACE
#define QX_RIBBON_BEGIN_NAMESPACE