X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/7fd22d39bd2bd3f607ddcd927f894cd9b52e97c7..b5eca6dc2aaa6f90d7dc2fe27ab9ccc45aee77f2:/src/dolphindetailsview.cpp diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index b4f42cf50..8e8eec2ec 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -28,9 +28,11 @@ #include "dolphin_detailsmodesettings.h" +#include #include #include +#include #include #include #include @@ -82,10 +84,10 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr // RETURN-key in keyPressEvent(). if (KGlobalSettings::singleClick()) { connect(this, SIGNAL(clicked(const QModelIndex&)), - this, SLOT(slotItemActivated(const QModelIndex&))); + this, SLOT(triggerItem(const QModelIndex&))); } else { connect(this, SIGNAL(doubleClicked(const QModelIndex&)), - this, SLOT(slotItemActivated(const QModelIndex&))); + this, SLOT(triggerItem(const QModelIndex&))); } connect(this, SIGNAL(entered(const QModelIndex&)), this, SLOT(slotEntered(const QModelIndex&))); @@ -108,6 +110,15 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr m_viewOptions.font = font; m_viewOptions.showDecorationSelected = true; +// TODO: Remove this check when 4.3.2 is released and KDE requires it... this +// check avoids a division by zero happening on versions before 4.3.1. +// Right now KDE in theory can be shipped with Qt 4.3.0 and above. +// ereslibre +#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 2) || defined(QT_KDE_QT_COPY)) + setVerticalScrollMode(QTreeView::ScrollPerPixel); + setHorizontalScrollMode(QTreeView::ScrollPerPixel); +#endif + updateDecorationSize(); } @@ -125,6 +136,7 @@ bool DolphinDetailsView::event(QEvent* event) headerView->setStretchLastSection(false); headerView->setResizeMode(QHeaderView::ResizeToContents); headerView->setResizeMode(0, QHeaderView::Stretch); + headerView->setMovable(false); // hide columns if this is indicated by the settings const DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); @@ -152,6 +164,18 @@ bool DolphinDetailsView::event(QEvent* event) hideColumn(DolphinModel::Rating); hideColumn(DolphinModel::Tags); } +// TODO: Remove this check when 4.3.2 is released and KDE requires it... this +// check avoids a division by zero happening on versions before 4.3.1. +// Right now KDE in theory can be shipped with Qt 4.3.0 and above. +// ereslibre +#if (QT_VERSION >= QT_VERSION_CHECK(4, 3, 2) || defined(QT_KDE_QT_COPY)) + else if (event->type() == QEvent::UpdateRequest) { + // a wheel movement will scroll 4 items + if (model()->rowCount() > 0) { + verticalScrollBar()->setSingleStep((sizeHintForRow(0) / 3) * 4); + } + } +#endif return QTreeView::event(event); } @@ -169,7 +193,7 @@ void DolphinDetailsView::contextMenuEvent(QContextMenuEvent* event) void DolphinDetailsView::mousePressEvent(QMouseEvent* event) { - m_controller->triggerActivation(); + m_controller->requestActivation(); QTreeView::mousePressEvent(event); @@ -293,11 +317,11 @@ void DolphinDetailsView::keyPressEvent(QKeyEvent* event) const QItemSelectionModel* selModel = selectionModel(); const QModelIndex currentIndex = selModel->currentIndex(); - const bool triggerItem = currentIndex.isValid() - && (event->key() == Qt::Key_Return) - && (selModel->selectedIndexes().count() <= 1); - if (triggerItem) { - m_controller->triggerItem(currentIndex); + const bool trigger = currentIndex.isValid() + && (event->key() == Qt::Key_Return) + && (selModel->selectedIndexes().count() <= 1); + if (trigger) { + triggerItem(currentIndex); } } @@ -361,7 +385,7 @@ void DolphinDetailsView::slotEntered(const QModelIndex& index) const QPoint pos = viewport()->mapFromGlobal(QCursor::pos()); const int nameColumnWidth = header()->sectionSize(DolphinModel::Name); if (pos.x() < nameColumnWidth) { - m_controller->emitItemEntered(index); + m_controller->emitItemEntered(itemForIndex(index)); } else { m_controller->emitViewportEntered(); @@ -377,14 +401,20 @@ void DolphinDetailsView::updateElasticBand() setDirtyRegion(dirtyRegion); } +QRect DolphinDetailsView::elasticBandRect() const +{ + const QPoint pos(contentsPos()); + const QPoint topLeft(m_elasticBandOrigin.x() - pos.x(), m_elasticBandOrigin.y() - pos.y()); + return QRect(topLeft, m_elasticBandDestination).normalized(); +} + void DolphinDetailsView::zoomIn() { if (isZoomInPossible()) { DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); - // TODO: get rid of K3Icon sizes switch (settings->iconSize()) { - case K3Icon::SizeSmall: settings->setIconSize(K3Icon::SizeMedium); break; - case K3Icon::SizeMedium: settings->setIconSize(K3Icon::SizeLarge); break; + case KIconLoader::SizeSmall: settings->setIconSize(KIconLoader::SizeMedium); break; + case KIconLoader::SizeMedium: settings->setIconSize(KIconLoader::SizeLarge); break; default: Q_ASSERT(false); break; } updateDecorationSize(); @@ -395,23 +425,23 @@ void DolphinDetailsView::zoomOut() { if (isZoomOutPossible()) { DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); - // TODO: get rid of K3Icon sizes switch (settings->iconSize()) { - case K3Icon::SizeLarge: settings->setIconSize(K3Icon::SizeMedium); break; - case K3Icon::SizeMedium: settings->setIconSize(K3Icon::SizeSmall); break; + case KIconLoader::SizeLarge: settings->setIconSize(KIconLoader::SizeMedium); break; + case KIconLoader::SizeMedium: settings->setIconSize(KIconLoader::SizeSmall); break; default: Q_ASSERT(false); break; } updateDecorationSize(); } } -void DolphinDetailsView::slotItemActivated(const QModelIndex& index) +void DolphinDetailsView::triggerItem(const QModelIndex& index) { + const KFileItem item = itemForIndex(index); if (index.isValid() && (index.column() == KDirModel::Name)) { - m_controller->triggerItem(index); + m_controller->triggerItem(item); } else { clearSelection(); - m_controller->emitItemEntered(index); + m_controller->emitItemEntered(item); } } @@ -459,13 +489,13 @@ void DolphinDetailsView::configureColumns(const QPoint& pos) bool DolphinDetailsView::isZoomInPossible() const { DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); - return settings->iconSize() < K3Icon::SizeLarge; + return settings->iconSize() < KIconLoader::SizeLarge; } bool DolphinDetailsView::isZoomOutPossible() const { DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings(); - return settings->iconSize() > K3Icon::SizeSmall; + return settings->iconSize() > KIconLoader::SizeSmall; } void DolphinDetailsView::updateDecorationSize() @@ -498,16 +528,12 @@ QPoint DolphinDetailsView::contentsPos() const return QPoint(0, y); } -QRect DolphinDetailsView::elasticBandRect() const -{ - const QPoint pos(contentsPos()); - const QPoint topLeft(m_elasticBandOrigin.x() - pos.x(), m_elasticBandOrigin.y() - pos.y()); - return QRect(topLeft, m_elasticBandDestination).normalized(); -} - -static bool isValidNameIndex(const QModelIndex& index) +KFileItem DolphinDetailsView::itemForIndex(const QModelIndex& index) const { - return index.isValid() && (index.column() == KDirModel::Name); + QAbstractProxyModel* proxyModel = static_cast(model()); + KDirModel* dirModel = static_cast(proxyModel->sourceModel()); + const QModelIndex dirIndex = proxyModel->mapToSource(index); + return dirModel->itemForIndex(dirIndex); } #include "dolphindetailsview.moc"