File indexing completed on 2024-05-05 17:44:50
0001 /* 0002 SPDX-FileCopyrightText: 2016 Eike Hein <hein@kde.org> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #pragma once 0008 0009 #include <QRect> 0010 #include <QSortFilterProxyModel> 0011 0012 #include "abstracttasksproxymodeliface.h" 0013 0014 #include "taskmanager_export.h" 0015 0016 namespace TaskManager 0017 { 0018 /** 0019 * @short A proxy tasks model filtering its source model by various properties. 0020 * 0021 * This proxy model class filters its source tasks model by properties such as 0022 * virtual desktop or minimixed state. The values to filter for or by are set 0023 * as properties on the proxy model instance. 0024 * 0025 * @author Eike Hein <hein@kde.org> 0026 **/ 0027 0028 class TASKMANAGER_EXPORT TaskFilterProxyModel : public QSortFilterProxyModel, public AbstractTasksProxyModelIface 0029 { 0030 Q_OBJECT 0031 0032 Q_PROPERTY(QVariant virtualDesktop READ virtualDesktop WRITE setVirtualDesktop NOTIFY virtualDesktopChanged) 0033 Q_PROPERTY(QRect screenGeometry READ screenGeometry WRITE setScreenGeometry NOTIFY screenGeometryChanged) 0034 Q_PROPERTY(QString activity READ activity WRITE setActivity NOTIFY activityChanged) 0035 0036 Q_PROPERTY(bool filterByVirtualDesktop READ filterByVirtualDesktop WRITE setFilterByVirtualDesktop NOTIFY filterByVirtualDesktopChanged) 0037 Q_PROPERTY(bool filterByScreen READ filterByScreen WRITE setFilterByScreen NOTIFY filterByScreenChanged) 0038 Q_PROPERTY(bool filterByActivity READ filterByActivity WRITE setFilterByActivity NOTIFY filterByActivityChanged) 0039 Q_PROPERTY(bool filterMinimized READ filterMinimized WRITE setFilterMinimized NOTIFY filterMinimizedChanged) 0040 Q_PROPERTY(bool filterNotMinimized READ filterNotMinimized WRITE setFilterNotMinimized NOTIFY filterNotMinimizedChanged) 0041 Q_PROPERTY(bool filterNotMaximized READ filterNotMaximized WRITE setFilterNotMaximized NOTIFY filterNotMaximizedChanged) 0042 Q_PROPERTY(bool filterHidden READ filterHidden WRITE setFilterHidden NOTIFY filterHiddenChanged) 0043 Q_PROPERTY(bool filterSkipTaskbar READ filterSkipTaskbar WRITE setFilterSkipTaskbar NOTIFY filterSkipTaskbarChanged) 0044 Q_PROPERTY(bool filterSkipPager READ filterSkipPager WRITE setFilterSkipPager NOTIFY filterSkipPagerChanged) 0045 0046 Q_PROPERTY(bool demandingAttentionSkipsFilters READ demandingAttentionSkipsFilters WRITE setDemandingAttentionSkipsFilters NOTIFY 0047 demandingAttentionSkipsFiltersChanged) 0048 0049 public: 0050 explicit TaskFilterProxyModel(QObject *parent = nullptr); 0051 ~TaskFilterProxyModel() override; 0052 0053 void setSourceModel(QAbstractItemModel *sourceModel) override; 0054 0055 /** 0056 * The id of the virtual desktop used in filtering by virtual 0057 * desktop. Usually set to the id of the current virtual desktop. 0058 * Defaults to empty. 0059 * 0060 * @see setVirtualDesktop 0061 * @returns the number of the virtual desktop used in filtering. 0062 **/ 0063 QVariant virtualDesktop() const; 0064 0065 /** 0066 * Set the id of the virtual desktop to use in filtering by virtual 0067 * desktop. 0068 * 0069 * If set to an empty id, filtering by virtual desktop is disabled. 0070 * 0071 * @see virtualDesktop 0072 * @param desktop A virtual desktop id (QString on Wayland; uint >0 on X11). 0073 **/ 0074 void setVirtualDesktop(const QVariant &desktop = QVariant()); 0075 0076 /** 0077 * The geometry of the screen used in filtering by screen. Defaults 0078 * to a null QRect. 0079 * 0080 * @see setGeometryScreen 0081 * @returns the geometry of the screen used in filtering. 0082 **/ 0083 QRect screenGeometry() const; 0084 0085 /** 0086 * Set the geometry of the screen to use in filtering by screen. 0087 * 0088 * If set to an invalid QRect, filtering by screen is disabled. 0089 * 0090 * @see screenGeometry 0091 * @param geometry A screen geometry. 0092 **/ 0093 void setScreenGeometry(const QRect &geometry); 0094 0095 /** 0096 * The id of the activity used in filtering by activity. Usually 0097 * set to the id of the current activity. Defaults to an empty id. 0098 * 0099 * @see setActivity 0100 * @returns the id of the activity used in filtering. 0101 **/ 0102 QString activity() const; 0103 0104 /** 0105 * Set the id of the activity to use in filtering by activity. 0106 * 0107 * @see activity 0108 * @param activity An activity id. 0109 **/ 0110 void setActivity(const QString &activity); 0111 0112 /** 0113 * Whether tasks should be filtered by virtual desktop. Defaults to 0114 * @c false. 0115 * 0116 * Filtering by virtual desktop only happens if a virtual desktop 0117 * number greater than -1 is set, even if this returns @c true. 0118 * 0119 * @see setFilterByVirtualDesktop 0120 * @see setVirtualDesktop 0121 * @returns @c true if tasks should be filtered by virtual desktop. 0122 **/ 0123 bool filterByVirtualDesktop() const; 0124 0125 /** 0126 * Set whether tasks should be filtered by virtual desktop. 0127 * 0128 * Filtering by virtual desktop only happens if a virtual desktop 0129 * number is set, even if this is set to @c true. 0130 * 0131 * @see filterByVirtualDesktop 0132 * @see setVirtualDesktop 0133 * @param filter Whether tasks should be filtered by virtual desktop. 0134 **/ 0135 void setFilterByVirtualDesktop(bool filter); 0136 0137 /** 0138 * Whether tasks should be filtered by screen. Defaults to @c false. 0139 * 0140 * Filtering by screen only happens if a screen number is set, even 0141 * if this returns @c true. 0142 * 0143 * @see setFilterByScreen 0144 * @see setScreenGeometry 0145 * @returns @c true if tasks should be filtered by screen. 0146 **/ 0147 bool filterByScreen() const; 0148 0149 /** 0150 * Set whether tasks should be filtered by screen. 0151 * 0152 * Filtering by screen only happens if a screen number is set, even 0153 * if this is set to @c true. 0154 * 0155 * @see filterByScreen 0156 * @see setScreenGeometry 0157 * @param filter Whether tasks should be filtered by screen. 0158 **/ 0159 void setFilterByScreen(bool filter); 0160 0161 /** 0162 * Whether tasks should be filtered by activity. Defaults to @c false. 0163 * 0164 * Filtering by activity only happens if an activity id is set, even 0165 * if this returns @c true. 0166 * 0167 * @see setFilterByActivity 0168 * @see setActivity 0169 * @returns @ctrue if tasks should be filtered by activity. 0170 **/ 0171 bool filterByActivity() const; 0172 0173 /** 0174 * Set whether tasks should be filtered by activity. Defaults to 0175 * @c false. 0176 * 0177 * Filtering by activity only happens if an activity id is set, 0178 * even if this is set to @c true. 0179 * 0180 * @see filterByActivity 0181 * @see setActivity 0182 * @param filter Whether tasks should be filtered by activity. 0183 **/ 0184 void setFilterByActivity(bool filter); 0185 0186 /** 0187 * Whether minimized tasks should be filtered out. Defaults to 0188 * @c false. 0189 * 0190 * @returns @c true if minimized tasks should be filtered out. 0191 * @see setFilterMinimized 0192 * @since 5.27 0193 **/ 0194 bool filterMinimized() const; 0195 0196 /** 0197 * Sets whether non-minimized tasks should be filtered out. 0198 * 0199 * @param filter Whether minimized tasks should be filtered out. 0200 * @see filterMinimized 0201 * @since 5.27 0202 **/ 0203 void setFilterMinimized(bool filter); 0204 0205 /** 0206 * Whether non-minimized tasks should be filtered. Defaults to 0207 * @c false. 0208 * 0209 * @see setFilterNotMinimized 0210 * @returns @c true if non-minimized tasks should be filtered. 0211 **/ 0212 bool filterNotMinimized() const; 0213 0214 /** 0215 * Set whether non-minimized tasks should be filtered. 0216 * 0217 * @see filterNotMinimized 0218 * @param filter Whether non-minimized tasks should be filtered. 0219 **/ 0220 void setFilterNotMinimized(bool filter); 0221 0222 /** 0223 * Whether non-maximized tasks should be filtered. Defaults to 0224 * @c false. 0225 * 0226 * @see setFilterNotMaximized 0227 * @returns @c true if non-maximized tasks should be filtered. 0228 **/ 0229 bool filterNotMaximized() const; 0230 0231 /** 0232 * Set whether non-maximized tasks should be filtered. 0233 * 0234 * @see filterNotMaximized 0235 * @param filter Whether non-maximized tasks should be filtered. 0236 **/ 0237 void setFilterNotMaximized(bool filter); 0238 0239 /** 0240 * Whether hidden tasks should be filtered. Defaults to 0241 * @c false. 0242 * 0243 * @see setFilterHidden 0244 * @returns @c true if hidden tasks should be filtered. 0245 **/ 0246 bool filterHidden() const; 0247 0248 /** 0249 * Set whether hidden tasks should be filtered. 0250 * 0251 * @see filterHidden 0252 * @param filter Whether hidden tasks should be filtered. 0253 **/ 0254 void setFilterHidden(bool filter); 0255 0256 /** 0257 * Whether tasks which should be omitted from 'task bars' should be 0258 * filtered. Defaults to @c true. 0259 * 0260 * @see setFilterSkipTaskbar 0261 * @returns @c true if tasks which should not be on the 'task bar' 0262 * should be filtered. 0263 **/ 0264 bool filterSkipTaskbar() const; 0265 0266 /** 0267 * Set whether tasks which should be omitted from 'task bars' should be 0268 * filtered. 0269 * 0270 * @see filterSkipTaskbar 0271 * @param filter Whether tasks whichs should not be on the 'task bar' 0272 * should be filtered. 0273 **/ 0274 void setFilterSkipTaskbar(bool filter); 0275 0276 /** 0277 * Whether tasks which should be omitted from 'pagers' should be 0278 * filtered. Defaults to @c true. 0279 * 0280 * @see setFilterSkipPager 0281 * @returns @c true if tasks which should not be on the 'pager' should 0282 * be filtered. 0283 **/ 0284 bool filterSkipPager() const; 0285 0286 /** 0287 * Set whether tasks which should be omitted from 'pagers' should be 0288 * filtered. 0289 * 0290 * @see filterSkipPager 0291 * @param filter Whether tasks which should not be on the 'pager' should 0292 * be filtered. 0293 **/ 0294 void setFilterSkipPager(bool filter); 0295 0296 /** 0297 * Whether tasks which demand attention skip filters by virtual desktop 0298 * or activity. Defaults to @c true. 0299 * 0300 * @see setDemandingAttentionSkipsFilters 0301 * @returns @c true if tasks which demand attention skip filters. 0302 **/ 0303 bool demandingAttentionSkipsFilters() const; 0304 0305 /** 0306 * Sets whether tasks which demand attention should bypass filters by 0307 * virtual desktop or activity. 0308 * 0309 * @see demandingAttentionSkipsFilters 0310 * @param skip Whether tasks which demand attention should skip filters. 0311 **/ 0312 void setDemandingAttentionSkipsFilters(bool skip); 0313 0314 /** 0315 * Returns whether the filter model accepts this source row. 0316 * 0317 * @param int A row in the source model. 0318 */ 0319 bool acceptsRow(int sourceRow) const; 0320 0321 Q_SIGNALS: 0322 void virtualDesktopChanged() const; 0323 void screenGeometryChanged() const; 0324 void activityChanged() const; 0325 void filterByVirtualDesktopChanged() const; 0326 void filterByScreenChanged() const; 0327 void filterByActivityChanged() const; 0328 void filterMinimizedChanged(); 0329 void filterNotMinimizedChanged() const; 0330 void filterNotMaximizedChanged() const; 0331 void filterHiddenChanged() const; 0332 void filterSkipTaskbarChanged() const; 0333 void filterSkipPagerChanged() const; 0334 void demandingAttentionSkipsFiltersChanged() const; 0335 0336 protected: 0337 bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override; 0338 QModelIndex mapIfaceToSource(const QModelIndex &index) const override; 0339 0340 private: 0341 class Private; 0342 QScopedPointer<Private> d; 0343 }; 0344 0345 }