+
+ // disconnect all signal/slots
+ disconnect(view);
+ m_controller->disconnect(view);
+ view->disconnect();
+ disconnect(view->verticalScrollBar(), SIGNAL(valueChanged(int)),
+ this, SLOT(emitContentsMoved()));
+ disconnect(view->horizontalScrollBar(), SIGNAL(valueChanged(int)),
+ this, SLOT(emitContentsMoved()));
+
+ m_viewAccessor.deleteView();
+ }
+}
+
+void DolphinView::pasteToUrl(const KUrl& url)
+{
+ addNewFileNames(QApplication::clipboard()->mimeData());
+ KonqOperations::doPaste(this, url);
+}
+
+void DolphinView::updateZoomLevel(int oldZoomLevel)
+{
+ const int newZoomLevel = ZoomLevelInfo::zoomLevelForIconSize(m_viewAccessor.itemView()->iconSize());
+ if (oldZoomLevel != newZoomLevel) {
+ m_controller->setZoomLevel(newZoomLevel);
+ emit zoomLevelChanged(newZoomLevel);
+ }
+}
+
+KUrl::List DolphinView::simplifiedSelectedUrls() const
+{
+ KUrl::List list = selectedUrls();
+ if (itemsExpandable() ) {
+ list = KDirModel::simplifiedUrlList(list);
+ }
+ return list;
+}
+
+QMimeData* DolphinView::selectionMimeData() const
+{
+ const QAbstractItemView* view = m_viewAccessor.itemView();
+ Q_ASSERT((view != 0) && (view->selectionModel() != 0));
+ const QItemSelection selection = m_viewAccessor.proxyModel()->mapSelectionToSource(view->selectionModel()->selection());
+ return m_viewAccessor.dirModel()->mimeData(selection.indexes());
+}
+
+void DolphinView::addNewFileNames(const QMimeData* mimeData)
+{
+ const KUrl::List urls = KUrl::List::fromMimeData(mimeData);
+ foreach (const KUrl& url, urls) {
+ m_newFileNames.insert(url.fileName());
+ }
+}
+
+DolphinView::ViewAccessor::ViewAccessor(DolphinSortFilterProxyModel* proxyModel) :
+ m_iconsView(0),
+ m_detailsView(0),
+ m_columnsContainer(0),
+ m_proxyModel(proxyModel),
+ m_dragSource(0)
+{
+}
+
+DolphinView::ViewAccessor::~ViewAccessor()
+{
+ delete m_dragSource;
+ m_dragSource = 0;
+}
+
+void DolphinView::ViewAccessor::createView(QWidget* parent,
+ DolphinController* controller,
+ Mode mode)
+{
+ Q_ASSERT(itemView() == 0);
+
+ switch (mode) {
+ case IconsView:
+ m_iconsView = new DolphinIconsView(parent, controller, m_proxyModel);
+ break;
+
+ case DetailsView:
+ m_detailsView = new DolphinDetailsView(parent, controller, m_proxyModel);
+ break;
+
+ case ColumnView:
+ m_columnsContainer = new DolphinColumnViewContainer(parent, controller);
+ break;
+
+ default:
+ Q_ASSERT(false);
+ }
+}
+
+void DolphinView::ViewAccessor::deleteView()
+{
+ QAbstractItemView* view = itemView();
+ if (view != 0) {
+ if (DragAndDropHelper::instance().isDragSource(view)) {
+ // The view is a drag source (the feature "Open folders
+ // during drag operations" is used). Deleting the view
+ // during an ongoing drag operation is not allowed, so
+ // this will postponed.
+ if (m_dragSource != 0) {
+ // the old stored view is obviously not the drag source anymore
+ m_dragSource->deleteLater();
+ m_dragSource = 0;