1 2 /* 3 * SPDX-FileCopyrightText: 2021 Michail Vourlakos <mvourlakos@gmail.com> 4 * 5 * This file is part of Latte-Dock 6 * 7 * SPDX-License-Identifier: GPL-2.0-or-later 8 * 9 */ 10 11 #ifndef VIEWSMODEL_H 12 #define VIEWSMODEL_H 13 14 // local 15 #include "../../lattecorona.h" 16 #include "../../data/genericbasictable.h" 17 #include "../../data/screendata.h" 18 #include "../../data/viewdata.h" 19 #include "../../data/viewstable.h" 20 #include "../../layout/centrallayout.h" 21 22 // Qt 23 #include <QAbstractTableModel> 24 #include <QModelIndex> 25 26 namespace Latte { 27 namespace Settings { 28 namespace Model { 29 30 class Views : public QAbstractTableModel 31 { 32 Q_OBJECT 33 34 public: 35 enum Columns 36 { 37 IDCOLUMN = 0, 38 NAMECOLUMN, 39 SCREENCOLUMN, 40 EDGECOLUMN, 41 ALIGNMENTCOLUMN, 42 SUBCONTAINMENTSCOLUMN, 43 LASTCOLUMN 44 }; 45 46 enum Roles 47 { 48 IDROLE = Qt::UserRole + 1, 49 NAMEROLE, 50 ISACTIVEROLE, 51 ISCHANGEDROLE, 52 HASCHANGEDVIEWROLE, 53 CHOICESROLE, 54 SCREENROLE, 55 VIEWROLE, 56 ISMOVEORIGINROLE, 57 ERRORSROLE, 58 WARNINGSROLE, 59 SORTINGROLE 60 }; 61 62 enum SortingPriority 63 { 64 NORMALPRIORITY = 10, 65 MEDIUMPRIORITY = 100, 66 HIGHPRIORITY = 1000, 67 HIGHESTPRIORITY = 10000 68 }; 69 70 explicit Views(QObject *parent, Latte::Corona *corona); 71 ~Views(); 72 73 bool hasChangedData() const; 74 bool containsCurrentName(const QString &name) const; 75 76 //! all original data will become also current 77 void resetData(); 78 79 void appendTemporaryView(const Latte::Data::View &view); 80 void removeView(const QString &id); 81 82 int rowCount() const; 83 static int columnCount(); 84 int rowCount(const QModelIndex &parent) const override; 85 int columnCount(const QModelIndex &parent) const override; 86 87 QVariant data(const QModelIndex &index, int role) const override; 88 QVariant headerData(int section, Qt::Orientation orientation, int role) const override; 89 Qt::ItemFlags flags(const QModelIndex &index) const override; 90 bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole) override; 91 bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override; 92 93 int rowForId(const QString &id) const; 94 95 QString viewForSubContainment(const QString &sid); 96 97 const Latte::Data::View &at(const int &row); 98 const Latte::Data::View currentData(const QString &id); 99 const Latte::Data::View originalData(const QString &id); 100 101 const Latte::Data::ViewsTable ¤tViewsData(); 102 const Latte::Data::ViewsTable &originalViewsData(); 103 104 void setOriginalData(Latte::Data::ViewsTable &data); 105 void setOriginalView(QString currentViewId, Latte::Data::View &view); 106 void updateCurrentView(QString currentViewId, Latte::Data::View &view); 107 void clearErrorsAndWarnings(); 108 109 void updateActiveStatesBasedOn(const CentralLayout *layout); 110 111 Latte::Data::ViewsTable alteredViews() const; 112 Latte::Data::ViewsTable newViews() const; 113 114 signals: 115 void rowsInserted(); 116 void rowsRemoved(); 117 118 private slots: 119 void clear(); 120 121 void initEdges(); 122 void initAlignments(); 123 void populateScreens(); 124 125 private: 126 Data::ViewsTable edgesChoices(const Data::View &view) const; 127 Data::ViewsTable horizontalAlignmentChoices(const Data::View &view) const; 128 Data::ViewsTable verticalAlignmentChoices(const Data::View &view) const; 129 130 bool isVertical(const Plasma::Types::Location &location) const; 131 132 int sortingFactorForState(const Data::View &view) const; 133 int sortingFactorForScreen(const Data::View &view) const; 134 int sortingFactorForEdge(const Data::View &view) const; 135 int sortingFactorForAlignment(const Data::View &view) const; 136 int sortingFactorForSubContainments(const Data::View &view) const; 137 138 //! based on priority a sortable text is returned 139 QString sortableText(const int &priority, const QString &text) const; 140 141 Latte::Data::Screen screenData(const QString &viewId) const; 142 143 private: 144 Latte::Data::ViewsTable m_viewsTable; 145 Latte::Data::ViewsTable o_viewsTable; 146 147 Latte::Corona *m_corona{nullptr}; 148 149 Data::ViewsTable s_edges; 150 Data::ViewsTable s_horizontalAlignments; 151 Data::ViewsTable s_verticalAlignments; 152 Latte::Data::ScreensTable s_screens; 153 }; 154 155 } 156 } 157 } 158 159 #endif 160