diff --git a/src/filewidgets/kfileplacesview.h b/src/filewidgets/kfileplacesview.h --- a/src/filewidgets/kfileplacesview.h +++ b/src/filewidgets/kfileplacesview.h @@ -108,6 +108,8 @@ Q_PRIVATE_SLOT(d, void _k_enableSmoothItemResizing()) Q_PRIVATE_SLOT(d, void _k_capacityBarFadeValueChanged()) Q_PRIVATE_SLOT(d, void _k_triggerDevicePolling()) + Q_PRIVATE_SLOT(d, void triggerItemAppearingAnimation()) + Q_PRIVATE_SLOT(d, void triggerItemDisappearingAnimation()) class Private; Private *const d; diff --git a/src/filewidgets/kfileplacesview.cpp b/src/filewidgets/kfileplacesview.cpp --- a/src/filewidgets/kfileplacesview.cpp +++ b/src/filewidgets/kfileplacesview.cpp @@ -509,6 +509,8 @@ int insertIndicatorHeight(int itemHeight) const; void fadeCapacityBar(const QModelIndex &index, FadeType fadeType); int sectionsCount() const; + void triggerItemAppearingAnimation(); + void triggerItemDisappearingAnimation(); void _k_placeClicked(const QModelIndex &index); void _k_placeEntered(const QModelIndex &index); @@ -644,22 +646,13 @@ if (current != index && placesModel->isHidden(current) && !d->showAll) { KFilePlacesViewDelegate *delegate = static_cast(itemDelegate()); delegate->addDisappearingItem(current); - - if (d->itemDisappearTimeline.state() != QTimeLine::Running) { - delegate->setDisappearingItemProgress(0.0); - d->itemDisappearTimeline.start(); - } + d->triggerItemDisappearingAnimation(); } if (current != index && placesModel->isHidden(index) && !d->showAll) { KFilePlacesViewDelegate *delegate = static_cast(itemDelegate()); delegate->addAppearingItem(index); - - if (d->itemAppearTimeline.state() != QTimeLine::Running) { - delegate->setAppearingItemProgress(0.0); - d->itemAppearTimeline.start(); - } - + d->triggerItemAppearingAnimation(); setRowHidden(index.row(), false); } @@ -699,23 +692,15 @@ delegate->addAppearingItem(index); } } - - if (d->itemAppearTimeline.state() != QTimeLine::Running) { - delegate->setAppearingItemProgress(0.0); - d->itemAppearTimeline.start(); - } + d->triggerItemAppearingAnimation(); } else { for (int i = 0; i < rowCount; ++i) { QModelIndex index = placesModel->index(i, 0); if (index != current && placesModel->isHidden(index)) { delegate->addDisappearingItem(index); } } - - if (d->itemDisappearTimeline.state() != QTimeLine::Running) { - delegate->setDisappearingItemProgress(0.0); - d->itemDisappearTimeline.start(); - } + d->triggerItemDisappearingAnimation(); } } @@ -823,79 +808,73 @@ QAction *result = menu.exec(event->globalPos()); - if (emptyTrash != nullptr && result == emptyTrash) { + if (result != nullptr) { - KIO::JobUiDelegate uiDelegate; - uiDelegate.setWindow(window()); - if (uiDelegate.askDeleteConfirmation(QList(), KIO::JobUiDelegate::EmptyTrash, KIO::JobUiDelegate::DefaultConfirmation)) { - KIO::Job* job = KIO::emptyTrash(); - KJobWidgets::setWindow(job, window()); - job->uiDelegate()->setAutoErrorHandlingEnabled(true); - } - } else if (edit != nullptr && result == edit) { - KBookmark bookmark = placesModel->bookmarkForIndex(index); - QUrl url = bookmark.url(); - QString label = bookmark.text(); - QString iconName = bookmark.icon(); - bool appLocal = !bookmark.metaDataItem(QStringLiteral("OnlyInApp")).isEmpty(); - - if (KFilePlaceEditDialog::getInformation(true, url, label, - iconName, false, appLocal, 64, this)) { - QString appName; - if (appLocal) { - appName = QCoreApplication::instance()->applicationName(); + if (result == emptyTrash) { + KIO::JobUiDelegate uiDelegate; + uiDelegate.setWindow(window()); + if (uiDelegate.askDeleteConfirmation(QList(), KIO::JobUiDelegate::EmptyTrash, KIO::JobUiDelegate::DefaultConfirmation)) { + KIO::Job* job = KIO::emptyTrash(); + KJobWidgets::setWindow(job, window()); + job->uiDelegate()->setAutoErrorHandlingEnabled(true); + } + } else if (result == edit) { + KBookmark bookmark = placesModel->bookmarkForIndex(index); + QUrl url = bookmark.url(); + QString label = bookmark.text(); + QString iconName = bookmark.icon(); + bool appLocal = !bookmark.metaDataItem(QStringLiteral("OnlyInApp")).isEmpty(); + + if (KFilePlaceEditDialog::getInformation(true, url, label, + iconName, false, appLocal, 64, this)) { + QString appName; + if (appLocal) { + appName = QCoreApplication::instance()->applicationName(); + } + + placesModel->editPlace(index, label, url, iconName, appName); } - placesModel->editPlace(index, label, url, iconName, appName); - } - - } else if (remove && (result == remove)) { - placesModel->removePlace(index); - } else if (hideSection && (result == hideSection)) { - const KFilePlacesModel::GroupType type = placesModel->groupType(index); - placesModel->setGroupHidden(type, hideSection->isChecked()); + } else if (result == remove) { + placesModel->removePlace(index); + } else if (result == hideSection) { + const KFilePlacesModel::GroupType type = placesModel->groupType(index); + placesModel->setGroupHidden(type, hideSection->isChecked()); - if (!d->showAll && hideSection->isChecked()) { - delegate->addDisappearingItemGroup(index); - if (d->itemDisappearTimeline.state() != QTimeLine::Running) { - delegate->setDisappearingItemProgress(0.0); - d->itemDisappearTimeline.start(); + if (!d->showAll && hideSection->isChecked()) { + delegate->addDisappearingItemGroup(index); + d->triggerItemDisappearingAnimation(); } - } - } else if (hide && (result == hide)) { - placesModel->setPlaceHidden(index, hide->isChecked()); - QModelIndex current = placesModel->closestItem(d->currentUrl); - - if (index != current && !d->showAll && hide->isChecked()) { - delegate->addDisappearingItem(index); + } else if (result == hide) { + placesModel->setPlaceHidden(index, hide->isChecked()); + QModelIndex current = placesModel->closestItem(d->currentUrl); - if (d->itemDisappearTimeline.state() != QTimeLine::Running) { - delegate->setDisappearingItemProgress(0.0); - d->itemDisappearTimeline.start(); + if (index != current && !d->showAll && hide->isChecked()) { + delegate->addDisappearingItem(index); + d->triggerItemDisappearingAnimation(); } - } - } else if (showAll != nullptr && result == showAll) { - setShowAll(showAll->isChecked()); - } else if (teardown != nullptr && result == teardown) { - placesModel->requestTeardown(index); - } else if (eject != nullptr && result == eject) { - placesModel->requestEject(index); - } else if (add != nullptr && result == add) { - QUrl url = d->currentUrl; - QString label; - QString iconName = QStringLiteral("folder"); - bool appLocal = true; - if (KFilePlaceEditDialog::getInformation(true, url, label, - iconName, true, appLocal, 64, this)) { - QString appName; - if (appLocal) { - appName = QCoreApplication::instance()->applicationName(); + } else if (result == showAll) { + setShowAll(showAll->isChecked()); + } else if (result == teardown) { + placesModel->requestTeardown(index); + } else if (result == eject) { + placesModel->requestEject(index); + } else if (result == add) { + QUrl url = d->currentUrl; + QString label; + QString iconName = QStringLiteral("folder"); + bool appLocal = true; + if (KFilePlaceEditDialog::getInformation(true, url, label, + iconName, true, appLocal, 64, this)) { + QString appName; + if (appLocal) { + appName = QCoreApplication::instance()->applicationName(); + } + + placesModel->addPlace(label, url, iconName, appName, index); } - - placesModel->addPlace(label, url, iconName, appName, index); } } - index = placesModel->closestItem(d->currentUrl); selectionModel()->setCurrentIndex(index, QItemSelectionModel::ClearAndSelect); } @@ -1075,15 +1054,13 @@ QModelIndex index = placesModel->index(i, 0, parent); if (d->showAll || !placesModel->isHidden(index)) { delegate->addAppearingItem(index); + d->triggerItemAppearingAnimation(); } else { setRowHidden(i, true); } } - if (d->itemAppearTimeline.state() != QTimeLine::Running) { - delegate->setAppearingItemProgress(0.0); - d->itemAppearTimeline.start(); - } + d->triggerItemAppearingAnimation(); d->adaptItemSize(); } @@ -1307,6 +1284,22 @@ return count; } +void KFilePlacesView::Private::triggerItemAppearingAnimation() +{ + if (itemAppearTimeline.state() != QTimeLine::Running) { + delegate->setAppearingItemProgress(0.0); + itemAppearTimeline.start(); + } +} + +void KFilePlacesView::Private::triggerItemDisappearingAnimation() +{ + if (itemDisappearTimeline.state() != QTimeLine::Running) { + delegate->setDisappearingItemProgress(0.0); + itemDisappearTimeline.start(); + } +} + void KFilePlacesView::Private::_k_placeClicked(const QModelIndex &index) { KFilePlacesModel *placesModel = qobject_cast(q->model());