connect(m_resortAllItemsTimer, &QTimer::timeout, this, &KFileItemModel::resortAllItems);
connect(GeneralSettings::self(), &GeneralSettings::sortingChoiceChanged, this, &KFileItemModel::slotSortingChoiceChanged);
+
+ setShowTrashMime(m_dirLister->showHiddenFiles());
}
KFileItemModel::~KFileItemModel()
return m_sortHiddenLast;
}
+void KFileItemModel::setShowTrashMime(bool show)
+{
+ const auto trashMime = QStringLiteral("application/x-trash");
+ QStringList excludeFilter = m_filter.excludeMimeTypes();
+ bool wasShown = !excludeFilter.contains(trashMime);
+
+ if (show) {
+ if (!wasShown) {
+ excludeFilter.removeAll(trashMime);
+ }
+ } else {
+ if (wasShown) {
+ excludeFilter.append(trashMime);
+ }
+ }
+
+ if (wasShown != show) {
+ setExcludeMimeTypeFilter(excludeFilter);
+ }
+}
+
void KFileItemModel::setShowHiddenFiles(bool show)
{
#if KIO_VERSION < QT_VERSION_CHECK(5, 100, 0)
#else
m_dirLister->setShowHiddenFiles(show);
#endif
+ setShowTrashMime(show);
m_dirLister->emitChanges();
if (show) {
dispatchPendingItemsToInsert();
return m_filter.mimeTypes();
}
+void KFileItemModel::setExcludeMimeTypeFilter(const QStringList &filters)
+{
+ if (m_filter.excludeMimeTypes() != filters) {
+ dispatchPendingItemsToInsert();
+ m_filter.setExcludeMimeTypes(filters);
+ applyFilters();
+ }
+}
+
+QStringList KFileItemModel::excludeMimeTypeFilter() const
+{
+ return m_filter.excludeMimeTypes();
+}
+
void KFileItemModel::applyFilters()
{
// ===STEP 1===
}
if (m_requestRole[IsHiddenRole]) {
- data.insert(sharedValue("isHidden"), item.isHidden());
+ data.insert(sharedValue("isHidden"), item.isHidden() || item.mimetype() == QStringLiteral("application/x-trash"));
}
if (m_requestRole[NameRole]) {
void setMimeTypeFilters(const QStringList &filters);
QStringList mimeTypeFilters() const;
+ void setExcludeMimeTypeFilter(const QStringList &filters);
+ QStringList excludeMimeTypeFilter() const;
+
struct RoleInfo {
QByteArray role;
QString translation;
*/
static QList<RoleInfo> rolesInformation();
+ /** set to true to hide application/x-trash files */
+ void setShowTrashMime(bool show);
+
Q_SIGNALS:
/**
* Is emitted if the loading of a directory has been started. It is
#include <QRegularExpression>
+#include <algorithm>
+
#include <KFileItem>
KFileItemModelFilter::KFileItemModelFilter()
return m_mimeTypes;
}
+void KFileItemModelFilter::setExcludeMimeTypes(const QStringList &types)
+{
+ m_excludeMimeTypes = types;
+}
+
+QStringList KFileItemModelFilter::excludeMimeTypes() const
+{
+ return m_excludeMimeTypes;
+}
+
bool KFileItemModelFilter::hasSetFilters() const
{
- return (!m_pattern.isEmpty() || !m_mimeTypes.isEmpty());
+ return (!m_pattern.isEmpty() || !m_mimeTypes.isEmpty() || !m_excludeMimeTypes.isEmpty());
}
bool KFileItemModelFilter::matches(const KFileItem &item) const
{
const bool hasPatternFilter = !m_pattern.isEmpty();
- const bool hasMimeTypesFilter = !m_mimeTypes.isEmpty();
+ const bool hasMimeTypesFilter = !m_mimeTypes.isEmpty() || !m_excludeMimeTypes.isEmpty();
// If no filter is set, return true.
if (!hasPatternFilter && !hasMimeTypesFilter) {
bool KFileItemModelFilter::matchesType(const KFileItem &item) const
{
- for (const QString &mimeType : qAsConst(m_mimeTypes)) {
- if (item.mimetype() == mimeType) {
- return true;
- }
+ bool excluded = std::any_of(m_excludeMimeTypes.constBegin(), m_excludeMimeTypes.constEnd(), [item](const QString &excludeMimetype) {
+ return item.mimetype() == excludeMimetype;
+ });
+ if (excluded) {
+ return false;
+ }
+
+ bool included = std::any_of(m_mimeTypes.constBegin(), m_mimeTypes.constEnd(), [item](const QString &mimeType) {
+ return item.mimetype() == mimeType;
+ });
+ if (included) {
+ return true;
}
return m_mimeTypes.isEmpty();
void setMimeTypes(const QStringList &types);
QStringList mimeTypes() const;
+ /**
+ * Set the list of mimetypes that are used for comparison and excluded with the
+ * item in KFileItemModelFilter::matchesMimeType.
+ */
+ void setExcludeMimeTypes(const QStringList &types);
+ QStringList excludeMimeTypes() const;
+
/**
* @return True if either the pattern or mimetype filters has been set.
*/
// faster comparison in matches().
QString m_pattern; // Property set by setPattern().
QStringList m_mimeTypes; // Property set by setMimeTypes()
+ QStringList m_excludeMimeTypes; // Property set by setExcludeMimeTypes()
};
#endif