mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-14 22:42:14 -07:00
refactor sorting in VDS
This commit is contained in:
parent
1329da6980
commit
0ef3aef12d
5 changed files with 35 additions and 31 deletions
|
|
@ -180,6 +180,32 @@ void VisualDeckStorageFolderDisplayWidget::updateShowFolders(bool enabled)
|
||||||
header->setHidden(!showFolders);
|
header->setHidden(!showFolders);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Sorts the DeckPreviewWidgets in this folder and all subfolders
|
||||||
|
*
|
||||||
|
* @param comparator The comparator to use for sorting
|
||||||
|
*/
|
||||||
|
void VisualDeckStorageFolderDisplayWidget::sortBy(
|
||||||
|
const std::function<bool(DeckPreviewWidget *, DeckPreviewWidget *)> &comparator)
|
||||||
|
{
|
||||||
|
auto deckPreviewWidgets = flowWidget->findChildren<DeckPreviewWidget *>();
|
||||||
|
|
||||||
|
std::sort(deckPreviewWidgets.begin(), deckPreviewWidgets.end(), comparator);
|
||||||
|
|
||||||
|
// manually removing and re-adding is the only way to reorder widgets in a flowWidget
|
||||||
|
for (DeckPreviewWidget *previewWidget : deckPreviewWidgets) {
|
||||||
|
flowWidget->removeWidget(previewWidget);
|
||||||
|
}
|
||||||
|
for (DeckPreviewWidget *previewWidget : deckPreviewWidgets) {
|
||||||
|
flowWidget->addWidget(previewWidget);
|
||||||
|
}
|
||||||
|
|
||||||
|
// also sort all subfolders
|
||||||
|
for (auto *subFolder : findChildren<VisualDeckStorageFolderDisplayWidget *>()) {
|
||||||
|
subFolder->sortBy(comparator);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Steals all DeckPreviewWidgets from this widget's nested subfolders, and deletes those subfolders
|
* Steals all DeckPreviewWidgets from this widget's nested subfolders, and deletes those subfolders
|
||||||
*/
|
*/
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ public:
|
||||||
void refreshUi();
|
void refreshUi();
|
||||||
void createWidgetsForFiles();
|
void createWidgetsForFiles();
|
||||||
void createWidgetsForFolders();
|
void createWidgetsForFolders();
|
||||||
|
void sortBy(const std::function<bool(DeckPreviewWidget *, DeckPreviewWidget *)> &comparator);
|
||||||
void flattenFolderStructure();
|
void flattenFolderStructure();
|
||||||
QStringList gatherAllTagsFromFlowWidget() const;
|
QStringList gatherAllTagsFromFlowWidget() const;
|
||||||
FlowWidget *getFlowWidget() const
|
FlowWidget *getFlowWidget() const
|
||||||
|
|
|
||||||
|
|
@ -63,32 +63,13 @@ void VisualDeckStorageSortWidget::updateSortOrder()
|
||||||
emit sortOrderChanged();
|
emit sortOrderChanged();
|
||||||
}
|
}
|
||||||
|
|
||||||
void VisualDeckStorageSortWidget::sortFolder(VisualDeckStorageFolderDisplayWidget *folderWidget)
|
|
||||||
{
|
|
||||||
auto children =
|
|
||||||
folderWidget->getFlowWidget()->findChildren<QWidget *>(QString(), Qt::FindChildOption::FindDirectChildrenOnly);
|
|
||||||
for (auto widget : children) {
|
|
||||||
auto deckPreviewWidgets =
|
|
||||||
widget->findChildren<DeckPreviewWidget *>(QString(), Qt::FindChildOption::FindDirectChildrenOnly);
|
|
||||||
sortDecks(deckPreviewWidgets);
|
|
||||||
for (DeckPreviewWidget *previewWidget : deckPreviewWidgets) {
|
|
||||||
folderWidget->getFlowWidget()->removeWidget(previewWidget);
|
|
||||||
}
|
|
||||||
for (DeckPreviewWidget *previewWidget : deckPreviewWidgets) {
|
|
||||||
folderWidget->getFlowWidget()->addWidget(previewWidget);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Sorts the DeckPreviewWidget list in-place, using the currently selected sortOrder
|
* Gets the comparator that is used for the current sortOrder
|
||||||
*
|
|
||||||
* @param widgets The list of widgets to sort
|
|
||||||
*/
|
*/
|
||||||
void VisualDeckStorageSortWidget::sortDecks(QList<DeckPreviewWidget *> widgets)
|
std::function<bool(DeckPreviewWidget *, DeckPreviewWidget *)> VisualDeckStorageSortWidget::getComparator() const
|
||||||
{
|
{
|
||||||
// Sort the widgets list based on the current sort order
|
// Sort the widgets list based on the current sort order
|
||||||
std::sort(widgets.begin(), widgets.end(), [this](DeckPreviewWidget *widget1, DeckPreviewWidget *widget2) {
|
return [this](DeckPreviewWidget *widget1, DeckPreviewWidget *widget2) {
|
||||||
if (!widget1 || !widget2) {
|
if (!widget1 || !widget2) {
|
||||||
return false; // Handle null pointers gracefully
|
return false; // Handle null pointers gracefully
|
||||||
}
|
}
|
||||||
|
|
@ -111,5 +92,5 @@ void VisualDeckStorageSortWidget::sortDecks(QList<DeckPreviewWidget *> widgets)
|
||||||
}
|
}
|
||||||
|
|
||||||
return false; // Default case, no sorting applied
|
return false; // Default case, no sorting applied
|
||||||
});
|
};
|
||||||
}
|
}
|
||||||
|
|
@ -17,9 +17,9 @@ public:
|
||||||
explicit VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent);
|
explicit VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent);
|
||||||
void retranslateUi();
|
void retranslateUi();
|
||||||
void updateSortOrder();
|
void updateSortOrder();
|
||||||
void sortFolder(VisualDeckStorageFolderDisplayWidget *folderWidget);
|
std::function<bool(DeckPreviewWidget *, DeckPreviewWidget *)> getComparator() const;
|
||||||
|
|
||||||
QString getSearchText();
|
QString getSearchText();
|
||||||
void sortDecks(QList<DeckPreviewWidget *> widgets);
|
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void sortOrderChanged();
|
void sortOrderChanged();
|
||||||
|
|
|
||||||
|
|
@ -197,11 +197,7 @@ void VisualDeckStorageWidget::updateShowFolders(bool enabled)
|
||||||
void VisualDeckStorageWidget::updateSortOrder()
|
void VisualDeckStorageWidget::updateSortOrder()
|
||||||
{
|
{
|
||||||
if (folderWidget) {
|
if (folderWidget) {
|
||||||
sortWidget->sortFolder(folderWidget);
|
folderWidget->sortBy(sortWidget->getComparator());
|
||||||
for (VisualDeckStorageFolderDisplayWidget *subFolderWidget :
|
|
||||||
folderWidget->findChildren<VisualDeckStorageFolderDisplayWidget *>()) {
|
|
||||||
sortWidget->sortFolder(subFolderWidget);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue