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