X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/0d63feed1bb165af895fe997c0dd456da4d08ccb..14bae32f371663d172e1dd39d98080fd8695d991:/src/views/dolphindetailsview.cpp diff --git a/src/views/dolphindetailsview.cpp b/src/views/dolphindetailsview.cpp index 64f964aa8..0ce26df33 100644 --- a/src/views/dolphindetailsview.cpp +++ b/src/views/dolphindetailsview.cpp @@ -36,10 +36,10 @@ #include "dolphin_detailsmodesettings.h" #include "dolphin_generalsettings.h" -#include -#include -#include -#include +#include +#include +#include +#include #include #include @@ -52,7 +52,6 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinTreeView(parent), m_autoResize(true), m_dolphinViewController(dolphinViewController), - m_viewModeController(viewModeController), m_extensionsFactory(0), m_expandableFoldersAction(0), m_expandedUrls(), @@ -60,14 +59,13 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, m_decorationSize() { const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); - Q_ASSERT(settings != 0); - Q_ASSERT(dolphinViewController != 0); - Q_ASSERT(viewModeController != 0); + Q_ASSERT(settings); + Q_ASSERT(dolphinViewController); + Q_ASSERT(viewModeController); setLayoutDirection(Qt::LeftToRight); setAcceptDrops(true); setSortingEnabled(true); - setUniformRowHeights(true); setSelectionBehavior(SelectItems); setDragDropMode(QAbstractItemView::DragDrop); setDropIndicatorShown(false); @@ -137,7 +135,6 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, connect(view, SIGNAL(showPreviewChanged()), this, SLOT(slotShowPreviewChanged())); - viewport()->installEventFilter(this); connect(KGlobalSettings::self(), SIGNAL(settingsChanged(int)), @@ -158,9 +155,6 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, KDirLister *dirLister = qobject_cast(proxyModel->sourceModel())->dirLister(); connect(dirLister, SIGNAL(newItems(KFileItemList)), this, SLOT(resizeColumns())); - - // setFocus() must be called after m_extensionsFactory is initialised (see bug 240374). - setFocus(); } DolphinDetailsView::~DolphinDetailsView() @@ -225,20 +219,14 @@ void DolphinDetailsView::startDrag(Qt::DropActions supportedActions) void DolphinDetailsView::dragEnterEvent(QDragEnterEvent* event) { - if (DragAndDropHelper::instance().isMimeDataSupported(event->mimeData())) { - event->acceptProposedAction(); - } + event->acceptProposedAction(); DolphinTreeView::dragEnterEvent(event); } void DolphinDetailsView::dragMoveEvent(QDragMoveEvent* event) { DolphinTreeView::dragMoveEvent(event); - - if (DragAndDropHelper::instance().isMimeDataSupported(event->mimeData())) { - // Accept URL drops, independently from the destination item - event->acceptProposedAction(); - } + event->acceptProposedAction(); } void DolphinDetailsView::dropEvent(QDropEvent* event) @@ -248,7 +236,7 @@ void DolphinDetailsView::dropEvent(QDropEvent* event) if (index.isValid() && (index.column() == DolphinModel::Name)) { item = m_dolphinViewController->itemForIndex(index); } - m_dolphinViewController->indicateDroppedUrls(item, m_viewModeController->url(), event); + m_dolphinViewController->indicateDroppedUrls(item, event); DolphinTreeView::dropEvent(event); } @@ -399,7 +387,7 @@ void DolphinDetailsView::configureSettings(const QPoint& pos) popup.addSeparator(); QAction* activatedAction = popup.exec(header()->mapToGlobal(pos)); - if (activatedAction != 0) { + if (activatedAction) { const bool show = activatedAction->isChecked(); const int columnIndex = activatedAction->data().toInt(); @@ -469,6 +457,7 @@ void DolphinDetailsView::resizeColumns() QHeaderView* headerView = header(); const int rowCount = model()->rowCount(); QFontMetrics fontMetrics(viewport()->font()); + const int horizontalGap = fontMetrics.height(); // Define the maximum number of rows, where an exact (but expensive) calculation // of the widths is done. @@ -483,14 +472,21 @@ void DolphinDetailsView::resizeColumns() // Calculate the required width for the current column and consider only // up to maxRowCount columns for performance reasons if (rowCount > 0) { - const QAbstractProxyModel* proxyModel = qobject_cast(model()); - const KDirModel* dirModel = qobject_cast(proxyModel->sourceModel()); - const int count = qMin(rowCount, maxRowCount); - const QStyleOptionViewItem option = viewOptions(); for (int row = 0; row < count; ++row) { - const QModelIndex index = dirModel->index(row, column); - const int width = itemDelegate()->sizeHint(option, index).width(); + const QModelIndex index = model()->index(row, column); + QString text; + if (column == DolphinModel::Size) { + // This is a workaround as KFileItemDelegate::sizeHint() does not + // work in a way that is required for calculating the size. + const QAbstractProxyModel* proxyModel = qobject_cast(model()); + const KDirModel* dirModel = qobject_cast(proxyModel->sourceModel()); + const QModelIndex dirIndex = proxyModel->mapToSource(index); + text = itemSizeString(dirIndex, dirModel->itemForIndex(dirIndex)); + } else { + text = model()->data(index).toString(); + } + const int width = fontMetrics.width(text) + horizontalGap; if (width > columnWidth[column]) { columnWidth[column] = width; } @@ -500,8 +496,7 @@ void DolphinDetailsView::resizeColumns() // Assure that the required width is sufficient for the header too const int logicalIndex = headerView->logicalIndex(column); const QString headline = model()->headerData(logicalIndex, Qt::Horizontal).toString(); - // TODO: check Qt-sources which left/right-gap is used for the headlines - const int headlineWidth = fontMetrics.width(headline) + 20; + const int headlineWidth = fontMetrics.width(headline) + horizontalGap; columnWidth[column] = qMax(columnWidth[column], headlineWidth); } @@ -585,7 +580,7 @@ void DolphinDetailsView::slotGlobalSettingsChanged(int category) Q_UNUSED(category); const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); - Q_ASSERT(settings != 0); + Q_ASSERT(settings); if (settings->useSystemFont()) { m_font = KGlobalSettings::generalFont(); } @@ -688,4 +683,24 @@ void DolphinDetailsView::adjustMaximumSizeForEditing(const QModelIndex& index) } } +QString DolphinDetailsView::itemSizeString(const QModelIndex& index, const KFileItem& item) const +{ + // The following code has been copied from KFileItemDelegate::Private::itemSize() + // Copyright (c) 2006-2007, 2008 Fredrik Höglund + // Ideally this should be handled by KFileItemDelegate::sizeHint(). + if (item.isFile()) { + return KGlobal::locale()->formatByteSize(item.size()); + } + + // Return the number of items in the directory + const QVariant value = index.data(KDirModel::ChildCountRole); + const int count = value.type() == QVariant::Int ? value.toInt() : KDirModel::ChildCountUnknown; + + if (count == KDirModel::ChildCountUnknown) { + return QString(); + } + + return i18ncp("Items in a folder", "1 item", "%1 items", count); +} + #include "dolphindetailsview.moc"