From af75cfcd89dea4ad6e83821635186b79bc854c81 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Lukas=20Br=C3=BCbach?= Date: Tue, 3 Dec 2024 05:08:07 +0100 Subject: [PATCH] Pivot to a view options toolbar. --- cockatrice/CMakeLists.txt | 2 + .../printing_selector/printing_selector.cpp | 4 + .../printing_selector/printing_selector.h | 2 + ...g_selector_view_options_toolbar_widget.cpp | 100 ++++++++++++++++++ ...ing_selector_view_options_toolbar_widget.h | 36 +++++++ .../printing_selector_view_options_widget.cpp | 25 +++++ .../printing_selector_view_options_widget.h | 26 +++++ 7 files changed, 195 insertions(+) create mode 100644 cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.cpp create mode 100644 cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.h create mode 100644 cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.cpp create mode 100644 cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.h diff --git a/cockatrice/CMakeLists.txt b/cockatrice/CMakeLists.txt index 12b98fd6b..6a7719f46 100644 --- a/cockatrice/CMakeLists.txt +++ b/cockatrice/CMakeLists.txt @@ -103,6 +103,8 @@ set(cockatrice_SOURCES src/client/ui/widgets/printing_selector/printing_selector_card_search_widget.cpp src/client/ui/widgets/printing_selector/printing_selector_card_selection_widget.cpp src/client/ui/widgets/printing_selector/printing_selector_card_sorting_widget.cpp + src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.cpp + src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.cpp src/client/ui/widgets/printing_selector/set_name_and_collectors_number_display_widget.cpp src/client/network/release_channel.cpp src/server/remote/remote_client.cpp diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.cpp b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.cpp index 58555ce32..31985b5a4 100644 --- a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.cpp +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.cpp @@ -5,6 +5,7 @@ #include "printing_selector_card_search_widget.h" #include "printing_selector_card_selection_widget.h" #include "printing_selector_card_sorting_widget.h" +#include "printing_selector_view_options_toolbar_widget.h" #include @@ -19,6 +20,9 @@ PrintingSelector::PrintingSelector(QWidget *parent, setLayout(layout); widgetLoadingBufferTimer = new QTimer(this); + viewOptionsToolbar = new PrintingSelectorViewOptionsToolbarWidget(this, this); + layout->addWidget(viewOptionsToolbar); + sortToolBar = new PrintingSelectorCardSortingWidget(this); layout->addWidget(sortToolBar); diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.h b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.h index ebb5c985e..5361443a1 100644 --- a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.h +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector.h @@ -17,6 +17,7 @@ class PrintingSelectorCardSearchWidget; class PrintingSelectorCardSelectionWidget; class PrintingSelectorCardSortingWidget; +class PrintingSelectorViewOptionsToolbarWidget; class TabDeckEditor; class PrintingSelector : public QWidget { @@ -35,6 +36,7 @@ public slots: private: QVBoxLayout *layout; + PrintingSelectorViewOptionsToolbarWidget *viewOptionsToolbar; PrintingSelectorCardSortingWidget *sortToolBar; PrintingSelectorCardSearchWidget *searchBar; FlowWidget *flowWidget; diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.cpp b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.cpp new file mode 100644 index 000000000..419731115 --- /dev/null +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.cpp @@ -0,0 +1,100 @@ +#include "printing_selector_view_options_toolbar_widget.h" + +#include +#include +#include + +PrintingSelectorViewOptionsToolbarWidget::PrintingSelectorViewOptionsToolbarWidget( + QWidget *_parent, + PrintingSelector *_printingSelector) + : QWidget(_parent), printingSelector(_printingSelector) +{ + layout = new QVBoxLayout(); + layout->setContentsMargins(0, 0, 0, 0); + layout->setSpacing(0); + setLayout(layout); + + expandedWidget = new QWidget(this); + QVBoxLayout *expandedLayout = new QVBoxLayout(expandedWidget); + expandedLayout->setContentsMargins(0, 0, 0, 0); + expandedLayout->setSpacing(0); + + collapseButton = new QPushButton("▼", this); + collapseButton->setFixedSize(20, 20); + collapseButton->setToolTip("Collapse"); + collapseButton->setStyleSheet("border: none;"); + connect(collapseButton, &QPushButton::clicked, this, &PrintingSelectorViewOptionsToolbarWidget::collapse); + expandedLayout->addWidget(collapseButton, 0, Qt::AlignLeft); + + viewOptions = new PrintingSelectorViewOptionsWidget(expandedWidget); + expandedLayout->addWidget(viewOptions); + + expandedWidget->setLayout(expandedLayout); + + collapsedWidget = new QWidget(this); + QHBoxLayout *collapsedLayout = new QHBoxLayout(collapsedWidget); + collapsedLayout->setContentsMargins(5, 0, 5, 0); + collapsedLayout->setSpacing(0); + + expandButton = new QPushButton("▲", this); + expandButton->setFixedSize(20, 20); + expandButton->setToolTip("Expand"); + expandButton->setStyleSheet("border: none;"); + connect(expandButton, &QPushButton::clicked, this, &PrintingSelectorViewOptionsToolbarWidget::expand); + collapsedLayout->addWidget(expandButton); + + QLabel *collapsedLabel = new QLabel(tr("Display Options"), this); + collapsedLayout->addWidget(collapsedLabel); + + collapsedWidget->setLayout(collapsedLayout); + + stackedWidget = new QStackedWidget(this); + stackedWidget->addWidget(expandedWidget); + stackedWidget->addWidget(collapsedWidget); + + layout->addWidget(stackedWidget); + + setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed); + + stackedWidget->setCurrentWidget(expandedWidget); + + connect(stackedWidget, &QStackedWidget::currentChanged, this, + &PrintingSelectorViewOptionsToolbarWidget::onWidgetChanged); +} + +void PrintingSelectorViewOptionsToolbarWidget::collapse() +{ + stackedWidget->setCurrentWidget(collapsedWidget); + updateGeometry(); +} + +void PrintingSelectorViewOptionsToolbarWidget::expand() +{ + stackedWidget->setCurrentWidget(expandedWidget); + updateGeometry(); +} + +// Handle Geometry Update +void PrintingSelectorViewOptionsToolbarWidget::onWidgetChanged(int) +{ + updateGeometry(); + if (parentWidget() && parentWidget()->layout()) { + parentWidget()->layout()->invalidate(); + } +} + +// Size Hints +QSize PrintingSelectorViewOptionsToolbarWidget::sizeHint() const +{ + return stackedWidget->currentWidget()->sizeHint(); +} + +QSize PrintingSelectorViewOptionsToolbarWidget::minimumSizeHint() const +{ + return stackedWidget->currentWidget()->minimumSizeHint(); +} + +PrintingSelectorViewOptionsWidget* PrintingSelectorViewOptionsToolbarWidget::getViewOptionsWidget() const +{ + return viewOptions; +} \ No newline at end of file diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.h b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.h new file mode 100644 index 000000000..cb91031c4 --- /dev/null +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_toolbar_widget.h @@ -0,0 +1,36 @@ +#ifndef PRINTING_SELECTOR_SORT_AND_SEARCH_TOOLBAR_WIDGET_H +#define PRINTING_SELECTOR_SORT_AND_SEARCH_TOOLBAR_WIDGET_H + +#include "printing_selector.h" +#include "printing_selector_view_options_widget.h" + +#include +#include +#include +#include + +class PrintingSelectorViewOptionsToolbarWidget : public QWidget +{ + Q_OBJECT + +public: + explicit PrintingSelectorViewOptionsToolbarWidget(QWidget *parent, PrintingSelector *printingSelector); + void collapse(); + void expand(); + void onWidgetChanged(int); + QSize sizeHint() const override; + QSize minimumSizeHint() const override; + PrintingSelectorViewOptionsWidget *getViewOptionsWidget() const; + +private: + QVBoxLayout *layout; + PrintingSelector *printingSelector; + PrintingSelectorViewOptionsWidget *viewOptions; + QWidget *expandedWidget; + QPushButton *collapseButton; + QWidget *collapsedWidget; + QPushButton *expandButton; + QStackedWidget *stackedWidget; +}; + +#endif // PRINTING_SELECTOR_SORT_AND_SEARCH_TOOLBAR_WIDGET_H diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.cpp b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.cpp new file mode 100644 index 000000000..3266b78d2 --- /dev/null +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.cpp @@ -0,0 +1,25 @@ +#include "printing_selector_view_options_widget.h" + +PrintingSelectorViewOptionsWidget::PrintingSelectorViewOptionsWidget(QWidget *parent) : QWidget(parent) +{ + layout = new QHBoxLayout(this); + setLayout(layout); + + flowWidget = new FlowWidget(this, Qt::ScrollBarPolicy::ScrollBarAlwaysOff, Qt::ScrollBarPolicy::ScrollBarAsNeeded); + + sortCheckBox = new QCheckBox(flowWidget); + sortCheckBox->setText(tr("Display Sorting Options")); + searchCheckBox = new QCheckBox(flowWidget); + searchCheckBox->setText(tr("Display Search Bar")); + cardSizeCheckBox = new QCheckBox(flowWidget); + cardSizeCheckBox->setText(tr("Display Card Size Slider")); + navigationCheckBox = new QCheckBox(flowWidget); + navigationCheckBox->setText(tr("Display Navigation Buttons")); + + flowWidget->addWidget(sortCheckBox); + flowWidget->addWidget(searchCheckBox); + flowWidget->addWidget(cardSizeCheckBox); + flowWidget->addWidget(navigationCheckBox); + + layout->addWidget(flowWidget); +} \ No newline at end of file diff --git a/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.h b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.h new file mode 100644 index 000000000..120456fcd --- /dev/null +++ b/cockatrice/src/client/ui/widgets/printing_selector/printing_selector_view_options_widget.h @@ -0,0 +1,26 @@ +#ifndef PRINTING_SELECTOR_VIEW_OPTIONS_WIDGET_H +#define PRINTING_SELECTOR_VIEW_OPTIONS_WIDGET_H + +#include "../general/layout_containers/flow_widget.h" + +#include +#include +#include + +class PrintingSelectorViewOptionsWidget : public QWidget +{ + Q_OBJECT + +public: + explicit PrintingSelectorViewOptionsWidget(QWidget *parent); + +private: + QHBoxLayout *layout; + FlowWidget *flowWidget; + QCheckBox *sortCheckBox; + QCheckBox *searchCheckBox; + QCheckBox *cardSizeCheckBox; + QCheckBox *navigationCheckBox; +}; + +#endif // PRINTING_SELECTOR_VIEW_OPTIONS_WIDGET_H