File indexing completed on 2024-04-14 05:24:30

0001 /*
0002     SPDX-FileCopyrightText: 2020 Michail Vourlakos <mvourlakos@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #ifndef SETTINGSGENERICHANDLER_H
0007 #define SETTINGSGENERICHANDLER_H
0008 
0009 //! Qt
0010 #include <QAction>
0011 #include <QObject>
0012 #include <QPushButton>
0013 
0014 // KDE
0015 #include <KMessageWidget>
0016 
0017 namespace Latte {
0018 namespace Settings {
0019 namespace Dialog {
0020 class GenericDialog;
0021 }
0022 }
0023 }
0024 
0025 
0026 namespace Latte {
0027 namespace Settings {
0028 namespace Handler {
0029 
0030 //! Handlers are objects to handle the UI elements that semantically associate with specific
0031 //! ui::tabs or different windows. They are responsible also to handle the user interaction
0032 //! between controllers and views
0033 
0034 class Generic : public QObject
0035 {
0036     Q_OBJECT
0037 public:
0038     static constexpr const char* TWINENABLED = "Enabled";
0039     static constexpr const char* TWINVISIBLE = "Visible";
0040     static constexpr const char* TWINCHECKED = "Checked";
0041 
0042     Generic(Dialog::GenericDialog *parent);
0043     Generic(Dialog::GenericDialog *parentDialog, QObject *parent);
0044 
0045     virtual bool hasChangedData() const = 0;
0046     virtual bool inDefaultValues() const = 0;
0047 
0048     void showInlineMessage(const QString &msg, const KMessageWidget::MessageType &type, const bool &isPersistent = false, QList<QAction *> actions = QList<QAction *>());
0049 
0050 public slots:
0051     virtual void reset() = 0;
0052     virtual void resetDefaults() = 0;
0053     virtual void save() = 0;
0054 
0055 signals:
0056     void dataChanged();
0057 
0058 protected:
0059     void setTwinProperty(QAction *action, const QString &property, QVariant value);
0060     void connectActionWithButton(QPushButton *button, QAction *action);
0061 
0062 private:
0063     //! Twin Actions bind QAction* behavior with QPushButton*
0064     //! for simplicity reasons
0065     QHash<QAction *, QPushButton *> m_twinActions;
0066 
0067     Dialog::GenericDialog *m_dialog;
0068 
0069 
0070 };
0071 
0072 }
0073 }
0074 }
0075 
0076 #endif