Cockatrice 2026-10-19-Development-3.1.2-beta.2
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 "../../tab.h"
6
7#include <QChar>
8#include <QJsonObject>
9#include <QJsonValue>
10#include <QList>
11#include <QSet>
12#include <QString>
13#include <QVector>
14#include <qtmetamacros.h>
15
17class CardSizeWidget;
18class QCheckBox;
19class QComboBox;
20class QHBoxLayout;
21class QLabel;
22class QLineEdit;
23class QNetworkAccessManager;
24class QNetworkReply;
25class QPushButton;
26class QScrollArea;
27class QSpinBox;
28class QTimer;
29class QVBoxLayout;
30class QWidget;
32class TabSupervisor;
33
35inline QString archidektApiLink = "https://archidekt.com/api/decks/v3/?name=";
36
38
46class TabArchidekt : public Tab
47{
48 Q_OBJECT
49public:
57 explicit TabArchidekt(TabSupervisor *_tabSupervisor);
58
65 void retranslateUi() override;
66
86 QString buildSearchUrl();
87
94 QString getTabText() const override
95 {
96 auto cardName = cardToQuery.isNull() ? QString() : cardToQuery->getName();
97 return tr("Archidekt: ") + cardName;
98 }
99
110
111public slots:
118 void doSearch();
119
126 void doSearchImmediate();
127
134 void loadNextPage();
135
143 void processApiJson(QNetworkReply *reply);
144
151 void processTopDecksResponse(QJsonObject reply);
152
159 void processDeckResponse(QJsonObject reply);
160
166 void prettyPrintJson(const QJsonValue &value, int indentLevel);
167
174 void actNavigatePage(QString url);
175
181 void getTopDecks();
182
183protected:
190 bool eventFilter(QObject *obj, QEvent *event) override;
191
192private:
199 void initializeUi();
200
211 void setupFilterWidgets();
212
219 void connectSignals();
220
228 void updatePackageModeState(bool isPackageMode);
229
230 // ---------------------------------------------------------------------
231 // Network & Timing
232 // ---------------------------------------------------------------------
233
234 QNetworkAccessManager *networkManager;
240
241 // ---------------------------------------------------------------------
242 // Layout Containers
243 // ---------------------------------------------------------------------
244
245 QWidget *container;
246 QVBoxLayout *mainLayout;
247
248 QWidget *primaryToolbar;
249 QHBoxLayout *primaryToolbarLayout;
250
253
254 QScrollArea *scrollArea;
256 QVBoxLayout *resultsLayout;
257
258 // ---------------------------------------------------------------------
259 // Primary Toolbar Controls (Most Important)
260 // ---------------------------------------------------------------------
261
262 QLabel *sortByLabel;
263 QComboBox *orderByCombo;
264 QPushButton *orderDirButton;
265
269 QCheckBox *logicalAndCheck;
270
271 QLineEdit *nameField;
272 QLineEdit *ownerField;
273 QCheckBox *packagesCheck;
274 QPushButton *searchButton;
276
279
280 // ---------------------------------------------------------------------
281 // Secondary Toolbar Controls (Advanced Filters)
282 // ---------------------------------------------------------------------
283
284 QLineEdit *cardsField;
285 QLineEdit *commandersField;
286 QLineEdit *deckTagNameField;
287
289 QVector<QCheckBox *> formatChecks;
290 QComboBox *edhBracketCombo;
291
293 QSpinBox *minDeckSizeSpin;
295
296 // ---------------------------------------------------------------------
297 // Optional Context
298 // ---------------------------------------------------------------------
299
301};
302
303#endif // COCKATRICE_TAB_ARCHIDEKT_H
QSharedPointer< CardInfo > CardInfoPtr
Definition card_info.cpp:15
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:23
Definition mana_symbol_widget.h:19
Definition remote_connection_controller.h:20
Definition dlg_manage_sets.h:29
Definition settings_button_widget.h:21
QWidget * container
Root container for the entire tab.
Definition tab_archidekt.h:245
QHBoxLayout * secondaryToolbarLayout
Layout for secondary toolbar.
Definition tab_archidekt.h:252
QVBoxLayout * mainLayout
Outer vertical layout containing toolbars and results.
Definition tab_archidekt.h:246
QVBoxLayout * resultsLayout
Layout for results (decks appended here).
Definition tab_archidekt.h:256
SettingsButtonWidget * settingsButton
Container for card size settings.
Definition tab_archidekt.h:277
QVector< QCheckBox * > formatChecks
Individual checkboxes for each format.
Definition tab_archidekt.h:289
QTimer * searchDebounceTimer
Timer to debounce search requests.
Definition tab_archidekt.h:235
QSpinBox * minDeckSizeSpin
Spinner to select minimum deck size.
Definition tab_archidekt.h:293
QComboBox * orderByCombo
Dropdown for selecting the sort field.
Definition tab_archidekt.h:263
CardSizeWidget * getCardSizeSlider()
Get the card size slider widget.
Definition tab_archidekt.h:106
QCheckBox * logicalAndCheck
Require ALL selected colors instead of ANY.
Definition tab_archidekt.h:269
QPushButton * orderDirButton
Toggle button for ascending/descending sort.
Definition tab_archidekt.h:264
CardInfoPtr cardToQuery
Optional pre-selected card for initial filtering.
Definition tab_archidekt.h:300
void retranslateUi() override
Update all UI text to reflect the current language or translation.
Definition tab_archidekt.cpp:385
QCheckBox * packagesCheck
Toggle for searching card packages instead of full decks.
Definition tab_archidekt.h:273
QPushButton * advancedFiltersButton
Button to show/hide advanced filters.
Definition tab_archidekt.h:275
QLineEdit * cardsField
Input for cards included in the deck.
Definition tab_archidekt.h:284
QScrollArea * scrollArea
Scrollable area for results (enables infinite scroll).
Definition tab_archidekt.h:254
void connectSignals()
Connect all signals and slots for UI interactions.
Definition tab_archidekt.cpp:325
QComboBox * minDeckSizeLogicCombo
Combo box for size comparison logic.
Definition tab_archidekt.h:294
void processApiJson(QNetworkReply *reply)
Process a network reply containing JSON data.
Definition tab_archidekt.cpp:563
QLabel * sortByLabel
Label for sort controls.
Definition tab_archidekt.h:262
void prettyPrintJson(const QJsonValue &value, int indentLevel)
Pretty-print a QJsonValue for debugging.
Definition tab_archidekt.cpp:646
void updatePackageModeState(bool isPackageMode)
Update UI state when package mode is toggled.
Definition tab_archidekt.cpp:369
QHBoxLayout * primaryToolbarLayout
Layout for primary toolbar.
Definition tab_archidekt.h:249
QString buildSearchUrl()
Construct the search URL from all current filters.
Definition tab_archidekt.cpp:412
CardSizeWidget * cardSizeSlider
Slider to adjust card size in results.
Definition tab_archidekt.h:278
QList< ManaSymbolWidget * > colorSymbols
Mana symbol toggle buttons.
Definition tab_archidekt.h:267
void actNavigatePage(QString url)
Navigate to a specified page URL.
Definition tab_archidekt.cpp:548
int currentPage
Current page number for infinite scroll.
Definition tab_archidekt.h:236
ArchidektApiResponseDeckListingsDisplayWidget * listingsWidget
Definition tab_archidekt.h:239
QComboBox * edhBracketCombo
Dropdown for EDH bracket selection.
Definition tab_archidekt.h:290
bool isLoadingMore
Flag to prevent multiple simultaneous page loads.
Definition tab_archidekt.h:237
QLineEdit * ownerField
Input for owner name filter.
Definition tab_archidekt.h:272
void doSearch()
Trigger a debounced search using the current filters.
Definition tab_archidekt.cpp:515
QLineEdit * nameField
Input for deck name filter.
Definition tab_archidekt.h:271
QWidget * primaryToolbar
Primary toolbar with most important filters.
Definition tab_archidekt.h:248
void loadNextPage()
Load the next page of results for infinite scroll.
Definition tab_archidekt.cpp:533
QSet< QChar > activeColors
Set of currently active mana colors.
Definition tab_archidekt.h:268
QNetworkAccessManager * networkManager
Network manager for handling API requests.
Definition tab_archidekt.h:234
void processDeckResponse(QJsonObject reply)
Handle a JSON response for a single deck.
Definition tab_archidekt.cpp:623
QString getTabText() const override
Retrieve the tab display text.
Definition tab_archidekt.h:94
QLineEdit * commandersField
Input for commander cards.
Definition tab_archidekt.h:285
bool isListMode
Definition tab_archidekt.h:238
void setupFilterWidgets()
Set up all filter widgets.
Definition tab_archidekt.cpp:226
void doSearchImmediate()
Immediately trigger a search using the current filters.
Definition tab_archidekt.cpp:525
QLabel * filterByLabel
Label for filter controls.
Definition tab_archidekt.h:266
void getTopDecks()
Fetch top decks from the Archidekt API.
Definition tab_archidekt.cpp:555
SettingsButtonWidget * formatButton
Collapsible button for format filters.
Definition tab_archidekt.h:288
QWidget * resultsContainer
Container widget inside scroll area.
Definition tab_archidekt.h:255
QWidget * secondaryToolbar
Secondary toolbar with advanced filters.
Definition tab_archidekt.h:251
QPushButton * searchButton
Button to trigger search.
Definition tab_archidekt.h:274
SettingsButtonWidget * deckSizeButton
Collapsible button for deck size filter.
Definition tab_archidekt.h:292
void processTopDecksResponse(QJsonObject reply)
Handle a JSON response containing multiple decks.
Definition tab_archidekt.cpp:595
TabArchidekt(TabSupervisor *_tabSupervisor)
Construct a new TabArchidekt object.
Definition tab_archidekt.cpp:56
QLineEdit * deckTagNameField
Input for deck tag filtering.
Definition tab_archidekt.h:286
void initializeUi()
Initialize the main UI layout and toolbars.
Definition tab_archidekt.cpp:79
bool eventFilter(QObject *obj, QEvent *event) override
Event filter to catch wheel events for infinite scroll.
Definition tab_archidekt.cpp:210
Definition tab_supervisor.h:92
Tab(TabSupervisor *_tabSupervisor)
Definition tab.cpp:16
QString archidektApiLink
Definition tab_archidekt.h:35