File indexing completed on 2024-05-12 17:22:03
0001 /* 0002 SPDX-FileCopyrightText: 2000-2002 Shie Erlich <erlich@users.sourceforge.net> 0003 SPDX-FileCopyrightText: 2000-2002 Rafi Yanai <yanai@users.sourceforge.net> 0004 SPDX-FileCopyrightText: 2004-2022 Krusader Krew <https://krusader.org> 0005 0006 SPDX-License-Identifier: GPL-2.0-or-later 0007 */ 0008 0009 #include "krviewitem.h" 0010 0011 #include "../FileSystem/fileitem.h" 0012 #include "../FileSystem/krpermhandler.h" 0013 #include "krinterview.h" 0014 #include "listmodel.h" 0015 0016 // QtCore 0017 #include <QLocale> 0018 #include <QMimeDatabase> 0019 #include <QMimeType> 0020 // QtGui 0021 #include <QPixmap> 0022 0023 #include <KI18n/KLocalizedString> 0024 0025 KrViewItem::KrViewItem(FileItem *fileitem, KrInterView *parentView) 0026 : _fileitem(fileitem) 0027 , _view(parentView) 0028 , _viewProperties(parentView->properties()) 0029 , _hasExtension(false) 0030 , _hidden(false) 0031 , _extension("") 0032 { 0033 dummyFileItem = parentView->_model->dummyFileItem() == fileitem; 0034 0035 if (fileitem) { 0036 // check if the file has an extension 0037 const QString &fileitemName = fileitem->getName(); 0038 int loc = fileitemName.lastIndexOf('.'); 0039 if (loc > 0) { // avoid mishandling of .bashrc and friend 0040 // check if it has one of the predefined 'atomic extensions' 0041 for (const auto &atomicExtension : _viewProperties->atomicExtensions) { 0042 if (fileitemName.endsWith(atomicExtension)) { 0043 loc = fileitemName.length() - atomicExtension.length(); 0044 break; 0045 } 0046 } 0047 _name = fileitemName.left(loc); 0048 _extension = fileitemName.mid(loc + 1); 0049 _hasExtension = true; 0050 } 0051 0052 if (fileitemName.startsWith('.')) 0053 _hidden = true; 0054 } 0055 } 0056 0057 const QString &KrViewItem::name(bool withExtension) const 0058 { 0059 if (!withExtension && _hasExtension) 0060 return _name; 0061 else 0062 return _fileitem->getName(); 0063 } 0064 0065 QString KrViewItem::description() const 0066 { 0067 if (dummyFileItem) 0068 return i18n("Climb up the folder tree"); 0069 0070 // else is implied 0071 0072 QString mimeTypeComment; 0073 QMimeType mt = QMimeDatabase().mimeTypeForName(_fileitem->getMime()); 0074 if (mt.isValid()) 0075 mimeTypeComment = mt.comment(); 0076 0077 QString text = _fileitem->getName(); 0078 if (_fileitem->isSymLink()) { 0079 text += " -> " + _fileitem->getSymDest() + " "; 0080 if (_fileitem->isBrokenLink()) 0081 text += i18n("(Broken Link)"); 0082 else if (mimeTypeComment.isEmpty()) 0083 text += i18n("Symbolic Link"); 0084 else 0085 text += i18n("%1 (Link)", mimeTypeComment); 0086 0087 } else { 0088 if (_fileitem->isDir()) 0089 text += '/'; 0090 0091 if (_fileitem->getUISize() != (KIO::filesize_t)-1) { 0092 const QString size = KrView::sizeText(_viewProperties, _fileitem->getUISize()); 0093 text += QString(" (%1)").arg(size); 0094 } 0095 0096 text += " " + mimeTypeComment; 0097 } 0098 return text; 0099 } 0100 0101 QPixmap KrViewItem::icon() 0102 { 0103 if (dummyFileItem || !_viewProperties->displayIcons) 0104 return QPixmap(); 0105 else 0106 return KrView::getIcon(_fileitem, true); 0107 } 0108 0109 bool KrViewItem::isSelected() const 0110 { 0111 return _view->isSelected(_fileitem); 0112 } 0113 0114 void KrViewItem::setSelected(bool s) 0115 { 0116 _view->setSelected(_fileitem, s); 0117 if (!_view->op()->isMassSelectionUpdate()) { 0118 redraw(); 0119 _view->op()->emitSelectionChanged(); 0120 } 0121 } 0122 0123 QRect KrViewItem::itemRect() const 0124 { 0125 return _view->itemRect(_fileitem); 0126 } 0127 0128 void KrViewItem::redraw() 0129 { 0130 _view->_itemView->viewport()->update(itemRect()); 0131 } 0132 0133 void KrViewItem::setSize(KIO::filesize_t size) 0134 { 0135 _fileitem->setSize(size); 0136 }