/* 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 #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 QSplitter; class QTextEdit; class QCompleter; class QStandardItemModel; class QSpinBox; 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; SmTreeView *mActorView; SmTreeView *mGenreView; QStandardItemModel *mActorModel; QStandardItemModel *mGenreModel; QSplitter *mTreeSplitter; QTextEdit *mMetadataView; }; class ArchiveTree : public SmTreeView { Q_OBJECT public: explicit ArchiveTree(QWidget *parent = 0); virtual void setModel(ArchiveProxy *model); public slots: void rename(); void remove(); void editActors(); void editGenres(); void editMetadata(); 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; }; /* separate widget since we need it in NewMovieWizard * and editing genres, actors in the new ArchiveView */ class MappingEditorWidget : public QWidget { Q_OBJECT public: explicit MappingEditorWidget(const QString &caption, QWidget *parent = 0); void fillCompleter(const QStringList &completions); void setCurrentItems(const QStringList &items); QStringList items() const; public slots: void clear(); private slots: void addItem(); void removeItem(); private: QStandardItemModel *mModel; QSortFilterProxyModel *mProxy; SmTreeView *mView; QPushButton *mAdd; QPushButton *mRemove; QLineEdit *mEditor; QCompleter *mCompleter; QStringListModel *mCompleterModel; QString mCaption; }; /* dialog putting MappingEditorWidget and * Cancel, Accept buttons together. Used when editing * ArchiveView */ class MappingEditor : public QDialog { Q_OBJECT public: explicit MappingEditor(const QString &caption, QWidget *parent = 0, Qt::WindowFlags f = 0); MappingEditorWidget *widget() { return mWidget; } private: QPushButton *mAccept; QPushButton *mCancel; MappingEditorWidget *mWidget; }; class MetadataEditorWidget : public QWidget { Q_OBJECT public: explicit MetadataEditorWidget(QWidget *parent = 0); void setSources(const QStringList &sources); void setReleaseGroups(const QStringList &relGroups); void setMetadata(const QList &data); QList metadata() const; public slots: void setEnabledAll(bool enabled); private: QSpinBox *mReleaseYear; QComboBox *mSource; QComboBox *mRelGroup; QLineEdit *mSubject; QLineEdit *mEncoderOpts; QSpinBox *mPasses; QTextEdit *mComment; QDate mAdded; QList mWidgets; }; class MetadataEditor : public QDialog { Q_OBJECT public: explicit MetadataEditor(QWidget *parent = 0, Qt::WindowFlags f = 0); MetadataEditorWidget *widget() { return mWidget; } private: MetadataEditorWidget *mWidget; QPushButton *mCancel; QPushButton *mAccept; }; 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