1 #pragma once 2 3 #include "common/common_pch.h" 4 5 #include "mkvtoolnix-gui/merge/source_file.h" 6 7 #include <QStandardItemModel> 8 #include <QList> 9 #include <QSet> 10 #include <QVector> 11 12 namespace mtx::gui::Merge { 13 14 class SourceFileModel; 15 using SourceFileModelPtr = std::shared_ptr<SourceFileModel>; 16 17 class TrackModel; 18 class AttachedFileModel; 19 20 class SourceFileModel : public QStandardItemModel { 21 Q_OBJECT 22 23 protected: 24 QList<SourceFilePtr> *m_sourceFiles; 25 QHash<quint64, SourceFilePtr> m_sourceFileMap; 26 TrackModel *m_tracksModel; 27 AttachedFileModel *m_attachedFilesModel; 28 bool m_nonAppendedSelected, m_appendedSelected, m_additionalPartSelected; 29 QVector<int> m_availableColorIndexes; 30 int m_nextColorIndex{}; 31 32 public: 33 SourceFileModel(QObject *parent); 34 virtual ~SourceFileModel(); 35 36 virtual void retranslateUi(); 37 38 virtual void setSourceFiles(QList<SourceFilePtr> &sourceFiles); 39 virtual void setOtherModels(TrackModel *tracksModel, AttachedFileModel *attachedFilesModel); 40 virtual void addOrAppendFilesAndTracks(QVector<SourceFilePtr> const &files, QModelIndex const &fileToAddToIdx, bool append); 41 virtual void addAdditionalParts(QStringList const &fileNames, QModelIndex const &fileToAddToIdx); 42 virtual void removeFiles(QList<SourceFile *> const &files); 43 virtual void removeFile(SourceFile *fileToBeRemoved); 44 45 virtual void moveSourceFilesUpOrDown(QList<SourceFile *> files, bool up); 46 47 virtual SourceFilePtr fromIndex(QModelIndex const &idx) const; 48 virtual QModelIndex indexFromSourceFile(SourceFile *sourceFile) const; 49 50 virtual Qt::DropActions supportedDropActions() const; 51 virtual Qt::ItemFlags flags(QModelIndex const &index) const; 52 53 virtual QStringList mimeTypes() const; 54 virtual QMimeData *mimeData(QModelIndexList const &indexes) const; 55 56 virtual bool canDropMimeData(QMimeData const *data, Qt::DropAction action, int row, int column, QModelIndex const &parent) const override; 57 virtual bool dropMimeData(QMimeData const *data, Qt::DropAction action, int row, int column, QModelIndex const &parent) override; 58 59 public Q_SLOTS: 60 void updateSelectionStatus(); 61 void updateSourceFileLists(); 62 void updateFileColors(); 63 64 protected: 65 virtual void addFilesAndTracks(QVector<SourceFilePtr> const &files); 66 virtual QModelIndex addFileAtAppropriatePlace(SourceFilePtr const &file, bool sortByType); 67 virtual QModelIndex addFileSortedByType(SourceFilePtr const &file); 68 virtual void appendFilesAndTracks(QVector<SourceFilePtr> const &files, QModelIndex const &fileToAddToIdx); 69 70 void assignColorIndex(SourceFile &file); 71 void initializeColorIndexes(); 72 73 void setItemsFromSourceFile(QList<QStandardItem *> const &items, SourceFile *sourceFile) const; 74 QList<QStandardItem *> createRow(SourceFile *sourceFile) const; 75 void createAndAppendRow(QStandardItem *item, SourceFilePtr const &file, int position = -1); 76 void dumpSourceFiles(QString const &label) const; 77 78 quint64 storageValueFromIndex(QModelIndex const &idx) const; 79 80 bool dropSourceFiles(QMimeData const *data, Qt::DropAction action, int row, const QModelIndex &parent); 81 82 QModelIndex indexFromSourceFile(quint64 value, QModelIndex const &parent) const; 83 84 void sourceFileUpdated(SourceFile *sourceFile); 85 86 void sortSourceFiles(QList<SourceFile *> &files, bool reverse = false); 87 88 std::pair<int, int> countAppendedAndAdditionalParts(QStandardItem *parentItem); 89 }; 90 91 } 92