File indexing completed on 2024-05-12 15:50:11

0001 /* -*- C++ -*-
0002     This file is part of ThreadWeaver.
0003 
0004     SPDX-FileCopyrightText: 2005-2014 Mirko Boehm <mirko@kde.org>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #ifndef MODEL_H
0010 #define MODEL_H
0011 
0012 #include <QAbstractListModel>
0013 #include <QFileInfoList>
0014 #include <QVector>
0015 
0016 #include <ThreadWeaver/ResourceRestrictionPolicy>
0017 
0018 #include "Image.h"
0019 #include "Progress.h"
0020 
0021 class Model : public QAbstractListModel
0022 {
0023     Q_OBJECT
0024 public:
0025     enum Roles {
0026         Role_SortRole = Qt::UserRole,
0027         Role_ImageRole,
0028         Role_StepRole,
0029     };
0030 
0031     explicit Model(QObject *parent = nullptr);
0032 
0033     int fileLoaderCap() const;
0034     void setFileLoaderCap(int cap);
0035 
0036     int imageLoaderCap() const;
0037     void setImageLoaderCap(int cap);
0038 
0039     int computeThumbNailCap() const;
0040     void setComputeThumbNailCap(int cap);
0041 
0042     int saveThumbNailCap() const;
0043     void setSaveThumbNailCap(int cap);
0044 
0045     void clear();
0046     void prepareConversions(const QFileInfoList &filenames, const QString &outputDirectory);
0047     bool computeThumbNailsBlockingInLoop();
0048     bool computeThumbNailsBlockingConcurrent();
0049 
0050     void queueUpConversion(const QStringList &files, const QString &outputDirectory);
0051     Progress progress() const;
0052     void progressChanged();
0053     void elementChanged(int id);
0054 
0055     int rowCount(const QModelIndex &parent = QModelIndex()) const override;
0056     QVariant data(const QModelIndex &index, int role) const override;
0057     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
0058 
0059 Q_SIGNALS:
0060     void completed();
0061     void progressStepChanged(int, int);
0062     void signalElementChanged(int);
0063 
0064 private Q_SLOTS:
0065     void slotElementChanged(int id);
0066 
0067 private:
0068     QVector<Image> m_images;
0069     ThreadWeaver::ResourceRestrictionPolicy m_fileLoaderRestriction;
0070     ThreadWeaver::ResourceRestrictionPolicy m_imageLoaderRestriction;
0071     ThreadWeaver::ResourceRestrictionPolicy m_imageScalerRestriction;
0072     ThreadWeaver::ResourceRestrictionPolicy m_fileWriterRestriction;
0073 };
0074 
0075 #endif // MODEL_H