Cockatrice 2026-03-05-Development-2.11.0-beta.54
A virtual tabletop for multiplayer card games
Loading...
Searching...
No Matches
tab_archidekt.h
Go to the documentation of this file.
1#ifndef COCKATRICE_TAB_ARCHIDEKT_H
2#define COCKATRICE_TAB_ARCHIDEKT_H
3
4#include "../../interface/widgets/cards/card_size_widget.h"
5#include "../../interface/widgets/quick_settings/settings_button_widget.h"
6#include "../../tab.h"
8
9#include <QCheckBox>
10#include <QComboBox>
11#include <QHBoxLayout>
12#include <QLabel>
13#include <QLineEdit>
14#include <QNetworkAccessManager>
15#include <QPushButton>
16#include <QScrollArea>
17#include <QSet>
18#include <QSpinBox>
19#include <QString>
20#include <QTimer>
21#include <QVBoxLayout>
22#include <QWidget>
24
26inline QString archidektApiLink = "https://archidekt.com/api/decks/v3/?name=";
27
29
37class TabArchidekt : public Tab
38{
39 Q_OBJECT
40public:
48 explicit TabArchidekt(TabSupervisor *_tabSupervisor);
49
56 void retranslateUi() override;
57
77 QString buildSearchUrl();
78
85 QString getTabText() const override
86 {
87 auto cardName = cardToQuery.isNull() ? QString() : cardToQuery->getName();
88 return tr("Archidekt: ") + cardName;
89 }
90
101
102public slots:
109 void doSearch();
110
117 void doSearchImmediate();
118
125 void loadNextPage();
126
134 void processApiJson(QNetworkReply *reply);
135
142 void processTopDecksResponse(QJsonObject reply);
143
150 void processDeckResponse(QJsonObject reply);
151
157 void prettyPrintJson(const QJsonValue &value, int indentLevel);
158
165 void actNavigatePage(QString url);
166
172 void getTopDecks();
173
174protected:
181 bool eventFilter(QObject *obj, QEvent *event) override;
182
183private:
190 void initializeUi();
191
202 void setupFilterWidgets();
203
210 void connectSignals();
211
219 void updatePackageModeState(bool isPackageMode);
220
221 // ---------------------------------------------------------------------
222 // Network & Timing
223 // ---------------------------------------------------------------------
224
225 QNetworkAccessManager *networkManager;
231
232 // ---------------------------------------------------------------------
233 // Layout Containers
234 // ---------------------------------------------------------------------
235
236 QWidget *container;
237 QVBoxLayout *mainLayout;
238
239 QWidget *primaryToolbar;
240 QHBoxLayout *primaryToolbarLayout;
241
244
245 QScrollArea *scrollArea;
247 QVBoxLayout *resultsLayout;
248
249 // ---------------------------------------------------------------------
250 // Primary Toolbar Controls (Most Important)
251 // ---------------------------------------------------------------------
252
253 QLabel *sortByLabel;
254 QComboBox *orderByCombo;
255 QPushButton *orderDirButton;
256
258 QList<ManaSymbolWidget *> colorSymbols;
259 QSet<QChar> activeColors;
260 QCheckBox *logicalAndCheck;
261
262 QLineEdit *nameField;
263 QLineEdit *ownerField;
264 QCheckBox *packagesCheck;
265 QPushButton *searchButton;
267
270
271 // ---------------------------------------------------------------------
272 // Secondary Toolbar Controls (Advanced Filters)
273 // ---------------------------------------------------------------------
274
275 QLineEdit *cardsField;
276 QLineEdit *commandersField;
277 QLineEdit *deckTagNameField;
278
280 QVector<QCheckBox *> formatChecks;
281 QComboBox *edhBracketCombo;
282
284 QSpinBox *minDeckSizeSpin;
286
287 // ---------------------------------------------------------------------
288 // Optional Context
289 // ---------------------------------------------------------------------
290
292};
293
294#endif // COCKATRICE_TAB_ARCHIDEKT_H
QSharedPointer< CardInfo > CardInfoPtr
Definition card_info.cpp:20
Displays a scrollable horizontal list of Archidekt deck listings with dynamic card sizing.
Definition archidekt_api_response_deck_listings_display_widget.h:48
A widget for adjusting card sizes using a slider.
Definition card_size_widget.h:21
Definition mana_symbol_widget.h:14
Definition settings_button_widget.h:17
QWidget * container
Root container for the entire tab.
Definition tab_archidekt.h:236
QHBoxLayout * secondaryToolbarLayout
Layout for secondary toolbar.
Definition tab_archidekt.h:243
QVBoxLayout * mainLayout
Outer vertical layout containing toolbars and results.
Definition tab_archidekt.h:237
QVBoxLayout * resultsLayout
Layout for results (decks appended here)
Definition tab_archidekt.h:247
SettingsButtonWidget * settingsButton
Container for card size settings.
Definition tab_archidekt.h:268
QVector< QCheckBox * > formatChecks
Individual checkboxes for each format.
Definition tab_archidekt.h:280
QTimer * searchDebounceTimer
Timer to debounce search requests.
Definition tab_archidekt.h:226
QSpinBox * minDeckSizeSpin
Spinner to select minimum deck size.
Definition tab_archidekt.h:284
QComboBox * orderByCombo
Dropdown for selecting the sort field.
Definition tab_archidekt.h:254
CardSizeWidget * getCardSizeSlider()
Get the card size slider widget.
Definition tab_archidekt.h:97
QCheckBox * logicalAndCheck
Require ALL selected colors instead of ANY.
Definition tab_archidekt.h:260
QPushButton * orderDirButton
Toggle button for ascending/descending sort.
Definition tab_archidekt.h:255
CardInfoPtr cardToQuery
Optional pre-selected card for initial filtering.
Definition tab_archidekt.h:291
void retranslateUi() override
Update all UI text to reflect the current language or translation.
Definition tab_archidekt.cpp:384
QCheckBox * packagesCheck
Toggle for searching card packages instead of full decks.
Definition tab_archidekt.h:264
QPushButton * advancedFiltersButton
Button to show/hide advanced filters.
Definition tab_archidekt.h:266
QLineEdit * cardsField
Input for cards included in the deck.
Definition tab_archidekt.h:275
QScrollArea * scrollArea
Scrollable area for results (enables infinite scroll)
Definition tab_archidekt.h:245
void connectSignals()
Connect all signals and slots for UI interactions.
Definition tab_archidekt.cpp:324
QComboBox * minDeckSizeLogicCombo
Combo box for size comparison logic.
Definition tab_archidekt.h:285
void processApiJson(QNetworkReply *reply)
Process a network reply containing JSON data.
Definition tab_archidekt.cpp:561
QLabel * sortByLabel
Label for sort controls.
Definition tab_archidekt.h:253
void prettyPrintJson(const QJsonValue &value, int indentLevel)
Pretty-print a QJsonValue for debugging.
Definition tab_archidekt.cpp:644
void updatePackageModeState(bool isPackageMode)
Update UI state when package mode is toggled.
Definition tab_archidekt.cpp:368
QHBoxLayout * primaryToolbarLayout
Layout for primary toolbar.
Definition tab_archidekt.h:240
QString buildSearchUrl()
Construct the search URL from all current filters.
Definition tab_archidekt.cpp:411
CardSizeWidget * cardSizeSlider
Slider to adjust card size in results.
Definition tab_archidekt.h:269
QList< ManaSymbolWidget * > colorSymbols
Mana symbol toggle buttons.
Definition tab_archidekt.h:258
void actNavigatePage(QString url)
Navigate to a specified page URL.
Definition tab_archidekt.cpp:546
int currentPage
Current page number for infinite scroll.
Definition tab_archidekt.h:227
ArchidektApiResponseDeckListingsDisplayWidget * listingsWidget
Definition tab_archidekt.h:230
QComboBox * edhBracketCombo
Dropdown for EDH bracket selection.
Definition tab_archidekt.h:281
bool isLoadingMore
Flag to prevent multiple simultaneous page loads.
Definition tab_archidekt.h:228
QLineEdit * ownerField
Input for owner name filter.
Definition tab_archidekt.h:263
void doSearch()
Trigger a debounced search using the current filters.
Definition tab_archidekt.cpp:513
QLineEdit * nameField
Input for deck name filter.
Definition tab_archidekt.h:262
QWidget * primaryToolbar
Primary toolbar with most important filters.
Definition tab_archidekt.h:239
void loadNextPage()
Load the next page of results for infinite scroll.
Definition tab_archidekt.cpp:531
QSet< QChar > activeColors
Set of currently active mana colors.
Definition tab_archidekt.h:259
QNetworkAccessManager * networkManager
Network manager for handling API requests.
Definition tab_archidekt.h:225
void processDeckResponse(QJsonObject reply)
Handle a JSON response for a single deck.
Definition tab_archidekt.cpp:621
QString getTabText() const override
Retrieve the tab display text.
Definition tab_archidekt.h:85
QLineEdit * commandersField
Input for commander cards.
Definition tab_archidekt.h:276
bool isListMode
Definition tab_archidekt.h:229
void setupFilterWidgets()
Set up all filter widgets.
Definition tab_archidekt.cpp:200
void doSearchImmediate()
Immediately trigger a search using the current filters.
Definition tab_archidekt.cpp:523
QLabel * filterByLabel
Label for filter controls.
Definition tab_archidekt.h:257
void getTopDecks()
Fetch top decks from the Archidekt API.
Definition tab_archidekt.cpp:553
SettingsButtonWidget * formatButton
Collapsible button for format filters.
Definition tab_archidekt.h:279
QWidget * resultsContainer
Container widget inside scroll area.
Definition tab_archidekt.h:246
QWidget * secondaryToolbar
Secondary toolbar with advanced filters.
Definition tab_archidekt.h:242
QPushButton * searchButton
Button to trigger search.
Definition tab_archidekt.h:265
SettingsButtonWidget * deckSizeButton
Collapsible button for deck size filter.
Definition tab_archidekt.h:283
void processTopDecksResponse(QJsonObject reply)
Handle a JSON response containing multiple decks.
Definition tab_archidekt.cpp:593
TabArchidekt(TabSupervisor *_tabSupervisor)
Construct a new TabArchidekt object.
Definition tab_archidekt.cpp:32
QLineEdit * deckTagNameField
Input for deck tag filtering.
Definition tab_archidekt.h:277
void initializeUi()
Initialize the main UI layout and toolbars.
Definition tab_archidekt.cpp:55
bool eventFilter(QObject *obj, QEvent *event) override
Event filter to catch wheel events for infinite scroll.
Definition tab_archidekt.cpp:184
Definition tab_supervisor.h:83
Tab(TabSupervisor *_tabSupervisor)
Definition tab.cpp:11
TODO: Document this.
QString archidektApiLink
Definition tab_archidekt.h:26