File indexing completed on 2025-02-02 04:26:11

0001 /* SPDX-FileCopyrightText: 2022 Noah Davis <noahadvs@gmail.com>
0002  * SPDX-License-Identifier: LGPL-2.0-or-later
0003  */
0004 
0005 #ifndef OPTIONSMENU_H
0006 #define OPTIONSMENU_H
0007 
0008 #include "SpectacleMenu.h"
0009 
0010 #include "Gui/SmartSpinBox.h"
0011 
0012 #include <QActionGroup>
0013 #include <QHBoxLayout>
0014 #include <QLabel>
0015 #include <QList>
0016 #include <QWidgetAction>
0017 
0018 #include <memory>
0019 
0020 /**
0021  * A menu that allows choosing capture modes and related options.
0022  */
0023 class OptionsMenu : public SpectacleMenu
0024 {
0025     Q_OBJECT
0026 
0027 public:
0028     static OptionsMenu *instance();
0029 
0030     Q_SLOT void showPreferencesDialog();
0031 
0032     void setCaptureModeOptionsEnabled(bool enabled);
0033 
0034 protected:
0035     void changeEvent(QEvent *event) override;
0036 
0037 private:
0038     explicit OptionsMenu(QWidget *parent = nullptr);
0039 
0040     void delayActionLayoutUpdate();
0041     Q_SLOT void updateCaptureModes();
0042 
0043     QList<QAction *> captureModeActions;
0044     const std::unique_ptr<QAction> captureModeSection;
0045     const std::unique_ptr<QActionGroup> captureModeGroup;
0046     const std::unique_ptr<QAction> captureSettingsSection;
0047     const std::unique_ptr<QAction> includeMousePointerAction;
0048     const std::unique_ptr<QAction> includeWindowDecorationsAction;
0049     const std::unique_ptr<QAction> includeWindowShadowAction;
0050     const std::unique_ptr<QAction> onlyCapturePopupAction;
0051     const std::unique_ptr<QAction> quitAfterSaveAction;
0052     const std::unique_ptr<QAction> captureOnClickAction;
0053     const std::unique_ptr<QWidgetAction> delayAction;
0054     const std::unique_ptr<QWidget> delayWidget;
0055     const std::unique_ptr<QHBoxLayout> delayLayout;
0056     const std::unique_ptr<QLabel> delayLabel;
0057     const std::unique_ptr<SmartSpinBox> delaySpinBox;
0058 
0059     bool captureModesInitialized = false;
0060     bool shouldUpdateCaptureModes = true;
0061     bool updatingDelayActionLayout = false;
0062     bool captureModeOptionsEnabled = true;
0063 
0064     friend class OptionsMenuSingleton;
0065 };
0066 
0067 #endif // OPTIONSMENU_H