File indexing completed on 2024-05-12 04:19:48

0001 // vim: set tabstop=4 shiftwidth=4 expandtab:
0002 /*
0003 Gwenview: an image viewer
0004 Copyright 2008 Aurélien Gâteau <agateau@kde.org>
0005 
0006 This program is free software; you can redistribute it and/or
0007 modify it under the terms of the GNU General Public License
0008 as published by the Free Software Foundation; either version 2
0009 of the License, or (at your option) any later version.
0010 
0011 This program is distributed in the hope that it will be useful,
0012 but WITHOUT ANY WARRANTY; without even the implied warranty of
0013 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
0014 GNU General Public License for more details.
0015 
0016 You should have received a copy of the GNU General Public License
0017 along with this program; if not, write to the Free Software
0018 Foundation, Inc., 51 Franklin Street, Fifth Floor, Cambridge, MA 02110-1301, USA.
0019 
0020 */
0021 #ifndef SEMANTICINFODIRMODEL_H
0022 #define SEMANTICINFODIRMODEL_H
0023 
0024 // Qt
0025 
0026 // KF
0027 #include <KDirModel>
0028 
0029 // Local
0030 
0031 class QUrl;
0032 
0033 namespace Gwenview
0034 {
0035 class AbstractSemanticInfoBackEnd;
0036 struct SemanticInfo;
0037 struct SemanticInfoDirModelPrivate;
0038 /**
0039  * Extends KDirModel by providing read/write access to image metadata such as
0040  * rating, tags and descriptions.
0041  */
0042 class SemanticInfoDirModel : public KDirModel
0043 {
0044     Q_OBJECT
0045 public:
0046     enum {
0047         RatingRole = 0x21a43a51,
0048         DescriptionRole = 0x26FB33FA,
0049         TagsRole = 0x0462F0A8,
0050     };
0051     SemanticInfoDirModel(QObject *parent);
0052     ~SemanticInfoDirModel() override;
0053 
0054     void clearSemanticInfoCache();
0055 
0056     bool semanticInfoAvailableForIndex(const QModelIndex &) const;
0057 
0058     void retrieveSemanticInfoForIndex(const QModelIndex &);
0059 
0060     SemanticInfo semanticInfoForIndex(const QModelIndex &) const;
0061 
0062     QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
0063 
0064     bool setData(const QModelIndex &index, const QVariant &data, int role = Qt::EditRole) override;
0065 
0066     AbstractSemanticInfoBackEnd *semanticInfoBackEnd() const;
0067 
0068 Q_SIGNALS:
0069     void semanticInfoRetrieved(const QUrl &, const SemanticInfo &);
0070 
0071 private:
0072     SemanticInfoDirModelPrivate *const d;
0073 
0074 private Q_SLOTS:
0075     void slotSemanticInfoRetrieved(const QUrl &url, const SemanticInfo &);
0076 
0077     void slotRowsAboutToBeRemoved(const QModelIndex &, int, int);
0078     void slotModelAboutToBeReset();
0079 };
0080 
0081 } // namespace
0082 
0083 #endif /* SEMANTICINFODIRMODEL_H */