/* This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. */ #ifndef ARCHIVEVIEW_H #define ARCHIVEVIEW_H #include #include #include #include #include #include "archivemodel.h" #include "smtreeview.h" class QComboBox; class QLabel; class QLineEdit; class QSortFilterProxyModel; class ArchiveTree; class ArchiveFiles; class ArchiveProxy; class ArchiveFilesProxy; class ArchiveController; class ArchiveView : public QWidget { Q_OBJECT public: explicit ArchiveView(QWidget *parent = 0); int currentSortOrder() const; void readSettings(); void writeSettings(); void setCurrentArchivePath(const QStringList &p) { mCurrentArchivePath = p; } ArchiveModel *archiveModel() { return mArchiveModel; } ArchiveTree *archiveTree() { return mTree; } public slots: void refreshArchive(); void doSelection(); private slots: void setFilter(); void clearFilter(); void showDatabaseError(const QString &errorMsg); void expandItem(const QModelIndex &idx); void collapseItem(const QModelIndex &idx); private: void initController(); QComboBox *mSortOrder; QLineEdit *mFilter; ArchiveTree *mTree; ArchiveFiles *mFiles; ArchiveModel *mArchiveModel; ArchiveFilesModel *mFilesModel; ArchiveProxy *mProxy; ArchiveFilesProxy *mFilesProxy; QHash mExpandedItems; ArchiveController *mController; QStringList mCurrentArchivePath; }; class ArchiveTree : public SmTreeView { Q_OBJECT public: explicit ArchiveTree(QWidget *parent = 0); virtual void setModel(ArchiveProxy *model); public slots: void rename(); void remove(); private: void impossible(const QString msg = tr("Unable to perform function!")); ArchiveProxy *mProxy; ArchiveModel *mModel; }; class ArchiveFiles : public SmTreeView { public: explicit ArchiveFiles(const QString &headerSettings = "afilesheaders", QWidget *parent = 0); }; class ArchiveProxy : public QSortFilterProxyModel { Q_OBJECT public: ArchiveProxy(QObject *parent = 0); public slots: void setFilter(const QString &filter, int sortOrder); protected: bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const; private: QRegExp mFilter; int mSortOrder; }; class ArchiveFilesProxy : public QSortFilterProxyModel { Q_OBJECT public: explicit ArchiveFilesProxy(QObject *parent = 0); }; class FileTypeDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit FileTypeDelegate(QObject *parent = 0); virtual QString displayText(const QVariant &value, const QLocale &locale) const; virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; private: QHash mFiletypeMap; }; class FileNoDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit FileNoDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} virtual QString displayText(const QVariant &value, const QLocale &locale) const; virtual QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const; }; class DvdNoDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit DvdNoDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} virtual QString displayText(const QVariant &value, const QLocale &locale) const; }; class SizeDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit SizeDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} virtual QString displayText(const QVariant &value, const QLocale &locale) const; }; class DurationDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit DurationDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} virtual QString displayText(const QVariant &value, const QLocale &locale) const; }; class EmptyDelegate : public QStyledItemDelegate { Q_OBJECT public: explicit EmptyDelegate(QObject *parent = 0) : QStyledItemDelegate(parent) {} virtual QString displayText(const QVariant &value, const QLocale &locale) const; }; #endif // ARCHIVEVIEW_H