X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/eda07dc98644978c7134857c429507babf5ae57d..ec00f379dc42b00a64ab1af25bb4bb1a06bd7449:/src/dolphindetailsview.cpp diff --git a/src/dolphindetailsview.cpp b/src/dolphindetailsview.cpp index 961fb15a3..1aec30cca 100644 --- a/src/dolphindetailsview.cpp +++ b/src/dolphindetailsview.cpp @@ -28,7 +28,6 @@ #include "dolphin_detailsmodesettings.h" #include -#include #include #include @@ -39,6 +38,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* controller) : QTreeView(parent), m_controller(controller), + m_dragging(false), m_showElasticBand(false), m_elasticBandOrigin(), m_elasticBandDestination() @@ -52,6 +52,7 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr setSelectionBehavior(SelectItems); setDragDropMode(QAbstractItemView::DragDrop); setDropIndicatorShown(false); + setAlternatingRowColors(true); setMouseTracking(true); viewport()->setAttribute(Qt::WA_Hover); @@ -70,13 +71,11 @@ DolphinDetailsView::DolphinDetailsView(QWidget* parent, DolphinController* contr if (KGlobalSettings::singleClick()) { connect(this, SIGNAL(clicked(const QModelIndex&)), - controller, SLOT(triggerItem(const QModelIndex&))); + this, SLOT(slotItemActivated(const QModelIndex&))); } else { connect(this, SIGNAL(doubleClicked(const QModelIndex&)), - controller, SLOT(triggerItem(const QModelIndex&))); + this, SLOT(slotItemActivated(const QModelIndex&))); } - connect(this, SIGNAL(activated(const QModelIndex&)), - controller, SLOT(triggerItem(const QModelIndex&))); connect(this, SIGNAL(entered(const QModelIndex&)), this, SLOT(slotEntered(const QModelIndex&))); connect(this, SIGNAL(viewportEntered()), @@ -155,15 +154,18 @@ void DolphinDetailsView::contextMenuEvent(QContextMenuEvent* event) void DolphinDetailsView::mousePressEvent(QMouseEvent* event) { - if (!indexAt(event->pos()).isValid()) { + m_controller->triggerActivation(); + + QTreeView::mousePressEvent(event); + + const QModelIndex index = indexAt(event->pos()); + if (!index.isValid() || (index.column() != KDirModel::Name)) { const Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers(); if (!(modifier & Qt::ShiftModifier) && !(modifier & Qt::ControlModifier)) { clearSelection(); } } - QTreeView::mousePressEvent(event); - if (event->button() == Qt::LeftButton) { m_showElasticBand = true; @@ -190,7 +192,6 @@ void DolphinDetailsView::mouseReleaseEvent(QMouseEvent* event) updateElasticBand(); m_showElasticBand = false; } - m_controller->triggerActivation(); } void DolphinDetailsView::dragEnterEvent(QDragEnterEvent* event) @@ -203,6 +204,32 @@ void DolphinDetailsView::dragEnterEvent(QDragEnterEvent* event) updateElasticBand(); m_showElasticBand = false; } + m_dragging = true; +} + +void DolphinDetailsView::dragLeaveEvent(QDragLeaveEvent* event) +{ + QTreeView::dragLeaveEvent(event); + + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 + m_dragging = false; + setDirtyRegion(m_dropRect); +} + +void DolphinDetailsView::dragMoveEvent(QDragMoveEvent* event) +{ + QTreeView::dragMoveEvent(event); + + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 + setDirtyRegion(m_dropRect); + const QModelIndex index = indexAt(event->pos()); + if (!index.isValid() || (index.column() != KDirModel::Name)) { + m_dragging = false; + } else { + m_dragging = true; + m_dropRect = visualRect(index); + setDirtyRegion(m_dropRect); + } } void DolphinDetailsView::dropEvent(QDropEvent* event) @@ -215,6 +242,7 @@ void DolphinDetailsView::dropEvent(QDropEvent* event) event->source()); } QTreeView::dropEvent(event); + m_dragging = false; } void DolphinDetailsView::paintEvent(QPaintEvent* event) @@ -235,6 +263,12 @@ void DolphinDetailsView::paintEvent(QPaintEvent* event) style()->drawControl(QStyle::CE_RubberBand, &opt, &painter); painter.restore(); } + + // TODO: remove this code when the issue #160611 is solved in Qt 4.4 + if (m_dragging) { + const QBrush& brush = m_viewOptions.palette.brush(QPalette::Normal, QPalette::Highlight); + DolphinController::drawHoverIndication(viewport(), m_dropRect, brush); + } } void DolphinDetailsView::setSortIndicatorSection(DolphinView::Sorting sorting) @@ -357,4 +391,19 @@ QRect DolphinDetailsView::elasticBandRect() const return QRect(topLeft, m_elasticBandDestination).normalized(); } +static bool isValidNameIndex(const QModelIndex& index) +{ + return index.isValid() && (index.column() == KDirModel::Name); +} + +void DolphinDetailsView::slotItemActivated(const QModelIndex& index) +{ + if (!isValidNameIndex(index)) { + clearSelection(); + m_controller->emitItemEntered(index); + } else { + m_controller->triggerItem(index); + } +} + #include "dolphindetailsview.moc"