author | zecke <zecke> | 2002-06-26 18:58:37 (UTC) |
---|---|---|
committer | zecke <zecke> | 2002-06-26 18:58:37 (UTC) |
commit | f6800ca0bed431aac90f09ec98e481fb424c7b31 (patch) (unidiff) | |
tree | a9c9687cc0cecc9a5f4b9caf77662f7735faf941 | |
parent | 8896b1ffe8ffd4da2395a050de63473ba37a2dec (diff) | |
download | opie-f6800ca0bed431aac90f09ec98e481fb424c7b31.zip opie-f6800ca0bed431aac90f09ec98e481fb424c7b31.tar.gz opie-f6800ca0bed431aac90f09ec98e481fb424c7b31.tar.bz2 |
Fix mimetype handling
-rw-r--r-- | libopie/ofileselector.cc | 58 |
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 | } |
655 | void OFileSelector::addFile(const QString &mime, QFileInfo *info, bool symlink) | 655 | void 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 | } |
686 | void OFileSelector::addDir(const QString &mime, QFileInfo *info, bool symlink ) | 687 | void 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 | } |
914 | void OFileSelector::initPics() | 915 | void 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 |
931 | bool OFileSelector::compliesMime( const QString &path, const QString &mime ) | 932 | bool 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 | */ | ||
943 | bool OFileSelector::compliesMime( const QString& mime ) { | 960 | bool 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 | } |
946 | void OFileSelector::slotFileSelected( const QString &string ) | 998 | void 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 | } |
952 | void OFileSelector::slotFileBridgeSelected( const DocLnk &lnk ) | 1004 | void 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 | } |
957 | void OFileSelector::slotSelectionChanged() | 1009 | void OFileSelector::slotSelectionChanged() |
958 | { | 1010 | { |
959 | 1011 | ||
960 | } | 1012 | } |
961 | void OFileSelector::slotCurrentChanged(QListViewItem* item ) | 1013 | void 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 | } |
973 | void OFileSelector::slotClicked( int button, QListViewItem *item, const QPoint &, int) | 1025 | void 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() ){ |