summaryrefslogtreecommitdiff
authorzecke <zecke>2002-06-26 18:58:37 (UTC)
committer zecke <zecke>2002-06-26 18:58:37 (UTC)
commitf6800ca0bed431aac90f09ec98e481fb424c7b31 (patch) (unidiff)
treea9c9687cc0cecc9a5f4b9caf77662f7735faf941
parent8896b1ffe8ffd4da2395a050de63473ba37a2dec (diff)
downloadopie-f6800ca0bed431aac90f09ec98e481fb424c7b31.zip
opie-f6800ca0bed431aac90f09ec98e481fb424c7b31.tar.gz
opie-f6800ca0bed431aac90f09ec98e481fb424c7b31.tar.bz2
Fix mimetype handling
Diffstat (more/less context) (ignore whitespace changes)
-rw-r--r--libopie/ofileselector.cc58
1 files changed, 55 insertions, 3 deletions
diff --git a/libopie/ofileselector.cc b/libopie/ofileselector.cc
index 6c59f89..74b308e 100644
--- a/libopie/ofileselector.cc
+++ b/libopie/ofileselector.cc
@@ -630,66 +630,67 @@ void OFileSelector::initVars()
630 m_homeButton = 0; 630 m_homeButton = 0;
631 m_docButton = 0; 631 m_docButton = 0;
632 m_hideButton = 0; 632 m_hideButton = 0;
633 m_ok = 0; 633 m_ok = 0;
634 m_cancel = 0; 634 m_cancel = 0;
635 m_reread = 0; 635 m_reread = 0;
636 m_up = 0; 636 m_up = 0;
637 m_View = 0; 637 m_View = 0;
638 m_checkPerm = 0; 638 m_checkPerm = 0;
639 m_pseudo = 0; 639 m_pseudo = 0;
640 m_pseudoLayout = 0; 640 m_pseudoLayout = 0;
641 m_select = 0; 641 m_select = 0;
642 m_stack = 0; 642 m_stack = 0;
643 m_lay = 0; 643 m_lay = 0;
644 m_Oselector = 0; 644 m_Oselector = 0;
645 m_boxToolbar = 0; 645 m_boxToolbar = 0;
646 m_boxOk = 0; 646 m_boxOk = 0;
647 m_boxName = 0; 647 m_boxName = 0;
648 m_boxView = 0; 648 m_boxView = 0;
649 m_custom = 0; 649 m_custom = 0;
650 m_edit = 0; 650 m_edit = 0;
651 m_fnLabel = 0; 651 m_fnLabel = 0;
652 m_new = 0; 652 m_new = 0;
653 m_close = 0; 653 m_close = 0;
654} 654}
655void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) 655void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink)
656{ 656{
657 if(!m_files) 657 if(!m_files)
658 return; 658 return;
659 // if( !compliesMime(info->absFilePath(), mime ) ) 659 // if( !compliesMime(info->absFilePath(), mime ) )
660 // return; 660 // return;
661 MimeType type( info->absFilePath() ); 661 MimeType type( info->absFilePath() );
662 if( mime != tr("All") && type.id() != mime ) 662 if (!compliesMime( type.id() ) )
663 return; 663 return;
664
664 QPixmap pix = type.pixmap(); 665 QPixmap pix = type.pixmap();
665 QString dir; 666 QString dir;
666 QString name; 667 QString name;
667 bool locked; 668 bool locked;
668 if( pix.isNull() ) 669 if( pix.isNull() )
669 pix = Resource::loadPixmap( "UnknownDocument-14"); 670 pix = Resource::loadPixmap( "UnknownDocument-14");
670 dir = info->dirPath( true ); 671 dir = info->dirPath( true );
671 if( symlink ) 672 if( symlink )
672 name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink(); 673 name = info->fileName() + " -> " +info->dirPath() + "/" + info->readLink();
673 else { 674 else {
674 name = info->fileName(); 675 name = info->fileName();
675 if( ( m_mode == OPEN && !info->isReadable() )|| 676 if( ( m_mode == OPEN && !info->isReadable() )||
676 ( m_mode == SAVE && !info->isWritable() ) ){ 677 ( m_mode == SAVE && !info->isWritable() ) ){
677 678
678 locked = true; pix = Resource::loadPixmap("locked"); 679 locked = true; pix = Resource::loadPixmap("locked");
679 } 680 }
680 } 681 }
681 new OFileSelectorItem( m_View, pix, name, 682 new OFileSelectorItem( m_View, pix, name,
682 info->lastModified().toString(), 683 info->lastModified().toString(),
683 QString::number( info->size() ), 684 QString::number( info->size() ),
684 dir, locked ); 685 dir, locked );
685} 686}
686void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) 687void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink )
687{ 688{
688 if(!m_dir) 689 if(!m_dir)
689 return; 690 return;
690 if( m_selector == EXTENDED_ALL || m_selector == EXTENDED ){ 691 if( m_selector == EXTENDED_ALL || m_selector == EXTENDED ){
691 bool locked = false; 692 bool locked = false;
692 QString name; 693 QString name;
693 QPixmap pix; 694 QPixmap pix;
694 if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){ 695 if( ( m_mode == OPEN && !info->isReadable() ) || ( m_mode == SAVE && !info->isWritable() ) ){
695 locked = true; 696 locked = true;
@@ -911,66 +912,117 @@ void OFileSelector::initializePerm()
911 912
912 } 913 }
913} 914}
914void OFileSelector::initPics() 915void OFileSelector::initPics()
915{ 916{
916 m_pixmaps = new QMap<QString,QPixmap>; 917 m_pixmaps = new QMap<QString,QPixmap>;
917 QPixmap pm = Resource::loadPixmap( "folder" ); 918 QPixmap pm = Resource::loadPixmap( "folder" );
918 QPixmap lnk = Resource::loadPixmap( "opie/symlink" ); 919 QPixmap lnk = Resource::loadPixmap( "opie/symlink" );
919 QPainter painter( &pm ); 920 QPainter painter( &pm );
920 painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk ); 921 painter.drawPixmap( pm.width()-lnk.width(), pm.height()-lnk.height(), lnk );
921 pm.setMask( pm.createHeuristicMask( FALSE ) ); 922 pm.setMask( pm.createHeuristicMask( FALSE ) );
922 m_pixmaps->insert("dirsymlink", pm ); 923 m_pixmaps->insert("dirsymlink", pm );
923 924
924 QPixmap pm2 = Resource::loadPixmap( "lockedfolder" ); 925 QPixmap pm2 = Resource::loadPixmap( "lockedfolder" );
925 QPainter pen(&pm2 ); 926 QPainter pen(&pm2 );
926 pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk ); 927 pen.drawPixmap(pm2.width()-lnk.width(), pm2.height()-lnk.height(), lnk );
927 pm2.setMask( pm2.createHeuristicMask( FALSE ) ); 928 pm2.setMask( pm2.createHeuristicMask( FALSE ) );
928 m_pixmaps->insert("symlinkedlocked", pm2 ); 929 m_pixmaps->insert("symlinkedlocked", pm2 );
929} 930}
930// if a mime complies with the m_mimeCheck->currentItem 931// if a mime complies with the m_mimeCheck->currentItem
931bool OFileSelector::compliesMime( const QString &path, const QString &mime ) 932bool OFileSelector::compliesMime( const QString &path, const QString &mime )
932{ 933{
933 if( mime == "All" ) 934 if( mime == "All" )
934 return true; 935 return true;
935 MimeType type( path ); 936 MimeType type( path );
936 if( type.id() == mime ) 937 if( type.id() == mime )
937 return true; 938 return true;
938 return false; 939 return false;
939} 940}
940/* check if the mimetype in mime 941/* check if the mimetype in mime
941 * complies with the one which is current 942 * complies with the one which is current
942 */ 943 */
944/*
945 * We've the mimetype of the file
946 * We need to get the stringlist of the current mimetype
947 *
948 * mime = image/jpeg
949 * QStringList = 'image/*'
950 * or QStringList = image/jpeg;image/png;application/x-ogg
951 * or QStringList = application/x-ogg;image/*;
952 * with all these mime filters it should get acceptes
953 * to do so we need to look if mime is contained inside
954 * the stringlist
955 * if it's contained return true
956 * if not ( I'm no RegExp expert at all ) we'll look if a '/*'
957 * is contained in the mimefilter and then we will
958 * look if both are equal until the '/'
959 */
943bool OFileSelector::compliesMime( const QString& mime ) { 960bool OFileSelector::compliesMime( const QString& mime ) {
961 qWarning("mimetype is %s", mime.latin1() );
962 QString currentText;
963 if (m_shChooser )
964 currentText = m_mimeCheck->currentText();
944 965
966 qWarning("current text is %s", currentText.latin1() );
967 QMap<QString, QStringList>::Iterator it;
968 QStringList list;
969 if ( currentText == tr("All") ) return true;
970 else if ( currentText.isEmpty() && !m_mimetypes.isEmpty() ) {
971 it = m_mimetypes.begin();
972 list = it.data();
973 }else if ( currentText.isEmpty() ) return true;
974 else{
975 it = m_mimetypes.find(currentText );
976 if ( it == m_mimetypes.end() ) qWarning("not there"), list << currentText;
977 else qWarning("found"), list = it.data();
978 }
979 // dump it now
980 //for ( QStringList::Iterator it = list.begin(); it != list.end(); ++it ) {
981 // qWarning( "%s", (*it).latin1() );
982 //}
983
984
985 if ( list.contains(mime) ) return true;
986 qWarning("list doesn't contain it ");
987 QStringList::Iterator it2;
988 int pos;
989 int pos2;
990 for ( it2 = list.begin(); it2 != list.end(); ++it2 ) {
991 pos = (*it2).findRev("/*");
992 if ( pos >= 0 ) {
993 if ( mime.contains( (*it2).left(pos) ) ) return true;
994 }
995 }
996 return false;
945} 997}
946void OFileSelector::slotFileSelected( const QString &string ) 998void OFileSelector::slotFileSelected( const QString &string )
947{ 999{
948 if( m_shLne ) 1000 if( m_shLne )
949 m_edit->setText( string ); 1001 m_edit->setText( string );
950 emit fileSelected( string ); 1002 emit fileSelected( string );
951} 1003}
952void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) 1004void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk )
953{ 1005{
954 slotFileSelected( lnk.name() ); 1006 slotFileSelected( lnk.name() );
955 // emit fileSelected( lnk ); 1007 // emit fileSelected( lnk );
956} 1008}
957void OFileSelector::slotSelectionChanged() 1009void OFileSelector::slotSelectionChanged()
958{ 1010{
959 1011
960} 1012}
961void OFileSelector::slotCurrentChanged(QListViewItem* item ) 1013void OFileSelector::slotCurrentChanged(QListViewItem* item )
962{ 1014{
963 if( item == 0 ) 1015 if( item == 0 )
964 return; 1016 return;
965 if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) { 1017 if( m_selector == EXTENDED || m_selector == EXTENDED_ALL ) {
966 OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;) 1018 OFileSelectorItem *sel = (OFileSelectorItem*) item; // start to use the C++ casts ;)
967 if(!sel->isDir() ){ 1019 if(!sel->isDir() ){
968 if( m_shLne ) 1020 if( m_shLne )
969 m_edit->setText( sel->text(1) ); 1021 m_edit->setText( sel->text(1) );
970 } 1022 }
971 } 1023 }
972} 1024}
973void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &, int) 1025void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &, int)
974{ 1026{
975 if ( item == 0 ) 1027 if ( item == 0 )
976 return; 1028 return;
@@ -1102,65 +1154,65 @@ void OFileSelector::reparse()
1102 m_mimeCheck->clear(); 1154 m_mimeCheck->clear();
1103 1155
1104 // let's find possible mimetypes 1156 // let's find possible mimetypes
1105 QDir dir( m_currentDir ); 1157 QDir dir( m_currentDir );
1106 dir.setFilter( QDir::Files | QDir::Readable ); 1158 dir.setFilter( QDir::Files | QDir::Readable );
1107 dir.setSorting( QDir::Size ); 1159 dir.setSorting( QDir::Size );
1108 const QFileInfoList *list = dir.entryInfoList(); 1160 const QFileInfoList *list = dir.entryInfoList();
1109 QFileInfoListIterator it( *list ); 1161 QFileInfoListIterator it( *list );
1110 QFileInfo *fi; 1162 QFileInfo *fi;
1111 while( (fi=it.current() ) ) { 1163 while( (fi=it.current() ) ) {
1112 if( fi->extension() == QString::fromLatin1("desktop") ){ 1164 if( fi->extension() == QString::fromLatin1("desktop") ){
1113 ++it; 1165 ++it;
1114 continue; 1166 continue;
1115 } 1167 }
1116 MimeType type( fi->absFilePath() ); 1168 MimeType type( fi->absFilePath() );
1117 if( !m_mimetypes.contains( type.id() ) ){ 1169 if( !m_mimetypes.contains( type.id() ) ){
1118 //qWarning("Type %s", type.id().latin1() ); 1170 //qWarning("Type %s", type.id().latin1() );
1119 m_mimetypes.insert( type.id(), type.id() ); 1171 m_mimetypes.insert( type.id(), type.id() );
1120 } 1172 }
1121 1173
1122 ++it; 1174 ++it;
1123 } 1175 }
1124 // add them to the chooser 1176 // add them to the chooser
1125 updateMimeCheck(); 1177 updateMimeCheck();
1126 m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) ); 1178 m_mimeCheck->setCurrentItem( indexByString( m_mimeCheck, currentMimeType ) );
1127 currentMimeType = m_mimeCheck->currentText(); 1179 currentMimeType = m_mimeCheck->currentText();
1128 } 1180 }
1129 }else { // no autoMime 1181 }else { // no autoMime
1130 // let the mimetype be set from out side the m_mimeCheck FEATURE 1182 // let the mimetype be set from out side the m_mimeCheck FEATURE
1131 1183
1132 if( m_shChooser ){ 1184 if( m_shChooser ){
1133 currentMimeType = m_mimeCheck->currentText(); 1185 currentMimeType = m_mimeCheck->currentText();
1134 updateMimeCheck(); 1186// updateMimeCheck();
1135 } 1187 }
1136 } 1188 }
1137 // now we got our mimetypes we can add the files 1189 // now we got our mimetypes we can add the files
1138 1190
1139 QDir dir( m_currentDir ); 1191 QDir dir( m_currentDir );
1140 1192
1141 int sort; 1193 int sort;
1142 if ( m_case ) 1194 if ( m_case )
1143 sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed); 1195 sort = (QDir::IgnoreCase | QDir::Name | QDir::DirsFirst | QDir::Reversed);
1144 else 1196 else
1145 sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed); 1197 sort = (QDir::Name | QDir::DirsFirst | QDir::Reversed);
1146 dir.setSorting( sort ); 1198 dir.setSorting( sort );
1147 1199
1148 int filter; 1200 int filter;
1149 if( m_selector == EXTENDED_ALL /*|| m_selector ==CUSTOM_ALL */ ){ 1201 if( m_selector == EXTENDED_ALL /*|| m_selector ==CUSTOM_ALL */ ){
1150 filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All; 1202 filter = QDir::Files | QDir::Dirs | QDir::Hidden | QDir::All;
1151 }else 1203 }else
1152 filter = QDir::Files | QDir::Dirs | QDir::All; 1204 filter = QDir::Files | QDir::Dirs | QDir::All;
1153 dir.setFilter( filter ); 1205 dir.setFilter( filter );
1154 1206
1155 // now go through all files 1207 // now go through all files
1156 const QFileInfoList *list = dir.entryInfoList(); 1208 const QFileInfoList *list = dir.entryInfoList();
1157 QFileInfoListIterator it( *list ); 1209 QFileInfoListIterator it( *list );
1158 QFileInfo *fi; 1210 QFileInfo *fi;
1159 while( (fi=it.current() ) ){ 1211 while( (fi=it.current() ) ){
1160 //qWarning("True and only" ); 1212 //qWarning("True and only" );
1161 if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){ 1213 if( fi->fileName() == QString::fromLatin1("..") || fi->fileName() == QString::fromLatin1(".") ){
1162 //qWarning(".. or ." ); 1214 //qWarning(".. or ." );
1163 ++it; 1215 ++it;
1164 continue; 1216 continue;
1165 } 1217 }
1166 if( fi->isSymLink() ){ 1218 if( fi->isSymLink() ){