author | zecke <zecke> | 2002-06-26 18:01:53 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-06-26 18:01:53 (UTC) |
commit | 76f87a51800511fe108edbcd14d4dd40ead6f391 (patch) (unidiff) | |
tree | 1d1b3cf7c3bbd98d294cac738b3bfa277964b32d | |
parent | 125dc1fe52d7a3c8be1b955c79d729cc935c8b6d (diff) | |
download | opie-76f87a51800511fe108edbcd14d4dd40ead6f391.zip opie-76f87a51800511fe108edbcd14d4dd40ead6f391.tar.gz opie-76f87a51800511fe108edbcd14d4dd40ead6f391.tar.bz2 |
Improve mimetype handling
API is now fixed
2 Bugs outstanding though
-rw-r--r-- | libopie/ofiledialog.cc | 18 | ||||
-rw-r--r-- | libopie/ofiledialog.h | 18 | ||||
-rw-r--r-- | libopie/ofileselector.cc | 160 | ||||
-rw-r--r-- | libopie/ofileselector.h | 77 |
4 files changed, 192 insertions, 81 deletions
diff --git a/libopie/ofiledialog.cc b/libopie/ofiledialog.cc index 164fadd..4783004 100644 --- a/libopie/ofiledialog.cc +++ b/libopie/ofiledialog.cc | |||
@@ -2,24 +2,24 @@ | |||
2 | =. This file is part of the OPIE Project | 2 | =. This file is part of the OPIE Project |
3 | .=l. Copyright (c) 2002 <> | 3 | .=l. Copyright (c) 2002 <> |
4 | .>+-= | 4 | .>+-= |
5 | _;:, .> :=|. This library is free software; you can | 5 | _;:, .> :=|. This library is free software; you can |
6 | .> <`_, > . <= redistribute it and/or modify it under | 6 | .> <`_, > . <= redistribute it and/or modify it under |
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
8 | .="- .-=="i, .._ License as published by the Free Software | 8 | .="- .-=="i, .._ License as published by the Free Software |
9 | - . .-<_> .<> Foundation; either version 2 of the License, | 9 | - . .-<_> .<> Foundation; either version 2 of the License, |
10 | ._= =} : or (at your option) any later version. | 10 | ._= =} : or (at your option) any later version. |
11 | .%`+i> _;_. | 11 | .%`+i> _;_. |
12 | .i_,=:_. -<s. This library is distributed in the hope that | 12 | .i_,=:_. -<s. This library is distributed in the hope that |
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
14 | : .. .:, . . . without even the implied warranty of | 14 | : .. .:, . . . without even the implied warranty of |
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
17 | ..}^=.= = ; Library General Public License for more | 17 | ..}^=.= = ; Library General Public License for more |
18 | ++= -. .` .: details. | 18 | ++= -. .` .: details. |
19 | : = ...= . :.=- | 19 | : = ...= . :.=- |
20 | -. .:....=;==+<; You should have received a copy of the GNU | 20 | -. .:....=;==+<; You should have received a copy of the GNU |
21 | -_. . . )=. = Library General Public License along with | 21 | -_. . . )=. = Library General Public License along with |
22 | -- :-=` this library; see the file COPYING.LIB. | 22 | -- :-=` this library; see the file COPYING.LIB. |
23 | If not, write to the Free Software Foundation, | 23 | If not, write to the Free Software Foundation, |
24 | Inc., 59 Temple Place - Suite 330, | 24 | Inc., 59 Temple Place - Suite 330, |
25 | Boston, MA 02111-1307, USA. | 25 | Boston, MA 02111-1307, USA. |
@@ -37,7 +37,7 @@ OFileDialog::OFileDialog(const QString &caption, | |||
37 | QWidget *wid, int mode, int selector, | 37 | QWidget *wid, int mode, int selector, |
38 | const QString &dirName, | 38 | const QString &dirName, |
39 | const QString &fileName, | 39 | const QString &fileName, |
40 | const QStringList &mimetypes ) | 40 | const QMap<QString,QStringList>& mimetypes ) |
41 | : QDialog( wid, "OFileDialog", true ) | 41 | : QDialog( wid, "OFileDialog", true ) |
42 | { | 42 | { |
43 | // QVBoxLayout *lay = new QVBoxLayout(this); | 43 | // QVBoxLayout *lay = new QVBoxLayout(this); |
@@ -57,7 +57,7 @@ OFileDialog::OFileDialog(const QString &caption, | |||
57 | connect(file, SIGNAL(dirSelected(const QString &) ), | 57 | connect(file, SIGNAL(dirSelected(const QString &) ), |
58 | this, SLOT(slotDirSelected(const QString &) ) ); | 58 | this, SLOT(slotDirSelected(const QString &) ) ); |
59 | 59 | ||
60 | 60 | ||
61 | file->setYesCancelVisible( false ); // relayout | 61 | file->setYesCancelVisible( false ); // relayout |
62 | } | 62 | } |
63 | QString OFileDialog::mimetype()const | 63 | QString OFileDialog::mimetype()const |
@@ -75,7 +75,7 @@ DocLnk OFileDialog::selectedDocument()const | |||
75 | QString OFileDialog::getOpenFileName(int selector, | 75 | QString OFileDialog::getOpenFileName(int selector, |
76 | const QString &startDir, | 76 | const QString &startDir, |
77 | const QString &file, | 77 | const QString &file, |
78 | const QStringList &mimes, | 78 | const MimeTypes &mimes, |
79 | QWidget *wid, | 79 | QWidget *wid, |
80 | const QString &caption ) | 80 | const QString &caption ) |
81 | { | 81 | { |
@@ -91,7 +91,7 @@ QString OFileDialog::getOpenFileName(int selector, | |||
91 | QString OFileDialog::getSaveFileName(int selector, | 91 | QString OFileDialog::getSaveFileName(int selector, |
92 | const QString &startDir, | 92 | const QString &startDir, |
93 | const QString &file, | 93 | const QString &file, |
94 | const QStringList &mimes, | 94 | const MimeTypes &mimes, |
95 | QWidget *wid, | 95 | QWidget *wid, |
96 | const QString &caption ) | 96 | const QString &caption ) |
97 | { | 97 | { |
diff --git a/libopie/ofiledialog.h b/libopie/ofiledialog.h index 40d147e..e14253c 100644 --- a/libopie/ofiledialog.h +++ b/libopie/ofiledialog.h | |||
@@ -2,24 +2,24 @@ | |||
2 | =. This file is part of the OPIE Project | 2 | =. This file is part of the OPIE Project |
3 | .=l. Copyright (c) 2002 zecke <zecke@handhelds.org> | 3 | .=l. Copyright (c) 2002 zecke <zecke@handhelds.org> |
4 | .>+-= | 4 | .>+-= |
5 | _;:, .> :=|. This library is free software; you can | 5 | _;:, .> :=|. This library is free software; you can |
6 | .> <`_, > . <= redistribute it and/or modify it under | 6 | .> <`_, > . <= redistribute it and/or modify it under |
7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 7 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
8 | .="- .-=="i, .._ License as published by the Free Software | 8 | .="- .-=="i, .._ License as published by the Free Software |
9 | - . .-<_> .<> Foundation; either version 2 of the License, | 9 | - . .-<_> .<> Foundation; either version 2 of the License, |
10 | ._= =} : or (at your option) any later version. | 10 | ._= =} : or (at your option) any later version. |
11 | .%`+i> _;_. | 11 | .%`+i> _;_. |
12 | .i_,=:_. -<s. This library is distributed in the hope that | 12 | .i_,=:_. -<s. This library is distributed in the hope that |
13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 13 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
14 | : .. .:, . . . without even the implied warranty of | 14 | : .. .:, . . . without even the implied warranty of |
15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 15 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 16 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
17 | ..}^=.= = ; Library General Public License for more | 17 | ..}^=.= = ; Library General Public License for more |
18 | ++= -. .` .: details. | 18 | ++= -. .` .: details. |
19 | : = ...= . :.=- | 19 | : = ...= . :.=- |
20 | -. .:....=;==+<; You should have received a copy of the GNU | 20 | -. .:....=;==+<; You should have received a copy of the GNU |
21 | -_. . . )=. = Library General Public License along with | 21 | -_. . . )=. = Library General Public License along with |
22 | -- :-=` this library; see the file COPYING.LIB. | 22 | -- :-=` this library; see the file COPYING.LIB. |
23 | If not, write to the Free Software Foundation, | 23 | If not, write to the Free Software Foundation, |
24 | Inc., 59 Temple Place - Suite 330, | 24 | Inc., 59 Temple Place - Suite 330, |
25 | Boston, MA 02111-1307, USA. | 25 | Boston, MA 02111-1307, USA. |
@@ -39,9 +39,9 @@ class OFileDialog : public QDialog { | |||
39 | public: | 39 | public: |
40 | OFileDialog(const QString &caption, | 40 | OFileDialog(const QString &caption, |
41 | QWidget *, int mode, int selector, | 41 | QWidget *, int mode, int selector, |
42 | const QString &dirName, | 42 | const QString &dirName, |
43 | const QString &fileName = QString::null, | 43 | const QString &fileName = QString::null, |
44 | const QStringList &mimetypes = QStringList() ); | 44 | const MimeTypes &mimetypes = MimeTypes() ); |
45 | QString mimetype() const; | 45 | QString mimetype() const; |
46 | QString fileName() const; | 46 | QString fileName() const; |
47 | DocLnk selectedDocument()const; | 47 | DocLnk selectedDocument()const; |
@@ -50,14 +50,14 @@ class OFileDialog : public QDialog { | |||
50 | static QString getOpenFileName(int selector, | 50 | static QString getOpenFileName(int selector, |
51 | const QString& startDir = QString::null, | 51 | const QString& startDir = QString::null, |
52 | const QString &fileName = QString::null, | 52 | const QString &fileName = QString::null, |
53 | const QStringList& mimefilter = QStringList(), | 53 | const MimeTypes& mime = MimeTypes(), |
54 | QWidget *wid = 0, | 54 | QWidget *wid = 0, |
55 | const QString &caption = QString::null ); | 55 | const QString &caption = QString::null ); |
56 | 56 | ||
57 | static QString getSaveFileName(int selector, | 57 | static QString getSaveFileName(int selector, |
58 | const QString& startDir = QString::null, | 58 | const QString& startDir = QString::null, |
59 | const QString& fileName = QString::null, | 59 | const QString& fileName = QString::null, |
60 | const QStringList& mimefilter = QStringList(), | 60 | const MimeTypes& mimefilter = MimeTypes(), |
61 | QWidget *wid = 0, | 61 | QWidget *wid = 0, |
62 | const QString &caption = QString::null ); | 62 | const QString &caption = QString::null ); |
63 | 63 | ||
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc index 7a67ab2..6c59f89 100644 --- a/libopie/ofileselector.cc +++ b/libopie/ofileselector.cc | |||
@@ -99,17 +99,19 @@ namespace { | |||
99 | 99 | ||
100 | OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, | 100 | OFileSelector::OFileSelector( QWidget *wid, int mode, int selector, |
101 | const QString &dirName, | 101 | const QString &dirName, |
102 | const QString &fileName, | 102 | const QString &fileName, |
103 | const QStringList &mimeTypes ) | 103 | const QMap<QString,QStringList>& mimeTypes) |
104 | : QWidget( wid, "OFileSelector") | 104 | : QWidget( wid, "OFileSelector") |
105 | { | 105 | { |
106 | m_mimetypes = mimeTypes; | 106 | m_mimetypes = mimeTypes; |
107 | if (mode == SAVE ) | ||
108 | m_name = fileName; | ||
107 | initVars(); | 109 | initVars(); |
108 | m_mode = mode; | 110 | m_mode = mode; |
109 | m_selector = selector; | 111 | m_selector = selector; |
110 | m_currentDir = dirName; | 112 | m_currentDir = dirName; |
111 | init(); | 113 | init(); |
112 | QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); | 114 | //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) ); |
113 | } | 115 | } |
114 | 116 | ||
115 | OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, | 117 | OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, |
@@ -117,9 +119,12 @@ OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, | |||
117 | bool closeVisible ) | 119 | bool closeVisible ) |
118 | : QWidget( parent, name ) | 120 | : QWidget( parent, name ) |
119 | { | 121 | { |
120 | m_mimetypes = QStringList::split(";", mimeFilter ); | 122 | if (!mimeFilter.isEmpty() ) { |
123 | QStringList list = QStringList::split(";", mimeFilter ); | ||
124 | m_mimetypes.insert(mimeFilter, list ); | ||
125 | } | ||
121 | initVars(); | 126 | initVars(); |
122 | m_currentDir = QPEApplication::documentDir(); | 127 | m_currentDir = QPEApplication::documentDir(); |
123 | m_mode = OPEN; | 128 | m_mode = OPEN; |
124 | m_selector = NORMAL; | 129 | m_selector = NORMAL; |
125 | m_shClose = closeVisible; | 130 | m_shClose = closeVisible; |
@@ -129,12 +134,13 @@ OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent, | |||
129 | m_shYesNo = false; | 134 | m_shYesNo = false; |
130 | init(); | 135 | init(); |
131 | 136 | ||
132 | 137 | ||
133 | } | 138 | } |
134 | 139 | ||
135 | OFileSelector::~OFileSelector() | 140 | OFileSelector::~OFileSelector() |
136 | { | 141 | { |
137 | 142 | ||
143 | |||
138 | } | 144 | } |
139 | 145 | ||
140 | void OFileSelector::setNewVisible( bool visible ) | 146 | void OFileSelector::setNewVisible( bool visible ) |
@@ -143,8 +149,8 @@ void OFileSelector::setNewVisible( bool visible ) | |||
143 | if( m_selector == NORMAL ){ | 149 | if( m_selector == NORMAL ){ |
144 | delete m_select; | 150 | delete m_select; |
145 | // we need to initialize but keep the selected mimetype | 151 | // we need to initialize but keep the selected mimetype |
146 | QString mime = m_mimeCheck == 0 ? QString::null : m_mimeCheck->currentText() ; | 152 | QString mime = currentMimeType(); |
147 | m_select = new FileSelector( m_autoMime ? mime : m_mimetypes.join(";") , | 153 | m_select = new FileSelector( mime , |
148 | m_stack, "fileselector", | 154 | m_stack, "fileselector", |
149 | m_shNew, m_shClose); | 155 | m_shNew, m_shClose); |
150 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), | 156 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), |
@@ -341,7 +347,7 @@ QStringList OFileSelector::selectedNames()const | |||
341 | return list; | 347 | return list; |
342 | } | 348 | } |
343 | /** If mode is set to the Dir selection this will return the selected path. | 349 | /** If mode is set to the Dir selection this will return the selected path. |
344 | * | 350 | * |
345 | * | 351 | * |
346 | */ | 352 | */ |
347 | QString OFileSelector::selectedPath()const | 353 | QString OFileSelector::selectedPath()const |
@@ -364,7 +370,7 @@ QString OFileSelector::directory()const | |||
364 | { | 370 | { |
365 | if( m_selector == NORMAL ) | 371 | if( m_selector == NORMAL ) |
366 | return QPEApplication::documentDir(); | 372 | return QPEApplication::documentDir(); |
367 | 373 | ||
368 | return QDir(m_currentDir).absPath(); | 374 | return QDir(m_currentDir).absPath(); |
369 | } | 375 | } |
370 | 376 | ||
@@ -425,13 +431,15 @@ void OFileSelector::slotViewCheck(const QString &sel) | |||
425 | if( sel == tr("Documents" ) ){ | 431 | if( sel == tr("Documents" ) ){ |
426 | if( m_select == 0 ){ | 432 | if( m_select == 0 ){ |
427 | // autMime? fix cause now we use All and not the current | 433 | // autMime? fix cause now we use All and not the current |
428 | m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), | 434 | // yes currentMime fixes that for us |
435 | QString mime = currentMimeType(); | ||
436 | m_select = new FileSelector(mime, | ||
429 | m_stack, "fileselector", | 437 | m_stack, "fileselector", |
430 | FALSE, FALSE); | 438 | FALSE, FALSE); |
431 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), | 439 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), |
432 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | 440 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); |
433 | //connect to close me and other signals as well | 441 | //connect to close me and other signals as well |
434 | 442 | ||
435 | m_stack->addWidget( m_select, NORMAL ); | 443 | m_stack->addWidget( m_select, NORMAL ); |
436 | } | 444 | } |
437 | m_stack->raiseWidget( NORMAL ); | 445 | m_stack->raiseWidget( NORMAL ); |
@@ -445,17 +453,48 @@ void OFileSelector::slotViewCheck(const QString &sel) | |||
445 | m_selector = EXTENDED_ALL; | 453 | m_selector = EXTENDED_ALL; |
446 | initializeListView(); | 454 | initializeListView(); |
447 | reparse(); | 455 | reparse(); |
448 | m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter | 456 | m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter |
449 | } | 457 | } |
450 | } | 458 | } |
459 | // not yet finished..... | ||
460 | QString OFileSelector::currentMimeType() const{ | ||
461 | QString mime; | ||
462 | QString currentText; | ||
463 | if (m_shChooser ) | ||
464 | currentText = m_mimeCheck->currentText(); | ||
465 | |||
466 | if (tr("All") == currentText ) return QString::null; | ||
467 | else if (currentText.isEmpty() ) { | ||
468 | ; | ||
469 | }else { | ||
470 | QMap<QString, QStringList>::ConstIterator it; | ||
471 | it = m_mimetypes.find( currentText ); | ||
472 | if ( it == m_mimetypes.end() ) { | ||
473 | mime = it.data().join(";"); | ||
474 | }else{ | ||
475 | mime = currentText; | ||
476 | } | ||
477 | } | ||
478 | return mime; | ||
479 | } | ||
451 | void OFileSelector::slotMimeCheck(const QString &mime) | 480 | void OFileSelector::slotMimeCheck(const QString &mime) |
452 | { | 481 | { |
453 | if( m_selector == NORMAL ){ | 482 | if( m_selector == NORMAL ){ |
454 | if( m_autoMime ){ | 483 | //if( m_autoMime ){ |
484 | QString newMimeType; | ||
485 | if (mime != tr("All") ) { | ||
486 | QMap<QString, QStringList>::Iterator it; | ||
487 | it = m_mimetypes.find(mime); | ||
488 | if ( it != m_mimetypes.end() ) { | ||
489 | newMimeType = it.data().join(";"); | ||
490 | }else{ | ||
491 | newMimeType = mime; | ||
492 | } | ||
493 | } | ||
455 | delete m_select; | 494 | delete m_select; |
456 | m_select = new FileSelector( mime == tr("All") ? QString::null : mime, | 495 | m_select = new FileSelector( newMimeType, |
457 | m_stack, "fileselector", | 496 | m_stack, "fileselector", |
458 | FALSE, FALSE); | 497 | FALSE, FALSE); |
459 | 498 | ||
460 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), | 499 | connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ), |
461 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); | 500 | this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) ); |
@@ -463,10 +502,9 @@ void OFileSelector::slotMimeCheck(const QString &mime) | |||
463 | m_stack->addWidget( m_select, NORMAL ); | 502 | m_stack->addWidget( m_select, NORMAL ); |
464 | m_stack->raiseWidget( NORMAL ); | 503 | m_stack->raiseWidget( NORMAL ); |
465 | updateMimes(); | 504 | updateMimes(); |
466 | m_mimeCheck->clear(); | 505 | updateMimeCheck(); |
467 | m_mimeCheck->insertStringList(m_mimetypes ); | ||
468 | m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); | 506 | m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) ); |
469 | } | 507 | //} |
470 | }else{ // others | 508 | }else{ // others |
471 | qWarning("Mime %s", mime.latin1() ); | 509 | qWarning("Mime %s", mime.latin1() ); |
472 | if(m_shChooser ){ | 510 | if(m_shChooser ){ |
@@ -512,7 +550,15 @@ void OFileSelector::init() | |||
512 | 550 | ||
513 | m_stack = new QWidgetStack( this ); | 551 | m_stack = new QWidgetStack( this ); |
514 | if( m_selector == NORMAL ){ | 552 | if( m_selector == NORMAL ){ |
515 | m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"), | 553 | QString mime; |
554 | if (!m_autoMime) { | ||
555 | if (!m_mimetypes.isEmpty() ) { | ||
556 | QMap<QString, QStringList>::Iterator it; | ||
557 | it = m_mimetypes.begin(); // cause we're in the init | ||
558 | mime = it.data().join(";"); | ||
559 | } | ||
560 | } | ||
561 | m_select = new FileSelector(mime, | ||
516 | m_stack, "fileselector", | 562 | m_stack, "fileselector", |
517 | FALSE, FALSE); | 563 | FALSE, FALSE); |
518 | 564 | ||
@@ -545,14 +591,14 @@ void OFileSelector::updateMimes() | |||
545 | { | 591 | { |
546 | if( m_autoMime ){ | 592 | if( m_autoMime ){ |
547 | m_mimetypes.clear(); | 593 | m_mimetypes.clear(); |
548 | m_mimetypes.append( tr("All") ); | 594 | m_mimetypes.insert( tr("All"), QString::null ); |
549 | if( m_selector == NORMAL ){ | 595 | if( m_selector == NORMAL ){ |
550 | DocLnkSet set; | 596 | DocLnkSet set; |
551 | Global::findDocuments(&set, QString::null ); | 597 | Global::findDocuments(&set, QString::null ); |
552 | QListIterator<DocLnk> dit( set.children() ); | 598 | QListIterator<DocLnk> dit( set.children() ); |
553 | for( ; dit.current(); ++dit ){ | 599 | for( ; dit.current(); ++dit ){ |
554 | if( !m_mimetypes.contains( (*dit)->type() ) ) | 600 | if( !m_mimetypes.contains( (*dit)->type() ) ) |
555 | m_mimetypes.append( (*dit)->type() ); | 601 | m_mimetypes.insert( (*dit)->type(), (*dit)->type() ); |
556 | } | 602 | } |
557 | }// else done in reparse | 603 | }// else done in reparse |
558 | } | 604 | } |
@@ -628,7 +674,7 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) | |||
628 | name = info->fileName(); | 674 | name = info->fileName(); |
629 | if( ( m_mode == OPEN && !info->isReadable() )|| | 675 | if( ( m_mode == OPEN && !info->isReadable() )|| |
630 | ( m_mode == SAVE && !info->isWritable() ) ){ | 676 | ( m_mode == SAVE && !info->isWritable() ) ){ |
631 | 677 | ||
632 | locked = true; pix = Resource::loadPixmap("locked"); | 678 | locked = true; pix = Resource::loadPixmap("locked"); |
633 | } | 679 | } |
634 | } | 680 | } |
@@ -657,7 +703,7 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) | |||
657 | name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ; | 703 | name = symlink ? info->fileName() + "->" + info->dirPath(true) + "/" +info->readLink() : info->fileName() ; |
658 | new OFileSelectorItem( m_View, pix, name, | 704 | new OFileSelectorItem( m_View, pix, name, |
659 | info->lastModified().toString(), | 705 | info->lastModified().toString(), |
660 | QString::number( info->size() ), | 706 | QString::number( info->size() ), |
661 | info->dirPath( true ), locked, | 707 | info->dirPath( true ), locked, |
662 | true ); | 708 | true ); |
663 | 709 | ||
@@ -670,8 +716,8 @@ void OFileSelector::delItems() | |||
670 | void OFileSelector::initializeName() | 716 | void OFileSelector::initializeName() |
671 | { | 717 | { |
672 | /** Name Layout Line | 718 | /** Name Layout Line |
673 | * This is the Layout line arranged in | 719 | * This is the Layout line arranged in |
674 | * horizontal way each components | 720 | * horizontal way each components |
675 | * are next to each other | 721 | * are next to each other |
676 | * but we will only do this if | 722 | * but we will only do this if |
677 | * we didn't initialize a while ago. | 723 | * we didn't initialize a while ago. |
@@ -681,6 +727,7 @@ void OFileSelector::initializeName() | |||
681 | m_fnLabel = new QLabel( m_boxName ); | 727 | m_fnLabel = new QLabel( m_boxName ); |
682 | m_fnLabel->setText( tr("Name:") ); | 728 | m_fnLabel->setText( tr("Name:") ); |
683 | m_edit = new QLineEdit( m_boxName ); | 729 | m_edit = new QLineEdit( m_boxName ); |
730 | m_edit->setText( m_name ); | ||
684 | //m_boxName->addWidget( m_fnLabel ); | 731 | //m_boxName->addWidget( m_fnLabel ); |
685 | m_boxName->setMargin( 5 ); | 732 | m_boxName->setMargin( 5 ); |
686 | m_boxName->setSpacing( 8 ); | 733 | m_boxName->setSpacing( 8 ); |
@@ -688,7 +735,7 @@ void OFileSelector::initializeName() | |||
688 | 735 | ||
689 | m_lay->addWidget( m_boxName, 0 ); // add it to the topLevel layout | 736 | m_lay->addWidget( m_boxName, 0 ); // add it to the topLevel layout |
690 | }// else we already initialized | 737 | }// else we already initialized |
691 | // maybe show the components? | 738 | // maybe show the components? |
692 | // | 739 | // |
693 | } | 740 | } |
694 | void OFileSelector::initializeYes() | 741 | void OFileSelector::initializeYes() |
@@ -713,6 +760,24 @@ void OFileSelector::initializeYes() | |||
713 | this, SLOT( slotCancel() ) ); | 760 | this, SLOT( slotCancel() ) ); |
714 | } | 761 | } |
715 | } | 762 | } |
763 | /* | ||
764 | * OK m_mimeCheck is a QComboBox we now want to fill | ||
765 | * out that combobox | ||
766 | * if automime we need to update the mimetypes | ||
767 | */ | ||
768 | void OFileSelector::updateMimeCheck() { | ||
769 | m_mimeCheck->clear(); | ||
770 | if (m_autoMime ) { | ||
771 | //m_mimeCheck->insertItem( tr("All") ); | ||
772 | updateMimes(); | ||
773 | } | ||
774 | |||
775 | QMap<QString, QStringList>::Iterator it; | ||
776 | for (it = m_mimetypes.begin(); it != m_mimetypes.end(); ++it ) { | ||
777 | m_mimeCheck->insertItem( it.key() ); | ||
778 | } | ||
779 | } | ||
780 | |||
716 | void OFileSelector::initializeChooser() | 781 | void OFileSelector::initializeChooser() |
717 | { | 782 | { |
718 | if( m_boxView == 0 ){ | 783 | if( m_boxView == 0 ){ |
@@ -725,12 +790,8 @@ void OFileSelector::initializeChooser() | |||
725 | m_viewCheck->insertItem( tr("Documents") ); | 790 | m_viewCheck->insertItem( tr("Documents") ); |
726 | m_viewCheck->insertItem( tr("Files") ); | 791 | m_viewCheck->insertItem( tr("Files") ); |
727 | m_viewCheck->insertItem( tr("All Files") ); | 792 | m_viewCheck->insertItem( tr("All Files") ); |
728 | if(!m_autoMime ) | 793 | updateMimeCheck(); |
729 | m_mimeCheck->insertItem(m_mimetypes.join(",") ); | 794 | |
730 | else{ | ||
731 | updateMimes(); | ||
732 | m_mimeCheck->insertStringList( m_mimetypes ); | ||
733 | } | ||
734 | connect( m_viewCheck, SIGNAL( activated(const QString & ) ), | 795 | connect( m_viewCheck, SIGNAL( activated(const QString & ) ), |
735 | this, SLOT( slotViewCheck(const QString & ) ) ); | 796 | this, SLOT( slotViewCheck(const QString & ) ) ); |
736 | connect( m_mimeCheck, SIGNAL( activated(const QString & ) ), | 797 | connect( m_mimeCheck, SIGNAL( activated(const QString & ) ), |
@@ -746,11 +807,11 @@ void OFileSelector::initializeListView() | |||
746 | m_boxToolbar = new QHBox( m_pseudo ); | 807 | m_boxToolbar = new QHBox( m_pseudo ); |
747 | m_boxToolbar->setSpacing(0 ); // next to each other please | 808 | m_boxToolbar->setSpacing(0 ); // next to each other please |
748 | 809 | ||
749 | // toolbar members | 810 | // toolbar members |
750 | { | 811 | { |
751 | // location QComboBox | 812 | // location QComboBox |
752 | m_location = new QComboBox( m_boxToolbar ); | 813 | m_location = new QComboBox( m_boxToolbar ); |
753 | m_location->setEditable( TRUE ); | 814 | m_location->setEditable( TRUE ); |
754 | m_location->setDuplicatesEnabled( FALSE ); | 815 | m_location->setDuplicatesEnabled( FALSE ); |
755 | connect( m_location, SIGNAL(activated(const QString &) ), | 816 | connect( m_location, SIGNAL(activated(const QString &) ), |
756 | this, SLOT( slotLocationActivated(const QString &) ) ); | 817 | this, SLOT( slotLocationActivated(const QString &) ) ); |
@@ -831,13 +892,13 @@ void OFileSelector::initializeListView() | |||
831 | connect(m_View, SIGNAL(currentChanged(QListViewItem *) ), | 892 | connect(m_View, SIGNAL(currentChanged(QListViewItem *) ), |
832 | this, SLOT(slotCurrentChanged(QListViewItem * ) ) ); | 893 | this, SLOT(slotCurrentChanged(QListViewItem * ) ) ); |
833 | 894 | ||
834 | connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ), | 895 | connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ), |
835 | this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); | 896 | this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) ); |
836 | 897 | ||
837 | connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), | 898 | connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )), |
838 | this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); | 899 | this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) ); |
839 | 900 | ||
840 | m_pseudoLayout->addWidget( m_View, 288 ); | 901 | m_pseudoLayout->addWidget( m_View, 288 ); |
841 | m_stack->addWidget( m_pseudo, EXTENDED ); | 902 | m_stack->addWidget( m_pseudo, EXTENDED ); |
842 | } | 903 | } |
843 | } | 904 | } |
@@ -876,7 +937,12 @@ bool OFileSelector::compliesMime( const QString &path, const QString &mime ) | |||
876 | return true; | 937 | return true; |
877 | return false; | 938 | return false; |
878 | } | 939 | } |
940 | /* check if the mimetype in mime | ||
941 | * complies with the one which is current | ||
942 | */ | ||
943 | bool OFileSelector::compliesMime( const QString& mime ) { | ||
879 | 944 | ||
945 | } | ||
880 | void OFileSelector::slotFileSelected( const QString &string ) | 946 | void OFileSelector::slotFileSelected( const QString &string ) |
881 | { | 947 | { |
882 | if( m_shLne ) | 948 | if( m_shLne ) |
@@ -1050,22 +1116,22 @@ void OFileSelector::reparse() | |||
1050 | MimeType type( fi->absFilePath() ); | 1116 | MimeType type( fi->absFilePath() ); |
1051 | if( !m_mimetypes.contains( type.id() ) ){ | 1117 | if( !m_mimetypes.contains( type.id() ) ){ |
1052 | //qWarning("Type %s", type.id().latin1() ); | 1118 | //qWarning("Type %s", type.id().latin1() ); |
1053 | m_mimetypes.append( type.id() ); | 1119 | m_mimetypes.insert( type.id(), type.id() ); |
1054 | } | 1120 | } |
1055 | 1121 | ||
1056 | ++it; | 1122 | ++it; |
1057 | } | 1123 | } |
1058 | // add them to the chooser | 1124 | // add them to the chooser |
1059 | m_mimeCheck->insertItem( tr("All") ); | 1125 | updateMimeCheck(); |
1060 | m_mimeCheck->insertStringList( m_mimetypes ); | ||
1061 | m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); | 1126 | m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); |
1062 | currentMimeType = m_mimeCheck->currentText(); | 1127 | currentMimeType = m_mimeCheck->currentText(); |
1063 | } | 1128 | } |
1064 | }else { // no autoMime | 1129 | }else { // no autoMime |
1065 | currentMimeType = m_mimetypes.join(";"); | 1130 | // let the mimetype be set from out side the m_mimeCheck FEATURE |
1131 | |||
1066 | if( m_shChooser ){ | 1132 | if( m_shChooser ){ |
1067 | m_mimeCheck->clear(); | 1133 | currentMimeType = m_mimeCheck->currentText(); |
1068 | m_mimeCheck->insertItem(m_mimetypes.join(",") ); | 1134 | updateMimeCheck(); |
1069 | } | 1135 | } |
1070 | } | 1136 | } |
1071 | // now we got our mimetypes we can add the files | 1137 | // now we got our mimetypes we can add the files |
@@ -1075,7 +1141,7 @@ void OFileSelector::reparse() | |||
1075 | int sort; | 1141 | int sort; |
1076 | if ( m_case ) | 1142 | if ( m_case ) |
1077 | sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed); | 1143 | sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed); |
1078 | else | 1144 | else |
1079 | sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); | 1145 | sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); |
1080 | dir.setSorting( sort ); | 1146 | dir.setSorting( sort ); |
1081 | 1147 | ||
@@ -1125,7 +1191,7 @@ void OFileSelector::reparse() | |||
1125 | //qWarning( "%s", fi->fileName().latin1() ); | 1191 | //qWarning( "%s", fi->fileName().latin1() ); |
1126 | ++it; | 1192 | ++it; |
1127 | } // of while loop | 1193 | } // of while loop |
1128 | m_View->sort(); | 1194 | m_View->sort(); |
1129 | if( m_shTool ){ | 1195 | if( m_shTool ){ |
1130 | m_location->insertItem( m_currentDir ); | 1196 | m_location->insertItem( m_currentDir ); |
1131 | 1197 | ||
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h index 47697b9..f2d5f84 100644 --- a/libopie/ofileselector.h +++ b/libopie/ofileselector.h | |||
@@ -1,5 +1,5 @@ | |||
1 | /* | 1 | /* |
2 | This is based on code and idea of | 2 | This is based on code and ideas of |
3 | L. J. Potter ljp@llornkcor.com | 3 | L. J. Potter ljp@llornkcor.com |
4 | Thanks a lot | 4 | Thanks a lot |
5 | 5 | ||
@@ -7,24 +7,24 @@ | |||
7 | =. This file is part of the OPIE Project | 7 | =. This file is part of the OPIE Project |
8 | .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> | 8 | .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org> |
9 | .>+-= | 9 | .>+-= |
10 | _;:, .> :=|. This library is free software; you can | 10 | _;:, .> :=|. This library is free software; you can |
11 | .> <`_, > . <= redistribute it and/or modify it under | 11 | .> <`_, > . <= redistribute it and/or modify it under |
12 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public | 12 | :`=1 )Y*s>-.-- : the terms of the GNU Library General Public |
13 | .="- .-=="i, .._ License as published by the Free Software | 13 | .="- .-=="i, .._ License as published by the Free Software |
14 | - . .-<_> .<> Foundation; either version 2 of the License, | 14 | - . .-<_> .<> Foundation; either version 2 of the License, |
15 | ._= =} : or (at your option) any later version. | 15 | ._= =} : or (at your option) any later version. |
16 | .%`+i> _;_. | 16 | .%`+i> _;_. |
17 | .i_,=:_. -<s. This library is distributed in the hope that | 17 | .i_,=:_. -<s. This library is distributed in the hope that |
18 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; | 18 | + . -:. = it will be useful, but WITHOUT ANY WARRANTY; |
19 | : .. .:, . . . without even the implied warranty of | 19 | : .. .:, . . . without even the implied warranty of |
20 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A | 20 | =_ + =;=|` MERCHANTABILITY or FITNESS FOR A |
21 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU | 21 | _.=:. : :=>`: PARTICULAR PURPOSE. See the GNU |
22 | ..}^=.= = ; Library General Public License for more | 22 | ..}^=.= = ; Library General Public License for more |
23 | ++= -. .` .: details. | 23 | ++= -. .` .: details. |
24 | : = ...= . :.=- | 24 | : = ...= . :.=- |
25 | -. .:....=;==+<; You should have received a copy of the GNU | 25 | -. .:....=;==+<; You should have received a copy of the GNU |
26 | -_. . . )=. = Library General Public License along with | 26 | -_. . . )=. = Library General Public License along with |
27 | -- :-=` this library; see the file COPYING.LIB. | 27 | -- :-=` this library; see the file COPYING.LIB. |
28 | If not, write to the Free Software Foundation, | 28 | If not, write to the Free Software Foundation, |
29 | Inc., 59 Temple Place - Suite 330, | 29 | Inc., 59 Temple Place - Suite 330, |
30 | Boston, MA 02111-1307, USA. | 30 | Boston, MA 02111-1307, USA. |
@@ -43,11 +43,12 @@ | |||
43 | 43 | ||
44 | #include <qpe/applnk.h> | 44 | #include <qpe/applnk.h> |
45 | #include <qlistview.h> | 45 | #include <qlistview.h> |
46 | |||
46 | /** This is OPIEs FileDialog Widget. You can use it | 47 | /** This is OPIEs FileDialog Widget. You can use it |
47 | * as a dropin replacement of the fileselector and | 48 | * as a dropin replacement of the fileselector and |
48 | * or use any of the new features. | 49 | * or use any of the new features. |
49 | * This is also a complete FileSave and FileLoad widget | 50 | * This is also a complete FileSave and FileLoad widget |
50 | * If you look for a Dialog check OFileDialog | 51 | * If you look for a Dialog check OFileDialog |
51 | * | 52 | * |
52 | */ | 53 | */ |
53 | class DocLnk; | 54 | class DocLnk; |
@@ -64,22 +65,55 @@ class QVBoxLayout; | |||
64 | class QPopupMenu; | 65 | class QPopupMenu; |
65 | class QFileInfo; | 66 | class QFileInfo; |
66 | class QHBox; | 67 | class QHBox; |
67 | // | 68 | // |
68 | 69 | ||
70 | typedef QMap< QString, QStringList> MimeTypes; | ||
69 | 71 | ||
70 | class OFileSelector : public QWidget { | 72 | class OFileSelector : public QWidget { |
71 | Q_OBJECT | 73 | Q_OBJECT |
72 | public: | 74 | public: |
75 | /** | ||
76 | * The mode of the file selector | ||
77 | * Either open, save, fileselector or dir browsing mode | ||
78 | * | ||
79 | */ | ||
73 | enum Mode {OPEN=1, SAVE=2, FILESELECTOR=4, DIR=8 }; | 80 | enum Mode {OPEN=1, SAVE=2, FILESELECTOR=4, DIR=8 }; |
81 | |||
82 | /** | ||
83 | * Selector. Either NORMAL for the one shipped with | ||
84 | * libqpe or EXTENDED. for the EXTENDED | ||
85 | * EXTENDED_ALL also shows 'hidden' files | ||
86 | */ | ||
74 | enum Selector{NORMAL=0, EXTENDED = 1, EXTENDED_ALL =2 }; | 87 | enum Selector{NORMAL=0, EXTENDED = 1, EXTENDED_ALL =2 }; |
88 | |||
89 | /** | ||
90 | * This is reserved for futrue views | ||
91 | */ | ||
75 | enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 }; | 92 | enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 }; |
76 | 93 | ||
77 | OFileSelector(QWidget *wid, int mode, int selector, | 94 | /** |
95 | * A c'tor which should be used for advanced mode | ||
96 | * @param wid the parent | ||
97 | * @param mode the Mode of the Selector | ||
98 | * @param selector the current View of the Selector | ||
99 | * @param dirName in which dir to start | ||
100 | * @param fileName a proposed filename | ||
101 | * @param mimetypes A list of mimetypes \ | ||
102 | * QString is for a identifier name like "Text files" | ||
103 | * the coresponding QStringList is used for the mimetypes | ||
104 | * if empty it'll fill the list of mimetypes depending | ||
105 | * on the content of the current directory | ||
106 | */ | ||
107 | |||
108 | OFileSelector(QWidget *wid, int mode, int selector, | ||
78 | const QString &dirName, | 109 | const QString &dirName, |
79 | const QString &fileName = QString::null, | 110 | const QString &fileName = QString::null, |
80 | const QStringList &mimetypes = QStringList() ); | 111 | const MimeTypes &mimetypes = MimeTypes() ); |
81 | 112 | ||
82 | 113 | ||
114 | /** | ||
115 | * This is a QPE compatible c'tor | ||
116 | */ | ||
83 | OFileSelector(const QString &mimeFilter, QWidget *parent, | 117 | OFileSelector(const QString &mimeFilter, QWidget *parent, |
84 | const char *name, bool newVisible = TRUE, | 118 | const char *name, bool newVisible = TRUE, |
85 | bool closeVisible = FALSE ); | 119 | bool closeVisible = FALSE ); |
@@ -130,7 +164,7 @@ class OFileSelector : public QWidget { | |||
130 | int mode()const { return m_mode; }; | 164 | int mode()const { return m_mode; }; |
131 | int selector()const { return m_selector; }; | 165 | int selector()const { return m_selector; }; |
132 | void setSelector( int ); | 166 | void setSelector( int ); |
133 | 167 | ||
134 | bool showPopup()const { return m_showPopup; }; | 168 | bool showPopup()const { return m_showPopup; }; |
135 | void setShowPopup( bool pop ) { m_showPopup = pop; }; | 169 | void setShowPopup( bool pop ) { m_showPopup = pop; }; |
136 | void setPopupMenu( QPopupMenu * ); | 170 | void setPopupMenu( QPopupMenu * ); |
@@ -175,7 +209,7 @@ class OFileSelector : public QWidget { | |||
175 | private: | 209 | private: |
176 | void init(); | 210 | void init(); |
177 | void updateMimes(); | 211 | void updateMimes(); |
178 | 212 | ||
179 | protected: | 213 | protected: |
180 | 214 | ||
181 | private: | 215 | private: |
@@ -190,7 +224,8 @@ class OFileSelector : public QWidget { | |||
190 | 224 | ||
191 | QString m_currentDir; | 225 | QString m_currentDir; |
192 | QString m_name; | 226 | QString m_name; |
193 | QStringList m_mimetypes; | 227 | // QStringList m_mimetypes; |
228 | QMap<QString, QStringList> m_mimetypes; | ||
194 | 229 | ||
195 | FileSelector *m_select; | 230 | FileSelector *m_select; |
196 | QWidgetStack *m_stack; | 231 | QWidgetStack *m_stack; |
@@ -232,12 +267,22 @@ class OFileSelector : public QWidget { | |||
232 | void initializeListView(); | 267 | void initializeListView(); |
233 | void initializePerm(); | 268 | void initializePerm(); |
234 | void initPics(); | 269 | void initPics(); |
235 | bool compliesMime(const QString &path, const QString &mime); | 270 | bool compliesMime(const QString &path, |
236 | 271 | const QString &mime); | |
272 | bool compliesMime(const QString& mime ); | ||
273 | /** | ||
274 | * Updates the QComboBox with the current mimetypes | ||
275 | */ | ||
276 | void updateMimeCheck(); | ||
277 | |||
278 | /** | ||
279 | * Returns the current mimetype | ||
280 | */ | ||
281 | QString currentMimeType()const; | ||
237 | class OFileSelectorPrivate; | 282 | class OFileSelectorPrivate; |
238 | OFileSelectorPrivate *d; | 283 | OFileSelectorPrivate *d; |
239 | static QMap<QString,QPixmap> *m_pixmaps; | 284 | static QMap<QString,QPixmap> *m_pixmaps; |
240 | 285 | ||
241 | private slots: | 286 | private slots: |
242 | void slotFileSelected(const QString & ); // not really meant to be a slot | 287 | void slotFileSelected(const QString & ); // not really meant to be a slot |
243 | void slotFileBridgeSelected( const DocLnk & ); | 288 | void slotFileBridgeSelected( const DocLnk & ); |