#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)
{
}
{
}
-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"