X-Git-Url: https://cloud.milkyroute.net/gitweb/dolphin.git/blobdiff_plain/418cfc1d7420eec3b8624b03e1e8250ba31dc08b..834b145d214a1edede902efaef19b583b2fe570e:/src/dolphinview.cpp diff --git a/src/dolphinview.cpp b/src/dolphinview.cpp index 1dba37ad5..d66cfd924 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,20 @@ 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 crashes when clicking on an item KFileItemDelegate* delegate = new KFileItemDelegate(this); + delegate->setAdditionalInformation(KFileItemDelegate::FriendlyMimeType); m_iconsView->setItemDelegate(delegate); m_dirLister->setDelayedMimeTypes(true); - new KMimeTypeResolver(m_iconsView, model); + new KMimeTypeResolver(m_iconsView, m_dirModel); m_iconSize = K3Icon::SizeMedium; @@ -176,6 +188,22 @@ DolphinView::Mode DolphinView::mode() const return m_mode; } +void DolphinView::setShowPreview(bool show) +{ + ViewProperties props(m_urlNavigator->url()); + props.setShowPreview(show); + + // TODO: wait until previews are possible with KFileItemDelegate + + emit showPreviewChanged(); +} + +bool DolphinView::showPreview() const +{ + // TODO: wait until previews are possible with KFileItemDelegate + return true; +} + void DolphinView::setShowHiddenFiles(bool show) { if (m_dirLister->showingDotFiles() == show) { @@ -198,14 +226,6 @@ bool DolphinView::showHiddenFiles() const return m_dirLister->showingDotFiles(); } -void DolphinView::setViewProperties(const ViewProperties& props) -{ - setMode(props.viewMode()); - setSorting(props.sorting()); - setSortOrder(props.sortOrder()); - setShowHiddenFiles(props.showHiddenFiles()); -} - void DolphinView::renameSelectedItems() { const KUrl::List urls = selectedUrls(); @@ -395,8 +415,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 +423,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 +432,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 +440,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 +485,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); } @@ -615,38 +626,41 @@ DolphinMainWindow* DolphinView::mainWindow() const void DolphinView::loadDirectory(const KUrl& url) { const ViewProperties props(url); - setMode(props.viewMode()); + + const Mode mode = props.viewMode(); + if (m_mode != mode) { + m_mode = mode; + applyModeToView(); + emit modeChanged(); + } const bool showHiddenFiles = props.showHiddenFiles(); - setShowHiddenFiles(showHiddenFiles); - m_dirLister->setShowingDotFiles(showHiddenFiles); + if (showHiddenFiles != m_dirLister->showingDotFiles()) { + m_dirLister->setShowingDotFiles(showHiddenFiles); + emit showHiddenFilesChanged(); + } + + const DolphinView::Sorting sorting = props.sorting(); + if (sorting != m_proxyModel->sorting()) { + m_proxyModel->setSorting(sorting); + emit sortingChanged(sorting); + } - setSorting(props.sorting()); - setSortOrder(props.sortOrder()); + const Qt::SortOrder sortOrder = props.sortOrder(); + if (sortOrder != m_proxyModel->sortOrder()) { + m_proxyModel->setSortOrder(sortOrder); + emit sortOrderChanged(sortOrder); + } + + // TODO: handle previews (props.showPreview()) startDirLister(url); emit urlChanged(url); } -void DolphinView::triggerIconsViewItem(Q3IconViewItem* item) -{ - /* KDE4-TODO: - const Qt::ButtonState keyboardState = KApplication::keyboardMouseState(); - const bool isSelectionActive = ((keyboardState & Qt::ShiftModifier) > 0) || - ((keyboardState & Qt::ControlModifier) > 0);*/ - const bool isSelectionActive = false; - if ((item != 0) && !isSelectionActive) { - // Updating the Url must be done outside the scope of this slot, - // as iconview items will get deleted. - QTimer::singleShot(0, this, SLOT(updateUrl())); - mainWindow()->setActiveView(this); - } -} - 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; } @@ -674,35 +688,6 @@ void DolphinView::triggerItem(const QModelIndex& index) } } -void DolphinView::updateUrl() -{ - //KFileView* fileView = (m_iconsView != 0) ? static_cast(m_iconsView) : - // static_cast(m_iconsView); - - KFileItem* fileItem = 0; // TODO: fileView->currentFileItem(); - if (fileItem == 0) { - return; - } - - if (fileItem->isDir()) { - // Prefer the local path over the Url. This assures that the - // volume space information is correct. Assuming that the Url is media:/sda1, - // and the local path is /windows/C: For the Url the space info is related - // to the root partition (and hence wrong) and for the local path the space - // info is related to the windows partition (-> correct). - const QString localPath(fileItem->localPath()); - if (localPath.isEmpty()) { - setUrl(fileItem->url()); - } - else { - setUrl(KUrl(localPath)); - } - } - else { - fileItem->run(); - } -} - void DolphinView::slotPercent(int percent) { if (m_showProgress) { @@ -984,19 +969,22 @@ void DolphinView::slotChangeNameFilter(const QString& nameFilter) void DolphinView::applyModeToView() { - //m_iconsView->setAlternatingRowColors(true); m_iconsView->setSelectionMode(QAbstractItemView::ExtendedSelection); // TODO: the following code just tries to test some QListView capabilities switch (m_mode) { case IconsView: m_iconsView->setViewMode(QListView::IconMode); - m_iconsView->setGridSize(QSize(128, 64)); + m_iconsView->setSpacing(32); + // m_iconsView->setAlternatingRowColors(false); + // m_iconsView->setGridSize(QSize(128, 64)); break; case DetailsView: m_iconsView->setViewMode(QListView::ListMode); - m_iconsView->setGridSize(QSize(256, 24)); + m_iconsView->setSpacing(0); + // m_iconsView->setAlternatingRowColors(true); + // m_iconsView->setGridSize(QSize(256, 24)); break; } }