+ 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;
+ }
+ view->hide();
+ m_dragSource = view;
+ } else {
+ view->deleteLater();
+ }
+ }
+
+ m_iconsView = 0;
+ m_detailsView = 0;
+
+ if (m_columnsContainer != 0) {
+ m_columnsContainer->deleteLater();
+ }
+ m_columnsContainer = 0;
+}
+
+
+void DolphinView::ViewAccessor::prepareUrlChange(const KUrl& url)
+{
+ if (m_columnsContainer != 0) {
+ m_columnsContainer->showColumn(url);
+ }
+
+ if(!m_detailsViewExpander.isNull()) {
+ // Stop expanding items in the current folder
+ m_detailsViewExpander->stop();
+ }
+}
+
+QAbstractItemView* DolphinView::ViewAccessor::itemView() const
+{
+ if (m_iconsView != 0) {
+ return m_iconsView;
+ }
+