+ // invoked, but Dolphin is not informed about this.
+ DolphinView::Sorting sorting = DolphinSortFilterProxyModel::sortingForColumn(column);
+ const Qt::SortOrder sortOrder = header()->sortIndicatorOrder();
+ m_controller->indicateSortingChange(sorting);
+ m_controller->indicateSortOrderChange(sortOrder);
+}
+
+void DolphinDetailsView::slotEntered(const QModelIndex& index)
+{
+ const QPoint pos = viewport()->mapFromGlobal(QCursor::pos());
+ const int nameColumnWidth = header()->sectionSize(DolphinModel::Name);
+ if (pos.x() < nameColumnWidth) {
+ m_controller->emitItemEntered(itemForIndex(index));
+ }
+ else {
+ m_controller->emitViewportEntered();
+ }
+}
+
+void DolphinDetailsView::updateElasticBand()
+{
+ if (m_showElasticBand) {
+ QRect dirtyRegion(elasticBandRect());
+ m_elasticBandDestination = viewport()->mapFromGlobal(QCursor::pos());
+ dirtyRegion = dirtyRegion.united(elasticBandRect());
+ setDirtyRegion(dirtyRegion);
+ }
+}
+
+QRect DolphinDetailsView::elasticBandRect() const
+{
+ const QPoint pos(contentsPos());
+ const QPoint topLeft(m_elasticBandOrigin.x() - pos.x(), m_elasticBandOrigin.y() - pos.y());
+ return QRect(topLeft, m_elasticBandDestination).normalized();
+}
+
+void DolphinDetailsView::zoomIn()
+{
+ if (isZoomInPossible()) {
+ DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
+ 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();
+ }
+}
+
+void DolphinDetailsView::zoomOut()
+{
+ if (isZoomOutPossible()) {
+ DetailsModeSettings* settings = DolphinSettings::instance().detailsModeSettings();
+ 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();
+ }
+}
+
+void DolphinDetailsView::triggerItem(const QModelIndex& index)
+{
+ const KFileItem item = itemForIndex(index);
+ if (index.isValid() && (index.column() == KDirModel::Name)) {
+ m_controller->triggerItem(item);
+ } else {
+ clearSelection();
+ m_controller->emitItemEntered(item);
+ }
+}
+
+void DolphinDetailsView::configureColumns(const QPoint& pos)
+{
+ KMenu popup(this);
+ popup.addTitle(i18nc("@title:menu", "Columns"));
+
+ QHeaderView* headerView = header();
+ for (int i = DolphinModel::Size; i <= DolphinModel::Type; ++i) {
+ const int logicalIndex = headerView->logicalIndex(i);
+ const QString text = model()->headerData(i, Qt::Horizontal).toString();
+ QAction* action = popup.addAction(text);
+ action->setCheckable(true);
+ action->setChecked(!headerView->isSectionHidden(logicalIndex));
+ action->setData(i);
+ }
+
+ QAction* activatedAction = popup.exec(header()->mapToGlobal(pos));
+ if (activatedAction != 0) {
+ const bool show = activatedAction->isChecked();
+ const int columnIndex = activatedAction->data().toInt();
+
+ KFileItemDelegate::InformationList list = m_controller->dolphinView()->additionalInfo();
+ const KFileItemDelegate::Information info = infoForColumn(columnIndex);
+ if (show) {
+ Q_ASSERT(!list.contains(info));
+ list.append(info);
+ } else {
+ Q_ASSERT(list.contains(info));
+ const int index = list.indexOf(info);
+ list.removeAt(index);