diff --git a/src/ui/model/applistmodel.cpp b/src/ui/model/applistmodel.cpp index 300ab0b0..39165efc 100644 --- a/src/ui/model/applistmodel.cpp +++ b/src/ui/model/applistmodel.cpp @@ -86,9 +86,13 @@ QVariant appGroupColor(const AppRow &appRow) return {}; } -QIcon appActionIcon(const AppRow &appRow) +QIcon appIcon(const AppRow &appRow) { - return IconCache::icon(appActionIconPath(appRow)); + if (appRow.isWildcard) { + return IconCache::icon(":/icons/coding.png"); + } + + return IoC()->appIcon(appRow.appPath); } QIcon appZonesIcon(const AppRow &appRow) @@ -109,6 +113,31 @@ QIcon appScheduledIcon(const AppRow &appRow) return IconCache::icon(appScheduleIconPath(appRow)); } +QIcon appActionIcon(const AppRow &appRow) +{ + return IconCache::icon(appActionIconPath(appRow)); +} + +using dataDecorationIcon_func = QIcon (*)(const AppRow &appRow); + +static const dataDecorationIcon_func dataDecorationIcon_funcList[] = { + &appIcon, + &appZonesIcon, + &appRuleIcon, + &appScheduledIcon, + &appActionIcon, +}; + +inline QVariant dataDecorationIcon(int column, const AppRow &appRow) +{ + if (column < 0 || column >= std::size(dataDecorationIcon_funcList)) + return QVariant(); + + const dataDecorationIcon_func func = dataDecorationIcon_funcList[column]; + + return func(appRow); +} + QVariant headerDataDisplayName(int /*role*/) { return AppListModel::tr("Name"); @@ -419,20 +448,7 @@ QVariant AppListModel::dataDecoration(const QModelIndex &index) const if (appRow.isNull()) return QVariant(); - switch (column) { - case 0: - return appIcon(appRow); - case 1: - return appZonesIcon(appRow); - case 2: - return appRuleIcon(appRow); - case 3: - return appScheduledIcon(appRow); - case 4: - return appActionIcon(appRow); - } - - return QVariant(); + return dataDecorationIcon(column, appRow); } QVariant AppListModel::dataForeground(const QModelIndex &index) const @@ -463,15 +479,6 @@ QVariant AppListModel::dataTextAlignment(const QModelIndex &index) const return QVariant(); } -QIcon AppListModel::appIcon(const AppRow &appRow) const -{ - if (appRow.isWildcard) { - return IconCache::icon(":/icons/coding.png"); - } - - return appInfoCache()->appIcon(appRow.appPath); -} - bool AppListModel::updateAppRow(const QString &sql, const QVariantHash &vars, AppRow &appRow) const { SqliteStmt stmt; @@ -583,15 +590,8 @@ QString AppListModel::sqlWhere() const if (filters() != FilterNone) { QStringList list; - - if (filters().testFlag(FilterWildcard)) { - list << QString("t.is_wildcard = %1") - .arg(filterValues().testFlag(FilterWildcard) ? "1" : "0"); - } - - if (filters().testFlag(FilterParked)) { - list << QString("t.parked = %1").arg(filterValues().testFlag(FilterParked) ? "1" : "0"); - } + addSqlFilter(list, "t.is_wildcard", FilterWildcard); + addSqlFilter(list, "t.parked", FilterParked); sql += QLatin1String(sql.isEmpty() ? " WHERE " : " AND ") + list.join(" AND "); } @@ -638,3 +638,12 @@ QString AppListModel::sqlOrderColumn() const return columnsStr + sqlOrderAsc() + ", " + postColumnsStr; } + +void AppListModel::addSqlFilter(QStringList &list, const QString &name, FilterFlag flag) const +{ + if (filters().testFlag(flag)) { + const QLatin1String value(filterValues().testFlag(flag) ? "1" : "0"); + + list << QString("%1 = %2").arg(name, value); + } +} diff --git a/src/ui/model/applistmodel.h b/src/ui/model/applistmodel.h index 302e356b..ec3d5cb5 100644 --- a/src/ui/model/applistmodel.h +++ b/src/ui/model/applistmodel.h @@ -71,14 +71,14 @@ protected: QString sqlWhereFts() const override; QString sqlOrderColumn() const override; + void addSqlFilter(QStringList &list, const QString &name, FilterFlag flag) const; + private: QVariant dataDisplay(const QModelIndex &index, int role) const; QVariant dataDecoration(const QModelIndex &index) const; QVariant dataForeground(const QModelIndex &index) const; QVariant dataTextAlignment(const QModelIndex &index) const; - QIcon appIcon(const AppRow &appRow) const; - bool updateAppRow(const QString &sql, const QVariantHash &vars, AppRow &appRow) const; private: