File indexing completed on 2024-04-21 03:59:33

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 1997 Matthias Kalle Dalheimer <kalle@kde.org>
0004     SPDX-FileCopyrightText: 1998, 1999, 2000 KDE Team
0005     SPDX-FileCopyrightText: 2008 Nick Shaforostoff <shaforostoff@kde.ru>
0006 
0007     SPDX-License-Identifier: LGPL-2.0-or-later
0008 */
0009 
0010 #ifndef KCHECKACCELERATORS_H_
0011 #define KCHECKACCELERATORS_H_
0012 
0013 #include <QObject>
0014 #include <QPointer>
0015 
0016 #include <QTimer>
0017 
0018 class QDialog;
0019 class QTextBrowser;
0020 
0021 /**
0022  @internal
0023  This class allows translators (and application developers) to check for accelerator
0024  conflicts in menu and widgets. Put the following in your kdeglobals (or the config
0025  file for the application you're testing):
0026 
0027  \code
0028  [Development]
0029  CheckAccelerators=F12
0030  AutoCheckAccelerators=false
0031  AlwaysShowCheckAccelerators=false
0032  \endcode
0033 
0034  The checking can be either manual or automatic. To perform manual check, press
0035  the keyboard shortcut set to 'CheckAccelerators' (here F12). If automatic checking
0036  is enabled by setting 'AutoCheckAccelerators' to true, check will be performed every
0037  time the GUI changes. It's possible that in certain cases the check will be
0038  done also when no visible changes in the GUI happen or the check won't be done
0039  even if the GUI changed (in the latter case, use manual check ). Automatic
0040  checks can be anytime disabled by the checkbox in the dialog presenting
0041  the results of the check. If you set 'AlwaysShowCheckAccelerators' to true,
0042  the dialog will be shown even if the automatic check didn't find any conflicts,
0043  and all submenus will be shown, even those without conflicts.
0044 
0045  The dialog first lists the name of the window, then all results for all menus
0046  (if the window has a menubar) and then result for all controls in the active
0047  window (if there are any checkboxes etc.). For every submenu and all controls
0048  there are shown all conflicts grouped by accelerator, and a list of all used
0049  accelerators.
0050 */
0051 
0052 class KCheckAccelerators : public QObject
0053 {
0054     Q_OBJECT
0055 public:
0056     KCheckAccelerators(QObject *parent, int key, bool autoCheck);
0057     /**
0058      * Re-implemented to filter the parent's events.
0059      */
0060     bool eventFilter(QObject *, QEvent *e) override;
0061 
0062 private:
0063     void checkAccelerators(bool automatic);
0064     int key;
0065     bool block;
0066     bool alwaysShow;
0067     bool autoCheck;
0068 
0069     QTimer autoCheckTimer;
0070     void createDialog(QWidget *parent, bool automatic);
0071     QPointer<QDialog> drklash;
0072     QTextBrowser *drklash_view;
0073 
0074 private Q_SLOTS:
0075     void autoCheckSlot();
0076     void slotDisableCheck(bool);
0077 };
0078 
0079 #endif