diff options
| author | Peter Penz <[email protected]> | 2007-06-28 18:52:54 +0000 |
|---|---|---|
| committer | Peter Penz <[email protected]> | 2007-06-28 18:52:54 +0000 |
| commit | 34ff90696f8a9d8a5d2c02be1b11b4d092b888c1 (patch) | |
| tree | 512848c4c0a77b5e967b5426199516c5f48da3e8 /src/dolphincolumnview.cpp | |
| parent | ba6c853219c78e4e2a491d416b94e4e4c1aef591 (diff) | |
Improve handling of column view:
* Activate column on a mouse press event
* Always synchronize the active column with the URL navigator and vice versa
svn path=/trunk/KDE/kdebase/apps/; revision=681369
Diffstat (limited to 'src/dolphincolumnview.cpp')
| -rw-r--r-- | src/dolphincolumnview.cpp | 52 |
1 files changed, 41 insertions, 11 deletions
diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp index c132cc164..1ab49d05b 100644 --- a/src/dolphincolumnview.cpp +++ b/src/dolphincolumnview.cpp @@ -26,7 +26,10 @@ #include <kcolorutils.h> #include <kcolorscheme.h> +#include <kdirlister.h> +#include <kdirmodel.h> +#include <QAbstractProxyModel> #include <QPoint> /** @@ -181,13 +184,8 @@ void ColumnWidget::dropEvent(QDropEvent* event) void ColumnWidget::mousePressEvent(QMouseEvent* event) { - if (m_active || indexAt(event->pos()).isValid()) { - // Only accept the mouse press event in inactive views, - // if a click is done on an item. This assures that - // the current selection, which usually shows the - // the directory for next column, won't get deleted. - QListView::mousePressEvent(event); - } + m_view->requestActivation(this); + QListView::mousePressEvent(event); } void ColumnWidget::paintEvent(QPaintEvent* event) @@ -265,6 +263,8 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control this, SLOT(zoomIn())); connect(controller, SIGNAL(zoomOut()), this, SLOT(zoomOut())); + connect(controller, SIGNAL(urlChanged(const KUrl&)), + this, SLOT(updateColumnsState(const KUrl&))); updateDecorationSize(); } @@ -374,14 +374,20 @@ void DolphinColumnView::zoomOut() void DolphinColumnView::triggerItem(const QModelIndex& index) { m_controller->triggerItem(index); + updateColumnsState(m_controller->url()); +} + +void DolphinColumnView::updateColumnsState(const KUrl& url) +{ + const KUrl baseUrl = dirLister()->url(); + const int activeIndex = url.path().count('/') - baseUrl.path().count('/'); - // assure that the last column gets marked as active and all - // other columns as inactive - QObject* lastWidget = viewport()->children().last(); + int index = 0; foreach (QObject* object, viewport()->children()) { if (object->inherits("QListView")) { ColumnWidget* widget = static_cast<ColumnWidget*>(object); - widget->setActive(widget == lastWidget); + widget->setActive(index == activeIndex); + ++index; } } } @@ -398,6 +404,23 @@ bool DolphinColumnView::isZoomOutPossible() const return settings->iconSize() > K3Icon::SizeSmall; } +void DolphinColumnView::requestActivation(QWidget* column) +{ + KUrl::List dirs = dirLister()->directories(); + KUrl::List::const_iterator it = dirs.constBegin(); + foreach (QObject* object, viewport()->children()) { + if (object->inherits("QListView")) { + ColumnWidget* widget = static_cast<ColumnWidget*>(object); + const bool isActive = (widget == column); + widget->setActive(isActive); + if (isActive) { + m_controller->setUrl(*it); + } + ++it; + } + } +} + void DolphinColumnView::updateDecorationSize() { ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); @@ -416,4 +439,11 @@ void DolphinColumnView::updateDecorationSize() doItemsLayout(); } +KDirLister* DolphinColumnView::dirLister() const +{ + const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(model()); + const KDirModel* dirModel = static_cast<const KDirModel*>(proxyModel->sourceModel()); + return dirModel->dirLister(); +} + #include "dolphincolumnview.moc" |
