00001 #ifndef FILESELECTIONMODEL_H 00002 #define FILESELECTIONMODEL_H 00003 00004 #define DEBUG_PRELOADFILES 00005 //#undef DEBUG_PRELOADFILES 00006 00007 #include "database.h" 00008 00020 class FilesUploadedModel : public SqlQueryModel { 00021 public: 00022 FilesUploadedModel(QObject *parent = 0); 00023 }; 00024 00025 #include <QAbstractListModel> 00026 #include <QVariant> 00027 #include <QFileDialog> 00028 #include <QModelIndexList> 00029 #include <QDateTime> 00030 00034 class FileSelectionModel : public QAbstractListModel { 00035 Q_OBJECT 00036 public: 00037 enum FileRoles{ 00038 FileName = Qt::UserRole + 400, 00039 FilePath, 00040 FileModDate 00041 }; 00042 00043 FileSelectionModel(QObject *parent = 0); 00044 int rowCount (const QModelIndex & parent = QModelIndex()) const; 00045 QVariant data (const QModelIndex & index, int role = Qt::DisplayRole) const; 00046 Qt::ItemFlags flags ( const QModelIndex & index ) const; 00047 FilesUploadedModel *uploadedFilesModel(); 00048 00049 private: 00050 static bool isGreaterThan(QModelIndex &i, QModelIndex &j); 00051 00052 public slots: 00053 void deleteFiles(const QModelIndexList & indexes); 00054 void addFiles(QWidget *parent = 0); 00055 void addToFailedUploadList(const QModelIndex & index); 00056 00057 private: 00058 QStringList fileList; 00059 QStringList failedToUploadFileList; 00060 FilesUploadedModel *uploadedFileModel; 00061 }; 00062 00063 #include <QStyledItemDelegate> 00064 00070 class FileSelectionDelegate : public QStyledItemDelegate { 00071 Q_OBJECT 00072 public: 00073 FileSelectionDelegate(QObject *parent = 0) : QStyledItemDelegate(parent){}; 00074 }; 00075 00076 #include <QListView> 00077 #include <QAction> 00078 #include <QMenu> 00079 #include <QContextMenuEvent> 00080 #include <QShortcut> 00081 #include <QProcess> 00082 00086 class FileSelectionView : public QListView { 00087 Q_OBJECT 00088 public: 00089 FileSelectionView(QWidget *parent = 0); 00090 void setModel(FileSelectionModel *model); 00091 FileSelectionModel *model(); 00092 void setAllowDeletions(bool flag); 00093 QSize sizeHint() const; 00094 00095 signals: 00096 void removeItems(QModelIndexList); 00097 00098 private: 00099 void contextMenuEvent(QContextMenuEvent * event); 00100 00101 private slots: 00102 void removeSelectedItems(); 00103 void onDoubleClick(const QModelIndex &index); 00104 00105 private: 00106 QMenu *menu; 00107 QAction *removeFilesAction; 00108 bool m_allowDeletions; 00109 }; 00110 00111 #endif // FILESELECTIONMODEL_H