Hello, I added support in the Favorites view in Kickoff for sorting in ascending order or descending order; however, I had a bad implementation, and that resulted in having those context menus being displayed in the other UrlItemViews as well, which it shouldn't do (basically in the Applications view, right clicking an item that was in the favorites would show the "Sort Ascending" and "Sort Descending" context menus. Bad!). Therefore, here is a patch with the fix for that bug.
Thanks, Xtreme Kommander P.S. This time I kept whitespace changes separate! :-)
Index: kickoff/core/favoritesmodel.cpp =================================================================== --- kickoff/core/favoritesmodel.cpp (revision 885669) +++ kickoff/core/favoritesmodel.cpp (working copy) @@ -49,6 +49,10 @@ QStandardItem *item = StandardItemFactory::createItemForUrl(url); headerItem->appendRow(item); } + void insertFavoriteItem(int row, const QString &url) { + QStandardItem *item = StandardItemFactory::createItemForUrl(url); + headerItem->insertRow(row, item); + } void moveFavoriteItem(int startRow, int destRow) { if (destRow == startRow) return; @@ -155,6 +159,18 @@ Private::saveFavorites(); } +void FavoritesModel::insert(int row, const QString &url) +{ + Private::globalFavoriteList.insert(row, url); + Private::globalFavoriteSet << url; + + foreach(FavoritesModel* model, Private::models) { + model->d->insertFavoriteItem(row, url); + } + + Private::saveFavorites(); +} + void FavoritesModel::move(int startRow, int destRow) { // just move the item @@ -195,13 +211,20 @@ return 0; } -void FavoritesModel::sortFavorites(Qt::SortOrder order) +void FavoritesModel::sortFavoritesAscending() { foreach(FavoritesModel *model, Private::models) { - model->d->headerItem->sortChildren(0, order); + model->d->headerItem->sortChildren(0, Qt::AscendingOrder); } } +void FavoritesModel::sortFavoritesDescending() +{ + foreach(FavoritesModel *model, Private::models) { + model->d->headerItem->sortChildren(0, Qt::DescendingOrder); + } +} + bool FavoritesModel::dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex & parent) { @@ -239,6 +262,9 @@ FavoritesModel::move(startRow, destRow); return true; + } else if(action == Qt::CopyAction) { + kDebug() << data->text(); + FavoritesModel::insert(row, data->text()); } return true; Index: kickoff/core/favoritesmodel.h =================================================================== --- kickoff/core/favoritesmodel.h (revision 885669) +++ kickoff/core/favoritesmodel.h (working copy) @@ -43,17 +43,21 @@ /** Add a new item for @p url to the user's favorites list. */ static void add(const QString& url); + static void insert(int row, const QString &url); /** Remove the item associated with @p url from the user's favorites list. */ static void remove(const QString& url); /** Returns true if @p url is in the list of the user's favorite URLs. */ static void move(int startRow, int destRow); static int numberOfFavorites(); - static void sortFavorites(Qt::SortOrder order); static bool isFavorite(const QString& url); virtual bool dropMimeData(const QMimeData *data, Qt::DropAction action, int row, int column, const QModelIndex & parent); +public slots: + void sortFavoritesAscending(); + void sortFavoritesDescending(); + private: class Private; Private * const d; Index: kickoff/ui/launcher.cpp =================================================================== --- kickoff/ui/launcher.cpp (revision 885669) +++ kickoff/ui/launcher.cpp (working copy) @@ -113,8 +113,9 @@ view->setDropIndicatorShown(true); if (name == "Favorites") { view->setDragDropMode(QAbstractItemView::DragDrop); - } else { - view->setDragDropMode(QAbstractItemView::InternalMove); + } else if(name == "Applications" || name == "Computer" || + name == "Recently Used") { + view->setDragDropMode(QAbstractItemView::DragOnly); } view->setModel(model); //view->setCurrentIndex(QModelIndex()); @@ -168,9 +169,21 @@ view->setItemStateProvider(delegate); addView(i18n("Favorites"), KIcon("bookmarks"), model, view); + QAction *sortAscendingAction = new QAction(KIcon("view-sort-ascending"), + i18n("Sort Ascending"), q); + + QAction *sortDescendingAction = new QAction(KIcon("view-sort-descending"), + i18n("Sort Descending"), q); + connect(model, SIGNAL(rowsInserted(QModelIndex, int, int)), q, SLOT(focusFavoritesView())); + connect(sortAscendingAction, SIGNAL(triggered()), model, SLOT(sortFavoritesAscending())); + connect(sortDescendingAction, SIGNAL(triggered()), model, SLOT(sortFavoritesDescending())); - favoritesView = view; + favoritesView = view; + contextMenuFactory->setViewActions(view, QList<QAction*>() + << sortAscendingAction + << sortDescendingAction); + } void setupAllProgramsView() { Index: kickoff/ui/contextmenufactory.cpp =================================================================== --- kickoff/ui/contextmenufactory.cpp (revision 885669) +++ kickoff/ui/contextmenufactory.cpp (working copy) @@ -157,22 +157,6 @@ } } - - QAction *sortAscendingAction = new QAction(this); - QAction *sortDescendingAction = new QAction(this); - if (isFavorite) { - QAction *favoritesSeparator = new QAction(this); - favoritesSeparator->setSeparator(true); - sortAscendingAction->setText(i18n("Sort Ascending")); - sortAscendingAction->setIcon(KIcon("view-sort-ascending")); - - sortDescendingAction->setText(i18n("Sort Descending")); - sortDescendingAction->setIcon(KIcon("view-sort-descending")); - - actions << favoritesSeparator; - actions << sortAscendingAction << sortDescendingAction; - } - // advanced item actions QAction *advancedSeparator = new QAction(this); advancedSeparator->setSeparator(true); @@ -215,12 +199,6 @@ } else { FavoritesModel::add(url); } - } else if (sortAscendingAction && result == sortAscendingAction) { - if (isFavorite) - FavoritesModel::sortFavorites(Qt::AscendingOrder); - } else if (sortDescendingAction && result == sortDescendingAction) { - if (isFavorite) - FavoritesModel::sortFavorites(Qt::DescendingOrder); } else if (ejectAction && result == ejectAction) { access->teardown(); } else if (addToDesktopAction && result == addToDesktopAction) { @@ -256,8 +234,6 @@ delete favoriteAction; delete addToDesktopAction; delete addToPanelAction; - delete sortAscendingAction; - delete sortDescendingAction; delete viewSeparator; delete ejectAction; } Index: kickoff/ui/urlitemview.cpp =================================================================== --- kickoff/ui/urlitemview.cpp (revision 885669) +++ kickoff/ui/urlitemview.cpp (working copy) @@ -533,6 +533,7 @@ d->dragging = true; setDirtyRegion(d->dropRect); + kDebug() << "Drop Action = " << event->dropAction(); event->accept(); } @@ -633,11 +634,17 @@ } else if(d->insertAbove(rect, pos) && d->draggedRow < row) { row--; } - model()->dropMimeData(event->mimeData(), Qt::MoveAction, - row, 0, parent); + if(event->dropAction() == Qt::CopyAction) { + kDebug() << "Copy action"; + model()->dropMimeData(event->mimeData(), event->dropAction(), + row, 0, parent); + } else if(event->dropAction() == Qt::MoveAction) { + model()->dropMimeData(event->mimeData(), event->dropAction(), + row, 0, parent); + } + d->dragging = false; - update(); - event->setDropAction(Qt::MoveAction); + event->accept(); } }
_______________________________________________ Plasma-devel mailing list Plasma-devel@kde.org https://mail.kde.org/mailman/listinfo/plasma-devel