File indexing completed on 2024-06-09 04:26:04

0001 /* This file is part of the KDE libraries
0002     SPDX-FileCopyrightText: 1999 Reginald Stadlbauer <reggie@kde.org>
0003     SPDX-FileCopyrightText: 1999 Simon Hausmann <hausmann@kde.org>
0004     SPDX-FileCopyrightText: 2000 Nicolas Hadacek <haadcek@kde.org>
0005     SPDX-FileCopyrightText: 2000 Kurt Granroth <granroth@kde.org>
0006     SPDX-FileCopyrightText: 2000 Michael Koch <koch@kde.org>
0007     SPDX-FileCopyrightText: 2001 Holger Freyther <freyther@kde.org>
0008     SPDX-FileCopyrightText: 2002 Ellis Whitehead <ellis@kde.org>
0009     SPDX-FileCopyrightText: 2002 Joseph Wenninger <jowenn@kde.org>
0010     SPDX-FileCopyrightText: 2003 Andras Mantia <amantia@kde.org>
0011     SPDX-FileCopyrightText: 2005-2006 Hamish Rodda <rodda@kde.org>
0012 
0013     SPDX-License-Identifier: LGPL-2.0-only
0014 */
0015 
0016 #include "ktoggletoolbaraction.h"
0017 
0018 #include <QByteArray>
0019 #include <QEvent>
0020 #include <QPointer>
0021 
0022 #include <klocalizedstring.h>
0023 
0024 #include "kmainwindow.h"
0025 #include "ktoolbar.h"
0026 
0027 class KToggleToolBarAction::Private
0028 {
0029 public:
0030     Private()
0031         : toolBarName(0), toolBar(0), beingToggled(false)
0032     {
0033     }
0034 
0035     QByteArray toolBarName;
0036     QPointer<KisToolBar> toolBar;
0037     bool beingToggled;
0038 };
0039 
0040 KToggleToolBarAction::KToggleToolBarAction(const char *toolBarName, const QString &text, QObject *parent)
0041     : KToggleAction(text, parent),
0042       d(new Private)
0043 {
0044     d->toolBarName = toolBarName;
0045 }
0046 
0047 KToggleToolBarAction::KToggleToolBarAction(KisToolBar *toolBar, const QString &text, QObject *parent)
0048     : KToggleAction(text, parent),
0049       d(new Private)
0050 {
0051     d->toolBar = toolBar;
0052     d->toolBar->installEventFilter(this);
0053 
0054     d->beingToggled = true;
0055     setChecked(d->toolBar->isVisible());
0056     d->beingToggled = false;
0057 }
0058 
0059 KToggleToolBarAction::~KToggleToolBarAction()
0060 {
0061     delete d;
0062 }
0063 
0064 bool KToggleToolBarAction::eventFilter(QObject *watched, QEvent *event)
0065 {
0066     if (d->beingToggled) {
0067         return false;
0068     }
0069 
0070     d->beingToggled = true;
0071 
0072     if (watched == d->toolBar) {
0073         switch (event->type()) {
0074         case QEvent::Hide:
0075             if (isChecked()) {
0076                 setChecked(false);
0077             }
0078             break;
0079 
0080         case QEvent::Show:
0081             if (!isChecked()) {
0082                 setChecked(true);
0083             }
0084             break;
0085 
0086         default:
0087             break;
0088         }
0089     }
0090 
0091     d->beingToggled = false;
0092 
0093     return false;
0094 }
0095 
0096 KisToolBar *KToggleToolBarAction::toolBar()
0097 {
0098     return d->toolBar;
0099 }
0100 
0101 void KToggleToolBarAction::slotToggled(bool checked)
0102 {
0103     if (!d->beingToggled && d->toolBar && checked != d->toolBar->isVisible()) {
0104         d->beingToggled = true;
0105         d->toolBar->setVisible(checked);
0106         d->beingToggled = false;
0107 
0108         QMainWindow *mw = d->toolBar->mainWindow();
0109         if (mw && qobject_cast<KisKMainWindow *>(mw)) {
0110             static_cast<KisKMainWindow *>(mw)->setSettingsDirty();
0111         }
0112     }
0113 
0114     KToggleAction::slotToggled(checked);
0115 }
0116