modstateitemmodel_moc.h 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. /*
  2. * modstateview_moc.h, part of VCMI engine
  3. *
  4. * Authors: listed in file AUTHORS in main folder
  5. *
  6. * License: GNU General Public License v2.0 or later
  7. * Full text of license available in license.txt file, in main folder
  8. *
  9. */
  10. #pragma once
  11. #include <QAbstractTableModel>
  12. #include <QSortFilterProxyModel>
  13. class ModStateModel;
  14. class ModState;
  15. namespace ModFields
  16. {
  17. enum EModFields
  18. {
  19. NAME,
  20. STATUS_ENABLED,
  21. STATUS_UPDATE,
  22. TYPE,
  23. COUNT
  24. };
  25. }
  26. enum class ModFilterMask : uint8_t
  27. {
  28. ALL,
  29. AVAILABLE,
  30. INSTALLED,
  31. UPDATEABLE,
  32. ENABLED,
  33. DISABLED
  34. };
  35. namespace ModRoles
  36. {
  37. enum EModRoles
  38. {
  39. ValueRole = Qt::UserRole,
  40. ModNameRole
  41. };
  42. }
  43. class ModStateItemModel final : public QAbstractItemModel
  44. {
  45. friend class CModFilterModel;
  46. Q_OBJECT
  47. std::shared_ptr<ModStateModel> model;
  48. QStringList modNameToID;
  49. // contains mapping mod -> numbered list of submods
  50. // mods that have no parent located under "" key (empty string)
  51. QMap<QString, QStringList> modIndex;
  52. void endResetModel();
  53. QString modIndexToName(const QModelIndex & index) const;
  54. QString modTypeName(QString modTypeID) const;
  55. QVariant getTextAlign(int field) const;
  56. QVariant getValue(const ModState & mod, int field) const;
  57. QVariant getText(const ModState & mod, int field) const;
  58. QVariant getIcon(const ModState & mod, int field) const;
  59. public:
  60. explicit ModStateItemModel(std::shared_ptr<ModStateModel> model, QObject * parent);
  61. /// CModListContainer overrides
  62. void reloadViewModel();
  63. void modChanged(QString modID);
  64. QVariant data(const QModelIndex & index, int role) const override;
  65. QVariant headerData(int section, Qt::Orientation orientation, int role) const override;
  66. int rowCount(const QModelIndex & parent) const override;
  67. int columnCount(const QModelIndex & parent) const override;
  68. QModelIndex index(int row, int column, const QModelIndex & parent) const override;
  69. QModelIndex parent(const QModelIndex & child) const override;
  70. Qt::ItemFlags flags(const QModelIndex & index) const override;
  71. };
  72. class CModFilterModel final : public QSortFilterProxyModel
  73. {
  74. ModStateItemModel * base;
  75. ModFilterMask filterMask;
  76. bool filterMatchesThis(const QModelIndex & source) const;
  77. bool filterMatchesCategory(const QModelIndex & source) const;
  78. bool filterAcceptsRow(int source_row, const QModelIndex & source_parent) const override;
  79. public:
  80. void setTypeFilter(ModFilterMask filterMask);
  81. CModFilterModel(ModStateItemModel * model, QObject * parent = nullptr);
  82. };