summaryrefslogtreecommitdiff
authorzecke <zecke>2002-09-15 17:52:30 (UTC)
committer zecke <zecke>2002-09-15 17:52:30 (UTC)
commit1c5780f34ec9b4dc004714488b46997fe1a0909b (patch) (unidiff)
tree524719fe92e4738dbcebf4bc792d6901cf215df9
parent8c161a2699a842e527ade4410189fd18964d1c31 (diff)
downloadopie-1c5780f34ec9b4dc004714488b46997fe1a0909b.zip
opie-1c5780f34ec9b4dc004714488b46997fe1a0909b.tar.gz
opie-1c5780f34ec9b4dc004714488b46997fe1a0909b.tar.bz2
Ok the demand for filters, listers and views were great so I'm currently
implementing it This OFileSelector will be in a different subdir but it'll be still linked into libopie. This makes it more easy to find all files which belong to the OFileSelector an OLister is able to list for example files and dirs ( OLocalLister ) a ftp lister a bluetooth lister whcich would show available devices a DocLnkSet lister for the Documents Tab a CrossReference lister a View is responsible for showing files to the user... and I renamed *.cc to *.cpp
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofileselector/ofiledialog.cpp116
-rw-r--r--libopie/ofileselector/ofiledialog.h77
-rw-r--r--libopie/ofileselector/ofilelistview.cpp118
-rw-r--r--libopie/ofileselector/ofilelistview.h45
-rw-r--r--libopie/ofileselector/ofileselector.cpp1246
-rw-r--r--libopie/ofileselector/ofileselector.h474
-rw-r--r--libopie/ofileselector/ofileselectoritem.cpp53
-rw-r--r--libopie/ofileselector/ofileselectoritem.h30
-rw-r--r--libopie/ofileselector/ofileview.cpp28
-rw-r--r--libopie/ofileselector/ofileview.h109
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
36OFileDialog::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}
63QString OFileDialog::mimetype()const
64{
65 return QString::null;
66}
67QString OFileDialog::fileName()const
68{
69 return file->selectedName();
70}
71DocLnk OFileDialog::selectedDocument()const
72{
73 return file->selectedDocument();
74}
75QString 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}
91QString 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
108void OFileDialog::slotFileSelected(const QString & )
109{
110 accept();
111}
112void 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
37class 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
7OFileListView::OFileListView( QWidget* parent, OFileSelector* sel)
8 : QListView( parent ), OFileView( sel )
9{
10
11}
12OFileListView::~OFileListView() {
13
14}
15void OFileListView::clear() {
16 QListView::clear();
17}
18void 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}
47void OFileListView::addFile( const QString& /*mime*/, const QString& /*dir*/,
48 const QString& /*file*/, bool /*isSyml*/ ) {
49
50}
51void 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}
81void OFileListView::addDir( const QString& mime, const QString& dir,
82 const QString& file, bool ) {
83
84}
85void OFileListView::addSymlink( const QString& mime,
86 QFileInfo* info,
87 bool isSym ) {
88
89}
90void OFileListView::addSymlink( const QString& mime, const QString& path,
91 const QString& file, bool isSym ) {
92
93}
94void OFileListView::cd( const QString& ) {
95
96}
97QWidget* OFileListView::widget() {
98 return this;
99}
100QString OFileListView::selectedName()const{
101 QListViewItem *item = currentItem();
102 if (!item )
103 return QString::null;
104
105 return item->text( 1 );
106}
107QStringList OFileListView::selectedNames()const {
108
109}
110QString OFileListView::selectedPath()const {
111
112}
113QString OFileListView::selectedPaths()const {
114
115}
116int 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
8class OFileListView : public QListView, public OFileView {
9 Q_OBJECT
10public:
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
36QMap<QString,QPixmap> *OFileSelector::m_pixmaps = 0;
37
38namespace {
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
52OFileSelector::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
69OFileSelector::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
92OFileSelector::~OFileSelector()
93{
94
95
96}
97
98void 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}
119void 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}
128void OFileSelector::reread()
129{
130 if( m_selector == Normal ){
131 setNewVisible( m_shNew ); // make it a initializeSelector
132 }else {
133 reparse();
134 }
135}
136
137const DocLnk *OFileSelector::selected()
138{
139 DocLnk *lnk = new DocLnk(selectedDocument() );
140 return lnk;
141}
142
143void 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}
153void 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}
169void 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}
178void 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
191void 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
202QCheckBox* OFileSelector::permissionCheckbox()
203{
204 if( m_selector == Normal )
205 return 0l;
206 else
207 return m_checkPerm;
208}
209bool OFileSelector::setPermission()const
210{
211 return m_checkPerm == 0 ? false : m_checkPerm->isChecked();
212}
213void OFileSelector::setPermissionChecked( bool check )
214{
215 if( m_checkPerm )
216 m_checkPerm->setChecked( check );
217}
218
219void OFileSelector::setMode(int mode) // FIXME do direct raising
220{
221 m_mode = mode;
222 if( m_selector == Normal )
223 return;
224}
225void OFileSelector::setShowDirs(bool )
226{
227 m_dir = true;
228 reparse();
229}
230void OFileSelector::setCaseSensetive(bool caSe )
231{
232 m_case = caSe;
233 reparse();
234}
235void OFileSelector::setShowFiles(bool show )
236{
237 m_files = show;
238 reparse();
239}
240///
241bool OFileSelector::cd(const QString &path )
242{
243 m_currentDir = path;
244 reparse();
245 return true;
246}
247void OFileSelector::setSelector(int mode )
248{
249QString 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
264void OFileSelector::setPopupFactory(OPopupMenuFactory *popup )
265{
266/* m_custom = popup;
267 m_showPopup = true;
268*/
269}
270
271//void OFileSelector::updateL
272
273QString 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}
288QStringList 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 */
302QString 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}
312QStringList OFileSelector::selectedPaths() const
313{
314 QStringList list;
315 list << selectedPath();
316 return list;
317}
318QString OFileSelector::directory()const
319{
320 if( m_selector == Normal )
321 return QPEApplication::documentDir();
322
323 return QDir(m_currentDir).absPath();
324}
325
326int 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}
341DocLnk 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}
357QValueList<DocLnk> OFileSelector::selectedDocuments() const
358{
359 QValueList<DocLnk> docs;
360 docs.append( selectedDocument() );
361 return docs;
362}
363
364
365// slots internal
366
367void OFileSelector::slotOk()
368{
369 emit ok();
370}
371void OFileSelector::slotCancel()
372{
373 emit cancel();
374}
375void 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.....
408QString 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}
428void 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 */
473void 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}
484void OFileSelector::slotInsertLocationPath(const QString &currentPath, 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 */
506void 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}
517void 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}
567void 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}
583void 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}
634void 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}
645void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
646{
647 if(!m_dir)
648 return;
649}
650void OFileSelector::delItems()
651{
652
653}
654void 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}
679void 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 */
706void 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
719void 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}
739void 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}
845void 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}
854void 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
871bool 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 */
899bool 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}
937void OFileSelector::slotFileSelected( const QString &string )
938{
939 if( m_shLne )
940 m_edit->setText( string );
941 emit fileSelected( string );
942}
943void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
944{
945 slotFileSelected( lnk.name() );
946 // emit fileSelected( lnk );
947}
948void OFileSelector::slotSelectionChanged()
949{
950
951}
952void 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}
973void 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}
1006void 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}
1015void OFileSelector::slotContextMenu( QListViewItem *item)
1016{
1017
1018}
1019void 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}
1027void 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}
1038void OFileSelector::slotRescan()
1039{
1040
1041}
1042void OFileSelector::slotRename()
1043{
1044 reparse();
1045}
1046void 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}
1064void 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}
1078void OFileSelector::slotHome()
1079{
1080 cd(QDir::homeDirPath() );
1081}
1082void OFileSelector::slotDoc()
1083{
1084 cd(QPEApplication::documentDir() );
1085}
1086void OFileSelector::slotNavigate( )
1087{
1088
1089}
1090// fill the View with life
1091void 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
1210OFileView* OFileSelector::currentView() {
1211 return 0l;
1212}
1213int 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}
1222int 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}
1232void OFileSelector::internFileSelected( const QString& s) {
1233 emit fileSelected( s );
1234}
1235void OFileSelector::internFileSelected( const DocLnk& d ) {
1236 emit fileSelected( d );
1237}
1238void OFileSelector::internContextMenu() {
1239 emit contextMenu();
1240}
1241void OFileSelector::internChangedDir( const QString& s) {
1242 emit dirSelected( s );
1243}
1244void 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 */
57class DocLnk;
58class QCheckBox;
59class QComboBox;
60class QPushButton;
61class QGridLayout;
62class QLineEdit;
63class QLabel;
64class QWidgetStack;
65class QHBoxLayout;
66class QVBoxLayout;
67class QPopupMenu;
68class QFileInfo;
69class QHBox;
70class OFileView;
71//
72
73/* the mimetypes one name and a list of mimetypes */
74typedef QMap< QString, QStringList> MimeTypes;
75
76/**
77 * FIXME later
78 */
79struct OPopupMenuFactory {
80 OPopupMenuFactory() {}
81
82};
83
84
85/**
86 * Opie the default OFileSelector
87 * It features multiple views.
88 */
89class 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
439private 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 */
460private:
461
462 /* for OFileView */
463private:
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
3OFileSelectorItem::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}
21OFileSelectorItem::~OFileSelectorItem() {
22}
23bool OFileSelectorItem::isLocked()const {
24 return m_locked;
25}
26QString OFileSelectorItem::directory()const {
27 return m_dirStr;
28}
29bool OFileSelectorItem::isDir()const {
30 return m_dir;
31}
32QString OFileSelectorItem::path() const {
33 return text(1);
34}
35QString 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
6class OFileSelectorItem : public QListViewItem {
7public:
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
23private:
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
8OFileView::OFileView( OFileSelector* sel)
9 : m_sel( sel )
10{
11}
12OFileView::~OFileView() {
13}
14void OFileView::fileSelected( const QString& s ) {
15 m_sel->internFileSelected( s );
16}
17void OFileView::fileSelected( const DocLnk& s) {
18 m_sel->internFileSelected( s );
19}
20void OFileView::contextMenu() {
21 m_sel->internContextMenu();
22}
23void OFileView::changedDir( const QString& s) {
24 m_sel->internChangedDir( s );
25}
26void 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
36class QFileInfo;
37class QDir;
38class 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 */
48class OFileSelector;
49class OFileView {
50public:
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:*/
86protected:
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
95private:
96 OFileSelector* m_sel;
97};
98
99class 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