#include "dolphincolumnwidget.h"
#include "dolphincontroller.h"
-#include "dolphinsettings.h"
+#include "settings/dolphinsettings.h"
+#include "zoomlevelinfo.h"
#include "dolphin_columnmodesettings.h"
+#include <kfilepreviewgenerator.h>
+
#include <QPoint>
#include <QScrollBar>
#include <QTimeLine>
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)));
const DolphinView* view = controller->dolphinView();
+ connect(view, SIGNAL(sortingChanged(DolphinView::Sorting)),
+ 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()),
m_emptyViewport = new QFrame(viewport());
m_emptyViewport->setFrameStyle(QFrame::StyledPanel | QFrame::Sunken);
- updateDecorationSize();
+ updateDecorationSize(view->showPreview());
updateColumnsBackground(true);
}
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;
}
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);
QList<DolphinColumnWidget*>::iterator start = m_columns.begin() + columnIndex;
QList<DolphinColumnWidget*>::iterator end = m_columns.end();
for (QList<DolphinColumnWidget*>::iterator it = start; it != end; ++it) {
- (*it)->deleteLater();
+ deleteColumn(*it);
}
m_columns.erase(start, end);
assureVisibleActiveColumn();
}
+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();
{
Q_UNUSED(rect);
Q_UNUSED(flags);
- //activeColumn()->setSelection(rect, flags);
}
QRegion DolphinColumnView::visualRegionForSelection(const QItemSelection& selection) const
{
Q_UNUSED(selection);
- return QRegion(); //activeColumn()->visualRegionForSelection(selection);
+ return QRegion();
}
int DolphinColumnView::horizontalOffset() const
assureVisibleActiveColumn();
}
-void DolphinColumnView::zoomIn()
+void DolphinColumnView::wheelEvent(QWheelEvent* event)
{
- 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();
+ // let Ctrl+wheel events propagate to the DolphinView for icon zooming
+ if ((event->modifiers() & Qt::ControlModifier) == Qt::ControlModifier) {
+ event->ignore();
+ } else {
+ QAbstractItemView::wheelEvent(event);
}
}
-void DolphinColumnView::zoomOut()
+void DolphinColumnView::setZoomLevel(int level)
{
- 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 int size = ZoomLevelInfo::iconSizeForZoomLevel(level);
+ ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
+
+ const bool showPreview = m_controller->dolphinView()->showPreview();
+ if (showPreview) {
+ settings->setPreviewSize(size);
+ } else {
+ settings->setIconSize(size);
}
+
+ updateDecorationSize(showPreview);
}
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);
foreach (QObject* object, viewport()->children()) {
if (object->inherits("QListView")) {
DolphinColumnWidget* widget = static_cast<DolphinColumnWidget*>(object);
- widget->setDecorationSize(QSize(iconSize, iconSize));
+ widget->setDecorationSize(size);
}
}
- m_controller->setZoomInPossible(isZoomInPossible());
- m_controller->setZoomOutPossible(isZoomOutPossible());
-
doItemsLayout();
}
m_active = active;
// dim the background of the viewport
- QPalette palette;
- palette.setColor(viewport()->backgroundRole(), QColor(0, 0, 0, 0));
+ const QPalette::ColorRole role = viewport()->backgroundRole();
+ QColor background = viewport()->palette().color(role);
+ background.setAlpha(0); // make background transparent
+
+ QPalette palette = viewport()->palette();
+ palette.setColor(role, background);
viewport()->setPalette(palette);
foreach (DolphinColumnWidget* column, m_columns) {
}
}
-void DolphinColumnView::slotShowHiddenFilesChanged()
+void DolphinColumnView::slotSortingChanged(DolphinView::Sorting sorting)
{
- const bool show = m_controller->dolphinView()->showHiddenFiles();
foreach (DolphinColumnWidget* column, m_columns) {
- column->setShowHiddenFiles(show);
+ column->setSorting(sorting);
}
}
-void DolphinColumnView::slotShowPreviewChanged()
+void DolphinColumnView::slotSortOrderChanged(Qt::SortOrder order)
{
- const bool show = m_controller->dolphinView()->showPreview();
foreach (DolphinColumnWidget* column, m_columns) {
- column->setShowPreview(show);
+ column->setSortOrder(order);
}
}
-bool DolphinColumnView::isZoomInPossible() const
+void DolphinColumnView::slotSortFoldersFirstChanged(bool foldersFirst)
{
- ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
- return settings->iconSize() < KIconLoader::SizeLarge;
+ foreach (DolphinColumnWidget* column, m_columns) {
+ column->setSortFoldersFirst(foldersFirst);
+ }
}
-bool DolphinColumnView::isZoomOutPossible() const
+void DolphinColumnView::slotShowHiddenFilesChanged()
{
- ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
- return settings->iconSize() > KIconLoader::SizeSmall;
+ const bool show = m_controller->dolphinView()->showHiddenFiles();
+ foreach (DolphinColumnWidget* column, m_columns) {
+ column->setShowHiddenFiles(show);
+ }
+}
+
+void DolphinColumnView::slotShowPreviewChanged()
+{
+ const bool show = m_controller->dolphinView()->showPreview();
+ updateDecorationSize(show);
+ foreach (DolphinColumnWidget* column, m_columns) {
+ column->setShowPreview(show);
+ }
}
void DolphinColumnView::setActiveColumnIndex(int index)
} else {
m_animation->setFrameRange(-m_contentX, -newContentX);
}
- if(m_animation->state() != QTimeLine::Running)
+ if (m_animation->state() != QTimeLine::Running) {
m_animation->start();
+ }
} else if (x < 0) {
const int newContentX = m_contentX - x;
if (isRightToLeft()) {
} else {
m_animation->setFrameRange(-m_contentX, -newContentX);
}
- if(m_animation->state() != QTimeLine::Running)
+ if (m_animation->state() != QTimeLine::Running) {
m_animation->start();
+ }
}
}
void DolphinColumnView::requestActivation(DolphinColumnWidget* column)
{
+ m_controller->setItemView(column);
if (column->isActive()) {
assureVisibleActiveColumn();
} else {
QList<DolphinColumnWidget*>::iterator start = m_columns.begin() + 1;
QList<DolphinColumnWidget*>::iterator end = m_columns.end();
for (QList<DolphinColumnWidget*>::iterator it = start; it != end; ++it) {
- (*it)->deleteLater();
+ deleteColumn(*it);
}
m_columns.erase(start, end);
m_index = 0;
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"