MainWindow.hpp 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. #pragma once
  2. #include "DatabaseManager.hpp"
  3. #include "SimilaritySearch.hpp"
  4. #include <QCheckBox>
  5. #include <QFutureWatcher>
  6. #include <QTimer>
  7. #include <QEvent>
  8. #include <QObject>
  9. #include <QGridLayout>
  10. #include <QLabel>
  11. #include <QListWidget>
  12. #include <QMainWindow>
  13. #include <QProgressBar>
  14. #include <QPushButton>
  15. #include <QScrollArea>
  16. #include <QSlider>
  17. #include <QCloseEvent>
  18. #include <memory>
  19. #include <vector>
  20. class MainWindow : public QMainWindow {
  21. Q_OBJECT
  22. public:
  23. MainWindow(QWidget *parent = nullptr);
  24. ~MainWindow();
  25. private slots:
  26. void onAddDirectory();
  27. void onRemoveDirectory();
  28. void onStartScan();
  29. void onDeleteSelected();
  30. void onThresholdChanged(int value);
  31. void onStrictChanged(int state);
  32. void onScanFinished();
  33. void performAsyncSearch();
  34. void onSearchFinished();
  35. void onClearResults();
  36. private:
  37. void setupUi();
  38. void loadSettings();
  39. void saveSettings();
  40. void updateResultGrid(const std::vector<DuplicateGroup> &groups);
  41. std::vector<ImageData> getFilteredImages();
  42. bool eventFilter(QObject *obj, QEvent *event) override;
  43. void closeEvent(QCloseEvent *event) override;
  44. // Database
  45. std::unique_ptr<DatabaseManager> m_dbManager;
  46. // UI Elements
  47. QListWidget *m_dirList;
  48. QPushButton *m_addDirBtn;
  49. QPushButton *m_removeDirBtn;
  50. QPushButton *m_startScanBtn;
  51. QProgressBar *m_progressBar;
  52. QScrollArea *m_scrollArea;
  53. QWidget *m_resultWidget;
  54. QGridLayout *m_resultLayout;
  55. QPushButton *m_deleteBtn;
  56. QPushButton *m_clearBtn;
  57. // Similarity Controls
  58. QSlider *m_thresholdSlider;
  59. QLabel *m_thresholdLabel;
  60. QCheckBox *m_strictCheckBox;
  61. int m_currentThreshold = 10;
  62. bool m_strictMode = false;
  63. // Async
  64. QFutureWatcher<void> *m_scanWatcher;
  65. QFutureWatcher<std::vector<DuplicateGroup>> *m_searchWatcher;
  66. QTimer *m_searchTimer;
  67. // Cache
  68. std::vector<ImageData> m_lastScannedImages;
  69. QStringList m_loadedDirs;
  70. // Checkboxes for tracking selected images
  71. struct ResultItem {
  72. QCheckBox *checkbox;
  73. std::string path;
  74. };
  75. std::vector<ResultItem> m_resultItems;
  76. };