void DolphinView::slotChangeNameFilter(const QString& nameFilter) { // The name filter of KDirLister does a 'hard' filtering, which // means that only the items are shown where the names match // exactly the filter. This is non-transparent for the user, which // just wants to have a 'soft' filtering: does the name contain // the filter string? QString adjustedFilter(nameFilter); adjustedFilter.insert(0, '*'); adjustedFilter.append('*'); 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); } } }
KFileItem * KCombiView::nextItem( const KFileItem *fileItem ) const { if ( !right ) return left->nextItem( fileItem ); KFileView *preferredView = focusView( left ); KFileView *otherView = (preferredView == left) ? right : left; KFileItem *item = preferredView->nextItem( fileItem ); if ( item ) m_lastViewForNextItem = preferredView; else { // no item, check other view // when changing from one to another view, we need to continue // with the next view's first item! if ( m_lastViewForNextItem != otherView ) { m_lastViewForNextItem = otherView; return otherView->firstFileItem(); } item = otherView->nextItem( fileItem ); m_lastViewForNextItem = otherView; } return item; }
void DolphinView::slotCompleted() { m_refreshing = true; KFileView* view = fileView(); view->clearView(); // TODO: in Qt4 the code should get a lot // simpler and nicer due to Interview... if (m_iconsView != 0) { m_iconsView->beginItemUpdates(); } if (m_detailsView != 0) { m_detailsView->beginItemUpdates(); } if (m_showProgress) { m_statusBar->setProgressText(QString::null); m_statusBar->setProgress(100); m_showProgress = false; } KFileItemList items(m_dirLister->items()); KFileItemListIterator it(items); m_fileCount = 0; m_folderCount = 0; KFileItem* item = 0; while ((item = it.current()) != 0) { view->insertItem(item); if (item->isDir()) { ++m_folderCount; } else { ++m_fileCount; } ++it; } updateStatusBar(); if (m_iconsView != 0) { // Prevent a flickering of the icon view widget by giving a small // timeslot to swallow asynchronous update events. m_iconsView->setUpdatesEnabled(false); QTimer::singleShot(10, this, SLOT(slotDelayedUpdate())); } if (m_detailsView != 0) { m_detailsView->endItemUpdates(); m_refreshing = false; } }
KFileItem * KCombiView::firstFileItem() const { if ( !right ) return left->firstFileItem(); KFileView *preferredView = focusView( left ); KFileView *otherView = (preferredView == left) ? right : left; KFileItem *item = preferredView->firstFileItem(); if ( !item ) item = otherView->firstFileItem(); return item; }
void DolphinView::updateURL() { KFileView* fileView = (m_iconsView != 0) ? static_cast<KFileView*>(m_iconsView) : static_cast<KFileView*>(m_detailsView); KFileItem* fileItem = 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 if (fileItem->isFile()) { // allow to browse through ZIP and tar files KMimeType::Ptr mime = fileItem->mimeTypePtr(); if (mime->is("application/x-zip")) { KURL url = fileItem->url(); url.setProtocol("zip"); setURL(url); } else if (mime->is("application/x-tar") || mime->is("application/x-tarz") || mime->is("application/x-tbz") || mime->is("application/x-tgz") || mime->is("application/x-tzo")) { KURL url = fileItem->url(); url.setProtocol("tar"); setURL(url); } else { fileItem->run(); } } else { fileItem->run(); } }
KFileItem * KCombiView::currentFileItem() const { // we can actually have two current items, one in each view. So we simply // prefer the fileview's item over the directory's. // Smarter: if the right view has focus, prefer that over the left. if ( !right ) return left->currentFileItem(); KFileView *preferredView = focusView( right ); KFileItem *item = preferredView->currentFileItem(); if ( !item && preferredView != left ) item = left->currentFileItem(); return item; }
void DolphinView::setSortOrder(Qt::SortOrder order) { if (sortOrder() != order) { KFileView* view = fileView(); int sorting = view->sorting(); sorting = (order == Qt::Ascending) ? (sorting & ~QDir::Reversed) : (sorting | QDir::Reversed); ViewProperties props(url()); props.setSortOrder(order); view->setSorting(static_cast<QDir::SortSpec>(sorting)); emit signalSortOrderChanged(order); } }
void DolphinView::setSorting(Sorting sorting) { if (sorting != this->sorting()) { KFileView* view = fileView(); int spec = view->sorting() & ~QDir::Name & ~QDir::Size & ~QDir::Time & ~QDir::Unsorted; switch (sorting) { case SortByName: spec = spec | QDir::Name; break; case SortBySize: spec = spec | QDir::Size; break; case SortByDate: spec = spec | QDir::Time; break; default: break; } ViewProperties props(url()); props.setSorting(sorting); view->setSorting(static_cast<QDir::SortSpec>(spec)); emit signalSortingChanged(sorting); } }