ResultListModel.hpp 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #pragma once
  2. #include <QAbstractListModel>
  3. #include <QPixmap>
  4. #include <QString>
  5. #include <vector>
  6. #include <unordered_set>
  7. #include "SimilaritySearch.hpp"
  8. struct ResultListItem {
  9. enum Type { Header, ImageRow, Message };
  10. Type type;
  11. int groupId;
  12. QString headerText;
  13. std::vector<ImageData> images; // Up to 4 images
  14. };
  15. class ResultListModel : public QAbstractListModel {
  16. Q_OBJECT
  17. public:
  18. explicit ResultListModel(QObject *parent = nullptr);
  19. ~ResultListModel() override;
  20. int rowCount(const QModelIndex &parent = QModelIndex()) const override;
  21. QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
  22. // Custom APIs
  23. void setGroups(const std::vector<DuplicateGroup>& groups, bool preserveState = false);
  24. const ResultListItem& getItem(int row) const;
  25. bool isChecked(const std::string& path) const;
  26. void setChecked(const std::string& path, bool state);
  27. void clearAllChecks();
  28. void clear();
  29. const std::unordered_map<std::string, bool>& getCheckStates() const;
  30. QPixmap getThumbnail(const std::string& path) const;
  31. void addThumbnail(const std::string& path, const QImage& image);
  32. private:
  33. void requestThumbnail(const std::string& path) const;
  34. void emitRowDataChangedForPath(const std::string& path);
  35. std::vector<ResultListItem> m_items;
  36. std::unordered_map<std::string, bool> m_checkStates;
  37. mutable std::unordered_set<std::string> m_loadingPaths;
  38. mutable std::unordered_map<std::string, QPixmap> m_thumbnails;
  39. };