svn path=/trunk/KDE/kdebase/apps/; revision=696076
#include <kdirmodel.h>
#include <QAbstractProxyModel>
#include <kdirmodel.h>
#include <QAbstractProxyModel>
inline const KUrl& url() const;
inline const KUrl& url() const;
+ void obtainSelectionModel();
+ void releaseSelectionModel();
+
protected:
virtual QStyleOptionViewItem viewOptions() const;
virtual void dragEnterEvent(QDragEnterEvent* event);
protected:
virtual QStyleOptionViewItem viewOptions() const;
virtual void dragEnterEvent(QDragEnterEvent* event);
void ColumnWidget::setActive(bool active)
{
void ColumnWidget::setActive(bool active)
{
+ if (active) {
+ obtainSelectionModel();
+ } else {
+ releaseSelectionModel();
+ }
+
if (m_active == active) {
return;
}
if (m_active == active) {
return;
}
+void ColumnWidget::obtainSelectionModel()
+{
+ if (selectionModel() != m_view->selectionModel()) {
+ selectionModel()->deleteLater();
+ setSelectionModel(m_view->selectionModel());
+ }
+}
+
+void ColumnWidget::releaseSelectionModel()
+{
+ if (selectionModel() == m_view->selectionModel()) {
+ QItemSelectionModel* replacementModel = new QItemSelectionModel(model());
+ setSelectionModel(replacementModel);
+ }
+}
+
QStyleOptionViewItem ColumnWidget::viewOptions() const
{
return m_viewOptions;
QStyleOptionViewItem ColumnWidget::viewOptions() const
{
return m_viewOptions;
void ColumnWidget::mousePressEvent(QMouseEvent* event)
{
void ColumnWidget::mousePressEvent(QMouseEvent* event)
{
+ m_view->requestSelectionModel(this);
+
+ bool swallowMousePressEvent = false;
const QModelIndex index = indexAt(event->pos());
if (index.isValid()) {
// A click on an item has been done. Only request an activation
const QModelIndex index = indexAt(event->pos());
if (index.isValid()) {
// A click on an item has been done. Only request an activation
const QModelIndex dirIndex = proxyModel->mapToSource(index);
KFileItem* item = dirModel->itemForIndex(dirIndex);
if (item != 0) {
const QModelIndex dirIndex = proxyModel->mapToSource(index);
KFileItem* item = dirModel->itemForIndex(dirIndex);
if (item != 0) {
+ QItemSelectionModel* selModel = selectionModel();
+
+ const Qt::KeyboardModifiers modifier = QApplication::keyboardModifiers();
+ if (modifier & Qt::ControlModifier) {
+ m_view->requestActivation(this);
+ selModel->select(index, QItemSelectionModel::Select);
+ swallowMousePressEvent = true;
+ } else if (item->isDir()) {
m_childUrl = item->url();
viewport()->update();
m_childUrl = item->url();
viewport()->update();
m_view->requestActivation(this);
}
m_view->requestActivation(this);
}
+
+ // TODO: check behavior with ShiftModifier
+ //if (modifier & Qt::ShiftModifier)
+
+ // TODO: is the assumption OK that Qt::RightButton always represents the context menu button?
+ if (event->button() == Qt::RightButton) {
+ swallowMousePressEvent = true;
+ if (!selModel->isSelected(index)) {
+ clearSelection();
+ }
+ selModel->select(index, QItemSelectionModel::Select);
+ }
}
} else {
// a click on the viewport has been done
}
} else {
// a click on the viewport has been done
// Swallow mouse move events if a click is done on the viewport. Otherwise the QColumnView
// triggers an unwanted loading of directories on hovering folder items.
m_swallowMouseMoveEvents = true;
// Swallow mouse move events if a click is done on the viewport. Otherwise the QColumnView
// triggers an unwanted loading of directories on hovering folder items.
m_swallowMouseMoveEvents = true;
- QListView::mousePressEvent(event);
+ if (!swallowMousePressEvent) {
+ QListView::mousePressEvent(event);
+ }
}
void ColumnWidget::mouseMoveEvent(QMouseEvent* event)
}
void ColumnWidget::mouseMoveEvent(QMouseEvent* event)
setAcceptDrops(true);
setDragDropMode(QAbstractItemView::DragDrop);
setDropIndicatorShown(false);
setAcceptDrops(true);
setDragDropMode(QAbstractItemView::DragDrop);
setDropIndicatorShown(false);
+ setSelectionMode(ExtendedSelection);
if (KGlobalSettings::singleClick()) {
connect(this, SIGNAL(clicked(const QModelIndex&)),
if (KGlobalSettings::singleClick()) {
connect(this, SIGNAL(clicked(const QModelIndex&)),
if (isActive) {
m_controller->setUrl(widget->url());
}
if (isActive) {
m_controller->setUrl(widget->url());
}
+ }
+ }
+}
+
+void DolphinColumnView::requestSelectionModel(QAbstractItemView* view)
+{
+ foreach (QObject* object, viewport()->children()) {
+ if (object->inherits("QListView")) {
+ ColumnWidget* widget = static_cast<ColumnWidget*>(object);
+ if (widget == view) {
+ widget->obtainSelectionModel();
+ } else {
+ widget->releaseSelectionModel();
+ }
+ }
/**
* Requests the activation for the column \a column. The URL
/**
* Requests the activation for the column \a column. The URL
- * navigator will be changed to represent the column.
+ * navigator will be changed to represent the column. It is
+ * assured that the selection model of \a column will be set
+ * to the selection model of the Column View.
*/
void requestActivation(QWidget* column);
*/
void requestActivation(QWidget* column);
+ /**
+ * Requests the selection model from the Column View for \a view.
+ * If another column has already obtained the Column View selection
+ * model, it will be replaced by a default selection model.
+ */
+ void requestSelectionModel(QAbstractItemView* view);
+
private:
DolphinController* m_controller;
private:
DolphinController* m_controller;