#ifndef CONTENTMODEL_HPP #define CONTENTMODEL_HPP #include "loadordererror.hpp" #include #include #include #include #include namespace ContentSelectorModel { class EsmFile; typedef QList ContentFileList; enum ContentType { ContentType_GameFile, ContentType_Addon }; class ContentModel : public QAbstractTableModel { Q_OBJECT public: explicit ContentModel(QObject* parent, QIcon& warningIcon, QIcon& errorIcon, bool showOMWScripts); ~ContentModel(); void setEncoding(const QString& encoding); int rowCount(const QModelIndex& parent = QModelIndex()) const override; int columnCount(const QModelIndex& parent = QModelIndex()) const override; QVariant data(const QModelIndex& index, int role) const override; Qt::ItemFlags flags(const QModelIndex& index) const override; bool setData(const QModelIndex& index, const QVariant& value, int role = Qt::EditRole) override; bool insertRows(int position, int rows, const QModelIndex& index = QModelIndex()) override; bool removeRows(int position, int rows, const QModelIndex& index = QModelIndex()) override; Qt::DropActions supportedDropActions() const override; QStringList mimeTypes() const override; QMimeData* mimeData(const QModelIndexList& indexes) const override; bool dropMimeData( const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) override; void addFiles(const QString& path, bool newfiles); void sortFiles(); bool containsDataFiles(const QString& path); void clearFiles(); QModelIndex indexFromItem(const EsmFile* item) const; const EsmFile* item(const QString& name) const; const EsmFile* item(int row) const; EsmFile* item(int row); QStringList gameFiles() const; void setCurrentGameFile(const EsmFile* file); bool isEnabled(const QModelIndex& index) const; bool setCheckState(const QString& filepath, bool isChecked); bool isNew(const QString& filepath) const; void setNew(const QString& filepath, bool isChecked); void setNonUserContent(const QStringList& fileList); void setContentList(const QStringList& fileList); ContentFileList checkedItems() const; void uncheckAll(); void refreshModel(); /// Checks all plug-ins for load order errors and updates mPluginsWithLoadOrderError with plug-ins with issues void checkForLoadOrderErrors(); private: void addFile(EsmFile* file); /// Checks a specific plug-in for load order errors /// \return all errors found for specific plug-in QList checkForLoadOrderErrors(const EsmFile* file, int row) const; /// \return true if plug-in has a Load Order error bool isLoadOrderError(const EsmFile* file) const; QString toolTip(const EsmFile* file) const; const EsmFile* mGameFile; ContentFileList mFiles; QStringList mNonUserContent; std::set mCheckedFiles; QHash mNewFiles; QSet mPluginsWithLoadOrderError; QString mEncoding; QIcon mWarningIcon; QIcon mErrorIcon; bool mShowOMWScripts; QString mErrorToolTips[ContentSelectorModel::LoadOrderError::ErrorCode_LoadOrder] = { tr("Unable to find dependent file: %1"), tr("Dependent file needs to be active: %1"), tr("This file needs to load after %1") }; public: QString mMimeType; QStringList mMimeTypes; int mColumnCount; Qt::DropActions mDropActions; }; } #endif // CONTENTMODEL_HPP