File indexing completed on 2024-05-05 05:35:25

0001 //////////////////////////////////////////////////////////////////////////////
0002 // oxygenmnemonics.cpp
0003 // enable/disable mnemonics display
0004 // -------------------
0005 //
0006 // SPDX-FileCopyrightText: 2011 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0007 //
0008 // SPDX-License-Identifier: LGPL-2.0-only
0009 //////////////////////////////////////////////////////////////////////////////
0010 
0011 #include "oxygenmnemonics.h"
0012 
0013 #include <QKeyEvent>
0014 #include <QWidget>
0015 
0016 namespace Oxygen
0017 {
0018 //____________________________________________________
0019 void Mnemonics::setMode(int mode)
0020 {
0021     switch (mode) {
0022     case StyleConfigData::MN_NEVER:
0023         qApp->removeEventFilter(this);
0024         setEnabled(false);
0025         break;
0026 
0027     default:
0028     case StyleConfigData::MN_ALWAYS:
0029         qApp->removeEventFilter(this);
0030         setEnabled(true);
0031         break;
0032 
0033     case StyleConfigData::MN_AUTO:
0034         qApp->removeEventFilter(this);
0035         qApp->installEventFilter(this);
0036         setEnabled(false);
0037         break;
0038     }
0039 
0040     return;
0041 }
0042 
0043 //____________________________________________________
0044 bool Mnemonics::eventFilter(QObject *, QEvent *event)
0045 {
0046     switch (event->type()) {
0047     case QEvent::KeyPress:
0048         if (static_cast<QKeyEvent *>(event)->key() == Qt::Key_Alt) {
0049             setEnabled(true);
0050         }
0051         break;
0052 
0053     case QEvent::KeyRelease:
0054         if (static_cast<QKeyEvent *>(event)->key() == Qt::Key_Alt) {
0055             setEnabled(false);
0056         }
0057         break;
0058 
0059     case QEvent::ApplicationStateChange: {
0060         setEnabled(false);
0061     } break;
0062 
0063     default:
0064         break;
0065     }
0066 
0067     return false;
0068 }
0069 
0070 //____________________________________________________
0071 void Mnemonics::setEnabled(bool value)
0072 {
0073     if (_enabled == value)
0074         return;
0075 
0076     _enabled = value;
0077 
0078     // update all top level widgets
0079     const auto topWidgets = qApp->topLevelWidgets();
0080     for (QWidget *widget : topWidgets) {
0081         widget->update();
0082     }
0083 }
0084 }