summaryrefslogtreecommitdiff
path: root/noncore/unsupported/filebrowser/filebrowser.h
blob: 2e9e444f4e7449de7add7bbc1b951dd1c6e7be51 (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
138
139
140
141
/**********************************************************************
** Copyright (C) 2000 Trolltech AS.  All rights reserved.
**
** This file is part of Qtopia Environment.
**
** This file may be distributed and/or modified under the terms of the
** GNU General Public License version 2 as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL included in the
** packaging of this file.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
** See http://www.trolltech.com/gpl/ for GPL licensing information.
**
** Contact info@trolltech.com if any conditions of this licensing are
** not clear to you.
**
**********************************************************************/
#ifndef FILEBROWSER_H
#define FILEBROWSER_H

#include <qlistview.h>
#include <qmainwindow.h>
#include <qfileinfo.h>
#include <qaction.h>
#include <qtimer.h>
#include <qstringlist.h>

class InlineEdit;

class FileItem : public QListViewItem
{
public:
    FileItem( QListView * parent, const QFileInfo & fi );

    QString key( int column, bool ascending = TRUE ) const;
    QString getFilePath(){ return fileInfo.filePath(); }
    QString getFileName(){ return fileInfo.fileName(); }
    bool    isDir(){ return fileInfo.isDir(); }
    bool    isExecutable(){ return fileInfo.isExecutable(); }
    bool    isLib();
    int     launch();
    bool    rename( const QString & name );
private:
    QString sizeString( unsigned int size );
    QFileInfo fileInfo;
};


class FileView : public QListView
{
    Q_OBJECT

public:
    FileView( const QString & dir, QWidget * parent = 0,
			  const char * name = 0 );
    void    setDir( const QString & dir );
    QString cd(){ return currentDir; }
    QStringList history() const { return dirHistory; }

public slots:
    void updateDir();
    void parentDir();
    void lastDir();

    void rename();
    void copy();
    void paste();
    void del();
    void cut();
    void newFolder();
    void viewAsText();

protected:
    void generateDir( const QString & dir );
    void resizeEvent( QResizeEvent* );
    void contentsMousePressEvent( QMouseEvent * e );
    void contentsMouseReleaseEvent( QMouseEvent * e );

protected slots:
    void itemClicked( QListViewItem * i );
    void itemDblClicked( QListViewItem * i );
    void showFileMenu();
    void cancelMenuTimer();
    void selectAll(){ QListView::selectAll( TRUE ); }
    void deselectAll(){ QListView::selectAll( FALSE ); }
    void addToDocuments();
    void run();
    void endRenaming();

private:
    QString     currentDir;
    QStringList dirHistory, flist;
    QTimer      menuTimer;
    InlineEdit * le;
    FileItem   * itemToRename;
    bool         selected;

    bool copyFile( const QString & dest, const QString & src );

signals:
    void dirChanged();
    void textViewActivated( QWidget * w );
    void textViewDeactivated();
};

class FileBrowser : public QMainWindow
{
    Q_OBJECT

public:
    FileBrowser( QWidget * parent = 0,
				 const char * name = 0, WFlags f = 0 );
    FileBrowser( const QString & dir, QWidget * parent = 0,
				 const char * name = 0, WFlags f = 0 );
private:
    void init(const QString & dir);
    QString      fileToCopy;
    QPopupMenu * dirMenu, * sortMenu;
    FileView   * fileView;
    QAction    * pasteAction;
    QAction	*lastAction;
    QAction	*upAction;

    bool         copyFile( const QString & dest, const QString & src );

private slots:
    void pcmciaMessage( const QCString &msg, const QByteArray &);

    void sortName();
    void sortDate();
    void sortSize();
    void sortType();
    void updateSorting();

    void updateDirMenu();
    void dirSelected( int id );
};

#endif