#ifndef FILEMANAGER_H #define FILEMANAGER_H #include #include #include #include #include #include #include #include "imageinfodata.h" namespace Ui { class FileManager; class FITSKeyword; } class PathTabBar : public QTabBar { Q_OBJECT public: explicit PathTabBar(const QStringList &tabs); QHBoxLayout* createLayout(); const QStringList& tabPaths() const; QString currentTabPath() const; public slots: void pathChanged(const QString &path); signals: void tabChanged(const QString &path); private: QStringList _tabs; }; class FITSSelection : public QDialog { Q_OBJECT public: FITSSelection(const QStringList &keywords, QWidget *parent = nullptr); ~FITSSelection(); QStringList FITSKeywords() const; private: Ui::FITSKeyword *ui; }; class FileManager : public QMainWindow { Q_OBJECT public: explicit FileManager(const QSet &openFilter, QWidget *parent = nullptr); ~FileManager(); public slots: void selectFITSKeywords(); protected slots: void addTab(); signals: void openFile(const QString &path); private: Ui::FileManager *ui; PathTabBar *_leftTabBar; PathTabBar *_rightTabBar; }; class DirFileSystemModel : public QFileSystemModel { Q_OBJECT mutable QCache *_cache = nullptr; static QCache* getCacheInstance(); QModelIndex _dir; QStringList _fitsKeywords; bool _loadFitsKeywords = true; public: explicit DirFileSystemModel(QObject *parent = nullptr); void setDir(const QString &path); QString dir() const; void setFITSKeywords(const QStringList &keywords); const QStringList& FITSKeywords() const; Qt::ItemFlags flags(const QModelIndex &index) const override; int columnCount(const QModelIndex &parent) const override; QVariant data(const QModelIndex &index, int role) const override; QVariant headerData(int section, Qt::Orientation orientation, int role) const override; bool hasChildren(const QModelIndex &parent) const override; public slots: void loadFitsKeywords(bool enable); }; class DirView : public QTreeView { Q_OBJECT DirFileSystemModel *_dirFileSystemModel = nullptr; QSet _openFilter; public: explicit DirView(QWidget *parent = nullptr); void setDir(const QString &path); QString dir() const; void setOpenFilter(const QSet &openFilter); void setFITSKeywords(const QStringList &keywords); const QStringList& FITSKeywords() const; public slots: void headerContextMenu(const QPoint &pos); void loadFitsKeywords(bool enable); signals: void dirChanged(const QString &path); void openFile(const QString &path); }; #endif // FILEMANAGER_H