mirror of
https://invent.kde.org/system/dolphin
synced 2024-09-19 16:31:21 +00:00
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:
parent
62d81f9a9b
commit
7243879a63
|
@ -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"
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
Loading…
Reference in a new issue