summaryrefslogtreecommitdiff
path: root/libopie
authorzecke <zecke>2002-06-26 18:58:37 (UTC)
committer zecke <zecke>2002-06-26 18:58:37 (UTC)
commitf6800ca0bed431aac90f09ec98e481fb424c7b31 (patch) (side-by-side diff)
treea9c9687cc0cecc9a5f4b9caf77662f7735faf941 /libopie
parent8896b1ffe8ffd4da2395a050de63473ba37a2dec (diff)
downloadopie-f6800ca0bed431aac90f09ec98e481fb424c7b31.zip
opie-f6800ca0bed431aac90f09ec98e481fb424c7b31.tar.gz
opie-f6800ca0bed431aac90f09ec98e481fb424c7b31.tar.bz2
Fix mimetype handling
Diffstat (limited to 'libopie') (more/less context) (show whitespace changes)
-rw-r--r--libopie/ofileselector.cc56
1 files changed, 54 insertions, 2 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc
index 6c59f89..74b308e 100644
--- a/libopie/ofileselector.cc
+++ b/libopie/ofileselector.cc
@@ -638,50 +638,51 @@ void OFileSelector::initVars()
m_checkPerm = 0;
m_pseudo = 0;
m_pseudoLayout = 0;
m_select = 0;
m_stack = 0;
m_lay = 0;
m_Oselector = 0;
m_boxToolbar = 0;
m_boxOk = 0;
m_boxName = 0;
m_boxView = 0;
m_custom = 0;
m_edit = 0;
m_fnLabel = 0;
m_new = 0;
m_close = 0;
}
void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink)
{
if(!m_files)
return;
// if( !compliesMime(info->absFilePath(), mime ) )
// return;
MimeType type( info->absFilePath() );
- if( mime != tr("All") && type.id() != mime )
+ if (!compliesMime( type.id() ) )
return;
+
QPixmap pix = type.pixmap();
QString dir;
QString name;
bool locked;
if( pix.isNull() )
pix = Resource::loadPixmap( "UnknownDocument-14");
dir = info->dirPath( true );
if( symlink )
name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink();
else {
name = info->fileName();
if( ( m_mode == OPEN && !info->isReadable() )||
( m_mode == SAVE && !info->isWritable() ) ){
locked = true; pix = Resource::loadPixmap("locked");
}
}
new OFileSelectorItem( m_View, pix, name,
info->lastModified().toString(),
QString::number( info->size() ),
dir, locked );
}
void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
{
@@ -919,50 +920,101 @@ void OFileSelector::initPics()
QPainter painter( &pm );
painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk );
pm.setMask( pm.createHeuristicMask( FALSE ) );
m_pixmaps->insert("dirsymlink", pm );
QPixmap pm2 = Resource::loadPixmap( "lockedfolder" );
QPainter pen(&pm2 );
pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk );
pm2.setMask( pm2.createHeuristicMask( FALSE ) );
m_pixmaps->insert("symlinkedlocked", pm2 );
}
// if a mime complies with the m_mimeCheck->currentItem
bool OFileSelector::compliesMime( const QString &path, const QString &mime )
{
if( mime == "All" )
return true;
MimeType type( path );
if( type.id() == mime )
return true;
return false;
}
/* check if the mimetype in mime
* complies with the one which is current
*/
+/*
+ * We've the mimetype of the file
+ * We need to get the stringlist of the current mimetype
+ *
+ * mime = image/jpeg
+ * QStringList = 'image/*'
+ * or QStringList = image/jpeg;image/png;application/x-ogg
+ * or QStringList = application/x-ogg;image/*;
+ * with all these mime filters it should get acceptes
+ * to do so we need to look if mime is contained inside
+ * the stringlist
+ * if it's contained return true
+ * if not ( I'm no RegExp expert at all ) we'll look if a '/*'
+ * is contained in the mimefilter and then we will
+ * look if both are equal until the '/'
+ */
bool OFileSelector::compliesMime( const QString& mime ) {
+ qWarning("mimetype is %s", mime.latin1() );
+ QString currentText;
+ if (m_shChooser )
+ currentText = m_mimeCheck->currentText();
+ qWarning("current text is %s", currentText.latin1() );
+ QMap<QString, QStringList>::Iterator it;
+ QStringList list;
+ if ( currentText == tr("All") ) return true;
+ else if ( currentText.isEmpty() && !m_mimetypes.isEmpty() ) {
+ it = m_mimetypes.begin();
+ list = it.data();
+ }else if ( currentText.isEmpty() ) return true;
+ else{
+ it = m_mimetypes.find(currentText );
+ if ( it == m_mimetypes.end() ) qWarning("not there"), list << currentText;
+ else qWarning("found"), list = it.data();
+ }
+ // dump it now
+ //for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
+ // qWarning( "%s", (*it).latin1() );
+ //}
+
+
+ if ( list.contains(mime) ) return true;
+ qWarning("list doesn't contain it ");
+ QStringList::Iterator it2;
+ int pos;
+ int pos2;
+ for ( it2 = list.begin(); it2 != list.end(); ++it2 ) {
+ pos = (*it2).findRev("/*");
+ if ( pos >= 0 ) {
+ if ( mime.contains( (*it2).left(pos) ) ) return true;
+ }
+ }
+ return false;
}
void OFileSelector::slotFileSelected( const QString &string )
{
if( m_shLne )
m_edit->setText( string );
emit fileSelected( string );
}
void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
{
slotFileSelected( lnk.name() );
// emit fileSelected( lnk );
}
void OFileSelector::slotSelectionChanged()
{
}
void OFileSelector::slotCurrentChanged(QListViewItem* item )
{
if( item == 0 )
return;
if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) {
OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;)
if(!sel->isDir() ){
if( m_shLne )
@@ -1110,49 +1162,49 @@ void OFileSelector::reparse()
QFileInfo *fi;
while( (fi=it.current() ) ) {
if( fi->extension() == QString::fromLatin1("desktop") ){
++it;
continue;
}
MimeType type( fi->absFilePath() );
if( !m_mimetypes.contains( type.id() ) ){
//qWarning("Type %s", type.id().latin1() );
m_mimetypes.insert( type.id(), type.id() );
}
++it;
}
// add them to the chooser
updateMimeCheck();
m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) );
currentMimeType = m_mimeCheck->currentText();
}
}else { // no autoMime
// let the mimetype be set from out side the m_mimeCheck FEATURE
if( m_shChooser ){
currentMimeType = m_mimeCheck->currentText();
- updateMimeCheck();
+// updateMimeCheck();
}
}
// now we got our mimetypes we can add the files
QDir dir( m_currentDir );
int sort;
if ( m_case )
sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed);
else
sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed);
dir.setSorting( sort );
int filter;
if( m_selector == EXTENDED_ALL /*|| m_selector ==CUSTOM_ALL */ ){
filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All;
}else
filter = QDir::Files | QDir::Dirs | QDir::All;
dir.setFilter( filter );
// now go through all files
const QFileInfoList *list = dir.entryInfoList();
QFileInfoListIterator it( *list );
QFileInfo *fi;