-rw-r--r-- | libopie/ofileselector/ofiledialog.cpp | 116 | ||||
-rw-r--r-- | libopie/ofileselector/ofiledialog.h | 77 | ||||
-rw-r--r-- | libopie/ofileselector/ofilelistview.cpp | 118 | ||||
-rw-r--r-- | libopie/ofileselector/ofilelistview.h | 45 | ||||
-rw-r--r-- | libopie/ofileselector/ofileselector.cpp | 1246 | ||||
-rw-r--r-- | libopie/ofileselector/ofileselector.h | 474 | ||||
-rw-r--r-- | libopie/ofileselector/ofileselectoritem.cpp | 53 | ||||
-rw-r--r-- | libopie/ofileselector/ofileselectoritem.h | 30 | ||||
-rw-r--r-- | libopie/ofileselector/ofileview.cpp | 28 | ||||
-rw-r--r-- | libopie/ofileselector/ofileview.h | 109 |
10 files changed, 2296 insertions, 0 deletions
diff --git a/libopie/ofileselector/ofiledialog.cpp b/libopie/ofileselector/ofiledialog.cpp new file mode 100644 index 0000000..4783004 --- a/dev/null +++ b/libopie/ofileselector/ofiledialog.cpp | |||
@@ -0,0 +1,116 @@ | |||
1 | /* | ||
2 | =. This file is part of the OPIE Project | ||
3 | .=l. Copyright (c) 2002 <> | ||
4 | .>+-= | ||
5 | _;:, .> :=|. This library is free software; you can | ||
6 | .> <`_, > . <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | ||
8 | .="- .-=="i, .._ License as published by the Free Software | ||
9 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
10 | ._= =} : or (at your option) any later version. | ||
11 | .%`+i> _;_. | ||
12 | .i_,=:_. -<s. This library is distributed in the hope that | ||
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | : .. .:, . . . without even the implied warranty of | ||
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | ||
17 | ..}^=.= = ; Library General Public License for more | ||
18 | ++= -. .` .: details. | ||
19 | : = ...= . :.=- | ||
20 | -. .:....=;==+<; You should have received a copy of the GNU | ||
21 | -_. . . )=. = Library General Public License along with | ||
22 | -- :-=` this library; see the file COPYING.LIB. | ||
23 | If not, write to the Free Software Foundation, | ||
24 | Inc., 59 Temple Place - Suite 330, | ||
25 | Boston, MA 02111-1307, USA. | ||
26 | |||
27 | */ | ||
28 | |||
29 | #include <qpe/applnk.h> | ||
30 | #include <qstring.h> | ||
31 | #include <qapplication.h> | ||
32 | #include <qlayout.h> | ||
33 | |||
34 | #include "ofiledialog.h" | ||
35 | |||
36 | OFileDialog::OFileDialog(const QString &caption, | ||
37 | QWidget *wid, int mode, int selector, | ||
38 | const QString &dirName, | ||
39 | const QString &fileName, | ||
40 | const QMap<QString,QStringList>& mimetypes ) | ||
41 | : QDialog( wid, "OFileDialog", true ) | ||
42 | { | ||
43 | // QVBoxLayout *lay = new QVBoxLayout(this); | ||
44 | //showMaximized(); | ||
45 | QVBoxLayout *lay = new QVBoxLayout(this ); | ||
46 | file = new OFileSelector(this , mode, selector, | ||
47 | dirName, fileName, | ||
48 | mimetypes ); | ||
49 | lay->addWidget( file ); | ||
50 | |||
51 | //lay->addWidget( file ); | ||
52 | //showFullScreen(); | ||
53 | setCaption( caption.isEmpty() ? tr("FileDialog") : caption ); | ||
54 | connect(file, SIGNAL(fileSelected(const QString&) ), | ||
55 | this, SLOT(slotFileSelected(const QString&) ) ); | ||
56 | |||
57 | connect(file, SIGNAL(dirSelected(const QString &) ), | ||
58 | this, SLOT(slotDirSelected(const QString &) ) ); | ||
59 | |||
60 | |||
61 | file->setYesCancelVisible( false ); // relayout | ||
62 | } | ||
63 | QString OFileDialog::mimetype()const | ||
64 | { | ||
65 | return QString::null; | ||
66 | } | ||
67 | QString OFileDialog::fileName()const | ||
68 | { | ||
69 | return file->selectedName(); | ||
70 | } | ||
71 | DocLnk OFileDialog::selectedDocument()const | ||
72 | { | ||
73 | return file->selectedDocument(); | ||
74 | } | ||
75 | QString OFileDialog::getOpenFileName(int selector, | ||
76 | const QString &startDir, | ||
77 | const QString &file, | ||
78 | const MimeTypes &mimes, | ||
79 | QWidget *wid, | ||
80 | const QString &caption ) | ||
81 | { | ||
82 | QString ret; | ||
83 | OFileDialog dlg( caption.isEmpty() ? tr("Open") : caption, | ||
84 | wid, OFileSelector::OPEN, selector, startDir, file, mimes); | ||
85 | dlg.showMaximized(); | ||
86 | if( dlg.exec() ) | ||
87 | ret = dlg.fileName(); | ||
88 | |||
89 | return ret; | ||
90 | } | ||
91 | QString OFileDialog::getSaveFileName(int selector, | ||
92 | const QString &startDir, | ||
93 | const QString &file, | ||
94 | const MimeTypes &mimes, | ||
95 | QWidget *wid, | ||
96 | const QString &caption ) | ||
97 | { | ||
98 | QString ret; | ||
99 | OFileDialog dlg( caption.isEmpty() ? tr("Save") : caption, | ||
100 | wid, OFileSelector::SAVE, selector, startDir, file, mimes); | ||
101 | dlg.showMaximized(); | ||
102 | if( dlg.exec() ) | ||
103 | ret = dlg.fileName(); | ||
104 | |||
105 | return ret; | ||
106 | } | ||
107 | |||
108 | void OFileDialog::slotFileSelected(const QString & ) | ||
109 | { | ||
110 | accept(); | ||
111 | } | ||
112 | void OFileDialog::slotDirSelected(const QString & ) | ||
113 | { | ||
114 | // if mode | ||
115 | //accept(); | ||
116 | } | ||
diff --git a/libopie/ofileselector/ofiledialog.h b/libopie/ofileselector/ofiledialog.h new file mode 100644 index 0000000..e14253c --- a/dev/null +++ b/libopie/ofileselector/ofiledialog.h | |||
@@ -0,0 +1,77 @@ | |||
1 | /* | ||
2 | =. This file is part of the OPIE Project | ||
3 | .=l. Copyright (c) 2002 zecke <zecke@handhelds.org> | ||
4 | .>+-= | ||
5 | _;:, .> :=|. This library is free software; you can | ||
6 | .> <`_, > . <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | ||
8 | .="- .-=="i, .._ License as published by the Free Software | ||
9 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
10 | ._= =} : or (at your option) any later version. | ||
11 | .%`+i> _;_. | ||
12 | .i_,=:_. -<s. This library is distributed in the hope that | ||
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | : .. .:, . . . without even the implied warranty of | ||
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | ||
17 | ..}^=.= = ; Library General Public License for more | ||
18 | ++= -. .` .: details. | ||
19 | : = ...= . :.=- | ||
20 | -. .:....=;==+<; You should have received a copy of the GNU | ||
21 | -_. . . )=. = Library General Public License along with | ||
22 | -- :-=` this library; see the file COPYING.LIB. | ||
23 | If not, write to the Free Software Foundation, | ||
24 | Inc., 59 Temple Place - Suite 330, | ||
25 | Boston, MA 02111-1307, USA. | ||
26 | |||
27 | */ | ||
28 | |||
29 | |||
30 | #ifndef OpieFileDialog_h | ||
31 | #define OpieFileDialog_h | ||
32 | |||
33 | #include <qdialog.h> | ||
34 | |||
35 | #include <opie/ofileselector.h> | ||
36 | |||
37 | class OFileDialog : public QDialog { | ||
38 | Q_OBJECT | ||
39 | public: | ||
40 | OFileDialog(const QString &caption, | ||
41 | QWidget *, int mode, int selector, | ||
42 | const QString &dirName, | ||
43 | const QString &fileName = QString::null, | ||
44 | const MimeTypes &mimetypes = MimeTypes() ); | ||
45 | QString mimetype() const; | ||
46 | QString fileName() const; | ||
47 | DocLnk selectedDocument()const; | ||
48 | |||
49 | // static methods | ||
50 | static QString getOpenFileName(int selector, | ||
51 | const QString& startDir = QString::null, | ||
52 | const QString &fileName = QString::null, | ||
53 | const MimeTypes& mime = MimeTypes(), | ||
54 | QWidget *wid = 0, | ||
55 | const QString &caption = QString::null ); | ||
56 | |||
57 | static QString getSaveFileName(int selector, | ||
58 | const QString& startDir = QString::null, | ||
59 | const QString& fileName = QString::null, | ||
60 | const MimeTypes& mimefilter = MimeTypes(), | ||
61 | QWidget *wid = 0, | ||
62 | const QString &caption = QString::null ); | ||
63 | |||
64 | //let's OFileSelector catch up first | ||
65 | //static QString getExistingDirectory(const QString& startDir = QString::null, | ||
66 | // QWidget *parent = 0, | ||
67 | // const QString& caption = QString::null ); | ||
68 | private: | ||
69 | class OFileDialogPrivate; | ||
70 | OFileDialogPrivate *d; | ||
71 | OFileSelector *file; | ||
72 | |||
73 | private slots: | ||
74 | void slotFileSelected( const QString & ); | ||
75 | void slotDirSelected(const QString & ); | ||
76 | }; | ||
77 | #endif | ||
diff --git a/libopie/ofileselector/ofilelistview.cpp b/libopie/ofileselector/ofilelistview.cpp new file mode 100644 index 0000000..0c7d45b --- a/dev/null +++ b/libopie/ofileselector/ofilelistview.cpp | |||
@@ -0,0 +1,118 @@ | |||
1 | |||
2 | #include "ofileselector.h" | ||
3 | #include "ofileselectoritem.h" | ||
4 | #include "ofilelistview.h" | ||
5 | |||
6 | |||
7 | OFileListView::OFileListView( QWidget* parent, OFileSelector* sel) | ||
8 | : QListView( parent ), OFileView( sel ) | ||
9 | { | ||
10 | |||
11 | } | ||
12 | OFileListView::~OFileListView() { | ||
13 | |||
14 | } | ||
15 | void OFileListView::clear() { | ||
16 | QListView::clear(); | ||
17 | } | ||
18 | void OFileListView::addFile( const QString& mime, | ||
19 | QFileInfo* info, | ||
20 | bool isSymlink ) { | ||
21 | MimeType type( info->absFilePath() ); | ||
22 | QPixmap pix = type.pixmap(); | ||
23 | QString dir; | ||
24 | QString name; | ||
25 | bool locked = false; | ||
26 | |||
27 | if( pix.isNull() ) | ||
28 | pix = Resource::loadPixmap( "UnknownDocument-14"); | ||
29 | |||
30 | dir = info->dirPath( true ); | ||
31 | |||
32 | if( isSymlink ) | ||
33 | name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink(); | ||
34 | else { | ||
35 | name = info->fileName(); | ||
36 | if( ( selector()->mode() == Open && !info->isReadable() )|| | ||
37 | ( selector()->mode() == Save && !info->isWritable() ) ){ | ||
38 | |||
39 | locked = true; pix = Resource::loadPixmap("locked"); | ||
40 | } | ||
41 | } | ||
42 | new OFileSelectorItem( this, pix, name, | ||
43 | info->lastModified().toString(), | ||
44 | QString::number( info->size() ), | ||
45 | dir, locked ); | ||
46 | } | ||
47 | void OFileListView::addFile( const QString& /*mime*/, const QString& /*dir*/, | ||
48 | const QString& /*file*/, bool /*isSyml*/ ) { | ||
49 | |||
50 | } | ||
51 | void OFileListView::addDir( const QString& mime, | ||
52 | QFileInfo* info, bool isSym ) { | ||
53 | |||
54 | bool locked = false; | ||
55 | QString name; | ||
56 | QPixmap pix; | ||
57 | |||
58 | if( ( selector()->mode() == Open && !info->isReadable() ) || | ||
59 | ( selector()->mode() == Save && !info->isWritable() ) ){ | ||
60 | |||
61 | locked = true; | ||
62 | |||
63 | if( symlink ) | ||
64 | pix = selector()->pixmap("symlinkedlocked"); | ||
65 | else | ||
66 | pix = Resource::loadPixmap("lockedfolder"); | ||
67 | |||
68 | }else { // readable | ||
69 | pix = symlink ? selector()->pixmap("dirsymlink") : Resource::loadPixmap("folder") ; | ||
70 | } | ||
71 | |||
72 | name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ; | ||
73 | |||
74 | new OFileSelectorItem( this, pix, name, | ||
75 | info->lastModified().toString(), | ||
76 | QString::number( info->size() ), | ||
77 | info->dirPath( true ), locked, | ||
78 | true ); | ||
79 | |||
80 | } | ||
81 | void OFileListView::addDir( const QString& mime, const QString& dir, | ||
82 | const QString& file, bool ) { | ||
83 | |||
84 | } | ||
85 | void OFileListView::addSymlink( const QString& mime, | ||
86 | QFileInfo* info, | ||
87 | bool isSym ) { | ||
88 | |||
89 | } | ||
90 | void OFileListView::addSymlink( const QString& mime, const QString& path, | ||
91 | const QString& file, bool isSym ) { | ||
92 | |||
93 | } | ||
94 | void OFileListView::cd( const QString& ) { | ||
95 | |||
96 | } | ||
97 | QWidget* OFileListView::widget() { | ||
98 | return this; | ||
99 | } | ||
100 | QString OFileListView::selectedName()const{ | ||
101 | QListViewItem *item = currentItem(); | ||
102 | if (!item ) | ||
103 | return QString::null; | ||
104 | |||
105 | return item->text( 1 ); | ||
106 | } | ||
107 | QStringList OFileListView::selectedNames()const { | ||
108 | |||
109 | } | ||
110 | QString OFileListView::selectedPath()const { | ||
111 | |||
112 | } | ||
113 | QString OFileListView::selectedPaths()const { | ||
114 | |||
115 | } | ||
116 | int OFileListView::fileCount() { | ||
117 | return childCount(); | ||
118 | } | ||
diff --git a/libopie/ofileselector/ofilelistview.h b/libopie/ofileselector/ofilelistview.h new file mode 100644 index 0000000..c7e9223 --- a/dev/null +++ b/libopie/ofileselector/ofilelistview.h | |||
@@ -0,0 +1,45 @@ | |||
1 | #ifndef OPIE_FILE_LIST_VIEW_H | ||
2 | #define OPIE_FILE_LIST_VIEW_H | ||
3 | |||
4 | #include <qlistview.h> | ||
5 | |||
6 | #include "ofileview.h" | ||
7 | |||
8 | class OFileListView : public QListView, public OFileView { | ||
9 | Q_OBJECT | ||
10 | public: | ||
11 | OFileListView( QWidget* parent, OFileSelector* ); | ||
12 | ~OFileListView(); | ||
13 | |||
14 | void clear(); | ||
15 | void addFile( const QString& mine, | ||
16 | QFileInfo* info, | ||
17 | bool isSymlink = FALSE ); | ||
18 | |||
19 | void addFile( const QString& mime, | ||
20 | const QString& dir, | ||
21 | const QString& file, | ||
22 | bool = false ); | ||
23 | |||
24 | void addDir( const QString& mime, | ||
25 | QFileInfo* info, bool = FALSE ); | ||
26 | void addDir( const QString& mime, const QString& dir, | ||
27 | const QString& file, bool = FALSE ); | ||
28 | |||
29 | void addSymlink( const QString& mime, | ||
30 | QFileInfo* info, bool = FALSE ); | ||
31 | void addSymlink( const QString& mine, const QString& path, | ||
32 | const QString& file, bool isSymlink = FALSE ); | ||
33 | void cd( const QString& path ); | ||
34 | QWidget* widget(); | ||
35 | |||
36 | QString selectedName()const ; | ||
37 | QStringList selectedNames()const; | ||
38 | |||
39 | QString selectedPath()const; | ||
40 | QStringList selectedPaths()const; | ||
41 | int fileCount(); | ||
42 | |||
43 | }; | ||
44 | |||
45 | #endif | ||
diff --git a/libopie/ofileselector/ofileselector.cpp b/libopie/ofileselector/ofileselector.cpp new file mode 100644 index 0000000..f655606 --- a/dev/null +++ b/libopie/ofileselector/ofileselector.cpp | |||
@@ -0,0 +1,1246 @@ | |||
1 | |||
2 | |||
3 | #include <qcheckbox.h> | ||
4 | #include <qcombobox.h> | ||
5 | #include <qheader.h> | ||
6 | #include <qlabel.h> | ||
7 | #include <qabstractlayout.h> | ||
8 | #include <qlayout.h> | ||
9 | #include <qlineedit.h> | ||
10 | #include <qlistview.h> | ||
11 | #include <qmessagebox.h> | ||
12 | #include <qpainter.h> | ||
13 | #include <qpushbutton.h> | ||
14 | #include <qwidgetstack.h> | ||
15 | #include <qpopupmenu.h> | ||
16 | #include <qdir.h> | ||
17 | #include <qfile.h> | ||
18 | #include <qfileinfo.h> | ||
19 | #include <qtimer.h> | ||
20 | |||
21 | #include <qpe/qpeapplication.h> | ||
22 | #include <qpe/applnk.h> | ||
23 | #include <qpe/global.h> | ||
24 | #include <qpe/mimetype.h> | ||
25 | #include <qpe/resource.h> | ||
26 | #include <qpe/storage.h> | ||
27 | |||
28 | #include <unistd.h> | ||
29 | #include <stdlib.h> | ||
30 | #include <sys/stat.h> | ||
31 | |||
32 | #include "ofileview.h" | ||
33 | #include "ofileselector.h" | ||
34 | |||
35 | |||
36 | QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0; | ||
37 | |||
38 | namespace { | ||
39 | int indexByString( const QComboBox *box, const QString &str ){ | ||
40 | int index= 0; | ||
41 | for(int i= 0; i < box->count(); i++ ){ | ||
42 | if( str == box->text(i ) ){ | ||
43 | index= i; | ||
44 | break; | ||
45 | } | ||
46 | } | ||
47 | return index; | ||
48 | } | ||
49 | |||
50 | } | ||
51 | |||
52 | OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, | ||
53 | const QString &dirName, | ||
54 | const QString &fileName, | ||
55 | const QMap<QString,QStringList>& mimeTypes) | ||
56 | : QWidget( wid, "OFileSelector") | ||
57 | { | ||
58 | m_mimetypes = mimeTypes; | ||
59 | if (mode == Save ) | ||
60 | m_name = fileName; | ||
61 | initVars(); | ||
62 | m_mode = mode; | ||
63 | m_selector = selector; | ||
64 | m_currentDir = dirName; | ||
65 | init(); | ||
66 | //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); | ||
67 | } | ||
68 | |||
69 | OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, | ||
70 | const char *name, bool newVisible, | ||
71 | bool closeVisible ) | ||
72 | : QWidget( parent, name ) | ||
73 | { | ||
74 | if (!mimeFilter.isEmpty() ) { | ||
75 | QStringList list = QStringList::split(";", mimeFilter ); | ||
76 | m_mimetypes.insert(mimeFilter, list ); | ||
77 | } | ||
78 | initVars(); | ||
79 | m_currentDir = QPEApplication::documentDir(); | ||
80 | m_mode = Fileselector; | ||
81 | m_selector = Normal; | ||
82 | m_shClose = closeVisible; | ||
83 | m_shNew = newVisible; | ||
84 | m_shLne = false; | ||
85 | m_shPerm = false; | ||
86 | m_shYesNo = false; | ||
87 | init(); | ||
88 | |||
89 | |||
90 | } | ||
91 | |||
92 | OFileSelector::~OFileSelector() | ||
93 | { | ||
94 | |||
95 | |||
96 | } | ||
97 | |||
98 | void OFileSelector::setNewVisible( bool visible ) | ||
99 | { | ||
100 | m_shNew = visible; | ||
101 | if( m_selector == Normal ){ | ||
102 | delete m_select; | ||
103 | // we need to initialize but keep the selected mimetype | ||
104 | QString mime = currentMimeType(); | ||
105 | m_select = new FileSelector( mime , | ||
106 | m_stack, "fileselector", | ||
107 | m_shNew, m_shClose); | ||
108 | |||
109 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), | ||
110 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | ||
111 | connect(m_select, SIGNAL(closeMe() ), | ||
112 | this, SIGNAL(closeMe() ) ); | ||
113 | //connect to close me and other signals as well | ||
114 | m_stack->addWidget( m_select, Normal ); | ||
115 | }else{ | ||
116 | m_new->show(); | ||
117 | } | ||
118 | } | ||
119 | void OFileSelector::setCloseVisible( bool visible ) | ||
120 | { | ||
121 | m_shClose = visible; | ||
122 | if( m_selector == Normal ){ | ||
123 | setNewVisible( m_shNew ); // yeah baby | ||
124 | }else{ | ||
125 | m_close->show(); | ||
126 | } | ||
127 | } | ||
128 | void OFileSelector::reread() | ||
129 | { | ||
130 | if( m_selector == Normal ){ | ||
131 | setNewVisible( m_shNew ); // make it a initializeSelector | ||
132 | }else { | ||
133 | reparse(); | ||
134 | } | ||
135 | } | ||
136 | |||
137 | const DocLnk *OFileSelector::selected() | ||
138 | { | ||
139 | DocLnk *lnk = new DocLnk(selectedDocument() ); | ||
140 | return lnk; | ||
141 | } | ||
142 | |||
143 | void OFileSelector::setYesCancelVisible( bool show ) | ||
144 | { | ||
145 | initializeYes(); // FIXME if YesCancel is not shown we will initialize it to hide it :( | ||
146 | m_shYesNo = show; | ||
147 | if( m_shYesNo ) | ||
148 | m_boxOk->show(); | ||
149 | else | ||
150 | m_boxOk->hide(); | ||
151 | |||
152 | } | ||
153 | void OFileSelector::setToolbarVisible( bool show ) | ||
154 | { | ||
155 | m_shTool = show; | ||
156 | initializeListView(); // FIXME see above waste of memory | ||
157 | if(!m_shTool ){ | ||
158 | m_location->hide(); | ||
159 | m_up->hide(); | ||
160 | m_homeButton->hide(); | ||
161 | m_docButton->hide(); | ||
162 | }else{ | ||
163 | m_location->show(); | ||
164 | m_up->show(); | ||
165 | m_homeButton->show(); | ||
166 | m_docButton->show(); | ||
167 | } | ||
168 | } | ||
169 | void OFileSelector::setPermissionBarVisible( bool show ) | ||
170 | { | ||
171 | m_shPerm = show; | ||
172 | initializePerm(); | ||
173 | if( m_shPerm ) | ||
174 | m_checkPerm->show(); | ||
175 | else | ||
176 | m_checkPerm->hide(); | ||
177 | } | ||
178 | void OFileSelector::setLineEditVisible( bool show ) | ||
179 | { | ||
180 | if( show ){ | ||
181 | initializeName(); | ||
182 | m_boxName->show(); | ||
183 | }else{ | ||
184 | if( m_shLne && m_boxName != 0 ){ // check if we showed before this is the way to go | ||
185 | m_boxName->hide(); | ||
186 | } | ||
187 | } | ||
188 | m_shLne = show; | ||
189 | } | ||
190 | |||
191 | void OFileSelector::setChooserVisible( bool show ) | ||
192 | { | ||
193 | m_shChooser = show; | ||
194 | initializeChooser(); | ||
195 | if( m_shChooser ){ | ||
196 | m_boxView->hide(); | ||
197 | }else{ | ||
198 | m_boxView->show(); | ||
199 | } | ||
200 | } | ||
201 | |||
202 | QCheckBox* OFileSelector::permissionCheckbox() | ||
203 | { | ||
204 | if( m_selector == Normal ) | ||
205 | return 0l; | ||
206 | else | ||
207 | return m_checkPerm; | ||
208 | } | ||
209 | bool OFileSelector::setPermission()const | ||
210 | { | ||
211 | return m_checkPerm == 0 ? false : m_checkPerm->isChecked(); | ||
212 | } | ||
213 | void OFileSelector::setPermissionChecked( bool check ) | ||
214 | { | ||
215 | if( m_checkPerm ) | ||
216 | m_checkPerm->setChecked( check ); | ||
217 | } | ||
218 | |||
219 | void OFileSelector::setMode(int mode) // FIXME do direct raising | ||
220 | { | ||
221 | m_mode = mode; | ||
222 | if( m_selector == Normal ) | ||
223 | return; | ||
224 | } | ||
225 | void OFileSelector::setShowDirs(bool ) | ||
226 | { | ||
227 | m_dir = true; | ||
228 | reparse(); | ||
229 | } | ||
230 | void OFileSelector::setCaseSensetive(bool caSe ) | ||
231 | { | ||
232 | m_case = caSe; | ||
233 | reparse(); | ||
234 | } | ||
235 | void OFileSelector::setShowFiles(bool show ) | ||
236 | { | ||
237 | m_files = show; | ||
238 | reparse(); | ||
239 | } | ||
240 | /// | ||
241 | bool OFileSelector::cd(const QString &path ) | ||
242 | { | ||
243 | m_currentDir = path; | ||
244 | reparse(); | ||
245 | return true; | ||
246 | } | ||
247 | void OFileSelector::setSelector(int mode ) | ||
248 | { | ||
249 | QString text; | ||
250 | switch( mode ){ | ||
251 | case Normal: | ||
252 | text = tr("Documents"); | ||
253 | break; | ||
254 | case Extended: | ||
255 | text = tr("Files"); | ||
256 | break; | ||
257 | case ExtendedAll: | ||
258 | text = tr("All Files"); | ||
259 | break; | ||
260 | } | ||
261 | slotViewCheck( text ); | ||
262 | } | ||
263 | |||
264 | void OFileSelector::setPopupFactory(OPopupMenuFactory *popup ) | ||
265 | { | ||
266 | /* m_custom = popup; | ||
267 | m_showPopup = true; | ||
268 | */ | ||
269 | } | ||
270 | |||
271 | //void OFileSelector::updateL | ||
272 | |||
273 | QString OFileSelector::selectedName() const | ||
274 | { | ||
275 | QString name; | ||
276 | if( m_selector == Normal ){ | ||
277 | DocLnk lnk = m_select->selectedDocument(); | ||
278 | name = lnk.file(); | ||
279 | }else if( m_selector == Extended || m_selector == ExtendedAll ){ | ||
280 | if ( m_shLne ) { | ||
281 | name = m_currentDir + "/" +m_edit->text(); | ||
282 | }else{ | ||
283 | name = m_currentDir + "/" + currentView()->selectedName(); | ||
284 | } | ||
285 | } | ||
286 | return name; | ||
287 | } | ||
288 | QStringList OFileSelector::selectedNames()const | ||
289 | { | ||
290 | QStringList list; | ||
291 | if( m_selector == Normal ){ | ||
292 | list << selectedName(); | ||
293 | }else { | ||
294 | list << selectedName(); // FIXME implement multiple Selections | ||
295 | } | ||
296 | return list; | ||
297 | } | ||
298 | /** If mode is set to the Dir selection this will return the selected path. | ||
299 | * | ||
300 | * | ||
301 | */ | ||
302 | QString OFileSelector::selectedPath()const | ||
303 | { | ||
304 | QString path; | ||
305 | if( m_selector == Normal ){ | ||
306 | path = QPEApplication::documentDir(); | ||
307 | }else if( m_selector == Extended || m_selector == ExtendedAll ){ | ||
308 | ; //FIXME | ||
309 | } | ||
310 | return path; | ||
311 | } | ||
312 | QStringList OFileSelector::selectedPaths() const | ||
313 | { | ||
314 | QStringList list; | ||
315 | list << selectedPath(); | ||
316 | return list; | ||
317 | } | ||
318 | QString OFileSelector::directory()const | ||
319 | { | ||
320 | if( m_selector == Normal ) | ||
321 | return QPEApplication::documentDir(); | ||
322 | |||
323 | return QDir(m_currentDir).absPath(); | ||
324 | } | ||
325 | |||
326 | int OFileSelector::fileCount() | ||
327 | { | ||
328 | int count; | ||
329 | switch( m_selector ){ | ||
330 | case Normal: | ||
331 | count = m_select->fileCount(); | ||
332 | break; | ||
333 | case Extended: | ||
334 | case ExtendedAll: | ||
335 | default: | ||
336 | count = currentView()->childCount(); | ||
337 | break; | ||
338 | } | ||
339 | return count; | ||
340 | } | ||
341 | DocLnk OFileSelector::selectedDocument() const | ||
342 | { | ||
343 | DocLnk lnk; | ||
344 | switch( m_selector ){ | ||
345 | case Normal:{ | ||
346 | lnk = m_select->selectedDocument(); | ||
347 | break; | ||
348 | } | ||
349 | case Extended: | ||
350 | case ExtendedAll: | ||
351 | default: | ||
352 | lnk = DocLnk( selectedName() ); // new DocLnk | ||
353 | break; | ||
354 | } | ||
355 | return lnk; | ||
356 | } | ||
357 | QValueList<DocLnk> OFileSelector::selectedDocuments() const | ||
358 | { | ||
359 | QValueList<DocLnk> docs; | ||
360 | docs.append( selectedDocument() ); | ||
361 | return docs; | ||
362 | } | ||
363 | |||
364 | |||
365 | // slots internal | ||
366 | |||
367 | void OFileSelector::slotOk() | ||
368 | { | ||
369 | emit ok(); | ||
370 | } | ||
371 | void OFileSelector::slotCancel() | ||
372 | { | ||
373 | emit cancel(); | ||
374 | } | ||
375 | void OFileSelector::slotViewCheck(const QString &sel) | ||
376 | { | ||
377 | if( sel == tr("Documents" ) ){ | ||
378 | if( m_select == 0 ){ | ||
379 | // autMime? fix cause now we use All and not the current | ||
380 | // yes currentMime fixes that for us | ||
381 | QString mime = currentMimeType(); | ||
382 | m_select = new FileSelector(mime, | ||
383 | m_stack, "fileselector", | ||
384 | m_shNew, m_shClose); | ||
385 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), | ||
386 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | ||
387 | connect(m_select, SIGNAL(closeMe() ), | ||
388 | this, SIGNAL(closeMe() ) ); | ||
389 | //connect to close me and other signals as well | ||
390 | |||
391 | m_stack->addWidget( m_select, Normal ); | ||
392 | } | ||
393 | m_stack->raiseWidget( Normal ); | ||
394 | m_selector = Normal; | ||
395 | }else if( sel == tr("Files") ){ | ||
396 | m_selector = Extended; | ||
397 | initializeListView(); | ||
398 | reparse(); | ||
399 | m_stack->raiseWidget( Extended ); | ||
400 | }else if( sel == tr("All Files") ){ | ||
401 | m_selector = ExtendedAll; | ||
402 | initializeListView(); | ||
403 | reparse(); | ||
404 | m_stack->raiseWidget( Extended ); // same widget other QFileFilter | ||
405 | } | ||
406 | } | ||
407 | // not yet finished..... | ||
408 | QString OFileSelector::currentMimeType() const{ | ||
409 | QString mime; | ||
410 | QString currentText; | ||
411 | if (m_shChooser ) | ||
412 | currentText = m_mimeCheck->currentText(); | ||
413 | |||
414 | if (tr("All") == currentText ) return QString::null; | ||
415 | else if (currentText.isEmpty() ) { | ||
416 | ; | ||
417 | }else { | ||
418 | QMap<QString, QStringList>::ConstIterator it; | ||
419 | it = m_mimetypes.find( currentText ); | ||
420 | if ( it == m_mimetypes.end() ) { | ||
421 | mime = it.data().join(";"); | ||
422 | }else{ | ||
423 | mime = currentText; | ||
424 | } | ||
425 | } | ||
426 | return mime; | ||
427 | } | ||
428 | void OFileSelector::slotMimeCheck(const QString &mime) | ||
429 | { | ||
430 | if( m_selector == Normal ){ | ||
431 | //if( m_autoMime ){ | ||
432 | QString newMimeType; | ||
433 | if (mime != tr("All") ) { | ||
434 | QMap<QString, QStringList>::Iterator it; | ||
435 | it = m_mimetypes.find(mime); | ||
436 | if ( it != m_mimetypes.end() ) { | ||
437 | newMimeType = it.data().join(";"); | ||
438 | }else{ | ||
439 | newMimeType = mime; | ||
440 | } | ||
441 | } | ||
442 | delete m_select; | ||
443 | m_select = new FileSelector( newMimeType, | ||
444 | m_stack, "fileselector", | ||
445 | m_shNew, m_shClose); | ||
446 | |||
447 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), | ||
448 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | ||
449 | connect(m_select, SIGNAL(closeMe() ), | ||
450 | this, SIGNAL(closeMe() ) ); | ||
451 | //connect to close me and other signals as well | ||
452 | m_stack->addWidget( m_select, Normal ); | ||
453 | m_stack->raiseWidget( Normal ); | ||
454 | updateMimes(); | ||
455 | updateMimeCheck(); | ||
456 | m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); | ||
457 | //} | ||
458 | }else{ // others | ||
459 | qWarning("Mime %s", mime.latin1() ); | ||
460 | if(m_shChooser ){ | ||
461 | qWarning("Current Text %s", m_mimeCheck->currentText().latin1() ); | ||
462 | //m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); | ||
463 | } | ||
464 | reparse(); | ||
465 | } | ||
466 | |||
467 | } | ||
468 | /* | ||
469 | * Ok if a non dir gets inserted into this combobox | ||
470 | * we need to change it | ||
471 | * QFileInfo and dirPath will give us the right Dir | ||
472 | */ | ||
473 | void OFileSelector::slotLocationActivated(const QString &file) | ||
474 | { | ||
475 | qWarning("slotLocationActivated"); | ||
476 | QString name = file.left( file.find("<-", 0, TRUE ) ); | ||
477 | QFileInfo info( name ); | ||
478 | if ( info.isFile() ) | ||
479 | cd(info.dirPath( TRUE ) ); //absolute | ||
480 | else | ||
481 | cd(name ); | ||
482 | reparse(); | ||
483 | } | ||
484 | void OFileSelector::slotInsertLocationPath(const QString ¤tPath, int count) | ||
485 | { | ||
486 | QStringList pathList; | ||
487 | bool underDog = FALSE; | ||
488 | for(int i=0;i<count;i++) { | ||
489 | pathList << m_location->text(i); | ||
490 | if( m_location->text(i) == currentPath) | ||
491 | underDog = TRUE; | ||
492 | } | ||
493 | if( !underDog) { | ||
494 | m_location->clear(); | ||
495 | if( currentPath.left(2)=="//") | ||
496 | pathList.append( currentPath.right(currentPath.length()-1) ); | ||
497 | else | ||
498 | pathList.append( currentPath ); | ||
499 | m_location->insertStringList( pathList,-1); | ||
500 | } | ||
501 | } | ||
502 | /* | ||
503 | * Do not crash anymore | ||
504 | * don't try to change dir to a file | ||
505 | */ | ||
506 | void OFileSelector::locationComboChanged() | ||
507 | { | ||
508 | QFileInfo info( m_location->lineEdit()->text() ); | ||
509 | qWarning("info %s %s", info.dirPath(true).latin1(), m_location->lineEdit()->text().latin1() ); | ||
510 | if (info.isFile() ) | ||
511 | cd(info.dirPath(TRUE) ); //absolute path | ||
512 | else | ||
513 | cd( m_location->lineEdit()->text() ); | ||
514 | |||
515 | reparse(); | ||
516 | } | ||
517 | void OFileSelector::init() | ||
518 | { | ||
519 | m_lay = new QVBoxLayout( this ); | ||
520 | m_lay->setSpacing(0 ); | ||
521 | |||
522 | m_stack = new QWidgetStack( this ); | ||
523 | if( m_selector == Normal ){ | ||
524 | QString mime; | ||
525 | if (!m_autoMime) { | ||
526 | if (!m_mimetypes.isEmpty() ) { | ||
527 | QMap<QString, QStringList>::Iterator it; | ||
528 | it = m_mimetypes.begin(); // cause we're in the init | ||
529 | mime = it.data().join(";"); | ||
530 | } | ||
531 | } | ||
532 | m_select = new FileSelector(mime, | ||
533 | m_stack, "fileselector", | ||
534 | m_shNew, m_shClose); | ||
535 | |||
536 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), | ||
537 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | ||
538 | connect(m_select, SIGNAL(closeMe() ), | ||
539 | this, SIGNAL( closeMe() ) ); | ||
540 | //connect to close me and other signals as well | ||
541 | |||
542 | m_stack->addWidget( m_select, Normal ); | ||
543 | m_stack->raiseWidget( Normal ); | ||
544 | }else{ // we're in init so it will be EXTENDED or EXTENDED_ALL | ||
545 | // and initializeListview will take care of those | ||
546 | // toolbar get's generade in initializeListView | ||
547 | initializeListView( ); // will raise the widget as well | ||
548 | m_stack->raiseWidget( Extended ); | ||
549 | } | ||
550 | m_lay->addWidget( m_stack, 100 ); // add to the layout 10 = stretch | ||
551 | |||
552 | if( m_shLne ) // the LineEdit with the current FileName | ||
553 | initializeName(); | ||
554 | |||
555 | if( m_shPerm ) // the Permission QCheckBox | ||
556 | initializePerm(); | ||
557 | |||
558 | if( m_shChooser ) // the Chooser for the view and Mimetypes | ||
559 | initializeChooser(); | ||
560 | |||
561 | if( m_shYesNo ) // the Yes No button row | ||
562 | initializeYes( ); | ||
563 | |||
564 | if (m_selector != Normal ) | ||
565 | reparse(); | ||
566 | } | ||
567 | void OFileSelector::updateMimes() | ||
568 | { | ||
569 | if( m_autoMime ){ | ||
570 | m_mimetypes.clear(); | ||
571 | m_mimetypes.insert( tr("All"), QString::null ); | ||
572 | if( m_selector == Normal ){ | ||
573 | DocLnkSet set; | ||
574 | Global::findDocuments(&set, QString::null ); | ||
575 | QListIterator<DocLnk> dit( set.children() ); | ||
576 | for( ; dit.current(); ++dit ){ | ||
577 | if( !m_mimetypes.contains( (*dit)->type() ) ) | ||
578 | m_mimetypes.insert( (*dit)->type(), (*dit)->type() ); | ||
579 | } | ||
580 | }// else done in reparse | ||
581 | } | ||
582 | } | ||
583 | void OFileSelector::initVars() | ||
584 | { | ||
585 | if( m_mimetypes.isEmpty() ) | ||
586 | m_autoMime = true; | ||
587 | else | ||
588 | m_autoMime = false; | ||
589 | |||
590 | m_shClose = false; | ||
591 | m_shNew = false; | ||
592 | m_shTool = true; | ||
593 | m_shPerm = false; | ||
594 | m_shLne = true; | ||
595 | m_shChooser = true; | ||
596 | m_shYesNo = true; | ||
597 | m_case = false; | ||
598 | m_dir = true; | ||
599 | m_files = true; | ||
600 | m_showPopup = false; | ||
601 | |||
602 | if(m_pixmaps == 0 ) // init the pixmaps | ||
603 | initPics(); | ||
604 | |||
605 | // pointers | ||
606 | m_location = 0; | ||
607 | m_mimeCheck = 0; | ||
608 | m_viewCheck = 0; | ||
609 | m_homeButton = 0; | ||
610 | m_docButton = 0; | ||
611 | m_hideButton = 0; | ||
612 | m_ok = 0; | ||
613 | m_cancel = 0; | ||
614 | m_reread = 0; | ||
615 | m_up = 0; | ||
616 | m_View = 0; | ||
617 | m_checkPerm = 0; | ||
618 | m_pseudo = 0; | ||
619 | m_pseudoLayout = 0; | ||
620 | m_select = 0; | ||
621 | m_stack = 0; | ||
622 | m_lay = 0; | ||
623 | m_Oselector = 0; | ||
624 | m_boxToolbar = 0; | ||
625 | m_boxOk = 0; | ||
626 | m_boxName = 0; | ||
627 | m_boxView = 0; | ||
628 | m_custom = 0; | ||
629 | m_edit = 0; | ||
630 | m_fnLabel = 0; | ||
631 | m_new = 0; | ||
632 | m_close = 0; | ||
633 | } | ||
634 | void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) | ||
635 | { | ||
636 | if(!m_files) | ||
637 | return; | ||
638 | // if( !compliesMime(info->absFilePath(), mime ) ) | ||
639 | // return; | ||
640 | MimeType type( info->absFilePath() ); | ||
641 | if (!compliesMime( type.id() ) ) | ||
642 | return; | ||
643 | |||
644 | } | ||
645 | void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) | ||
646 | { | ||
647 | if(!m_dir) | ||
648 | return; | ||
649 | } | ||
650 | void OFileSelector::delItems() | ||
651 | { | ||
652 | |||
653 | } | ||
654 | void OFileSelector::initializeName() | ||
655 | { | ||
656 | /** Name Layout Line | ||
657 | * This is the Layout line arranged in | ||
658 | * horizontal way each components | ||
659 | * are next to each other | ||
660 | * but we will only do this if | ||
661 | * we didn't initialize a while ago. | ||
662 | */ | ||
663 | if( m_boxName == 0 ){ | ||
664 | m_boxName = new QHBox( this ); // remove this this? or use a QHBox | ||
665 | m_fnLabel = new QLabel( m_boxName ); | ||
666 | m_fnLabel->setText( tr("Name:") ); | ||
667 | m_edit = new QLineEdit( m_boxName ); | ||
668 | m_edit->setText( m_name ); | ||
669 | //m_boxName->addWidget( m_fnLabel ); | ||
670 | m_boxName->setMargin( 5 ); | ||
671 | m_boxName->setSpacing( 8 ); | ||
672 | //m_boxName->setStretchFactor(m_edit, 100 ); // 100 is stretch factor | ||
673 | |||
674 | m_lay->addWidget( m_boxName, 0 ); // add it to the topLevel layout | ||
675 | }// else we already initialized | ||
676 | // maybe show the components? | ||
677 | // | ||
678 | } | ||
679 | void OFileSelector::initializeYes() | ||
680 | { | ||
681 | /** The Save Cancel bar | ||
682 | * | ||
683 | */ | ||
684 | if( m_boxOk == 0 ){ | ||
685 | m_boxOk = new QHBox( this ); | ||
686 | m_ok = new QPushButton( tr("&Save"),m_boxOk , "save" ); | ||
687 | m_cancel = new QPushButton( tr("C&ancel"), m_boxOk, "cancel" ); | ||
688 | |||
689 | //m_boxOk->addWidget( m_ok ); | ||
690 | //m_boxOk->addWidget( m_cancel ); | ||
691 | m_boxOk->setMargin( 5 ); | ||
692 | m_boxOk->setSpacing( 10 ); | ||
693 | m_lay->addWidget( m_boxOk, 0 ); | ||
694 | |||
695 | connect( m_ok, SIGNAL( clicked() ), | ||
696 | this, SLOT(slotOk() ) ); | ||
697 | connect( m_cancel, SIGNAL( clicked() ), | ||
698 | this, SLOT( slotCancel() ) ); | ||
699 | } | ||
700 | } | ||
701 | /* | ||
702 | * OK m_mimeCheck is a QComboBox we now want to fill | ||
703 | * out that combobox | ||
704 | * if automime we need to update the mimetypes | ||
705 | */ | ||
706 | void OFileSelector::updateMimeCheck() { | ||
707 | m_mimeCheck->clear(); | ||
708 | if (m_autoMime ) { | ||
709 | //m_mimeCheck->insertItem( tr("All") ); | ||
710 | updateMimes(); | ||
711 | } | ||
712 | |||
713 | QMap<QString, QStringList>::Iterator it; | ||
714 | for (it = m_mimetypes.begin(); it != m_mimetypes.end(); ++it ) { | ||
715 | m_mimeCheck->insertItem( it.key() ); | ||
716 | } | ||
717 | } | ||
718 | |||
719 | void OFileSelector::initializeChooser() | ||
720 | { | ||
721 | if( m_boxView == 0 ){ | ||
722 | m_boxView = new QHBox( this ); | ||
723 | m_viewCheck = new QComboBox( m_boxView, "view check"); | ||
724 | m_mimeCheck = new QComboBox( m_boxView, "mime check"); | ||
725 | m_boxView->setSpacing( 8 ); | ||
726 | m_lay->addWidget(m_boxView, 0 ); | ||
727 | |||
728 | m_viewCheck->insertItem( tr("Documents") ); | ||
729 | m_viewCheck->insertItem( tr("Files") ); | ||
730 | m_viewCheck->insertItem( tr("All Files") ); | ||
731 | updateMimeCheck(); | ||
732 | |||
733 | connect( m_viewCheck, SIGNAL( activated(const QString & ) ), | ||
734 | this, SLOT( slotViewCheck(const QString & ) ) ); | ||
735 | connect( m_mimeCheck, SIGNAL( activated(const QString & ) ), | ||
736 | this, SLOT( slotMimeCheck( const QString & ) ) ); | ||
737 | } | ||
738 | } | ||
739 | void OFileSelector::initializeListView() | ||
740 | { | ||
741 | qWarning("initializeListView"); | ||
742 | if( m_pseudo == 0 ){ | ||
743 | qWarning("init"); | ||
744 | m_pseudo = new QWidget( m_stack, "Pseudo Widget"); | ||
745 | m_pseudoLayout = new QVBoxLayout( m_pseudo ); | ||
746 | // toolbar | ||
747 | m_boxToolbar = new QHBox( m_pseudo ); | ||
748 | m_boxToolbar->setSpacing(0 ); // next to each other please | ||
749 | |||
750 | // toolbar members | ||
751 | { | ||
752 | // location QComboBox | ||
753 | m_location = new QComboBox( m_boxToolbar ); | ||
754 | m_location->setEditable( TRUE ); | ||
755 | m_location->setDuplicatesEnabled( FALSE ); | ||
756 | connect( m_location, SIGNAL(activated(const QString &) ), | ||
757 | this, SLOT( slotLocationActivated(const QString &) ) ); | ||
758 | connect( m_location->lineEdit(), SIGNAL(returnPressed() ), | ||
759 | this, SLOT(locationComboChanged() ) ); | ||
760 | // UP Button | ||
761 | m_up = new QPushButton(Resource::loadIconSet("up"),"", | ||
762 | m_boxToolbar,"cdUpButton"); | ||
763 | m_up->setFixedSize( QSize( 20, 20 ) ); | ||
764 | connect(m_up ,SIGNAL(clicked()),this,SLOT(cdUP() ) ); | ||
765 | m_up->setFlat(TRUE); | ||
766 | |||
767 | // Home Button | ||
768 | m_homeButton = new QPushButton(Resource::loadIconSet("home") , | ||
769 | "", m_boxToolbar); | ||
770 | m_homeButton->setFixedSize( QSize( 20, 20 ) ); | ||
771 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotHome() ) ); | ||
772 | m_homeButton->setFlat(TRUE); | ||
773 | // Documents Button | ||
774 | m_docButton = new QPushButton(Resource::loadIconSet("DocsIcon"),"", | ||
775 | m_boxToolbar,"docsButton"); | ||
776 | m_docButton->setFixedSize( QSize( 20, 20 ) ); | ||
777 | connect(m_homeButton,SIGNAL(clicked()),this,SLOT(slotDoc() ) ); | ||
778 | m_docButton->setFlat(TRUE); | ||
779 | |||
780 | // Close button | ||
781 | m_close = new QPushButton( Resource::loadIconSet( "close"), "", | ||
782 | m_boxToolbar ); | ||
783 | connect( m_close, SIGNAL(clicked() ), this, SIGNAL(closeMe() ) ); | ||
784 | m_close->setFixedSize( 20, 20 ); | ||
785 | |||
786 | m_boxToolbar->setFixedHeight( 20 ); | ||
787 | m_pseudoLayout->addWidget(m_boxToolbar ); | ||
788 | |||
789 | // let;s fill the Location ComboBox | ||
790 | StorageInfo storage; | ||
791 | const QList<FileSystem> &fs = storage.fileSystems(); | ||
792 | QListIterator<FileSystem> it ( fs ); | ||
793 | for( ; it.current(); ++it ){ | ||
794 | const QString disk = (*it)->name(); | ||
795 | const QString path = (*it)->path(); | ||
796 | m_location->insertItem(path+ "<-"+disk ); | ||
797 | } | ||
798 | int count = m_location->count(); | ||
799 | m_location->insertItem( m_currentDir ); | ||
800 | m_location->setCurrentItem( count ); | ||
801 | // due to the New and Close button we can not simply hide m_boxToolBar to not show it | ||
802 | if( !m_shTool ){ | ||
803 | m_location->hide( ); | ||
804 | m_up->hide( ); | ||
805 | m_homeButton->hide( ); | ||
806 | m_docButton->hide( ); | ||
807 | } | ||
808 | if(!m_shClose ) | ||
809 | m_close->hide(); | ||
810 | //if(!m_shNew) | ||
811 | //m_close->hide(); | ||
812 | |||
813 | } // off toolbar | ||
814 | // the Main ListView | ||
815 | // make a QWidgetStack first so Views can share the Toolbar | ||
816 | m_View = new QListView( m_pseudo, "Extended view"); | ||
817 | QPEApplication::setStylusOperation( m_View->viewport(), | ||
818 | QPEApplication::RightOnHold); | ||
819 | m_View->addColumn(" " ); | ||
820 | m_View->addColumn(tr("Name"), 135 ); | ||
821 | m_View->addColumn(tr("Size"), -1 ); | ||
822 | m_View->addColumn(tr("Date"), 60 ); | ||
823 | m_View->addColumn(tr("Mime Type"), -1 ); | ||
824 | QHeader *header = m_View->header(); | ||
825 | header->hide(); | ||
826 | m_View->setSorting( 1 ); | ||
827 | m_View->setAllColumnsShowFocus( TRUE ); | ||
828 | |||
829 | connect(m_View, SIGNAL(selectionChanged() ), | ||
830 | this, SLOT(slotSelectionChanged() ) ); | ||
831 | |||
832 | connect(m_View, SIGNAL(currentChanged(QListViewItem *) ), | ||
833 | this, SLOT(slotCurrentChanged(QListViewItem * ) ) ); | ||
834 | |||
835 | connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ), | ||
836 | this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); | ||
837 | |||
838 | connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), | ||
839 | this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); | ||
840 | |||
841 | m_pseudoLayout->addWidget( m_View, 288 ); | ||
842 | m_stack->addWidget( m_pseudo, Extended ); | ||
843 | } | ||
844 | } | ||
845 | void OFileSelector::initializePerm() | ||
846 | { | ||
847 | if( m_checkPerm == 0 ){ | ||
848 | m_checkPerm = new QCheckBox(tr("Set Permission"), this, "perm"); | ||
849 | m_checkPerm->setChecked( false ); | ||
850 | m_lay->addWidget( m_checkPerm ); | ||
851 | |||
852 | } | ||
853 | } | ||
854 | void OFileSelector::initPics() | ||
855 | { | ||
856 | m_pixmaps = new QMap<QString,QPixmap>; | ||
857 | QPixmap pm = Resource::loadPixmap( "folder" ); | ||
858 | QPixmap lnk = Resource::loadPixmap( "opie/symlink" ); | ||
859 | QPainter painter( &pm ); | ||
860 | painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk ); | ||
861 | pm.setMask( pm.createHeuristicMask( FALSE ) ); | ||
862 | m_pixmaps->insert("dirsymlink", pm ); | ||
863 | |||
864 | QPixmap pm2 = Resource::loadPixmap( "lockedfolder" ); | ||
865 | QPainter pen(&pm2 ); | ||
866 | pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk ); | ||
867 | pm2.setMask( pm2.createHeuristicMask( FALSE ) ); | ||
868 | m_pixmaps->insert("symlinkedlocked", pm2 ); | ||
869 | } | ||
870 | // if a mime complies with the m_mimeCheck->currentItem | ||
871 | bool OFileSelector::compliesMime( const QString &path, const QString &mime ) | ||
872 | { | ||
873 | if( mime == "All" ) | ||
874 | return true; | ||
875 | MimeType type( path ); | ||
876 | if( type.id() == mime ) | ||
877 | return true; | ||
878 | return false; | ||
879 | } | ||
880 | /* check if the mimetype in mime | ||
881 | * complies with the one which is current | ||
882 | */ | ||
883 | /* | ||
884 | * We've the mimetype of the file | ||
885 | * We need to get the stringlist of the current mimetype | ||
886 | * | ||
887 | * mime = image/jpeg | ||
888 | * QStringList = 'image/*' | ||
889 | * or QStringList = image/jpeg;image/png;application/x-ogg | ||
890 | * or QStringList = application/x-ogg;image/*; | ||
891 | * with all these mime filters it should get acceptes | ||
892 | * to do so we need to look if mime is contained inside | ||
893 | * the stringlist | ||
894 | * if it's contained return true | ||
895 | * if not ( I'm no RegExp expert at all ) we'll look if a '/*' | ||
896 | * is contained in the mimefilter and then we will | ||
897 | * look if both are equal until the '/' | ||
898 | */ | ||
899 | bool OFileSelector::compliesMime( const QString& mime ) { | ||
900 | qWarning("mimetype is %s", mime.latin1() ); | ||
901 | QString currentText; | ||
902 | if (m_shChooser ) | ||
903 | currentText = m_mimeCheck->currentText(); | ||
904 | |||
905 | qWarning("current text is %s", currentText.latin1() ); | ||
906 | QMap<QString, QStringList>::Iterator it; | ||
907 | QStringList list; | ||
908 | if ( currentText == tr("All") ) return true; | ||
909 | else if ( currentText.isEmpty() && !m_mimetypes.isEmpty() ) { | ||
910 | it = m_mimetypes.begin(); | ||
911 | list = it.data(); | ||
912 | }else if ( currentText.isEmpty() ) return true; | ||
913 | else{ | ||
914 | it = m_mimetypes.find(currentText ); | ||
915 | if ( it == m_mimetypes.end() ) qWarning("not there"), list << currentText; | ||
916 | else qWarning("found"), list = it.data(); | ||
917 | } | ||
918 | // dump it now | ||
919 | //for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) { | ||
920 | // qWarning( "%s", (*it).latin1() ); | ||
921 | //} | ||
922 | |||
923 | |||
924 | if ( list.contains(mime) ) return true; | ||
925 | qWarning("list doesn't contain it "); | ||
926 | QStringList::Iterator it2; | ||
927 | int pos; | ||
928 | int pos2; | ||
929 | for ( it2 = list.begin(); it2 != list.end(); ++it2 ) { | ||
930 | pos = (*it2).findRev("/*"); | ||
931 | if ( pos >= 0 ) { | ||
932 | if ( mime.contains( (*it2).left(pos) ) ) return true; | ||
933 | } | ||
934 | } | ||
935 | return false; | ||
936 | } | ||
937 | void OFileSelector::slotFileSelected( const QString &string ) | ||
938 | { | ||
939 | if( m_shLne ) | ||
940 | m_edit->setText( string ); | ||
941 | emit fileSelected( string ); | ||
942 | } | ||
943 | void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) | ||
944 | { | ||
945 | slotFileSelected( lnk.name() ); | ||
946 | // emit fileSelected( lnk ); | ||
947 | } | ||
948 | void OFileSelector::slotSelectionChanged() | ||
949 | { | ||
950 | |||
951 | } | ||
952 | void OFileSelector::slotCurrentChanged(QListViewItem* item ) | ||
953 | { | ||
954 | if( item == 0 ) | ||
955 | return; | ||
956 | if( m_selector == Extended || m_selector == ExtendedAll ) { | ||
957 | OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;) | ||
958 | qWarning("current changed"); | ||
959 | if(!sel->isDir() ){ | ||
960 | if( m_shLne ) | ||
961 | m_edit->setText( sel->text(1) ); | ||
962 | |||
963 | if (m_mode == Fileselector ) { | ||
964 | QStringList str = QStringList::split("->", sel->text(1) ); | ||
965 | QString path =sel->directory() + "/" + str[0].stripWhiteSpace(); | ||
966 | emit fileSelected(path ); | ||
967 | DocLnk lnk( path ); | ||
968 | emit fileSelected(lnk ); | ||
969 | } | ||
970 | } | ||
971 | } | ||
972 | } | ||
973 | void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &, int) | ||
974 | { | ||
975 | if ( item == 0 ) | ||
976 | return; | ||
977 | |||
978 | if( button != Qt::LeftButton ) | ||
979 | return; | ||
980 | |||
981 | switch( m_selector ){ | ||
982 | default: | ||
983 | break; | ||
984 | case Extended: // fall through | ||
985 | case ExtendedAll:{ | ||
986 | OFileSelectorItem *sel = (OFileSelectorItem*)item; | ||
987 | if(!sel->isLocked() ){ | ||
988 | QStringList str = QStringList::split("->", sel->text(1) ); | ||
989 | if( sel->isDir() ){ | ||
990 | cd( sel->directory() + "/" + str[0].stripWhiteSpace() ); | ||
991 | // if MODE Dir m_shLne set the Text | ||
992 | }else{ | ||
993 | if( m_shLne ) | ||
994 | m_edit->setText( str[0].stripWhiteSpace() ); | ||
995 | qWarning("selected here in slot clicked"); | ||
996 | emit fileSelected( sel->directory() + "/" + str[0].stripWhiteSpace() ); | ||
997 | DocLnk lnk( sel->directory() + "/" + str[0].stripWhiteSpace() ); | ||
998 | qWarning("file selected"); | ||
999 | emit fileSelected( lnk ); | ||
1000 | } | ||
1001 | } | ||
1002 | break; | ||
1003 | } | ||
1004 | } | ||
1005 | } | ||
1006 | void OFileSelector::slotRightButton(int button, QListViewItem *item, const QPoint &, int ) | ||
1007 | { | ||
1008 | if( item == 0 ) | ||
1009 | return; | ||
1010 | |||
1011 | if( button != Qt::RightButton ) | ||
1012 | return; | ||
1013 | slotContextMenu( item ); | ||
1014 | } | ||
1015 | void OFileSelector::slotContextMenu( QListViewItem *item) | ||
1016 | { | ||
1017 | |||
1018 | } | ||
1019 | void OFileSelector::slotChangedDir() | ||
1020 | { | ||
1021 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); | ||
1022 | if(sel->isDir() ){ | ||
1023 | QStringList str = QStringList::split("->", sel->text(1) ); | ||
1024 | cd( sel->directory() + "/" + str[0].stripWhiteSpace() ); | ||
1025 | } | ||
1026 | } | ||
1027 | void OFileSelector::slotOpen() | ||
1028 | { | ||
1029 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); | ||
1030 | if(!sel->isDir() ){ | ||
1031 | QStringList str = QStringList::split("->", sel->text(1) ); | ||
1032 | slotFileSelected( sel->directory() +"/" +str[0].stripWhiteSpace() ); | ||
1033 | qWarning("slot open"); | ||
1034 | // DocLnk lnk( sel->directory() + "/" + str[0].stripWhiteSpace() ); | ||
1035 | //emit fileSelected( lnk ); | ||
1036 | } | ||
1037 | } | ||
1038 | void OFileSelector::slotRescan() | ||
1039 | { | ||
1040 | |||
1041 | } | ||
1042 | void OFileSelector::slotRename() | ||
1043 | { | ||
1044 | reparse(); | ||
1045 | } | ||
1046 | void OFileSelector::slotDelete() | ||
1047 | { | ||
1048 | OFileSelectorItem *sel = (OFileSelectorItem*)m_View->currentItem(); | ||
1049 | QStringList list = QStringList::split("->", sel->text(1) ); | ||
1050 | if( sel->isDir() ){ | ||
1051 | QString str = QString::fromLatin1("rm -rf ") + sel->directory() +"/" + list[0]; //better safe than sorry | ||
1052 | switch ( QMessageBox::warning(this,tr("Delete"),tr("Do you really want to delete\n")+list[0], | ||
1053 | tr("Yes"),tr("No"),0,1,1) ) { | ||
1054 | case 0: | ||
1055 | ::system(str.utf8().data() ); | ||
1056 | break; | ||
1057 | } | ||
1058 | } else { | ||
1059 | QFile::remove( list[0] ); | ||
1060 | } | ||
1061 | m_View->takeItem( sel ); | ||
1062 | delete sel; | ||
1063 | } | ||
1064 | void OFileSelector::cdUP() | ||
1065 | { | ||
1066 | QDir dir( m_currentDir ); | ||
1067 | dir.cdUp(); | ||
1068 | if(dir.exists() ){ | ||
1069 | m_currentDir = dir.absPath(); | ||
1070 | reparse(); | ||
1071 | int count = m_location->count(); | ||
1072 | slotInsertLocationPath( m_currentDir, count); | ||
1073 | m_location->setCurrentItem( indexByString( m_location, m_currentDir)); | ||
1074 | //this wont work in all instances | ||
1075 | // FIXME | ||
1076 | } | ||
1077 | } | ||
1078 | void OFileSelector::slotHome() | ||
1079 | { | ||
1080 | cd(QDir::homeDirPath() ); | ||
1081 | } | ||
1082 | void OFileSelector::slotDoc() | ||
1083 | { | ||
1084 | cd(QPEApplication::documentDir() ); | ||
1085 | } | ||
1086 | void OFileSelector::slotNavigate( ) | ||
1087 | { | ||
1088 | |||
1089 | } | ||
1090 | // fill the View with life | ||
1091 | void OFileSelector::reparse() | ||
1092 | { | ||
1093 | if( m_selector == Normal ) | ||
1094 | return; | ||
1095 | if( m_selector == Extended || m_selector == ExtendedAll ) | ||
1096 | m_View->clear(); | ||
1097 | else // custom view | ||
1098 | ; // currentView()->clear(); | ||
1099 | if( m_shChooser) | ||
1100 | qWarning("reparse %s", m_mimeCheck->currentText().latin1() ); | ||
1101 | |||
1102 | QString currentMimeType; | ||
1103 | // let's update the mimetype | ||
1104 | if( m_autoMime ){ | ||
1105 | m_mimetypes.clear(); | ||
1106 | // ok we can change mimetype so we need to be able to give a selection | ||
1107 | if( m_shChooser ) { | ||
1108 | currentMimeType = m_mimeCheck->currentText(); | ||
1109 | m_mimeCheck->clear(); | ||
1110 | |||
1111 | // let's find possible mimetypes | ||
1112 | QDir dir( m_currentDir ); | ||
1113 | dir.setFilter( QDir::Files | QDir::Readable ); | ||
1114 | dir.setSorting( QDir::Size ); | ||
1115 | const QFileInfoList *list = dir.entryInfoList(); | ||
1116 | QFileInfoListIterator it( *list ); | ||
1117 | QFileInfo *fi; | ||
1118 | while( (fi=it.current() ) ) { | ||
1119 | if( fi->extension() == QString::fromLatin1("desktop") ){ | ||
1120 | ++it; | ||
1121 | continue; | ||
1122 | } | ||
1123 | MimeType type( fi->absFilePath() ); | ||
1124 | if( !m_mimetypes.contains( type.id() ) ){ | ||
1125 | //qWarning("Type %s", type.id().latin1() ); | ||
1126 | m_mimetypes.insert( type.id(), type.id() ); | ||
1127 | } | ||
1128 | |||
1129 | ++it; | ||
1130 | } | ||
1131 | // add them to the chooser | ||
1132 | updateMimeCheck(); | ||
1133 | m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); | ||
1134 | currentMimeType = m_mimeCheck->currentText(); | ||
1135 | } | ||
1136 | }else { // no autoMime | ||
1137 | // let the mimetype be set from out side the m_mimeCheck FEATURE | ||
1138 | |||
1139 | if( m_shChooser ){ | ||
1140 | currentMimeType = m_mimeCheck->currentText(); | ||
1141 | // updateMimeCheck(); | ||
1142 | } | ||
1143 | } | ||
1144 | // now we got our mimetypes we can add the files | ||
1145 | |||
1146 | QDir dir( m_currentDir ); | ||
1147 | |||
1148 | int sort; | ||
1149 | if ( m_case ) | ||
1150 | sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed); | ||
1151 | else | ||
1152 | sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); | ||
1153 | dir.setSorting( sort ); | ||
1154 | |||
1155 | int filter; | ||
1156 | if( m_selector == ExtendedAll /*|| m_selector ==CUSTOM_ALL */ ){ | ||
1157 | filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; | ||
1158 | }else | ||
1159 | filter = QDir::Files | QDir::Dirs | QDir::All; | ||
1160 | dir.setFilter( filter ); | ||
1161 | |||
1162 | // now go through all files | ||
1163 | const QFileInfoList *list = dir.entryInfoList(); | ||
1164 | QFileInfoListIterator it( *list ); | ||
1165 | QFileInfo *fi; | ||
1166 | while( (fi=it.current() ) ){ | ||
1167 | //qWarning("True and only" ); | ||
1168 | if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){ | ||
1169 | //qWarning(".. or ." ); | ||
1170 | ++it; | ||
1171 | continue; | ||
1172 | } | ||
1173 | if( fi->isSymLink() ){ | ||
1174 | QString file = fi->dirPath( true ) + "/" + fi->readLink(); | ||
1175 | for( int i = 0; i<=4; i++) { // 5 tries to prevent dos | ||
1176 | QFileInfo info( file ); | ||
1177 | if( !info.exists() ){ | ||
1178 | addSymlink( currentMimeType, fi, TRUE ); | ||
1179 | break; | ||
1180 | }else if( info.isDir() ){ | ||
1181 | addDir( currentMimeType, fi, TRUE ); | ||
1182 | break; | ||
1183 | }else if( info.isFile() ){ | ||
1184 | addFile( currentMimeType, fi, TRUE ); | ||
1185 | break; | ||
1186 | }else if( info.isSymLink() ){ | ||
1187 | file = info.dirPath(true ) + "/" + info.readLink() ; | ||
1188 | break; | ||
1189 | }else if( i == 4){ | ||
1190 | addSymlink( currentMimeType, fi ); | ||
1191 | } | ||
1192 | } // off for loop | ||
1193 | }else if( fi->isDir() ){ | ||
1194 | addDir( currentMimeType, fi ); | ||
1195 | }else if( fi->isFile() ){ | ||
1196 | addFile( currentMimeType, fi ); | ||
1197 | } | ||
1198 | //qWarning( "%s", fi->fileName().latin1() ); | ||
1199 | ++it; | ||
1200 | } // of while loop | ||
1201 | m_View->sort(); | ||
1202 | if( m_shTool ){ | ||
1203 | m_location->insertItem( m_currentDir ); | ||
1204 | |||
1205 | } | ||
1206 | // reenable painting and updates | ||
1207 | } | ||
1208 | |||
1209 | |||
1210 | OFileView* OFileSelector::currentView() { | ||
1211 | return 0l; | ||
1212 | } | ||
1213 | int OFileSelector::filter() { | ||
1214 | int filter; | ||
1215 | if ( m_selector == ExtendedAll ) | ||
1216 | filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; | ||
1217 | else | ||
1218 | filter = QDir::Files | QDir::Dirs | QDir::All ; | ||
1219 | |||
1220 | return filter; | ||
1221 | } | ||
1222 | int OFileSelector::sorting() { | ||
1223 | int sort; | ||
1224 | |||
1225 | if (m_case ) | ||
1226 | sort = ( QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed ); | ||
1227 | else | ||
1228 | sort = ( QDir::Name | QDir::DirsFirst | QDir::Reversed ); | ||
1229 | |||
1230 | return sort; | ||
1231 | } | ||
1232 | void OFileSelector::internFileSelected( const QString& s) { | ||
1233 | emit fileSelected( s ); | ||
1234 | } | ||
1235 | void OFileSelector::internFileSelected( const DocLnk& d ) { | ||
1236 | emit fileSelected( d ); | ||
1237 | } | ||
1238 | void OFileSelector::internContextMenu() { | ||
1239 | emit contextMenu(); | ||
1240 | } | ||
1241 | void OFileSelector::internChangedDir( const QString& s) { | ||
1242 | emit dirSelected( s ); | ||
1243 | } | ||
1244 | void OFileSelector::internChangedDir( const QDir& s) { | ||
1245 | emit dirSelected( s ); | ||
1246 | } | ||
diff --git a/libopie/ofileselector/ofileselector.h b/libopie/ofileselector/ofileselector.h new file mode 100644 index 0000000..937569d --- a/dev/null +++ b/libopie/ofileselector/ofileselector.h | |||
@@ -0,0 +1,474 @@ | |||
1 | /* | ||
2 | This is based on code and ideas of | ||
3 | L. J. Potter ljp@llornkcor.com | ||
4 | Thanks a lot | ||
5 | |||
6 | |||
7 | =. This file is part of the OPIE Project | ||
8 | .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> | ||
9 | .>+-= | ||
10 | _;:, .> :=|. This library is free software; you can | ||
11 | .> <`_, > . <= redistribute it and/or modify it under | ||
12 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | ||
13 | .="- .-=="i, .._ License as published by the Free Software | ||
14 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
15 | ._= =} : or (at your option) any later version. | ||
16 | .%`+i> _;_. | ||
17 | .i_,=:_. -<s. This library is distributed in the hope that | ||
18 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
19 | : .. .:, . . . without even the implied warranty of | ||
20 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
21 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | ||
22 | ..}^=.= = ; Library General Public License for more | ||
23 | ++= -. .` .: details. | ||
24 | : = ...= . :.=- | ||
25 | -. .:....=;==+<; You should have received a copy of the GNU | ||
26 | -_. . . )=. = Library General Public License along with | ||
27 | -- :-=` this library; see the file COPYING.LIB. | ||
28 | If not, write to the Free Software Foundation, | ||
29 | Inc., 59 Temple Place - Suite 330, | ||
30 | Boston, MA 02111-1307, USA. | ||
31 | |||
32 | */ | ||
33 | |||
34 | #ifndef opiefileselector_h | ||
35 | #define opiefileselector_h | ||
36 | |||
37 | #include <qpe/fileselector.h> | ||
38 | |||
39 | #include <qdir.h> | ||
40 | #include <qwidget.h> | ||
41 | #include <qstring.h> | ||
42 | #include <qpixmap.h> | ||
43 | #include <qstringlist.h> | ||
44 | #include <qmap.h> | ||
45 | #include <qvaluelist.h> | ||
46 | |||
47 | #include <qpe/applnk.h> | ||
48 | #include <qlistview.h> | ||
49 | |||
50 | /** This is OPIEs FileDialog Widget. You can use it | ||
51 | * as a dropin replacement of the fileselector and | ||
52 | * or use any of the new features. | ||
53 | * This is also a complete FileSave and FileLoad widget | ||
54 | * If you look for a Dialog check OFileDialog | ||
55 | * | ||
56 | */ | ||
57 | class DocLnk; | ||
58 | class QCheckBox; | ||
59 | class QComboBox; | ||
60 | class QPushButton; | ||
61 | class QGridLayout; | ||
62 | class QLineEdit; | ||
63 | class QLabel; | ||
64 | class QWidgetStack; | ||
65 | class QHBoxLayout; | ||
66 | class QVBoxLayout; | ||
67 | class QPopupMenu; | ||
68 | class QFileInfo; | ||
69 | class QHBox; | ||
70 | class OFileView; | ||
71 | // | ||
72 | |||
73 | /* the mimetypes one name and a list of mimetypes */ | ||
74 | typedef QMap< QString, QStringList> MimeTypes; | ||
75 | |||
76 | /** | ||
77 | * FIXME later | ||
78 | */ | ||
79 | struct OPopupMenuFactory { | ||
80 | OPopupMenuFactory() {} | ||
81 | |||
82 | }; | ||
83 | |||
84 | |||
85 | /** | ||
86 | * Opie the default OFileSelector | ||
87 | * It features multiple views. | ||
88 | */ | ||
89 | class OFileSelector : public QWidget { | ||
90 | Q_OBJECT | ||
91 | |||
92 | /* friends are evil but I don't want to make the | ||
93 | * methods public | ||
94 | */ | ||
95 | friend class OLister; | ||
96 | friend class OFileView; | ||
97 | public: | ||
98 | /** | ||
99 | * The mode of the file selector | ||
100 | * Either open, save, fileselector or dir browsing mode | ||
101 | * | ||
102 | */ | ||
103 | enum Mode {Open = 1, Save = 2, Fileselector = 4, Dir = 8 }; | ||
104 | |||
105 | /** | ||
106 | * Selector. Either Normal for the one shipped with | ||
107 | * libqpe or Extended. for the Extended | ||
108 | * ExtendedAll also shows 'hidden' files | ||
109 | */ | ||
110 | enum Selector{Normal=0, Extended = 1, ExtendedAll =2 }; | ||
111 | |||
112 | /** | ||
113 | * This is reserved for futrue views | ||
114 | */ | ||
115 | enum View { Dirs = 1, Files = 2, Tree = 4, Icon = 8 }; | ||
116 | |||
117 | /** | ||
118 | * A c'tor which should be used for advanced mode | ||
119 | * @param wid the parent | ||
120 | * @param mode the Mode of the Selector | ||
121 | * @param selector the current View of the Selector | ||
122 | * @param dirName in which dir to start | ||
123 | * @param fileName a proposed filename | ||
124 | * @param mimetypes A list of mimetypes \ | ||
125 | * QString is for a identifier name like "Text files" | ||
126 | * the coresponding QStringList is used for the mimetypes | ||
127 | * if empty it'll fill the list of mimetypes depending | ||
128 | * on the content of the current directory | ||
129 | */ | ||
130 | |||
131 | OFileSelector(QWidget *wid, int mode, int selector, | ||
132 | const QString &dirName, | ||
133 | const QString &fileName = QString::null, | ||
134 | const MimeTypes &mimetypes = MimeTypes() ); | ||
135 | |||
136 | |||
137 | /** | ||
138 | * This is a QPE compatible c'tor | ||
139 | */ | ||
140 | OFileSelector(const QString &mimeFilter, QWidget *parent, | ||
141 | const char *name, bool newVisible = TRUE, | ||
142 | bool closeVisible = FALSE ); | ||
143 | |||
144 | ~OFileSelector(); | ||
145 | |||
146 | // currently only for the FileSelector Mode | ||
147 | /* compability mode but only work | ||
148 | * with FileSelector | ||
149 | */ | ||
150 | void setNewVisible( bool /*b*/ ); | ||
151 | void setCloseVisible(bool /*b*/ ); | ||
152 | |||
153 | // end file selector mode | ||
154 | // deprecated | ||
155 | void reread(); | ||
156 | // make sure not to leak please | ||
157 | const DocLnk *selected(); | ||
158 | // end deprecated | ||
159 | |||
160 | /** | ||
161 | * @return if the toolbar is visible | ||
162 | */ | ||
163 | bool isToolbarVisible() const { return m_shTool; }; | ||
164 | |||
165 | /** | ||
166 | * @return if the permissionBas is visible | ||
167 | */ | ||
168 | bool isPermissionBarVisible() const { return m_shPerm; }; | ||
169 | |||
170 | /** | ||
171 | * @return if the lineEdit is visible | ||
172 | */ | ||
173 | bool isLineEditVisible()const { return m_shLne; }; | ||
174 | |||
175 | /** | ||
176 | * if the chooser is visible | ||
177 | */ | ||
178 | bool isChooserVisible( )const { return m_shChooser; }; | ||
179 | |||
180 | /** | ||
181 | * @return if the yesCancel Bar is visible | ||
182 | */ | ||
183 | bool isYesCancelVisible()const { return m_shYesNo; }; | ||
184 | |||
185 | /** | ||
186 | * set Yes/Cancel visible | ||
187 | */ | ||
188 | void setYesCancelVisible( bool show ); | ||
189 | |||
190 | /** | ||
191 | * set the toolbar visible | ||
192 | */ | ||
193 | void setToolbarVisible( bool show ); | ||
194 | |||
195 | /** | ||
196 | * set the permissionBar to be visible | ||
197 | */ | ||
198 | void setPermissionBarVisible( bool show ); | ||
199 | |||
200 | /** | ||
201 | * set the lineedit for file entering visible | ||
202 | */ | ||
203 | void setLineEditVisible(bool show) ; | ||
204 | |||
205 | /** | ||
206 | * set the chooser is visible | ||
207 | */ | ||
208 | void setChooserVisible( bool chooser ); | ||
209 | |||
210 | /** | ||
211 | * The permissionCheckbox | ||
212 | * | ||
213 | */ | ||
214 | QCheckBox* permissionCheckbox(); | ||
215 | |||
216 | /** | ||
217 | * setPermission | ||
218 | */ | ||
219 | bool setPermission() const; | ||
220 | |||
221 | /** | ||
222 | * set ther permission to bool | ||
223 | */ | ||
224 | void setPermissionChecked( bool check ); | ||
225 | |||
226 | /** | ||
227 | * set the Selector Mode | ||
228 | */ | ||
229 | void setMode( int ); | ||
230 | |||
231 | /** | ||
232 | * whether or not to show dirs | ||
233 | */ | ||
234 | bool showDirs()const { return m_dir; } | ||
235 | |||
236 | /** | ||
237 | * setShowDirs | ||
238 | */ | ||
239 | void setShowDirs(bool ); | ||
240 | |||
241 | /** | ||
242 | * set CaseSensetive | ||
243 | */ | ||
244 | bool isCaseSensetive()const { return m_case; } | ||
245 | |||
246 | /** | ||
247 | * set if to be case sensetive | ||
248 | */ | ||
249 | void setCaseSensetive(bool caSe ); | ||
250 | |||
251 | /** | ||
252 | * @return if to show files | ||
253 | */ | ||
254 | bool showFiles()const { return m_files; }; | ||
255 | |||
256 | /** | ||
257 | * set if files should be shown | ||
258 | */ | ||
259 | void setShowFiles(bool ); | ||
260 | |||
261 | /** | ||
262 | * change dir to path | ||
263 | */ | ||
264 | bool cd(const QString &path ); | ||
265 | |||
266 | |||
267 | /** | ||
268 | * return the mode of the fileselector | ||
269 | */ | ||
270 | int mode()const { return m_mode; }; | ||
271 | |||
272 | /** | ||
273 | * return the selector | ||
274 | */ | ||
275 | int selector()const { return m_selector; }; | ||
276 | |||
277 | /** | ||
278 | * set the Selector | ||
279 | */ | ||
280 | void setSelector( int ); | ||
281 | |||
282 | /** | ||
283 | * wether or not to show popups | ||
284 | */ | ||
285 | bool showPopup()const { return m_showPopup; }; | ||
286 | |||
287 | /** | ||
288 | * set show popups | ||
289 | */ | ||
290 | void setShowPopup( bool pop ) { m_showPopup = pop; } | ||
291 | |||
292 | /** | ||
293 | * set the popup factory | ||
294 | */ | ||
295 | void setPopupFactory( OPopupMenuFactory * ); | ||
296 | |||
297 | /** | ||
298 | * reparse the current directory and updates | ||
299 | * the views + mimetypes | ||
300 | */ | ||
301 | void reparse(); // re reads the dir | ||
302 | |||
303 | /** | ||
304 | * return the selected name | ||
305 | */ | ||
306 | QString selectedName( )const; | ||
307 | |||
308 | /** | ||
309 | * for multiple selections return multiple | ||
310 | * filenames | ||
311 | */ | ||
312 | QStringList selectedNames()const; | ||
313 | |||
314 | /** | ||
315 | * return the complete to the file | ||
316 | */ | ||
317 | QString selectedPath() const; | ||
318 | |||
319 | /** | ||
320 | * return the completed paths | ||
321 | */ | ||
322 | QStringList selectedPaths() const; | ||
323 | |||
324 | /** | ||
325 | * the current directory | ||
326 | */ | ||
327 | QString directory()const; | ||
328 | |||
329 | /** | ||
330 | * fileCount | ||
331 | */ | ||
332 | int fileCount(); | ||
333 | |||
334 | DocLnk selectedDocument()const; | ||
335 | |||
336 | QValueList<DocLnk> selectedDocuments()const; | ||
337 | |||
338 | OFileView* currentView(); | ||
339 | int filter(); | ||
340 | int sorting(); | ||
341 | |||
342 | signals: | ||
343 | void fileSelected( const DocLnk & ); | ||
344 | void fileSelected( const QString & ); | ||
345 | void dirSelected(const QString &dir ); | ||
346 | void dirSelected( const QDir& ); | ||
347 | void closeMe(); | ||
348 | void ok(); | ||
349 | void cancel(); | ||
350 | void contextMenu(); | ||
351 | |||
352 | private slots: | ||
353 | void slotOk(); | ||
354 | void slotCancel(); | ||
355 | void slotViewCheck(const QString & ); | ||
356 | void slotMimeCheck(const QString & ); | ||
357 | void slotLocationActivated(const QString & ); | ||
358 | void slotInsertLocationPath(const QString &, int); | ||
359 | void locationComboChanged(); | ||
360 | |||
361 | private: | ||
362 | void init(); | ||
363 | void updateMimes(); | ||
364 | |||
365 | |||
366 | private: | ||
367 | |||
368 | FileSelector* m_select; | ||
369 | int m_mode, m_selector; | ||
370 | QComboBox *m_location, *m_mimeCheck, *m_viewCheck; | ||
371 | QPushButton *m_homeButton, *m_docButton, *m_hideButton, *m_ok, *m_cancel; | ||
372 | QPushButton *m_reread, *m_up, *m_new, *m_close; | ||
373 | QListView *m_View; | ||
374 | QCheckBox *m_checkPerm; | ||
375 | QWidget *m_pseudo; | ||
376 | QVBoxLayout *m_pseudoLayout; | ||
377 | |||
378 | QString m_currentDir; | ||
379 | QString m_name; | ||
380 | // QStringList m_mimetypes; | ||
381 | QMap<QString, QStringList> m_mimetypes; | ||
382 | |||
383 | |||
384 | QWidgetStack *m_stack; | ||
385 | QVBoxLayout *m_lay; | ||
386 | QGridLayout *m_Oselector; | ||
387 | |||
388 | QHBox *m_boxToolbar; | ||
389 | QHBox *m_boxOk; // (no layout anymore) wait | ||
390 | QHBox *m_boxName; // (no Layout anymore) wait | ||
391 | QHBox *m_boxView; | ||
392 | |||
393 | QPopupMenu *m_custom; | ||
394 | |||
395 | QLineEdit *m_edit; | ||
396 | QLabel *m_fnLabel; | ||
397 | |||
398 | bool m_shClose : 1; | ||
399 | bool m_shNew : 1; | ||
400 | bool m_shTool : 1; | ||
401 | bool m_shPerm : 1; | ||
402 | bool m_shLne : 1; | ||
403 | bool m_shChooser : 1; | ||
404 | bool m_shYesNo : 1; | ||
405 | bool m_boCheckPerm : 1; | ||
406 | bool m_autoMime : 1; | ||
407 | bool m_case : 1; | ||
408 | bool m_dir : 1; | ||
409 | bool m_files : 1; | ||
410 | bool m_showPopup : 1; | ||
411 | |||
412 | void initVars(); | ||
413 | virtual void addFile(const QString &mime, QFileInfo *info, bool symlink = FALSE ); | ||
414 | virtual void addDir( const QString &mime, QFileInfo *info , bool symlink = FALSE ); | ||
415 | virtual void addSymlink(const QString &, QFileInfo *, bool = FALSE ){}; | ||
416 | void delItems(); | ||
417 | void initializeName(); | ||
418 | void initializeYes(); | ||
419 | void initializeChooser(); | ||
420 | void initializeListView(); | ||
421 | void initializePerm(); | ||
422 | void initPics(); | ||
423 | bool compliesMime(const QString &path, | ||
424 | const QString &mime); | ||
425 | bool compliesMime(const QString& mime ); | ||
426 | /** | ||
427 | * Updates the QComboBox with the current mimetypes | ||
428 | */ | ||
429 | void updateMimeCheck(); | ||
430 | |||
431 | /** | ||
432 | * Returns the current mimetype | ||
433 | */ | ||
434 | QString currentMimeType()const; | ||
435 | class OFileSelectorPrivate; | ||
436 | OFileSelectorPrivate *d; | ||
437 | static QMap<QString,QPixmap> *m_pixmaps; | ||
438 | |||
439 | private slots: | ||
440 | void slotFileSelected(const QString & ); // not really meant to be a slot | ||
441 | void slotFileBridgeSelected( const DocLnk & ); | ||
442 | virtual void slotSelectionChanged(); | ||
443 | virtual void slotCurrentChanged(QListViewItem* ); | ||
444 | virtual void slotClicked( int, QListViewItem *item, const QPoint &, int); | ||
445 | virtual void slotRightButton(int, QListViewItem *, const QPoint &, int ); | ||
446 | virtual void slotContextMenu( QListViewItem *item); | ||
447 | // listview above | ||
448 | // popup below | ||
449 | virtual void slotChangedDir(); | ||
450 | virtual void slotOpen(); | ||
451 | virtual void slotRescan(); | ||
452 | virtual void slotRename(); | ||
453 | virtual void slotDelete(); | ||
454 | virtual void cdUP(); | ||
455 | virtual void slotHome(); | ||
456 | virtual void slotDoc(); | ||
457 | virtual void slotNavigate( ); | ||
458 | |||
459 | /* for OLister */ | ||
460 | private: | ||
461 | |||
462 | /* for OFileView */ | ||
463 | private: | ||
464 | void internFileSelected( const QString& ); | ||
465 | void internFileSelected( const DocLnk& ); | ||
466 | void internContextMenu(); | ||
467 | void internChangedDir( const QString& ); | ||
468 | void internChangedDir( const QDir& ) ; | ||
469 | |||
470 | }; | ||
471 | |||
472 | |||
473 | #endif | ||
474 | |||
diff --git a/libopie/ofileselector/ofileselectoritem.cpp b/libopie/ofileselector/ofileselectoritem.cpp new file mode 100644 index 0000000..1e745a1 --- a/dev/null +++ b/libopie/ofileselector/ofileselectoritem.cpp | |||
@@ -0,0 +1,53 @@ | |||
1 | #include "ofileselectoritem.h" | ||
2 | |||
3 | OFileSelectorItem::OFileSelectorItem( QListView*view, | ||
4 | const QPixmap& pix, | ||
5 | const QString& path, | ||
6 | const QString& date, | ||
7 | const QString& size, | ||
8 | const QString& dir, | ||
9 | bool isLocked, | ||
10 | bool isDir ) | ||
11 | : QListViewItem( view ) | ||
12 | { | ||
13 | setPixmap( 0, pix ); | ||
14 | setText( 1, path ); | ||
15 | setText( 2, size ); | ||
16 | setText( 3, date ); | ||
17 | m_dir = isDir; | ||
18 | m_locked = isLocked; | ||
19 | m_dirStr = dir; | ||
20 | } | ||
21 | OFileSelectorItem::~OFileSelectorItem() { | ||
22 | } | ||
23 | bool OFileSelectorItem::isLocked()const { | ||
24 | return m_locked; | ||
25 | } | ||
26 | QString OFileSelectorItem::directory()const { | ||
27 | return m_dirStr; | ||
28 | } | ||
29 | bool OFileSelectorItem::isDir()const { | ||
30 | return m_dir; | ||
31 | } | ||
32 | QString OFileSelectorItem::path() const { | ||
33 | return text(1); | ||
34 | } | ||
35 | QString OFileSelectorItem::key( int id, bool ) { | ||
36 | QString ke; | ||
37 | |||
38 | if( id == 0 || id == 1 ){ // name | ||
39 | if( m_dir ){ | ||
40 | ke.append("0" ); | ||
41 | ke.append( text(1) ); | ||
42 | }else{ | ||
43 | ke.append("1" ); | ||
44 | ke.append( text(1) ); | ||
45 | } | ||
46 | }else if( id == 2 ){ // size | ||
47 | return text(2); | ||
48 | }else if( id == 3 ){ // date | ||
49 | return text(3); | ||
50 | } | ||
51 | |||
52 | return ke; | ||
53 | } | ||
diff --git a/libopie/ofileselector/ofileselectoritem.h b/libopie/ofileselector/ofileselectoritem.h new file mode 100644 index 0000000..21460c4 --- a/dev/null +++ b/libopie/ofileselector/ofileselectoritem.h | |||
@@ -0,0 +1,30 @@ | |||
1 | #ifndef OPIE_FILE_SELECTOR_ITEM_H | ||
2 | #define OPIE_FILE_SELECTOR_ITEM_H | ||
3 | |||
4 | #include <qlistview.h> | ||
5 | |||
6 | class OFileSelectorItem : public QListViewItem { | ||
7 | public: | ||
8 | OFileSelectorItem( QListView* view, | ||
9 | const QPixmap&, | ||
10 | const QString& path, | ||
11 | const QString& date, | ||
12 | const QString& size, | ||
13 | const QString& dir, | ||
14 | bool isLocked, | ||
15 | bool isDir = false); | ||
16 | ~OFileSelectorItem(); | ||
17 | bool isLocked() const; | ||
18 | QString directory()const; | ||
19 | bool isDir()const; | ||
20 | QString path()const; | ||
21 | QString key(int id, bool ); | ||
22 | |||
23 | private: | ||
24 | bool m_locked : 1; | ||
25 | bool m_dir : 1; | ||
26 | QString m_dirStr; | ||
27 | |||
28 | }; | ||
29 | |||
30 | #endif | ||
diff --git a/libopie/ofileselector/ofileview.cpp b/libopie/ofileselector/ofileview.cpp new file mode 100644 index 0000000..71843c1 --- a/dev/null +++ b/libopie/ofileselector/ofileview.cpp | |||
@@ -0,0 +1,28 @@ | |||
1 | #include <qpe/applnk.h> | ||
2 | |||
3 | #include "ofileselector.h" | ||
4 | |||
5 | #include "ofileview.h" | ||
6 | |||
7 | |||
8 | OFileView::OFileView( OFileSelector* sel) | ||
9 | : m_sel( sel ) | ||
10 | { | ||
11 | } | ||
12 | OFileView::~OFileView() { | ||
13 | } | ||
14 | void OFileView::fileSelected( const QString& s ) { | ||
15 | m_sel->internFileSelected( s ); | ||
16 | } | ||
17 | void OFileView::fileSelected( const DocLnk& s) { | ||
18 | m_sel->internFileSelected( s ); | ||
19 | } | ||
20 | void OFileView::contextMenu() { | ||
21 | m_sel->internContextMenu(); | ||
22 | } | ||
23 | void OFileView::changedDir( const QString& s) { | ||
24 | m_sel->internChangedDir( s ); | ||
25 | } | ||
26 | void OFileView::changedDir( const QDir& d ) { | ||
27 | m_sel->internChangedDir( d ); | ||
28 | } | ||
diff --git a/libopie/ofileselector/ofileview.h b/libopie/ofileselector/ofileview.h new file mode 100644 index 0000000..997266a --- a/dev/null +++ b/libopie/ofileselector/ofileview.h | |||
@@ -0,0 +1,109 @@ | |||
1 | /* | ||
2 | =. This file is part of the OPIE Project | ||
3 | .=l. Copyright (c) 2002 zecke <zecke@handhelds.org> | ||
4 | .>+-= | ||
5 | _;:, .> :=|. This library is free software; you can | ||
6 | .> <`_, > . <= redistribute it and/or modify it under | ||
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | ||
8 | .="- .-=="i, .._ License as published by the Free Software | ||
9 | - . .-<_> .<> Foundation; either version 2 of the License, | ||
10 | ._= =} : or (at your option) any later version. | ||
11 | .%`+i> _;_. | ||
12 | .i_,=:_. -<s. This library is distributed in the hope that | ||
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | ||
14 | : .. .:, . . . without even the implied warranty of | ||
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | ||
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | ||
17 | ..}^=.= = ; Library General Public License for more | ||
18 | ++= -. .` .: details. | ||
19 | : = ...= . :.=- | ||
20 | -. .:....=;==+<; You should have received a copy of the GNU | ||
21 | -_. . . )=. = Library General Public License along with | ||
22 | -- :-=` this library; see the file COPYING.LIB. | ||
23 | If not, write to the Free Software Foundation, | ||
24 | Inc., 59 Temple Place - Suite 330, | ||
25 | Boston, MA 02111-1307, USA. | ||
26 | |||
27 | */ | ||
28 | |||
29 | #ifndef ofileview_h | ||
30 | #define ofileview_h | ||
31 | |||
32 | #include <qobject.h> | ||
33 | #include <qwidget.h> | ||
34 | #include <qpopupmenu.h> | ||
35 | |||
36 | class QFileInfo; | ||
37 | class QDir; | ||
38 | class DocLnk; | ||
39 | |||
40 | /** | ||
41 | * A OFileView is a specialised View for the | ||
42 | * OFileSelector | ||
43 | * With a View you can chage the user visible | ||
44 | * representation of a OFileLister | ||
45 | * OFileView is just a basic interface which helps you to | ||
46 | * write new views | ||
47 | */ | ||
48 | class OFileSelector; | ||
49 | class OFileView { | ||
50 | public: | ||
51 | OFileView( OFileSelector* ); | ||
52 | OFileView(); | ||
53 | virtual ~OFileView(); | ||
54 | |||
55 | virtual void clear() = 0; | ||
56 | virtual void addFile(const QString &mine, | ||
57 | QFileInfo *info, | ||
58 | bool isSymlink = FALSE ) = 0; | ||
59 | virtual void addFile(const QString& mine, const QString& dir, | ||
60 | const QString& file, bool = FALSE ) = 0; | ||
61 | |||
62 | virtual void addDir (const QString &mine, | ||
63 | QFileInfo *info, | ||
64 | bool isSymlink = FALSE ) = 0; | ||
65 | virtual void addDir (const QString& mine, const QString& dir, | ||
66 | const QString& file, bool = FALSE) = 0; | ||
67 | |||
68 | virtual void addSymlink(const QString &mime, | ||
69 | QFileInfo *info, | ||
70 | bool isSymlink = FALSE ) = 0; | ||
71 | virtual void addSymlink(const QString& mine, | ||
72 | const QString& path, | ||
73 | const QString& file, | ||
74 | bool isSymlink = FALSE ) = 0; | ||
75 | |||
76 | virtual void cd(const QString &path ) = 0; | ||
77 | virtual QWidget* widget() = 0; | ||
78 | |||
79 | virtual QString selectedName()const = 0; | ||
80 | virtual QStringList selectedNames()const = 0; | ||
81 | virtual QString selectedPath()const = 0; | ||
82 | virtual QStringList selectedPaths()const = 0; | ||
83 | virtual int fileCount() = 0; | ||
84 | |||
85 | /*signals:*/ | ||
86 | protected: | ||
87 | |||
88 | void fileSelected(const QString &); | ||
89 | void fileSelected(const DocLnk & ); | ||
90 | void contextMenu(); | ||
91 | void changedDir(const QString &); | ||
92 | void changedDir(const QDir & ); | ||
93 | OFileSelector* selector(); | ||
94 | |||
95 | private: | ||
96 | OFileSelector* m_sel; | ||
97 | }; | ||
98 | |||
99 | class OFileViewFactory { | ||
100 | public: | ||
101 | OFileViewFactory() {} ; | ||
102 | virtual ~OFileViewFactory() = 0; | ||
103 | |||
104 | OFileView* newView(QWidget *parent, const char *name ); | ||
105 | QString name()const; | ||
106 | }; | ||
107 | |||
108 | |||
109 | #endif | ||