mirror of
https://github.com/Cockatrice/Cockatrice.git
synced 2026-07-14 06:22:15 -07:00
Merge a4e2692244 into f484c98152
This commit is contained in:
commit
4681f00c39
5 changed files with 41 additions and 30 deletions
|
|
@ -186,6 +186,36 @@ void VisualDeckStorageFolderDisplayWidget::updateShowFolders(bool enabled)
|
|||
header->setHidden(!showFolders);
|
||||
}
|
||||
|
||||
/**
|
||||
* Sorts the DeckPreviewWidgets in this folder
|
||||
*
|
||||
* @param comparator The comparator to use for sorting
|
||||
* @param recursive Also sort all nested subfolders
|
||||
*/
|
||||
void VisualDeckStorageFolderDisplayWidget::sortBy(
|
||||
const std::function<bool(DeckPreviewWidget *, DeckPreviewWidget *)> &comparator,
|
||||
bool recursive)
|
||||
{
|
||||
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);
|
||||
}
|
||||
|
||||
if (recursive) {
|
||||
// also sort all subfolders
|
||||
for (auto *subFolder : findChildren<VisualDeckStorageFolderDisplayWidget *>()) {
|
||||
subFolder->sortBy(comparator, false);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Steals all DeckPreviewWidgets from this widget's nested subfolders, and deletes those subfolders
|
||||
*/
|
||||
|
|
|
|||
|
|
@ -20,6 +20,7 @@ public:
|
|||
void refreshUi();
|
||||
void createWidgetsForFiles();
|
||||
void createWidgetsForFolders();
|
||||
void sortBy(const std::function<bool(DeckPreviewWidget *, DeckPreviewWidget *)> &comparator, bool recursive = true);
|
||||
void flattenFolderStructure();
|
||||
QStringList gatherAllTagsFromFlowWidget() const;
|
||||
FlowWidget *getFlowWidget() const
|
||||
|
|
|
|||
|
|
@ -63,27 +63,13 @@ void VisualDeckStorageSortWidget::updateSortOrder()
|
|||
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);
|
||||
auto newOrder = filterFiles(deckPreviewWidgets);
|
||||
for (DeckPreviewWidget *previewWidget : newOrder) {
|
||||
folderWidget->getFlowWidget()->removeWidget(previewWidget);
|
||||
}
|
||||
for (DeckPreviewWidget *previewWidget : newOrder) {
|
||||
folderWidget->getFlowWidget()->addWidget(previewWidget);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
QList<DeckPreviewWidget *> VisualDeckStorageSortWidget::filterFiles(QList<DeckPreviewWidget *> widgets)
|
||||
/**
|
||||
* Gets the comparator that is used for the current sortOrder
|
||||
*/
|
||||
std::function<bool(DeckPreviewWidget *, DeckPreviewWidget *)> VisualDeckStorageSortWidget::getComparator() const
|
||||
{
|
||||
// Sort the widgets list based on the current sort order
|
||||
std::sort(widgets.begin(), widgets.end(), [this](DeckPreviewWidget *widget1, DeckPreviewWidget *widget2) {
|
||||
return [sortOrder = sortOrder](const DeckPreviewWidget *widget1, const DeckPreviewWidget *widget2) {
|
||||
if (!widget1 || !widget2) {
|
||||
return false; // Handle null pointers gracefully
|
||||
}
|
||||
|
|
@ -106,7 +92,5 @@ QList<DeckPreviewWidget *> VisualDeckStorageSortWidget::filterFiles(QList<DeckPr
|
|||
}
|
||||
|
||||
return false; // Default case, no sorting applied
|
||||
});
|
||||
|
||||
return widgets;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
@ -17,9 +17,9 @@ public:
|
|||
explicit VisualDeckStorageSortWidget(VisualDeckStorageWidget *parent);
|
||||
void retranslateUi();
|
||||
void updateSortOrder();
|
||||
void sortFolder(VisualDeckStorageFolderDisplayWidget *folderWidget);
|
||||
std::function<bool(DeckPreviewWidget *, DeckPreviewWidget *)> getComparator() const;
|
||||
|
||||
QString getSearchText();
|
||||
QList<DeckPreviewWidget *> filterFiles(QList<DeckPreviewWidget *> widgets);
|
||||
|
||||
signals:
|
||||
void sortOrderChanged();
|
||||
|
|
|
|||
|
|
@ -167,11 +167,7 @@ void VisualDeckStorageWidget::updateShowFolders(bool enabled)
|
|||
void VisualDeckStorageWidget::updateSortOrder()
|
||||
{
|
||||
if (folderWidget) {
|
||||
sortWidget->sortFolder(folderWidget);
|
||||
for (VisualDeckStorageFolderDisplayWidget *subFolderWidget :
|
||||
folderWidget->findChildren<VisualDeckStorageFolderDisplayWidget *>()) {
|
||||
sortWidget->sortFolder(subFolderWidget);
|
||||
}
|
||||
folderWidget->sortBy(sortWidget->getComparator());
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue