let the column-widgets of the Column View be aware about their URL, as this simplifies the activation/deactivation handling of columns

svn path=/trunk/KDE/kdebase/apps/; revision=686217
This commit is contained in:
Peter Penz 2007-07-10 20:33:17 +00:00
parent 62d81f9a9b
commit 7243879a63
2 changed files with 38 additions and 25 deletions

View file

@ -39,7 +39,9 @@
class ColumnWidget : public QListView
{
public:
ColumnWidget(QWidget* parent, DolphinColumnView* columnView);
ColumnWidget(QWidget* parent,
DolphinColumnView* columnView,
const KUrl& url);
virtual ~ColumnWidget();
/** Sets the size of the icons. */
@ -52,6 +54,8 @@ public:
*/
void setActive(bool active);
inline const KUrl& url() const;
protected:
virtual QStyleOptionViewItem viewOptions() const;
virtual void dragEnterEvent(QDragEnterEvent* event);
@ -72,6 +76,7 @@ private:
private:
bool m_active;
DolphinColumnView* m_view;
KUrl m_url;
QStyleOptionViewItem m_viewOptions;
bool m_dragging; // TODO: remove this property when the issue #160611 is solved in Qt 4.4
@ -79,10 +84,12 @@ private:
};
ColumnWidget::ColumnWidget(QWidget* parent,
DolphinColumnView* columnView) :
DolphinColumnView* columnView,
const KUrl& url) :
QListView(parent),
m_active(true),
m_view(columnView),
m_url(url),
m_dragging(false),
m_dropRect()
{
@ -135,6 +142,11 @@ void ColumnWidget::setActive(bool active)
}
}
const KUrl& ColumnWidget::url() const
{
return m_url;
}
QStyleOptionViewItem ColumnWidget::viewOptions() const
{
return m_viewOptions;
@ -222,6 +234,7 @@ void ColumnWidget::activate()
viewport()->setPalette(palette);
setSelectionMode(MultiSelection);
update();
}
void ColumnWidget::deactivate()
@ -235,6 +248,7 @@ void ColumnWidget::deactivate()
viewport()->setPalette(palette);
setSelectionMode(SingleSelection);
update();
}
// ---
@ -277,7 +291,24 @@ DolphinColumnView::~DolphinColumnView()
QAbstractItemView* DolphinColumnView::createColumn(const QModelIndex& index)
{
ColumnWidget* view = new ColumnWidget(viewport(), this);
// let the column widget be aware about its URL...
KUrl columnUrl;
if (viewport()->children().count() == 0) {
// For the first column widget the directory lister has not been started
// yet, hence use the URL from the controller instead.
columnUrl = m_controller->url();
} else {
const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(model());
const KDirModel* dirModel = static_cast<const KDirModel*>(proxyModel->sourceModel());
const QModelIndex dirModelIndex = proxyModel->mapToSource(index);
KFileItem* fileItem = dirModel->itemForIndex(dirModelIndex);
if (fileItem != 0) {
columnUrl = fileItem->url();
}
}
ColumnWidget* view = new ColumnWidget(viewport(), this, columnUrl);
// The following code has been copied 1:1 from QColumnView::createColumn().
// Copyright (C) 1992-2007 Trolltech ASA. In Qt 4.4 the new method
@ -381,15 +412,10 @@ void DolphinColumnView::triggerItem(const QModelIndex& index)
void DolphinColumnView::updateColumnsState(const KUrl& url)
{
const KUrl baseUrl = dirLister()->url();
const int activeIndex = url.path().count('/') - baseUrl.path().count('/');
int index = 0;
foreach (QObject* object, viewport()->children()) {
if (object->inherits("QListView")) {
ColumnWidget* widget = static_cast<ColumnWidget*>(object);
widget->setActive(index == activeIndex);
++index;
widget->setActive(widget->url() == url);
}
}
}
@ -408,17 +434,14 @@ bool DolphinColumnView::isZoomOutPossible() const
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);
m_controller->setUrl(widget->url());
}
++it;
}
}
}
@ -441,11 +464,4 @@ 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"

View file

@ -20,8 +20,8 @@
#ifndef DOLPHINCOLUMNVIEW_H
#define DOLPHINCOLUMNVIEW_H
#include <QtGui/QColumnView>
#include <QtGui/QStyleOption>
#include <QColumnView>
#include <QStyleOption>
class DolphinController;
class KDirLister;
@ -77,9 +77,6 @@ private:
*/
void updateDecorationSize();
/** Returns the directory lister used by the view. */
KDirLister* dirLister() const;
private:
DolphinController* m_controller;