/***************************************************************************
- * Copyright (C) 2006 by Peter Penz (peter.penz@gmx.at) *
+ * Copyright (C) 2007 by Peter Penz <peter.penz@gmx.at> *
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
#include "dolphincolumnview.h"
+#include "dolphinmodel.h"
#include "dolphincontroller.h"
#include "dolphinsettings.h"
#include <kcolorutils.h>
#include <kcolorscheme.h>
-#include <kdirmodel.h>
-#include <kfileitem.h>
+#include <kdirlister.h>
#include <QAbstractProxyModel>
+#include <QApplication>
#include <QPoint>
+#include <QScrollBar>
+#include <QTimeLine>
/**
* Represents one column inside the DolphinColumnView and has been
* drawn in a lighter color. All operations are applied to this column.
*/
void setActive(bool active);
+ inline bool isActive() const;
+ /**
+ * Sets the directory URL of the child column that is shown next to
+ * this column. This property is only used for a visual indication
+ * of the shown directory, it does not trigger a loading of the model.
+ */
+ inline void setChildUrl(const KUrl& url);
+ inline const KUrl& childUrl() const;
+
+ /**
+ * Returns the directory URL that is shown inside the column widget.
+ */
inline const KUrl& url() const;
protected:
virtual void dragMoveEvent(QDragMoveEvent* event);
virtual void dropEvent(QDropEvent* event);
virtual void paintEvent(QPaintEvent* event);
+ virtual void mousePressEvent(QMouseEvent* event);
+ virtual void keyPressEvent(QKeyEvent* event);
+ virtual void contextMenuEvent(QContextMenuEvent* event);
+ virtual void selectionChanged(const QItemSelection& selected, const QItemSelection& deselected);
+
+private:
+ /** Used by ColumnWidget::setActive(). */
+ void activate();
+
+ /** Used by ColumnWidget::setActive(). */
+ void deactivate();
private:
bool m_active;
- KUrl m_url;
- DolphinColumnView* m_columnView;
+ DolphinColumnView* m_view;
+ KUrl m_url; // URL of the directory that is shown
+ KUrl m_childUrl; // URL of the next column that is shown
QStyleOptionViewItem m_viewOptions;
bool m_dragging; // TODO: remove this property when the issue #160611 is solved in Qt 4.4
ColumnWidget::ColumnWidget(QWidget* parent,
DolphinColumnView* columnView,
const KUrl& url) :
- QListView(parent),
+ QListView(columnView),
m_active(true),
+ m_view(columnView),
m_url(url),
- m_columnView(columnView),
+ m_childUrl(),
m_dragging(false),
m_dropRect()
{
- setAcceptDrops(true);
+ setMouseTracking(true);
+ viewport()->setAttribute(Qt::WA_Hover);
+ setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+ setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
setSelectionBehavior(SelectItems);
+ setSelectionMode(QAbstractItemView::ExtendedSelection);
setDragDropMode(QAbstractItemView::DragDrop);
setDropIndicatorShown(false);
-
- setMouseTracking(true);
- viewport()->setAttribute(Qt::WA_Hover);
+ setFocusPolicy(Qt::NoFocus);
// apply the column mode settings to the widget
const ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
const int iconSize = settings->iconSize();
m_viewOptions.decorationSize = QSize(iconSize, iconSize);
+
+ KFileItemDelegate* delegate = new KFileItemDelegate(this);
+ setItemDelegate(delegate);
+
+ activate();
+
+ connect(this, SIGNAL(entered(const QModelIndex&)),
+ m_view->m_controller, SLOT(emitItemEntered(const QModelIndex&)));
+ connect(this, SIGNAL(viewportEntered()),
+ m_view->m_controller, SLOT(emitViewportEntered()));
}
ColumnWidget::~ColumnWidget()
m_active = active;
- QColor bgColor = KColorScheme(KColorScheme::View).background();
- if (!active) {
- const QColor fgColor = KColorScheme(KColorScheme::View).foreground();
- bgColor = KColorUtils::mix(bgColor, fgColor, 0.04);
+ if (active) {
+ activate();
+ } else {
+ deactivate();
}
+}
- QPalette palette = viewport()->palette();
- palette.setColor(viewport()->backgroundRole(), bgColor);
- viewport()->setPalette(palette);
+inline bool ColumnWidget::isActive() const
+{
+ return m_active;
+}
+
+inline void ColumnWidget::setChildUrl(const KUrl& url)
+{
+ m_childUrl = url;
+}
+
+inline const KUrl& ColumnWidget::childUrl() const
+{
+ return m_childUrl;
}
const KUrl& ColumnWidget::url() const
{
QListView::dragMoveEvent(event);
- // TODO: remove this code when the issue #160611 is solved in Qt 4.4
+ // TODO: remove this code when the issue #160611 is solved in Qt 4.4
const QModelIndex index = indexAt(event->pos());
setDirtyRegion(m_dropRect);
m_dropRect = visualRect(index);
const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
if (!urls.isEmpty()) {
event->acceptProposedAction();
- m_columnView->m_controller->indicateDroppedUrls(urls,
- indexAt(event->pos()),
- event->source());
+ m_view->m_controller->indicateDroppedUrls(urls,
+ url(),
+ indexAt(event->pos()),
+ event->source());
}
QListView::dropEvent(event);
m_dragging = false;
void ColumnWidget::paintEvent(QPaintEvent* event)
{
+ if (!m_childUrl.isEmpty()) {
+ // indicate the shown URL of the next column by highlighting the shown folder item
+ const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(m_view->model());
+ const DolphinModel* dolphinModel = static_cast<const DolphinModel*>(proxyModel->sourceModel());
+ const QModelIndex dirIndex = dolphinModel->indexForUrl(m_childUrl);
+ const QModelIndex proxyIndex = proxyModel->mapFromSource(dirIndex);
+ if (proxyIndex.isValid() && !selectionModel()->isSelected(proxyIndex)) {
+ const QRect itemRect = visualRect(proxyIndex);
+ QPainter painter(viewport());
+ painter.save();
+
+ QColor color = KColorScheme(QPalette::Active, KColorScheme::View).foreground().color();
+ color.setAlpha(32);
+ painter.setPen(Qt::NoPen);
+ painter.setBrush(color);
+ painter.drawRect(itemRect);
+
+ painter.restore();
+ }
+ }
+
QListView::paintEvent(event);
// TODO: remove this code when the issue #160611 is solved in Qt 4.4
}
}
+void ColumnWidget::mousePressEvent(QMouseEvent* event)
+{
+ if (!m_active) {
+ m_view->requestActivation(this);
+ }
+
+ QListView::mousePressEvent(event);
+}
+
+void ColumnWidget::keyPressEvent(QKeyEvent* event)
+{
+ QListView::keyPressEvent(event);
+
+ const QItemSelectionModel* selModel = selectionModel();
+ const QModelIndex currentIndex = selModel->currentIndex();
+ const bool triggerItem = currentIndex.isValid()
+ && (event->key() == Qt::Key_Return)
+ && (selModel->selectedIndexes().count() <= 1);
+ if (triggerItem) {
+ m_view->triggerItem(currentIndex);
+ }
+}
+
+void ColumnWidget::contextMenuEvent(QContextMenuEvent* event)
+{
+ if (!m_active) {
+ m_view->requestActivation(this);
+ }
+
+ QListView::contextMenuEvent(event);
+
+ const QModelIndex index = indexAt(event->pos());
+ if (index.isValid() || m_active) {
+ // Only open a context menu above an item or if the mouse is above
+ // the active column.
+ const QPoint pos = m_view->viewport()->mapFromGlobal(event->globalPos());
+ m_view->m_controller->triggerContextMenuRequest(pos);
+ }
+}
+
+void ColumnWidget::selectionChanged(const QItemSelection& selected, const QItemSelection& deselected)
+{
+ QListView::selectionChanged(selected, deselected);
+
+ QItemSelectionModel* selModel = m_view->selectionModel();
+ selModel->select(selected, QItemSelectionModel::Select);
+ selModel->select(deselected, QItemSelectionModel::Deselect);
+}
+
+void ColumnWidget::activate()
+{
+ if (m_view->hasFocus()) {
+ setFocus(Qt::OtherFocusReason);
+ }
+ m_view->setFocusProxy(this);
+
+ // TODO: Connecting to the signal 'activated()' is not possible, as kstyle
+ // does not forward the single vs. doubleclick to it yet (KDE 4.1?). Hence it is
+ // necessary connecting the signal 'singleClick()' or 'doubleClick'.
+ if (KGlobalSettings::singleClick()) {
+ connect(this, SIGNAL(clicked(const QModelIndex&)),
+ m_view, SLOT(triggerItem(const QModelIndex&)));
+ } else {
+ connect(this, SIGNAL(doubleClicked(const QModelIndex&)),
+ m_view, SLOT(triggerItem(const QModelIndex&)));
+ }
+
+ const QColor bgColor = KColorScheme(QPalette::Active, KColorScheme::View).background().color();
+ QPalette palette = viewport()->palette();
+ palette.setColor(viewport()->backgroundRole(), bgColor);
+ viewport()->setPalette(palette);
+
+ if (!m_childUrl.isEmpty()) {
+ // assure that the current index is set on the index that represents
+ // the child URL
+ const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(model());
+ const KDirModel* dirModel = static_cast<const KDirModel*>(proxyModel->sourceModel());
+ const QModelIndex dirIndex = dirModel->indexForUrl(m_childUrl);
+ const QModelIndex proxyIndex = proxyModel->mapFromSource(dirIndex);
+ selectionModel()->setCurrentIndex(proxyIndex, QItemSelectionModel::Current);
+ }
+
+ update();
+}
+
+void ColumnWidget::deactivate()
+{
+ // TODO: Connecting to the signal 'activated()' is not possible, as kstyle
+ // does not forward the single vs. doubleclick to it yet (KDE 4.1?). Hence it is
+ // necessary connecting the signal 'singleClick()' or 'doubleClick'.
+ if (KGlobalSettings::singleClick()) {
+ disconnect(this, SIGNAL(clicked(const QModelIndex&)),
+ m_view, SLOT(triggerItem(const QModelIndex&)));
+ } else {
+ disconnect(this, SIGNAL(doubleClicked(const QModelIndex&)),
+ m_view, SLOT(triggerItem(const QModelIndex&)));
+ }
+
+ QColor bgColor = KColorScheme(QPalette::Active, KColorScheme::View).background().color();
+ const QColor fgColor = KColorScheme(QPalette::Active, KColorScheme::View).foreground().color();
+ bgColor = KColorUtils::mix(bgColor, fgColor, 0.04);
+
+ QPalette palette = viewport()->palette();
+ palette.setColor(viewport()->backgroundRole(), bgColor);
+ viewport()->setPalette(palette);
+
+ selectionModel()->clear();
+
+ update();
+}
+
// ---
DolphinColumnView::DolphinColumnView(QWidget* parent, DolphinController* controller) :
- QColumnView(parent),
- m_controller(controller)
+ QAbstractItemView(parent),
+ m_controller(controller),
+ m_index(-1),
+ m_contentX(0),
+ m_columns(),
+ m_animation(0)
{
Q_ASSERT(controller != 0);
setAcceptDrops(true);
- setSelectionBehavior(SelectItems);
setDragDropMode(QAbstractItemView::DragDrop);
setDropIndicatorShown(false);
+ setSelectionMode(ExtendedSelection);
- if (KGlobalSettings::singleClick()) {
- connect(this, SIGNAL(clicked(const QModelIndex&)),
- this, SLOT(triggerItem(const QModelIndex&)));
- } else {
- connect(this, SIGNAL(doubleClicked(const QModelIndex&)),
- this, SLOT(triggerItem(const QModelIndex&)));
- }
- connect(this, SIGNAL(activated(const QModelIndex&)),
- this, SLOT(triggerItem(const QModelIndex&)));
connect(this, SIGNAL(entered(const QModelIndex&)),
controller, SLOT(emitItemEntered(const QModelIndex&)));
connect(this, SIGNAL(viewportEntered()),
this, SLOT(zoomIn()));
connect(controller, SIGNAL(zoomOut()),
this, SLOT(zoomOut()));
+ connect(controller, SIGNAL(urlChanged(const KUrl&)),
+ this, SLOT(showColumn(const KUrl&)));
+
+ connect(horizontalScrollBar(), SIGNAL(valueChanged(int)),
+ this, SLOT(moveContentHorizontally(int)));
+
+ ColumnWidget* column = new ColumnWidget(viewport(), this, m_controller->url());
+ m_columns.append(column);
+ setActiveColumnIndex(0);
updateDecorationSize();
+
+ m_animation = new QTimeLine(500, this);
+ connect(m_animation, SIGNAL(frameChanged(int)), horizontalScrollBar(), SLOT(setValue(int)));
}
DolphinColumnView::~DolphinColumnView()
{
}
-QAbstractItemView* DolphinColumnView::createColumn(const QModelIndex& index)
+QModelIndex DolphinColumnView::indexAt(const QPoint& point) const
{
- // To be able to visually indicate whether a column is active (which means
- // that it represents the content of the URL navigator), the column
- // must remember its URL.
- const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(model());
- const KDirModel* dirModel = static_cast<const KDirModel*>(proxyModel->sourceModel());
+ foreach (ColumnWidget* 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);
+ if (index.isValid()) {
+ return index;
+ }
+ }
- const QModelIndex dirModelIndex = proxyModel->mapToSource(index);
- KFileItem* fileItem = dirModel->itemForIndex(dirModelIndex);
+ return QModelIndex();
+}
- KUrl columnUrl;
- if (fileItem != 0) {
- columnUrl = fileItem->url();
- }
+void DolphinColumnView::scrollTo(const QModelIndex& index, ScrollHint hint)
+{
+ activeColumn()->scrollTo(index, hint);
+}
- ColumnWidget* view = new ColumnWidget(viewport(),
- this,
- columnUrl);
+QRect DolphinColumnView::visualRect(const QModelIndex& index) const
+{
+ return activeColumn()->visualRect(index);
+}
- // The following code has been copied 1:1 from QColumnView::createColumn().
- // Copyright (C) 1992-2007 Trolltech ASA.
- // It would be nice if QColumnView would offer a protected method for this
- // (already send input to Benjamin, hopefully possible in Qt4.4)
+void DolphinColumnView::setModel(QAbstractItemModel* model)
+{
+ activeColumn()->setModel(model);
+ QAbstractItemView::setModel(model);
+}
- view->setFrameShape(QFrame::NoFrame);
- view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
- view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn);
- view->setMinimumWidth(100);
- view->setAttribute(Qt::WA_MacShowFocusRect, false);
+bool DolphinColumnView::isIndexHidden(const QModelIndex& index) const
+{
+ return false;//activeColumn()->isIndexHidden(index);
+}
- // copy the 'view' behavior
- view->setDragDropMode(dragDropMode());
- view->setDragDropOverwriteMode(dragDropOverwriteMode());
- view->setDropIndicatorShown(showDropIndicator());
- view->setAlternatingRowColors(alternatingRowColors());
- view->setAutoScroll(hasAutoScroll());
- view->setEditTriggers(editTriggers());
- view->setHorizontalScrollMode(horizontalScrollMode());
- view->setIconSize(iconSize());
- view->setSelectionBehavior(selectionBehavior());
- view->setSelectionMode(selectionMode());
- view->setTabKeyNavigation(tabKeyNavigation());
- view->setTextElideMode(textElideMode());
- view->setVerticalScrollMode(verticalScrollMode());
+QModelIndex DolphinColumnView::moveCursor(CursorAction cursorAction, Qt::KeyboardModifiers modifiers)
+{
+ // Parts of this code have been taken from QColumnView::moveCursor().
+ // Copyright (C) 1992-2007 Trolltech ASA.
+
+ Q_UNUSED(modifiers);
+ if (model() == 0) {
+ return QModelIndex();
+ }
- view->setModel(model());
+ const QModelIndex current = currentIndex();
+ if (isRightToLeft()) {
+ if (cursorAction == MoveLeft) {
+ cursorAction = MoveRight;
+ } else if (cursorAction == MoveRight) {
+ cursorAction = MoveLeft;
+ }
+ }
- // set the delegate to be the columnview delegate
- QAbstractItemDelegate* delegate = view->itemDelegate();
- view->setItemDelegate(itemDelegate());
- delete delegate;
+ switch (cursorAction) {
+ case MoveLeft:
+ if (m_index > 0) {
+ setActiveColumnIndex(m_index - 1);
+ }
+ break;
- view->setRootIndex(index);
+ case MoveRight:
+ if (m_index < m_columns.count() - 1) {
+ setActiveColumnIndex(m_index + 1);
+ }
+ break;
- if (model()->canFetchMore(index)) {
- model()->fetchMore(index);
+ default:
+ break;
}
- return view;
+ return QModelIndex();
}
-void DolphinColumnView::contextMenuEvent(QContextMenuEvent* event)
+void DolphinColumnView::setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags flags)
{
- QColumnView::contextMenuEvent(event);
- m_controller->triggerContextMenuRequest(event->pos());
+ //activeColumn()->setSelection(rect, flags);
}
-void DolphinColumnView::mousePressEvent(QMouseEvent* event)
+QRegion DolphinColumnView::visualRegionForSelection(const QItemSelection& selection) const
{
- m_controller->triggerActivation();
- QColumnView::mousePressEvent(event);
+ return QRegion(); //activeColumn()->visualRegionForSelection(selection);
}
-void DolphinColumnView::dragEnterEvent(QDragEnterEvent* event)
+int DolphinColumnView::horizontalOffset() const
{
- if (event->mimeData()->hasUrls()) {
- event->acceptProposedAction();
- }
+ return -m_contentX;
}
-void DolphinColumnView::dropEvent(QDropEvent* event)
+int DolphinColumnView::verticalOffset() const
{
- const KUrl::List urls = KUrl::List::fromMimeData(event->mimeData());
- if (!urls.isEmpty()) {
- m_controller->indicateDroppedUrls(urls,
- indexAt(event->pos()),
- event->source());
- event->acceptProposedAction();
- }
- QColumnView::dropEvent(event);
+ return 0;
+}
+
+void DolphinColumnView::mousePressEvent(QMouseEvent* event)
+{
+ m_controller->triggerActivation();
+ QAbstractItemView::mousePressEvent(event);
+}
+
+void DolphinColumnView::resizeEvent(QResizeEvent* event)
+{
+ QAbstractItemView::resizeEvent(event);
+ layoutColumns();
+ updateScrollBar();
}
void DolphinColumnView::zoomIn()
{
m_controller->triggerItem(index);
- // Update the activation state of all columns. Only the column
- // which represents the URL of the URL navigator is marked as active.
- const KUrl& navigatorUrl = m_controller->url();
+ const Qt::KeyboardModifiers modifiers = QApplication::keyboardModifiers();
+ if ((modifiers & Qt::ControlModifier) || (modifiers & Qt::ShiftModifier)) {
+ return;
+ }
+
+ const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(model());
+ const KDirModel* dirModel = static_cast<const KDirModel*>(proxyModel->sourceModel());
+ const KFileItem item = dirModel->itemForIndex(proxyModel->mapToSource(index));
+ if ((item.url() != activeColumn()->url()) && item.isDir()) {
+ deleteInactiveChildColumns();
+
+ const KUrl& childUrl = m_controller->url();
+ activeColumn()->setChildUrl(childUrl);
+
+ ColumnWidget* column = new ColumnWidget(viewport(), this, childUrl);
+ column->setModel(model());
+ column->setRootIndex(index);
+
+ m_columns.append(column);
+
+ setActiveColumnIndex(m_index + 1);
+
+ // Before invoking layoutColumns() the column must be shown. To prevent
+ // a flickering the initial geometry is set to be invisible.
+ column->setGeometry(QRect(-1, -1, 1, 1));
+ column->show();
+
+ layoutColumns();
+ updateScrollBar();
+ assureVisibleActiveColumn();
+ }
+}
+
+void DolphinColumnView::moveContentHorizontally(int x)
+{
+ m_contentX = -x;
+ layoutColumns();
+}
+
+void DolphinColumnView::showColumn(const KUrl& url)
+{
+ if (!m_columns[0]->url().isParentOf(url)) {
+ // the URL is no child URL of the column view, hence do nothing
+ return;
+ }
+
+ int columnIndex = 0;
+ foreach (ColumnWidget* column, m_columns) {
+ if (column->url() == url) {
+ // the column represents already the requested URL, hence activate it
+ requestActivation(column);
+ return;
+ } else if (!column->url().isParentOf(url)) {
+ // the column is no parent of the requested URL, hence it must
+ // be deleted and a new column must be loaded
+ if (columnIndex > 0) {
+ setActiveColumnIndex(columnIndex - 1);
+ deleteInactiveChildColumns();
+ }
+
+ const QAbstractProxyModel* proxyModel = static_cast<const QAbstractProxyModel*>(model());
+ const KDirModel* dirModel = static_cast<const KDirModel*>(proxyModel->sourceModel());
+ const QModelIndex dirIndex = dirModel->indexForUrl(url);
+ if (dirIndex.isValid()) {
+ triggerItem(proxyModel->mapFromSource(dirIndex));
+ }
+ return;
+ }
+ ++columnIndex;
+ }
+}
+
+void DolphinColumnView::updateDecorationSize()
+{
+ ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
+ const int iconSize = settings->iconSize();
+
foreach (QObject* object, viewport()->children()) {
if (object->inherits("QListView")) {
ColumnWidget* widget = static_cast<ColumnWidget*>(object);
- widget->setActive(navigatorUrl == widget->url());
+ widget->setDecorationSize(QSize(iconSize, iconSize));
}
}
+
+ m_controller->setZoomInPossible(isZoomInPossible());
+ m_controller->setZoomOutPossible(isZoomOutPossible());
+
+ doItemsLayout();
}
bool DolphinColumnView::isZoomInPossible() const
return settings->iconSize() > K3Icon::SizeSmall;
}
-void DolphinColumnView::updateDecorationSize()
+void DolphinColumnView::setActiveColumnIndex(int index)
{
+ if (m_index == index) {
+ return;
+ }
+
+ const bool hasActiveColumn = (m_index >= 0);
+ if (hasActiveColumn) {
+ m_columns[m_index]->setActive(false);
+ }
+
+ m_index = index;
+ m_columns[m_index]->setActive(true);
+
+ m_controller->setUrl(m_columns[m_index]->url());
+}
+
+void DolphinColumnView::layoutColumns()
+{
+ int x = m_contentX;
ColumnModeSettings* settings = DolphinSettings::instance().columnModeSettings();
- const int iconSize = settings->iconSize();
+ const int columnWidth = settings->columnWidth();
+ foreach (ColumnWidget* column, m_columns) {
+ column->setGeometry(QRect(x, 0, columnWidth, viewport()->height()));
+ x += columnWidth;
+ }
+}
- foreach (QObject* object, viewport()->children()) {
- if (object->inherits("QListView")) {
- ColumnWidget* widget = static_cast<ColumnWidget*>(object);
- widget->setDecorationSize(QSize(iconSize, iconSize));
+void DolphinColumnView::updateScrollBar()
+{
+ int contentWidth = 0;
+ foreach (ColumnWidget* column, m_columns) {
+ contentWidth += column->width();
+ }
+
+ horizontalScrollBar()->setPageStep(contentWidth);
+ horizontalScrollBar()->setRange(0, contentWidth - viewport()->width());
+}
+
+void DolphinColumnView::assureVisibleActiveColumn()
+{
+ const int viewportWidth = viewport()->width();
+ const int x = activeColumn()->x();
+ const int width = activeColumn()->width();
+ if (x + width > viewportWidth) {
+ int newContentX = m_contentX - x - width + viewportWidth;
+ if (newContentX > 0) {
+ newContentX = 0;
}
+ m_animation->setFrameRange(-m_contentX, -newContentX);
+ m_animation->start();
+ } else if (x < 0) {
+ const int newContentX = m_contentX - x;
+ m_animation->setFrameRange(-m_contentX, -newContentX);
+ m_animation->start();
}
+}
- m_controller->setZoomInPossible(isZoomInPossible());
- m_controller->setZoomOutPossible(isZoomOutPossible());
+void DolphinColumnView::requestActivation(ColumnWidget* column)
+{
+ if (column->isActive()) {
+ assureVisibleActiveColumn();
+ } else {
+ int index = 0;
+ foreach (ColumnWidget* currColumn, m_columns) {
+ if (currColumn == column) {
+ setActiveColumnIndex(index);
+ assureVisibleActiveColumn();
+ return;
+ }
+ ++index;
+ }
+ }
+}
- doItemsLayout();
+void DolphinColumnView::deleteInactiveChildColumns()
+{
+ QList<ColumnWidget*>::iterator start = m_columns.begin() + m_index + 1;
+ QList<ColumnWidget*>::iterator end = m_columns.end();
+ for (QList<ColumnWidget*>::iterator it = start; it != end; ++it) {
+ (*it)->deleteLater();
+ }
+ m_columns.erase(start, end);
}
#include "dolphincolumnview.moc"