/* 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 QToolBar; class QMouseEvent; class QDragEnterEvent; class QRadioButton; 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; } ArchiveProxy *archiveProxy() { return mProxy; } QToolBar *toolBar() { return mToolBar; } public slots: void refreshArchive(); void doSelection(); void clearFilter(); private slots: void setFilter(); 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; QTextEdit *mMeta; QStandardItemModel *mActorModel; QStandardItemModel *mGenreModel; QSplitter *mTreeSplitter; QSplitter *mRightSplitter; QToolBar *mToolBar; }; class ArchiveTree : public SmTreeView { Q_OBJECT public: explicit ArchiveTree(QWidget *parent = 0); virtual void setModel(ArchiveProxy *model); public slots: void edit(); void remove(); void editActors(); void editGenres(); void editMetadata(); void editSeriesPart(); void markAsFavorite(); void deleteFromTree(); void newPart(); protected: virtual void dragEnterEvent(QDragEnterEvent *e); virtual void dragMoveEvent(QDragMoveEvent *e); virtual void dropEvent(QDropEvent *e); private: void impossible(const QString msg = tr("Unable to perform function!")); QModelIndex firstSelected(); ArchiveProxy *mProxy; ArchiveModel *mModel; }; class ArchiveFiles : public SmTreeView { Q_OBJECT public: explicit ArchiveFiles(const QString &headerSettings = "afilesheaders", QWidget *parent = 0); void setSourceModel(ArchiveFilesModel *m) { mSourceModel = m; } public slots: void deleteFromFiles(); protected: virtual void mousePressEvent(QMouseEvent *e); virtual void mouseMoveEvent(QMouseEvent *e); private: QPoint mDragStartPos; ArchiveFilesModel *mSourceModel; }; 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; virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const; private: QRegExp mFilter; int mSortOrder; }; class ArchiveFilesProxy : public QSortFilterProxyModel { Q_OBJECT public: explicit ArchiveFilesProxy(QObject *parent = 0); }; /* 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, bool showClearButton = false, QWidget *parent = 0); void fillCompleter(const QStringList &completions); void setCurrentItems(const QStringList &items); QStringList items() const; void setDecorationItem(const QIcon &icon) { mDecorationIcon = icon; } public slots: void clear(); private slots: void addItem(); void removeItem(); private: QStandardItemModel *mModel; QSortFilterProxyModel *mProxy; SmTreeView *mView; QPushButton *mAdd; QPushButton *mRemove; QPushButton *mClear; QLineEdit *mEditor; QCompleter *mCompleter; QStringListModel *mCompleterModel; QString mCaption; QIcon mDecorationIcon; }; /* 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 setMetadata(const QList &data); QList metadata() const; signals: void oldSelected(const QString &); private slots: void addToComment(const QString &reason); private: QSpinBox *mReleaseYear; QLineEdit *mSubject; QTextEdit *mComment; QRadioButton *mTorrent; QRadioButton *mUsenet; QDate mAdded; QComboBox *mReencReason; 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 PartEditor : public QDialog { Q_OBJECT public: explicit PartEditor(QWidget *parent = 0, Qt::WindowFlags f = 0); void setPartNo(int partNo); int partNo() const; void setSubtitle(const QString &subtitle); QString subtitle() const; private: QSpinBox *mPartNo; QLineEdit *mSubtitle; QPushButton *mCancel; QPushButton *mAccept; }; #endif // ARCHIVEVIEW_H