X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/70782d6bb4d3b02c4c48c38ee2867561a706ed84..ba6f7b0232b030b2b3eda4fc126cbc3aba05e5d2:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 2f287f353..1a02ddea0 100644 --- a/src/dolphinview.cpp +++ b/src/dolphinview.cpp @@ -39,6 +39,7 @@ #include "dolphinstatusbar.h" #include "dolphinmainwindow.h" #include "dolphindirlister.h" +#include "dolphinsortfilterproxymodel.h" #include "viewproperties.h" #include "dolphindetailsview.h" #include "dolphiniconsview.h" @@ -57,12 +58,18 @@ DolphinView::DolphinView(DolphinMainWindow *mainWindow, m_refreshing(false), m_showProgress(false), m_mode(mode), - m_mainWindow(mainWindow), - m_statusBar(0), m_iconSize(0), m_folderCount(0), m_fileCount(0), - m_filterBar(0) + m_mainWindow(mainWindow), + m_topLayout(0), + m_urlNavigator(0), + m_iconsView(0), + m_filterBar(0), + m_statusBar(0), + m_dirModel(0), + m_dirLister(0), + m_proxyModel(0) { hide(); setFocusPolicy(Qt::StrongFocus); @@ -96,15 +103,19 @@ DolphinView::DolphinView(DolphinMainWindow *mainWindow, m_iconsView = new DolphinIconsView(this); applyModeToView(); - KDirModel* model = new KDirModel(); - model->setDirLister(m_dirLister); - m_iconsView->setModel(model); + m_dirModel = new KDirModel(); + m_dirModel->setDirLister(m_dirLister); + + m_proxyModel = new DolphinSortFilterProxyModel(this); + m_proxyModel->setSourceModel(m_dirModel); + + m_iconsView->setModel(m_dirModel); // TODO: using m_proxyModel crashed when clicking on an item KFileItemDelegate* delegate = new KFileItemDelegate(this); m_iconsView->setItemDelegate(delegate); m_dirLister->setDelayedMimeTypes(true); - new KMimeTypeResolver(m_iconsView, model); + new KMimeTypeResolver(m_iconsView, m_dirModel); m_iconSize = K3Icon::SizeMedium; @@ -302,12 +313,12 @@ void DolphinView::renameSelectedItems() void DolphinView::selectAll() { - //fileView()->selectAll(); + selectAll(QItemSelectionModel::Select); } void DolphinView::invertSelection() { - //fileView()->invertSelection(); + selectAll(QItemSelectionModel::Toggle); } DolphinStatusBar* DolphinView::statusBar() const @@ -395,8 +406,7 @@ void DolphinView::setSorting(Sorting sorting) ViewProperties props(url()); props.setSorting(sorting); - KDirModel* dirModel = static_cast(m_iconsView->model()); - dirModel->sort(columnIndex(sorting), props.sortOrder()); + m_proxyModel->setSorting(sorting); emit sortingChanged(sorting); } @@ -404,10 +414,7 @@ void DolphinView::setSorting(Sorting sorting) DolphinView::Sorting DolphinView::sorting() const { - // TODO: instead of getting the sorting from the properties just fetch - // them from KDirModel, if such an interface will be offered (David?) - ViewProperties props(url()); - return props.sorting(); + return m_proxyModel->sorting(); } void DolphinView::setSortOrder(Qt::SortOrder order) @@ -416,8 +423,7 @@ void DolphinView::setSortOrder(Qt::SortOrder order) ViewProperties props(url()); props.setSortOrder(order); - KDirModel* dirModel = static_cast(m_iconsView->model()); - dirModel->sort(columnIndex(props.sorting()), order); + m_proxyModel->setSortOrder(order); emit sortOrderChanged(order); } @@ -425,10 +431,7 @@ void DolphinView::setSortOrder(Qt::SortOrder order) Qt::SortOrder DolphinView::sortOrder() const { - // TODO: instead of getting the order from the properties just fetch - // them from KDirModel, if such an interface will be offered (David?) - ViewProperties props(url()); - return props.sortOrder(); + return m_proxyModel->sortOrder(); } void DolphinView::goBack() @@ -473,12 +476,11 @@ KFileItemList DolphinView::selectedItems() const KFileItemList itemList; if (selModel->hasSelection()) { - KDirModel* dirModel = static_cast(m_iconsView->model()); const QModelIndexList indexList = selModel->selectedIndexes(); QModelIndexList::const_iterator end = indexList.end(); for (QModelIndexList::const_iterator it = indexList.begin(); it != end; ++it) { - KFileItem* item = dirModel->itemForIndex(*it); + KFileItem* item = m_dirModel->itemForIndex(*it); if (item != 0) { itemList.append(item); } @@ -645,8 +647,7 @@ void DolphinView::triggerIconsViewItem(Q3IconViewItem* item) void DolphinView::triggerItem(const QModelIndex& index) { - KDirModel* dirModel = static_cast(m_iconsView->model()); - KFileItem* item = dirModel->itemForIndex(index); + KFileItem* item = m_dirModel->itemForIndex(index); if (item == 0) { return; } @@ -814,23 +815,6 @@ void DolphinView::slotContentsMoving(int x, int y) } } -/*KFileView* DolphinView::fileView() const -{ - return (m_mode == DetailsView) ? static_cast(m_iconsView) : - static_cast(m_iconsView); -}*/ - -Q3ScrollView* DolphinView::scrollView() const -{ - return 0; //(m_mode == DetailsView) ? static_cast(m_iconsView) : - // static_cast(m_iconsView); -} - -ItemEffectsManager* DolphinView::itemEffectsManager() const -{ - return 0; -} - void DolphinView::startDirLister(const KUrl& url, bool reload) { if (!url.isValid()) { @@ -997,19 +981,6 @@ void DolphinView::slotChangeNameFilter(const QString& nameFilter) m_dirLister->setNameFilter(adjustedFilter); m_dirLister->emitChanges(); - - // TODO: this is a workaround for QIconView: the item position - // stay as they are by filtering, only an inserting of an item - // results to an automatic adjusting of the item position. In Qt4/KDE4 - // this workaround should get obsolete due to Interview. - /*KFileView* view = fileView(); - if (view == m_iconsView) { - KFileItem* first = view->firstFileItem(); - if (first != 0) { - view->removeItem(first); - view->insertItem(first); - } - }*/ } void DolphinView::applyModeToView() @@ -1028,11 +999,6 @@ void DolphinView::applyModeToView() m_iconsView->setViewMode(QListView::ListMode); m_iconsView->setGridSize(QSize(256, 24)); break; - - //case PreviewsView: - // m_iconsView->setViewMode(QListView::IconMode); - // m_iconsView->setGridSize(QSize(128, 128)); - // break; } } @@ -1048,4 +1014,17 @@ int DolphinView::columnIndex(Sorting sorting) const return index; } +void DolphinView::selectAll(QItemSelectionModel::SelectionFlags flags) +{ + QItemSelectionModel* selectionModel = m_iconsView->selectionModel(); + const QAbstractItemModel* itemModel = selectionModel->model(); + + const QModelIndex topLeft = itemModel->index(0, 0); + const QModelIndex bottomRight = itemModel->index(itemModel->rowCount() - 1, + itemModel->columnCount() - 1); + + QItemSelection selection(topLeft, bottomRight); + selectionModel->select(selection, flags); +} + #include "dolphinview.moc"