File indexing completed on 2024-12-01 11:10:30

0001 /*
0002     SPDX-FileCopyrightText: 2020 Michail Vourlakos <mvourlakos@gmail.com>
0003     SPDX-License-Identifier: GPL-2.0-or-later
0004 */
0005 
0006 #ifndef DETAILSDIALOGHANDLER_H
0007 #define DETAILSDIALOGHANDLER_H
0008 
0009 // local
0010 #include "../generic/generichandler.h"
0011 #include "../../data/layoutdata.h"
0012 #include "../../layout/abstractlayout.h"
0013 
0014 // Qt
0015 #include <QButtonGroup>
0016 #include <QSortFilterProxyModel>
0017 
0018 // KDE
0019 #include <KMessageBox>
0020 
0021 namespace Ui {
0022 class DetailsDialog;
0023 }
0024 
0025 namespace Latte{
0026 namespace Settings{
0027 namespace Dialog{
0028 class DetailsDialog;
0029 }
0030 }
0031 }
0032 
0033 namespace Latte{
0034 namespace Settings{
0035 namespace Model {
0036 class Colors;
0037 class Schemes;
0038 }
0039 }
0040 }
0041 
0042 
0043 namespace Latte {
0044 namespace Settings {
0045 namespace Handler {
0046 
0047 //! Handlers are objects to handle the UI elements that semantically associate with specific
0048 //! ui::tabs or different windows. They are responsible also to handle the user interaction
0049 //! between controllers and views
0050 
0051 class DetailsHandler : public Generic
0052 {
0053     Q_OBJECT
0054 public:
0055     DetailsHandler(Dialog::DetailsDialog *dialog);
0056     ~DetailsHandler();
0057 
0058     bool hasChangedData() const override;
0059     bool inDefaultValues() const override;
0060 
0061     Latte::Data::Layout currentData() const;
0062 
0063 public slots:
0064     void reset() override;
0065     void resetDefaults() override;
0066     void save() override;
0067 
0068 signals:
0069     void currentLayoutChanged();
0070 
0071 private slots:
0072     void onCurrentLayoutIndexChanged(int row);
0073     void onCurrentColorIndexChanged(int row);
0074     void onCurrentSchemeIndexChanged(int row);
0075 
0076     void clearIcon();
0077     void clearPattern();
0078     void selectBackground();
0079     void selectIcon();
0080     void selectTextColor();
0081     void updateWindowTitle();
0082     void updateCustomSchemeCmb(const int &row);
0083 
0084 private:
0085     void init();
0086     void reload();
0087 
0088     void setIsShownInMenu(bool inMenu);
0089     void setHasDisabledBorders(bool disabled);
0090 
0091     void setBackground(const QString &background);
0092     void setCustomSchemeFile(const QString &file);
0093     void setTextColor(const QString &textColor);
0094     void setColor(const QString &color);
0095     void setIcon(const QString &icon);
0096 
0097     void setPopUpMargin(const int &margin);
0098 
0099     void setBackgroundStyle(const Latte::Layout::BackgroundStyle &style);
0100 
0101     void loadLayout(const Latte::Data::Layout &data);
0102 
0103     KMessageBox::ButtonCode saveChangesConfirmation();
0104 
0105 private:
0106     Dialog::DetailsDialog *m_dialog{nullptr};
0107     Ui::DetailsDialog *m_ui{nullptr};
0108 
0109     QSortFilterProxyModel *m_layoutsProxyModel{nullptr};
0110 
0111     int m_lastConfirmedLayoutIndex{-1};
0112 
0113     //! current data
0114     Model::Colors *m_colorsModel{nullptr};
0115     Model::Schemes *m_schemesModel{nullptr};
0116 
0117     QButtonGroup *m_backButtonsGroup;
0118 
0119     Latte::Data::Layout o_data;
0120     Latte::Data::Layout c_data;
0121 };
0122 
0123 }
0124 }
0125 }
0126 
0127 #endif