]> cloud.milkyroute.net Git - dolphin.git/blobdiff - src/dolphinfileitemdelegate.cpp
* Use Nepomuk for getting the meta data instead of KFileMetaInfo.
[dolphin.git] / src / dolphinfileitemdelegate.cpp
index a9ecc2a71d811f5618cbfaa7e04c133cac8c51c7..3fa05cbb5f808f2e9c64e1328440454bab34d2eb 100644 (file)
 
 #include "dolphinfileitemdelegate.h"
 
+#include <QAbstractItemModel>
+#include <QAbstractProxyModel>
+#include <QFontMetrics>
+
+#include <kdirmodel.h>
+#include <kfileitem.h>
+
 DolphinFileItemDelegate::DolphinFileItemDelegate(QObject* parent) :
     KFileItemDelegate(parent),
-    m_maxSize(0, 0)
+    m_hasMinimizedNameColumn(false)
 {
 }
 
@@ -29,33 +36,36 @@ DolphinFileItemDelegate::~DolphinFileItemDelegate()
 {
 }
 
-void DolphinFileItemDelegate::setMaximumSize(const QSize& size)
+void DolphinFileItemDelegate::paint(QPainter* painter,
+                                    const QStyleOptionViewItem& option,
+                                    const QModelIndex& index) const
 {
-    m_maxSize = size;
-}
+    if (m_hasMinimizedNameColumn && (index.column() == KDirModel::Name)) {
+        QStyleOptionViewItemV4 opt(option);
 
-
-QSize DolphinFileItemDelegate::maximumSize() const
-{
-    return m_maxSize;
+        const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(index.model());
+        const KDirModel* dirModel = static_cast<const KDirModel*>(proxyModel->sourceModel());
+        const QModelIndex dirIndex = proxyModel->mapToSource(index);
+        const KFileItem item = dirModel->itemForIndex(dirIndex);
+        if (!item.isNull()) {
+            const int width = nameColumnWidth(item.text(), opt);
+            opt.rect.setWidth(width);
+        }
+        KFileItemDelegate::paint(painter, opt, index);
+    } else {
+        KFileItemDelegate::paint(painter, option, index);
+    }
 }
 
-QSize DolphinFileItemDelegate::sizeHint(const QStyleOptionViewItem& option,
-                                        const QModelIndex& index) const
+int DolphinFileItemDelegate::nameColumnWidth(const QString& name, const QStyleOptionViewItem& option)
 {
-    QSize size = KFileItemDelegate::sizeHint(option, index);
-
-    const int maxWidth = m_maxSize.width();
-    if ((maxWidth > 0) && (size.width() > maxWidth)) {
-        size.setWidth(maxWidth);
-    }
+    QFontMetrics fontMetrics(option.font);
+    int width = option.decorationSize.width() + fontMetrics.width(name) + 16;
 
-    const int maxHeight = m_maxSize.height();
-    if ((maxHeight > 0) && (size.height() > maxHeight)) {
-        size.setHeight(maxHeight);
+    const int defaultWidth = option.rect.width();
+    if ((defaultWidth > 0) && (defaultWidth < width)) {
+        width = defaultWidth;
     }
-
-    return size;
+    return width;
 }
 
-#include "dolphinfileitemdelegate.moc"