From c4238838e7acc446a77fff08d5f1aaca332bea83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Fri, 13 Jun 2025 04:17:31 +0200 Subject: [PATCH] Allow overlap layouts to insert widgets at specific positions. --- cockatrice/src/client/ui/layouts/overlap_layout.cpp | 8 ++++++++ cockatrice/src/client/ui/layouts/overlap_layout.h | 1 + .../overlapped_card_group_display_widget.h | 3 +-- .../widgets/general/layout_containers/overlap_widget.cpp | 6 ++++++ .../ui/widgets/general/layout_containers/overlap_widget.h | 1 + 5 files changed, 17 insertions(+), 2 deletions(-) diff --git a/cockatrice/src/client/ui/layouts/overlap_layout.cpp b/cockatrice/src/client/ui/layouts/overlap_layout.cpp index 234bc41f4..8b5370844 100644 --- a/cockatrice/src/client/ui/layouts/overlap_layout.cpp +++ b/cockatrice/src/client/ui/layouts/overlap_layout.cpp @@ -54,6 +54,14 @@ OverlapLayout::~OverlapLayout() } } +void OverlapLayout::insertWidgetAtIndex(QWidget *toInsert, int index) +{ + addChildWidget(toInsert); + itemList.insert(qBound(0, index, std::max(0, static_cast(itemList.size()))), new QWidgetItem(toInsert)); + + invalidate(); +} + /** * @brief Adds a new item to the layout. * diff --git a/cockatrice/src/client/ui/layouts/overlap_layout.h b/cockatrice/src/client/ui/layouts/overlap_layout.h index d2cfca32a..ab823222a 100644 --- a/cockatrice/src/client/ui/layouts/overlap_layout.h +++ b/cockatrice/src/client/ui/layouts/overlap_layout.h @@ -18,6 +18,7 @@ public: Qt::Orientation overlapDirection = Qt::Vertical, Qt::Orientation flowDirection = Qt::Horizontal); ~OverlapLayout(); + void insertWidgetAtIndex(QWidget *toInsert, int index); void addItem(QLayoutItem *item) override; int count() const override; diff --git a/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.h b/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.h index 31bbdcb0e..1d5b2be5f 100644 --- a/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.h +++ b/cockatrice/src/client/ui/widgets/cards/card_group_display_widgets/overlapped_card_group_display_widget.h @@ -39,8 +39,7 @@ private: void insertIntoLayout(QWidget *toInsert, int insertAt) override { - Q_UNUSED(insertAt); - overlapWidget->addWidget(toInsert); + overlapWidget->insertWidgetAtIndex(toInsert, insertAt); } void removeFromLayout(QWidget *toRemove) override diff --git a/cockatrice/src/client/ui/widgets/general/layout_containers/overlap_widget.cpp b/cockatrice/src/client/ui/widgets/general/layout_containers/overlap_widget.cpp index 33f369ef6..8aa90dfc9 100644 --- a/cockatrice/src/client/ui/widgets/general/layout_containers/overlap_widget.cpp +++ b/cockatrice/src/client/ui/widgets/general/layout_containers/overlap_widget.cpp @@ -59,6 +59,12 @@ void OverlapWidget::addWidget(QWidget *widgetToAdd) const overlapLayout->addWidget(widgetToAdd); } +void OverlapWidget::insertWidgetAtIndex(QWidget *toInsert, int index) +{ + overlapLayout->insertWidgetAtIndex(toInsert, index); + update(); +} + void OverlapWidget::removeWidget(QWidget *widgetToRemove) const { overlapLayout->removeWidget(widgetToRemove); diff --git a/cockatrice/src/client/ui/widgets/general/layout_containers/overlap_widget.h b/cockatrice/src/client/ui/widgets/general/layout_containers/overlap_widget.h index 910362ebd..2d2a94132 100644 --- a/cockatrice/src/client/ui/widgets/general/layout_containers/overlap_widget.h +++ b/cockatrice/src/client/ui/widgets/general/layout_containers/overlap_widget.h @@ -17,6 +17,7 @@ public: Qt::Orientation direction, bool adjustOnResize = false); void addWidget(QWidget *widgetToAdd) const; + void insertWidgetAtIndex(QWidget *toInsert, int index); void removeWidget(QWidget *widgetToRemove) const; void clearLayout(); void adjustMaxColumnsAndRows();