diff options
| author | Mikaël Capelle <capelle.mikael@gmail.com> | 2022-05-17 11:37:19 +0200 |
|---|---|---|
| committer | Mikaël Capelle <capelle.mikael@gmail.com> | 2023-07-09 17:17:53 +0200 |
| commit | 86bb01ba9eac879d3685c439ac9da0028bc4bc80 (patch) | |
| tree | 90cc575c2d02113af459b7772418285f2e5caa1f /src/modlist.h | |
| parent | 7d6cb8528d20e36a4cee822263865ee2f7f32481 (diff) | |
Convert everything to CRLF.
Diffstat (limited to 'src/modlist.h')
| -rw-r--r-- | src/modlist.h | 814 |
1 files changed, 407 insertions, 407 deletions
diff --git a/src/modlist.h b/src/modlist.h index 6a3a2901..f179d7ae 100644 --- a/src/modlist.h +++ b/src/modlist.h @@ -1,407 +1,407 @@ -/*
-Copyright (C) 2012 Sebastian Herbord. All rights reserved.
-
-This file is part of Mod Organizer.
-
-Mod Organizer is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-Mod Organizer is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>.
-*/
-
-#ifndef MODLIST_H
-#define MODLIST_H
-
-#include "moddatacontent.h"
-#include "categories.h"
-#include "nexusinterface.h"
-#include "modinfo.h"
-#include "profile.h"
-
-#include <imodlist.h>
-
-#include <QFile>
-#include <QListWidget>
-#include <QNetworkReply>
-#include <QMetaEnum>
-#include <QNetworkAccessManager>
-#ifndef Q_MOC_RUN
-#include <boost/signals2.hpp>
-#endif
-#include <set>
-#include <vector>
-#include <QVector>
-
-
-class QSortFilterProxyModel;
-class PluginContainer;
-class OrganizerCore;
-class ModListDropInfo;
-
-/**
- * Model presenting an overview of the installed mod
- * This is used in a view in the main window of MO. It combines general information about
- * the mods from ModInfo with status information from the Profile
- **/
-class ModList : public QAbstractItemModel
-{
- Q_OBJECT
-
-public:
-
- enum ModListRole {
-
- // data(GroupingRole) contains the "group" role - This is used by the
- // category and Nexus ID grouping proxy (but not the ByPriority proxy)
- GroupingRole = Qt::UserRole,
-
- IndexRole = Qt::UserRole + 1,
-
- // data(AggrRole) contains aggregation information (for
- // grouping I assume?)
- AggrRole = Qt::UserRole + 2,
-
- GameNameRole = Qt::UserRole + 3,
- PriorityRole = Qt::UserRole + 4,
-
- // marking role for the scrollbar
- ScrollMarkRole = Qt::UserRole + 5,
-
- // this is the first available role
- ModUserRole = Qt::UserRole + 6
- };
-
- enum EColumn {
- COL_NAME,
- COL_CONFLICTFLAGS,
- COL_FLAGS,
- COL_CONTENT,
- COL_CATEGORY,
- COL_MODID,
- COL_GAME,
- COL_VERSION,
- COL_INSTALLTIME,
- COL_PRIORITY,
- COL_NOTES,
- COL_LASTCOLUMN = COL_NOTES,
- };
-
- using SignalModInstalled = boost::signals2::signal<void(MOBase::IModInterface*)>;
- using SignalModRemoved = boost::signals2::signal<void(QString const&)>;
- using SignalModStateChanged = boost::signals2::signal<void (const std::map<QString, MOBase::IModList::ModStates>&)>;
- using SignalModMoved = boost::signals2::signal<void (const QString &, int, int)>;
-
-public:
-
- /**
- * @brief constructor
- * @todo ensure this view works without a profile set, otherwise there are intransparent dependencies on the initialisation order
- **/
- ModList(PluginContainer *pluginContainer, OrganizerCore *parent);
-
- ~ModList();
-
- /**
- * @brief set the profile used for status information
- *
- * @param profile the profile to use
- **/
- void setProfile(Profile *profile);
-
- /**
- * @brief retrieve the current sorting mode
- * @note this is used to store the sorting mode between sessions
- * @return current sorting mode, encoded to be compatible to previous versions
- **/
- int getCurrentSortingMode() const;
-
- /**
- * @brief remove the specified mod without asking for confirmation
- * @param row the row to remove
- */
- void removeRowForce(int row, const QModelIndex &parent);
-
- void notifyChange(int rowStart, int rowEnd = -1);
- static QString getColumnName(int column);
-
- void changeModPriority(int sourceIndex, int newPriority);
- void changeModPriority(std::vector<int> sourceIndices, int newPriority);
-
- void setPluginContainer(PluginContainer *pluginContainer);
-
- bool modInfoAboutToChange(ModInfo::Ptr info);
- void modInfoChanged(ModInfo::Ptr info);
-
- void disconnectSlots();
-
- int timeElapsedSinceLastChecked() const;
-
-public:
-
- /**
- * @brief Notify the mod list that the given mod has been installed. This is used
- * to notify the plugin that registered through onModInstalled().
- *
- * @param mod The installed mod.
- */
- void notifyModInstalled(MOBase::IModInterface *mod) const;
-
- /**
- * @brief Notify the mod list that a mod has been removed. This is used
- * to notify the plugin that registered through onModRemoved().
- *
- * @param modName Name of the removed mod.
- */
- void notifyModRemoved(QString const& modName) const;
-
- /**
- * @brief Notify the mod list that the state of the specified mods has changed. This is used
- * to notify the plugin that registered through onModStateChanged().
- *
- * @param modIndices Indices of the mods that changed.
- */
- void notifyModStateChanged(QList<unsigned int> modIndices) const;
-
-public:
-
- /// \copydoc MOBase::IModList::displayName
- QString displayName(const QString &internalName) const;
-
- /// \copydoc MOBase::IModList::allMods
- QStringList allMods() const;
- QStringList allModsByProfilePriority(MOBase::IProfile* profile = nullptr) const;
-
- // \copydoc MOBase::IModList::getMod
- MOBase::IModInterface* getMod(const QString& name) const;
-
- // \copydoc MOBase::IModList::remove
- bool removeMod(MOBase::IModInterface* mod);
-
- // \copydoc MOBase::IModList::renameMod
- MOBase::IModInterface* renameMod(MOBase::IModInterface* mod, const QString& name);
-
- /// \copydoc MOBase::IModList::state
- MOBase::IModList::ModStates state(const QString &name) const;
-
- /// \copydoc MOBase::IModList::setActive
- bool setActive(const QString &name, bool active);
-
- /// \copydoc MOBase::IModList::setActive
- int setActive(const QStringList& names, bool active);
-
- /// \copydoc MOBase::IModList::priority
- int priority(const QString &name) const;
-
- /// \copydoc MOBase::IModList::setPriority
- bool setPriority(const QString &name, int newPriority);
-
- boost::signals2::connection onModInstalled(const std::function<void(MOBase::IModInterface*)>& func);
- boost::signals2::connection onModRemoved(const std::function<void(QString const&)>& func);
- boost::signals2::connection onModStateChanged(const std::function<void(const std::map<QString, MOBase::IModList::ModStates>&)>& func);
- boost::signals2::connection onModMoved(const std::function<void (const QString &, int, int)> &func);
-
-public: // implementation of virtual functions of QAbstractItemModel
-
- virtual int rowCount(const QModelIndex &parent = QModelIndex()) const;
- virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const;
- virtual int columnCount(const QModelIndex &parent = QModelIndex()) const;
- virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const;
- virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole);
- virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
- virtual Qt::ItemFlags flags(const QModelIndex &modelIndex) const;
- virtual bool removeRows(int row, int count, const QModelIndex& parent);
-
- Qt::DropActions supportedDropActions() const override { return Qt::MoveAction | Qt::CopyAction; }
- QStringList mimeTypes() const override;
- QMimeData *mimeData(const QModelIndexList &indexes) const override;
- bool canDropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) const override;
- bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override;
-
- virtual QModelIndex index(int row, int column,
- const QModelIndex &parent = QModelIndex()) const;
- virtual QModelIndex parent(const QModelIndex &child) const;
-
- virtual QMap<int, QVariant> itemData(const QModelIndex &index) const;
-
-public slots:
-
- void onDragEnter(const QMimeData* data);
-
- // enable/disable mods at the given indices.
- //
- void setActive(const QModelIndexList& indices, bool active);
-
- // shift the priority of mods at the given indices by the given offset
- //
- void shiftModsPriority(const QModelIndexList& indices, int offset);
-
- // change the priority of the mods specified by the given indices
- //
- void changeModsPriority(const QModelIndexList& indices, int priority);
-
- // toggle the active state of mods at the given indices
- //
- bool toggleState(const QModelIndexList& indices);
-
-signals:
-
- // emitted when the priority of one or multiple mods have changed
- //
- // the sorting of the list can only be manually changed if the list is sorted by priority
- // in which case the move is intended to change the priority of a mod.
- //
- void modPrioritiesChanged(const QModelIndexList& indices) const;
-
- // emitted when the state (active/inactive) of one or multiple mods have changed
- //
- void modStatesChanged(const QModelIndexList& indices) const;
-
- /**
- * @brief emitted when the model wants a text to be displayed by the UI
- *
- * @param message the message to display
- **/
- void showMessage(const QString &message);
-
- /**
- * @brief signals change to the count of headers
- */
- void resizeHeaders();
-
- /**
- * @brief emitted to remove a file origin
- * @param name name of the orign to remove
- */
- void removeOrigin(const QString &name);
-
- /**
- * @brief emitted after a mod has been renamed
- * This signal MUST be used to fix the mod names in profiles (except the active one) and to invalidate/refresh other
- * structures that may have become invalid with the rename
- *
- * @param oldName the old name of the mod
- * @param newName new name of the mod
- */
- void modRenamed(const QString &oldName, const QString &newName);
-
- /**
- * @brief emitted after a mod has been uninstalled
- * @param fileName filename of the mod being uninstalled
- */
- void modUninstalled(const QString &fileName);
-
- /**
- * @brief QML seems to handle overloaded signals poorly - create unique signal for tutorials
- */
- void tutorialModlistUpdate();
-
- /**
- * @brief fileMoved emitted when a file is moved from one mod to another
- * @param relativePath relative path of the file moved
- * @param oldOriginName name of the origin that previously contained the file
- * @param newOriginName name of the origin that now contains the file
- */
- void fileMoved(const QString &relativePath, const QString &oldOriginName, const QString &newOriginName);
-
- /**
- * @brief emitted to have the overwrite folder cleared
- */
- void clearOverwrite();
-
- void aboutToChangeData();
-
- void postDataChanged();
-
- // emitted when an item is dropped from the download list, the row is from the
- // download list
- //
- void downloadArchiveDropped(int row, int priority);
-
- // emitted when an external archive is dropped on the mod list
- //
- void externalArchiveDropped(const QUrl& url, int priority);
-
- // emitted when an external folder is dropped on the mod list
- //
- void externalFolderDropped(const QUrl& url, int priority);
-
-private:
-
- // retrieve the display name of a mod or convert from a user-provided
- // name to internal name
- //
- QString getDisplayName(ModInfo::Ptr info) const;
- QString makeInternalName(ModInfo::Ptr info, QString name) const;
-
- QString getFlagText(ModInfo::EFlag flag, ModInfo::Ptr modInfo) const;
-
- QString getConflictFlagText(ModInfo::EConflictFlag flag, ModInfo::Ptr modInfo) const;
-
- QString getColumnToolTip(int column) const;
-
- bool renameMod(int index, const QString &newName);
-
- MOBase::IModList::ModStates state(unsigned int modIndex) const;
-
- // handle dropping of local URLs files
- //
- bool dropLocalFiles(const ModListDropInfo& dropInfo, int row, const QModelIndex& parent);
-
- // return the priority of the mod for a drop event
- //
- int dropPriority(int row, const QModelIndex& parent) const;
-
-private:
-
- struct TModInfo {
- TModInfo(unsigned int index, ModInfo::Ptr modInfo)
- : modInfo(modInfo), nameOrder(index), priorityOrder(0), modIDOrder(0), categoryOrder(0) {}
- ModInfo::Ptr modInfo;
- unsigned int nameOrder;
- unsigned int priorityOrder;
- unsigned int modIDOrder;
- unsigned int categoryOrder;
- };
-
- struct TModInfoChange {
- QString name;
- QFlags<MOBase::IModList::ModState> state;
- };
-
-private:
-
- OrganizerCore *m_Organizer;
- Profile *m_Profile;
-
- NexusInterface *m_NexusInterface;
- std::set<int> m_RequestIDs;
-
- mutable bool m_Modified;
- bool m_InNotifyChange;
- bool m_DropOnMod = false;
-
- QFontMetrics m_FontMetrics;
-
- TModInfoChange m_ChangeInfo;
-
- SignalModInstalled m_ModInstalled;
- SignalModMoved m_ModMoved;
- SignalModRemoved m_ModRemoved;
- SignalModStateChanged m_ModStateChanged;
-
- QElapsedTimer m_LastCheck;
-
- PluginContainer *m_PluginContainer;
-
-};
-
-#endif // MODLIST_H
-
+/* +Copyright (C) 2012 Sebastian Herbord. All rights reserved. + +This file is part of Mod Organizer. + +Mod Organizer is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +Mod Organizer is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with Mod Organizer. If not, see <http://www.gnu.org/licenses/>. +*/ + +#ifndef MODLIST_H +#define MODLIST_H + +#include "moddatacontent.h" +#include "categories.h" +#include "nexusinterface.h" +#include "modinfo.h" +#include "profile.h" + +#include <imodlist.h> + +#include <QFile> +#include <QListWidget> +#include <QNetworkReply> +#include <QMetaEnum> +#include <QNetworkAccessManager> +#ifndef Q_MOC_RUN +#include <boost/signals2.hpp> +#endif +#include <set> +#include <vector> +#include <QVector> + + +class QSortFilterProxyModel; +class PluginContainer; +class OrganizerCore; +class ModListDropInfo; + +/** + * Model presenting an overview of the installed mod + * This is used in a view in the main window of MO. It combines general information about + * the mods from ModInfo with status information from the Profile + **/ +class ModList : public QAbstractItemModel +{ + Q_OBJECT + +public: + + enum ModListRole { + + // data(GroupingRole) contains the "group" role - This is used by the + // category and Nexus ID grouping proxy (but not the ByPriority proxy) + GroupingRole = Qt::UserRole, + + IndexRole = Qt::UserRole + 1, + + // data(AggrRole) contains aggregation information (for + // grouping I assume?) + AggrRole = Qt::UserRole + 2, + + GameNameRole = Qt::UserRole + 3, + PriorityRole = Qt::UserRole + 4, + + // marking role for the scrollbar + ScrollMarkRole = Qt::UserRole + 5, + + // this is the first available role + ModUserRole = Qt::UserRole + 6 + }; + + enum EColumn { + COL_NAME, + COL_CONFLICTFLAGS, + COL_FLAGS, + COL_CONTENT, + COL_CATEGORY, + COL_MODID, + COL_GAME, + COL_VERSION, + COL_INSTALLTIME, + COL_PRIORITY, + COL_NOTES, + COL_LASTCOLUMN = COL_NOTES, + }; + + using SignalModInstalled = boost::signals2::signal<void(MOBase::IModInterface*)>; + using SignalModRemoved = boost::signals2::signal<void(QString const&)>; + using SignalModStateChanged = boost::signals2::signal<void (const std::map<QString, MOBase::IModList::ModStates>&)>; + using SignalModMoved = boost::signals2::signal<void (const QString &, int, int)>; + +public: + + /** + * @brief constructor + * @todo ensure this view works without a profile set, otherwise there are intransparent dependencies on the initialisation order + **/ + ModList(PluginContainer *pluginContainer, OrganizerCore *parent); + + ~ModList(); + + /** + * @brief set the profile used for status information + * + * @param profile the profile to use + **/ + void setProfile(Profile *profile); + + /** + * @brief retrieve the current sorting mode + * @note this is used to store the sorting mode between sessions + * @return current sorting mode, encoded to be compatible to previous versions + **/ + int getCurrentSortingMode() const; + + /** + * @brief remove the specified mod without asking for confirmation + * @param row the row to remove + */ + void removeRowForce(int row, const QModelIndex &parent); + + void notifyChange(int rowStart, int rowEnd = -1); + static QString getColumnName(int column); + + void changeModPriority(int sourceIndex, int newPriority); + void changeModPriority(std::vector<int> sourceIndices, int newPriority); + + void setPluginContainer(PluginContainer *pluginContainer); + + bool modInfoAboutToChange(ModInfo::Ptr info); + void modInfoChanged(ModInfo::Ptr info); + + void disconnectSlots(); + + int timeElapsedSinceLastChecked() const; + +public: + + /** + * @brief Notify the mod list that the given mod has been installed. This is used + * to notify the plugin that registered through onModInstalled(). + * + * @param mod The installed mod. + */ + void notifyModInstalled(MOBase::IModInterface *mod) const; + + /** + * @brief Notify the mod list that a mod has been removed. This is used + * to notify the plugin that registered through onModRemoved(). + * + * @param modName Name of the removed mod. + */ + void notifyModRemoved(QString const& modName) const; + + /** + * @brief Notify the mod list that the state of the specified mods has changed. This is used + * to notify the plugin that registered through onModStateChanged(). + * + * @param modIndices Indices of the mods that changed. + */ + void notifyModStateChanged(QList<unsigned int> modIndices) const; + +public: + + /// \copydoc MOBase::IModList::displayName + QString displayName(const QString &internalName) const; + + /// \copydoc MOBase::IModList::allMods + QStringList allMods() const; + QStringList allModsByProfilePriority(MOBase::IProfile* profile = nullptr) const; + + // \copydoc MOBase::IModList::getMod + MOBase::IModInterface* getMod(const QString& name) const; + + // \copydoc MOBase::IModList::remove + bool removeMod(MOBase::IModInterface* mod); + + // \copydoc MOBase::IModList::renameMod + MOBase::IModInterface* renameMod(MOBase::IModInterface* mod, const QString& name); + + /// \copydoc MOBase::IModList::state + MOBase::IModList::ModStates state(const QString &name) const; + + /// \copydoc MOBase::IModList::setActive + bool setActive(const QString &name, bool active); + + /// \copydoc MOBase::IModList::setActive + int setActive(const QStringList& names, bool active); + + /// \copydoc MOBase::IModList::priority + int priority(const QString &name) const; + + /// \copydoc MOBase::IModList::setPriority + bool setPriority(const QString &name, int newPriority); + + boost::signals2::connection onModInstalled(const std::function<void(MOBase::IModInterface*)>& func); + boost::signals2::connection onModRemoved(const std::function<void(QString const&)>& func); + boost::signals2::connection onModStateChanged(const std::function<void(const std::map<QString, MOBase::IModList::ModStates>&)>& func); + boost::signals2::connection onModMoved(const std::function<void (const QString &, int, int)> &func); + +public: // implementation of virtual functions of QAbstractItemModel + + virtual int rowCount(const QModelIndex &parent = QModelIndex()) const; + virtual bool hasChildren(const QModelIndex &parent = QModelIndex()) const; + virtual int columnCount(const QModelIndex &parent = QModelIndex()) const; + virtual QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const; + virtual bool setData(const QModelIndex &index, const QVariant &value, int role = Qt::EditRole); + virtual QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const; + virtual Qt::ItemFlags flags(const QModelIndex &modelIndex) const; + virtual bool removeRows(int row, int count, const QModelIndex& parent); + + Qt::DropActions supportedDropActions() const override { return Qt::MoveAction | Qt::CopyAction; } + QStringList mimeTypes() const override; + QMimeData *mimeData(const QModelIndexList &indexes) const override; + bool canDropMimeData(const QMimeData* data, Qt::DropAction action, int row, int column, const QModelIndex& parent) const override; + bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex &parent) override; + + virtual QModelIndex index(int row, int column, + const QModelIndex &parent = QModelIndex()) const; + virtual QModelIndex parent(const QModelIndex &child) const; + + virtual QMap<int, QVariant> itemData(const QModelIndex &index) const; + +public slots: + + void onDragEnter(const QMimeData* data); + + // enable/disable mods at the given indices. + // + void setActive(const QModelIndexList& indices, bool active); + + // shift the priority of mods at the given indices by the given offset + // + void shiftModsPriority(const QModelIndexList& indices, int offset); + + // change the priority of the mods specified by the given indices + // + void changeModsPriority(const QModelIndexList& indices, int priority); + + // toggle the active state of mods at the given indices + // + bool toggleState(const QModelIndexList& indices); + +signals: + + // emitted when the priority of one or multiple mods have changed + // + // the sorting of the list can only be manually changed if the list is sorted by priority + // in which case the move is intended to change the priority of a mod. + // + void modPrioritiesChanged(const QModelIndexList& indices) const; + + // emitted when the state (active/inactive) of one or multiple mods have changed + // + void modStatesChanged(const QModelIndexList& indices) const; + + /** + * @brief emitted when the model wants a text to be displayed by the UI + * + * @param message the message to display + **/ + void showMessage(const QString &message); + + /** + * @brief signals change to the count of headers + */ + void resizeHeaders(); + + /** + * @brief emitted to remove a file origin + * @param name name of the orign to remove + */ + void removeOrigin(const QString &name); + + /** + * @brief emitted after a mod has been renamed + * This signal MUST be used to fix the mod names in profiles (except the active one) and to invalidate/refresh other + * structures that may have become invalid with the rename + * + * @param oldName the old name of the mod + * @param newName new name of the mod + */ + void modRenamed(const QString &oldName, const QString &newName); + + /** + * @brief emitted after a mod has been uninstalled + * @param fileName filename of the mod being uninstalled + */ + void modUninstalled(const QString &fileName); + + /** + * @brief QML seems to handle overloaded signals poorly - create unique signal for tutorials + */ + void tutorialModlistUpdate(); + + /** + * @brief fileMoved emitted when a file is moved from one mod to another + * @param relativePath relative path of the file moved + * @param oldOriginName name of the origin that previously contained the file + * @param newOriginName name of the origin that now contains the file + */ + void fileMoved(const QString &relativePath, const QString &oldOriginName, const QString &newOriginName); + + /** + * @brief emitted to have the overwrite folder cleared + */ + void clearOverwrite(); + + void aboutToChangeData(); + + void postDataChanged(); + + // emitted when an item is dropped from the download list, the row is from the + // download list + // + void downloadArchiveDropped(int row, int priority); + + // emitted when an external archive is dropped on the mod list + // + void externalArchiveDropped(const QUrl& url, int priority); + + // emitted when an external folder is dropped on the mod list + // + void externalFolderDropped(const QUrl& url, int priority); + +private: + + // retrieve the display name of a mod or convert from a user-provided + // name to internal name + // + QString getDisplayName(ModInfo::Ptr info) const; + QString makeInternalName(ModInfo::Ptr info, QString name) const; + + QString getFlagText(ModInfo::EFlag flag, ModInfo::Ptr modInfo) const; + + QString getConflictFlagText(ModInfo::EConflictFlag flag, ModInfo::Ptr modInfo) const; + + QString getColumnToolTip(int column) const; + + bool renameMod(int index, const QString &newName); + + MOBase::IModList::ModStates state(unsigned int modIndex) const; + + // handle dropping of local URLs files + // + bool dropLocalFiles(const ModListDropInfo& dropInfo, int row, const QModelIndex& parent); + + // return the priority of the mod for a drop event + // + int dropPriority(int row, const QModelIndex& parent) const; + +private: + + struct TModInfo { + TModInfo(unsigned int index, ModInfo::Ptr modInfo) + : modInfo(modInfo), nameOrder(index), priorityOrder(0), modIDOrder(0), categoryOrder(0) {} + ModInfo::Ptr modInfo; + unsigned int nameOrder; + unsigned int priorityOrder; + unsigned int modIDOrder; + unsigned int categoryOrder; + }; + + struct TModInfoChange { + QString name; + QFlags<MOBase::IModList::ModState> state; + }; + +private: + + OrganizerCore *m_Organizer; + Profile *m_Profile; + + NexusInterface *m_NexusInterface; + std::set<int> m_RequestIDs; + + mutable bool m_Modified; + bool m_InNotifyChange; + bool m_DropOnMod = false; + + QFontMetrics m_FontMetrics; + + TModInfoChange m_ChangeInfo; + + SignalModInstalled m_ModInstalled; + SignalModMoved m_ModMoved; + SignalModRemoved m_ModRemoved; + SignalModStateChanged m_ModStateChanged; + + QElapsedTimer m_LastCheck; + + PluginContainer *m_PluginContainer; + +}; + +#endif // MODLIST_H + |
