File indexing completed on 2024-04-14 03:52:55

0001 /*
0002     This file is part of the KDE libraries
0003     SPDX-FileCopyrightText: 2022 Nicolas Fella <nicolas.fella@gmx.de>
0004 
0005     SPDX-License-Identifier: LGPL-2.0-or-later
0006 */
0007 
0008 #ifndef KFILEFILTER_H
0009 #define KFILEFILTER_H
0010 
0011 #include "kiocore_export.h"
0012 
0013 #include <QSharedDataPointer>
0014 #include <QString>
0015 #include <QStringList>
0016 
0017 class KFileFilterPrivate;
0018 
0019 /**
0020  * Encapsulates rules to filter a list of files.
0021  * Files can be filtered based on name patterns (e.g. *.cpp), MIME types, or both.
0022  * Filters also optionally have a user-facing label.
0023  *
0024  * @since 5.101
0025  */
0026 class KIOCORE_EXPORT KFileFilter
0027 {
0028 public:
0029     /**
0030      * Creates an empty filter.
0031      */
0032     explicit KFileFilter();
0033 
0034     /**
0035      * Creates a filter with a given label, name patterns, and MIME types.
0036      *
0037      * @param label The user-facing label for this filter.
0038      * @param filePatterns A list of file name patterns that should be included, e.g. ("*.cpp", "*.cxx").
0039      * @param mimePatterns A list of MIME types that should be included, e.g. ("text/plain", "image/png").
0040      *
0041      */
0042     explicit KFileFilter(const QString &label, const QStringList &filePatterns, const QStringList &mimePatterns);
0043 
0044     KFileFilter(const KFileFilter &other);
0045     KFileFilter &operator=(const KFileFilter &other);
0046     ~KFileFilter();
0047     bool operator==(const KFileFilter &other) const;
0048 
0049     /**
0050      * The user-facing label for this filter.
0051      *
0052      * If no label is passed on creation one is created based on the patterns.
0053      */
0054     QString label() const;
0055 
0056     /**
0057      * List of file name patterns that are included by this filter.
0058      */
0059     QStringList filePatterns() const;
0060 
0061     /**
0062      * List of MIME types that are included by this filter;
0063      */
0064     QStringList mimePatterns() const;
0065 
0066     /**
0067      * Converts this filter to a string representation understood by KFileWidget.
0068      */
0069     QString toFilterString() const;
0070 
0071     /**
0072      * Whether the filer is empty, i.e. matches all files.
0073      */
0074     bool isEmpty() const;
0075 
0076     /**
0077      * Whether the filter is valid.
0078      *
0079      * Creating a filter from an invalid/unkown MIME type will result in an invalid filter.
0080      *
0081      * @since 6.0
0082      */
0083     bool isValid() const;
0084 
0085     /*
0086      * Creates a filter for one MIME type.
0087      * The user-facing label is automatically determined from the MIME type.
0088      */
0089     static KFileFilter fromMimeType(const QString &mimeType);
0090 
0091     /**
0092      * Creates filters from a list of MIME types.
0093      * The user-facing label is automatically determined from the MIME type.
0094      *
0095      * @since 6.0
0096      */
0097     static QList<KFileFilter> fromMimeTypes(const QStringList &mimeTypes);
0098 
0099 private:
0100     /**
0101      * Convert a filter string understood by KFileWidget to a list of KFileFilters.
0102      */
0103     static QList<KFileFilter> fromFilterString(const QString &filterString);
0104     friend class KFileFilterCombo;
0105     friend class KFileFilterTest;
0106     friend class KFileFilterComboPrivate;
0107     friend class KFileWidgetTest;
0108     friend class KFileFilterComboTest;
0109     friend class KDEPlatformFileDialog;
0110     friend class KDEPlatformFileDialogHelper;
0111     friend class KEncodingFileDialog;
0112 
0113     QSharedDataPointer<KFileFilterPrivate> d;
0114 };
0115 
0116 KIOCORE_EXPORT QDebug operator<<(QDebug dbg, const KFileFilter &filter);
0117 
0118 #endif