+
+void DraggableTreeView::moveToBeginningOfFolder(const QModelIndex &dropModelIndex, QList<int> *selectedDatabaseIdsListPointer, QList<int> *rootSelectedDatabaseIdsListPointer,
+ std::list<double> *previousParentFolderIdListPointer) const
+{
+ // Get the new parent folder ID.
+ double newParentFolderId = dropModelIndex.siblingAtColumn(BookmarksDialog::FOLDER_ID_COLUMN).data().toDouble();
+
+ // Get a list of all the items in the target folder except those selected.
+ QList<BookmarkStruct> *itemsInFolderExceptSelectedListPointer = BookmarksDatabase::getBookmarksInFolderExcept(newParentFolderId, selectedDatabaseIdsListPointer);
+
+ // Initialize a new display order tracker.
+ int newDisplayOrder = 0;
+
+ // Move all the items to the top of the target folder.
+ for (const int databaseId : *rootSelectedDatabaseIdsListPointer)
+ {
+ // Get the item's current parent folder ID.
+ double currentParentFolderId = BookmarksDatabase::getParentFolderId(databaseId);
+
+ // Add the parent folder ID to the list of previous parent folders if the item is from a different folder.
+ if (currentParentFolderId != newParentFolderId)
+ previousParentFolderIdListPointer->push_back(currentParentFolderId);
+
+ // Update the parent folder and display order for each bookmark.
+ BookmarksDatabase::updateParentFolderAndDisplayOrder(databaseId, newParentFolderId, newDisplayOrder);
+
+ // Increment the new display order.
+ ++newDisplayOrder;
+ }
+
+ // Update the display order of the existing items in the folder.
+ for (const BookmarkStruct &bookmarkStruct : *itemsInFolderExceptSelectedListPointer)
+ {
+ // Set the bookmark's display order if it has changed.
+ if (bookmarkStruct.displayOrder != newDisplayOrder)
+ BookmarksDatabase::updateDisplayOrder(bookmarkStruct.databaseId, newDisplayOrder);
+
+ // Increment the new display order.
+ ++newDisplayOrder;
+ }
+}