summaryrefslogtreecommitdiff
authorzecke <zecke>2002-06-26 18:01:53 (UTC)
committer zecke <zecke>2002-06-26 18:01:53 (UTC)
commit76f87a51800511fe108edbcd14d4dd40ead6f391 (patch) (side-by-side diff)
tree1d1b3cf7c3bbd98d294cac738b3bfa277964b32d
parent125dc1fe52d7a3c8be1b955c79d729cc935c8b6d (diff)
downloadopie-76f87a51800511fe108edbcd14d4dd40ead6f391.zip
opie-76f87a51800511fe108edbcd14d4dd40ead6f391.tar.gz
opie-76f87a51800511fe108edbcd14d4dd40ead6f391.tar.bz2
Improve mimetype handling
API is now fixed 2 Bugs outstanding though
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofiledialog.cc18
-rw-r--r--libopie/ofiledialog.h18
-rw-r--r--libopie/ofileselector.cc160
-rw-r--r--libopie/ofileselector.h77
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
@@ -3,5 +3,5 @@
             .=l. Copyright (c) 2002 <>
           .>+-=
- _;:,     .>    :=|. This library is free software; you can
+ _;:,     .>    :=|. This library is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
@@ -9,6 +9,6 @@
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
-    .%`+i>       _;_.
-    .i_,=:_.      -<s. This library is distributed in the hope that
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This library is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
@@ -17,8 +17,8 @@
..}^=.=       =       ; Library General Public License for more
++=   -.     .`     .: details.
- :     =  ...= . :.=-
+ :     =  ...= . :.=-
 -.   .:....=;==+<; You should have received a copy of the GNU
  -_. . .   )=.  = Library General Public License along with
-    --        :-=` this library; see the file COPYING.LIB.
+    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
@@ -38,5 +38,5 @@ OFileDialog::OFileDialog(const QString &caption,
const QString &dirName,
const QString &fileName,
- const QStringList &mimetypes )
+ const QMap<QString,QStringList>& mimetypes )
: QDialog( wid, "OFileDialog", true )
{
@@ -58,5 +58,5 @@ OFileDialog::OFileDialog(const QString &caption,
this, SLOT(slotDirSelected(const QString &) ) );
-
+
file->setYesCancelVisible( false ); // relayout
}
@@ -76,5 +76,5 @@ QString OFileDialog::getOpenFileName(int selector,
const QString &startDir,
const QString &file,
- const QStringList &mimes,
+ const MimeTypes &mimes,
QWidget *wid,
const QString &caption )
@@ -92,5 +92,5 @@ QString OFileDialog::getSaveFileName(int selector,
const QString &startDir,
const QString &file,
- const QStringList &mimes,
+ const MimeTypes &mimes,
QWidget *wid,
const QString &caption )
diff --git a/libopie/ofiledialog.h b/libopie/ofiledialog.h
index 40d147e..e14253c 100644
--- a/libopie/ofiledialog.h
+++ b/libopie/ofiledialog.h
@@ -3,5 +3,5 @@
             .=l. Copyright (c) 2002 zecke <zecke@handhelds.org>
           .>+-=
- _;:,     .>    :=|. This library is free software; you can
+ _;:,     .>    :=|. This library is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
@@ -9,6 +9,6 @@
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
-    .%`+i>       _;_.
-    .i_,=:_.      -<s. This library is distributed in the hope that
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This library is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
@@ -17,8 +17,8 @@
..}^=.=       =       ; Library General Public License for more
++=   -.     .`     .: details.
- :     =  ...= . :.=-
+ :     =  ...= . :.=-
 -.   .:....=;==+<; You should have received a copy of the GNU
  -_. . .   )=.  = Library General Public License along with
-    --        :-=` this library; see the file COPYING.LIB.
+    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
@@ -40,7 +40,7 @@ class OFileDialog : public QDialog {
OFileDialog(const QString &caption,
QWidget *, int mode, int selector,
- const QString &dirName,
+ const QString &dirName,
const QString &fileName = QString::null,
- const QStringList &mimetypes = QStringList() );
+ const MimeTypes &mimetypes = MimeTypes() );
QString mimetype() const;
QString fileName() const;
@@ -51,5 +51,5 @@ class OFileDialog : public QDialog {
const QString& startDir = QString::null,
const QString &fileName = QString::null,
- const QStringList& mimefilter = QStringList(),
+ const MimeTypes& mime = MimeTypes(),
QWidget *wid = 0,
const QString &caption = QString::null );
@@ -58,5 +58,5 @@ class OFileDialog : public QDialog {
const QString& startDir = QString::null,
const QString& fileName = QString::null,
- const QStringList& mimefilter = QStringList(),
+ const MimeTypes& mimefilter = MimeTypes(),
QWidget *wid = 0,
const QString &caption = QString::null );
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc
index 7a67ab2..6c59f89 100644
--- a/libopie/ofileselector.cc
+++ b/libopie/ofileselector.cc
@@ -100,9 +100,11 @@ namespace {
OFileSelector::OFileSelector( QWidget *wid, int mode, int selector,
const QString &dirName,
- const QString &fileName,
- const QStringList &mimeTypes )
+ const QString &fileName,
+ const QMap<QString,QStringList>& mimeTypes)
: QWidget( wid, "OFileSelector")
{
m_mimetypes = mimeTypes;
+ if (mode == SAVE )
+ m_name = fileName;
initVars();
m_mode = mode;
@@ -110,5 +112,5 @@ OFileSelector::OFileSelector( QWidget *wid, int mode, int selector,
m_currentDir = dirName;
init();
-QTimer::singleShot(6*1000, this, SLOT( slotTest() ) );
+ //QTimer::singleShot(6*1000, this, SLOT( slotTest() ) );
}
@@ -118,7 +120,10 @@ OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent,
: QWidget( parent, name )
{
- m_mimetypes = QStringList::split(";", mimeFilter );
+ if (!mimeFilter.isEmpty() ) {
+ QStringList list = QStringList::split(";", mimeFilter );
+ m_mimetypes.insert(mimeFilter, list );
+ }
initVars();
- m_currentDir = QPEApplication::documentDir();
+ m_currentDir = QPEApplication::documentDir();
m_mode = OPEN;
m_selector = NORMAL;
@@ -130,5 +135,5 @@ OFileSelector::OFileSelector(const QString &mimeFilter, QWidget *parent,
init();
-
+
}
@@ -136,4 +141,5 @@ OFileSelector::~OFileSelector()
{
+
}
@@ -144,6 +150,6 @@ void OFileSelector::setNewVisible( bool visible )
delete m_select;
// we need to initialize but keep the selected mimetype
- QString mime = m_mimeCheck == 0 ? QString::null : m_mimeCheck->currentText() ;
- m_select = new FileSelector( m_autoMime ? mime : m_mimetypes.join(";") ,
+ QString mime = currentMimeType();
+ m_select = new FileSelector( mime ,
m_stack, "fileselector",
m_shNew, m_shClose);
@@ -342,5 +348,5 @@ QStringList OFileSelector::selectedNames()const
}
/** If mode is set to the Dir selection this will return the selected path.
- *
+ *
*
*/
@@ -365,5 +371,5 @@ QString OFileSelector::directory()const
if( m_selector == NORMAL )
return QPEApplication::documentDir();
-
+
return QDir(m_currentDir).absPath();
}
@@ -426,5 +432,7 @@ void OFileSelector::slotViewCheck(const QString &sel)
if( m_select == 0 ){
// autMime? fix cause now we use All and not the current
- m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"),
+ // yes currentMime fixes that for us
+ QString mime = currentMimeType();
+ m_select = new FileSelector(mime,
m_stack, "fileselector",
FALSE, FALSE);
@@ -432,5 +440,5 @@ void OFileSelector::slotViewCheck(const QString &sel)
this, SLOT( slotFileBridgeSelected(const DocLnk & ) ) );
//connect to close me and other signals as well
-
+
m_stack->addWidget( m_select, NORMAL );
}
@@ -446,15 +454,46 @@ void OFileSelector::slotViewCheck(const QString &sel)
initializeListView();
reparse();
- m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter
+ m_stack->raiseWidget( EXTENDED ); // same widget other QFileFilter
}
}
+// not yet finished.....
+QString OFileSelector::currentMimeType() const{
+ QString mime;
+ QString currentText;
+ if (m_shChooser )
+ currentText = m_mimeCheck->currentText();
+
+ if (tr("All") == currentText ) return QString::null;
+ else if (currentText.isEmpty() ) {
+ ;
+ }else {
+ QMap<QString, QStringList>::ConstIterator it;
+ it = m_mimetypes.find( currentText );
+ if ( it == m_mimetypes.end() ) {
+ mime = it.data().join(";");
+ }else{
+ mime = currentText;
+ }
+ }
+ return mime;
+}
void OFileSelector::slotMimeCheck(const QString &mime)
{
if( m_selector == NORMAL ){
- if( m_autoMime ){
+ //if( m_autoMime ){
+ QString newMimeType;
+ if (mime != tr("All") ) {
+ QMap<QString, QStringList>::Iterator it;
+ it = m_mimetypes.find(mime);
+ if ( it != m_mimetypes.end() ) {
+ newMimeType = it.data().join(";");
+ }else{
+ newMimeType = mime;
+ }
+ }
delete m_select;
- m_select = new FileSelector( mime == tr("All") ? QString::null : mime,
- m_stack, "fileselector",
- FALSE, FALSE);
+ m_select = new FileSelector( newMimeType,
+ m_stack, "fileselector",
+ FALSE, FALSE);
connect(m_select, SIGNAL(fileSelected( const DocLnk & ) ),
@@ -464,8 +503,7 @@ void OFileSelector::slotMimeCheck(const QString &mime)
m_stack->raiseWidget( NORMAL );
updateMimes();
- m_mimeCheck->clear();
- m_mimeCheck->insertStringList(m_mimetypes );
+ updateMimeCheck();
m_mimeCheck->setCurrentItem(indexByString( m_mimeCheck, mime) );
- }
+ //}
}else{ // others
qWarning("Mime %s", mime.latin1() );
@@ -513,5 +551,13 @@ void OFileSelector::init()
m_stack = new QWidgetStack( this );
if( m_selector == NORMAL ){
- m_select = new FileSelector(m_autoMime ? QString::null : m_mimetypes.join(";"),
+ QString mime;
+ if (!m_autoMime) {
+ if (!m_mimetypes.isEmpty() ) {
+ QMap<QString, QStringList>::Iterator it;
+ it = m_mimetypes.begin(); // cause we're in the init
+ mime = it.data().join(";");
+ }
+ }
+ m_select = new FileSelector(mime,
m_stack, "fileselector",
FALSE, FALSE);
@@ -546,5 +592,5 @@ void OFileSelector::updateMimes()
if( m_autoMime ){
m_mimetypes.clear();
- m_mimetypes.append( tr("All") );
+ m_mimetypes.insert( tr("All"), QString::null );
if( m_selector == NORMAL ){
DocLnkSet set;
@@ -553,5 +599,5 @@ void OFileSelector::updateMimes()
for( ; dit.current(); ++dit ){
if( !m_mimetypes.contains( (*dit)->type() ) )
- m_mimetypes.append( (*dit)->type() );
+ m_mimetypes.insert( (*dit)->type(), (*dit)->type() );
}
}// else done in reparse
@@ -629,5 +675,5 @@ void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink)
if( ( m_mode == OPEN && !info->isReadable() )||
( m_mode == SAVE && !info->isWritable() ) ){
-
+
locked = true; pix = Resource::loadPixmap("locked");
}
@@ -658,5 +704,5 @@ void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
new OFileSelectorItem( m_View, pix, name,
info->lastModified().toString(),
- QString::number( info->size() ),
+ QString::number( info->size() ),
info->dirPath( true ), locked,
true );
@@ -671,6 +717,6 @@ void OFileSelector::initializeName()
{
/** Name Layout Line
- * This is the Layout line arranged in
- * horizontal way each components
+ * This is the Layout line arranged in
+ * horizontal way each components
* are next to each other
* but we will only do this if
@@ -682,4 +728,5 @@ void OFileSelector::initializeName()
m_fnLabel->setText( tr("Name:") );
m_edit = new QLineEdit( m_boxName );
+ m_edit->setText( m_name );
//m_boxName->addWidget( m_fnLabel );
m_boxName->setMargin( 5 );
@@ -689,5 +736,5 @@ void OFileSelector::initializeName()
m_lay->addWidget( m_boxName, 0 ); // add it to the topLevel layout
}// else we already initialized
- // maybe show the components?
+ // maybe show the components?
//
}
@@ -714,4 +761,22 @@ void OFileSelector::initializeYes()
}
}
+/*
+ * OK m_mimeCheck is a QComboBox we now want to fill
+ * out that combobox
+ * if automime we need to update the mimetypes
+ */
+void OFileSelector::updateMimeCheck() {
+ m_mimeCheck->clear();
+ if (m_autoMime ) {
+ //m_mimeCheck->insertItem( tr("All") );
+ updateMimes();
+ }
+
+ QMap<QString, QStringList>::Iterator it;
+ for (it = m_mimetypes.begin(); it != m_mimetypes.end(); ++it ) {
+ m_mimeCheck->insertItem( it.key() );
+ }
+}
+
void OFileSelector::initializeChooser()
{
@@ -726,10 +791,6 @@ void OFileSelector::initializeChooser()
m_viewCheck->insertItem( tr("Files") );
m_viewCheck->insertItem( tr("All Files") );
- if(!m_autoMime )
- m_mimeCheck->insertItem(m_mimetypes.join(",") );
- else{
- updateMimes();
- m_mimeCheck->insertStringList( m_mimetypes );
- }
+ updateMimeCheck();
+
connect( m_viewCheck, SIGNAL( activated(const QString & ) ),
this, SLOT( slotViewCheck(const QString & ) ) );
@@ -747,9 +808,9 @@ void OFileSelector::initializeListView()
m_boxToolbar->setSpacing(0 ); // next to each other please
- // toolbar members
+ // toolbar members
{
// location QComboBox
m_location = new QComboBox( m_boxToolbar );
- m_location->setEditable( TRUE );
+ m_location->setEditable( TRUE );
m_location->setDuplicatesEnabled( FALSE );
connect( m_location, SIGNAL(activated(const QString &) ),
@@ -832,11 +893,11 @@ void OFileSelector::initializeListView()
this, SLOT(slotCurrentChanged(QListViewItem * ) ) );
- connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ),
+ connect(m_View, SIGNAL(mouseButtonClicked(int, QListViewItem*, const QPoint &, int) ),
this, SLOT(slotClicked( int, QListViewItem *, const QPoint &, int) ) );
- connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )),
+ connect(m_View, SIGNAL(mouseButtonPressed(int, QListViewItem *, const QPoint &, int )),
this, SLOT(slotRightButton(int, QListViewItem *, const QPoint &, int ) ) );
- m_pseudoLayout->addWidget( m_View, 288 );
+ m_pseudoLayout->addWidget( m_View, 288 );
m_stack->addWidget( m_pseudo, EXTENDED );
}
@@ -877,5 +938,10 @@ bool OFileSelector::compliesMime( const QString &path, const QString &mime )
return false;
}
+/* check if the mimetype in mime
+ * complies with the one which is current
+ */
+bool OFileSelector::compliesMime( const QString& mime ) {
+}
void OFileSelector::slotFileSelected( const QString &string )
{
@@ -1051,5 +1117,5 @@ void OFileSelector::reparse()
if( !m_mimetypes.contains( type.id() ) ){
//qWarning("Type %s", type.id().latin1() );
- m_mimetypes.append( type.id() );
+ m_mimetypes.insert( type.id(), type.id() );
}
@@ -1057,14 +1123,14 @@ void OFileSelector::reparse()
}
// add them to the chooser
- m_mimeCheck->insertItem( tr("All") );
- m_mimeCheck->insertStringList( m_mimetypes );
+ updateMimeCheck();
m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) );
currentMimeType = m_mimeCheck->currentText();
}
}else { // no autoMime
- currentMimeType = m_mimetypes.join(";");
+ // let the mimetype be set from out side the m_mimeCheck FEATURE
+
if( m_shChooser ){
- m_mimeCheck->clear();
- m_mimeCheck->insertItem(m_mimetypes.join(",") );
+ currentMimeType = m_mimeCheck->currentText();
+ updateMimeCheck();
}
}
@@ -1076,5 +1142,5 @@ void OFileSelector::reparse()
if ( m_case )
sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed);
- else
+ else
sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed);
dir.setSorting( sort );
@@ -1126,5 +1192,5 @@ void OFileSelector::reparse()
++it;
} // of while loop
- m_View->sort();
+ m_View->sort();
if( m_shTool ){
m_location->insertItem( m_currentDir );
diff --git a/libopie/ofileselector.h b/libopie/ofileselector.h
index 47697b9..f2d5f84 100644
--- a/libopie/ofileselector.h
+++ b/libopie/ofileselector.h
@@ -1,4 +1,4 @@
/*
- This is based on code and idea of
+ This is based on code and ideas of
L. J. Potter ljp@llornkcor.com
Thanks a lot
@@ -8,5 +8,5 @@
             .=l. Copyright (c) 2002 Holger Freyther <zecke@handhelds.org>
           .>+-=
- _;:,     .>    :=|. This library is free software; you can
+ _;:,     .>    :=|. This library is free software; you can
.> <`_,   >  .   <= redistribute it and/or modify it under
:`=1 )Y*s>-.--   : the terms of the GNU Library General Public
@@ -14,6 +14,6 @@
 - .   .-<_>     .<> Foundation; either version 2 of the License,
     ._= =}       : or (at your option) any later version.
-    .%`+i>       _;_.
-    .i_,=:_.      -<s. This library is distributed in the hope that
+    .%`+i>       _;_.
+    .i_,=:_.      -<s. This library is distributed in the hope that
     +  .  -:.       = it will be useful, but WITHOUT ANY WARRANTY;
    : ..    .:,     . . . without even the implied warranty of
@@ -22,8 +22,8 @@
..}^=.=       =       ; Library General Public License for more
++=   -.     .`     .: details.
- :     =  ...= . :.=-
+ :     =  ...= . :.=-
 -.   .:....=;==+<; You should have received a copy of the GNU
  -_. . .   )=.  = Library General Public License along with
-    --        :-=` this library; see the file COPYING.LIB.
+    --        :-=` this library; see the file COPYING.LIB.
If not, write to the Free Software Foundation,
Inc., 59 Temple Place - Suite 330,
@@ -44,9 +44,10 @@
#include <qpe/applnk.h>
#include <qlistview.h>
+
/** This is OPIEs FileDialog Widget. You can use it
* as a dropin replacement of the fileselector and
* or use any of the new features.
* This is also a complete FileSave and FileLoad widget
- * If you look for a Dialog check OFileDialog
+ * If you look for a Dialog check OFileDialog
*
*/
@@ -65,20 +66,53 @@ class QPopupMenu;
class QFileInfo;
class QHBox;
-//
+//
+typedef QMap< QString, QStringList> MimeTypes;
class OFileSelector : public QWidget {
Q_OBJECT
public:
+ /**
+ * The mode of the file selector
+ * Either open, save, fileselector or dir browsing mode
+ *
+ */
enum Mode {OPEN=1, SAVE=2, FILESELECTOR=4, DIR=8 };
+
+ /**
+ * Selector. Either NORMAL for the one shipped with
+ * libqpe or EXTENDED. for the EXTENDED
+ * EXTENDED_ALL also shows 'hidden' files
+ */
enum Selector{NORMAL=0, EXTENDED = 1, EXTENDED_ALL =2 };
+
+ /**
+ * This is reserved for futrue views
+ */
enum View { DIRS = 1, FILES = 2, TREE = 4, ICON = 8 };
- OFileSelector(QWidget *wid, int mode, int selector,
+ /**
+ * A c'tor which should be used for advanced mode
+ * @param wid the parent
+ * @param mode the Mode of the Selector
+ * @param selector the current View of the Selector
+ * @param dirName in which dir to start
+ * @param fileName a proposed filename
+ * @param mimetypes A list of mimetypes \
+ * QString is for a identifier name like "Text files"
+ * the coresponding QStringList is used for the mimetypes
+ * if empty it'll fill the list of mimetypes depending
+ * on the content of the current directory
+ */
+
+ OFileSelector(QWidget *wid, int mode, int selector,
const QString &dirName,
const QString &fileName = QString::null,
- const QStringList &mimetypes = QStringList() );
+ const MimeTypes &mimetypes = MimeTypes() );
+ /**
+ * This is a QPE compatible c'tor
+ */
OFileSelector(const QString &mimeFilter, QWidget *parent,
const char *name, bool newVisible = TRUE,
@@ -131,5 +165,5 @@ class OFileSelector : public QWidget {
int selector()const { return m_selector; };
void setSelector( int );
-
+
bool showPopup()const { return m_showPopup; };
void setShowPopup( bool pop ) { m_showPopup = pop; };
@@ -176,5 +210,5 @@ class OFileSelector : public QWidget {
void init();
void updateMimes();
-
+
protected:
@@ -191,5 +225,6 @@ class OFileSelector : public QWidget {
QString m_currentDir;
QString m_name;
- QStringList m_mimetypes;
+// QStringList m_mimetypes;
+ QMap<QString, QStringList> m_mimetypes;
FileSelector *m_select;
@@ -233,10 +268,20 @@ class OFileSelector : public QWidget {
void initializePerm();
void initPics();
- bool compliesMime(const QString &path, const QString &mime);
-
+ bool compliesMime(const QString &path,
+ const QString &mime);
+ bool compliesMime(const QString& mime );
+ /**
+ * Updates the QComboBox with the current mimetypes
+ */
+ void updateMimeCheck();
+
+ /**
+ * Returns the current mimetype
+ */
+ QString currentMimeType()const;
class OFileSelectorPrivate;
OFileSelectorPrivate *d;
static QMap<QString,QPixmap> *m_pixmaps;
-
+
private slots:
void slotFileSelected(const QString & ); // not really meant to be a slot