summaryrefslogtreecommitdiffstats
path: root/filesystemwidget.h
blob: 8ecffca222ebc2062ecb37065971465cd5f4fe36 (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
/*
  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 FILESYSTEMWIDGET_H
#define FILESYSTEMWIDGET_H

#include <QWidget>
#include <QFileSystemModel>
#include <QSqlDatabase>
#include <QDateTime>
#include <QMutex>
#include <QThread>

class SmTreeView;
class FilesystemDirProxy;
class FileView;
class FilesystemFileProxy;
class QLineEdit;
class PictureViewer2;
class FileSystemModel;
class SheMovIconProvider;
class SmDirModel;
class QToolBar;
class QSplitter;
class UnpackDialog;
class Unpacker;

class FilesystemWidget : public QWidget {
	Q_OBJECT
	public:
		enum ClipboardMode { Copy, Cut, None };
        enum SelectedFiles { Current, Previous };
		FilesystemWidget(QWidget *parent = 0);
		FileView *fileView() { return mFileView; }
		FilesystemFileProxy *fileProxy() { return mFileProxy; }
        FileSystemModel *dirModel() { return mModel; }
        SmDirModel *fileModel() { return mFileModel; }
		const QString windowTitle() const { return mWindowTitle; }
        PictureViewer2 *pictureViewer() { return mPicViewer; }
        QToolBar *toolBar() { return mToolBar; }
		bool isMounted();
        const QString currentDir() const;

	signals:
		void windowTitle(const QString &);
		void statusbarMessage(const QString &);
		void mounted(bool);
        void upSelected(const QString &);

	public slots:
		void directoryChanged(const QModelIndex &selected, const QModelIndex &);
		void directoryEdited();
		void fileViewActivated(const QModelIndex &index);
		void parentDir();
		void goBack();
		void deleteFiles();
		void toClipboard(int clipmode);
		void fromClipboard();
        void renameFile();
		void playSelected(const QString &player = QString());
        void playSelectedRepeat(int times);
        void playSelectedInfinite();
		void readSettings();
		void writeSettings();
		void configChanged();
		void dvdMount();
        void moveToArchive();
        void selectAllPV();
        void setWindowTitle();
        void preview();
        void unpack();
        void selectUnpackDir();
        void centerCurrent();

    protected:
        void keyPressEvent(QKeyEvent *e);

	private slots:
		void dirExpanded(const QModelIndex &idx);
		void dirCollapsed(const QModelIndex &idx);
		void fileEditorClosed(const QModelIndex &idx);
        void resizeFileView();

	private:
		void deleteRecursive(const QFileInfo &start);
        QFileInfoList getRecursive(const QFileInfo &start) const;
		void copyFiles(const QStringList &files, const QString &dest);
		void moveFiles(const QStringList &files, const QString &dest);
		void copyRecursive(const QFileInfo &start, const QString &destdir);
		const QString selectedDir();
		QPair<QString, QStringList> programData(const QString &prefix, const QString &preferred);
		QStringList selectedFiles();
		QStringList mExpandedDirs;
        FileSystemModel *mModel;
        SmDirModel *mFileModel;
        SmTreeView *mDirView;
		FileView *mFileView;
		FilesystemDirProxy *mDirProxy;
		FilesystemFileProxy *mFileProxy;
        QToolBar *mToolBar;
		QLineEdit *mDirEdit;
		QString mWindowTitle;
		QString mTemplate;
		qint64 mSize;
        PictureViewer2 *mPicViewer;
		SheMovIconProvider *mIconProvider;
		QString mLastDir;
        QHash<int,QStringList> mLastFiles;
		int mClipboardMode;
        QSplitter *mIconDirSplitter;
        UnpackDialog *mUnpackDlg;
};

class FileSystemModel : public QFileSystemModel {
	Q_OBJECT
	public:
		FileSystemModel(QObject *parent = 0);
        ~FileSystemModel() {}

	public slots:
		void markForClipboard(const QPersistentModelIndex &idx);
		void clearClipboardList();

	private:
		void cleanup();
		QHash<QString, QDateTime> mSeen;
		QSqlDatabase mDb;
		QSqlQuery *mDeleteFromSeenQuery;
		QSqlQuery *mMarkAsSeenQuery;
		QList<QPersistentModelIndex> mClipEntries;
};

#endif