X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/cfb135f24e6b1b3eb1253c8ebf7c8e7307974eea..29c5ab3b74d26657c60b40770676be082caa953d:/src/dolphincolumnview.cpp diff --git a/src/dolphincolumnview.cpp b/src/dolphincolumnview.cpp index 1ed8b6b82..f34be92e9 100644 --- a/src/dolphincolumnview.cpp +++ b/src/dolphincolumnview.cpp @@ -21,10 +21,13 @@ #include "dolphincolumnwidget.h" #include "dolphincontroller.h" -#include "dolphinsettings.h" +#include "settings/dolphinsettings.h" +#include "zoomlevelinfo.h" #include "dolphin_columnmodesettings.h" +#include + #include #include #include @@ -48,13 +51,12 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control setSelectionMode(ExtendedSelection); setFocusPolicy(Qt::NoFocus); setFrameShape(QFrame::NoFrame); + setLayoutDirection(Qt::LeftToRight); connect(this, SIGNAL(viewportEntered()), controller, SLOT(emitViewportEntered())); - connect(controller, SIGNAL(zoomIn()), - this, SLOT(zoomIn())); - connect(controller, SIGNAL(zoomOut()), - this, SLOT(zoomOut())); + connect(controller, SIGNAL(zoomLevelChanged(int)), + this, SLOT(setZoomLevel(int))); connect(controller, SIGNAL(activationChanged(bool)), this, SLOT(updateColumnsBackground(bool))); @@ -63,6 +65,8 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control this, SLOT(slotSortingChanged(DolphinView::Sorting))); connect(view, SIGNAL(sortOrderChanged(Qt::SortOrder)), this, SLOT(slotSortOrderChanged(Qt::SortOrder))); + connect(view, SIGNAL(sortFoldersFirstChanged(bool)), + this, SLOT(slotSortFoldersFirstChanged(bool))); connect(view, SIGNAL(showHiddenFilesChanged()), this, SLOT(slotShowHiddenFilesChanged())); connect(view, SIGNAL(showPreviewChanged()), @@ -81,7 +85,7 @@ DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* control m_emptyViewport = new QFrame(viewport()); m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken); - updateDecorationSize(); + updateDecorationSize(view->showPreview()); updateColumnsBackground(true); } @@ -92,9 +96,7 @@ DolphinColumnView::~DolphinColumnView() QModelIndex DolphinColumnView::indexAt(const QPoint& point) const { foreach (DolphinColumnWidget* column, m_columns) { - const QPoint topLeft = column->frameGeometry().topLeft(); - const QPoint adjustedPoint(point.x() - topLeft.x(), point.y() - topLeft.y()); - const QModelIndex index = column->indexAt(adjustedPoint); + const QModelIndex index = column->indexAt(columnPosition(column, point)); if (index.isValid()) { return index; } @@ -103,6 +105,18 @@ QModelIndex DolphinColumnView::indexAt(const QPoint& point) const return QModelIndex(); } +KFileItem DolphinColumnView::itemAt(const QPoint& point) const +{ + foreach (DolphinColumnWidget* column, m_columns) { + KFileItem item = column->itemAt(columnPosition(column, point)); + if (!item.isNull()) { + return item; + } + } + + return KFileItem(); +} + void DolphinColumnView::scrollTo(const QModelIndex& index, ScrollHint hint) { activeColumn()->scrollTo(index, hint); @@ -180,7 +194,7 @@ void DolphinColumnView::showColumn(const KUrl& url) QList::iterator start = m_columns.begin() + columnIndex; QList::iterator end = m_columns.end(); for (QList::iterator it = start; it != end; ++it) { - (*it)->deleteLater(); + deleteColumn(*it); } m_columns.erase(start, end); @@ -254,6 +268,16 @@ void DolphinColumnView::editItem(const KFileItem& item) activeColumn()->editItem(item); } +KFileItemList DolphinColumnView::selectedItems() const +{ + return activeColumn()->selectedItems(); +} + +QMimeData* DolphinColumnView::selectionMimeData() const +{ + return activeColumn()->selectionMimeData(); +} + void DolphinColumnView::selectAll() { activeColumn()->selectAll(); @@ -347,35 +371,24 @@ void DolphinColumnView::wheelEvent(QWheelEvent* event) // let Ctrl+wheel events propagate to the DolphinView for icon zooming if ((event->modifiers() & Qt::ControlModifier) == Qt::ControlModifier) { event->ignore(); - return; + } else { + QAbstractItemView::wheelEvent(event); } - QAbstractItemView::wheelEvent(event); } -void DolphinColumnView::zoomIn() +void DolphinColumnView::setZoomLevel(int level) { - if (isZoomInPossible()) { - ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); - switch (settings->iconSize()) { - case KIconLoader::SizeSmall: settings->setIconSize(KIconLoader::SizeMedium); break; - case KIconLoader::SizeMedium: settings->setIconSize(KIconLoader::SizeLarge); break; - default: Q_ASSERT(false); break; - } - updateDecorationSize(); - } -} + const int size = ZoomLevelInfo::iconSizeForZoomLevel(level); + ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); -void DolphinColumnView::zoomOut() -{ - if (isZoomOutPossible()) { - ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); - switch (settings->iconSize()) { - case KIconLoader::SizeLarge: settings->setIconSize(KIconLoader::SizeMedium); break; - case KIconLoader::SizeMedium: settings->setIconSize(KIconLoader::SizeSmall); break; - default: Q_ASSERT(false); break; - } - updateDecorationSize(); + const bool showPreview = m_controller->dolphinView()->showPreview(); + if (showPreview) { + settings->setPreviewSize(size); + } else { + settings->setIconSize(size); } + + updateDecorationSize(showPreview); } void DolphinColumnView::moveContentHorizontally(int x) @@ -384,10 +397,10 @@ void DolphinColumnView::moveContentHorizontally(int x) layoutColumns(); } -void DolphinColumnView::updateDecorationSize() +void DolphinColumnView::updateDecorationSize(bool showPreview) { ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); - const int iconSize = settings->iconSize(); + const int iconSize = showPreview ? settings->previewSize() : settings->iconSize(); const QSize size(iconSize, iconSize); setIconSize(size); @@ -398,9 +411,6 @@ void DolphinColumnView::updateDecorationSize() } } - m_controller->setZoomInPossible(isZoomInPossible()); - m_controller->setZoomOutPossible(isZoomOutPossible()); - doItemsLayout(); } @@ -440,6 +450,13 @@ void DolphinColumnView::slotSortOrderChanged(Qt::SortOrder order) } } +void DolphinColumnView::slotSortFoldersFirstChanged(bool foldersFirst) +{ + foreach (DolphinColumnWidget* column, m_columns) { + column->setSortFoldersFirst(foldersFirst); + } +} + void DolphinColumnView::slotShowHiddenFilesChanged() { const bool show = m_controller->dolphinView()->showHiddenFiles(); @@ -451,23 +468,12 @@ void DolphinColumnView::slotShowHiddenFilesChanged() void DolphinColumnView::slotShowPreviewChanged() { const bool show = m_controller->dolphinView()->showPreview(); + updateDecorationSize(show); foreach (DolphinColumnWidget* column, m_columns) { column->setShowPreview(show); } } -bool DolphinColumnView::isZoomInPossible() const -{ - ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); - return settings->iconSize() < KIconLoader::SizeLarge; -} - -bool DolphinColumnView::isZoomOutPossible() const -{ - ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings(); - return settings->iconSize() > KIconLoader::SizeSmall; -} - void DolphinColumnView::setActiveColumnIndex(int index) { if (m_index == index) { @@ -579,7 +585,7 @@ void DolphinColumnView::removeAllColumns() QList::iterator start = m_columns.begin() + 1; QList::iterator end = m_columns.end(); for (QList::iterator it = start; it != end; ++it) { - (*it)->deleteLater(); + deleteColumn(*it); } m_columns.erase(start, end); m_index = 0; @@ -587,4 +593,29 @@ void DolphinColumnView::removeAllColumns() assureVisibleActiveColumn(); } +QPoint DolphinColumnView::columnPosition(DolphinColumnWidget* column, const QPoint& point) const +{ + const QPoint topLeft = column->frameGeometry().topLeft(); + return QPoint(point.x() - topLeft.x(), point.y() - topLeft.y()); +} + +void DolphinColumnView::deleteColumn(DolphinColumnWidget* column) +{ + if (column != 0) { + if (m_controller->itemView() == column) { + m_controller->setItemView(0); + } + // deleteWhenNotDragSource(column) does not necessarily delete column, + // and we want its preview generator destroyed immediately. + column->m_previewGenerator->deleteLater(); + column->m_previewGenerator = 0; + column->hide(); + // Prevent automatic destruction of column when this DolphinColumnView + // is destroyed. + column->setParent(0); + column->disconnect(); + emit requestColumnDeletion(column); + } +} + #include "dolphincolumnview.moc"