summaryrefslogtreecommitdiffstats
path: root/filewidget.h
blob: eed169283ca548c1bc62f6bfd1dbda7c95a751c0 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#ifndef FILEWIDGET_H
#define FILEWIDGET_H

#include <QWidget>
#include <QSqlDatabase>
#include <QSqlQuery>
#include <QItemSelection>
#include <QMenuBar>
#include <QToolBar>
#include <QFileInfo>
#include <QLineEdit>
#include <QCache>

class QLineEdit;
class QStandardItemModel;
class QTreeView;
class QProgressBar;
class QKeyEvent;
class QAction;
class QMimeData;
class VideoSorter;
class FileDisplay;
class OriginDialog;
class QMenu;
class FileCopier;
class ProgressDialog;
class CachedFileData;
class QStandardItem;
class QComboBox;

class FileWidget : public QWidget {
    Q_OBJECT
    public:
        enum FileAttrs { NotPresent = 0, Present = 1, NoVideo = 2, ParentDir = 3, Directory = 4 };
        enum CustomRoles { AttrsRole = Qt::UserRole + 1, FullPathRole = Qt::UserRole + 2, DurationRole = Qt::UserRole + 3, MD5SumRole = Qt::UserRole + 4, SecondsRole = Qt::UserRole + 5, SizeRole = Qt::UserRole + 6 };
        enum { ColumnCount = 7 };
        enum Columns { IconColumn = 0, NameColumn = 1, CopiedColumn = 2, MimeColumn = 3, DurationColumn = 4, SizeColumn = 5, Md5Column = 6 };
        enum FileAction { Copy, Cut, Paste };
        explicit FileWidget(QWidget *parent = 0);
        QTreeView *fileView() { return mFileView; }
        QMenuBar *menuBar() { return mMenuBar; }
        QToolBar *toolBar() { return mToolBar; }
        const QString currentDir() const { return mDir->text(); }
        void setProgressBar(QProgressBar *progressBar) { mProgressBar = progressBar; }
        virtual ~FileWidget();

    signals:
        void statusMessage(const QString &msg);
        void selectionCountChanged(const QString &msg);
        void durationChanged(const QString &duration);
        void freeSpaceChanged(const QString &dir);

    public slots:
        void fileSelectionChanged(const QItemSelection &selected, const QItemSelection &deselected);
        void cd(const QString &to);
        void cdAbsolute(const QString &to);
        void cdUp();
        void cdLast();
        void deleteFiles();
        void gatherData();
        void selectDir();
        void properties();
        void properties(const QModelIndex &idx);
        void preview();
        void filter(int column, QString regexp);
        void copy();
        void cut();
        void paste();
        void selectFirst();
        void addAsOrigin();
        void setupProgress(QString file, QString dest, qint64 size);
        void setCopyProgress(qint64 bytes);
        void setCopySummary(qint64 bytes, qint64 elapsed);
        void copyFiles(QString destDir);
        void hideCopyProgress();
        void copySuccess(bool success, QString source);
        void removeFromCache();
        void clearCache();
        void readSettings();

    protected:
        virtual void keyPressEvent(QKeyEvent *e);
        virtual void contextMenuEvent(QContextMenuEvent *e);

    private:
        void setupGui();
        void createActions();
        void fileData(const QString &fullPath, const QString &md5);
        int md5Count(const QString &md5);
        void readHeaderData();
        void writeHeaderData();
        void writeSettings();
        void readCache();
        void writeCache();
        void cutOrCopy();
        void populateFavDirs();
        void populateMimeFilters();
        QList<QStandardItem*> constructRow(CachedFileData *fd) const;
        QAction *createSeparator();
        QLineEdit *mDir;
        QLineEdit *mFilter;
        QStandardItemModel *mModel;
        QTreeView *mFileView;
        QMenuBar *mMenuBar;
        QMenu *mCopyToMenu;
        QToolBar *mToolBar;
        QProgressBar *mProgressBar;
        QString mLastDir;
        QSqlDatabase mDb;
        QSqlQuery mQOrigin;
        QSqlQuery mQFiles;
        QMimeData *mMimeData;
        QAction *mSelDirA;
        QAction *mRefreshA;
        QAction *mDirUpA;
        QAction *mDirBackA;
        QAction *mPropertiesA;
        QAction *mPreviewA;
        QAction *mCopyA;
        QAction *mCutA;
        QAction *mPasteA;
        QAction *mDeleteA;
        QAction *mAddAsOriginA;
        QAction *mRemoveFromCacheA;
        QAction *mClearCacheA;
        ProgressDialog *mCopyProgress;
        FileDisplay *mFileDisplay;
        VideoSorter *mProxy;
        OriginDialog *mOrignDlg;
        FileCopier *mFileCopier;
        QCache<QString, CachedFileData> mFileCache;
        QComboBox *mFavDirs;
        QComboBox *mMimeFilters;
        int mFileAction;
};

#endif // FILEWIDGET_H