ResultListModel.hpp 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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 };
  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. private:
  32. void requestThumbnail(const std::string& path) const;
  33. void emitRowDataChangedForPath(const std::string& path);
  34. std::vector<ResultListItem> m_items;
  35. std::unordered_map<std::string, bool> m_checkStates;
  36. mutable std::unordered_set<std::string> m_loadingPaths;
  37. mutable std::unordered_map<std::string, QPixmap> m_thumbnails;
  38. };